Project

General

Profile

Statistics
| Branch: | Tag: | Revision:

vigiboard / vigiboard / tests / functional / test_search_form_service.py @ 011743be

History | View | Annotate | Download (6.16 KB)

1 64ed9170 Vincent QUEMENER
# -*- coding: utf-8 -*-
2 011743be 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 de service.
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 9a05a743 Francois POIROTTE
from vigilo.models.demo import functions
16 8b2edebe Aurelien BOMPARD
from vigilo.models.tables import Permission, User, UserGroup, DataPermission
17
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 9a05a743 Francois POIROTTE
    hostgroup = functions.add_supitemgroup(u'foo')
24
    host = functions.add_host(u'bar')
25 24d74687 Francois POIROTTE
    hostgroup.supitems.append(host)
26 64ed9170 Vincent QUEMENER
    DBSession.flush()
27
28 9a05a743 Francois POIROTTE
    servicegroup = functions.add_supitemgroup(u'bar')
29
    service = functions.add_lowlevelservice(host, u'baz')
30 24d74687 Francois POIROTTE
    servicegroup.supitems.append(service)
31 64ed9170 Vincent QUEMENER
    DBSession.flush()
32
33 9a05a743 Francois POIROTTE
    event = functions.add_event(service, u'WARNING', u'Hello world', timestamp)
34 8b2edebe Aurelien BOMPARD
    functions.add_correvent([event], timestamp=timestamp)
35 64ed9170 Vincent QUEMENER
    return (hostgroup, servicegroup)
36
37 8b2edebe Aurelien BOMPARD
38 64ed9170 Vincent QUEMENER
class TestSearchFormService(TestController):
39
    """Teste la récupération d'événements selon le groupe de services."""
40 60d02e7f Francois POIROTTE
    def setUp(self):
41
        super(TestSearchFormService, self).setUp()
42
        perm = Permission.by_permission_name(u'vigiboard-access')
43
        user = User(
44
            user_name=u'user',
45
            fullname=u'',
46
            email=u'some.random@us.er',
47
        )
48 03059edd Francois POIROTTE
        usergroup = UserGroup(group_name=u'users')
49 60d02e7f Francois POIROTTE
        user.usergroups.append(usergroup)
50
        usergroup.permissions.append(perm)
51
        DBSession.add(user)
52
        DBSession.add(usergroup)
53
        DBSession.flush()
54 64ed9170 Vincent QUEMENER
55 24d74687 Francois POIROTTE
    def test_search_service_when_allowed_by_host(self):
56 64ed9170 Vincent QUEMENER
        """
57
        Teste la recherche par service avec des droits implicites
58
        (droits accordés car l'utilisateur a les droits sur l'hôte).
59
        """
60
        # On crée un service avec une alerte.
61
        # Le service est rattaché à un hôte appartenant
62
        # à un groupe d'hôtes pour lesquels l'utilisateur
63
        # a les permissions.
64
        hostgroup = insert_deps()[0]
65 60d02e7f Francois POIROTTE
        usergroup = UserGroup.by_group_name(u'users')
66
        DBSession.add(DataPermission(
67
            group=hostgroup,
68
            usergroup=usergroup,
69
            access=u'r',
70
        ))
71 64ed9170 Vincent QUEMENER
        DBSession.flush()
72
        transaction.commit()
73
74
        # On envoie une requête avec recherche sur le service créé,
75
        # on s'attend à recevoir 1 résultat.
76
        response = self.app.get('/?service=baz',
77 60d02e7f Francois POIROTTE
            extra_environ={'REMOTE_USER': 'user'})
78 64ed9170 Vincent QUEMENER
79
        # Il doit y avoir 1 seule ligne de résultats.
80 7bde24ad Francois POIROTTE
        rows = self.get_rows(response)
81 0dff1e21 Francois POIROTTE
        print("There are %d rows in the result set" % len(rows))
82 64ed9170 Vincent QUEMENER
        assert_equal(len(rows), 1)
83
84
        # Il doit y avoir plusieurs colonnes dans la ligne de résultats.
85 7bde24ad Francois POIROTTE
        cols = self.get_cells(response)
86 0dff1e21 Francois POIROTTE
        print("There are %d columns in the result set" % len(cols))
87 64ed9170 Vincent QUEMENER
        assert_true(len(cols) > 1)
88
89 24d74687 Francois POIROTTE
    def test_search_service_when_allowed_by_service(self):
90 64ed9170 Vincent QUEMENER
        """
91
        Teste la recherche par service avec des droits explicites
92
        (droits accordés car l'utilisateur a explicitement les droits
93
        sur ce service).
94
        """
95
        # On crée un service avec une alerte.
96
        # Le service est rattaché à un groupe de services
97
        # pour lesquel l'utilisateur a les permissions.
98
        servicegroup = insert_deps()[1]
99 60d02e7f Francois POIROTTE
        usergroup = UserGroup.by_group_name(u'users')
100
        DBSession.add(DataPermission(
101
            group=servicegroup,
102
            usergroup=usergroup,
103
            access=u'r',
104
        ))
105 64ed9170 Vincent QUEMENER
        DBSession.flush()
106
        transaction.commit()
107
108
        # On envoie une requête avec recherche sur le service créé,
109
        # on s'attend à recevoir 1 résultat.
110
        response = self.app.get('/?service=baz',
111 60d02e7f Francois POIROTTE
            extra_environ={'REMOTE_USER': 'user'})
112 64ed9170 Vincent QUEMENER
113
        # Il doit y avoir 1 seule ligne de résultats.
114 7bde24ad Francois POIROTTE
        rows = self.get_rows(response)
115 0dff1e21 Francois POIROTTE
        print("There are %d rows in the result set" % len(rows))
116 64ed9170 Vincent QUEMENER
        assert_equal(len(rows), 1)
117
118
        # Il doit y avoir plusieurs colonnes dans la ligne de résultats.
119 7bde24ad Francois POIROTTE
        cols = self.get_cells(response)
120 0dff1e21 Francois POIROTTE
        print("There are %d columns in the result set" % len(cols))
121 64ed9170 Vincent QUEMENER
        assert_true(len(cols) > 1)
122
123
    def test_search_inexistent_service(self):
124
        """Teste la recherche par service sur un service inexistant."""
125 60d02e7f Francois POIROTTE
        transaction.commit()
126 64ed9170 Vincent QUEMENER
        # On envoie une requête avec recherche sur un service
127
        # qui n'existe pas, on s'attend à n'obtenir aucun résultat.
128 4c08cd96 Francois POIROTTE
        response = self.app.get('/?service=bad',
129 60d02e7f Francois POIROTTE
            extra_environ={'REMOTE_USER': 'user'})
130 64ed9170 Vincent QUEMENER
131
        # Il doit y avoir 1 seule ligne de résultats.
132 7bde24ad Francois POIROTTE
        rows = self.get_rows(response)
133 0dff1e21 Francois POIROTTE
        print("There are %d rows in the result set" % len(rows))
134 64ed9170 Vincent QUEMENER
        assert_equal(len(rows), 1)
135
136
        # Il doit y avoir 1 seule colonne dans la ligne de résultats.
137
        # (la colonne contient le texte "Il n'y a aucun événément", traduit)
138 7bde24ad Francois POIROTTE
        cols = self.get_cells(response)
139 64ed9170 Vincent QUEMENER
        assert_equal(len(cols), 1)
140
141
    def test_search_service_when_disallowed(self):
142
        """Teste la recherche par service SANS les droits."""
143
        # On NE DONNE PAS l'autorisation aux utilisateurs
144
        # de voir l'alerte, donc elle ne doit jamais apparaître.
145
        insert_deps()
146
        transaction.commit()
147
148
        # On envoie une requête avec recherche sur le service créé,
149
        # mais avec un utilisateur ne disposant pas des permissions adéquates.
150
        # On s'attend à n'obtenir aucun résultat.
151 4c08cd96 Francois POIROTTE
        response = self.app.get('/?service=baz',
152 60d02e7f Francois POIROTTE
            extra_environ={'REMOTE_USER': 'user'})
153 64ed9170 Vincent QUEMENER
154
        # Il doit y avoir 1 seule ligne de résultats.
155 7bde24ad Francois POIROTTE
        rows = self.get_rows(response)
156 0dff1e21 Francois POIROTTE
        print("There are %d rows in the result set" % len(rows))
157 64ed9170 Vincent QUEMENER
        assert_equal(len(rows), 1)
158
159
        # Il doit y avoir 1 seule colonne dans la ligne de résultats.
160
        # (la colonne contient le texte "Il n'y a aucun événément", traduit)
161 7bde24ad Francois POIROTTE
        cols = self.get_cells(response)
162 0dff1e21 Francois POIROTTE
        print("There are %d columns in the result set" % len(cols))
163 64ed9170 Vincent QUEMENER
        assert_equal(len(cols), 1)