Project

General

Profile

Statistics
| Branch: | Tag: | Revision:

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

History | View | Annotate | Download (7.8 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
        if self.__dict__.get('is_setup', False):
28
            return
29
        self.is_setup = True
30

    
31
        # On peuple la base de données.
32

    
33
        # Les groupes et leurs dépendances
34
        hosteditors = Group(name=u'hosteditors')
35
        DBSession.add(hosteditors)
36
        DBSession.flush()
37

    
38
        hostmanagers = Group(name=u'hostmanagers', parent=hosteditors)
39
        DBSession.add(hostmanagers)
40
        DBSession.flush()
41

    
42
        manage_perm = Permission.by_permission_name(u'manage')
43
        edit_perm = Permission.by_permission_name(u'edit')
44

    
45
        manage_perm.groups.append(hostmanagers)
46
        edit_perm.groups.append(hosteditors)
47
        DBSession.flush()
48

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

    
59
        service_template = {
60
            'servicetype': u'foo',
61
            'command': u'halt',
62
        }
63

    
64
        DBSession.add(Host(name=u'monhost', **host_template))
65
        DBSession.add(Service(name=u'monservice', **service_template))
66
        DBSession.add(Host(name=u'monhostuser', **host_template))
67
        DBSession.add(Service(name=u'monserviceuser', **service_template))
68
        DBSession.flush()
69

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

    
81
        # Les évènements eux-mêmes
82
        event_template = {
83
            'active': True,
84
            'message': u'foo',
85
        }
86

    
87
        event1 = Event(idevent=u'foo42', hostname=u'monhost',
88
            servicename=u'monservice', **event_template)
89
        event2 = Event(idevent=u'foo43', hostname=u'monhostuser',
90
            servicename=u'monservice', **event_template)
91
        event3 = Event(idevent=u'foo44', hostname=u'monhost',
92
            servicename=u'monserviceuser', **event_template)
93
        event4 = Event(idevent=u'foo45', hostname=u'monhostuser',
94
            servicename=u'monserviceuser', **event_template)
95

    
96
        DBSession.add(event1)
97
        DBSession.add(event2)
98
        DBSession.add(event3)
99
        DBSession.add(event4)
100
        DBSession.flush()
101

    
102

    
103
        # Les historiques
104
        DBSession.add(EventHistory(type_action = u'Nagios update state',
105
            idevent = event1.idevent))
106
        DBSession.add(EventHistory(type_action = u'Acknowlegement change state',
107
            idevent = event1.idevent))
108
        DBSession.add(EventHistory(type_action = u'Nagios update state',
109
            idevent = event2.idevent))
110
        DBSession.add(EventHistory(type_action = u'Acknowlegement change state',
111
            idevent = event2.idevent))
112
        DBSession.add(EventHistory(type_action = u'Nagios update state',
113
            idevent = event3.idevent))
114
        DBSession.add(EventHistory(type_action = u'Acknowlegement change state',
115
            idevent = event3.idevent))
116
        DBSession.add(EventHistory(type_action = u'Nagios update state',
117
            idevent = event4.idevent))
118
        DBSession.add(EventHistory(type_action = u'Acknowlegement change state',
119
            idevent = event4.idevent))
120
        DBSession.flush()
121

    
122
        # Les évènements corrélés
123
        aggregate_template = {
124
            'timestamp_active': datetime.now(),
125
            'severity': 0,
126
            'status': u'None',
127
        }
128
        self.aggregate1 = EventsAggregate(idcause=u'foo42', **aggregate_template)
129
        self.aggregate2 = EventsAggregate(idcause=u'foo45', **aggregate_template)
130
        self.aggregate1.events.append(event1)
131
        self.aggregate1.events.append(event3)
132
        self.aggregate2.events.append(event4)
133
        self.aggregate2.events.append(event2)
134
        DBSession.add(self.aggregate1)
135
        DBSession.add(self.aggregate2)
136
        DBSession.flush()
137
        transaction.commit()
138

    
139

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

    
151

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

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

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

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

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

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

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

    
191
        vigi_req = VigiboardRequest(User.by_user_name(u'manager'))
192
        vigi_req.add_plugin(MonPlugin)
193

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