Project

General

Profile

Statistics
| Branch: | Tag: | Revision:

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

History | View | Annotate | Download (5.69 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 *
9
from vigiboard.tests import TestController
10
from vigiboard.controllers.vigiboard_ctl import VigiboardRequest, VigiboardRequestPlugin
11
from vigiboard.tests import setup_db, teardown_db
12
import tg
13
import transaction
14

    
15
#Create an empty database before we start our tests for this module
16
def setup():
17
    """Function called by nose on module load"""
18
    setup_db()
19

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

    
25
class TestVigiboardRequest(TestController):
26

    
27
    def test_creation_requete(self):
28
        """Génération d'une requête avec application d'un plugin et des permissions"""
29

    
30
        # On commence par peupler la base de donnée actuellement vide
31

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

    
40
        # Les évènements et leurs dépendances
41
        DBSession.add(Host(name="monhost"))
42
        DBSession.add(Service(name="monservice"))
43
        DBSession.add(Host(name="monhostuser"))
44
        DBSession.add(Service(name="monserviceuser"))
45
        DBSession.flush()
46
        a = Events(hostname="monhost",servicename="monservice")
47
        b = Events(hostname="monhostuser",servicename="monservice")
48
        c = Events(hostname="monhost",servicename="monserviceuser")
49
        d = Events(hostname="monhostuser",servicename="monserviceuser")
50

    
51
        # Les historiques
52
        DBSession.add(a)
53
        DBSession.add(b)
54
        DBSession.add(c)
55
        DBSession.add(d)
56
        DBSession.flush()
57
        DBSession.add(EventHistory(type_action='Nagios update state',idevent=a.idevent))
58
        DBSession.add(EventHistory(type_action='Acknowlegement change state',idevent=a.idevent))
59
        DBSession.add(EventHistory(type_action='Nagios update state',idevent=b.idevent))
60
        DBSession.add(EventHistory(type_action='Acknowlegement change state',idevent=b.idevent))
61
        DBSession.add(EventHistory(type_action='Nagios update state',idevent=c.idevent))
62
        DBSession.add(EventHistory(type_action='Acknowlegement change state',idevent=c.idevent))
63
        DBSession.add(EventHistory(type_action='Nagios update state',idevent=d.idevent))
64
        DBSession.add(EventHistory(type_action='Acknowlegement change state',idevent=d.idevent))
65
        
66
        # Table de jointure entre les hôtes et services et les groups
67
        DBSession.add(HostGroups(hostname="monhost",groupname="hostmanagers"))
68
        DBSession.add(HostGroups(hostname="monhostuser",groupname="hosteditors"))
69
        DBSession.add(ServiceGroups(servicename="monservice",groupname="hostmanagers"))
70
        DBSession.add(ServiceGroups(servicename="monserviceuser",groupname="hosteditors"))
71
        DBSession.flush()
72
        
73
        # On commit tout car app.get fait un rollback ou équivalent
74
        transaction.commit()
75

    
76
        # On indique qui on est et on requête l'index pour obtenir toutes les variables de sessions
77
        environ = {'REMOTE_USER': 'editor'}
78
        response = self.app.get('/', extra_environ=environ)
79
        tg.request = response.request
80

    
81
        self.vr = VigiboardRequest()
82

    
83
        # On cré notre plugin, ici il ne sert qu'à lier l'historique avec chaque évènement
84
        class MonPlugin(VigiboardRequestPlugin):
85
            def show(self,rq):
86
                return rq[1]        
87
        
88
        self.vr.AddPlugin(MonPlugin(table=[EventHistory.idevent],
89
                                    join=[(EventHistory,EventHistory.idevent == Events.idevent)]))
90
        
91
        # On effectu les tests suivants :
92
        #   le nombre de ligne (historique et évènements) doivt correspondre (vérification des droits imposé par les groupes)
93
        #   le plugin fonctionne correctement
94
        nb = self.vr.NumRows() 
95
        assert_true(nb == 2,msg="2 historiques devrait être disponible pour l'utilisateur 'editor' mais il y en a %d" % nb)
96
        self.vr.FormatEvents(0,10)
97
        self.vr.FormatHistory()
98
        assert_true(len(self.vr.events) == 1+1,msg="1 évènement  devrait être disponible pour l'utilisateur 'editor' mais il y en a %d" % len(self.vr.events))
99
        assert_true(self.vr.events[1][6][0][0] != 'Error',msg="Problème d'exécution des plugins ou de formatage des évènements") 
100

    
101
        # On recommence les tests précédents avec l'utilisateur manager (plus de droits)
102
        environ = {'REMOTE_USER': 'manager'}
103
        response = self.app.get('/', extra_environ=environ)
104
        tg.request = response.request
105
        
106
        self.vr = VigiboardRequest()
107
        
108
        self.vr.AddPlugin(MonPlugin(table=[EventHistory.idevent],
109
                                    join=[(EventHistory,EventHistory.idevent == Events.idevent)]))
110

    
111
        nb = self.vr.NumRows()
112
        assert_true(nb == 8,msg="8 historiques devrait être disponible pour l'utilisateur 'manager' mais il y en a %d" % nb)
113
        self.vr.FormatEvents(0,10)
114
        self.vr.FormatHistory()
115
        assert_true(len(self.vr.events) == 4+1,msg="4 évènement  devrait être disponible pour l'utilisateur 'editor' mais il y en a %d" % len(self.vr.events))
116
        assert_true(self.vr.events[1][6][0][0] != 'Error',msg="Problème d'exécution des plugins")
117