Project

General

Profile

Statistics
| Branch: | Tag: | Revision:

vigiboard / vigiboard / tests / functional / test_vigiboardrequest.py @ 35cea70e

History | View | Annotate | Download (6.78 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
#Create an empty database before we start our tests for this module
18
def setup():
19
    """Function called by nose on module load"""
20
    setup_db()
21

    
22
#Teardown that database 
23
def teardown():
24
    """Function called by nose after all tests in this module ran"""
25
    teardown_db()
26

    
27
class TestVigiboardRequest(TestController):
28
    """Test de la classe Vigiboard Request"""
29

    
30
    def test_creation_requete(self):
31
        """
32
        Génération d'une requête avec application d'un plugin et
33
        des permissions
34
        """
35

    
36
        # On commence par peupler la base de donnée actuellement vide
37

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

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

    
62
        # Les historiques
63
        DBSession.add(event1)
64
        DBSession.add(event2)
65
        DBSession.add(event3)
66
        DBSession.add(event4)
67
        DBSession.flush()
68
        DBSession.add(EventHistory(type_action = 'Nagios update state',
69
            idevent = event1.idevent))
70
        DBSession.add(EventHistory(type_action = 'Acknowlegement change state',
71
            idevent = event1.idevent))
72
        DBSession.add(EventHistory(type_action = 'Nagios update state',
73
            idevent = event2.idevent))
74
        DBSession.add(EventHistory(type_action = 'Acknowlegement change state',
75
            idevent = event2.idevent))
76
        DBSession.add(EventHistory(type_action = 'Nagios update state',
77
            idevent = event3.idevent))
78
        DBSession.add(EventHistory(type_action = 'Acknowlegement change state',
79
            idevent = event3.idevent))
80
        DBSession.add(EventHistory(type_action = 'Nagios update state',
81
            idevent = event4.idevent))
82
        DBSession.add(EventHistory(type_action = 'Acknowlegement change state',
83
            idevent = event4.idevent))
84
        
85
        # Table de jointure entre les hôtes et services et les groups
86
        DBSession.add(HostGroups(hostname = "monhost",
87
            groupname = "hostmanagers"))
88
        DBSession.add(HostGroups(hostname = "monhostuser",
89
            groupname = "hosteditors"))
90
        DBSession.add(ServiceGroups(servicename = "monservice",
91
            groupname = "hostmanagers"))
92
        DBSession.add(ServiceGroups(servicename = "monserviceuser",
93
            groupname = "hosteditors"))
94
        DBSession.flush()
95
        
96
        # On commit tout car app.get fait un rollback ou équivalent
97
        transaction.commit()
98

    
99
        # On indique qui on est et on requête l'index pour obtenir
100
        # toutes les variables de sessions
101
        environ = {'REMOTE_USER': 'editor'}
102
        response = self.app.get('/', extra_environ=environ)
103
        tg.request = response.request
104

    
105
        vigi_req = VigiboardRequest()
106

    
107
        # On cré notre plugin, ici il ne sert qu'à lier l'historique
108
        # avec chaque évènement
109

    
110
        class MonPlugin(VigiboardRequestPlugin):
111
            """Plugin de test"""
112

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

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

    
140
        # On recommence les tests précédents avec l'utilisateur
141
        # manager (plus de droits)
142

    
143
        environ = {'REMOTE_USER': 'manager'}
144
        response = self.app.get('/', extra_environ=environ)
145
        tg.request = response.request
146
        
147
        vigi_req = VigiboardRequest()
148
        
149
        vigi_req.add_plugin(MonPlugin(
150
            table = [EventHistory.idevent],
151
            join = [(EventHistory, EventHistory.idevent == Events.idevent)]))
152

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