Project

General

Profile

Statistics
| Branch: | Tag: | Revision:

vigiboard / vigiboard / tests / functional / plugins / test_details_plugin.py @ 011743be

History | View | Annotate | Download (8.49 KB)

1 911069bc Francois POIROTTE
# -*- coding: utf-8 -*-
2 011743be Francois POIROTTE
# Copyright (C) 2006-2020 CS GROUP - France
3 b373a5de Aurelien BOMPARD
# 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 8b2edebe Aurelien BOMPARD
from vigilo.models.tables import User, UserGroup, Event, CorrEvent, \
17
                            Permission, DataPermission
18 911069bc Francois POIROTTE
19
def insert_deps(return_service):
20 072f2a16 Francois POIROTTE
    """
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 1c5486c7 Francois POIROTTE
    timestamp = datetime.utcnow()
32 911069bc Francois POIROTTE
33 9a05a743 Francois POIROTTE
    hostgroup = functions.add_supitemgroup(u'foo')
34
    host = functions.add_host(u'bar')
35 24d74687 Francois POIROTTE
    hostgroup.supitems.append(host)
36 911069bc Francois POIROTTE
    DBSession.flush()
37
38 9a05a743 Francois POIROTTE
    servicegroup = functions.add_supitemgroup(u'bar')
39
    service = functions.add_lowlevelservice(host, u'baz')
40 24d74687 Francois POIROTTE
    servicegroup.supitems.append(service)
41 911069bc Francois POIROTTE
    DBSession.flush()
42
43
    if return_service:
44 9a05a743 Francois POIROTTE
        event = functions.add_event(service, u'WARNING', u'', timestamp)
45 911069bc Francois POIROTTE
    else:
46 9a05a743 Francois POIROTTE
        event = functions.add_event(host, u'WARNING', u'', timestamp)
47 911069bc Francois POIROTTE
48 9a05a743 Francois POIROTTE
    correvent = functions.add_correvent([event], timestamp=timestamp)
49 911069bc Francois POIROTTE
50 60d02e7f Francois POIROTTE
    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 9a05a743 Francois POIROTTE
59 60d02e7f Francois POIROTTE
    correvent = DBSession.query(CorrEvent).first()
60
    event = DBSession.query(Event).first()
61 8b2edebe Aurelien BOMPARD
    return (correvent.idcorrevent, event.idevent)
62 911069bc Francois POIROTTE
63 072f2a16 Francois POIROTTE
class TestDetailsPlugin(TestController):
64 911069bc Francois POIROTTE
    """Teste le dialogue pour l'accès aux historiques."""
65 60d02e7f Francois POIROTTE
    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 03059edd Francois POIROTTE
        usergroup = UserGroup(group_name=u'users_with_access')
75 60d02e7f Francois POIROTTE
        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 03059edd Francois POIROTTE
        usergroup = UserGroup(group_name=u'users_without_access')
87 60d02e7f Francois POIROTTE
        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 911069bc Francois POIROTTE
95 072f2a16 Francois POIROTTE
    def test_details_plugin_LLS_alert_when_allowed(self):
96
        """Dialogue des détails avec un LLS et les bons droits."""
97 8b2edebe Aurelien BOMPARD
        idcorrevent, idcause = insert_deps(True)
98 911069bc Francois POIROTTE
99 cf3c2494 Vincent QUEMENER
        response = self.app.post('/plugin_json', {
100 15b98053 Francois POIROTTE
                'idcorrevent': idcorrevent,
101 072f2a16 Francois POIROTTE
                'plugin_name': 'details',
102 60d02e7f Francois POIROTTE
            }, extra_environ={'REMOTE_USER': 'access'})
103 911069bc Francois POIROTTE
        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 072f2a16 Francois POIROTTE
            "idcause": idcause,
113 911069bc Francois POIROTTE
            "service": "baz",
114
            "peak_state": "WARNING",
115
            "current_state": "WARNING",
116
            "host": "bar",
117 dc005588 Francois POIROTTE
            "initial_state": "WARNING",
118 a4ffe87d Francois POIROTTE
            "maps": [],
119 911069bc Francois POIROTTE
        })
120
121 20a6c56d Francois POIROTTE
    def test_details_plugin_LLS_alert_when_manager(self):
122
        """Dialogue des détails avec un LLS en tant que manager."""
123 8b2edebe Aurelien BOMPARD
        idcorrevent, idcause = insert_deps(True)
124 20a6c56d Francois POIROTTE
125 814174cd Vincent QUEMENER
        response = self.app.post('/plugin_json', {
126
                'idcorrevent': idcorrevent,
127
                'plugin_name': 'details',
128
            }, extra_environ={'REMOTE_USER': 'manager'})
129
        json = response.json
130
131
        # Le contenu de "eventdetails" varie facilement.
132
        # On le teste séparément.
133
        json.pop('eventdetails', None)
134
        assert_true('eventdetails' in response.json)
135
136
        assert_equal(json, {
137
            "idcorrevent": idcorrevent,
138
            "idcause": idcause,
139
            "service": "baz",
140
            "peak_state": "WARNING",
141
            "current_state": "WARNING",
142
            "host": "bar",
143 dc005588 Francois POIROTTE
            "initial_state": "WARNING",
144 a4ffe87d Francois POIROTTE
            "maps": [],
145 814174cd Vincent QUEMENER
        })
146
147 072f2a16 Francois POIROTTE
    def test_details_plugin_host_alert_when_allowed(self):
148
        """Dialogue des détails avec un hôte et les bons droits."""
149 8b2edebe Aurelien BOMPARD
        idcorrevent, idcause = insert_deps(False)
150 911069bc Francois POIROTTE
151 cf3c2494 Vincent QUEMENER
        response = self.app.post('/plugin_json', {
152 15b98053 Francois POIROTTE
                'idcorrevent': idcorrevent,
153 072f2a16 Francois POIROTTE
                'plugin_name': 'details',
154 60d02e7f Francois POIROTTE
            }, extra_environ={'REMOTE_USER': 'access'})
155 911069bc Francois POIROTTE
        json = response.json
156
157
        # Le contenu de "eventdetails" varie facilement.
158
        # On le teste séparément.
159
        json.pop('eventdetails', None)
160
        assert_true('eventdetails' in response.json)
161
162
        assert_equal(json, {
163
            "idcorrevent": idcorrevent,
164 072f2a16 Francois POIROTTE
            "idcause": idcause,
165 911069bc Francois POIROTTE
            "service": None,
166
            "peak_state": "WARNING",
167
            "current_state": "WARNING",
168
            "host": "bar",
169 dc005588 Francois POIROTTE
            "initial_state": "WARNING",
170 a4ffe87d Francois POIROTTE
            "maps": [],
171 911069bc Francois POIROTTE
        })
172
173 20a6c56d Francois POIROTTE
    def test_details_plugin_host_alert_when_manager(self):
174
        """Dialogue des détails avec un hôte en tant que manager."""
175 8b2edebe Aurelien BOMPARD
        idcorrevent, idcause = insert_deps(False)
176 20a6c56d Francois POIROTTE
177 814174cd Vincent QUEMENER
        response = self.app.post('/plugin_json', {
178
                'idcorrevent': idcorrevent,
179
                'plugin_name': 'details',
180
            }, extra_environ={'REMOTE_USER': 'manager'})
181
        json = response.json
182
183
        # Le contenu de "eventdetails" varie facilement.
184
        # On le teste séparément.
185
        json.pop('eventdetails', None)
186
        assert_true('eventdetails' in response.json)
187
188
        assert_equal(json, {
189
            "idcorrevent": idcorrevent,
190
            "idcause": idcause,
191
            "service": None,
192
            "peak_state": "WARNING",
193
            "current_state": "WARNING",
194
            "host": "bar",
195 dc005588 Francois POIROTTE
            "initial_state": "WARNING",
196 a4ffe87d Francois POIROTTE
            "maps": [],
197 814174cd Vincent QUEMENER
        })
198
199 072f2a16 Francois POIROTTE
    def test_details_plugin_LLS_when_forbidden(self):
200
        """Dialogue des détails avec un LLS et des droits insuffisants."""
201 8b2edebe Aurelien BOMPARD
        idcorrevent = insert_deps(True)[0]
202 911069bc Francois POIROTTE
203 072f2a16 Francois POIROTTE
        # Le contrôleur renvoie une erreur 404 (HTTPNotFound)
204
        # lorsque l'utilisateur n'a pas les permissions nécessaires sur
205
        # les données ou qu'aucun événement correspondant n'est trouvé.
206 cf3c2494 Vincent QUEMENER
        self.app.post('/plugin_json', {
207 15b98053 Francois POIROTTE
                'idcorrevent': idcorrevent,
208 072f2a16 Francois POIROTTE
                'plugin_name': 'details',
209 60d02e7f Francois POIROTTE
            }, extra_environ={'REMOTE_USER': 'no_access'},
210 072f2a16 Francois POIROTTE
            status=404)
211 911069bc Francois POIROTTE
212 072f2a16 Francois POIROTTE
    def test_details_plugin_host_when_forbidden(self):
213
        """Dialogue des détails avec un hôte et des droits insuffisants."""
214 8b2edebe Aurelien BOMPARD
        idcorrevent = insert_deps(False)[0]
215 911069bc Francois POIROTTE
216 072f2a16 Francois POIROTTE
        # Le contrôleur renvoie une erreur 404 (HTTPNotFound)
217
        # lorsque l'utilisateur n'a pas les permissions nécessaires sur
218
        # les données ou qu'aucun événement correspondant n'est trouvé.
219 cf3c2494 Vincent QUEMENER
        self.app.post('/plugin_json', {
220 15b98053 Francois POIROTTE
                'idcorrevent': idcorrevent,
221 072f2a16 Francois POIROTTE
                'plugin_name': 'details',
222 60d02e7f Francois POIROTTE
            }, extra_environ={'REMOTE_USER': 'no_access'},
223 072f2a16 Francois POIROTTE
            status=404)
224
225
    def test_details_plugin_LLS_anonymous(self):
226
        """Dialogue des détails avec un LLS et en anonyme."""
227 8b2edebe Aurelien BOMPARD
        idcorrevent = insert_deps(True)[0]
228 072f2a16 Francois POIROTTE
229
        # Le contrôleur renvoie une erreur 401 (HTTPUnauthorized)
230
        # lorsque l'utilisateur n'est pas authentifié.
231 cf3c2494 Vincent QUEMENER
        self.app.post('/plugin_json', {
232 072f2a16 Francois POIROTTE
                'idcorrevent': idcorrevent,
233
                'plugin_name': 'details',
234
            }, status=401)
235
236
    def test_details_plugin_host_anonymous(self):
237
        """Dialogue des détails avec un hôte et en anonyme."""
238 8b2edebe Aurelien BOMPARD
        idcorrevent = insert_deps(False)[0]
239 072f2a16 Francois POIROTTE
240
        # Le contrôleur renvoie une erreur 401 (HTTPUnauthorized)
241
        # lorsque l'utilisateur n'est pas authentifié.
242 cf3c2494 Vincent QUEMENER
        self.app.post('/plugin_json', {
243 072f2a16 Francois POIROTTE
                'idcorrevent': idcorrevent,
244
                'plugin_name': 'details',
245
            }, status=401)