Project

General

Profile

Statistics
| Branch: | Tag: | Revision:

vigiboard / vigiboard / tests / functional / test_search_form_hostgroup.py @ fcef64e8

History | View | Annotate | Download (5.1 KB)

1
# -*- coding: utf-8 -*-
2
"""
3
Teste le formulaire de recherche avec un groupe d'hôtes.
4
"""
5
from nose.tools import assert_true, assert_equal
6
from datetime import datetime
7
import transaction
8

    
9
from vigiboard.tests import TestController
10
from vigilo.models.configure import DBSession
11
from vigilo.models import HostGroup, Host, Permission, \
12
                        Event, CorrEvent, StateName
13

    
14
def insert_deps():
15
    """Insère les dépendances nécessaires aux tests."""
16
    timestamp = datetime.now()
17

    
18
    hostgroup = HostGroup(
19
        name=u'foo',
20
    )
21
    DBSession.add(hostgroup)
22
    DBSession.flush()
23

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

    
38
    hostgroup.hosts.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
        impact=42,
52
        priority=42,
53
        trouble_ticket=None,
54
        status=u'None',
55
        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 TestSearchFormHostGroup(TestController):
65
    """Teste la récupération d'événements selon le groupe d'hôtes."""
66

    
67
    def test_search_hostgroup_when_allowed(self):
68
        """Teste la recherche par hostgroup avec les bons droits d'accès."""
69
        # On crée un groupe d'hôte appelé 'foo',
70
        # contenant un hôte 'bar', ainsi qu'un événement
71
        # et un événement corrélé sur cet hôte.
72
        # De plus, on donne l'autorisation aux utilisateurs
73
        # ayant la permission 'manage' de voir cette alerte.
74
        hostgroup = insert_deps()
75
        manage = Permission.by_permission_name(u'manage')
76
        manage.hostgroups.append(hostgroup)
77
        DBSession.flush()
78
        transaction.commit()
79

    
80
        # On envoie une requête avec recherche sur le groupe d'hôtes créé,
81
        # on s'attend à recevoir 1 résultat.
82
        response = self.app.get('/?hostgroup=foo',
83
            extra_environ={'REMOTE_USER': 'manager'})
84

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

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

    
95
    def test_search_inexistent_hostgroup(self):
96
        """Teste la recherche par hostgroup sur un groupe inexistant."""
97
        # On envoie une requête avec recherche sur un groupe d'hôtes
98
        # qui n'existe pas, on s'attend à n'obtenir aucun résultat.
99
        response = self.app.get('/?hostgroup=foot',
100
            extra_environ={'REMOTE_USER': 'manager'})
101

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

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

    
113
    def test_search_hostgroup_when_disallowed(self):
114
        """Teste la recherche par hostgroup SANS les droits d'accès."""
115
        # On crée un groupe d'hôte appelé 'foo',
116
        # contenant un hôte 'bar', ainsi qu'un événement
117
        # et un événement corrélé sur cet hôte.
118
        # MAIS, on NE DONNE PAS l'autorisation aux utilisateurs
119
        # de voir cette alerte, donc elle ne doit jamais apparaître.
120
        insert_deps()
121
        transaction.commit()
122

    
123
        # On envoie une requête avec recherche sur le groupe d'hôtes créé,
124
        # mais avec un utilisateur ne disposant pas des permissions adéquates.
125
        # On s'attend à n'obtenir aucun résultat.
126
        response = self.app.get('/?hostgroup=foo',
127
            extra_environ={'REMOTE_USER': 'manager'})
128

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

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