Project

General

Profile

Revision 6f6efdcd

ID6f6efdcd325be1f197f3f271ffeef4b2bc0a4560
Parent 88cac5bb
Child 0bd9c069

Added by Francois POIROTTE about 13 years ago

Fusion du travail fait dans la branche 'nested_sets' vers le trunk.

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

View differences:

vigiboard/tests/functional/test_root.py
18 18
from vigilo.models.session import DBSession
19 19
from vigilo.models.tables import Event, EventHistory, CorrEvent, User, \
20 20
                            Permission, StateName, Host, UserGroup, \
21
                            SupItemGroup, LowLevelService, DataPermission
21
                            LowLevelService, DataPermission
22
from vigilo.models.demo.functions import *
22 23
from vigiboard.tests import TestController
23 24

  
24 25
def populate_DB():
25 26
    """ Peuple la base de données. """
26 27
    # On ajoute un groupe d'hôtes et un groupe de services.
27
    supitemmanagers = SupItemGroup(name = u'managersgroup')
28
    supitemmanagers = add_supitemgroup('managersgroup')
28 29
    DBSession.add(supitemmanagers)
29 30
    DBSession.flush()
30 31

  
......
38 39

  
39 40
    # On crée un 2 hôtes, et on les ajoute au groupe d'hôtes.
40 41
    host1 = Host(
41
        name = u'host1',      
42
        name = u'host1',
42 43
        checkhostcmd = u'halt',
43 44
        snmpcommunity = u'public',
44 45
        hosttpl = u'/dev/null',
......
49 50
    DBSession.add(host1)
50 51
    supitemmanagers.supitems.append(host1)
51 52
    host2 = Host(
52
        name = u'host2',      
53
        name = u'host2',
53 54
        checkhostcmd = u'halt',
54 55
        snmpcommunity = u'public',
55 56
        hosttpl = u'/dev/null',
......
79 80
    DBSession.add(service2)
80 81
    supitemmanagers.supitems.append(service2)
81 82
    DBSession.flush()
82
    
83

  
83 84
    return ([host1, host2], [service1, service2])
84 85

  
85 86
def add_correvent_caused_by(supitem, timestamp,
86 87
        correvent_status=u"None", event_status=u"WARNING"):
87 88
    """
88
    Ajoute dans la base de données un évènement corrélé causé 
89
    Ajoute dans la base de données un évènement corrélé causé
89 90
    par un incident survenu sur l'item passé en paramètre.
90 91
    Génère un historique pour les tests.
91 92
    """
92 93

  
93 94
    # Ajout d'un événement
94 95
    event = Event(
95
        supitem = supitem, 
96
        supitem = supitem,
96 97
        message = u'foo',
97 98
        current_state = StateName.statename_to_value(event_status),
98 99
        timestamp = datetime.now(),
......
102 103

  
103 104
    # Ajout d'un événement corrélé
104 105
    aggregate = CorrEvent(
105
        idcause = event.idevent, 
106
        idcause = event.idevent,
106 107
        timestamp_active = timestamp,
107 108
        priority = 1,
108 109
        status = correvent_status)
109 110
    aggregate.events.append(event)
110 111
    DBSession.add(aggregate)
111 112
    DBSession.flush()
112
    
113

  
113 114
    return aggregate.idcorrevent
114 115

  
115 116

  
......
163 164
        # On peuple la BDD avec 2 hôtes, 2 services de bas niveau,
164 165
        # et un groupe d'hôtes et de services associés à ces items.
165 166
        (hosts, services) = populate_DB()
166
        
167

  
167 168
        # On ajoute 2 évènements corrélés causés par ces hôtes
168 169
        timestamp = datetime.now()
169 170
        correvent1_id = add_correvent_caused_by(hosts[0], timestamp)
170 171
        correvent2_id = add_correvent_caused_by(hosts[1], timestamp)
171 172
        transaction.commit()
172
        
173

  
173 174
        ### 1er cas : L'utilisateur n'est pas connecté.
174 175
        # On vérifie que le plugin retourne bien une erreur 401.
175 176
        response = self.app.post(
......
179 180
                "trouble_ticket" : u"foo",
180 181
                "ack" : u'NoChange',
181 182
            }, status = 401)
182
        
183

  
183 184
        ### 2ème cas : L'utilisateur utilisé pour
184 185
        # se connecter à Vigiboard est 'limited_access'.
185 186
        environ = {'REMOTE_USER': 'limited_access'}
186
        
187

  
187 188
        # On s'attend à ce qu'une erreur 302 soit renvoyée, et à
188 189
        # ce qu'un message d'erreur précise à l'utilisateur qu'il
189 190
        # n'a pas la permission de modifier ces évènements.
......
194 195
                "trouble_ticket" : u"foo",
195 196
                "last_modification": mktime(timestamp.timetuple()),
196 197
            }, status = 302, extra_environ = environ)
197
        
198

  
198 199
        response = response.follow(status=200, extra_environ = environ)
199 200
        assert_true(response.lxml.xpath(
200 201
            '//div[@id="flash"]/div[@class="error"]'))
......
202 203
        ### 3ème cas : L'utilisateur utilisé pour
203 204
        # se connecter à Vigiboard est 'access'.
204 205
        environ = {'REMOTE_USER': 'access'}
205
        
206

  
206 207
        # On s'attend à ce que le statut de la requête soit 302,
207 208
        # et à ce qu'un message informe l'utilisateur que les
208 209
        # évènements corrélés sélectionnées ont bien été mis à jour.
......
213 214
                "trouble_ticket" : u"foo",
214 215
                "ack" : u'NoChange',
215 216
            }, status = 302, extra_environ = environ)
216
        
217

  
217 218
        response = response.follow(status=200, extra_environ = environ)
218 219
        assert_false(response.lxml.xpath(
219 220
            '//div[@id="flash"]/div[@class="error"]'))
220 221
        assert_true(response.lxml.xpath(
221 222
            '//div[@id="flash"]/div[@class="ok"]'))
222
        
223

  
223 224
        # On s'assure que le ticket de l'évènement corrélé
224 225
        # a bien été mis à jour dans la base de données.
225 226
        correvents = DBSession.query(
226 227
            CorrEvent.trouble_ticket
227 228
            ).filter(CorrEvent.idcorrevent.in_([correvent1_id, correvent2_id])
228 229
            ).all()
229
        
230

  
230 231
        assert_equal(correvents[0].trouble_ticket, u"foo")
231 232
        assert_equal(correvents[1].trouble_ticket, u"foo")
232 233

  
......
236 237
        # On peuple la BDD avec 2 hôtes, 2 services de bas niveau,
237 238
        # et un groupe d'hôtes et de services associés à ces items.
238 239
        (hosts, services) = populate_DB()
239
        
240

  
240 241
        # On ajoute 2 évènements corrélés causés par ces hôtes
241 242
        timestamp = datetime.now()
242 243
        correvent1_id = add_correvent_caused_by(services[0], timestamp)
243 244
        correvent2_id = add_correvent_caused_by(services[1], timestamp)
244
        
245

  
245 246
        transaction.commit()
246
        
247

  
247 248
        ### 1er cas : L'utilisateur n'est pas connecté.
248 249
        # On vérifie que le plugin retourne bien une erreur 401.
249 250
        response = self.app.post(
......
253 254
                "trouble_ticket" : u"foo",
254 255
                "ack" : u'NoChange',
255 256
            }, status = 401)
256
        
257

  
257 258
        ### 2ème cas : L'utilisateur utilisé pour
258 259
        # se connecter à Vigiboard est 'limited_access'.
259 260
        environ = {'REMOTE_USER': 'limited_access'}
260
        
261

  
261 262
        # On s'attend à ce qu'une erreur 302 soit renvoyée, et à
262 263
        # ce qu'un message d'erreur précise à l'utilisateur qu'il
263 264
        # n'a pas la permission de modifier ces évènements.
......
268 269
                "trouble_ticket" : u"foo",
269 270
                "ack" : u'NoChange',
270 271
            }, status = 302, extra_environ = environ)
271
        
272

  
272 273
        response = response.follow(status=200, extra_environ = environ)
273 274
        assert_true(response.lxml.xpath(
274 275
            '//div[@id="flash"]/div[@class="error"]'))
......
276 277
        ### 3ème cas : L'utilisateur utilisé pour
277 278
        # se connecter à Vigiboard est 'access'.
278 279
        environ = {'REMOTE_USER': 'access'}
279
        
280

  
280 281
        # On s'attend à ce que le statut de la requête soit 302,
281 282
        # et à ce qu'un message informe l'utilisateur que les
282 283
        # évènements corrélés sélectionnées ont bien été mis à jour.
......
287 288
                "trouble_ticket" : u"foo",
288 289
                "ack" : u'NoChange',
289 290
            }, status = 302, extra_environ = environ)
290
        
291

  
291 292
        response = response.follow(status=200, extra_environ = environ)
292 293
        assert_false(response.lxml.xpath(
293 294
            '//div[@id="flash"]/div[@class="error"]'))
294 295
        assert_true(response.lxml.xpath(
295 296
            '//div[@id="flash"]/div[@class="ok"]'))
296
        
297

  
297 298
        # On s'assure que le ticket de l'évènement corrélé
298 299
        # a bien été mis à jour dans la base de données.
299 300
        correvents = DBSession.query(
......
309 310
        # On peuple la BDD avec 2 hôtes, 2 services de bas niveau,
310 311
        # et un groupe d'hôtes et de services associés à ces items.
311 312
        (hosts, services) = populate_DB()
312
        
313

  
313 314
        # On ajoute 2 évènements corrélés causés par ces hôtes
314 315
        timestamp = datetime.now()
315 316
        correvent1_id = add_correvent_caused_by(hosts[0], timestamp)
316 317
        correvent2_id = add_correvent_caused_by(hosts[1], timestamp)
317 318
        transaction.commit()
318
        
319

  
319 320
        ### 1er cas : L'utilisateur n'est pas connecté.
320 321
        # On vérifie que le plugin retourne bien une erreur 401.
321 322
        response = self.app.post(
......
325 326
                "trouble_ticket" : "",
326 327
                "ack" : u'Acknowledged',
327 328
            }, status = 401)
328
        
329

  
329 330
        ### 2ème cas : L'utilisateur utilisé pour
330 331
        # se connecter à Vigiboard est 'limited_access'.
331 332
        environ = {'REMOTE_USER': 'limited_access'}
332
        
333

  
333 334
        # On s'attend à ce qu'une erreur 302 soit renvoyée, et à
334 335
        # ce qu'un message d'erreur précise à l'utilisateur qu'il
335 336
        # n'a pas la permission de modifier ces évènements.
......
340 341
                "trouble_ticket" : "",
341 342
                "ack" : u'Acknowledged',
342 343
            }, status = 302, extra_environ = environ)
343
        
344

  
344 345
        response = response.follow(status=200, extra_environ = environ)
345 346
        assert_true(response.lxml.xpath(
346 347
            '//div[@id="flash"]/div[@class="error"]'))
......
348 349
        ### 3ème cas : L'utilisateur utilisé pour
349 350
        # se connecter à Vigiboard est 'access'.
350 351
        environ = {'REMOTE_USER': 'access'}
351
        
352

  
352 353
        # On s'attend à ce que le statut de la requête soit 302,
353 354
        # et à ce qu'un message informe l'utilisateur que les
354 355
        # évènements corrélés sélectionnées ont bien été mis à jour.
......
359 360
                "trouble_ticket" : "",
360 361
                "ack" : u'Acknowledged',
361 362
            }, status = 302, extra_environ = environ)
362
        
363

  
363 364
        response = response.follow(status=200, extra_environ = environ)
364 365
        assert_false(response.lxml.xpath(
365 366
            '//div[@id="flash"]/div[@class="error"]'))
366 367
        assert_true(response.lxml.xpath(
367 368
            '//div[@id="flash"]/div[@class="ok"]'))
368
        
369

  
369 370
        # On s'assure que le statut de l'évènement corrélé
370 371
        # a bien été mis à jour dans la base de données.
371 372
        correvents = DBSession.query(
......
382 383
        # On peuple la BDD avec 2 hôtes, 2 services de bas niveau,
383 384
        # et un groupe d'hôtes et de services associés à ces items.
384 385
        (hosts, services) = populate_DB()
385
        
386

  
386 387
        # On ajoute 2 évènements corrélés causés par ces hôtes
387 388
        timestamp = datetime.now()
388 389
        correvent1_id = add_correvent_caused_by(services[0], timestamp)
389 390
        correvent2_id = add_correvent_caused_by(services[1], timestamp)
390
        
391

  
391 392
        transaction.commit()
392
        
393

  
393 394
        ### 1er cas : L'utilisateur n'est pas connecté.
394 395
        # On vérifie que le plugin retourne bien une erreur 401.
395 396
        response = self.app.post(
......
399 400
                "trouble_ticket" : "",
400 401
                "ack" : u'Acknowledged',
401 402
            }, status = 401)
402
        
403

  
403 404
        ### 2ème cas : L'utilisateur utilisé pour
404 405
        # se connecter à Vigiboard est 'limited_access'.
405 406
        environ = {'REMOTE_USER': 'limited_access'}
406
        
407

  
407 408
        # On s'attend à ce qu'une erreur 302 soit renvoyée, et à
408 409
        # ce qu'un message d'erreur précise à l'utilisateur qu'il
409 410
        # n'a pas la permission de modifier ces évènements.
......
414 415
                "trouble_ticket" : "",
415 416
                "ack" : u'Acknowledged',
416 417
            }, status = 302, extra_environ = environ)
417
        
418

  
418 419
        response = response.follow(status=200, extra_environ = environ)
419 420
        assert_true(response.lxml.xpath(
420 421
            '//div[@id="flash"]/div[@class="error"]'))
......
422 423
        ### 3ème cas : L'utilisateur utilisé pour
423 424
        # se connecter à Vigiboard est 'access'.
424 425
        environ = {'REMOTE_USER': 'access'}
425
        
426

  
426 427
        # On s'attend à ce que le statut de la requête soit 302,
427 428
        # et à ce qu'un message informe l'utilisateur que les
428 429
        # évènements corrélés sélectionnées ont bien été mis à jour.
......
433 434
                "trouble_ticket" : "",
434 435
                "ack" : u'Acknowledged',
435 436
            }, status = 302, extra_environ = environ)
436
        
437

  
437 438
        response = response.follow(status=200, extra_environ = environ)
438 439
        assert_false(response.lxml.xpath(
439 440
            '//div[@id="flash"]/div[@class="error"]'))
440 441
        assert_true(response.lxml.xpath(
441 442
            '//div[@id="flash"]/div[@class="ok"]'))
442
        
443

  
443 444
        # On s'assure que le statut de l'évènement corrélé
444 445
        # a bien été mis à jour dans la base de données.
445 446
        correvents = DBSession.query(
......
455 456
        # On peuple la BDD avec 2 hôtes, 2 services de bas niveau,
456 457
        # et un groupe d'hôtes et de services associés à ces items.
457 458
        (hosts, services) = populate_DB()
458
        
459

  
459 460
        # On ajoute 2 évènements corrélés causés par ces hôtes
460 461
        timestamp = datetime.now()
461 462
        correvent1_id = add_correvent_caused_by(services[0], timestamp)
462 463
        correvent2_id = add_correvent_caused_by(services[1], timestamp)
463
        
464
        # Date de modification du premier évènement corrélé 
464

  
465
        # Date de modification du premier évènement corrélé
465 466
        later_date = datetime.now()
466 467
        # Date du chargement de la page
467 468
        date = mktime(later_date.timetuple()) - 42
468
        
469

  
469 470
        # On ajoute une entrée dans l'historique de l'évènement brut
470 471
        # causant le premier évènement corrélé, portant pour timestamp
471 472
        # une date postérieure à celle du chargement de la page.
......
477 478
            idevent = correvent1.idcause,
478 479
            timestamp = later_date))
479 480
        DBSession.flush()
480
        
481

  
481 482
        transaction.commit()
482
        
483

  
483 484
        # L'utilisateur utilisé pour se connecter à Vigiboard est 'access'.
484 485
        environ = {'REMOTE_USER': 'access'}
485
        
486

  
486 487
        # On s'attend à ce que le statut de la requête soit 302, et
487 488
        # à ce qu'un message d'erreur avise l'utilisateur que des
488 489
        # changements sont intervenus depuis le chargement de la page.
......
493 494
                "trouble_ticket" : "",
494 495
                "ack" : u'Acknowledged',
495 496
            }, status = 302, extra_environ = environ)
496
        
497

  
497 498
        response = response.follow(status=200, extra_environ = environ)
498 499
        assert_true(response.lxml.xpath(
499 500
            '//div[@id="flash"]/div[@class="warning"]'))
500
        
501

  
501 502
        # On s'assure que le statut de l'évènement corrélé
502 503
        # n'a pas été modifié dans la base de données.
503 504
        status = DBSession.query(
......
505 506
            ).filter(CorrEvent.idcorrevent == correvent1_id
506 507
            ).scalar()
507 508
        assert_equal(status, u'None')
508

  

Also available in: Unified diff