Project

General

Profile

Statistics
| Branch: | Tag: | Revision:

vigiboard / vigiboard / tests / functional / test_search_form_service.py @ 6f6efdcd

History | View | Annotate | Download (7.26 KB)

1
# -*- coding: utf-8 -*-
2
"""
3
Teste le formulaire de recherche avec un nom de service.
4
"""
5
from nose.tools import assert_true, assert_equal
6
from datetime import datetime
7
import transaction
8

    
9
from vigiboard.tests import TestController
10
from vigilo.models.session import DBSession
11
from vigilo.models.tables import Host, Permission, \
12
                                    StateName, LowLevelService, \
13
                                    Event, CorrEvent, User, UserGroup, \
14
                                    DataPermission
15
from vigilo.models.demo.functions import *
16

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

    
21
    hostgroup = add_supitemgroup(name=u'foo')
22

    
23
    host = Host(
24
        name=u'bar',
25
        checkhostcmd=u'',
26
        description=u'',
27
        hosttpl=u'',
28
        address=u'127.0.0.1',
29
        snmpport=42,
30
        snmpcommunity=u'public',
31
        snmpversion=u'3',
32
        weight=42,
33
    )
34
    DBSession.add(host)
35
    DBSession.flush()
36

    
37
    hostgroup.supitems.append(host)
38
    DBSession.flush()
39

    
40
    servicegroup = add_supitemgroup(name=u'bar')
41
    DBSession.add(servicegroup)
42
    DBSession.flush()
43

    
44
    service = LowLevelService(
45
        host=host,
46
        command=u'',
47
        weight=42,
48
        servicename=u'baz',
49
    )
50
    DBSession.add(service)
51
    DBSession.flush()
52

    
53
    servicegroup.supitems.append(service)
54
    DBSession.flush()
55

    
56
    event = Event(
57
        supitem=service,
58
        timestamp=timestamp,
59
        current_state=StateName.statename_to_value(u'WARNING'),
60
        message=u'Hello world',
61
    )
62
    DBSession.add(event)
63
    DBSession.flush()
64

    
65
    correvent = CorrEvent(
66
        impact=42,
67
        priority=42,
68
        trouble_ticket=None,
69
        status=u'None',
70
        occurrence=42,
71
        timestamp_active=timestamp,
72
        cause=event,
73
    )
74
    correvent.events.append(event)
75
    DBSession.add(correvent)
76
    DBSession.flush()
77
    return (hostgroup, servicegroup)
78

    
79
class TestSearchFormService(TestController):
80
    """Teste la récupération d'événements selon le groupe de services."""
81
    def setUp(self):
82
        super(TestSearchFormService, self).setUp()
83
        perm = Permission.by_permission_name(u'vigiboard-access')
84
        user = User(
85
            user_name=u'user',
86
            fullname=u'',
87
            email=u'some.random@us.er',
88
        )
89
        usergroup = UserGroup(
90
            group_name=u'users',
91
        )
92
        user.usergroups.append(usergroup)
93
        usergroup.permissions.append(perm)
94
        DBSession.add(user)
95
        DBSession.add(usergroup)
96
        DBSession.flush()
97

    
98
    def test_search_service_when_allowed_by_host(self):
99
        """
100
        Teste la recherche par service avec des droits implicites
101
        (droits accordés car l'utilisateur a les droits sur l'hôte).
102
        """
103
        # On crée un service avec une alerte.
104
        # Le service est rattaché à un hôte appartenant
105
        # à un groupe d'hôtes pour lesquels l'utilisateur
106
        # a les permissions.
107
        hostgroup = insert_deps()[0]
108
        usergroup = UserGroup.by_group_name(u'users')
109
        DBSession.add(DataPermission(
110
            group=hostgroup,
111
            usergroup=usergroup,
112
            access=u'r',
113
        ))
114
        DBSession.flush()
115
        transaction.commit()
116

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

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

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

    
132
    def test_search_service_when_allowed_by_service(self):
133
        """
134
        Teste la recherche par service avec des droits explicites
135
        (droits accordés car l'utilisateur a explicitement les droits
136
        sur ce service).
137
        """
138
        # On crée un service avec une alerte.
139
        # Le service est rattaché à un groupe de services
140
        # pour lesquel l'utilisateur a les permissions.
141
        servicegroup = insert_deps()[1]
142
        usergroup = UserGroup.by_group_name(u'users')
143
        DBSession.add(DataPermission(
144
            group=servicegroup,
145
            usergroup=usergroup,
146
            access=u'r',
147
        ))
148
        DBSession.flush()
149
        transaction.commit()
150

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

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

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

    
166
    def test_search_inexistent_service(self):
167
        """Teste la recherche par service sur un service inexistant."""
168
        transaction.commit()
169
        # On envoie une requête avec recherche sur un service
170
        # qui n'existe pas, on s'attend à n'obtenir aucun résultat.
171
        response = self.app.get('/?service=bad',
172
            extra_environ={'REMOTE_USER': 'user'})
173

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

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

    
184
    def test_search_service_when_disallowed(self):
185
        """Teste la recherche par service SANS les droits."""
186
        # On NE DONNE PAS l'autorisation aux utilisateurs
187
        # de voir l'alerte, donc elle ne doit jamais apparaître.
188
        insert_deps()
189
        transaction.commit()
190

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

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

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