Project

General

Profile

Statistics
| Branch: | Tag: | Revision:

vigiboard / vigiboard / tests / functional / test_history_form.py @ 5dbfa80d

History | View | Annotate | Download (4.98 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.configure import DBSession
12
from vigilo.models import ServiceGroup, HostGroup, \
13
                            Host, Permission, StateName, \
14
                            LowLevelService, Event, CorrEvent
15

    
16
def insert_deps(return_service):
17
    """Insère les dépendances nécessaires aux tests."""
18
    timestamp = datetime.now()
19
    DBSession.add(StateName(statename=u'OK', order=1))
20
    DBSession.add(StateName(statename=u'UNKNOWN', order=1))
21
    DBSession.add(StateName(statename=u'WARNING', order=1))
22
    DBSession.add(StateName(statename=u'CRITICAL', order=1))
23
    DBSession.flush()
24

    
25
    hostgroup = HostGroup(
26
        name=u'foo',
27
    )
28
    DBSession.add(hostgroup)
29

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

    
44
    hostgroup.hosts.append(host)
45
    DBSession.flush()
46

    
47
    servicegroup = ServiceGroup(
48
        name=u'foo',
49
    )
50
    DBSession.add(servicegroup)
51

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

    
62
    servicegroup.services.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
    return (hostgroup, correvent.idcorrevent)
91

    
92
class TestHistoryForm(TestController):
93
    """Teste le dialogue pour l'accès aux historiques."""
94

    
95
    def test_history_form_LLS_alert_when_allowed(self):
96
        """Teste le formulaire d'historique avec un LLS (alerte visible)."""
97
        hostgroup, idcorrevent = insert_deps(True)
98
        manage = Permission.by_permission_name(u'manage')
99
        manage.hostgroups.append(hostgroup)
100
        DBSession.flush()
101
        transaction.commit()
102

    
103
        response = self.app.post('/history_dialog',
104
            {'idcorrevent': idcorrevent},
105
            extra_environ={'REMOTE_USER': 'manager'})
106
        json = response.json
107

    
108
        # Le contenu de "eventdetails" varie facilement.
109
        # On le teste séparément.
110
        json.pop('eventdetails', None)
111
        assert_true('eventdetails' in response.json)
112

    
113
        assert_equal(json, {
114
            "idcorrevent": idcorrevent,
115
            "service": "baz",
116
            "peak_state": "WARNING",
117
            "current_state": "WARNING",
118
            "host": "bar",
119
            "initial_state": "WARNING"
120
        })
121

    
122
    def test_history_form_host_alert_when_allowed(self):
123
        """Teste le formulaire d'historique avec un hôte (alerte visible)."""
124
        hostgroup, idcorrevent = insert_deps(False)
125
        manage = Permission.by_permission_name(u'manage')
126
        manage.hostgroups.append(hostgroup)
127
        DBSession.flush()
128
        transaction.commit()
129

    
130
        response = self.app.post('/history_dialog',
131
            {'idcorrevent': idcorrevent},
132
            extra_environ={'REMOTE_USER': 'manager'})
133
        json = response.json
134

    
135
        # Le contenu de "eventdetails" varie facilement.
136
        # On le teste séparément.
137
        json.pop('eventdetails', None)
138
        assert_true('eventdetails' in response.json)
139

    
140
        assert_equal(json, {
141
            "idcorrevent": idcorrevent,
142
            "service": None,
143
            "peak_state": "WARNING",
144
            "current_state": "WARNING",
145
            "host": "bar",
146
            "initial_state": "WARNING"
147
        })
148

    
149

    
150
    def test_history_form_LLS_when_forbidden(self):
151
        """Teste le formulaire d'historique avec un LLS (alerte invisible)."""
152
        idcorrevent = insert_deps(True)[1]
153
        DBSession.flush()
154
        transaction.commit()
155

    
156
        self.app.post('/history_dialog',
157
            {'idcorrevent': idcorrevent},
158
            extra_environ={'REMOTE_USER': 'manager'},
159
            status=302)
160

    
161
    def test_history_form_host_when_forbidden(self):
162
        """Teste le formulaire d'historique avec un LLS (alerte invisible)."""
163
        idcorrevent = insert_deps(False)[1]
164
        DBSession.flush()
165
        transaction.commit()
166

    
167
        self.app.post('/history_dialog',
168
            {'idcorrevent': idcorrevent},
169
            extra_environ={'REMOTE_USER': 'manager'},
170
            status=302)
171