Project

General

Profile

Statistics
| Branch: | Tag: | Revision:

vigiboard / vigiboard / tests / functional / plugins / test_plugin_hls.py @ 011743be

History | View | Annotate | Download (7.33 KB)

1 4f6c505f Vincent QUEMENER
# -*- coding: utf-8 -*-
2 011743be Francois POIROTTE
# Copyright (C) 2006-2020 CS GROUP - France
3 b373a5de Aurelien BOMPARD
# License: GNU GPL v2 <http://www.gnu.org/licenses/gpl-2.0.html>
4
5 6ab72614 Vincent QUEMENER
""" Test du plugin listant les services de haut niveau impactés. """
6 4f6c505f Vincent QUEMENER
7
import transaction
8 6ab72614 Vincent QUEMENER
from nose.tools import assert_equal
9 0c8b0e15 Francois POIROTTE
10 e7e3d45e Francois POIROTTE
from vigilo.models.session import DBSession
11 9a05a743 Francois POIROTTE
from vigilo.models.demo import functions
12 8b2edebe Aurelien BOMPARD
from vigilo.models.tables import Permission, DataPermission, SupItemGroup, \
13
                            ImpactedPath, ImpactedHLS, User, UserGroup
14 0c8b0e15 Francois POIROTTE
from vigiboard.tests import TestController
15 4f6c505f Vincent QUEMENER
16
def populate_DB():
17
    """ Peuple la base de données. """
18
19
    # On ajoute un groupe d'hôtes
20 03059edd Francois POIROTTE
    hostmanagers = SupItemGroup(name=u'managersgroup', parent=None)
21 0bd9c069 Francois POIROTTE
    DBSession.add(hostmanagers)
22
    DBSession.flush()
23 4f6c505f Vincent QUEMENER
24
    # On lui octroie les permissions
25 60d02e7f Francois POIROTTE
    usergroup = UserGroup.by_group_name(u'users_with_access')
26
    DBSession.add(DataPermission(
27
        group=hostmanagers,
28
        usergroup=usergroup,
29
        access=u'r',
30
    ))
31 4f6c505f Vincent QUEMENER
    DBSession.flush()
32
33
    # On crée un hôte de test.
34 9a05a743 Francois POIROTTE
    host = functions.add_host(u'host')
35 4f6c505f Vincent QUEMENER
36
    # On affecte cet hôte au groupe précédemment créé.
37 24d74687 Francois POIROTTE
    hostmanagers.supitems.append(host)
38 4f6c505f Vincent QUEMENER
    DBSession.flush()
39
40 9a05a743 Francois POIROTTE
    # On ajoute un évènement brut et un événement corrélé causé par cet hôte.
41
    event1 = functions.add_event(host, u'WARNING', u'foo')
42
    aggregate = functions.add_correvent([event1])
43 cf3c2494 Vincent QUEMENER
44 4f6c505f Vincent QUEMENER
    transaction.commit()
45
    return aggregate
46
47 6ab72614 Vincent QUEMENER
def add_paths(path_number, path_length, idsupitem):
48 cf3c2494 Vincent QUEMENER
    """
49 4f6c505f Vincent QUEMENER
    Ajoute path_number chemins de services de haut niveau impactés
50
    dans la base de donnée. Leur longeur sera égale à path_length.
51
    La 3ème valeur passée en paramètre est l'id du supitem impactant.
52 cf3c2494 Vincent QUEMENER

53
    path_number * path_length services de
54 4f6c505f Vincent QUEMENER
    haut niveau sont créés dans l'opération.
55
    """
56
57
    # Création des chemins de services de haut niveau impactés.
58
    for j in range(path_number):
59 cf3c2494 Vincent QUEMENER
60 4f6c505f Vincent QUEMENER
        # On crée le chemin en lui-même
61
        path = ImpactedPath(idsupitem = idsupitem)
62
        DBSession.add(path)
63
        DBSession.flush()
64 cf3c2494 Vincent QUEMENER
65 4f6c505f Vincent QUEMENER
        # Pour chaque étage du chemin,
66
        for i in range(path_length):
67 9a05a743 Francois POIROTTE
            # on ajoute un service de haut niveau dans la BDD...
68
            hls = functions.add_highlevelservice(
69
                u'HLS' + str(j + 1) + str(i + 1), None)
70
71
            # ...et on ajoute un étage au chemin contenant ce service.
72 4f6c505f Vincent QUEMENER
            DBSession.add(
73
                ImpactedHLS(
74
                    path = path,
75
                    hls = hls,
76
                    distance = i + 1,
77 9a05a743 Francois POIROTTE
                ))
78 cf3c2494 Vincent QUEMENER
79 4f6c505f Vincent QUEMENER
    DBSession.flush()
80
    transaction.commit()
81
82
83
class TestHLSPlugin(TestController):
84
    """
85 cf3c2494 Vincent QUEMENER
    Classe de test du contrôleur listant les services
86 4f6c505f Vincent QUEMENER
    de haut niveau impactés par un évènement corrélé.
87
    """
88 60d02e7f Francois POIROTTE
    def setUp(self):
89
        super(TestHLSPlugin, self).setUp()
90
        perm = Permission.by_permission_name(u'vigiboard-access')
91
92
        user = User(
93
            user_name=u'access',
94
            fullname=u'',
95
            email=u'user.has@access',
96
        )
97 03059edd Francois POIROTTE
        usergroup = UserGroup(group_name=u'users_with_access')
98 60d02e7f Francois POIROTTE
        usergroup.permissions.append(perm)
99
        user.usergroups.append(usergroup)
100
        DBSession.add(user)
101
        DBSession.add(usergroup)
102
        DBSession.flush()
103
104
        self.aggregate = populate_DB()
105
106 4f6c505f Vincent QUEMENER
    def test_no_impacted_hls(self):
107
        """
108 20a6c56d Francois POIROTTE
        Données affichées par le plugin HLS pour 0 HLS impacté
109 cf3c2494 Vincent QUEMENER
        Teste les données affichées par le  plugin lorsque
110 4f6c505f Vincent QUEMENER
        aucun service de haut niveau n'est impacté.
111
        """
112 cf3c2494 Vincent QUEMENER
113 4f6c505f Vincent QUEMENER
        # On peuple la base de données avant le test.
114 60d02e7f Francois POIROTTE
        DBSession.add(self.aggregate)
115
        add_paths(0, 0, self.aggregate.events[0].idsupitem)
116
        DBSession.add(self.aggregate)
117 cf3c2494 Vincent QUEMENER
118
        # On accède à la page principale de VigiBoard
119 4f6c505f Vincent QUEMENER
        resp = self.app.post(
120 cf3c2494 Vincent QUEMENER
            '/', extra_environ={'REMOTE_USER': 'access'})
121
122
        # On s'assure que la colonne des HLS
123
        # impactés est vide pour notre évènement.
124 7bde24ad Francois POIROTTE
        plugin_data = resp.lxml.xpath(
125
            '//table[contains(concat(" ", @class, " "), " vigitable ")]'
126 cf3c2494 Vincent QUEMENER
            '/tbody/tr/td[@class="plugin_hls"]/text()')
127
        assert_equal(plugin_data[0].strip(), "")
128
129 4f6c505f Vincent QUEMENER
    def test_1_impacted_hls_path(self):
130
        """
131 20a6c56d Francois POIROTTE
        Données affichées par le plugin HLS pour 1 chemin impacté
132 cf3c2494 Vincent QUEMENER
        Teste les données affichées par le  plugin lorsque
133
        1 chemin de services de haut niveau est impacté.
134 4f6c505f Vincent QUEMENER
        """
135 cf3c2494 Vincent QUEMENER
136 4f6c505f Vincent QUEMENER
        # On peuple la base de données avant le test.
137 60d02e7f Francois POIROTTE
        DBSession.add(self.aggregate)
138
        add_paths(1, 2, self.aggregate.events[0].idsupitem)
139
        DBSession.add(self.aggregate)
140 cf3c2494 Vincent QUEMENER
141
        # On accède à la page principale de VigiBoard
142 4f6c505f Vincent QUEMENER
        resp = self.app.post(
143 cf3c2494 Vincent QUEMENER
            '/', extra_environ={'REMOTE_USER': 'access'})
144
145
        # On s'assure que la colonne des HLS impactés contient
146
        # bien le nom de notre HLS de plus haut niveau impacté.
147 7bde24ad Francois POIROTTE
        plugin_data = resp.lxml.xpath(
148
            '//table[contains(concat(" ", @class, " "), " vigitable ")]'
149 cf3c2494 Vincent QUEMENER
            '/tbody/tr/td[@class="plugin_hls"]/text()')
150
        assert_equal(plugin_data[0].strip(), "HLS12")
151
152 4f6c505f Vincent QUEMENER
    def test_2_impacted_hls_path(self):
153
        """
154 20a6c56d Francois POIROTTE
        Données affichées par le plugin HLS pour 2 chemins impactés
155 cf3c2494 Vincent QUEMENER
        Teste les données affichées par le plugin lorsque
156
        2 chemins de services de haut niveau sont impactés.
157 4f6c505f Vincent QUEMENER
        """
158 cf3c2494 Vincent QUEMENER
159 4f6c505f Vincent QUEMENER
        # On peuple la base de données avant le test.
160 60d02e7f Francois POIROTTE
        DBSession.add(self.aggregate)
161
        add_paths(2, 2, self.aggregate.events[0].idsupitem)
162
        DBSession.add(self.aggregate)
163 cf3c2494 Vincent QUEMENER
164
        # On accède à la page principale de VigiBoard
165 4f6c505f Vincent QUEMENER
        resp = self.app.post(
166 cf3c2494 Vincent QUEMENER
            '/', extra_environ={'REMOTE_USER': 'access'})
167
168
        # On s'assure que la colonne des HLS contient bien
169
        # le nombre de HLS de plus haut niveau impactés,
170 7bde24ad Francois POIROTTE
        plugin_data = resp.lxml.xpath(
171
            '//table[contains(concat(" ", @class, " "), " vigitable ")]'
172 cf3c2494 Vincent QUEMENER
            '/tbody/tr/td[@class="plugin_hls"]/a/text()')
173
        assert_equal(plugin_data[0].strip(), "2")
174 90c98ce4 Vincent QUEMENER
175
    def test_same_hls_impacted_twice(self):
176
        """
177
        Pas de doublons dans les HLS impactés.
178
        Ticket #732.
179
        """
180
181
        # On peuple la base de données avant le test.
182
        DBSession.add(self.aggregate)
183 9a05a743 Francois POIROTTE
        hls = functions.add_highlevelservice(u'HLS', None, u'Bar')
184 90c98ce4 Vincent QUEMENER
        path1 = ImpactedPath(idsupitem = self.aggregate.events[0].idsupitem)
185
        DBSession.add(path1)
186
        path2 = ImpactedPath(idsupitem = self.aggregate.events[0].idsupitem)
187
        DBSession.add(path2)
188
        DBSession.flush()
189
        DBSession.add(
190
            ImpactedHLS(
191
                path = path1,
192
                hls = hls,
193
                distance = 1,
194
            )
195
        )
196
        DBSession.add(
197
            ImpactedHLS(
198
                path = path2,
199
                hls = hls,
200
                distance = 2,
201
            )
202
        )
203
        DBSession.flush()
204
        transaction.commit()
205
        DBSession.add(self.aggregate)
206
207
        # On accède à la page principale de VigiBoard
208
        resp = self.app.post(
209
            '/', extra_environ={'REMOTE_USER': 'access'})
210
211
        # On s'assure que la colonne des HLS contient bien
212
        # le nom de notre HLS de plus haut niveau impacté.
213 7bde24ad Francois POIROTTE
        plugin_data = resp.lxml.xpath(
214
            '//table[contains(concat(" ", @class, " "), " vigitable ")]'
215 90c98ce4 Vincent QUEMENER
            '/tbody/tr/td[@class="plugin_hls"]/text()')
216
        assert_equal(plugin_data[0].strip(), "HLS")