Project

General

Profile

Revision cf3c2494

IDcf3c2494ece15ab1296aad363b0e84c7bd2a0da0
Parent 832d63c3
Child 699bd24c

Added by Vincent QUEMENER over 13 years ago

Chaque plugin adresse désormais une seule requête à la base de données pour tous les évènements de la page, plutôt qu'une requête par évènement.

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

View differences:

vigiboard/tests/functional/plugins/test_plugin_hls.py
31 31

  
32 32
    # On crée un hôte de test.
33 33
    host = Host(
34
        name = u'host', 
34
        name = u'host',
35 35
        checkhostcmd = u'halt',
36 36
        snmpcommunity = u'public',
37 37
        hosttpl = u'/dev/null',
......
57 57

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

  
68 68
    transaction.commit()
69 69
    return aggregate
70 70

  
71 71
def add_paths(path_number, path_length, idsupitem):
72
    """ 
72
    """
73 73
    Ajoute path_number chemins de services de haut niveau impactés
74 74
    dans la base de donnée. Leur longeur sera égale à path_length.
75 75
    La 3ème valeur passée en paramètre est l'id du supitem impactant.
76
     
77
    path_number * path_length services de 
76

  
77
    path_number * path_length services de
78 78
    haut niveau sont créés dans l'opération.
79 79
    """
80 80

  
......
89 89

  
90 90
    # Création des chemins de services de haut niveau impactés.
91 91
    for j in range(path_number):
92
        
92

  
93 93
        # On crée le chemin en lui-même
94 94
        path = ImpactedPath(idsupitem = idsupitem)
95 95
        DBSession.add(path)
96 96
        DBSession.flush()
97
        
97

  
98 98
        # Pour chaque étage du chemin,
99 99
        for i in range(path_length):
100 100
            # on ajoute un service de haut niveau dans la BDD,
101 101
            hls = HighLevelService(
102
                servicename = u'HLS' + str(j + 1) + str(i + 1), 
102
                servicename = u'HLS' + str(j + 1) + str(i + 1),
103 103
                **hls_template)
104 104
            DBSession.add(hls)
105
            # et on ajoute un étage au chemin contenant ce service. 
105
            # et on ajoute un étage au chemin contenant ce service.
106 106
            DBSession.add(
107 107
                ImpactedHLS(
108 108
                    path = path,
109 109
                    hls = hls,
110 110
                    distance = i + 1,
111 111
                    ))
112
    
112

  
113 113
    DBSession.flush()
114 114
    transaction.commit()
115 115

  
116 116

  
117 117
class TestHLSPlugin(TestController):
118 118
    """
119
    Classe de test du contrôleur listant les services 
119
    Classe de test du contrôleur listant les services
120 120
    de haut niveau impactés par un évènement corrélé.
121 121
    """
122 122
    def setUp(self):
......
137 137
        DBSession.add(usergroup)
138 138
        DBSession.flush()
139 139

  
140
        user = User(
141
            user_name=u'no_access',
142
            fullname=u'',
143
            email=u'user.has.no@access',
144
        )
145
        usergroup = UserGroup(
146
            group_name=u'users_without_access',
147
        )
148
        usergroup.permissions.append(perm)
149
        user.usergroups.append(usergroup)
150
        DBSession.add(user)
151
        DBSession.add(usergroup)
152
        DBSession.flush()
153

  
154 140
        self.aggregate = populate_DB()
155 141

  
156 142
    def test_no_impacted_hls(self):
157 143
        """
158
        Retour du plugin HLS pour 0 HLS impacté
159
        Teste la valeur de retour du plugin lorsque
144
        Données affichée par le plugin HLS pour 0 HLS impacté
145
        Teste les données affichées par le  plugin lorsque
160 146
        aucun service de haut niveau n'est impacté.
161 147
        """
162
        
148

  
163 149
        # On peuple la base de données avant le test.
164 150
        DBSession.add(self.aggregate)
165 151
        add_paths(0, 0, self.aggregate.events[0].idsupitem)
166 152
        DBSession.add(self.aggregate)
167
        
168
        ### 1er cas : l'utilisateur n'est pas connecté.
169
        # On vérifie que le plugin retourne bien une erreur 401.
170
        resp = self.app.post(
171
            '/get_plugin_value', 
172
            {"idcorrevent" : str(self.aggregate.idcorrevent),
173
             "plugin_name" : "hls"},
174
            status = 401,)
175
        
176
        ### 2ème cas : l'utilisateur n'a pas les
177
        ### droits sur l'hôte ayant causé le correvent.
178
        # On vérifie que le plugin retourne bien une erreur 404.
179
        resp = self.app.post(
180
            '/get_plugin_value', 
181
            {"idcorrevent" : str(self.aggregate.idcorrevent),
182
             "plugin_name" : "hls"},
183
            status = 404,
184
            extra_environ={'REMOTE_USER': 'no_access'})
185
        
186
        ### 3ème cas : l'utilisateur a cette fois les droits.
153

  
154
        # On accède à la page principale de VigiBoard
187 155
        resp = self.app.post(
188
            '/get_plugin_value', 
189
            {"idcorrevent" : str(self.aggregate.idcorrevent),
190
             "plugin_name" : "hls"},
191
            extra_environ={'REMOTE_USER': 'access'})
192
        # On vérifie que le plugin ne retourne toujours rien.
193
        assert_equal(resp.json, {"services": []})
194
    
156
            '/', 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

  
195 164
    def test_1_impacted_hls_path(self):
196 165
        """
197
        Retour du plugin HLS pour 1 chemin impacté
198
        Teste la valeur de retour du plugin lorsqu'un
199
        chemin de services de haut niveau est impacté.
166
        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é.
200 169
        """
201
        
170

  
202 171
        # On peuple la base de données avant le test.
203 172
        DBSession.add(self.aggregate)
204 173
        add_paths(1, 2, self.aggregate.events[0].idsupitem)
205 174
        DBSession.add(self.aggregate)
206
        
207
        ### 1er cas : l'utilisateur n'est pas connecté.
208
        # On vérifie que le plugin retourne bien une erreur 401.
209
        resp = self.app.post(
210
            '/get_plugin_value', 
211
            {"idcorrevent" : str(self.aggregate.idcorrevent),
212
             "plugin_name" : "hls"},
213
            status = 401,)
214
        
215
        ### 2ème cas : l'utilisateur n'a pas les droits
216
        ### sur l'hôte ayant causé le correvent, on doit
217
        ### obtenir une erreur 404 (pas d'événement trouvé
218
        ### avec les informations liées à cet utilisateur).
219
        resp = self.app.post(
220
            '/get_plugin_value', 
221
            {"idcorrevent" : str(self.aggregate.idcorrevent),
222
             "plugin_name" : "hls"},
223
            status = 404,
224
            extra_environ={'REMOTE_USER': 'no_access'})
225
        
226
        ### 3ème cas : l'utilisateur a cette fois les droits.
175

  
176
        # On accède à la page principale de VigiBoard
227 177
        resp = self.app.post(
228
            '/get_plugin_value', 
229
            {"idcorrevent" : str(self.aggregate.idcorrevent),
230
             "plugin_name" : "hls"},
231
            extra_environ={'REMOTE_USER': 'access'})
232
        # On vérifie que le plugin retourne bien les 2 HLS impactés.
233
        assert_equal(resp.json, {"services": ['HLS12']})
234
    
178
            '/', 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

  
235 186
    def test_2_impacted_hls_path(self):
236 187
        """
237
        Retour du plugin HLS pour 2 chemins impactés
238
        Teste la valeur de retour du plugin lorsque deux
239
        chemins de services de haut niveau sont impactés.
188
        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.
240 191
        """
241
        
192

  
242 193
        # On peuple la base de données avant le test.
243 194
        DBSession.add(self.aggregate)
244 195
        add_paths(2, 2, self.aggregate.events[0].idsupitem)
245 196
        DBSession.add(self.aggregate)
246
        
247
        ### 1er cas : l'utilisateur n'est pas connecté.
248
        # On vérifie que le plugin retourne bien une erreur 401.
249
        resp = self.app.post(
250
            '/get_plugin_value', 
251
            {"idcorrevent" : str(self.aggregate.idcorrevent),
252
             "plugin_name" : "hls"},
253
            status = 401,)
254
        
255
        ### 2ème cas : l'utilisateur n'a pas les
256
        ### droits sur l'hôte ayant causé le correvent.
257
        resp = self.app.post(
258
            '/get_plugin_value', 
259
            {"idcorrevent" : str(self.aggregate.idcorrevent),
260
             "plugin_name" : "hls"},
261
            status = 404,
262
            extra_environ={'REMOTE_USER': 'no_access'})
263
        
264
        ### 3ème cas : l'utilisateur a cette fois les droits.
197

  
198
        # On accède à la page principale de VigiBoard
265 199
        resp = self.app.post(
266
            '/get_plugin_value', 
267
            {"idcorrevent" : str(self.aggregate.idcorrevent),
268
             "plugin_name" : "hls"},
269
            extra_environ={'REMOTE_USER': 'access'})
270
        # On vérifie que le plugin retourne bien les 4 HLS impactés.
271
        assert_equal(resp.json, {"services": ['HLS12', 'HLS22']})
200
            '/', 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")
272 207

  

Also available in: Unified diff