Project

General

Profile

Statistics
| Branch: | Tag: | Revision:

vigiboard / vigiboard / tests / functional / utils.py @ b373a5de

History | View | Annotate | Download (5.73 KB)

1
# -*- coding: utf-8 -*-
2
# vim:set expandtab tabstop=4 shiftwidth=4:
3
# Copyright (C) 2006-2011 CS-SI
4
# License: GNU GPL v2 <http://www.gnu.org/licenses/gpl-2.0.html>
5

    
6
"""
7
Fonctions utilitaires réutilisables dans les différents tests.
8
"""
9

    
10
from nose.tools import assert_true, assert_equal
11
from datetime import datetime
12
import transaction
13

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

    
20
def populate_DB():
21
    """ Peuple la base de données. """
22

    
23
    # Création des 4 groupes de supitems :
24
    # - 1 groupe racine 'root' ;
25
    root = SupItemGroup(name=u'root', parent=None)
26
    DBSession.add(root)
27
    # - 1 groupe principal 'maingroup' ;
28
    maingroup = SupItemGroup(name=u'maingroup', parent=root)
29
    DBSession.add(maingroup)
30
    # - 2 sous-groupes 'group1' et 'group2', faisant tous
31
    #   les deux parties du groupe principal 'maingroup'.
32
    group1 = SupItemGroup(name=u'group1', parent=maingroup)
33
    DBSession.add(group1)
34
    group2 = SupItemGroup(name=u'group2', parent=maingroup)
35
    DBSession.add(group2)
36
    DBSession.flush()
37

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

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

    
75
    # Création de 3 hôtes (1 par groupe de supitems).
76
    host_template = {
77
        'checkhostcmd': u'halt',
78
        'snmpcommunity': u'public',
79
        'hosttpl': u'/dev/null',
80
        'address': u'192.168.1.1',
81
        'snmpport': 42,
82
        'weight': 42,
83
    }
84

    
85
    maingroup_host = Host(name=u'maingroup_host', **host_template)
86
    DBSession.add(maingroup_host)
87
    group1_host = Host(name=u'group1_host', **host_template)
88
    DBSession.add(group1_host)
89
    group2_host = Host(name=u'group2_host', **host_template)
90
    DBSession.add(group2_host)
91

    
92
    # Affectation des hôtes aux groupes.
93
    maingroup.supitems.append(maingroup_host)
94
    group1.supitems.append(group1_host)
95
    group2.supitems.append(group2_host)
96
    DBSession.flush()
97

    
98
    # Création de 3 services de bas niveau (1 par hôte).
99
    service_template = {
100
        'command': u'halt',
101
        'weight': 42,
102
    }
103

    
104
    group1_service = LowLevelService(
105
        host = group1_host,
106
        servicename = u'group1_service',
107
        **service_template
108
    )
109
    DBSession.add(group1_service)
110

    
111
    group2_service = LowLevelService(
112
        host = group2_host,
113
        servicename = u'group2_service',
114
        **service_template
115
    )
116
    DBSession.add(group2_service)
117

    
118
    maingroup_service = LowLevelService(
119
        host = maingroup_host,
120
        servicename = u'maingroup_service',
121
        **service_template
122
    )
123
    DBSession.add(maingroup_service)
124
    DBSession.flush()
125

    
126
    # Ajout de 6 événements (1 par supitem)
127
    event_template = {
128
        'message': u'foo',
129
        'current_state': StateName.statename_to_value(u'WARNING'),
130
        'timestamp': datetime.now(),
131
    }
132

    
133
    event1 = Event(supitem=maingroup_host, **event_template)
134
    DBSession.add(event1)
135
    event2 = Event(supitem=maingroup_service, **event_template)
136
    DBSession.add(event2)
137
    event3 = Event(supitem=group1_host, **event_template)
138
    DBSession.add(event3)
139
    event4 = Event(supitem=group1_service, **event_template)
140
    DBSession.add(event4)
141
    event5 = Event(supitem=group2_host, **event_template)
142
    DBSession.add(event5)
143
    event6 = Event(supitem=group2_service, **event_template)
144
    DBSession.add(event6)
145
    DBSession.flush()
146

    
147
    # Ajout de 5 événements corrélés (1 pour chaque évènement,
148
    # sauf celui touchant le 'maingroup_service' qui sera rattaché
149
    # à l'évènement corrélé causé par le 'maingroup_host').
150
    aggregate_template = {
151
        'timestamp_active': datetime.now(),
152
        'priority': 1,
153
        'status': u'None',
154
    }
155

    
156
    aggregate1 = CorrEvent(
157
        idcause=event1.idevent, **aggregate_template)
158
    aggregate3 = CorrEvent(
159
        idcause=event3.idevent, **aggregate_template)
160
    aggregate4 = CorrEvent(
161
        idcause=event4.idevent, **aggregate_template)
162
    aggregate5 = CorrEvent(
163
        idcause=event5.idevent, **aggregate_template)
164
    aggregate6 = CorrEvent(
165
        idcause=event6.idevent, **aggregate_template)
166

    
167
    aggregate1.events.append(event1)
168
    aggregate1.events.append(event2)
169
    aggregate3.events.append(event3)
170
    aggregate4.events.append(event4)
171
    aggregate5.events.append(event5)
172
    aggregate6.events.append(event6)
173
    DBSession.add(aggregate1)
174
    DBSession.add(aggregate3)
175
    DBSession.add(aggregate4)
176
    DBSession.add(aggregate5)
177
    DBSession.add(aggregate6)
178
    DBSession.flush()
179

    
180
    transaction.commit()
181