Project

General

Profile

Statistics
| Branch: | Tag: | Revision:

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

History | View | Annotate | Download (5.16 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 divers champs.
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
    host = Host(
23
        name=u'bar',
24
        description=u'',
25
        hosttpl=u'',
26
        address=u'127.0.0.1',
27
        snmpport=42,
28
        snmpcommunity=u'public',
29
        snmpversion=u'3',
30
    )
31
    DBSession.add(host)
32
    DBSession.flush()
33

    
34
    hostgroup = SupItemGroup(name=u'foo', parent=None)
35
    hostgroup.supitems.append(host)
36
    DBSession.add(hostgroup)
37
    DBSession.flush()
38

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

    
48
    correvent = CorrEvent(
49
        priority=42,
50
        trouble_ticket=u'FOO BAR BAZ éçà',
51
        ack=CorrEvent.ACK_NONE,
52
        occurrence=42,
53
        timestamp_active=timestamp,
54
        cause=event,
55
    )
56
    correvent.events.append(event)
57
    DBSession.add(correvent)
58
    DBSession.flush()
59

    
60
    # On donne l'accès aux données.
61
    usergroup = UserGroup.by_group_name(u'users')
62
    DBSession.add(DataPermission(
63
        group=hostgroup,
64
        usergroup=usergroup,
65
        access=u'r',
66
    ))
67
    DBSession.flush()
68
    return timestamp
69

    
70

    
71
class TestSearchFormMisc(TestController):
72
    """Teste la récupération d'événements selon le nom d'hôte."""
73
    def setUp(self):
74
        super(TestSearchFormMisc, self).setUp()
75
        perm = Permission.by_permission_name(u'vigiboard-access')
76
        user = User(
77
            user_name=u'user',
78
            fullname=u'',
79
            email=u'some.random@us.er',
80
        )
81
        usergroup = UserGroup(group_name=u'users')
82
        user.usergroups.append(usergroup)
83
        usergroup.permissions.append(perm)
84
        DBSession.add(user)
85
        DBSession.add(usergroup)
86
        DBSession.flush()
87

    
88
    def test_search_by_output(self):
89
        """Teste la recherche sur le message issu de Nagios."""
90
        insert_deps()
91
        transaction.commit()
92

    
93
        # Permet également de vérifier que la recherche est
94
        # insensible à la casse.
95
        response = self.app.get('/?output=hello*',
96
            extra_environ={'REMOTE_USER': 'user'})
97

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

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

    
108
    def test_search_by_trouble_ticket(self):
109
        """Teste la recherche sur le ticket d'incident."""
110
        insert_deps()
111
        transaction.commit()
112

    
113
        # Permet également de vérifier que la recherche est
114
        # insensible à la casse.
115
        response = self.app.get('/?trouble_ticket=*bar*',
116
            extra_environ={'REMOTE_USER': 'user'})
117
        transaction.commit()
118

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

    
124
        # Il doit y avoir plusieurs colonnes dans la ligne de résultats.
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_true(len(cols) > 1)
128

    
129
    def test_search_by_dates(self):
130
        """Teste la recherche par dates."""
131
        timestamp = insert_deps()
132
        transaction.commit()
133

    
134
        # Préparation des dates/heures.
135
        from_date = timestamp.strftime("%Y-%m-%d %I:%M:%S %p")
136
        to_date = datetime.max.strftime("%Y-%m-%d %I:%M:%S %p")
137

    
138
        # Permet également de vérifier que la recherche
139
        # par date est inclusive.
140
        response = self.app.get(
141
            '/?from_date=%(from_date)s&to_date=%(to_date)s' % {
142
                'from_date': from_date,
143
                'to_date': to_date,
144
            },
145
            extra_environ={'REMOTE_USER': 'user'})
146

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

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