Project

General

Profile

Statistics
| Branch: | Tag: | Revision:

vigiboard / vigiboard / tests / functional / plugins / test_plugin_hls.py @ 9a05a743

History | View | Annotate | Download (7.28 KB)

1
# -*- coding: utf-8 -*-
2
# Copyright (C) 2006-2011 CS-SI
3
# License: GNU GPL v2 <http://www.gnu.org/licenses/gpl-2.0.html>
4

    
5
""" Test du plugin listant les services de haut niveau impactés. """
6

    
7
from datetime import datetime
8
import transaction
9
from nose.tools import assert_equal
10

    
11
from vigilo.models.session import DBSession
12
from vigilo.models.demo import functions
13
from vigilo.models.tables import Permission, DataPermission, StateName, \
14
                            SupItemGroup, Host, HighLevelService, \
15
                            Event, CorrEvent, ImpactedPath, ImpactedHLS, \
16
                            User, UserGroup
17
from vigiboard.tests import TestController
18

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

    
22
    # On ajoute un groupe d'hôtes
23
    hostmanagers = SupItemGroup(name=u'managersgroup', parent=None)
24
    DBSession.add(hostmanagers)
25
    DBSession.flush()
26

    
27
    # On lui octroie les permissions
28
    usergroup = UserGroup.by_group_name(u'users_with_access')
29
    DBSession.add(DataPermission(
30
        group=hostmanagers,
31
        usergroup=usergroup,
32
        access=u'r',
33
    ))
34
    DBSession.flush()
35

    
36
    # On crée un hôte de test.
37
    host = functions.add_host(u'host')
38

    
39
    # On affecte cet hôte au groupe précédemment créé.
40
    hostmanagers.supitems.append(host)
41
    DBSession.flush()
42

    
43
    # On ajoute un évènement brut et un événement corrélé causé par cet hôte.
44
    event1 = functions.add_event(host, u'WARNING', u'foo')
45
    aggregate = functions.add_correvent([event1])
46

    
47
    transaction.commit()
48
    return aggregate
49

    
50
def add_paths(path_number, path_length, idsupitem):
51
    """
52
    Ajoute path_number chemins de services de haut niveau impactés
53
    dans la base de donnée. Leur longeur sera égale à path_length.
54
    La 3ème valeur passée en paramètre est l'id du supitem impactant.
55

56
    path_number * path_length services de
57
    haut niveau sont créés dans l'opération.
58
    """
59

    
60
    # Création des chemins de services de haut niveau impactés.
61
    for j in range(path_number):
62

    
63
        # On crée le chemin en lui-même
64
        path = ImpactedPath(idsupitem = idsupitem)
65
        DBSession.add(path)
66
        DBSession.flush()
67

    
68
        # Pour chaque étage du chemin,
69
        for i in range(path_length):
70
            # on ajoute un service de haut niveau dans la BDD...
71
            hls = functions.add_highlevelservice(
72
                u'HLS' + str(j + 1) + str(i + 1), None)
73

    
74
            # ...et on ajoute un étage au chemin contenant ce service.
75
            DBSession.add(
76
                ImpactedHLS(
77
                    path = path,
78
                    hls = hls,
79
                    distance = i + 1,
80
                ))
81

    
82
    DBSession.flush()
83
    transaction.commit()
84

    
85

    
86
class TestHLSPlugin(TestController):
87
    """
88
    Classe de test du contrôleur listant les services
89
    de haut niveau impactés par un évènement corrélé.
90
    """
91
    def setUp(self):
92
        super(TestHLSPlugin, self).setUp()
93
        perm = Permission.by_permission_name(u'vigiboard-access')
94

    
95
        user = User(
96
            user_name=u'access',
97
            fullname=u'',
98
            email=u'user.has@access',
99
        )
100
        usergroup = UserGroup(group_name=u'users_with_access')
101
        usergroup.permissions.append(perm)
102
        user.usergroups.append(usergroup)
103
        DBSession.add(user)
104
        DBSession.add(usergroup)
105
        DBSession.flush()
106

    
107
        self.aggregate = populate_DB()
108

    
109
    def test_no_impacted_hls(self):
110
        """
111
        Données affichées par le plugin HLS pour 0 HLS impacté
112
        Teste les données affichées par le  plugin lorsque
113
        aucun service de haut niveau n'est impacté.
114
        """
115

    
116
        # On peuple la base de données avant le test.
117
        DBSession.add(self.aggregate)
118
        add_paths(0, 0, self.aggregate.events[0].idsupitem)
119
        DBSession.add(self.aggregate)
120

    
121
        # On accède à la page principale de VigiBoard
122
        resp = self.app.post(
123
            '/', extra_environ={'REMOTE_USER': 'access'})
124

    
125
        # On s'assure que la colonne des HLS
126
        # impactés est vide pour notre évènement.
127
        plugin_data = resp.lxml.xpath('//table[@class="vigitable"]'
128
            '/tbody/tr/td[@class="plugin_hls"]/text()')
129
        assert_equal(plugin_data[0].strip(), "")
130

    
131
    def test_1_impacted_hls_path(self):
132
        """
133
        Données affichées par le plugin HLS pour 1 chemin impacté
134
        Teste les données affichées par le  plugin lorsque
135
        1 chemin de services de haut niveau est impacté.
136
        """
137

    
138
        # On peuple la base de données avant le test.
139
        DBSession.add(self.aggregate)
140
        add_paths(1, 2, self.aggregate.events[0].idsupitem)
141
        DBSession.add(self.aggregate)
142

    
143
        # On accède à la page principale de VigiBoard
144
        resp = self.app.post(
145
            '/', extra_environ={'REMOTE_USER': 'access'})
146

    
147
        # On s'assure que la colonne des HLS impactés contient
148
        # bien le nom de notre HLS de plus haut niveau impacté.
149
        plugin_data = resp.lxml.xpath('//table[@class="vigitable"]'
150
            '/tbody/tr/td[@class="plugin_hls"]/text()')
151
        assert_equal(plugin_data[0].strip(), "HLS12")
152

    
153
    def test_2_impacted_hls_path(self):
154
        """
155
        Données affichées par le plugin HLS pour 2 chemins impactés
156
        Teste les données affichées par le plugin lorsque
157
        2 chemins de services de haut niveau sont impactés.
158
        """
159

    
160
        # On peuple la base de données avant le test.
161
        DBSession.add(self.aggregate)
162
        add_paths(2, 2, self.aggregate.events[0].idsupitem)
163
        DBSession.add(self.aggregate)
164

    
165
        # On accède à la page principale de VigiBoard
166
        resp = self.app.post(
167
            '/', extra_environ={'REMOTE_USER': 'access'})
168

    
169
        # On s'assure que la colonne des HLS contient bien
170
        # le nombre de HLS de plus haut niveau impactés,
171
        plugin_data = resp.lxml.xpath('//table[@class="vigitable"]'
172
            '/tbody/tr/td[@class="plugin_hls"]/a/text()')
173
        assert_equal(plugin_data[0].strip(), "2")
174

    
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
        hls = functions.add_highlevelservice(u'HLS', None, u'Bar')
184
        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
        plugin_data = resp.lxml.xpath('//table[@class="vigitable"]'
214
            '/tbody/tr/td[@class="plugin_hls"]/text()')
215
        assert_equal(plugin_data[0].strip(), "HLS")