Project

General

Profile

Statistics
| Branch: | Tag: | Revision:

vigiboard / vigiboard / tests / functional / test_search_form_service.py @ a2744508

History | View | Annotate | Download (6.39 KB)

1
# -*- coding: utf-8 -*-
2
# Copyright (C) 2006-2012 CS-SI
3
# License: GNU GPL v2 <http://www.gnu.org/licenses/gpl-2.0.html>
4

    
5
"""
6
Teste le formulaire de recherche avec un nom de service.
7
"""
8
from nose.tools import assert_true, assert_equal
9
from datetime import datetime
10
import transaction
11

    
12
from vigiboard.tests import TestController
13
from vigilo.models.session import DBSession
14
from vigilo.models.demo import functions
15
from vigilo.models.tables import Permission, User, UserGroup, DataPermission
16

    
17

    
18
def insert_deps():
19
    """Insère les dépendances nécessaires aux tests."""
20
    timestamp = datetime.now()
21

    
22
    hostgroup = functions.add_supitemgroup(u'foo')
23
    host = functions.add_host(u'bar')
24
    hostgroup.supitems.append(host)
25
    DBSession.flush()
26

    
27
    servicegroup = functions.add_supitemgroup(u'bar')
28
    service = functions.add_lowlevelservice(host, u'baz')
29
    servicegroup.supitems.append(service)
30
    DBSession.flush()
31

    
32
    event = functions.add_event(service, u'WARNING', u'Hello world', timestamp)
33
    functions.add_correvent([event], timestamp=timestamp)
34
    return (hostgroup, servicegroup)
35

    
36

    
37
class TestSearchFormService(TestController):
38
    """Teste la récupération d'événements selon le groupe de services."""
39
    def setUp(self):
40
        super(TestSearchFormService, self).setUp()
41
        perm = Permission.by_permission_name(u'vigiboard-access')
42
        user = User(
43
            user_name=u'user',
44
            fullname=u'',
45
            email=u'some.random@us.er',
46
        )
47
        usergroup = UserGroup(group_name=u'users')
48
        user.usergroups.append(usergroup)
49
        usergroup.permissions.append(perm)
50
        DBSession.add(user)
51
        DBSession.add(usergroup)
52
        DBSession.flush()
53

    
54
    def test_search_service_when_allowed_by_host(self):
55
        """
56
        Teste la recherche par service avec des droits implicites
57
        (droits accordés car l'utilisateur a les droits sur l'hôte).
58
        """
59
        # On crée un service avec une alerte.
60
        # Le service est rattaché à un hôte appartenant
61
        # à un groupe d'hôtes pour lesquels l'utilisateur
62
        # a les permissions.
63
        hostgroup = insert_deps()[0]
64
        usergroup = UserGroup.by_group_name(u'users')
65
        DBSession.add(DataPermission(
66
            group=hostgroup,
67
            usergroup=usergroup,
68
            access=u'r',
69
        ))
70
        DBSession.flush()
71
        transaction.commit()
72

    
73
        # On envoie une requête avec recherche sur le service créé,
74
        # on s'attend à recevoir 1 résultat.
75
        response = self.app.get('/?service=baz',
76
            extra_environ={'REMOTE_USER': 'user'})
77

    
78
        # Il doit y avoir 1 seule ligne de résultats.
79
        rows = response.lxml.xpath('//table[@class="vigitable"]/tbody/tr')
80
        print "There are %d rows in the result set" % len(rows)
81
        assert_equal(len(rows), 1)
82

    
83
        # Il doit y avoir plusieurs colonnes dans la ligne de résultats.
84
        cols = response.lxml.xpath('//table[@class="vigitable"]/tbody/tr/td')
85
        print "There are %d columns in the result set" % len(cols)
86
        assert_true(len(cols) > 1)
87

    
88
    def test_search_service_when_allowed_by_service(self):
89
        """
90
        Teste la recherche par service avec des droits explicites
91
        (droits accordés car l'utilisateur a explicitement les droits
92
        sur ce service).
93
        """
94
        # On crée un service avec une alerte.
95
        # Le service est rattaché à un groupe de services
96
        # pour lesquel l'utilisateur a les permissions.
97
        servicegroup = insert_deps()[1]
98
        usergroup = UserGroup.by_group_name(u'users')
99
        DBSession.add(DataPermission(
100
            group=servicegroup,
101
            usergroup=usergroup,
102
            access=u'r',
103
        ))
104
        DBSession.flush()
105
        transaction.commit()
106

    
107
        # On envoie une requête avec recherche sur le service créé,
108
        # on s'attend à recevoir 1 résultat.
109
        response = self.app.get('/?service=baz',
110
            extra_environ={'REMOTE_USER': 'user'})
111

    
112
        # Il doit y avoir 1 seule ligne de résultats.
113
        rows = response.lxml.xpath('//table[@class="vigitable"]/tbody/tr')
114
        print "There are %d rows in the result set" % len(rows)
115
        assert_equal(len(rows), 1)
116

    
117
        # Il doit y avoir plusieurs colonnes dans la ligne de résultats.
118
        cols = response.lxml.xpath('//table[@class="vigitable"]/tbody/tr/td')
119
        print "There are %d columns in the result set" % len(cols)
120
        assert_true(len(cols) > 1)
121

    
122
    def test_search_inexistent_service(self):
123
        """Teste la recherche par service sur un service inexistant."""
124
        transaction.commit()
125
        # On envoie une requête avec recherche sur un service
126
        # qui n'existe pas, on s'attend à n'obtenir aucun résultat.
127
        response = self.app.get('/?service=bad',
128
            extra_environ={'REMOTE_USER': 'user'})
129

    
130
        # Il doit y avoir 1 seule ligne de résultats.
131
        rows = response.lxml.xpath('//table[@class="vigitable"]/tbody/tr')
132
        print "There are %d rows in the result set" % len(rows)
133
        assert_equal(len(rows), 1)
134

    
135
        # Il doit y avoir 1 seule colonne dans la ligne de résultats.
136
        # (la colonne contient le texte "Il n'y a aucun événément", traduit)
137
        cols = response.lxml.xpath('//table[@class="vigitable"]/tbody/tr/td')
138
        assert_equal(len(cols), 1)
139

    
140
    def test_search_service_when_disallowed(self):
141
        """Teste la recherche par service SANS les droits."""
142
        # On NE DONNE PAS l'autorisation aux utilisateurs
143
        # de voir l'alerte, donc elle ne doit jamais apparaître.
144
        insert_deps()
145
        transaction.commit()
146

    
147
        # On envoie une requête avec recherche sur le service créé,
148
        # mais avec un utilisateur ne disposant pas des permissions adéquates.
149
        # On s'attend à n'obtenir aucun résultat.
150
        response = self.app.get('/?service=baz',
151
            extra_environ={'REMOTE_USER': 'user'})
152

    
153
        # Il doit y avoir 1 seule ligne de résultats.
154
        rows = response.lxml.xpath('//table[@class="vigitable"]/tbody/tr')
155
        print "There are %d rows in the result set" % len(rows)
156
        assert_equal(len(rows), 1)
157

    
158
        # Il doit y avoir 1 seule colonne dans la ligne de résultats.
159
        # (la colonne contient le texte "Il n'y a aucun événément", traduit)
160
        cols = response.lxml.xpath('//table[@class="vigitable"]/tbody/tr/td')
161
        print "There are %d columns in the result set" % len(cols)
162
        assert_equal(len(cols), 1)