Project

General

Profile

Statistics
| Branch: | Tag: | Revision:

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

History | View | Annotate | Download (7.35 KB)

1 64ed9170 Vincent QUEMENER
# -*- coding: utf-8 -*-
2 b373a5de Aurelien BOMPARD
# Copyright (C) 2006-2011 CS-SI
3
# License: GNU GPL v2 <http://www.gnu.org/licenses/gpl-2.0.html>
4
5 64ed9170 Vincent QUEMENER
"""
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 e7e3d45e Francois POIROTTE
from vigilo.models.session import DBSession
14 0bd9c069 Francois POIROTTE
from vigilo.models.tables import SupItemGroup, Host, Permission, \
15 e6984a7f Francois POIROTTE
                                    StateName, LowLevelService, \
16 60d02e7f Francois POIROTTE
                                    Event, CorrEvent, User, UserGroup, \
17
                                    DataPermission
18 64ed9170 Vincent QUEMENER
19
def insert_deps():
20
    """Insère les dépendances nécessaires aux tests."""
21
    timestamp = datetime.now()
22
23 03059edd Francois POIROTTE
    hostgroup = SupItemGroup(name=u'foo', parent=None)
24 0bd9c069 Francois POIROTTE
    DBSession.add(hostgroup)
25 64ed9170 Vincent QUEMENER
26
    host = Host(
27
        name=u'bar',
28
        checkhostcmd=u'',
29
        description=u'',
30
        hosttpl=u'',
31 0dcb87f7 Francois POIROTTE
        address=u'127.0.0.1',
32 64ed9170 Vincent QUEMENER
        snmpport=42,
33
        snmpcommunity=u'public',
34
        snmpversion=u'3',
35
        weight=42,
36
    )
37
    DBSession.add(host)
38
    DBSession.flush()
39
40 24d74687 Francois POIROTTE
    hostgroup.supitems.append(host)
41 64ed9170 Vincent QUEMENER
    DBSession.flush()
42
43 03059edd Francois POIROTTE
    servicegroup = SupItemGroup(name=u'bar', parent=None)
44 64ed9170 Vincent QUEMENER
    DBSession.add(servicegroup)
45 24d74687 Francois POIROTTE
    DBSession.flush()
46
47 53fda08d Francois POIROTTE
    service = LowLevelService(
48 64ed9170 Vincent QUEMENER
        host=host,
49
        command=u'',
50
        weight=42,
51
        servicename=u'baz',
52
    )
53
    DBSession.add(service)
54
    DBSession.flush()
55
56 24d74687 Francois POIROTTE
    servicegroup.supitems.append(service)
57 64ed9170 Vincent QUEMENER
    DBSession.flush()
58
59
    event = Event(
60
        supitem=service,
61
        timestamp=timestamp,
62
        current_state=StateName.statename_to_value(u'WARNING'),
63
        message=u'Hello world',
64
    )
65
    DBSession.add(event)
66
    DBSession.flush()
67
68
    correvent = CorrEvent(
69
        impact=42,
70
        priority=42,
71
        trouble_ticket=None,
72
        status=u'None',
73
        occurrence=42,
74
        timestamp_active=timestamp,
75
        cause=event,
76
    )
77
    correvent.events.append(event)
78
    DBSession.add(correvent)
79
    DBSession.flush()
80
    return (hostgroup, servicegroup)
81
82
class TestSearchFormService(TestController):
83
    """Teste la récupération d'événements selon le groupe de services."""
84 60d02e7f Francois POIROTTE
    def setUp(self):
85
        super(TestSearchFormService, self).setUp()
86
        perm = Permission.by_permission_name(u'vigiboard-access')
87
        user = User(
88
            user_name=u'user',
89
            fullname=u'',
90
            email=u'some.random@us.er',
91
        )
92 03059edd Francois POIROTTE
        usergroup = UserGroup(group_name=u'users')
93 60d02e7f Francois POIROTTE
        user.usergroups.append(usergroup)
94
        usergroup.permissions.append(perm)
95
        DBSession.add(user)
96
        DBSession.add(usergroup)
97
        DBSession.flush()
98 64ed9170 Vincent QUEMENER
99 24d74687 Francois POIROTTE
    def test_search_service_when_allowed_by_host(self):
100 64ed9170 Vincent QUEMENER
        """
101
        Teste la recherche par service avec des droits implicites
102
        (droits accordés car l'utilisateur a les droits sur l'hôte).
103
        """
104
        # On crée un service avec une alerte.
105
        # Le service est rattaché à un hôte appartenant
106
        # à un groupe d'hôtes pour lesquels l'utilisateur
107
        # a les permissions.
108
        hostgroup = insert_deps()[0]
109 60d02e7f Francois POIROTTE
        usergroup = UserGroup.by_group_name(u'users')
110
        DBSession.add(DataPermission(
111
            group=hostgroup,
112
            usergroup=usergroup,
113
            access=u'r',
114
        ))
115 64ed9170 Vincent QUEMENER
        DBSession.flush()
116
        transaction.commit()
117
118
        # On envoie une requête avec recherche sur le service créé,
119
        # on s'attend à recevoir 1 résultat.
120
        response = self.app.get('/?service=baz',
121 60d02e7f Francois POIROTTE
            extra_environ={'REMOTE_USER': 'user'})
122 64ed9170 Vincent QUEMENER
123
        # Il doit y avoir 1 seule ligne de résultats.
124
        rows = response.lxml.xpath('//table[@class="vigitable"]/tbody/tr')
125
        print "There are %d rows in the result set" % len(rows)
126
        assert_equal(len(rows), 1)
127
128
        # Il doit y avoir plusieurs colonnes dans la ligne de résultats.
129
        cols = response.lxml.xpath('//table[@class="vigitable"]/tbody/tr/td')
130
        print "There are %d columns in the result set" % len(cols)
131
        assert_true(len(cols) > 1)
132
133 24d74687 Francois POIROTTE
    def test_search_service_when_allowed_by_service(self):
134 64ed9170 Vincent QUEMENER
        """
135
        Teste la recherche par service avec des droits explicites
136
        (droits accordés car l'utilisateur a explicitement les droits
137
        sur ce service).
138
        """
139
        # On crée un service avec une alerte.
140
        # Le service est rattaché à un groupe de services
141
        # pour lesquel l'utilisateur a les permissions.
142
        servicegroup = insert_deps()[1]
143 60d02e7f Francois POIROTTE
        usergroup = UserGroup.by_group_name(u'users')
144
        DBSession.add(DataPermission(
145
            group=servicegroup,
146
            usergroup=usergroup,
147
            access=u'r',
148
        ))
149 64ed9170 Vincent QUEMENER
        DBSession.flush()
150
        transaction.commit()
151
152
        # On envoie une requête avec recherche sur le service créé,
153
        # on s'attend à recevoir 1 résultat.
154
        response = self.app.get('/?service=baz',
155 60d02e7f Francois POIROTTE
            extra_environ={'REMOTE_USER': 'user'})
156 64ed9170 Vincent QUEMENER
157
        # Il doit y avoir 1 seule ligne de résultats.
158
        rows = response.lxml.xpath('//table[@class="vigitable"]/tbody/tr')
159
        print "There are %d rows in the result set" % len(rows)
160
        assert_equal(len(rows), 1)
161
162
        # Il doit y avoir plusieurs colonnes dans la ligne de résultats.
163
        cols = response.lxml.xpath('//table[@class="vigitable"]/tbody/tr/td')
164
        print "There are %d columns in the result set" % len(cols)
165
        assert_true(len(cols) > 1)
166
167
    def test_search_inexistent_service(self):
168
        """Teste la recherche par service sur un service inexistant."""
169 60d02e7f Francois POIROTTE
        transaction.commit()
170 64ed9170 Vincent QUEMENER
        # On envoie une requête avec recherche sur un service
171
        # qui n'existe pas, on s'attend à n'obtenir aucun résultat.
172 4c08cd96 Francois POIROTTE
        response = self.app.get('/?service=bad',
173 60d02e7f Francois POIROTTE
            extra_environ={'REMOTE_USER': 'user'})
174 64ed9170 Vincent QUEMENER
175
        # Il doit y avoir 1 seule ligne de résultats.
176
        rows = response.lxml.xpath('//table[@class="vigitable"]/tbody/tr')
177
        print "There are %d rows in the result set" % len(rows)
178
        assert_equal(len(rows), 1)
179
180
        # Il doit y avoir 1 seule colonne dans la ligne de résultats.
181
        # (la colonne contient le texte "Il n'y a aucun événément", traduit)
182
        cols = response.lxml.xpath('//table[@class="vigitable"]/tbody/tr/td')
183
        assert_equal(len(cols), 1)
184
185
    def test_search_service_when_disallowed(self):
186
        """Teste la recherche par service SANS les droits."""
187
        # On NE DONNE PAS l'autorisation aux utilisateurs
188
        # de voir l'alerte, donc elle ne doit jamais apparaître.
189
        insert_deps()
190
        transaction.commit()
191
192
        # On envoie une requête avec recherche sur le service créé,
193
        # mais avec un utilisateur ne disposant pas des permissions adéquates.
194
        # On s'attend à n'obtenir aucun résultat.
195 4c08cd96 Francois POIROTTE
        response = self.app.get('/?service=baz',
196 60d02e7f Francois POIROTTE
            extra_environ={'REMOTE_USER': 'user'})
197 64ed9170 Vincent QUEMENER
198
        # Il doit y avoir 1 seule ligne de résultats.
199
        rows = response.lxml.xpath('//table[@class="vigitable"]/tbody/tr')
200
        print "There are %d rows in the result set" % len(rows)
201
        assert_equal(len(rows), 1)
202
203
        # Il doit y avoir 1 seule colonne dans la ligne de résultats.
204
        # (la colonne contient le texte "Il n'y a aucun événément", traduit)
205
        cols = response.lxml.xpath('//table[@class="vigitable"]/tbody/tr/td')
206
        print "There are %d columns in the result set" % len(cols)
207
        assert_equal(len(cols), 1)