Project

General

Profile

Statistics
| Branch: | Tag: | Revision:

vigiboard / vigiboard / tests / functional / plugins / test_details_plugin.py @ 6f6efdcd

History | View | Annotate | Download (7.43 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 User, UserGroup, \
13
                            Permission, DataPermission, StateName, \
14
                            LowLevelService, Event, CorrEvent, Host
15
from vigilo.models.demo.functions import *
16

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

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

    
31
    hostgroup = add_supitemgroup(name=u'foo')
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 = add_supitemgroup(name=u'bar')
51

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

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

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

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

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

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

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

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

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

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

    
137
        transaction.commit()
138

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

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

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

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

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

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

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

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

    
189

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

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

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

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

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

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

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

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