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
# -*- coding: utf-8 -*-
2
# Copyright (C) 2006-2011 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 SupItemGroup, User, UserGroup, \
17
                            Permission, DataPermission, StateName, \
18
                            LowLevelService, Event, CorrEvent, Host
19

    
20
def insert_deps(return_service):
21
    """
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
    timestamp = datetime.now()
33

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

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

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

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

    
51
    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

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

    
64
class TestDetailsPlugin(TestController):
65
    """Teste le dialogue pour l'accès aux historiques."""
66
    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
        usergroup = UserGroup(group_name=u'users_with_access')
76
        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
        usergroup = UserGroup(group_name=u'users_without_access')
88
        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

    
96
    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

    
100
        response = self.app.post('/plugin_json', {
101
                'idcorrevent': idcorrevent,
102
                'plugin_name': 'details',
103
            }, extra_environ={'REMOTE_USER': 'access'})
104
        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
            "idcause": idcause,
114
            "service": "baz",
115
            "peak_state": "WARNING",
116
            "current_state": "WARNING",
117
            "host": "bar",
118
            "initial_state": "WARNING",
119
            "maps": {},
120
        })
121

    
122
    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
        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
            "initial_state": "WARNING",
145
            "maps": {},
146
        })
147

    
148
    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

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

    
174
    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
        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
            "initial_state": "WARNING",
197
            "maps": {},
198
        })
199

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

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

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

    
217
        # 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
        self.app.post('/plugin_json', {
221
                'idcorrevent': idcorrevent,
222
                'plugin_name': 'details',
223
            }, extra_environ={'REMOTE_USER': 'no_access'},
224
            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
        self.app.post('/plugin_json', {
233
                '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
        self.app.post('/plugin_json', {
244
                'idcorrevent': idcorrevent,
245
                'plugin_name': 'details',
246
            }, status=401)