Project

General

Profile

Statistics
| Branch: | Tag: | Revision:

vigiboard / vigiboard / tests / functional / test_search_form_host.py @ 703bd599

History | View | Annotate | Download (5.42 KB)

1 64ed9170 Vincent QUEMENER
# -*- coding: utf-8 -*-
2 703bd599 Francois POIROTTE
# Copyright (C) 2006-2014 CS-SI
3 b373a5de Aurelien BOMPARD
# License: GNU GPL v2 <http://www.gnu.org/licenses/gpl-2.0.html>
4
5 64ed9170 Vincent QUEMENER
"""
6
Teste le formulaire de recherche avec un nom d'hôte.
7
"""
8
from nose.tools import assert_true, assert_equal
9
from datetime import datetime
10
import transaction
11
12
from vigiboard.tests import TestController
13 e7e3d45e Francois POIROTTE
from vigilo.models.session import DBSession
14 0bd9c069 Francois POIROTTE
from vigilo.models.tables import SupItemGroup, Host, Permission, \
15 60d02e7f Francois POIROTTE
                                    Event, CorrEvent, StateName, \
16
                                    User, UserGroup, DataPermission
17 64ed9170 Vincent QUEMENER
18
def insert_deps():
19
    """Insère les dépendances nécessaires aux tests."""
20
    timestamp = datetime.now()
21
22 03059edd Francois POIROTTE
    hostgroup = SupItemGroup(name=u'foo', parent=None)
23 0bd9c069 Francois POIROTTE
    DBSession.add(hostgroup)
24
    DBSession.flush()
25 64ed9170 Vincent QUEMENER
26
    host = Host(
27
        name=u'bar',
28
        description=u'',
29
        hosttpl=u'',
30 0dcb87f7 Francois POIROTTE
        address=u'127.0.0.1',
31 64ed9170 Vincent QUEMENER
        snmpport=42,
32
        snmpcommunity=u'public',
33
        snmpversion=u'3',
34
        weight=42,
35
    )
36
    DBSession.add(host)
37
    DBSession.flush()
38
39 24d74687 Francois POIROTTE
    hostgroup.supitems.append(host)
40 64ed9170 Vincent QUEMENER
    DBSession.flush()
41
42
    event = Event(
43
        supitem=host,
44
        timestamp=timestamp,
45
        current_state=StateName.statename_to_value(u'WARNING'),
46
        message=u'Hello world',
47
    )
48
    DBSession.add(event)
49
    DBSession.flush()
50
51
    correvent = CorrEvent(
52
        priority=42,
53
        trouble_ticket=None,
54 8ba2de75 Francois POIROTTE
        ack=CorrEvent.ACK_NONE,
55 64ed9170 Vincent QUEMENER
        occurrence=42,
56
        timestamp_active=timestamp,
57
        cause=event,
58
    )
59
    correvent.events.append(event)
60
    DBSession.add(correvent)
61
    DBSession.flush()
62
    return hostgroup
63
64
class TestSearchFormHost(TestController):
65
    """Teste la récupération d'événements selon le nom d'hôte."""
66 60d02e7f Francois POIROTTE
    def setUp(self):
67
        super(TestSearchFormHost, self).setUp()
68
        perm = Permission.by_permission_name(u'vigiboard-access')
69
        user = User(
70
            user_name=u'user',
71
            fullname=u'',
72
            email=u'some.random@us.er',
73
        )
74 03059edd Francois POIROTTE
        usergroup = UserGroup(group_name=u'users')
75 60d02e7f Francois POIROTTE
        user.usergroups.append(usergroup)
76
        usergroup.permissions.append(perm)
77
        DBSession.add(user)
78
        DBSession.add(usergroup)
79
        DBSession.flush()
80 64ed9170 Vincent QUEMENER
81
    def test_search_host_when_allowed(self):
82
        """Teste la recherche par hôte avec les bons droits."""
83
        # On crée un hôte avec une alerte.
84
        # L'hôte est rattaché à un groupe d'hôtes
85
        # pour lesquel l'utilisateur a les permissions.
86
        hostgroup = insert_deps()
87 60d02e7f Francois POIROTTE
        usergroup = UserGroup.by_group_name(u'users')
88
        DBSession.add(DataPermission(
89
            group=hostgroup,
90
            usergroup=usergroup,
91
            access=u'r',
92
        ))
93 64ed9170 Vincent QUEMENER
        DBSession.flush()
94
        transaction.commit()
95
96
        # On envoie une requête avec recherche sur l'hôte créé,
97
        # on s'attend à recevoir 1 résultat.
98
        response = self.app.get('/?host=bar',
99 60d02e7f Francois POIROTTE
            extra_environ={'REMOTE_USER': 'user'})
100 64ed9170 Vincent QUEMENER
101
        # Il doit y avoir 1 seule ligne de résultats.
102
        rows = response.lxml.xpath('//table[@class="vigitable"]/tbody/tr')
103
        print "There are %d rows in the result set" % len(rows)
104
        assert_equal(len(rows), 1)
105
106
        # Il doit y avoir plusieurs colonnes dans la ligne de résultats.
107
        cols = response.lxml.xpath('//table[@class="vigitable"]/tbody/tr/td')
108
        print "There are %d columns in the result set" % len(cols)
109
        assert_true(len(cols) > 1)
110
111
    def test_search_inexistent_host(self):
112
        """Teste la recherche par hôte sur un hôte inexistant."""
113
        # On envoie une requête avec recherche sur un hôte
114
        # qui n'existe pas, on s'attend à n'obtenir aucun résultat.
115 60d02e7f Francois POIROTTE
        transaction.commit()
116 64ed9170 Vincent QUEMENER
        response = self.app.get('/?host=bad',
117 60d02e7f Francois POIROTTE
            extra_environ={'REMOTE_USER': 'user'})
118 64ed9170 Vincent QUEMENER
119
        # Il doit y avoir 1 seule ligne de résultats.
120
        rows = response.lxml.xpath('//table[@class="vigitable"]/tbody/tr')
121
        print "There are %d rows in the result set" % len(rows)
122
        assert_equal(len(rows), 1)
123
124
        # Il doit y avoir 1 seule colonne dans la ligne de résultats.
125
        # (la colonne contient le texte "Il n'y a aucun événément", traduit)
126
        cols = response.lxml.xpath('//table[@class="vigitable"]/tbody/tr/td')
127
        print "There are %d columns in the result set" % len(cols)
128
        assert_equal(len(cols), 1)
129
130
    def test_search_host_when_disallowed(self):
131
        """Teste la recherche par hôte SANS les droits."""
132
        # On NE DONNE PAS l'autorisation aux utilisateurs
133
        # de voir l'alerte, donc elle ne doit jamais apparaître.
134
        insert_deps()
135
        transaction.commit()
136
137
        # On envoie une requête avec recherche sur l'hôte créé,
138
        # mais avec un utilisateur ne disposant pas des permissions adéquates.
139
        # On s'attend à n'obtenir aucun résultat.
140
        response = self.app.get('/?host=bar',
141 60d02e7f Francois POIROTTE
            extra_environ={'REMOTE_USER': 'user'})
142 64ed9170 Vincent QUEMENER
143
        # Il doit y avoir 1 seule ligne de résultats.
144
        rows = response.lxml.xpath('//table[@class="vigitable"]/tbody/tr')
145
        print "There are %d rows in the result set" % len(rows)
146
        assert_equal(len(rows), 1)
147
148
        # Il doit y avoir 1 seule colonne dans la ligne de résultats.
149
        # (la colonne contient le texte "Il n'y a aucun événément", traduit)
150
        cols = response.lxml.xpath('//table[@class="vigitable"]/tbody/tr/td')
151
        print "There are %d columns in the result set" % len(cols)
152
        assert_equal(len(cols), 1)