Project

General

Profile

Revision 1e30ffbb

ID1e30ffbb804a9eaf6e2fa1afb32a2321c4ea7ba8
Parent 86662bc9
Child 8a438b31

Added by Vincent QUEMENER about 13 years ago

Ajout/modification de tests unitaires portant sur l'affichage de la page principale de VigiBoard ainsi que sur la fonction de recherche des groupes de supitems.

git-svn-id: https://vigilo-dev.si.c-s.fr/svn@6702 b22e2e97-25c9-44ff-b637-2e5ceca36478

View differences:

vigiboard/tests/functional/test_correvents_table.py
14 14
                            LowLevelService, User, UserGroup, Permission
15 15
from vigiboard.tests import TestController
16 16

  
17
def populate_DB():
18
    """ Peuple la base de données. """
19
    # On ajoute les groupes et leurs dépendances
20
    hostmanagers = SupItemGroup(name=u'managersgroup', parent=None)
21
    DBSession.add(hostmanagers)
22
    hosteditors = SupItemGroup(name=u'editorsgroup', parent=hostmanagers)
23
    DBSession.add(hosteditors)
24
    DBSession.flush()
25

  
26
    usergroup = UserGroup.by_group_name(u'users_with_access')
27
    DBSession.add(DataPermission(
28
        group=hostmanagers,
29
        usergroup=usergroup,
30
        access=u'r',
31
    ))
32
    DBSession.add(DataPermission(
33
        group=hosteditors,
34
        usergroup=usergroup,
35
        access=u'r',
36
    ))
37

  
38
    usergroup = UserGroup.by_group_name(u'users_with_limited_access')
39
    DBSession.add(DataPermission(
40
        group=hosteditors,
41
        usergroup=usergroup,
42
        access=u'r',
43
    ))
44
    DBSession.flush()
45

  
46
    # Création des hôtes de test.
47
    host_template = {
48
        'checkhostcmd': u'halt',
49
        'snmpcommunity': u'public',
50
        'hosttpl': u'/dev/null',
51
        'address': u'192.168.1.1',
52
        'snmpport': 42,
53
        'weight': 42,
54
    }
55

  
56
    managerhost = Host(name=u'managerhost', **host_template)
57
    editorhost = Host(name=u'editorhost', **host_template)
58
    DBSession.add(managerhost)
59
    DBSession.add(editorhost)
60

  
61
    # Affectation des hôtes aux groupes.
62
    hosteditors.supitems.append(editorhost)
63
    hostmanagers.supitems.append(managerhost)
64
    DBSession.flush()
65

  
66
    # Création des services techniques de test.
67
    service_template = {
68
        'command': u'halt',
69
        'weight': 42,
70
    }
71

  
72
    service1 = LowLevelService(
73
        host=managerhost,
74
        servicename=u'managerservice',
75
        **service_template
76
    )
77

  
78
    service2 = LowLevelService(
79
        host=editorhost,
80
        servicename=u'managerservice',
81
        **service_template
82
    )
83

  
84
    service3 = LowLevelService(
85
        host=managerhost,
86
        servicename=u'editorservice',
87
        **service_template
88
    )
89

  
90
    service4 = LowLevelService(
91
        host=editorhost,
92
        servicename=u'editorservice',
93
        **service_template
94
    )
95

  
96
    DBSession.add(service1)
97
    DBSession.add(service2)
98
    DBSession.add(service3)
99
    DBSession.add(service4)
100
    DBSession.flush()
101

  
102
    # Ajout des événements eux-mêmes
103
    event_template = {
104
        'message': u'foo',
105
        'current_state': StateName.statename_to_value(u'WARNING'),
106
        'timestamp': datetime.now(),
107
    }
108

  
109
    event1 = Event(supitem=service1, **event_template)
110
    event2 = Event(supitem=service2, **event_template)
111
    event3 = Event(supitem=service3, **event_template)
112
    event4 = Event(supitem=service4, **event_template)
113
    event5 = Event(supitem=editorhost, **event_template)
114
    event6 = Event(supitem=managerhost, **event_template)
115

  
116
    DBSession.add(event1)
117
    DBSession.add(event2)
118
    DBSession.add(event3)
119
    DBSession.add(event4)
120
    DBSession.add(event5)
121
    DBSession.add(event6)
122
    DBSession.flush()
123

  
124
    # Ajout des événements corrélés
125
    aggregate_template = {
126
        'timestamp_active': datetime.now(),
127
        'priority': 1,
128
        'status': u'None',
129
    }
130

  
131
    aggregate1 = CorrEvent(
132
        idcause=event1.idevent, **aggregate_template)
133
    aggregate2 = CorrEvent(
134
        idcause=event4.idevent, **aggregate_template)
135
    aggregate3 = CorrEvent(
136
        idcause=event5.idevent, **aggregate_template)
137
    aggregate4 = CorrEvent(
138
        idcause=event6.idevent, **aggregate_template)
139

  
140
    aggregate1.events.append(event1)
141
    aggregate1.events.append(event3)
142
    aggregate2.events.append(event4)
143
    aggregate2.events.append(event2)
144
    aggregate3.events.append(event5)
145
    aggregate4.events.append(event6)
146
    DBSession.add(aggregate1)
147
    DBSession.add(aggregate2)
148
    DBSession.add(aggregate3)
149
    DBSession.add(aggregate4)
150

  
151
    DBSession.flush()
152
    transaction.commit()
17
from utils import populate_DB
153 18

  
154 19
class TestEventTable(TestController):
155 20
    """
......
157 22
    """
158 23
    def setUp(self):
159 24
        super(TestEventTable, self).setUp()
160
        perm = Permission.by_permission_name(u'vigiboard-access')
161

  
162
        user = User(
163
            user_name=u'access',
164
            fullname=u'',
165
            email=u'user.has@access',
166
        )
167
        usergroup = UserGroup(group_name=u'users_with_access')
168
        usergroup.permissions.append(perm)
169
        user.usergroups.append(usergroup)
170
        DBSession.add(user)
171
        DBSession.add(usergroup)
172
        DBSession.flush()
173

  
174
        user = User(
175
            user_name=u'limited_access',
176
            fullname=u'',
177
            email=u'user.has.no@access',
178
        )
179
        usergroup = UserGroup(group_name=u'users_with_limited_access')
180
        usergroup.permissions.append(perm)
181
        user.usergroups.append(usergroup)
182
        DBSession.add(user)
183
        DBSession.add(usergroup)
184
        DBSession.flush()
185

  
186 25
        populate_DB()
187 26

  
188

  
189 27
    def test_homepage(self):
190 28
        """
191 29
        Tableau des événements (page d'accueil).
......
211 49
        environ = {'REMOTE_USER': 'access'}
212 50
        response = self.app.get('/', extra_environ=environ)
213 51

  
214
        # Il doit y avoir 4 lignes de résultats.
52
        # Il doit y avoir 5 lignes de résultats.
53
        rows = response.lxml.xpath('//table[@class="vigitable"]/tbody/tr')
54
        print "There are %d rows in the result set" % len(rows)
55
        assert_equal(len(rows), 5)
56

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

  
62
        # L'utilisateur fait partie du groupe 'managers'
63
        environ = {'REMOTE_USER': 'manager'}
64
        response = self.app.get('/', extra_environ=environ)
65

  
66
        # Il doit y avoir 5 lignes de résultats.
215 67
        rows = response.lxml.xpath('//table[@class="vigitable"]/tbody/tr')
216 68
        print "There are %d rows in the result set" % len(rows)
217
        assert_equal(len(rows), 4)
69
        assert_equal(len(rows), 5)
218 70

  
219 71
        # Il doit y avoir plusieurs colonnes dans la ligne de résultats.
220 72
        cols = response.lxml.xpath('//table[@class="vigitable"]/tbody/tr/td')
......
225 77
        """
226 78
        Tableau des événements corrélés pour un service de bas niveau.
227 79
        """
228
        url = '/item/1/%s/%s' % ('managerhost', 'managerservice')
80
        url = '/item/1/%s/%s' % ('group2_host', 'group2_service')
229 81

  
230 82
        # L'utilisateur n'est pas authentifié.
231 83
        response = self.app.get(url, status=401)
......
250 102
        print "There are %d rows in the result set" % len(rows)
251 103
        assert_equal(len(rows), 1)
252 104

  
105
        # L'utilisateur fait partie du groupe 'managers'
106
        # Il doit avoir accès à l'historique.
107
        # Ici, il n'y a qu'un seul événement corrélé pour ce service.
108
        environ = {'REMOTE_USER': 'manager'}
109
        response = self.app.get(url, extra_environ=environ, status=200)
110

  
111
        # Il doit y avoir 1 ligne de résultats.
112
        rows = response.lxml.xpath('//table[@class="vigitable"]/tbody/tr')
113
        print "There are %d rows in the result set" % len(rows)
114
        assert_equal(len(rows), 1)
115

  
253 116
    def test_correvents_table_for_host(self):
254 117
        """
255 118
        Tableau des événements corrélés pour un hôte.
256 119
        """
257
        url = '/item/1/%s/' % ('managerhost', )
120
        url = '/item/1/%s/' % ('group2_host', )
258 121

  
259 122
        # L'utilisateur n'est pas authentifié.
260 123
        response = self.app.get(url, status=401)
......
278 141
        rows = response.lxml.xpath('//table[@class="vigitable"]/tbody/tr')
279 142
        print "There are %d rows in the result set" % len(rows)
280 143
        assert_equal(len(rows), 1)
144

  
145
        # L'utilisateur fait partie du groupe 'managers'.
146
        # Il doit avoir accès à l'historique.
147
        # Ici, il n'y a qu'un seul événement corrélé pour ce service.
148
        environ = {'REMOTE_USER': 'manager'}
149
        response = self.app.get(url, extra_environ=environ, status=200)
150

  
151
        # Il doit y avoir 1 ligne de résultats.
152
        rows = response.lxml.xpath('//table[@class="vigitable"]/tbody/tr')
153
        print "There are %d rows in the result set" % len(rows)
154
        assert_equal(len(rows), 1)
vigiboard/tests/functional/test_search_form_supitemgroup.py
12 12
                                    Event, CorrEvent, User, UserGroup, \
13 13
                                    DataPermission
14 14

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

  
19
    supitemgroup = SupItemGroup(name=u'foo', parent=None)
20
    DBSession.add(supitemgroup)
21
    DBSession.flush()
22

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

  
37
    supitemgroup.supitems.append(host)
38
    DBSession.flush()
39

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

  
49
    correvent = CorrEvent(
50
        impact=42,
51
        priority=42,
52
        trouble_ticket=None,
53
        status=u'None',
54
        occurrence=42,
55
        timestamp_active=timestamp,
56
        cause=event,
57
    )
58
    correvent.events.append(event)
59
    DBSession.add(correvent)
60
    DBSession.flush()
61
    return supitemgroup
15
from utils import populate_DB
62 16

  
63 17
class TestSearchFormSupItemGroup(TestController):
64 18
    """Teste la récupération d'événements selon le supitemgroup."""
65 19
    def setUp(self):
66 20
        super(TestSearchFormSupItemGroup, self).setUp()
67
        perm = Permission.by_permission_name(u'vigiboard-access')
68
        user = User(
69
            user_name=u'user',
70
            fullname=u'',
71
            email=u'some.random@us.er',
72
        )
73
        usergroup = UserGroup(group_name=u'users')
74
        user.usergroups.append(usergroup)
75
        usergroup.permissions.append(perm)
76
        DBSession.add(user)
77
        DBSession.add(usergroup)
78
        DBSession.flush()
21
        populate_DB()
79 22

  
80 23
    def test_search_supitemgroup_when_allowed(self):
81 24
        """Teste la recherche par supitemgroup avec les bons droits d'accès."""
82
        # On crée un groupe d'hôte appelé 'foo',
83
        # contenant un hôte 'bar', ainsi qu'un événement
84
        # et un événement corrélé sur cet hôte.
85
        # De plus, on donne l'autorisation aux utilisateurs
86
        # ayant la permission 'edit' de voir cette alerte.
87
        supitemgroup = insert_deps()
88
        idgroup = supitemgroup.idgroup
89
        usergroup = UserGroup.by_group_name(u'users')
90
        DBSession.add(DataPermission(
91
            group=supitemgroup,
92
            usergroup=usergroup,
93
            access=u'r',
94
        ))
95
        DBSession.flush()
96
        transaction.commit()
97

  
98
        # On envoie une requête avec recherche sur le groupe d'hôtes créé,
99
        # on s'attend à recevoir 1 résultat.
100
        response = self.app.get('/?supitemgroup=%d' % idgroup,
101
            extra_environ={'REMOTE_USER': 'user'})
102 25

  
103
        # Il doit y avoir 1 seule ligne de résultats.
26
        # On récupère les 2 groupes de supitems utilisés lors de ces tests.
27
        maingroup = SupItemGroup.by_group_name('maingroup')
28
        group1 = SupItemGroup.by_group_name('group1')
29

  
30
        # L'utilisateur est authentifié avec des permissions réduites.
31
        # Il effectue une recherche sur un groupe de supitems auquel
32
        # il a accès, on s'attend à ce que la requête retourne 2 résultats.
33
        environ = {'REMOTE_USER': 'limited_access'}
34
        response = self.app.get(
35
            '/?supitemgroup=%d' % group1.idgroup,
36
            extra_environ=environ
37
        )
38

  
39
        # Il doit y avoir 2 lignes dans la réponse.
104 40
        rows = response.lxml.xpath('//table[@class="vigitable"]/tbody/tr')
105 41
        print "There are %d rows in the result set" % len(rows)
106
        assert_equal(len(rows), 1)
42
        assert_equal(len(rows), 2)
107 43

  
108
        # Il doit y avoir plusieurs colonnes dans la ligne de résultats.
44
        # Il doit y avoir plusieurs colonnes dans la réponse.
109 45
        cols = response.lxml.xpath('//table[@class="vigitable"]/tbody/tr/td')
110 46
        print "There are %d columns in the result set" % len(cols)
111 47
        assert_true(len(cols) > 1)
112 48

  
113
        # Mêmes tests avec un utilisateur membre du groupe 'managers'
114
        response = self.app.get('/?supitemgroup=%d' % idgroup,
115
            extra_environ={'REMOTE_USER': 'manager'})
49
        # Le même utilisateur effectue une recherche sur un groupe de supitems
50
        # auquel il n'a pas accès, mais qui est parent du groupe précédent.
51
        # On s'attend donc à ce que la requête retourne également 2 résultats.
52
        environ = {'REMOTE_USER': 'limited_access'}
53
        response = self.app.get(
54
            '/?supitemgroup=%d' % maingroup.idgroup,
55
            extra_environ=environ
56
        )
57

  
58
        # Il doit y avoir 2 lignes dans la réponse.
116 59
        rows = response.lxml.xpath('//table[@class="vigitable"]/tbody/tr')
117 60
        print "There are %d rows in the result set" % len(rows)
118
        assert_equal(len(rows), 1)
61
        assert_equal(len(rows), 2)
62

  
63
        # Il doit y avoir plusieurs colonnes dans la réponse.
64
        cols = response.lxml.xpath('//table[@class="vigitable"]/tbody/tr/td')
65
        print "There are %d columns in the result set" % len(cols)
66
        assert_true(len(cols) > 1)
67

  
68
        # L'utilisateur est authentifié avec des permissions plus étendues.
69
        # Il effectue une recherche sur un groupe de supitems auquel
70
        # il a accès, on s'attend à ce que la requête retourne 5 résultats,
71
        # dont 4 grâce à l'héritage de permissions entre les groupes.
72
        environ = {'REMOTE_USER': 'access'}
73
        response = self.app.get(
74
            '/?supitemgroup=%d' % maingroup.idgroup,
75
            extra_environ=environ
76
        )
77

  
78
        # Il doit y avoir 5 lignes dans la réponse.
79
        rows = response.lxml.xpath('//table[@class="vigitable"]/tbody/tr')
80
        print "There are %d rows in the result set" % len(rows)
81
        assert_equal(len(rows), 5)
82

  
83
        # Il doit y avoir plusieurs colonnes dans la réponse.
84
        cols = response.lxml.xpath('//table[@class="vigitable"]/tbody/tr/td')
85
        print "There are %d columns in the result set" % len(cols)
86
        assert_true(len(cols) > 1)
87

  
88
        # L'utilisateur est authentifié et fait partie du groupe
89
        # 'managers'. Il effectue une recherche sur un groupe de supitems, 
90
        # et on s'attend à ce que la requête retourne 5 résultats.
91
        environ = {'REMOTE_USER': 'access'}
92
        response = self.app.get(
93
            '/?supitemgroup=%d' % maingroup.idgroup,
94
            extra_environ=environ
95
        )
96

  
97
        # Il doit y avoir 5 lignes dans la réponse.
98
        rows = response.lxml.xpath('//table[@class="vigitable"]/tbody/tr')
99
        print "There are %d rows in the result set" % len(rows)
100
        assert_equal(len(rows), 5)
101

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

  
123 107
    def test_search_inexistent_supitemgroup(self):
124 108
        """Teste la recherche par supitemgroup sur un groupe inexistant."""
125
        # On envoie une requête avec recherche sur un groupe d'hôtes
126
        # qui n'existe pas, on s'attend à n'obtenir aucun résultat.
127
        transaction.commit()
109

  
110
        # L'utilisateur est authentifié avec des permissions
111
        # étendues. Il effectue une recherche sur un groupe d'hôtes
112
        # qui n'existe pas, il ne doit donc obtenir aucun résultat.
128 113
        response = self.app.get('/?supitemgroup=%d' % -42,
129
            extra_environ={'REMOTE_USER': 'user'})
114
            extra_environ={'REMOTE_USER': 'access'})
130 115

  
131 116
        # Il doit y avoir 1 seule ligne de résultats.
132 117
        rows = response.lxml.xpath('//table[@class="vigitable"]/tbody/tr')
......
139 124
        print "There are %d columns in the result set" % len(cols)
140 125
        assert_equal(len(cols), 1)
141 126

  
142
        # Mêmes tests avec un utilisateur membre du groupe 'managers'
127
        # L'utilisateur est authentifié et fait partie du groupe
128
        # 'managers'. Il effectue une recherche sur un groupe d'hôtes
129
        # qui n'existe pas, il ne doit donc obtenir aucun résultat.
143 130
        response = self.app.get('/?supitemgroup=%d' % -42,
144 131
            extra_environ={'REMOTE_USER': 'manager'})
132

  
133
        # Il doit y avoir 1 seule ligne de résultats.
145 134
        rows = response.lxml.xpath('//table[@class="vigitable"]/tbody/tr')
146 135
        print "There are %d rows in the result set" % len(rows)
136

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

  
152 144
    def test_search_supitemgroup_when_disallowed(self):
153 145
        """Teste la recherche par supitemgroup SANS les droits d'accès."""
154
        # On crée un groupe d'hôte appelé 'foo',
155
        # contenant un hôte 'bar', ainsi qu'un événement
156
        # et un événement corrélé sur cet hôte.
157
        # MAIS, on NE DONNE PAS l'autorisation aux utilisateurs
158
        # de voir cette alerte, donc elle ne doit jamais apparaître.
159
        supitemgroup = insert_deps()
160
        idgroup = supitemgroup.idgroup
161
        transaction.commit()
162

  
163
        # On envoie une requête avec recherche sur le groupe d'hôtes créé,
164
        # mais avec un utilisateur ne disposant pas des permissions adéquates.
165
        # On s'attend à n'obtenir aucun résultat.
166
        response = self.app.get('/?supitemgroup=%d' % idgroup,
167
            extra_environ={'REMOTE_USER': 'user'})
168 146

  
169
        # Il doit y avoir 1 seule ligne de résultats.
147
        # On récupère les 2 groupes de supitems utilisés lors de ces tests.
148
        maingroup = SupItemGroup.by_group_name('maingroup')
149
        group2 = SupItemGroup.by_group_name('group2')
150

  
151
        # L'utilisateur n'est pas authentifié.
152
        response = self.app.get('/', status=401)
153

  
154
        # L'utilisateur est authentifié avec des permissions réduites.
155
        # Il effectue une recherche sur un groupe de supitems auquel
156
        # il n'a pas accès, mais qui est le parent d'un groupe auquel
157
        # il a accès. Il ne doit obtenir aucun résultat.
158
        environ = {'REMOTE_USER': 'limited_access'}
159
        response = self.app.get(
160
            '/?supitemgroup=%d' % maingroup.idgroup,
161
            extra_environ=environ
162
        )
163

  
164
        # Il doit y avoir 1 seule ligne dans la réponse.
165
        # (la réponse contient le texte "Il n'y a aucun événément", traduit)
170 166
        rows = response.lxml.xpath('//table[@class="vigitable"]/tbody/tr')
171 167
        print "There are %d rows in the result set" % len(rows)
172 168
        assert_equal(len(rows), 1)
173 169

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

  
175
        # L'utilisateur est authentifié avec des permissions réduites.
176
        # Il effectue une recherche sur un groupe de supitems auquel
177
        # il n'a pas accès, mais qui est le fils du groupe parent d'un
178
        # groupe auquel il a accès. Il ne doit donc, là non plus, obtenir
179
        # aucun résultat.
180
        environ = {'REMOTE_USER': 'limited_access'}
181
        response = self.app.get(
182
            '/?supitemgroup=%d' % group2.idgroup,
183
            extra_environ=environ
184
        )
185

  
186
        # Il doit y avoir 1 seule ligne dans la réponse.
187
        # (la réponse contient le texte "Il n'y a aucun événément", traduit)
188
        rows = response.lxml.xpath('//table[@class="vigitable"]/tbody/tr')
189
        print "There are %d rows in the result set" % len(rows)
190
        assert_equal(len(rows), 1)
191

  
192
        # Il doit y avoir 1 seule colonne dans la réponse.
176 193
        cols = response.lxml.xpath('//table[@class="vigitable"]/tbody/tr/td')
177 194
        print "There are %d columns in the result set" % len(cols)
178 195
        assert_equal(len(cols), 1)
196

  
vigiboard/tests/functional/utils.py
1
# -*- coding: utf-8 -*-
2
# vim:set expandtab tabstop=4 shiftwidth=4:
3
"""
4
Fonctions utilitaires réutilisables dans les différents tests.
5
"""
6

  
7
from nose.tools import assert_true, assert_equal
8
from datetime import datetime
9
import transaction
10

  
11
from vigilo.models.session import DBSession
12
from vigilo.models.tables import Event, CorrEvent, DataPermission, \
13
                            Permission, StateName, Host, SupItemGroup, \
14
                            LowLevelService, User, UserGroup, Permission
15
from vigiboard.tests import TestController
16

  
17
def populate_DB():
18
    """ Peuple la base de données. """
19

  
20
    # Création des 3 groupes de supitems :
21
    # - 1 groupe principal 'maingroup' ;
22
    maingroup = SupItemGroup(name=u'maingroup', parent=None)
23
    DBSession.add(maingroup)
24
    # - 2 sous-groupes 'group1' et 'group2', faisant tous
25
    #   les deux parties du groupe principal 'maingroup'.
26
    group1 = SupItemGroup(name=u'group1', parent=maingroup)
27
    DBSession.add(group1)
28
    group2 = SupItemGroup(name=u'group2', parent=maingroup)
29
    DBSession.add(group2)
30
    DBSession.flush()
31

  
32
    # Création de 2 groupes d'utilisateurs (contenant chacun un utilisateur) :
33
    vigiboard_perm = Permission.by_permission_name(u'vigiboard-access')
34
    # - le premier avec des droits étendus
35
    #   (il a indirectement accès à tous les groupes de supitems) ;
36
    usergroup = UserGroup(group_name=u'users_with_access')
37
    usergroup.permissions.append(vigiboard_perm)
38
    DBSession.add(DataPermission(
39
        group = maingroup,
40
        usergroup = usergroup,
41
        access = u'r',
42
    ))
43
    user = User(
44
        user_name=u'access',
45
        fullname=u'',
46
        email=u'user.has@access',
47
    )
48
    user.usergroups.append(usergroup)
49
    DBSession.add(user)
50

  
51
    # - le second avec des droits plus restreints
52
    #   (il n'a accès qu'au groupe de supitems 'group1').
53
    usergroup = UserGroup(group_name=u'users_with_limited_access')
54
    usergroup.permissions.append(vigiboard_perm)
55
    DBSession.add(DataPermission(
56
        group = group1,
57
        usergroup = usergroup,
58
        access = u'r',
59
    ))
60
    user = User(
61
        user_name=u'limited_access',
62
        fullname=u'',
63
        email=u'user.has.limited@access',
64
    )
65
    user.usergroups.append(usergroup)
66
    DBSession.add(user)
67
    DBSession.flush()
68

  
69
    # Création de 3 hôtes (1 par groupe de supitems).
70
    host_template = {
71
        'checkhostcmd': u'halt',
72
        'snmpcommunity': u'public',
73
        'hosttpl': u'/dev/null',
74
        'address': u'192.168.1.1',
75
        'snmpport': 42,
76
        'weight': 42,
77
    }
78

  
79
    maingroup_host = Host(name=u'maingroup_host', **host_template)
80
    DBSession.add(maingroup_host)
81
    group1_host = Host(name=u'group1_host', **host_template)
82
    DBSession.add(group1_host)
83
    group2_host = Host(name=u'group2_host', **host_template)
84
    DBSession.add(group2_host)
85

  
86
    # Affectation des hôtes aux groupes.
87
    maingroup.supitems.append(maingroup_host)
88
    group1.supitems.append(group1_host)
89
    group2.supitems.append(group2_host)
90
    DBSession.flush()
91

  
92
    # Création de 3 services de bas niveau (1 par hôte).
93
    service_template = {
94
        'command': u'halt',
95
        'weight': 42,
96
    }
97

  
98
    group1_service = LowLevelService(
99
        host = group1_host,
100
        servicename = u'group1_service',
101
        **service_template
102
    )
103
    DBSession.add(group1_service)
104

  
105
    group2_service = LowLevelService(
106
        host = group2_host,
107
        servicename = u'group2_service',
108
        **service_template
109
    )
110
    DBSession.add(group2_service)
111

  
112
    maingroup_service = LowLevelService(
113
        host = maingroup_host,
114
        servicename = u'maingroup_service',
115
        **service_template
116
    )
117
    DBSession.add(maingroup_service)
118
    DBSession.flush()
119

  
120
    # Ajout de 6 événements (1 par supitem)
121
    event_template = {
122
        'message': u'foo',
123
        'current_state': StateName.statename_to_value(u'WARNING'),
124
        'timestamp': datetime.now(),
125
    }
126

  
127
    event1 = Event(supitem=maingroup_host, **event_template)
128
    DBSession.add(event1)
129
    event2 = Event(supitem=maingroup_service, **event_template)
130
    DBSession.add(event2)
131
    event3 = Event(supitem=group1_host, **event_template)
132
    DBSession.add(event3)
133
    event4 = Event(supitem=group1_service, **event_template)
134
    DBSession.add(event4)
135
    event5 = Event(supitem=group2_host, **event_template)
136
    DBSession.add(event5)
137
    event6 = Event(supitem=group2_service, **event_template)
138
    DBSession.add(event6)
139
    DBSession.flush()
140

  
141
    # Ajout de 5 événements corrélés (1 pour chaque évènement,
142
    # sauf celui touchant le 'maingroup_service' qui sera rattaché
143
    # à l'évènement corrélé causé par le 'maingroup_host').
144
    aggregate_template = {
145
        'timestamp_active': datetime.now(),
146
        'priority': 1,
147
        'status': u'None',
148
    }
149

  
150
    aggregate1 = CorrEvent(
151
        idcause=event1.idevent, **aggregate_template)
152
    aggregate3 = CorrEvent(
153
        idcause=event3.idevent, **aggregate_template)
154
    aggregate4 = CorrEvent(
155
        idcause=event4.idevent, **aggregate_template)
156
    aggregate5 = CorrEvent(
157
        idcause=event5.idevent, **aggregate_template)
158
    aggregate6 = CorrEvent(
159
        idcause=event6.idevent, **aggregate_template)
160

  
161
    aggregate1.events.append(event1)
162
    aggregate1.events.append(event2)
163
    aggregate3.events.append(event3)
164
    aggregate4.events.append(event4)
165
    aggregate5.events.append(event5)
166
    aggregate6.events.append(event6)
167
    DBSession.add(aggregate1)
168
    DBSession.add(aggregate3)
169
    DBSession.add(aggregate4)
170
    DBSession.add(aggregate5)
171
    DBSession.add(aggregate6)
172
    DBSession.flush()
173

  
174
    transaction.commit()
175

  

Also available in: Unified diff