Project

General

Profile

Statistics
| Branch: | Tag: | Revision:

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

History | View | Annotate | Download (5.25 KB)

1 64ed9170 Vincent QUEMENER
# -*- coding: utf-8 -*-
2 c25a3200 Francois POIROTTE
# Copyright (C) 2006-2020 CS GROUP – France
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 0dff1e21 Francois POIROTTE
from __future__ import print_function
9 64ed9170 Vincent QUEMENER
from nose.tools import assert_true, assert_equal
10
from datetime import datetime
11
import transaction
12
13
from vigiboard.tests import TestController
14 e7e3d45e Francois POIROTTE
from vigilo.models.session import DBSession
15 0bd9c069 Francois POIROTTE
from vigilo.models.tables import SupItemGroup, Host, Permission, \
16 60d02e7f Francois POIROTTE
                                    Event, CorrEvent, StateName, \
17
                                    User, UserGroup, DataPermission
18 64ed9170 Vincent QUEMENER
19
def insert_deps():
20
    """Insère les dépendances nécessaires aux tests."""
21 1c5486c7 Francois POIROTTE
    timestamp = datetime.utcnow()
22 64ed9170 Vincent QUEMENER
23 03059edd Francois POIROTTE
    hostgroup = SupItemGroup(name=u'foo', parent=None)
24 0bd9c069 Francois POIROTTE
    DBSession.add(hostgroup)
25
    DBSession.flush()
26 64ed9170 Vincent QUEMENER
27
    host = Host(
28
        name=u'bar',
29
        description=u'',
30
        hosttpl=u'',
31 0dcb87f7 Francois POIROTTE
        address=u'127.0.0.1',
32 64ed9170 Vincent QUEMENER
        snmpport=42,
33
        snmpcommunity=u'public',
34
        snmpversion=u'3',
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 7bde24ad Francois POIROTTE
        rows = self.get_rows(response)
103 0dff1e21 Francois POIROTTE
        print("There are %d rows in the result set" % len(rows))
104 64ed9170 Vincent QUEMENER
        assert_equal(len(rows), 1)
105
106
        # Il doit y avoir plusieurs colonnes dans la ligne de résultats.
107 7bde24ad Francois POIROTTE
        cols = self.get_cells(response)
108 0dff1e21 Francois POIROTTE
        print("There are %d columns in the result set" % len(cols))
109 64ed9170 Vincent QUEMENER
        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 7bde24ad Francois POIROTTE
        rows = self.get_rows(response)
121 0dff1e21 Francois POIROTTE
        print("There are %d rows in the result set" % len(rows))
122 64ed9170 Vincent QUEMENER
        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 7bde24ad Francois POIROTTE
        cols = self.get_cells(response)
127 0dff1e21 Francois POIROTTE
        print("There are %d columns in the result set" % len(cols))
128 64ed9170 Vincent QUEMENER
        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 7bde24ad Francois POIROTTE
        rows = self.get_rows(response)
145 0dff1e21 Francois POIROTTE
        print("There are %d rows in the result set" % len(rows))
146 64ed9170 Vincent QUEMENER
        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 7bde24ad Francois POIROTTE
        cols = self.get_cells(response)
151 0dff1e21 Francois POIROTTE
        print("There are %d columns in the result set" % len(cols))
152 64ed9170 Vincent QUEMENER
        assert_equal(len(cols), 1)