vigiboard / vigiboard / tests / functional / plugins / test_plugin_hls.py @ cf3c2494
History | View | Annotate | Download (6.67 KB)
1 | 4f6c505f | Vincent QUEMENER | # -*- coding: utf-8 -*-
|
---|---|---|---|
2 | 6ab72614 | Vincent QUEMENER | """ Test du plugin listant les services de haut niveau impactés. """
|
3 | 4f6c505f | Vincent QUEMENER | |
4 | from datetime import datetime |
||
5 | import transaction |
||
6 | 6ab72614 | Vincent QUEMENER | from nose.tools import assert_equal |
7 | 0c8b0e15 | Francois POIROTTE | |
8 | e7e3d45e | Francois POIROTTE | from vigilo.models.session import DBSession |
9 | 60d02e7f | Francois POIROTTE | from vigilo.models.tables import Permission, DataPermission, StateName, \ |
10 | 0bd9c069 | Francois POIROTTE | SupItemGroup, Host, HighLevelService, \ |
11 | 60d02e7f | Francois POIROTTE | Event, CorrEvent, ImpactedPath, ImpactedHLS, \ |
12 | User, UserGroup |
||
13 | 0c8b0e15 | Francois POIROTTE | from vigiboard.tests import TestController |
14 | 4f6c505f | Vincent QUEMENER | |
15 | def populate_DB(): |
||
16 | """ Peuple la base de données. """
|
||
17 | |||
18 | # On ajoute un groupe d'hôtes
|
||
19 | 0bd9c069 | Francois POIROTTE | hostmanagers = SupItemGroup(name=u'managersgroup')
|
20 | DBSession.add(hostmanagers) |
||
21 | DBSession.flush() |
||
22 | 4f6c505f | Vincent QUEMENER | |
23 | # On lui octroie les permissions
|
||
24 | 60d02e7f | Francois POIROTTE | usergroup = UserGroup.by_group_name(u'users_with_access')
|
25 | DBSession.add(DataPermission( |
||
26 | group=hostmanagers, |
||
27 | usergroup=usergroup, |
||
28 | access=u'r',
|
||
29 | )) |
||
30 | 4f6c505f | Vincent QUEMENER | DBSession.flush() |
31 | |||
32 | # On crée un hôte de test.
|
||
33 | host = Host( |
||
34 | cf3c2494 | Vincent QUEMENER | name = u'host',
|
35 | 4f6c505f | Vincent QUEMENER | checkhostcmd = u'halt',
|
36 | snmpcommunity = u'public',
|
||
37 | hosttpl = u'/dev/null',
|
||
38 | 0dcb87f7 | Francois POIROTTE | address = u'192.168.1.1',
|
39 | 4f6c505f | Vincent QUEMENER | snmpport = 42,
|
40 | weight = 42,
|
||
41 | ) |
||
42 | DBSession.add(host) |
||
43 | |||
44 | # On affecte cet hôte au groupe précédemment créé.
|
||
45 | 24d74687 | Francois POIROTTE | hostmanagers.supitems.append(host) |
46 | 4f6c505f | Vincent QUEMENER | DBSession.flush() |
47 | |||
48 | # On ajoute un évènement causé par cet hôte.
|
||
49 | event1 = Event( |
||
50 | supitem = host, |
||
51 | message = u'foo',
|
||
52 | 0c8b0e15 | Francois POIROTTE | current_state = StateName.statename_to_value(u'WARNING'),
|
53 | timestamp = datetime.now(), |
||
54 | ) |
||
55 | 4f6c505f | Vincent QUEMENER | DBSession.add(event1) |
56 | DBSession.flush() |
||
57 | |||
58 | # On ajoute un évènement corrélé causé par cet évènement 'brut'.
|
||
59 | aggregate = CorrEvent( |
||
60 | cf3c2494 | Vincent QUEMENER | idcause = event1.idevent, |
61 | 4f6c505f | Vincent QUEMENER | timestamp_active = datetime.now(), |
62 | priority = 1,
|
||
63 | status = u'None')
|
||
64 | aggregate.events.append(event1) |
||
65 | DBSession.add(aggregate) |
||
66 | DBSession.flush() |
||
67 | cf3c2494 | Vincent QUEMENER | |
68 | 4f6c505f | Vincent QUEMENER | transaction.commit() |
69 | return aggregate
|
||
70 | |||
71 | 6ab72614 | Vincent QUEMENER | def add_paths(path_number, path_length, idsupitem): |
72 | cf3c2494 | Vincent QUEMENER | """
|
73 | 4f6c505f | Vincent QUEMENER | Ajoute path_number chemins de services de haut niveau impactés
|
74 | dans la base de donnée. Leur longeur sera égale à path_length.
|
||
75 | La 3ème valeur passée en paramètre est l'id du supitem impactant.
|
||
76 | cf3c2494 | Vincent QUEMENER |
|
77 | path_number * path_length services de
|
||
78 | 4f6c505f | Vincent QUEMENER | haut niveau sont créés dans l'opération.
|
79 | """
|
||
80 | |||
81 | # Création de services de haut niveau dans la BDD.
|
||
82 | hls_template = { |
||
83 | 'message': u'Bar', |
||
84 | 'warning_threshold': 60, |
||
85 | 'critical_threshold': 80, |
||
86 | 'weight': None, |
||
87 | 'priority': 2, |
||
88 | } |
||
89 | |||
90 | # Création des chemins de services de haut niveau impactés.
|
||
91 | for j in range(path_number): |
||
92 | cf3c2494 | Vincent QUEMENER | |
93 | 4f6c505f | Vincent QUEMENER | # On crée le chemin en lui-même
|
94 | path = ImpactedPath(idsupitem = idsupitem) |
||
95 | DBSession.add(path) |
||
96 | DBSession.flush() |
||
97 | cf3c2494 | Vincent QUEMENER | |
98 | 4f6c505f | Vincent QUEMENER | # Pour chaque étage du chemin,
|
99 | for i in range(path_length): |
||
100 | # on ajoute un service de haut niveau dans la BDD,
|
||
101 | hls = HighLevelService( |
||
102 | cf3c2494 | Vincent QUEMENER | servicename = u'HLS' + str(j + 1) + str(i + 1), |
103 | 4f6c505f | Vincent QUEMENER | **hls_template) |
104 | DBSession.add(hls) |
||
105 | cf3c2494 | Vincent QUEMENER | # et on ajoute un étage au chemin contenant ce service.
|
106 | 4f6c505f | Vincent QUEMENER | DBSession.add( |
107 | ImpactedHLS( |
||
108 | path = path, |
||
109 | hls = hls, |
||
110 | distance = i + 1,
|
||
111 | )) |
||
112 | cf3c2494 | Vincent QUEMENER | |
113 | 4f6c505f | Vincent QUEMENER | DBSession.flush() |
114 | transaction.commit() |
||
115 | |||
116 | |||
117 | class TestHLSPlugin(TestController): |
||
118 | """
|
||
119 | cf3c2494 | Vincent QUEMENER | Classe de test du contrôleur listant les services
|
120 | 4f6c505f | Vincent QUEMENER | de haut niveau impactés par un évènement corrélé.
|
121 | """
|
||
122 | 60d02e7f | Francois POIROTTE | def setUp(self): |
123 | super(TestHLSPlugin, self).setUp() |
||
124 | perm = Permission.by_permission_name(u'vigiboard-access')
|
||
125 | |||
126 | user = User( |
||
127 | user_name=u'access',
|
||
128 | fullname=u'',
|
||
129 | email=u'user.has@access',
|
||
130 | ) |
||
131 | usergroup = UserGroup( |
||
132 | group_name=u'users_with_access',
|
||
133 | ) |
||
134 | usergroup.permissions.append(perm) |
||
135 | user.usergroups.append(usergroup) |
||
136 | DBSession.add(user) |
||
137 | DBSession.add(usergroup) |
||
138 | DBSession.flush() |
||
139 | |||
140 | self.aggregate = populate_DB()
|
||
141 | |||
142 | 4f6c505f | Vincent QUEMENER | def test_no_impacted_hls(self): |
143 | """
|
||
144 | cf3c2494 | Vincent QUEMENER | Données affichée par le plugin HLS pour 0 HLS impacté
|
145 | Teste les données affichées par le plugin lorsque
|
||
146 | 4f6c505f | Vincent QUEMENER | aucun service de haut niveau n'est impacté.
|
147 | """
|
||
148 | cf3c2494 | Vincent QUEMENER | |
149 | 4f6c505f | Vincent QUEMENER | # On peuple la base de données avant le test.
|
150 | 60d02e7f | Francois POIROTTE | DBSession.add(self.aggregate)
|
151 | add_paths(0, 0, self.aggregate.events[0].idsupitem) |
||
152 | DBSession.add(self.aggregate)
|
||
153 | cf3c2494 | Vincent QUEMENER | |
154 | # On accède à la page principale de VigiBoard
|
||
155 | 4f6c505f | Vincent QUEMENER | resp = self.app.post(
|
156 | cf3c2494 | Vincent QUEMENER | '/', extra_environ={'REMOTE_USER': 'access'}) |
157 | |||
158 | # On s'assure que la colonne des HLS
|
||
159 | # impactés est vide pour notre évènement.
|
||
160 | plugin_data = resp.lxml.xpath('//table[@class="vigitable"]'
|
||
161 | '/tbody/tr/td[@class="plugin_hls"]/text()')
|
||
162 | assert_equal(plugin_data[0].strip(), "") |
||
163 | |||
164 | 4f6c505f | Vincent QUEMENER | def test_1_impacted_hls_path(self): |
165 | """
|
||
166 | cf3c2494 | Vincent QUEMENER | Données affichée par le plugin HLS pour 1 chemin impacté
|
167 | Teste les données affichées par le plugin lorsque
|
||
168 | 1 chemin de services de haut niveau est impacté.
|
||
169 | 4f6c505f | Vincent QUEMENER | """
|
170 | cf3c2494 | Vincent QUEMENER | |
171 | 4f6c505f | Vincent QUEMENER | # On peuple la base de données avant le test.
|
172 | 60d02e7f | Francois POIROTTE | DBSession.add(self.aggregate)
|
173 | add_paths(1, 2, self.aggregate.events[0].idsupitem) |
||
174 | DBSession.add(self.aggregate)
|
||
175 | cf3c2494 | Vincent QUEMENER | |
176 | # On accède à la page principale de VigiBoard
|
||
177 | 4f6c505f | Vincent QUEMENER | resp = self.app.post(
|
178 | cf3c2494 | Vincent QUEMENER | '/', extra_environ={'REMOTE_USER': 'access'}) |
179 | |||
180 | # On s'assure que la colonne des HLS impactés contient
|
||
181 | # bien le nom de notre HLS de plus haut niveau impacté.
|
||
182 | plugin_data = resp.lxml.xpath('//table[@class="vigitable"]'
|
||
183 | '/tbody/tr/td[@class="plugin_hls"]/text()')
|
||
184 | assert_equal(plugin_data[0].strip(), "HLS12") |
||
185 | |||
186 | 4f6c505f | Vincent QUEMENER | def test_2_impacted_hls_path(self): |
187 | """
|
||
188 | cf3c2494 | Vincent QUEMENER | Données affichée par le plugin HLS pour 2 chemins impactés
|
189 | Teste les données affichées par le plugin lorsque
|
||
190 | 2 chemins de services de haut niveau sont impactés.
|
||
191 | 4f6c505f | Vincent QUEMENER | """
|
192 | cf3c2494 | Vincent QUEMENER | |
193 | 4f6c505f | Vincent QUEMENER | # On peuple la base de données avant le test.
|
194 | 60d02e7f | Francois POIROTTE | DBSession.add(self.aggregate)
|
195 | add_paths(2, 2, self.aggregate.events[0].idsupitem) |
||
196 | DBSession.add(self.aggregate)
|
||
197 | cf3c2494 | Vincent QUEMENER | |
198 | # On accède à la page principale de VigiBoard
|
||
199 | 4f6c505f | Vincent QUEMENER | resp = self.app.post(
|
200 | cf3c2494 | Vincent QUEMENER | '/', extra_environ={'REMOTE_USER': 'access'}) |
201 | |||
202 | # On s'assure que la colonne des HLS contient bien
|
||
203 | # le nombre de HLS de plus haut niveau impactés,
|
||
204 | plugin_data = resp.lxml.xpath('//table[@class="vigitable"]'
|
||
205 | '/tbody/tr/td[@class="plugin_hls"]/a/text()')
|
||
206 | assert_equal(plugin_data[0].strip(), "2") |