Project

General

Profile

Statistics
| Branch: | Tag: | Revision:

vigiboard / vigiboard / tests / functional / test_search_form_supitemgroup.py @ 0dcb87f7

History | View | Annotate | Download (6.15 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
from vigilo.models.tables.grouphierarchy import GroupHierarchy
15

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

    
20
    supitemgroup = SupItemGroup(
21
        name=u'foo',
22
    )
23
    DBSession.add(supitemgroup)
24
    DBSession.flush()
25

    
26
    DBSession.add(GroupHierarchy(
27
        parent=supitemgroup,
28
        child=supitemgroup,
29
        hops=0,
30
    ))
31
    DBSession.flush()
32

    
33
    host = Host(
34
        name=u'bar',
35
        checkhostcmd=u'',
36
        description=u'',
37
        hosttpl=u'',
38
        address=u'127.0.0.1',
39
        snmpport=42,
40
        snmpcommunity=u'public',
41
        snmpversion=u'3',
42
        weight=42,
43
    )
44
    DBSession.add(host)
45
    DBSession.flush()
46

    
47
    supitemgroup.supitems.append(host)
48
    DBSession.flush()
49

    
50
    event = Event(
51
        supitem=host,
52
        timestamp=timestamp,
53
        current_state=StateName.statename_to_value(u'WARNING'),
54
        message=u'Hello world',
55
    )
56
    DBSession.add(event)
57
    DBSession.flush()
58

    
59
    correvent = CorrEvent(
60
        impact=42,
61
        priority=42,
62
        trouble_ticket=None,
63
        status=u'None',
64
        occurrence=42,
65
        timestamp_active=timestamp,
66
        cause=event,
67
    )
68
    correvent.events.append(event)
69
    DBSession.add(correvent)
70
    DBSession.flush()
71
    return supitemgroup
72

    
73
class TestSearchFormSupItemGroup(TestController):
74
    """Teste la récupération d'événements selon le supitemgroup."""
75
    def setUp(self):
76
        super(TestSearchFormSupItemGroup, self).setUp()
77
        perm = Permission.by_permission_name(u'vigiboard-access')
78
        user = User(
79
            user_name=u'user',
80
            fullname=u'',
81
            email=u'some.random@us.er',
82
        )
83
        usergroup = UserGroup(
84
            group_name=u'users',
85
        )
86
        user.usergroups.append(usergroup)
87
        usergroup.permissions.append(perm)
88
        DBSession.add(user)
89
        DBSession.add(usergroup)
90
        DBSession.flush()
91

    
92
    def test_search_supitemgroup_when_allowed(self):
93
        """Teste la recherche par supitemgroup avec les bons droits d'accès."""
94
        # On crée un groupe d'hôte appelé 'foo',
95
        # contenant un hôte 'bar', ainsi qu'un événement
96
        # et un événement corrélé sur cet hôte.
97
        # De plus, on donne l'autorisation aux utilisateurs
98
        # ayant la permission 'edit' de voir cette alerte.
99
        supitemgroup = insert_deps()
100
        idgroup = supitemgroup.idgroup
101
        usergroup = UserGroup.by_group_name(u'users')
102
        DBSession.add(DataPermission(
103
            group=supitemgroup,
104
            usergroup=usergroup,
105
            access=u'r',
106
        ))
107
        DBSession.flush()
108
        transaction.commit()
109

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

    
115
        # Il doit y avoir 1 seule ligne de résultats.
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

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

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

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

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

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

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

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

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