Project

General

Profile

Statistics
| Branch: | Tag: | Revision:

vigiboard / vigiboard / tests / functional / test_search_form_supitemgroup.py @ 180b869a

History | View | Annotate | Download (6.99 KB)

1
# -*- coding: utf-8 -*-
2
"""
3
Teste le formulaire de recherche avec un groupe d'hôtes.
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 SupItemGroup, Host, Permission, StateName, \
12
                                    Event, CorrEvent, User, UserGroup, \
13
                                    DataPermission
14

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

    
19
    supitemgroup = SupItemGroup(name=u'foo', parent=None)
20
    DBSession.add(supitemgroup)
21
    DBSession.flush()
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
    supitemgroup.supitems.append(host)
38
    DBSession.flush()
39

    
40
    event = Event(
41
        supitem=host,
42
        timestamp=timestamp,
43
        current_state=StateName.statename_to_value(u'WARNING'),
44
        message=u'Hello world',
45
    )
46
    DBSession.add(event)
47
    DBSession.flush()
48

    
49
    correvent = CorrEvent(
50
        impact=42,
51
        priority=42,
52
        trouble_ticket=None,
53
        status=u'None',
54
        occurrence=42,
55
        timestamp_active=timestamp,
56
        cause=event,
57
    )
58
    correvent.events.append(event)
59
    DBSession.add(correvent)
60
    DBSession.flush()
61
    return supitemgroup
62

    
63
class TestSearchFormSupItemGroup(TestController):
64
    """Teste la récupération d'événements selon le supitemgroup."""
65
    def setUp(self):
66
        super(TestSearchFormSupItemGroup, self).setUp()
67
        perm = Permission.by_permission_name(u'vigiboard-access')
68
        user = User(
69
            user_name=u'user',
70
            fullname=u'',
71
            email=u'some.random@us.er',
72
        )
73
        usergroup = UserGroup(group_name=u'users')
74
        user.usergroups.append(usergroup)
75
        usergroup.permissions.append(perm)
76
        DBSession.add(user)
77
        DBSession.add(usergroup)
78
        DBSession.flush()
79

    
80
    def test_search_supitemgroup_when_allowed(self):
81
        """Teste la recherche par supitemgroup avec les bons droits d'accès."""
82
        # On crée un groupe d'hôte appelé 'foo',
83
        # contenant un hôte 'bar', ainsi qu'un événement
84
        # et un événement corrélé sur cet hôte.
85
        # De plus, on donne l'autorisation aux utilisateurs
86
        # ayant la permission 'edit' de voir cette alerte.
87
        supitemgroup = insert_deps()
88
        idgroup = supitemgroup.idgroup
89
        usergroup = UserGroup.by_group_name(u'users')
90
        DBSession.add(DataPermission(
91
            group=supitemgroup,
92
            usergroup=usergroup,
93
            access=u'r',
94
        ))
95
        DBSession.flush()
96
        transaction.commit()
97

    
98
        # On envoie une requête avec recherche sur le groupe d'hôtes créé,
99
        # on s'attend à recevoir 1 résultat.
100
        response = self.app.get('/?supitemgroup=%d' % idgroup,
101
            extra_environ={'REMOTE_USER': 'user'})
102

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

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

    
113
        # Mêmes tests avec un utilisateur membre du groupe 'managers'
114
        response = self.app.get('/?supitemgroup=%d' % idgroup,
115
            extra_environ={'REMOTE_USER': 'manager'})
116
        rows = response.lxml.xpath('//table[@class="vigitable"]/tbody/tr')
117
        print "There are %d rows in the result set" % len(rows)
118
        assert_equal(len(rows), 1)
119
        cols = response.lxml.xpath('//table[@class="vigitable"]/tbody/tr/td')
120
        print "There are %d columns in the result set" % len(cols)
121
        assert_true(len(cols) > 1)
122

    
123
    def test_search_inexistent_supitemgroup(self):
124
        """Teste la recherche par supitemgroup sur un groupe inexistant."""
125
        # On envoie une requête avec recherche sur un groupe d'hôtes
126
        # qui n'existe pas, on s'attend à n'obtenir aucun résultat.
127
        transaction.commit()
128
        response = self.app.get('/?supitemgroup=%d' % -42,
129
            extra_environ={'REMOTE_USER': 'user'})
130

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

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

    
142
        # Mêmes tests avec un utilisateur membre du groupe 'managers'
143
        response = self.app.get('/?supitemgroup=%d' % -42,
144
            extra_environ={'REMOTE_USER': 'manager'})
145
        rows = response.lxml.xpath('//table[@class="vigitable"]/tbody/tr')
146
        print "There are %d rows in the result set" % len(rows)
147
        assert_equal(len(rows), 1)
148
        cols = response.lxml.xpath('//table[@class="vigitable"]/tbody/tr/td')
149
        print "There are %d columns in the result set" % len(cols)
150
        assert_equal(len(cols), 1)
151

    
152
    def test_search_supitemgroup_when_disallowed(self):
153
        """Teste la recherche par supitemgroup SANS les droits d'accès."""
154
        # On crée un groupe d'hôte appelé 'foo',
155
        # contenant un hôte 'bar', ainsi qu'un événement
156
        # et un événement corrélé sur cet hôte.
157
        # MAIS, on NE DONNE PAS l'autorisation aux utilisateurs
158
        # de voir cette alerte, donc elle ne doit jamais apparaître.
159
        supitemgroup = insert_deps()
160
        idgroup = supitemgroup.idgroup
161
        transaction.commit()
162

    
163
        # On envoie une requête avec recherche sur le groupe d'hôtes créé,
164
        # mais avec un utilisateur ne disposant pas des permissions adéquates.
165
        # On s'attend à n'obtenir aucun résultat.
166
        response = self.app.get('/?supitemgroup=%d' % idgroup,
167
            extra_environ={'REMOTE_USER': 'user'})
168

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

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