Project

General

Profile

Statistics
| Branch: | Tag: | Revision:

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

History | View | Annotate | Download (5.92 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 Host, Permission, StateName, \
12
                                    Event, CorrEvent, User, UserGroup, \
13
                                    DataPermission
14
from vigilo.models.demo.functions import *
15

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

    
20
    supitemgroup = add_supitemgroup(name=u'foo')
21

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

    
36
    supitemgroup.supitems.append(host)
37
    DBSession.flush()
38

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

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

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

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

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

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

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

    
114
    def test_search_inexistent_supitemgroup(self):
115
        """Teste la recherche par supitemgroup sur un groupe inexistant."""
116
        # On envoie une requête avec recherche sur un groupe d'hôtes
117
        # qui n'existe pas, on s'attend à n'obtenir aucun résultat.
118
        transaction.commit()
119
        response = self.app.get('/?supitemgroup=%d' % -42,
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 1 seule colonne dans la ligne de résultats.
128
        # (la colonne contient le texte "Il n'y a aucun événément", traduit)
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_equal(len(cols), 1)
132

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

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

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

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