Project

General

Profile

Statistics
| Branch: | Tag: | Revision:

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

History | View | Annotate | Download (5.96 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(
20
        name=u'foo',
21
    )
22
    DBSession.add(supitemgroup)
23
    DBSession.flush()
24

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

    
39
    supitemgroup.supitems.append(host)
40
    DBSession.flush()
41

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

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

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

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

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

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

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

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

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

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

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

    
147
        # On envoie une requête avec recherche sur le groupe d'hôtes 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('/?supitemgroup=%d' % idgroup,
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)
163