Project

General

Profile

Statistics
| Branch: | Tag: | Revision:

vigiboard / vigiboard / tests / functional / test_vigiboardrequest.py @ 9c0dbb6a

History | View | Annotate | Download (6.6 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, Events, EventHistory, Groups, \
9
    Permission, GroupPermissions, Host, Service, HostGroups, ServiceGroups
10
from vigiboard.tests import TestController
11
from vigiboard.controllers.vigiboard_ctl import VigiboardRequest, \
12
            VigiboardRequestPlugin
13
from vigiboard.tests import setup_db, teardown_db
14
import tg
15
import transaction
16

    
17

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

    
21
    def tearDown(self):
22
        DBSession.rollback()
23
        transaction.begin()
24
        teardown_db()
25

    
26
    def test_creation_requete(self):
27
        """
28
        Génération d'une requête avec application d'un plugin et
29
        des permissions
30
        """
31
        # On commence par peupler la base de donnée actuellement vide
32

    
33
        # les groups et leurs dépendances
34
        DBSession.add(Groups(name="hostmanagers"))
35
        DBSession.add(Groups(name="hosteditors", parent = "hostmanagers"))
36
        idmanagers = DBSession.query(Permission).filter(
37
                Permission.permission_name == 'manage')[0].permission_id
38
        ideditors = DBSession.query(Permission
39
                ).filter(Permission.permission_name == 'edit')[0].permission_id
40
        DBSession.add(GroupPermissions(groupname = "hostmanagers",
41
                idpermission = idmanagers))
42
        DBSession.add(GroupPermissions(groupname = "hosteditors",
43
                idpermission = ideditors))
44

    
45
        # Les évènements et leurs dépendances
46
        DBSession.add(Host(name = "monhost"))
47
        DBSession.add(Service(name = "monservice"))
48
        DBSession.add(Host(name = "monhostuser"))
49
        DBSession.add(Service(name = "monserviceuser"))
50
        DBSession.flush()
51
        event1 = Events(hostname = "monhost", servicename = "monservice")
52
        event2 = Events(hostname = "monhostuser", servicename = "monservice")
53
        event3 = Events(hostname = "monhost", servicename = "monserviceuser")
54
        event4 = Events(hostname = "monhostuser",
55
                servicename = "monserviceuser")
56

    
57
        # Les historiques
58
        DBSession.add(event1)
59
        DBSession.add(event2)
60
        DBSession.add(event3)
61
        DBSession.add(event4)
62
        DBSession.flush()
63
        DBSession.add(EventHistory(type_action = 'Nagios update state',
64
            idevent = event1.idevent))
65
        DBSession.add(EventHistory(type_action = 'Acknowlegement change state',
66
            idevent = event1.idevent))
67
        DBSession.add(EventHistory(type_action = 'Nagios update state',
68
            idevent = event2.idevent))
69
        DBSession.add(EventHistory(type_action = 'Acknowlegement change state',
70
            idevent = event2.idevent))
71
        DBSession.add(EventHistory(type_action = 'Nagios update state',
72
            idevent = event3.idevent))
73
        DBSession.add(EventHistory(type_action = 'Acknowlegement change state',
74
            idevent = event3.idevent))
75
        DBSession.add(EventHistory(type_action = 'Nagios update state',
76
            idevent = event4.idevent))
77
        DBSession.add(EventHistory(type_action = 'Acknowlegement change state',
78
            idevent = event4.idevent))
79
        
80
        # Table de jointure entre les hôtes et services et les groups
81
        DBSession.add(HostGroups(hostname = "monhost",
82
            groupname = "hostmanagers"))
83
        DBSession.add(HostGroups(hostname = "monhostuser",
84
            groupname = "hosteditors"))
85
        DBSession.add(ServiceGroups(servicename = "monservice",
86
            groupname = "hostmanagers"))
87
        DBSession.add(ServiceGroups(servicename = "monserviceuser",
88
            groupname = "hosteditors"))
89
        DBSession.flush()
90
        # On commit tout car app.get fait un rollback ou équivalent
91
        transaction.commit()
92
        # On indique qui on est et on requête l'index pour obtenir
93
        # toutes les variables de sessions
94
        environ = {'REMOTE_USER': 'editor'}
95
        response = self.app.get('/', extra_environ=environ)
96
        tg.request = response.request
97

    
98
        vigi_req = VigiboardRequest()
99

    
100
        # On cré notre plugin, ici il ne sert qu'à lier l'historique
101
        # avec chaque évènement
102

    
103
        class MonPlugin(VigiboardRequestPlugin):
104
            """Plugin de test"""
105

    
106
            def show(self, req):
107
                """Fonction d'affichage"""
108
                return req[1]        
109
        
110
        vigi_req.add_plugin(MonPlugin(
111
            table = [EventHistory.idevent],
112
            join = [(EventHistory, EventHistory.idevent == Events.idevent)]))
113
        
114
        # On effectu les tests suivants :
115
        #   le nombre de ligne (historique et évènements) doivent
116
        #       correspondre (vérification des droits imposé par les groupes)
117
        #   le plugin fonctionne correctement
118

    
119
        num_rows = vigi_req.num_rows() 
120
        assert_true(num_rows == 2, msg = "2 historiques devrait " +\
121
                "être disponible pour l'utilisateur 'editor' mais il " +\
122
                "y en a %d" % num_rows)
123
        vigi_req.format_events(0, 10)
124
        vigi_req.format_history()
125
        assert_true(len(vigi_req.events) == 1 + 1, 
126
                msg = "1 évènement devrait être disponible pour " +\
127
                        "l'utilisateur 'editor' mais il y en a %d" % \
128
                        len(vigi_req.events))
129
        assert_true(vigi_req.events[1][6][0][0] != 'Error', 
130
                msg = "Problème d'exécution des plugins ou de " +\
131
                        "formatage des évènements") 
132

    
133
        # On recommence les tests précédents avec l'utilisateur
134
        # manager (plus de droits)
135

    
136
        environ = {'REMOTE_USER': 'manager'}
137
        response = self.app.get('/', extra_environ=environ)
138
        tg.request = response.request
139
        
140
        vigi_req = VigiboardRequest()
141
        
142
        vigi_req.add_plugin(MonPlugin(
143
            table = [EventHistory.idevent],
144
            join = [(EventHistory, EventHistory.idevent == Events.idevent)]))
145

    
146
        num_rows = vigi_req.num_rows()
147
        assert_true(num_rows == 8, 
148
                msg = "8 historiques devrait être disponible pour " +\
149
                        "l'utilisateur 'manager' mais il y en a %d" % num_rows)
150
        vigi_req.format_events(0, 10)
151
        vigi_req.format_history()
152
        assert_true(len(vigi_req.events) == 4 + 1, 
153
                msg = "4 évènement devrait être disponible pour " +\
154
                        "l'utilisateur 'editor' mais il y en a %d" % \
155
                        len(vigi_req.events))
156
        assert_true(vigi_req.events[1][6][0][0] != 'Error', 
157
                msg = "Problème d'exécution des plugins")
158