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 911069bc Francois POIROTTE
# -*- coding: utf-8 -*-
2 a2744508 Aurelien BOMPARD
# Copyright (C) 2006-2012 CS-SI
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 911069bc Francois POIROTTE
    timestamp = datetime.now()
32
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
            "initial_state": "WARNING"
118
        })
119
120 20a6c56d Francois POIROTTE
    def test_details_plugin_LLS_alert_when_manager(self):
121
        """Dialogue des détails avec un LLS en tant que manager."""
122 8b2edebe Aurelien BOMPARD
        idcorrevent, idcause = insert_deps(True)
123 20a6c56d Francois POIROTTE
124 814174cd Vincent QUEMENER
        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 072f2a16 Francois POIROTTE
    def test_details_plugin_host_alert_when_allowed(self):
146
        """Dialogue des détails avec un hôte et les bons droits."""
147 8b2edebe Aurelien BOMPARD
        idcorrevent, idcause = insert_deps(False)
148 911069bc Francois POIROTTE
149 cf3c2494 Vincent QUEMENER
        response = self.app.post('/plugin_json', {
150 15b98053 Francois POIROTTE
                'idcorrevent': idcorrevent,
151 072f2a16 Francois POIROTTE
                'plugin_name': 'details',
152 60d02e7f Francois POIROTTE
            }, extra_environ={'REMOTE_USER': 'access'})
153 911069bc Francois POIROTTE
        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 072f2a16 Francois POIROTTE
            "idcause": idcause,
163 911069bc Francois POIROTTE
            "service": None,
164
            "peak_state": "WARNING",
165
            "current_state": "WARNING",
166
            "host": "bar",
167
            "initial_state": "WARNING"
168
        })
169
170 20a6c56d Francois POIROTTE
    def test_details_plugin_host_alert_when_manager(self):
171
        """Dialogue des détails avec un hôte en tant que manager."""
172 8b2edebe Aurelien BOMPARD
        idcorrevent, idcause = insert_deps(False)
173 20a6c56d Francois POIROTTE
174 814174cd Vincent QUEMENER
        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 072f2a16 Francois POIROTTE
    def test_details_plugin_LLS_when_forbidden(self):
196
        """Dialogue des détails avec un LLS et des droits insuffisants."""
197 8b2edebe Aurelien BOMPARD
        idcorrevent = insert_deps(True)[0]
198 911069bc Francois POIROTTE
199 072f2a16 Francois POIROTTE
        # 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 cf3c2494 Vincent QUEMENER
        self.app.post('/plugin_json', {
203 15b98053 Francois POIROTTE
                'idcorrevent': idcorrevent,
204 072f2a16 Francois POIROTTE
                'plugin_name': 'details',
205 60d02e7f Francois POIROTTE
            }, extra_environ={'REMOTE_USER': 'no_access'},
206 072f2a16 Francois POIROTTE
            status=404)
207 911069bc Francois POIROTTE
208 072f2a16 Francois POIROTTE
    def test_details_plugin_host_when_forbidden(self):
209
        """Dialogue des détails avec un hôte et des droits insuffisants."""
210 8b2edebe Aurelien BOMPARD
        idcorrevent = insert_deps(False)[0]
211 911069bc Francois POIROTTE
212 072f2a16 Francois POIROTTE
        # 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 cf3c2494 Vincent QUEMENER
        self.app.post('/plugin_json', {
216 15b98053 Francois POIROTTE
                'idcorrevent': idcorrevent,
217 072f2a16 Francois POIROTTE
                'plugin_name': 'details',
218 60d02e7f Francois POIROTTE
            }, extra_environ={'REMOTE_USER': 'no_access'},
219 072f2a16 Francois POIROTTE
            status=404)
220
221
    def test_details_plugin_LLS_anonymous(self):
222
        """Dialogue des détails avec un LLS et en anonyme."""
223 8b2edebe Aurelien BOMPARD
        idcorrevent = insert_deps(True)[0]
224 072f2a16 Francois POIROTTE
225
        # Le contrôleur renvoie une erreur 401 (HTTPUnauthorized)
226
        # lorsque l'utilisateur n'est pas authentifié.
227 cf3c2494 Vincent QUEMENER
        self.app.post('/plugin_json', {
228 072f2a16 Francois POIROTTE
                '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 8b2edebe Aurelien BOMPARD
        idcorrevent = insert_deps(False)[0]
235 072f2a16 Francois POIROTTE
236
        # Le contrôleur renvoie une erreur 401 (HTTPUnauthorized)
237
        # lorsque l'utilisateur n'est pas authentifié.
238 cf3c2494 Vincent QUEMENER
        self.app.post('/plugin_json', {
239 072f2a16 Francois POIROTTE
                'idcorrevent': idcorrevent,
240
                'plugin_name': 'details',
241
            }, status=401)