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
# -*- coding: utf-8 -*-
2
# Copyright (C) 2006-2020 CS GROUP - France
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.utcnow()
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
            "maps": [],
119
        })
120

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

    
125
        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
            "initial_state": "WARNING",
144
            "maps": [],
145
        })
146

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

    
151
        response = self.app.post('/plugin_json', {
152
                'idcorrevent': idcorrevent,
153
                'plugin_name': 'details',
154
            }, extra_environ={'REMOTE_USER': 'access'})
155
        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
            "idcause": idcause,
165
            "service": None,
166
            "peak_state": "WARNING",
167
            "current_state": "WARNING",
168
            "host": "bar",
169
            "initial_state": "WARNING",
170
            "maps": [],
171
        })
172

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

    
177
        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
            "initial_state": "WARNING",
196
            "maps": [],
197
        })
198

    
199
    def test_details_plugin_LLS_when_forbidden(self):
200
        """Dialogue des détails avec un LLS et des droits insuffisants."""
201
        idcorrevent = insert_deps(True)[0]
202

    
203
        # 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
        self.app.post('/plugin_json', {
207
                'idcorrevent': idcorrevent,
208
                'plugin_name': 'details',
209
            }, extra_environ={'REMOTE_USER': 'no_access'},
210
            status=404)
211

    
212
    def test_details_plugin_host_when_forbidden(self):
213
        """Dialogue des détails avec un hôte et des droits insuffisants."""
214
        idcorrevent = insert_deps(False)[0]
215

    
216
        # 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
        self.app.post('/plugin_json', {
220
                'idcorrevent': idcorrevent,
221
                'plugin_name': 'details',
222
            }, extra_environ={'REMOTE_USER': 'no_access'},
223
            status=404)
224

    
225
    def test_details_plugin_LLS_anonymous(self):
226
        """Dialogue des détails avec un LLS et en anonyme."""
227
        idcorrevent = insert_deps(True)[0]
228

    
229
        # Le contrôleur renvoie une erreur 401 (HTTPUnauthorized)
230
        # lorsque l'utilisateur n'est pas authentifié.
231
        self.app.post('/plugin_json', {
232
                '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
        idcorrevent = insert_deps(False)[0]
239

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