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
# -*- coding: utf-8 -*-
2
# Copyright (C) 2006-2020 CS GROUP - France
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 de service.
7
"""
8
from __future__ import print_function
9
from nose.tools import assert_true, assert_equal
10
from datetime import datetime
11
import transaction
12

    
13
from vigiboard.tests import TestController
14
from vigilo.models.session import DBSession
15
from vigilo.models.demo import functions
16
from vigilo.models.tables import Permission, User, UserGroup, DataPermission
17

    
18

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

    
23
    hostgroup = functions.add_supitemgroup(u'foo')
24
    host = functions.add_host(u'bar')
25
    hostgroup.supitems.append(host)
26
    DBSession.flush()
27

    
28
    servicegroup = functions.add_supitemgroup(u'bar')
29
    service = functions.add_lowlevelservice(host, u'baz')
30
    servicegroup.supitems.append(service)
31
    DBSession.flush()
32

    
33
    event = functions.add_event(service, u'WARNING', u'Hello world', timestamp)
34
    functions.add_correvent([event], timestamp=timestamp)
35
    return (hostgroup, servicegroup)
36

    
37

    
38
class TestSearchFormService(TestController):
39
    """Teste la récupération d'événements selon le groupe de services."""
40
    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
        usergroup = UserGroup(group_name=u'users')
49
        user.usergroups.append(usergroup)
50
        usergroup.permissions.append(perm)
51
        DBSession.add(user)
52
        DBSession.add(usergroup)
53
        DBSession.flush()
54

    
55
    def test_search_service_when_allowed_by_host(self):
56
        """
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
        usergroup = UserGroup.by_group_name(u'users')
66
        DBSession.add(DataPermission(
67
            group=hostgroup,
68
            usergroup=usergroup,
69
            access=u'r',
70
        ))
71
        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
            extra_environ={'REMOTE_USER': 'user'})
78

    
79
        # Il doit y avoir 1 seule ligne de résultats.
80
        rows = self.get_rows(response)
81
        print("There are %d rows in the result set" % len(rows))
82
        assert_equal(len(rows), 1)
83

    
84
        # Il doit y avoir plusieurs colonnes dans la ligne de résultats.
85
        cols = self.get_cells(response)
86
        print("There are %d columns in the result set" % len(cols))
87
        assert_true(len(cols) > 1)
88

    
89
    def test_search_service_when_allowed_by_service(self):
90
        """
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
        usergroup = UserGroup.by_group_name(u'users')
100
        DBSession.add(DataPermission(
101
            group=servicegroup,
102
            usergroup=usergroup,
103
            access=u'r',
104
        ))
105
        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
            extra_environ={'REMOTE_USER': 'user'})
112

    
113
        # Il doit y avoir 1 seule ligne de résultats.
114
        rows = self.get_rows(response)
115
        print("There are %d rows in the result set" % len(rows))
116
        assert_equal(len(rows), 1)
117

    
118
        # Il doit y avoir plusieurs colonnes dans la ligne de résultats.
119
        cols = self.get_cells(response)
120
        print("There are %d columns in the result set" % len(cols))
121
        assert_true(len(cols) > 1)
122

    
123
    def test_search_inexistent_service(self):
124
        """Teste la recherche par service sur un service inexistant."""
125
        transaction.commit()
126
        # On envoie une requête avec recherche sur un service
127
        # qui n'existe pas, on s'attend à n'obtenir aucun résultat.
128
        response = self.app.get('/?service=bad',
129
            extra_environ={'REMOTE_USER': 'user'})
130

    
131
        # Il doit y avoir 1 seule ligne de résultats.
132
        rows = self.get_rows(response)
133
        print("There are %d rows in the result set" % len(rows))
134
        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
        cols = self.get_cells(response)
139
        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
        response = self.app.get('/?service=baz',
152
            extra_environ={'REMOTE_USER': 'user'})
153

    
154
        # Il doit y avoir 1 seule ligne de résultats.
155
        rows = self.get_rows(response)
156
        print("There are %d rows in the result set" % len(rows))
157
        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
        cols = self.get_cells(response)
162
        print("There are %d columns in the result set" % len(cols))
163
        assert_equal(len(cols), 1)