Project

General

Profile

Statistics
| Branch: | Tag: | Revision:

vigiboard / vigiboard / tests / functional / test_search_form_host.py @ de7d5c68

History | View | Annotate | Download (5.41 KB)

1
# -*- coding: utf-8 -*-
2
# Copyright (C) 2006-2014 CS-SI
3
# License: GNU GPL v2 <http://www.gnu.org/licenses/gpl-2.0.html>
4

    
5
"""
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
from vigilo.models.session import DBSession
14
from vigilo.models.tables import SupItemGroup, Host, Permission, \
15
                                    Event, CorrEvent, StateName, \
16
                                    User, UserGroup, DataPermission
17

    
18
def insert_deps():
19
    """Insère les dépendances nécessaires aux tests."""
20
    timestamp = datetime.now()
21

    
22
    hostgroup = SupItemGroup(name=u'foo', parent=None)
23
    DBSession.add(hostgroup)
24
    DBSession.flush()
25

    
26
    host = Host(
27
        name=u'bar',
28
        description=u'',
29
        hosttpl=u'',
30
        address=u'127.0.0.1',
31
        snmpport=42,
32
        snmpcommunity=u'public',
33
        snmpversion=u'3',
34
    )
35
    DBSession.add(host)
36
    DBSession.flush()
37

    
38
    hostgroup.supitems.append(host)
39
    DBSession.flush()
40

    
41
    event = Event(
42
        supitem=host,
43
        timestamp=timestamp,
44
        current_state=StateName.statename_to_value(u'WARNING'),
45
        message=u'Hello world',
46
    )
47
    DBSession.add(event)
48
    DBSession.flush()
49

    
50
    correvent = CorrEvent(
51
        priority=42,
52
        trouble_ticket=None,
53
        ack=CorrEvent.ACK_NONE,
54
        occurrence=42,
55
        timestamp_active=timestamp,
56
        cause=event,
57
    )
58
    correvent.events.append(event)
59
    DBSession.add(correvent)
60
    DBSession.flush()
61
    return hostgroup
62

    
63
class TestSearchFormHost(TestController):
64
    """Teste la récupération d'événements selon le nom d'hôte."""
65
    def setUp(self):
66
        super(TestSearchFormHost, self).setUp()
67
        perm = Permission.by_permission_name(u'vigiboard-access')
68
        user = User(
69
            user_name=u'user',
70
            fullname=u'',
71
            email=u'some.random@us.er',
72
        )
73
        usergroup = UserGroup(group_name=u'users')
74
        user.usergroups.append(usergroup)
75
        usergroup.permissions.append(perm)
76
        DBSession.add(user)
77
        DBSession.add(usergroup)
78
        DBSession.flush()
79

    
80
    def test_search_host_when_allowed(self):
81
        """Teste la recherche par hôte avec les bons droits."""
82
        # On crée un hôte avec une alerte.
83
        # L'hôte est rattaché à un groupe d'hôtes
84
        # pour lesquel l'utilisateur a les permissions.
85
        hostgroup = insert_deps()
86
        usergroup = UserGroup.by_group_name(u'users')
87
        DBSession.add(DataPermission(
88
            group=hostgroup,
89
            usergroup=usergroup,
90
            access=u'r',
91
        ))
92
        DBSession.flush()
93
        transaction.commit()
94

    
95
        # On envoie une requête avec recherche sur l'hôte créé,
96
        # on s'attend à recevoir 1 résultat.
97
        response = self.app.get('/?host=bar',
98
            extra_environ={'REMOTE_USER': 'user'})
99

    
100
        # Il doit y avoir 1 seule ligne de résultats.
101
        rows = response.lxml.xpath('//table[@class="vigitable"]/tbody/tr')
102
        print "There are %d rows in the result set" % len(rows)
103
        assert_equal(len(rows), 1)
104

    
105
        # Il doit y avoir plusieurs colonnes dans la ligne de résultats.
106
        cols = response.lxml.xpath('//table[@class="vigitable"]/tbody/tr/td')
107
        print "There are %d columns in the result set" % len(cols)
108
        assert_true(len(cols) > 1)
109

    
110
    def test_search_inexistent_host(self):
111
        """Teste la recherche par hôte sur un hôte inexistant."""
112
        # On envoie une requête avec recherche sur un hôte
113
        # qui n'existe pas, on s'attend à n'obtenir aucun résultat.
114
        transaction.commit()
115
        response = self.app.get('/?host=bad',
116
            extra_environ={'REMOTE_USER': 'user'})
117

    
118
        # Il doit y avoir 1 seule ligne de résultats.
119
        rows = response.lxml.xpath('//table[@class="vigitable"]/tbody/tr')
120
        print "There are %d rows in the result set" % len(rows)
121
        assert_equal(len(rows), 1)
122

    
123
        # Il doit y avoir 1 seule colonne dans la ligne de résultats.
124
        # (la colonne contient le texte "Il n'y a aucun événément", traduit)
125
        cols = response.lxml.xpath('//table[@class="vigitable"]/tbody/tr/td')
126
        print "There are %d columns in the result set" % len(cols)
127
        assert_equal(len(cols), 1)
128

    
129
    def test_search_host_when_disallowed(self):
130
        """Teste la recherche par hôte SANS les droits."""
131
        # On NE DONNE PAS l'autorisation aux utilisateurs
132
        # de voir l'alerte, donc elle ne doit jamais apparaître.
133
        insert_deps()
134
        transaction.commit()
135

    
136
        # On envoie une requête avec recherche sur l'hôte créé,
137
        # mais avec un utilisateur ne disposant pas des permissions adéquates.
138
        # On s'attend à n'obtenir aucun résultat.
139
        response = self.app.get('/?host=bar',
140
            extra_environ={'REMOTE_USER': 'user'})
141

    
142
        # Il doit y avoir 1 seule ligne de résultats.
143
        rows = response.lxml.xpath('//table[@class="vigitable"]/tbody/tr')
144
        print "There are %d rows in the result set" % len(rows)
145
        assert_equal(len(rows), 1)
146

    
147
        # Il doit y avoir 1 seule colonne dans la ligne de résultats.
148
        # (la colonne contient le texte "Il n'y a aucun événément", traduit)
149
        cols = response.lxml.xpath('//table[@class="vigitable"]/tbody/tr/td')
150
        print "There are %d columns in the result set" % len(cols)
151
        assert_equal(len(cols), 1)