Project

General

Profile

Statistics
| Branch: | Tag: | Revision:

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

History | View | Annotate | Download (8.61 KB)

1 911069bc Francois POIROTTE
# -*- coding: utf-8 -*-
2 b373a5de Aurelien BOMPARD
# Copyright (C) 2006-2011 CS-SI
3
# License: GNU GPL v2 <http://www.gnu.org/licenses/gpl-2.0.html>
4
5 911069bc Francois POIROTTE
"""
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 e7e3d45e Francois POIROTTE
from vigilo.models.session import DBSession
15 9a05a743 Francois POIROTTE
from vigilo.models.demo import functions
16 0bd9c069 Francois POIROTTE
from vigilo.models.tables import SupItemGroup, User, UserGroup, \
17 60d02e7f Francois POIROTTE
                            Permission, DataPermission, StateName, \
18
                            LowLevelService, Event, CorrEvent, Host
19 911069bc Francois POIROTTE
20
def insert_deps(return_service):
21 072f2a16 Francois POIROTTE
    """
22
    Insère les dépendances nécessaires aux tests.
23

24
    @param return_service: Indique si les événements générés
25
        concernent un hôte (False) ou un service de bas niveau (True).
26
    @type return_service: C{bool}
27
    @return: Renvoie un tuple avec le groupe d'hôte créé,
28
        l'identifiant du L{CorrEvent} généré et enfin,
29
        l'identifiant de l'L{Event} généré.
30
    @rtype: C{tuple}
31
    """
32 911069bc Francois POIROTTE
    timestamp = datetime.now()
33
34 9a05a743 Francois POIROTTE
    hostgroup = functions.add_supitemgroup(u'foo')
35
    host = functions.add_host(u'bar')
36 24d74687 Francois POIROTTE
    hostgroup.supitems.append(host)
37 911069bc Francois POIROTTE
    DBSession.flush()
38
39 9a05a743 Francois POIROTTE
    servicegroup = functions.add_supitemgroup(u'bar')
40
    service = functions.add_lowlevelservice(host, u'baz')
41 24d74687 Francois POIROTTE
    servicegroup.supitems.append(service)
42 911069bc Francois POIROTTE
    DBSession.flush()
43
44
    if return_service:
45 9a05a743 Francois POIROTTE
        event = functions.add_event(service, u'WARNING', u'', timestamp)
46 911069bc Francois POIROTTE
    else:
47 9a05a743 Francois POIROTTE
        event = functions.add_event(host, u'WARNING', u'', timestamp)
48 911069bc Francois POIROTTE
49 9a05a743 Francois POIROTTE
    correvent = functions.add_correvent([event], timestamp=timestamp)
50 911069bc Francois POIROTTE
51 60d02e7f Francois POIROTTE
    usergroup = UserGroup.by_group_name(u'users_with_access')
52
    DBSession.add(DataPermission(
53
        usergroup=usergroup,
54
        group=hostgroup,
55
        access=u'r',
56
    ))
57
    DBSession.flush()
58
    transaction.commit()
59 9a05a743 Francois POIROTTE
60 60d02e7f Francois POIROTTE
    correvent = DBSession.query(CorrEvent).first()
61
    event = DBSession.query(Event).first()
62 072f2a16 Francois POIROTTE
    return (hostgroup, correvent.idcorrevent, event.idevent)
63 911069bc Francois POIROTTE
64 072f2a16 Francois POIROTTE
class TestDetailsPlugin(TestController):
65 911069bc Francois POIROTTE
    """Teste le dialogue pour l'accès aux historiques."""
66 60d02e7f Francois POIROTTE
    def setUp(self):
67
        super(TestDetailsPlugin, self).setUp()
68
        perm = Permission.by_permission_name(u'vigiboard-access')
69
70
        user = User(
71
            user_name=u'access',
72
            fullname=u'',
73
            email=u'user.has@access',
74
        )
75 03059edd Francois POIROTTE
        usergroup = UserGroup(group_name=u'users_with_access')
76 60d02e7f Francois POIROTTE
        usergroup.permissions.append(perm)
77
        user.usergroups.append(usergroup)
78
        DBSession.add(user)
79
        DBSession.add(usergroup)
80
        DBSession.flush()
81
82
        user = User(
83
            user_name=u'no_access',
84
            fullname=u'',
85
            email=u'user.has.no@access',
86
        )
87 03059edd Francois POIROTTE
        usergroup = UserGroup(group_name=u'users_without_access')
88 60d02e7f Francois POIROTTE
        usergroup.permissions.append(perm)
89
        user.usergroups.append(usergroup)
90
        DBSession.add(user)
91
        DBSession.add(usergroup)
92
        DBSession.flush()
93
94
        transaction.commit()
95 911069bc Francois POIROTTE
96 072f2a16 Francois POIROTTE
    def test_details_plugin_LLS_alert_when_allowed(self):
97
        """Dialogue des détails avec un LLS et les bons droits."""
98
        hostgroup, idcorrevent, idcause = insert_deps(True)
99 911069bc Francois POIROTTE
100 cf3c2494 Vincent QUEMENER
        response = self.app.post('/plugin_json', {
101 15b98053 Francois POIROTTE
                'idcorrevent': idcorrevent,
102 072f2a16 Francois POIROTTE
                'plugin_name': 'details',
103 60d02e7f Francois POIROTTE
            }, extra_environ={'REMOTE_USER': 'access'})
104 911069bc Francois POIROTTE
        json = response.json
105
106
        # Le contenu de "eventdetails" varie facilement.
107
        # On le teste séparément.
108
        json.pop('eventdetails', None)
109
        assert_true('eventdetails' in response.json)
110
111
        assert_equal(json, {
112
            "idcorrevent": idcorrevent,
113 072f2a16 Francois POIROTTE
            "idcause": idcause,
114 911069bc Francois POIROTTE
            "service": "baz",
115
            "peak_state": "WARNING",
116
            "current_state": "WARNING",
117
            "host": "bar",
118 dc005588 Francois POIROTTE
            "initial_state": "WARNING",
119
            "maps": {},
120 911069bc Francois POIROTTE
        })
121
122 20a6c56d Francois POIROTTE
    def test_details_plugin_LLS_alert_when_manager(self):
123
        """Dialogue des détails avec un LLS en tant que manager."""
124
        hostgroup, idcorrevent, idcause = insert_deps(True)
125
126 814174cd Vincent QUEMENER
        response = self.app.post('/plugin_json', {
127
                'idcorrevent': idcorrevent,
128
                'plugin_name': 'details',
129
            }, extra_environ={'REMOTE_USER': 'manager'})
130
        json = response.json
131
132
        # Le contenu de "eventdetails" varie facilement.
133
        # On le teste séparément.
134
        json.pop('eventdetails', None)
135
        assert_true('eventdetails' in response.json)
136
137
        assert_equal(json, {
138
            "idcorrevent": idcorrevent,
139
            "idcause": idcause,
140
            "service": "baz",
141
            "peak_state": "WARNING",
142
            "current_state": "WARNING",
143
            "host": "bar",
144 dc005588 Francois POIROTTE
            "initial_state": "WARNING",
145
            "maps": {},
146 814174cd Vincent QUEMENER
        })
147
148 072f2a16 Francois POIROTTE
    def test_details_plugin_host_alert_when_allowed(self):
149
        """Dialogue des détails avec un hôte et les bons droits."""
150
        hostgroup, idcorrevent, idcause = insert_deps(False)
151 911069bc Francois POIROTTE
152 cf3c2494 Vincent QUEMENER
        response = self.app.post('/plugin_json', {
153 15b98053 Francois POIROTTE
                'idcorrevent': idcorrevent,
154 072f2a16 Francois POIROTTE
                'plugin_name': 'details',
155 60d02e7f Francois POIROTTE
            }, extra_environ={'REMOTE_USER': 'access'})
156 911069bc Francois POIROTTE
        json = response.json
157
158
        # Le contenu de "eventdetails" varie facilement.
159
        # On le teste séparément.
160
        json.pop('eventdetails', None)
161
        assert_true('eventdetails' in response.json)
162
163
        assert_equal(json, {
164
            "idcorrevent": idcorrevent,
165 072f2a16 Francois POIROTTE
            "idcause": idcause,
166 911069bc Francois POIROTTE
            "service": None,
167
            "peak_state": "WARNING",
168
            "current_state": "WARNING",
169
            "host": "bar",
170 dc005588 Francois POIROTTE
            "initial_state": "WARNING",
171
            "maps": {},
172 911069bc Francois POIROTTE
        })
173
174 20a6c56d Francois POIROTTE
    def test_details_plugin_host_alert_when_manager(self):
175
        """Dialogue des détails avec un hôte en tant que manager."""
176
        hostgroup, idcorrevent, idcause = insert_deps(False)
177
178 814174cd Vincent QUEMENER
        response = self.app.post('/plugin_json', {
179
                'idcorrevent': idcorrevent,
180
                'plugin_name': 'details',
181
            }, extra_environ={'REMOTE_USER': 'manager'})
182
        json = response.json
183
184
        # Le contenu de "eventdetails" varie facilement.
185
        # On le teste séparément.
186
        json.pop('eventdetails', None)
187
        assert_true('eventdetails' in response.json)
188
189
        assert_equal(json, {
190
            "idcorrevent": idcorrevent,
191
            "idcause": idcause,
192
            "service": None,
193
            "peak_state": "WARNING",
194
            "current_state": "WARNING",
195
            "host": "bar",
196 dc005588 Francois POIROTTE
            "initial_state": "WARNING",
197
            "maps": {},
198 814174cd Vincent QUEMENER
        })
199
200 072f2a16 Francois POIROTTE
    def test_details_plugin_LLS_when_forbidden(self):
201
        """Dialogue des détails avec un LLS et des droits insuffisants."""
202 911069bc Francois POIROTTE
        idcorrevent = insert_deps(True)[1]
203
204 072f2a16 Francois POIROTTE
        # Le contrôleur renvoie une erreur 404 (HTTPNotFound)
205
        # lorsque l'utilisateur n'a pas les permissions nécessaires sur
206
        # les données ou qu'aucun événement correspondant n'est trouvé.
207 cf3c2494 Vincent QUEMENER
        self.app.post('/plugin_json', {
208 15b98053 Francois POIROTTE
                'idcorrevent': idcorrevent,
209 072f2a16 Francois POIROTTE
                'plugin_name': 'details',
210 60d02e7f Francois POIROTTE
            }, extra_environ={'REMOTE_USER': 'no_access'},
211 072f2a16 Francois POIROTTE
            status=404)
212 911069bc Francois POIROTTE
213 072f2a16 Francois POIROTTE
    def test_details_plugin_host_when_forbidden(self):
214
        """Dialogue des détails avec un hôte et des droits insuffisants."""
215 911069bc Francois POIROTTE
        idcorrevent = insert_deps(False)[1]
216
217 072f2a16 Francois POIROTTE
        # Le contrôleur renvoie une erreur 404 (HTTPNotFound)
218
        # lorsque l'utilisateur n'a pas les permissions nécessaires sur
219
        # les données ou qu'aucun événement correspondant n'est trouvé.
220 cf3c2494 Vincent QUEMENER
        self.app.post('/plugin_json', {
221 15b98053 Francois POIROTTE
                'idcorrevent': idcorrevent,
222 072f2a16 Francois POIROTTE
                'plugin_name': 'details',
223 60d02e7f Francois POIROTTE
            }, extra_environ={'REMOTE_USER': 'no_access'},
224 072f2a16 Francois POIROTTE
            status=404)
225
226
    def test_details_plugin_LLS_anonymous(self):
227
        """Dialogue des détails avec un LLS et en anonyme."""
228
        idcorrevent = insert_deps(True)[1]
229
230
        # Le contrôleur renvoie une erreur 401 (HTTPUnauthorized)
231
        # lorsque l'utilisateur n'est pas authentifié.
232 cf3c2494 Vincent QUEMENER
        self.app.post('/plugin_json', {
233 072f2a16 Francois POIROTTE
                'idcorrevent': idcorrevent,
234
                'plugin_name': 'details',
235
            }, status=401)
236
237
    def test_details_plugin_host_anonymous(self):
238
        """Dialogue des détails avec un hôte et en anonyme."""
239
        idcorrevent = insert_deps(False)[1]
240
241
        # Le contrôleur renvoie une erreur 401 (HTTPUnauthorized)
242
        # lorsque l'utilisateur n'est pas authentifié.
243 cf3c2494 Vincent QUEMENER
        self.app.post('/plugin_json', {
244 072f2a16 Francois POIROTTE
                'idcorrevent': idcorrevent,
245
                'plugin_name': 'details',
246
            }, status=401)