Project

General

Profile

Statistics
| Branch: | Tag: | Revision:

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

History | View | Annotate | Download (6.22 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.vigiboardrequest import VigiboardRequest
12
from vigiboard.controllers.vigiboard_plugin.tests import MonPlugin
13
from vigiboard.tests import 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
        """TearDown method for Nose"""
23

    
24
        DBSession.rollback()
25
        transaction.begin()
26
        teardown_db()
27

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

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

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

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

    
100
        vigi_req = VigiboardRequest()
101
        tg.config['vigiboard_plugins'] = [['tests','MonPlugin']]
102
        # Derrière, VigiboardRequest doit charger le plugin de test tout seul
103
        
104
        # On effectu les tests suivants :
105
        #   le nombre de ligne (historique et évènements) doivent
106
        #       correspondre (vérification des droits imposé par les groupes)
107
        #   le plugin fonctionne correctement
108

    
109
        num_rows = vigi_req.num_rows() 
110
        assert_true(num_rows == 2, msg = "2 historiques devrait " +\
111
                "être disponible pour l'utilisateur 'editor' mais il " +\
112
                "y en a %d" % num_rows)
113
        vigi_req.format_events(0, 10)
114
        vigi_req.format_history()
115
        assert_true(len(vigi_req.events) == 1 + 1, 
116
                msg = "1 évènement devrait être disponible pour " +\
117
                        "l'utilisateur 'editor' mais il y en a %d" % \
118
                        len(vigi_req.events))
119
        assert_true(vigi_req.events[1][6][0][0] != 'Error', 
120
                msg = "Problème d'exécution des plugins ou de " +\
121
                        "formatage des évènements") 
122

    
123
        # On recommence les tests précédents avec l'utilisateur
124
        # manager (plus de droits)
125

    
126
        environ = {'REMOTE_USER': 'manager'}
127
        response = self.app.get('/', extra_environ=environ)
128
        tg.request = response.request
129
        
130
        vigi_req = VigiboardRequest()
131
        
132
        vigi_req.add_plugin(MonPlugin)
133

    
134
        num_rows = vigi_req.num_rows()
135
        assert_true(num_rows == 8, 
136
                msg = "8 historiques devrait être disponible pour " +\
137
                        "l'utilisateur 'manager' mais il y en a %d" % num_rows)
138
        vigi_req.format_events(0, 10)
139
        vigi_req.format_history()
140
        assert_true(len(vigi_req.events) == 4 + 1, 
141
                msg = "4 évènement devrait être disponible pour " +\
142
                        "l'utilisateur 'editor' mais il y en a %d" % \
143
                        len(vigi_req.events))
144
        assert_true(vigi_req.events[1][6][0][0] != 'Error', 
145
                msg = "Problème d'exécution des plugins")
146