Project

General

Profile

Revision 4f6c505f

ID4f6c505fc8665a9758157663728d023d67d10a3c
Parent 021bf397
Child 7365fb51

Added by Vincent QUEMENER over 14 years ago

Ajout de tests fonctionnels pour le plugin shn de Vigiboard.

git-svn-id: https://vigilo-dev.si.c-s.fr/svn@1746 b22e2e97-25c9-44ff-b637-2e5ceca36478

View differences:

vigiboard/tests/functional/test_event_table.py
66 66
    hostmanagers.hosts.append(managerhost)
67 67
    DBSession.flush()
68 68

  
69
    # Création des services techniques de test.
70
    service_template = {
71
        'command': u'halt',
72
        'op_dep': u'+',
73
        'weight': 42,
74
    }
75

  
76
    service1 = ServiceLowLevel(
77
        host=managerhost,
78
        servicename=u'managerservice',
79
        **service_template
80
    )
81

  
82
    service2 = ServiceLowLevel(
83
        host=editorhost,
84
        servicename=u'managerservice',
85
        **service_template
86
    )
87

  
88
    service3 = ServiceLowLevel(
89
        host=managerhost,
90
        servicename=u'editorservice',
91
        **service_template
92
    )
93

  
94
    service4 = ServiceLowLevel(
95
        host=editorhost,
96
        servicename=u'editorservice',
97
        **service_template
98
    )
99

  
100
    DBSession.add(service1)
101
    DBSession.add(service2)
102
    DBSession.add(service3)
103
    DBSession.add(service4)
104
    DBSession.flush()
105

  
69 106
    # Ajout des événements eux-mêmes
70 107
    event_template = {
71 108
        'message': u'foo',
vigiboard/tests/functional/vigiboard_plugin/__init__.py
1
"""Tests fonctionnels des plugins de Vigiboard"""
vigiboard/tests/functional/vigiboard_plugin/test_plugin_hls.py
1
# -*- coding: utf-8 -*-
2
"""
3
Integration tests for the autocompletion controller.
4
"""
5

  
6
from datetime import datetime
7
import transaction
8
from vigiboard.tests import TestController
9
from nose.tools import assert_true, assert_equal
10
from vigilo.models import Permission, StateName, \
11
                            HostGroup, Host, \
12
                            LowLevelService, HighLevelService, ServiceGroup, \
13
                            Event, CorrEvent, \
14
                            ImpactedPath, ImpactedHLS
15
from vigilo.models.session import DBSession
16

  
17

  
18
def populate_DB():
19
    """ Peuple la base de données. """
20

  
21
    # On ajoute des noms d'états.
22
    DBSession.add(StateName(statename = u'OK', order=0))
23
    DBSession.add(StateName(statename = u'WARNING', order=2))
24
    DBSession.flush()
25
    transaction.commit()
26

  
27
    # On ajoute un groupe d'hôtes
28
    hostmanagers = HostGroup(name = u'managersgroup')
29
    DBSession.add(hostmanagers)
30
    DBSession.flush()
31

  
32
    # On lui octroie les permissions
33
    manage_perm = Permission.by_permission_name(u'manage')
34
    hostmanagers.permissions.append(manage_perm)
35
    DBSession.flush()
36

  
37
    # On crée un hôte de test.
38
    host = Host(
39
        name = u'host', 
40
        checkhostcmd = u'halt',
41
        snmpcommunity = u'public',
42
        hosttpl = u'/dev/null',
43
        mainip = u'192.168.1.1',
44
        snmpport = 42,
45
        weight = 42,
46
        )
47
    DBSession.add(host)
48

  
49
    # On affecte cet hôte au groupe précédemment créé.
50
    hostmanagers.hosts.append(host)
51
    DBSession.flush()
52

  
53
    # On ajoute un évènement causé par cet hôte.
54
    event1 = Event(
55
        supitem = host,
56
        message = u'foo',
57
        current_state = StateName.statename_to_value(u'WARNING'))
58
    DBSession.add(event1)
59
    DBSession.flush()
60

  
61
    # On ajoute un évènement corrélé causé par cet évènement 'brut'.
62
    aggregate = CorrEvent(
63
        idcause = event1.idevent, 
64
        timestamp_active = datetime.now(),
65
        priority = 1,
66
        status = u'None')
67
    aggregate.events.append(event1)
68
    DBSession.add(aggregate)
69
    DBSession.flush()
70
    
71
    transaction.commit()
72

  
73
    return aggregate
74

  
75
def add_paths(path_number, path_length, idsupitem, 
76
                                        different_path_lengths = None):
77
    """ 
78
    Ajoute path_number chemins de services de haut niveau impactés
79
    dans la base de donnée. Leur longeur sera égale à path_length.
80
    La 3ème valeur passée en paramètre est l'id du supitem impactant.
81
     
82
    path_number * path_length services de 
83
    haut niveau sont créés dans l'opération.
84
    """
85

  
86
    # Création de services de haut niveau dans la BDD.
87
    hls_template = {
88
        'op_dep': u'&',
89
        'message': u'Bar',
90
        'warning_threshold': 60,
91
        'critical_threshold': 80,
92
        'weight': None,
93
        'priority': 2,
94
    }
95

  
96
    # Création des chemins de services de haut niveau impactés.
97
    for j in range(path_number):
98
        
99
        # On crée le chemin en lui-même
100
        path = ImpactedPath(idsupitem = idsupitem)
101
        DBSession.add(path)
102
        DBSession.flush()
103
        
104
        # Pour chaque étage du chemin,
105
        for i in range(path_length):
106
            # on ajoute un service de haut niveau dans la BDD,
107
            hls = HighLevelService(
108
                servicename = u'HLS' + str(j + 1) + str(i + 1), 
109
                **hls_template)
110
            DBSession.add(hls)
111
            # et on ajoute un étage au chemin contenant ce service. 
112
            DBSession.add(
113
                ImpactedHLS(
114
                    path = path,
115
                    hls = hls,
116
                    distance = i + 1,
117
                    ))
118
    
119
    DBSession.flush()
120
    transaction.commit()
121

  
122

  
123
class TestHLSPlugin(TestController):
124
    """
125
    Classe de test du contrôleur listant les services 
126
    de haut niveau impactés par un évènement corrélé.
127
    """
128
    
129
    def test_no_impacted_hls(self):
130
        """
131
        Retour du plugin SHN pour 0 SHN impacté
132
        Teste la valeur de retour du plugin lorsque
133
        aucun service de haut niveau n'est impacté.
134
        """
135
        
136
        # On peuple la base de données avant le test.
137
        aggregate = populate_DB()
138
        DBSession.add(aggregate)
139
        add_paths(0, 0, aggregate.events[0].idsupitem)
140
        DBSession.add(aggregate)
141
        
142
        ### 1er cas : l'utilisateur n'est pas connecté.
143
        # On vérifie que le plugin retourne bien une erreur 404.
144
        resp = self.app.post(
145
            '/get_plugin_value', 
146
            {"idcorrevent" : str(aggregate.idcorrevent),
147
             "plugin_name" : "shn"},
148
            status = 401,)
149
        
150
        ### 2ème cas : l'utilisateur n'a pas les
151
        ### droits sur l'hôte ayant causé le correvent.
152
        # On vérifie que le plugin retourne bien une erreur 404.
153
        resp = self.app.post(
154
            '/get_plugin_value', 
155
            {"idcorrevent" : str(aggregate.idcorrevent),
156
             "plugin_name" : "shn"},
157
            status = 404,
158
            extra_environ={'REMOTE_USER': 'editor'},)
159
        
160
        ### 3ème cas : l'utilisateur a cette fois les droits.        
161
        resp = self.app.post(
162
            '/get_plugin_value', 
163
            {"idcorrevent" : str(aggregate.idcorrevent),
164
             "plugin_name" : "shn"},
165
            extra_environ={'REMOTE_USER': 'manager'})
166
        # On vérifie que le plugin ne retourne toujours rien.
167
        assert_equal(resp.json, {"services": []})
168
    
169
    def test_1_impacted_hls_path(self):
170
        """
171
        Retour du plugin SHN pour 1 chemin impacté
172
        Teste la valeur de retour du plugin lorsqu'un
173
        chemin de services de haut niveau est impacté.
174
        """
175
        
176
        # On peuple la base de données avant le test.
177
        aggregate = populate_DB()
178
        DBSession.add(aggregate)
179
        add_paths(1, 2, aggregate.events[0].idsupitem)
180
        DBSession.add(aggregate)
181
        
182
        ### 1er cas : l'utilisateur n'est pas connecté.
183
        # On vérifie que le plugin retourne bien une erreur 404.
184
        resp = self.app.post(
185
            '/get_plugin_value', 
186
            {"idcorrevent" : str(aggregate.idcorrevent),
187
             "plugin_name" : "shn"},
188
            status = 401,)
189
        
190
        ### 2ème cas : l'utilisateur n'a pas les
191
        ### droits sur l'hôte ayant causé le correvent.
192
        resp = self.app.post(
193
            '/get_plugin_value', 
194
            {"idcorrevent" : str(aggregate.idcorrevent),
195
             "plugin_name" : "shn"},
196
            status = 404,
197
            extra_environ={'REMOTE_USER': 'editor'})
198
        
199
        ### 3ème cas : l'utilisateur a cette fois les droits.        
200
        resp = self.app.post(
201
            '/get_plugin_value', 
202
            {"idcorrevent" : str(aggregate.idcorrevent),
203
             "plugin_name" : "shn"},
204
            extra_environ={'REMOTE_USER': 'manager'})
205
        # On vérifie que le plugin retourne bien les 2 SHN impactés..
206
        assert_equal(resp.json, {"services": ['HLS12']})
207
    
208
    def test_2_impacted_hls_path(self):
209
        """
210
        Retour du plugin SHN pour 2 chemins impactés
211
        Teste la valeur de retour du plugin lorsque deux
212
        chemins de services de haut niveau sont impactés.
213
        """
214
        
215
        # On peuple la base de données avant le test.
216
        aggregate = populate_DB()
217
        DBSession.add(aggregate)
218
        add_paths(2, 2, aggregate.events[0].idsupitem)
219
        DBSession.add(aggregate)
220
        
221
        ### 1er cas : l'utilisateur n'est pas connecté.
222
        # On vérifie que le plugin retourne bien une erreur 404.
223
        resp = self.app.post(
224
            '/get_plugin_value', 
225
            {"idcorrevent" : str(aggregate.idcorrevent),
226
             "plugin_name" : "shn"},
227
            status = 401,)
228
        
229
        ### 2ème cas : l'utilisateur n'a pas les
230
        ### droits sur l'hôte ayant causé le correvent.
231
        resp = self.app.post(
232
            '/get_plugin_value', 
233
            {"idcorrevent" : str(aggregate.idcorrevent),
234
             "plugin_name" : "shn"},
235
            status = 404,
236
            extra_environ={'REMOTE_USER': 'editor'})
237
        
238
        ### 3ème cas : l'utilisateur a cette fois les droits.        
239
        resp = self.app.post(
240
            '/get_plugin_value', 
241
            {"idcorrevent" : str(aggregate.idcorrevent),
242
             "plugin_name" : "shn"},
243
            extra_environ={'REMOTE_USER': 'manager'})
244
        # On vérifie que le plugin retourne bien les 4 SHN impactés..
245
        assert_equal(resp.json, {"services": ['HLS12', 'HLS22']})
246
        

Also available in: Unified diff