Project

General

Profile

Revision 0c8b0e15

ID0c8b0e15ab89bb02fc1a6f8a30920f35f4272083
Parent 00d2e1d1
Child e069ba79

Added by Francois POIROTTE over 14 years ago

Dans le RootController : passage des paramètres entrés au template (pour réutilisation dans les liens de pagination).
Quelques corrections dans les tests unitaires. Ils restent encore des tests qui échouent (en partie liés aux thèmes).

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

View differences:

vigiboard/tests/functional/test_raw_events_table.py
14 14
                            Host, HostGroup, LowLevelService, ServiceGroup
15 15
from vigiboard.tests import TestController
16 16

  
17
def populate_DB():
17
def populate_DB(caused_by_service):
18 18
    """ Peuple la base de données. """
19 19
    # On ajoute un groupe d'hôtes et un groupe de services.
20 20
    hostmanagers = HostGroup(name = u'managersgroup')
......
54 54
    DBSession.add(managerservice)
55 55
    servicemanagers.services.append(managerservice)
56 56
    DBSession.flush()
57
    
58
    return (managerhost, managerservice)
59 57

  
60
def add_correvent_caused_by(supitem, 
61
        correvent_status=u"None", event_status=u"WARNING"):
62
    """
63
    Ajoute dans la base de données un évènement corrélé causé 
64
    par un incident survenu sur l'item passé en paramètre.
65
    Génère un historique pour les tests.
66
    """
58
    if caused_by_service:
59
        supitem = managerservice
60
    else:
61
        supitem = managerhost
67 62

  
68 63
    # Ajout d'un événement
69 64
    event = Event(
70 65
        supitem = supitem, 
71 66
        message = u'foo',
72
        current_state = StateName.statename_to_value(event_status),
67
        current_state = StateName.statename_to_value(u"WARNING"),
68
        timestamp = datetime.now(),
73 69
    )
74 70
    DBSession.add(event)
75 71
    DBSession.flush()
......
90 86
        idcause = event.idevent, 
91 87
        timestamp_active = datetime.now(),
92 88
        priority = 1,
93
        status = correvent_status)
89
        status = u"None")
94 90
    aggregate.events.append(event)
95 91
    DBSession.add(aggregate)
96 92
    DBSession.flush()
97
    
98
    return event.idevent
99
    
93
    return aggregate.idcorrevent
100 94

  
101
class TestRawEventsTable(TestController):
102
    """
103
    Test des historiques de Vigiboard.
104
    """
95
def add_masked_event(idcorrevent):
96
    transaction.begin()
97
    hostmanagers = HostGroup.by_group_name(u'managersgroup')
98
    nb_hosts = DBSession.query(Host).count()
99

  
100
    masked_host = Host(
101
        name = u'masked host #%d' % nb_hosts,      
102
        checkhostcmd = u'halt',
103
        snmpcommunity = u'public',
104
        hosttpl = u'/dev/null',
105
        mainip = u'192.168.1.%d' % nb_hosts,
106
        snmpport = 42,
107
        weight = 42,
108
    )
109
    DBSession.add(masked_host)
110
    hostmanagers.hosts.append(masked_host)
111
    DBSession.flush()
112

  
113
    event = Event(
114
        supitem = masked_host,
115
        message = u'masked event #%d' % nb_hosts,
116
        current_state = StateName.statename_to_value(u"CRITICAL"),
117
        timestamp = datetime.now(),
118
    )
119
    DBSession.add(event)
120
    DBSession.flush()
121

  
122
    aggregate = DBSession.query(CorrEvent).filter(
123
        CorrEvent.idcorrevent == idcorrevent).one()
124
    aggregate.events.append(event)
125
    DBSession.add(aggregate)
126
    DBSession.flush()
127
    transaction.commit()
105 128

  
106
    def setUp(self):
107
        super(TestEventTable, self).setUp()
108 129

  
109
    def test_host_history(self):
110
        """Affichage de l'historique d'un évènement corrélé pour un hôte."""
130
class TestRawEventsTableAnonymousLLS(TestController):
131
    """
132
    Teste l'affichage des événements bruts masqués par un agrégat.
133
    Dans ces tests, l'utilisateur n'est pas authentifié et l'agrégat
134
    a été causé par un LLS.
135
    """
136
    test_service = True
111 137

  
138
    def test_table(self):
139
        """Événements masqués d'un agrégat sur un LLS en anonyme."""
112 140
        # On peuple la BDD avec un hôte, un service de bas niveau,
113 141
        # et un groupe d'hôtes et de services associés à ces items.
114
        (managerhost, managerservice) = populate_DB()
115
        
116
        # On ajoute un évènement corrélé causé par l'hôte
117
        idevent = add_correvent_caused_by(managerhost)
142
        idcorrevent = populate_DB(self.test_service)
118 143
        transaction.commit()
119 144

  
120 145
        # L'utilisateur n'est pas authentifié.
121 146
        # On s'attend à ce qu'une erreur 401 soit renvoyée,
122 147
        # demandant à l'utilisateur de s'authentifier.
123 148
        response = self.app.get(
124
            '/event/%d' % idevent,
149
            '/masked_events/%d' % idcorrevent,
125 150
            status = 401)
126 151

  
127
        # L'utilisateur N'A PAS les bonnes permissions.
128
        environ = {'REMOTE_USER': 'editor'}
129
        
152
class TestRawEventsTableAnonymousHost(TestRawEventsTableAnonymousLLS):
153
    """Idem que TestRawEventsTableAnonymousLLS mais avec un hôte."""
154
    test_service = False
155

  
156
    def test_table(self):
157
        """Événements masqués d'un agrégat sur un hôte en anonyme."""
158
        super(TestRawEventsTableAnonymousHost, self).test_table()
159

  
160

  
161
class TestRawEventsTableWithoutPermsLLS(TestController):
162
    """
163
    Teste l'affichage des événements bruts masqués par un agrégat.
164
    Dans ces tests, l'utilisateur n'a pas les bonnes permissions
165
    et l'agrégat a été causé par un LLS.
166
    """
167
    test_service = True
168

  
169
    def test_table(self):
170
        """Événements masqués d'un agrégat sur un LLS sans permissions."""
171
        # On peuple la BDD avec un hôte, un service de bas niveau,
172
        # et un groupe d'hôtes et de services associés à ces items.
173
        idcorrevent = populate_DB(self.test_service)
174
        transaction.commit()
175

  
176
        environ = {'REMOTE_USER': 'manager'}
177

  
130 178
        # On s'attend à ce qu'une erreur 302 soit renvoyée, et à
131 179
        # ce qu'un message d'erreur précise à l'utilisateur qu'il
132 180
        # n'a pas accès aux informations concernant cet évènement.
133 181
        response = self.app.get(
134
            '/event/%d' % idevent,
182
            '/masked_events/%d' % idcorrevent,
135 183
            status = 302, 
136 184
            extra_environ = environ)
137

  
138
        # On suit la redirection.
139 185
        response = response.follow(status = 200, extra_environ = environ)
140 186
        assert_true(len(response.lxml.xpath(
141 187
            '//div[@id="flash"]/div[@class="error"]')))
142 188

  
143
        # L'utilisateur a les bonnes permissions.
144
        environ = {'REMOTE_USER': 'manager'}
145
        
146
        # On s'attend à ce que le statut de la requête soit 200.
189
        # L'erreur 302 peut venir de l'absence de permissions
190
        # ou bien simplement de l'absence d'événements masqués.
191
        # Pour vérifier qu'il s'agit bien d'un problème de permissions,
192
        # on ajoute un événement masqué. On doit à nouveau obtenir
193
        # une erreur 302.
194
        add_masked_event(idcorrevent)
147 195
        response = self.app.get(
148
            '/event/%d' % idevent,
149
            status = 200, 
196
            '/masked_events/%d' % idcorrevent,
197
            status = 302, 
150 198
            extra_environ = environ)
199
        response = response.follow(status = 200, extra_environ = environ)
200
        assert_true(len(response.lxml.xpath(
201
            '//div[@id="flash"]/div[@class="error"]')))
151 202

  
152
        # Il doit y avoir 2 lignes de résultats.
153
        rows = response.lxml.xpath('//table[@class="vigitable"]/tbody/tr')
154
        assert_equal(len(rows), 2)
203
class TestRawEventsTableWithoutPermsHost(TestRawEventsTableWithoutPermsLLS):
204
    """Idem que TestRawEventsTableWithoutPermsLLS mais avec un hôte."""
205
    test_service = False
155 206

  
156
    def test_service_history(self):
157
        """Affichage de l'historique d'un évènement corrélé pour un SBN."""
207
    def test_table(self):
208
        """Événements masqués d'un agrégat sur un hôte sans permissions."""
209
        super(TestRawEventsTableWithoutPermsHost, self).test_table()
158 210

  
211
class TestRawEventsTableWithPermsLLS(TestController):
212
    """
213
    Teste l'affichage d'une table des événements bruts
214
    rattachés à un agrégat, hormis la cause de cet agrégat.
215
    """
216
    test_service = True
217

  
218
    def test_table(self):
219
        """Événements masqués d'un agrégat sur un LLS avec permissions."""
159 220
        # On peuple la BDD avec un hôte, un service de bas niveau,
160 221
        # et un groupe d'hôtes et de services associés à ces items.
161
        (managerhost, managerservice) = populate_DB()
162
        
163
        # On ajoute un évènement corrélé causé par le service
164
        idevent = add_correvent_caused_by(managerservice)
165
        
222
        idcorrevent = populate_DB(True)
166 223
        transaction.commit()
167 224

  
168
        # L'utilisateur n'est pas authentifié.
169
        # On s'attend à ce qu'une erreur 401 soit renvoyée,
170
        # demandant à l'utilisateur de s'authentifier.
171
        response = self.app.get(
172
            '/event/%d' % idevent,
173
            status = 401)
225
        environ = {'REMOTE_USER': 'manager'}
174 226

  
175
        # L'utilisateur N'A PAS les bonnes permissions.
176
        environ = {'REMOTE_USER': 'editor'}
177
        
178 227
        # On s'attend à ce qu'une erreur 302 soit renvoyée, et à
179 228
        # ce qu'un message d'erreur précise à l'utilisateur qu'il
180 229
        # n'a pas accès aux informations concernant cet évènement.
181 230
        response = self.app.get(
182
            '/event/%d' % idevent,
183
            status = 302, 
231
            '/masked_events/%d' % idcorrevent,
232
            status = 302,
184 233
            extra_environ = environ)
185

  
186
        # On suit la redirection.
187 234
        response = response.follow(status = 200, extra_environ = environ)
188 235
        assert_true(len(response.lxml.xpath(
189 236
            '//div[@id="flash"]/div[@class="error"]')))
190 237

  
191
        # L'utilisateur a les bonnes permissions.
192
        environ = {'REMOTE_USER': 'manager'}
193
        
194
        # On s'attend à ce que le statut de la requête soit 200.
238
        # L'erreur 302 peut venir de l'absence de permissions
239
        # ou bien simplement de l'absence d'événements masqués.
240
        # Pour vérifier qu'il s'agit bien d'un problème de permissions,
241
        # on ajoute un événement masqué. On doit avoir accès à exactement
242
        # 1 événement masqué à présent.
243
        add_masked_event(idcorrevent)
195 244
        response = self.app.get(
196
            '/event/%d' % idevent,
197
            status = 200, 
245
            '/masked_events/%d' % idcorrevent,
246
            status = 200,
198 247
            extra_environ = environ)
199 248

  
200
        # Il doit y avoir 2 lignes de résultats.
201 249
        rows = response.lxml.xpath('//table[@class="vigitable"]/tbody/tr')
202
        assert_equal(len(rows), 2)
250
        assert_equal(len(rows), 1)
251

  
252
class TestRawEventsTableWithPermsHost(TestRawEventsTableWithPermsLLS):
253
    """Idem que TestRawEventsTableWithPermsLLS mais avec un hôte."""
254
    test_service = False
255

  
256
    def test_table(self):
257
        """Événements masqués d'un agrégat sur un hôte avec permissions."""
258
        super(TestRawEventsTableWithPermsHost, self).test_table()
203 259

  

Also available in: Unified diff