Project

General

Profile

Statistics
| Branch: | Tag: | Revision:

vigiboard / vigiboard / tests / functional / test_vigiboardrequest.py @ 8484b8bd

History | View | Annotate | Download (6.86 KB)

1
# -*- coding: utf-8 -*-
2
# vim:set expandtab tabstop=4 shiftwidth=4:
3
"""
4
Test de la classe Vigiboard Request
5
"""
6
from nose.tools import assert_true
7

    
8
from vigiboard.model import DBSession, \
9
    Event, EventHistory, Permission, \
10
    Group, Host, HostGroup, Service, ServiceGroup
11
from vigiboard.tests import TestController
12
from vigiboard.controllers.vigiboardrequest import VigiboardRequest
13
from vigiboard.controllers.vigiboard_plugin.tests import MonPlugin
14
import tg
15
from nose.plugins.skip import SkipTest
16

    
17
class TestVigiboardRequest(TestController):
18
    """Test de la classe Vigiboard Request"""
19

    
20
    application_under_test = 'main'
21

    
22

    
23
    def test_creation_requete(self):
24
        """Génération d'une requête avec plugin et permissions."""
25

    
26
        # On commence par peupler la base de données
27

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

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

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

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

    
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

    
67
        # Les évènements eux-mêmes
68
        event_template = {
69
            'active': True,
70
            'message': u'foo',
71
        }
72

    
73
        event1 = Event(idevent=u'foo42', hostname=u'monhost',
74
            servicename=u'monservice', **event_template)
75
        event2 = Event(idevent=u'foo43', hostname=u'monhostuser',
76
            servicename=u'monservice', **event_template)
77
        event3 = Event(idevent=u'foo44', hostname=u'monhost',
78
            servicename=u'monserviceuser', **event_template)
79
        event4 = Event(idevent=u'foo45', hostname=u'monhostuser',
80
            servicename=u'monserviceuser', **event_template)
81

    
82
        DBSession.add(event1)
83
        DBSession.add(event2)
84
        DBSession.add(event3)
85
        DBSession.add(event4)
86
        DBSession.flush()
87

    
88

    
89
        # Les historiques
90
        DBSession.add(EventHistory(type_action = u'Nagios update state',
91
            idevent = event1.idevent))
92
        DBSession.add(EventHistory(type_action = u'Acknowlegement change state',
93
            idevent = event1.idevent))
94
        DBSession.add(EventHistory(type_action = u'Nagios update state',
95
            idevent = event2.idevent))
96
        DBSession.add(EventHistory(type_action = u'Acknowlegement change state',
97
            idevent = event2.idevent))
98
        DBSession.add(EventHistory(type_action = u'Nagios update state',
99
            idevent = event3.idevent))
100
        DBSession.add(EventHistory(type_action = u'Acknowlegement change state',
101
            idevent = event3.idevent))
102
        DBSession.add(EventHistory(type_action = u'Nagios update state',
103
            idevent = event4.idevent))
104
        DBSession.add(EventHistory(type_action = u'Acknowlegement change state',
105
            idevent = event4.idevent))
106
        DBSession.flush()
107

    
108

    
109
        # Table de jointure entre les hôtes et services et les groups
110
        DBSession.add(HostGroup(hostname = u"monhost",
111
            groupname = u"hostmanagers"))
112
        DBSession.add(HostGroup(hostname = u"monhostuser",
113
            groupname = u"hosteditors"))
114
        DBSession.add(ServiceGroup(servicename = u"monservice",
115
            groupname = u"hostmanagers"))
116
        DBSession.add(ServiceGroup(servicename = u"monserviceuser",
117
            groupname = u"hosteditors"))
118
        DBSession.flush()
119

    
120
        # XXX Use '42' as the password until remote password validation gets in.
121
        resp = self.app.get('/login_handler?login=manager&password=42',
122
                            status=302)
123
        resp = resp.follow(status=302)
124

    
125
        # On indique qui on est et on requête l'index pour obtenir
126
        # toutes les variables de sessions
127
        environ = {'REMOTE_USER': 'editor'}
128
        response = self.app.get('/', extra_environ=environ)
129
        tg.request = response.request
130

    
131
        assert_true(True, msg="ok")
132

    
133
#        vigi_req = VigiboardRequest()
134
##        tg.config['vigiboard_plugins'] = [['tests', 'MonPlugin']]
135
#        # Derrière, VigiboardRequest doit charger le plugin de tests tout seul
136
#        
137
#        # On effectue les tests suivants :
138
#        #   le nombre de lignes (historique et évènements) doivent
139
#        #       correspondre (vérification des droits imposés par les groupes)
140
#        #   le plugin fonctionne correctement
141

    
142
#        num_rows = vigi_req.num_rows() 
143
#        assert_true(num_rows == 2, msg = "2 historiques devrait " +\
144
#                "être disponible pour l'utilisateur 'editor' mais il " +\
145
#                "y en a %d" % num_rows)
146
#        vigi_req.format_events(0, 10)
147
#        vigi_req.format_history()
148
#        assert_true(len(vigi_req.events) == 1 + 1, 
149
#                msg = "1 évènement devrait être disponible pour " +\
150
#                        "l'utilisateur 'editor' mais il y en a %d" % \
151
#                        len(vigi_req.events))
152
#        assert_true(vigi_req.events[1][6][0][0] != 'Error', 
153
#                msg = "Problème d'exécution des plugins ou de " +\
154
#                        "formatage des évènements") 
155

    
156
#        # On recommence les tests précédents avec l'utilisateur
157
#        # manager (plus de droits)
158

    
159
#        environ = {'REMOTE_USER': 'manager'}
160
#        response = self.app.get('/', extra_environ=environ)
161
#        tg.request = response.request
162
#        
163
#        vigi_req = VigiboardRequest()
164
#        
165
#        vigi_req.add_plugin(MonPlugin)
166

    
167
#        num_rows = vigi_req.num_rows()
168
#        assert_true(num_rows == 8, 
169
#                msg = "8 historiques devrait être disponible pour " +\
170
#                        "l'utilisateur 'manager' mais il y en a %d" % num_rows)
171
#        vigi_req.format_events(0, 10)
172
#        vigi_req.format_history()
173
#        assert_true(len(vigi_req.events) == 4 + 1, 
174
#                msg = "4 évènement devrait être disponible pour " +\
175
#                        "l'utilisateur 'editor' mais il y en a %d" % \
176
#                        len(vigi_req.events))
177
#        assert_true(vigi_req.events[1][6][0][0] != 'Error', 
178
#                msg = "Problème d'exécution des plugins")
179