Project

General

Profile

Statistics
| Branch: | Tag: | Revision:

vigiboard / vigiboard / tests / functional / plugins / test_details_plugin.py @ 0bd9c069

History | View | Annotate | Download (7.46 KB)

1
# -*- coding: utf-8 -*-
2
"""
3
Teste le formulaire donnant les liens vers les outils extérieurs
4
et les données de l'historique.
5
"""
6
from nose.tools import assert_true, assert_equal
7
from datetime import datetime
8
import transaction
9

    
10
from vigiboard.tests import TestController
11
from vigilo.models.session import DBSession
12
from vigilo.models.tables import SupItemGroup, User, UserGroup, \
13
                            Permission, DataPermission, StateName, \
14
                            LowLevelService, Event, CorrEvent, Host
15

    
16
def insert_deps(return_service):
17
    """
18
    Insère les dépendances nécessaires aux tests.
19

20
    @param return_service: Indique si les événements générés
21
        concernent un hôte (False) ou un service de bas niveau (True).
22
    @type return_service: C{bool}
23
    @return: Renvoie un tuple avec le groupe d'hôte créé,
24
        l'identifiant du L{CorrEvent} généré et enfin,
25
        l'identifiant de l'L{Event} généré.
26
    @rtype: C{tuple}
27
    """
28
    timestamp = datetime.now()
29

    
30
    hostgroup = SupItemGroup(name=u'foo')
31
    DBSession.add(hostgroup)
32

    
33
    host = Host(
34
        name=u'bar',
35
        checkhostcmd=u'',
36
        description=u'',
37
        hosttpl=u'',
38
        address=u'127.0.0.1',
39
        snmpport=42,
40
        snmpcommunity=u'public',
41
        snmpversion=u'3',
42
        weight=42,
43
    )
44
    DBSession.add(host)
45
    DBSession.flush()
46

    
47
    hostgroup.supitems.append(host)
48
    DBSession.flush()
49

    
50
    servicegroup = SupItemGroup(name=u'bar')
51
    DBSession.add(servicegroup)
52

    
53
    service = LowLevelService(
54
        host=host,
55
        command=u'',
56
        weight=42,
57
        servicename=u'baz',
58
    )
59
    DBSession.add(service)
60
    DBSession.flush()
61

    
62
    servicegroup.supitems.append(service)
63
    DBSession.flush()
64

    
65
    event = Event(
66
        timestamp=timestamp,
67
        current_state=StateName.statename_to_value(u'WARNING'),
68
        message=u'Hello world',
69
    )
70
    if return_service:
71
        event.supitem = service
72
    else:
73
        event.supitem = host
74
    DBSession.add(event)
75
    DBSession.flush()
76

    
77
    correvent = CorrEvent(
78
        impact=42,
79
        priority=42,
80
        trouble_ticket=None,
81
        status=u'None',
82
        occurrence=42,
83
        timestamp_active=timestamp,
84
        cause=event,
85
    )
86
    correvent.events.append(event)
87
    DBSession.add(correvent)
88
    DBSession.flush()
89

    
90
    usergroup = UserGroup.by_group_name(u'users_with_access')
91
    DBSession.add(DataPermission(
92
        usergroup=usergroup,
93
        group=hostgroup,
94
        access=u'r',
95
    ))
96
    DBSession.flush()
97

    
98
    transaction.commit()
99
    correvent = DBSession.query(CorrEvent).first()
100
    event = DBSession.query(Event).first()
101

    
102
    return (hostgroup, correvent.idcorrevent, event.idevent)
103

    
104
class TestDetailsPlugin(TestController):
105
    """Teste le dialogue pour l'accès aux historiques."""
106
    def setUp(self):
107
        super(TestDetailsPlugin, self).setUp()
108
        perm = Permission.by_permission_name(u'vigiboard-access')
109

    
110
        user = User(
111
            user_name=u'access',
112
            fullname=u'',
113
            email=u'user.has@access',
114
        )
115
        usergroup = UserGroup(
116
            group_name=u'users_with_access',
117
        )
118
        usergroup.permissions.append(perm)
119
        user.usergroups.append(usergroup)
120
        DBSession.add(user)
121
        DBSession.add(usergroup)
122
        DBSession.flush()
123

    
124
        user = User(
125
            user_name=u'no_access',
126
            fullname=u'',
127
            email=u'user.has.no@access',
128
        )
129
        usergroup = UserGroup(
130
            group_name=u'users_without_access',
131
        )
132
        usergroup.permissions.append(perm)
133
        user.usergroups.append(usergroup)
134
        DBSession.add(user)
135
        DBSession.add(usergroup)
136
        DBSession.flush()
137

    
138
        transaction.commit()
139

    
140
    def test_details_plugin_LLS_alert_when_allowed(self):
141
        """Dialogue des détails avec un LLS et les bons droits."""
142
        hostgroup, idcorrevent, idcause = insert_deps(True)
143

    
144
        response = self.app.post('/get_plugin_value', {
145
                'idcorrevent': idcorrevent,
146
                'plugin_name': 'details',
147
            }, extra_environ={'REMOTE_USER': 'access'})
148
        json = response.json
149

    
150
        # Le contenu de "eventdetails" varie facilement.
151
        # On le teste séparément.
152
        json.pop('eventdetails', None)
153
        assert_true('eventdetails' in response.json)
154

    
155
        assert_equal(json, {
156
            "idcorrevent": idcorrevent,
157
            "idcause": idcause,
158
            "service": "baz",
159
            "peak_state": "WARNING",
160
            "current_state": "WARNING",
161
            "host": "bar",
162
            "initial_state": "WARNING"
163
        })
164

    
165
    def test_details_plugin_host_alert_when_allowed(self):
166
        """Dialogue des détails avec un hôte et les bons droits."""
167
        hostgroup, idcorrevent, idcause = insert_deps(False)
168

    
169
        response = self.app.post('/get_plugin_value', {
170
                'idcorrevent': idcorrevent,
171
                'plugin_name': 'details',
172
            }, extra_environ={'REMOTE_USER': 'access'})
173
        json = response.json
174

    
175
        # Le contenu de "eventdetails" varie facilement.
176
        # On le teste séparément.
177
        json.pop('eventdetails', None)
178
        assert_true('eventdetails' in response.json)
179

    
180
        assert_equal(json, {
181
            "idcorrevent": idcorrevent,
182
            "idcause": idcause,
183
            "service": None,
184
            "peak_state": "WARNING",
185
            "current_state": "WARNING",
186
            "host": "bar",
187
            "initial_state": "WARNING"
188
        })
189

    
190

    
191
    def test_details_plugin_LLS_when_forbidden(self):
192
        """Dialogue des détails avec un LLS et des droits insuffisants."""
193
        idcorrevent = insert_deps(True)[1]
194

    
195
        # Le contrôleur renvoie une erreur 404 (HTTPNotFound)
196
        # lorsque l'utilisateur n'a pas les permissions nécessaires sur
197
        # les données ou qu'aucun événement correspondant n'est trouvé.
198
        self.app.post('/get_plugin_value', {
199
                'idcorrevent': idcorrevent,
200
                'plugin_name': 'details',
201
            }, extra_environ={'REMOTE_USER': 'no_access'},
202
            status=404)
203

    
204
    def test_details_plugin_host_when_forbidden(self):
205
        """Dialogue des détails avec un hôte et des droits insuffisants."""
206
        idcorrevent = insert_deps(False)[1]
207

    
208
        # Le contrôleur renvoie une erreur 404 (HTTPNotFound)
209
        # lorsque l'utilisateur n'a pas les permissions nécessaires sur
210
        # les données ou qu'aucun événement correspondant n'est trouvé.
211
        self.app.post('/get_plugin_value', {
212
                'idcorrevent': idcorrevent,
213
                'plugin_name': 'details',
214
            }, extra_environ={'REMOTE_USER': 'no_access'},
215
            status=404)
216

    
217
    def test_details_plugin_LLS_anonymous(self):
218
        """Dialogue des détails avec un LLS et en anonyme."""
219
        idcorrevent = insert_deps(True)[1]
220

    
221
        # Le contrôleur renvoie une erreur 401 (HTTPUnauthorized)
222
        # lorsque l'utilisateur n'est pas authentifié.
223
        self.app.post('/get_plugin_value', {
224
                'idcorrevent': idcorrevent,
225
                'plugin_name': 'details',
226
            }, status=401)
227

    
228
    def test_details_plugin_host_anonymous(self):
229
        """Dialogue des détails avec un hôte et en anonyme."""
230
        idcorrevent = insert_deps(False)[1]
231

    
232
        # Le contrôleur renvoie une erreur 401 (HTTPUnauthorized)
233
        # lorsque l'utilisateur n'est pas authentifié.
234
        self.app.post('/get_plugin_value', {
235
                'idcorrevent': idcorrevent,
236
                'plugin_name': 'details',
237
            }, status=401)
238