Project

General

Profile

Statistics
| Branch: | Tag: | Revision:

vigiboard / vigiboard / tests / functional / test_raw_events_table.py @ 072f2a16

History | View | Annotate | Download (6.79 KB)

1
# -*- coding: utf-8 -*-
2
# vim:set expandtab tabstop=4 shiftwidth=4:
3
"""
4
Test du tableau d'événements de Vigiboard
5
"""
6

    
7
from nose.tools import assert_true, assert_equal
8
from datetime import datetime
9
import transaction
10

    
11
from vigilo.models.configure import DBSession
12
from vigilo.models import Event, EventHistory, CorrEvent, \
13
                            Permission, StateName, \
14
                            Host, HostGroup, LowLevelService, ServiceGroup
15
from vigiboard.tests import TestController
16

    
17
def populate_DB():
18
    """ Peuple la base de données. """
19
    # On ajoute un groupe d'hôtes et un groupe de services.
20
    hostmanagers = HostGroup(name = u'managersgroup')
21
    DBSession.add(hostmanagers)
22
    servicemanagers = ServiceGroup(name = u'managersgroup')
23
    DBSession.add(servicemanagers)
24
    DBSession.flush()
25

    
26
    # On ajoute la permission 'manage' à ces deux groupes.
27
    manage_perm = Permission.by_permission_name(u'manage')
28
    hostmanagers.permissions.append(manage_perm)
29
    servicemanagers.permissions.append(manage_perm)
30
    DBSession.flush()
31

    
32
    # On crée un hôte de test, et on l'ajoute au groupe d'hôtes.
33
    managerhost = Host(
34
        name = u'managerhost',      
35
        checkhostcmd = u'halt',
36
        snmpcommunity = u'public',
37
        hosttpl = u'/dev/null',
38
        mainip = u'192.168.1.1',
39
        snmpport = 42,
40
        weight = 42,
41
    )
42
    DBSession.add(managerhost)
43
    hostmanagers.hosts.append(managerhost)
44
    DBSession.flush()
45

    
46
    # On crée un services de bas niveau, et on l'ajoute au groupe de services.
47
    managerservice = LowLevelService(
48
        host = managerhost,
49
        servicename = u'managerservice',
50
        command = u'halt',
51
        op_dep = u'+',
52
        weight = 42,
53
    )
54
    DBSession.add(managerservice)
55
    servicemanagers.services.append(managerservice)
56
    DBSession.flush()
57
    
58
    return (managerhost, managerservice)
59

    
60
def add_correvent_caused_by(supitem, 
61
        correvent_status=u"None", event_status=u"WARNING"):
62
    """
63
    Ajoute dans la base de données un évènement corrélé causé 
64
    par un incident survenu sur l'item passé en paramètre.
65
    Génère un historique pour les tests.
66
    """
67

    
68
    # Ajout d'un événement
69
    event = Event(
70
        supitem = supitem, 
71
        message = u'foo',
72
        current_state = StateName.statename_to_value(event_status),
73
    )
74
    DBSession.add(event)
75
    DBSession.flush()
76

    
77
    # Ajout des historiques
78
    DBSession.add(EventHistory(
79
        type_action=u'Nagios update state',
80
        idevent=event.idevent, 
81
        timestamp=datetime.now()))
82
    DBSession.add(EventHistory(
83
        type_action=u'Acknowlegement change state',
84
        idevent=event.idevent, 
85
        timestamp=datetime.now()))
86
    DBSession.flush()
87

    
88
    # Ajout d'un événement corrélé
89
    aggregate = CorrEvent(
90
        idcause = event.idevent, 
91
        timestamp_active = datetime.now(),
92
        priority = 1,
93
        status = correvent_status)
94
    aggregate.events.append(event)
95
    DBSession.add(aggregate)
96
    DBSession.flush()
97
    
98
    return event.idevent
99
    
100

    
101
class TestRawEventsTable(TestController):
102
    """
103
    Test des historiques de Vigiboard.
104
    """
105

    
106
    def setUp(self):
107
        super(TestEventTable, self).setUp()
108

    
109
    def test_host_history(self):
110
        """Affichage de l'historique d'un évènement corrélé pour un hôte."""
111

    
112
        # On peuple la BDD avec un hôte, un service de bas niveau,
113
        # et un groupe d'hôtes et de services associés à ces items.
114
        (managerhost, managerservice) = populate_DB()
115
        
116
        # On ajoute un évènement corrélé causé par l'hôte
117
        idevent = add_correvent_caused_by(managerhost)
118
        transaction.commit()
119

    
120
        # L'utilisateur n'est pas authentifié.
121
        # On s'attend à ce qu'une erreur 401 soit renvoyée,
122
        # demandant à l'utilisateur de s'authentifier.
123
        response = self.app.get(
124
            '/event/%d' % idevent,
125
            status = 401)
126

    
127
        # L'utilisateur N'A PAS les bonnes permissions.
128
        environ = {'REMOTE_USER': 'editor'}
129
        
130
        # On s'attend à ce qu'une erreur 302 soit renvoyée, et à
131
        # ce qu'un message d'erreur précise à l'utilisateur qu'il
132
        # n'a pas accès aux informations concernant cet évènement.
133
        response = self.app.get(
134
            '/event/%d' % idevent,
135
            status = 302, 
136
            extra_environ = environ)
137

    
138
        # On suit la redirection.
139
        response = response.follow(status = 200, extra_environ = environ)
140
        assert_true(len(response.lxml.xpath(
141
            '//div[@id="flash"]/div[@class="error"]')))
142

    
143
        # L'utilisateur a les bonnes permissions.
144
        environ = {'REMOTE_USER': 'manager'}
145
        
146
        # On s'attend à ce que le statut de la requête soit 200.
147
        response = self.app.get(
148
            '/event/%d' % idevent,
149
            status = 200, 
150
            extra_environ = environ)
151

    
152
        # Il doit y avoir 2 lignes de résultats.
153
        rows = response.lxml.xpath('//table[@class="vigitable"]/tbody/tr')
154
        assert_equal(len(rows), 2)
155

    
156
    def test_service_history(self):
157
        """Affichage de l'historique d'un évènement corrélé pour un SBN."""
158

    
159
        # On peuple la BDD avec un hôte, un service de bas niveau,
160
        # et un groupe d'hôtes et de services associés à ces items.
161
        (managerhost, managerservice) = populate_DB()
162
        
163
        # On ajoute un évènement corrélé causé par le service
164
        idevent = add_correvent_caused_by(managerservice)
165
        
166
        transaction.commit()
167

    
168
        # L'utilisateur n'est pas authentifié.
169
        # On s'attend à ce qu'une erreur 401 soit renvoyée,
170
        # demandant à l'utilisateur de s'authentifier.
171
        response = self.app.get(
172
            '/event/%d' % idevent,
173
            status = 401)
174

    
175
        # L'utilisateur N'A PAS les bonnes permissions.
176
        environ = {'REMOTE_USER': 'editor'}
177
        
178
        # On s'attend à ce qu'une erreur 302 soit renvoyée, et à
179
        # ce qu'un message d'erreur précise à l'utilisateur qu'il
180
        # n'a pas accès aux informations concernant cet évènement.
181
        response = self.app.get(
182
            '/event/%d' % idevent,
183
            status = 302, 
184
            extra_environ = environ)
185

    
186
        # On suit la redirection.
187
        response = response.follow(status = 200, extra_environ = environ)
188
        assert_true(len(response.lxml.xpath(
189
            '//div[@id="flash"]/div[@class="error"]')))
190

    
191
        # L'utilisateur a les bonnes permissions.
192
        environ = {'REMOTE_USER': 'manager'}
193
        
194
        # On s'attend à ce que le statut de la requête soit 200.
195
        response = self.app.get(
196
            '/event/%d' % idevent,
197
            status = 200, 
198
            extra_environ = environ)
199

    
200
        # Il doit y avoir 2 lignes de résultats.
201
        rows = response.lxml.xpath('//table[@class="vigitable"]/tbody/tr')
202
        assert_equal(len(rows), 2)
203