Project

General

Profile

Statistics
| Branch: | Tag: | Revision:

vigiboard / vigiboard / tests / functional / plugins / test_details_plugin.py @ a2744508

History | View | Annotate | Download (8.38 KB)

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

    
5
"""
6
Teste le formulaire donnant les liens vers les outils extérieurs
7
et les données de l'historique.
8
"""
9
from nose.tools import assert_true, assert_equal
10
from datetime import datetime
11
import transaction
12

    
13
from vigiboard.tests import TestController
14
from vigilo.models.session import DBSession
15
from vigilo.models.demo import functions
16
from vigilo.models.tables import User, UserGroup, Event, CorrEvent, \
17
                            Permission, DataPermission
18

    
19
def insert_deps(return_service):
20
    """
21
    Insère les dépendances nécessaires aux tests.
22

23
    @param return_service: Indique si les événements générés
24
        concernent un hôte (False) ou un service de bas niveau (True).
25
    @type return_service: C{bool}
26
    @return: Renvoie un tuple avec le groupe d'hôte créé,
27
        l'identifiant du L{CorrEvent} généré et enfin,
28
        l'identifiant de l'L{Event} généré.
29
    @rtype: C{tuple}
30
    """
31
    timestamp = datetime.now()
32

    
33
    hostgroup = functions.add_supitemgroup(u'foo')
34
    host = functions.add_host(u'bar')
35
    hostgroup.supitems.append(host)
36
    DBSession.flush()
37

    
38
    servicegroup = functions.add_supitemgroup(u'bar')
39
    service = functions.add_lowlevelservice(host, u'baz')
40
    servicegroup.supitems.append(service)
41
    DBSession.flush()
42

    
43
    if return_service:
44
        event = functions.add_event(service, u'WARNING', u'', timestamp)
45
    else:
46
        event = functions.add_event(host, u'WARNING', u'', timestamp)
47

    
48
    correvent = functions.add_correvent([event], timestamp=timestamp)
49

    
50
    usergroup = UserGroup.by_group_name(u'users_with_access')
51
    DBSession.add(DataPermission(
52
        usergroup=usergroup,
53
        group=hostgroup,
54
        access=u'r',
55
    ))
56
    DBSession.flush()
57
    transaction.commit()
58

    
59
    correvent = DBSession.query(CorrEvent).first()
60
    event = DBSession.query(Event).first()
61
    return (correvent.idcorrevent, event.idevent)
62

    
63
class TestDetailsPlugin(TestController):
64
    """Teste le dialogue pour l'accès aux historiques."""
65
    def setUp(self):
66
        super(TestDetailsPlugin, self).setUp()
67
        perm = Permission.by_permission_name(u'vigiboard-access')
68

    
69
        user = User(
70
            user_name=u'access',
71
            fullname=u'',
72
            email=u'user.has@access',
73
        )
74
        usergroup = UserGroup(group_name=u'users_with_access')
75
        usergroup.permissions.append(perm)
76
        user.usergroups.append(usergroup)
77
        DBSession.add(user)
78
        DBSession.add(usergroup)
79
        DBSession.flush()
80

    
81
        user = User(
82
            user_name=u'no_access',
83
            fullname=u'',
84
            email=u'user.has.no@access',
85
        )
86
        usergroup = UserGroup(group_name=u'users_without_access')
87
        usergroup.permissions.append(perm)
88
        user.usergroups.append(usergroup)
89
        DBSession.add(user)
90
        DBSession.add(usergroup)
91
        DBSession.flush()
92

    
93
        transaction.commit()
94

    
95
    def test_details_plugin_LLS_alert_when_allowed(self):
96
        """Dialogue des détails avec un LLS et les bons droits."""
97
        idcorrevent, idcause = insert_deps(True)
98

    
99
        response = self.app.post('/plugin_json', {
100
                'idcorrevent': idcorrevent,
101
                'plugin_name': 'details',
102
            }, extra_environ={'REMOTE_USER': 'access'})
103
        json = response.json
104

    
105
        # Le contenu de "eventdetails" varie facilement.
106
        # On le teste séparément.
107
        json.pop('eventdetails', None)
108
        assert_true('eventdetails' in response.json)
109

    
110
        assert_equal(json, {
111
            "idcorrevent": idcorrevent,
112
            "idcause": idcause,
113
            "service": "baz",
114
            "peak_state": "WARNING",
115
            "current_state": "WARNING",
116
            "host": "bar",
117
            "initial_state": "WARNING"
118
        })
119

    
120
    def test_details_plugin_LLS_alert_when_manager(self):
121
        """Dialogue des détails avec un LLS en tant que manager."""
122
        idcorrevent, idcause = insert_deps(True)
123

    
124
        response = self.app.post('/plugin_json', {
125
                'idcorrevent': idcorrevent,
126
                'plugin_name': 'details',
127
            }, extra_environ={'REMOTE_USER': 'manager'})
128
        json = response.json
129

    
130
        # Le contenu de "eventdetails" varie facilement.
131
        # On le teste séparément.
132
        json.pop('eventdetails', None)
133
        assert_true('eventdetails' in response.json)
134

    
135
        assert_equal(json, {
136
            "idcorrevent": idcorrevent,
137
            "idcause": idcause,
138
            "service": "baz",
139
            "peak_state": "WARNING",
140
            "current_state": "WARNING",
141
            "host": "bar",
142
            "initial_state": "WARNING"
143
        })
144

    
145
    def test_details_plugin_host_alert_when_allowed(self):
146
        """Dialogue des détails avec un hôte et les bons droits."""
147
        idcorrevent, idcause = insert_deps(False)
148

    
149
        response = self.app.post('/plugin_json', {
150
                'idcorrevent': idcorrevent,
151
                'plugin_name': 'details',
152
            }, extra_environ={'REMOTE_USER': 'access'})
153
        json = response.json
154

    
155
        # Le contenu de "eventdetails" varie facilement.
156
        # On le teste séparément.
157
        json.pop('eventdetails', None)
158
        assert_true('eventdetails' in response.json)
159

    
160
        assert_equal(json, {
161
            "idcorrevent": idcorrevent,
162
            "idcause": idcause,
163
            "service": None,
164
            "peak_state": "WARNING",
165
            "current_state": "WARNING",
166
            "host": "bar",
167
            "initial_state": "WARNING"
168
        })
169

    
170
    def test_details_plugin_host_alert_when_manager(self):
171
        """Dialogue des détails avec un hôte en tant que manager."""
172
        idcorrevent, idcause = insert_deps(False)
173

    
174
        response = self.app.post('/plugin_json', {
175
                'idcorrevent': idcorrevent,
176
                'plugin_name': 'details',
177
            }, extra_environ={'REMOTE_USER': 'manager'})
178
        json = response.json
179

    
180
        # Le contenu de "eventdetails" varie facilement.
181
        # On le teste séparément.
182
        json.pop('eventdetails', None)
183
        assert_true('eventdetails' in response.json)
184

    
185
        assert_equal(json, {
186
            "idcorrevent": idcorrevent,
187
            "idcause": idcause,
188
            "service": None,
189
            "peak_state": "WARNING",
190
            "current_state": "WARNING",
191
            "host": "bar",
192
            "initial_state": "WARNING"
193
        })
194

    
195
    def test_details_plugin_LLS_when_forbidden(self):
196
        """Dialogue des détails avec un LLS et des droits insuffisants."""
197
        idcorrevent = insert_deps(True)[0]
198

    
199
        # Le contrôleur renvoie une erreur 404 (HTTPNotFound)
200
        # lorsque l'utilisateur n'a pas les permissions nécessaires sur
201
        # les données ou qu'aucun événement correspondant n'est trouvé.
202
        self.app.post('/plugin_json', {
203
                'idcorrevent': idcorrevent,
204
                'plugin_name': 'details',
205
            }, extra_environ={'REMOTE_USER': 'no_access'},
206
            status=404)
207

    
208
    def test_details_plugin_host_when_forbidden(self):
209
        """Dialogue des détails avec un hôte et des droits insuffisants."""
210
        idcorrevent = insert_deps(False)[0]
211

    
212
        # Le contrôleur renvoie une erreur 404 (HTTPNotFound)
213
        # lorsque l'utilisateur n'a pas les permissions nécessaires sur
214
        # les données ou qu'aucun événement correspondant n'est trouvé.
215
        self.app.post('/plugin_json', {
216
                'idcorrevent': idcorrevent,
217
                'plugin_name': 'details',
218
            }, extra_environ={'REMOTE_USER': 'no_access'},
219
            status=404)
220

    
221
    def test_details_plugin_LLS_anonymous(self):
222
        """Dialogue des détails avec un LLS et en anonyme."""
223
        idcorrevent = insert_deps(True)[0]
224

    
225
        # Le contrôleur renvoie une erreur 401 (HTTPUnauthorized)
226
        # lorsque l'utilisateur n'est pas authentifié.
227
        self.app.post('/plugin_json', {
228
                'idcorrevent': idcorrevent,
229
                'plugin_name': 'details',
230
            }, status=401)
231

    
232
    def test_details_plugin_host_anonymous(self):
233
        """Dialogue des détails avec un hôte et en anonyme."""
234
        idcorrevent = insert_deps(False)[0]
235

    
236
        # Le contrôleur renvoie une erreur 401 (HTTPUnauthorized)
237
        # lorsque l'utilisateur n'est pas authentifié.
238
        self.app.post('/plugin_json', {
239
                'idcorrevent': idcorrevent,
240
                'plugin_name': 'details',
241
            }, status=401)