Project

General

Profile

Statistics
| Branch: | Tag: | Revision:

vigiboard / vigiboard / tests / functional / test_vigiboardrequest.py @ ee3ae8c8

History | View | Annotate | Download (7.86 KB)

1
# -*- coding: utf-8 -*-
2
# vim:set expandtab tabstop=4 shiftwidth=4:
3
"""
4
Test de la classe Vigiboard Request
5
"""
6

    
7
from nose.tools import assert_true
8
from datetime import datetime
9
import tg
10
import transaction
11

    
12
from vigiboard.model import DBSession, \
13
    Event, EventHistory, EventsAggregate, \
14
    Permission, User, \
15
    Group, Host, HostGroup, Service, ServiceGroup
16
from vigiboard.tests import TestController
17
from vigiboard.controllers.vigiboardrequest import VigiboardRequest
18
from vigiboard.controllers.vigiboard_plugin.tests import MonPlugin
19

    
20

    
21
class TestVigiboardRequest(TestController):
22
    """Test de la classe Vigiboard Request"""
23

    
24
    def setUp(self):
25
        TestController.setUp(self)
26

    
27
        # On peuple la base de données.
28

    
29
        # Les groupes et leurs dépendances
30
        hosteditors = Group(name=u'hosteditors')
31
        DBSession.add(hosteditors)
32
        DBSession.flush()
33

    
34
        hostmanagers = Group(name=u'hostmanagers', parent=hosteditors)
35
        DBSession.add(hostmanagers)
36
        DBSession.flush()
37

    
38
        manage_perm = Permission.by_permission_name(u'manage')
39
        edit_perm = Permission.by_permission_name(u'edit')
40

    
41
        manage_perm.groups.append(hostmanagers)
42
        edit_perm.groups.append(hosteditors)
43
        DBSession.flush()
44

    
45
        # Les dépendances des évènements
46
        host_template = {
47
            'checkhostcmd': u'halt',
48
            'community': u'public',
49
            'fqhn': u'localhost',
50
            'hosttpl': u'/dev/null',
51
            'mainip': u'192.168.1.1',
52
            'port': 42,
53
        }
54

    
55
        service_template = {
56
            'servicetype': u'foo',
57
            'command': u'halt',
58
        }
59

    
60
        DBSession.add(Host(name=u'monhost', **host_template))
61
        DBSession.add(Service(name=u'monservice', **service_template))
62
        DBSession.add(Host(name=u'monhostuser', **host_template))
63
        DBSession.add(Service(name=u'monserviceuser', **service_template))
64
        DBSession.flush()
65

    
66
        # Table de jointure entre les hôtes/services et les groupes
67
        DBSession.add(HostGroup(hostname = u"monhost",
68
            groupname = u"hostmanagers"))
69
        DBSession.add(HostGroup(hostname = u"monhostuser",
70
            groupname = u"hosteditors"))
71
        DBSession.add(ServiceGroup(servicename = u"monservice",
72
            groupname = u"hostmanagers"))
73
        DBSession.add(ServiceGroup(servicename = u"monserviceuser",
74
            groupname = u"hosteditors"))
75
        DBSession.flush()
76

    
77
        # Les évènements eux-mêmes
78
        event_template = {
79
            'message': u'foo',
80
        }
81

    
82
        event1 = Event(idevent=u'event1', hostname=u'monhost',
83
            servicename=u'monservice', **event_template)
84
        event2 = Event(idevent=u'event2', hostname=u'monhostuser',
85
            servicename=u'monservice', **event_template)
86
        event3 = Event(idevent=u'event3', hostname=u'monhost',
87
            servicename=u'monserviceuser', **event_template)
88
        event4 = Event(idevent=u'event4', hostname=u'monhostuser',
89
            servicename=u'monserviceuser', **event_template)
90

    
91
        DBSession.add(event1)
92
        DBSession.add(event2)
93
        DBSession.add(event3)
94
        DBSession.add(event4)
95
        DBSession.flush()
96

    
97

    
98
        # Les historiques
99
        DBSession.add(EventHistory(type_action = u'Nagios update state',
100
            idevent = event1.idevent))
101
        DBSession.add(EventHistory(type_action = u'Acknowlegement change state',
102
            idevent = event1.idevent))
103
        DBSession.add(EventHistory(type_action = u'Nagios update state',
104
            idevent = event2.idevent))
105
        DBSession.add(EventHistory(type_action = u'Acknowlegement change state',
106
            idevent = event2.idevent))
107
        DBSession.add(EventHistory(type_action = u'Nagios update state',
108
            idevent = event3.idevent))
109
        DBSession.add(EventHistory(type_action = u'Acknowlegement change state',
110
            idevent = event3.idevent))
111
        DBSession.add(EventHistory(type_action = u'Nagios update state',
112
            idevent = event4.idevent))
113
        DBSession.add(EventHistory(type_action = u'Acknowlegement change state',
114
            idevent = event4.idevent))
115
        DBSession.flush()
116

    
117
        # Les évènements corrélés
118
        aggregate_template = {
119
            'timestamp_active': datetime.now(),
120
            'current_severity': 1,
121
            'initial_severity': 1,
122
            'peak_severity': 1,
123
            'status': u'None',
124
        }
125
        self.aggregate1 = EventsAggregate(
126
            idaggregate=u'foo',
127
            idcause=event1.idevent, **aggregate_template)
128
        self.aggregate2 = EventsAggregate(
129
            idaggregate=u'bar',
130
            idcause=event4.idevent, **aggregate_template)
131

    
132
        self.aggregate1.events.append(event1)
133
        self.aggregate1.events.append(event3)
134
        self.aggregate2.events.append(event4)
135
        self.aggregate2.events.append(event2)
136
        DBSession.add(self.aggregate1)
137
        DBSession.add(self.aggregate2)
138
        DBSession.flush()
139
        transaction.commit()
140

    
141

    
142
    def tearDown(self):
143
        # This operation is only necessary for DBMS which are
144
        # really strict about table locks, such as PostgreSQL.
145
        # For our tests, we use an (in-memory) SQLite database,
146
        # so we're unaffected. This is done only for completeness.
147
        DBSession.delete(self.aggregate1)
148
        DBSession.delete(self.aggregate1)
149
        DBSession.flush()
150
        transaction.commit()
151
        TestController.tearDown(self)
152

    
153

    
154
    def test_creation_requete(self):
155
        """Génération d'une requête avec plugin et permissions."""
156

    
157
        # On indique qui on est et on requête l'index pour obtenir
158
        # toutes les variables de sessions
159
        environ = {'REMOTE_USER': 'editor'}
160
        response = self.app.get('/', extra_environ=environ)
161
        tg.request = response.request
162

    
163
        # Derrière, VigiboardRequest doit charger le plugin de tests tout seul
164
        tg.config['vigiboard_plugins'] = [['tests', 'MonPlugin']]
165
        vigi_req = VigiboardRequest(User.by_user_name(u'editor'))
166

    
167
        # On effectue les tests suivants :
168
        #   le nombre de lignes (historique et évènements) doivent
169
        #       correspondre (vérification des droits imposés par les groupes)
170
        #   le plugin fonctionne correctement
171

    
172
        num_rows = vigi_req.num_rows()
173
        assert_true(num_rows == 1, msg = "1 historique devrait " +
174
                "etre disponible pour l'utilisateur 'editor' mais il " +
175
                "y en a %d" % num_rows)
176
        vigi_req.format_events(0, 10)
177
        vigi_req.format_history()
178
        assert_true(len(vigi_req.events) == 1 + 1,
179
                msg = "1 evenement devrait etre disponible pour " +
180
                        "l'utilisateur 'editor' mais il y en a %d" %
181
                        len(vigi_req.events))
182
        assert_true(vigi_req.events[1][6][0][0] != 'Error', 
183
                msg = "Probleme d'execution des plugins ou de " +
184
                        "formatage des evenements") 
185

    
186
        # On recommence les tests précédents avec l'utilisateur
187
        # manager (plus de droits)
188

    
189
        environ = {'REMOTE_USER': 'manager'}
190
        response = self.app.get('/', extra_environ=environ)
191
        tg.request = response.request
192

    
193
        vigi_req = VigiboardRequest(User.by_user_name(u'manager'))
194
        vigi_req.add_plugin(MonPlugin)
195

    
196
        num_rows = vigi_req.num_rows()
197
        assert_true(num_rows == 2, 
198
                msg = "2 historiques devraient etre disponibles pour " +
199
                        "l'utilisateur 'manager' mais il y en a %d" % num_rows)
200
        vigi_req.format_events(0, 10)
201
        vigi_req.format_history()
202
        assert_true(len(vigi_req.events) == 2 + 1, 
203
                msg = "2 evenements devraient être disponibles pour " +
204
                        "l'utilisateur 'manager' mais il y en a %d" %
205
                        len(vigi_req.events))
206
        assert_true(vigi_req.events[1][6][0][0] != 'Error', 
207
                msg = "Probleme d'execution des plugins")
208