Project

General

Profile

Statistics
| Branch: | Tag: | Revision:

vigiboard / vigiboard / tests / functional / test_search_form_servicegroup.py @ 5dbfa80d

History | View | Annotate | Download (5.61 KB)

1
# -*- coding: utf-8 -*-
2
"""
3
Teste le formulaire de recherche avec un groupe de services.
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.configure import DBSession
11
from vigilo.models import ServiceGroup, Host, Permission, Event, \
12
                        LowLevelService, CorrEvent, StateName
13

    
14
def insert_deps():
15
    """Insère les dépendances nécessaires aux tests."""
16
    timestamp = datetime.now()
17
    DBSession.add(StateName(statename=u'OK', order=1))
18
    DBSession.add(StateName(statename=u'UNKNOWN', order=1))
19
    DBSession.add(StateName(statename=u'WARNING', order=1))
20
    DBSession.add(StateName(statename=u'CRITICAL', order=1))
21
    DBSession.flush()
22

    
23
    host = Host(
24
        name=u'bar',
25
        checkhostcmd=u'',
26
        description=u'',
27
        hosttpl=u'',
28
        mainip=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
    servicegroup = ServiceGroup(
38
        name=u'foo',
39
    )
40
    DBSession.add(servicegroup)
41

    
42
    service = LowLevelService(
43
        host=host,
44
        command=u'',
45
        weight=42,
46
        servicename=u'baz',
47
        op_dep=u'&',
48
    )
49
    DBSession.add(service)
50
    DBSession.flush()
51

    
52
    servicegroup.services.append(service)
53
    event = Event(
54
        supitem=service,
55
        timestamp=timestamp,
56
        current_state=StateName.statename_to_value(u'WARNING'),
57
        message=u'Hello world',
58
    )
59
    DBSession.add(event)
60
    DBSession.flush()
61

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

    
76
class TestSearchFormServiceGroup(TestController):
77
    """Teste la récupération d'événements selon le groupe de services."""
78

    
79
    def test_search_servicegroup_when_allowed(self):
80
        """Teste la recherche par servicegroup avec les bons droits d'accès."""
81
        # On crée un groupe de services appelé 'foo',
82
        # contenant un service 'bar', ainsi qu'un événement
83
        # et un événement corrélé sur ce service.
84
        # De plus, on donne l'autorisation aux utilisateurs
85
        # ayant la permission 'manage' de voir cette alerte.
86
        servicegroup = insert_deps()
87
        manage = Permission.by_permission_name(u'manage')
88
        manage.servicegroups.append(servicegroup)
89
        DBSession.flush()
90
        transaction.commit()
91

    
92
        # On envoie une requête avec recherche sur le groupe
93
        # de services créé, on s'attend à recevoir 1 résultat.
94
        response = self.app.get('/?servicegroup=foo',
95
            extra_environ={'REMOTE_USER': 'manager'})
96

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

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

    
107
    def test_search_inexistent_servicegroup(self):
108
        """Teste la recherche par servicegroup sur un groupe inexistant."""
109
        # On envoie une requête avec recherche sur un groupe de services
110
        # qui n'existe pas, on s'attend à n'obtenir aucun résultat.
111
        response = self.app.get('/?servicegroup=foot',
112
            extra_environ={'REMOTE_USER': 'manager'})
113

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

    
119
        # Il doit y avoir 1 seule colonne dans la ligne de résultats.
120
        # (la colonne contient le texte "Il n'y a aucun événément", traduit)
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_equal(len(cols), 1)
124

    
125
    def test_search_servicegroup_when_disallowed(self):
126
        """Teste la recherche par servicegroup SANS les droits d'accès."""
127
        # On crée un groupe de services appelé 'foo',
128
        # contenant un service 'bar', ainsi qu'un événement
129
        # et un événement corrélé sur cet hôte.
130
        # MAIS, on NE DONNE PAS l'autorisation aux utilisateurs
131
        # de voir cette alerte, donc elle ne doit jamais apparaître.
132
        insert_deps()
133
        transaction.commit()
134

    
135
        # On envoie une requête avec recherche sur le groupe de services
136
        # services créé, mais avec un utilisateur ne disposant pas des
137
        # permissions adéquates. On s'attend à n'obtenir aucun résultat.
138
        response = self.app.get('/?servicegroup=foo',
139
            extra_environ={'REMOTE_USER': 'manager'})
140

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

    
146
        # Il doit y avoir 1 seule colonne dans la ligne de résultats.
147
        # (la colonne contient le texte "Il n'y a aucun événément", traduit)
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