Project

General

Profile

Statistics
| Branch: | Tag: | Revision:

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

History | View | Annotate | Download (6.36 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
from nose.plugins.skip import SkipTest
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

    
34
        # XXX This test has some issues, skip it until it gets fixed.
35
        raise SkipTest
36

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

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

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

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

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

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

    
127
        # On recommence les tests précédents avec l'utilisateur
128
        # manager (plus de droits)
129

    
130
        environ = {'REMOTE_USER': 'manager'}
131
        response = self.app.get('/', extra_environ=environ)
132
        tg.request = response.request
133
        
134
        vigi_req = VigiboardRequest()
135
        
136
        vigi_req.add_plugin(MonPlugin)
137

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