Project

General

Profile

Revision 60d02e7f

ID60d02e7f78fadca1fa710afc47c537a78e90865c
Parent a5f99051
Child a58ba612

Added by Francois POIROTTE about 14 years ago

Correction des tests unitaires de VigiBoard.

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

View differences:

vigiboard/tests/__init__.py
58 58
        cmd = SetupCommand('setup-app')
59 59
        cmd.run([test_file])
60 60

  
61
        # Ajout de l'utilisateur 'editor' et de ses permissions limitées.
62
        # Utilisé pour vérifier la gestion des permissions.
63
        from vigilo.models import tables
64
        editor = tables.User()
65
        editor.user_name = u'editor'
66
        editor.email = u'editor@somedomain.com'
67
        editor.fullname = u'Editor'
68
        editor.password = u'editpass'
69
        DBSession.add(editor)
70
        DBSession.flush()
71

  
72
        group = tables.UserGroup()
73
        group.group_name = u'editors'
74
        group.users.append(editor)
75
        DBSession.add(group)
76
        DBSession.flush()
77

  
78
        permission = tables.Permission()
79
        permission.permission_name = u'edit'
80
        permission.usergroups.append(group)
81
        DBSession.add(permission)
82
        DBSession.flush()
83

  
84
        permission = tables.Permission.by_permission_name(u'vigiboard-read')
85
        permission.usergroups.append(group)
86
        DBSession.flush()
87

  
88
        permission = tables.Permission.by_permission_name(u'vigiboard-write')
89
        permission.usergroups.append(group)
90
        DBSession.flush()
91

  
92
        import transaction
93
        transaction.commit()
94

  
95

  
96 61
    def tearDown(self):
97 62
        """Method called by nose after running each test"""
98 63
        # Cleaning up the database:
vigiboard/tests/functional/plugins/test_details_plugin.py
9 9

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

  
17 17
def insert_deps(return_service):
......
101 101
    DBSession.add(correvent)
102 102
    DBSession.flush()
103 103

  
104
    usergroup = UserGroup.by_group_name(u'users_with_access')
105
    DBSession.add(DataPermission(
106
        usergroup=usergroup,
107
        group=hostgroup,
108
        access=u'r',
109
    ))
110
    DBSession.flush()
111

  
112
    transaction.commit()
113
    correvent = DBSession.query(CorrEvent).first()
114
    event = DBSession.query(Event).first()
115

  
104 116
    return (hostgroup, correvent.idcorrevent, event.idevent)
105 117

  
106 118
class TestDetailsPlugin(TestController):
107 119
    """Teste le dialogue pour l'accès aux historiques."""
120
    def setUp(self):
121
        super(TestDetailsPlugin, self).setUp()
122
        perm = Permission.by_permission_name(u'vigiboard-access')
123

  
124
        user = User(
125
            user_name=u'access',
126
            fullname=u'',
127
            email=u'user.has@access',
128
        )
129
        usergroup = UserGroup(
130
            group_name=u'users_with_access',
131
        )
132
        usergroup.permissions.append(perm)
133
        user.usergroups.append(usergroup)
134
        DBSession.add(user)
135
        DBSession.add(usergroup)
136
        DBSession.flush()
137

  
138
        user = User(
139
            user_name=u'no_access',
140
            fullname=u'',
141
            email=u'user.has.no@access',
142
        )
143
        usergroup = UserGroup(
144
            group_name=u'users_without_access',
145
        )
146
        usergroup.permissions.append(perm)
147
        user.usergroups.append(usergroup)
148
        DBSession.add(user)
149
        DBSession.add(usergroup)
150
        DBSession.flush()
151

  
152
        transaction.commit()
108 153

  
109 154
    def test_details_plugin_LLS_alert_when_allowed(self):
110 155
        """Dialogue des détails avec un LLS et les bons droits."""
111 156
        hostgroup, idcorrevent, idcause = insert_deps(True)
112
        manage = Permission.by_permission_name(u'manage')
113
        manage.supitemgroups.append(hostgroup)
114
        DBSession.flush()
115
        transaction.commit()
116 157

  
117 158
        response = self.app.post('/get_plugin_value', {
118 159
                'idcorrevent': idcorrevent,
119 160
                'plugin_name': 'details',
120
            }, extra_environ={'REMOTE_USER': 'manager'})
161
            }, extra_environ={'REMOTE_USER': 'access'})
121 162
        json = response.json
122 163

  
123 164
        # Le contenu de "eventdetails" varie facilement.
......
138 179
    def test_details_plugin_host_alert_when_allowed(self):
139 180
        """Dialogue des détails avec un hôte et les bons droits."""
140 181
        hostgroup, idcorrevent, idcause = insert_deps(False)
141
        manage = Permission.by_permission_name(u'manage')
142
        manage.supitemgroups.append(hostgroup)
143
        DBSession.flush()
144
        transaction.commit()
145 182

  
146 183
        response = self.app.post('/get_plugin_value', {
147 184
                'idcorrevent': idcorrevent,
148 185
                'plugin_name': 'details',
149
            }, extra_environ={'REMOTE_USER': 'manager'})
186
            }, extra_environ={'REMOTE_USER': 'access'})
150 187
        json = response.json
151 188

  
152 189
        # Le contenu de "eventdetails" varie facilement.
......
168 205
    def test_details_plugin_LLS_when_forbidden(self):
169 206
        """Dialogue des détails avec un LLS et des droits insuffisants."""
170 207
        idcorrevent = insert_deps(True)[1]
171
        DBSession.flush()
172
        transaction.commit()
173 208

  
174 209
        # Le contrôleur renvoie une erreur 404 (HTTPNotFound)
175 210
        # lorsque l'utilisateur n'a pas les permissions nécessaires sur
......
177 212
        self.app.post('/get_plugin_value', {
178 213
                'idcorrevent': idcorrevent,
179 214
                'plugin_name': 'details',
180
            }, extra_environ={'REMOTE_USER': 'editor'},
215
            }, extra_environ={'REMOTE_USER': 'no_access'},
181 216
            status=404)
182 217

  
183 218
    def test_details_plugin_host_when_forbidden(self):
184 219
        """Dialogue des détails avec un hôte et des droits insuffisants."""
185 220
        idcorrevent = insert_deps(False)[1]
186
        DBSession.flush()
187
        transaction.commit()
188 221

  
189 222
        # Le contrôleur renvoie une erreur 404 (HTTPNotFound)
190 223
        # lorsque l'utilisateur n'a pas les permissions nécessaires sur
......
192 225
        self.app.post('/get_plugin_value', {
193 226
                'idcorrevent': idcorrevent,
194 227
                'plugin_name': 'details',
195
            }, extra_environ={'REMOTE_USER': 'editor'},
228
            }, extra_environ={'REMOTE_USER': 'no_access'},
196 229
            status=404)
197 230

  
198 231
    def test_details_plugin_LLS_anonymous(self):
199 232
        """Dialogue des détails avec un LLS et en anonyme."""
200 233
        idcorrevent = insert_deps(True)[1]
201
        DBSession.flush()
202
        transaction.commit()
203 234

  
204 235
        # Le contrôleur renvoie une erreur 401 (HTTPUnauthorized)
205 236
        # lorsque l'utilisateur n'est pas authentifié.
......
211 242
    def test_details_plugin_host_anonymous(self):
212 243
        """Dialogue des détails avec un hôte et en anonyme."""
213 244
        idcorrevent = insert_deps(False)[1]
214
        DBSession.flush()
215
        transaction.commit()
216 245

  
217 246
        # Le contrôleur renvoie une erreur 401 (HTTPUnauthorized)
218 247
        # lorsque l'utilisateur n'est pas authentifié.
vigiboard/tests/functional/plugins/test_plugin_hls.py
6 6
from nose.tools import assert_equal
7 7

  
8 8
from vigilo.models.session import DBSession
9
from vigilo.models.tables import Permission, StateName, \
9
from vigilo.models.tables import Permission, DataPermission, StateName, \
10 10
                            SupItemGroup, Host, HighLevelService, \
11
                            Event, CorrEvent, ImpactedPath, ImpactedHLS
11
                            Event, CorrEvent, ImpactedPath, ImpactedHLS, \
12
                            User, UserGroup
12 13
from vigilo.models.tables.grouphierarchy import GroupHierarchy
13 14
from vigiboard.tests import TestController
14 15

  
......
27 28
    ))
28 29

  
29 30
    # On lui octroie les permissions
30
    manage_perm = Permission.by_permission_name(u'manage')
31
    hostmanagers.permissions.append(manage_perm)
31
    usergroup = UserGroup.by_group_name(u'users_with_access')
32
    DBSession.add(DataPermission(
33
        group=hostmanagers,
34
        usergroup=usergroup,
35
        access=u'r',
36
    ))
32 37
    DBSession.flush()
33 38

  
34 39
    # On crée un hôte de test.
......
68 73
    DBSession.flush()
69 74
    
70 75
    transaction.commit()
71

  
72 76
    return aggregate
73 77

  
74 78
def add_paths(path_number, path_length, idsupitem):
......
123 127
    Classe de test du contrôleur listant les services 
124 128
    de haut niveau impactés par un évènement corrélé.
125 129
    """
126
    
130
    def setUp(self):
131
        super(TestHLSPlugin, self).setUp()
132
        perm = Permission.by_permission_name(u'vigiboard-access')
133

  
134
        user = User(
135
            user_name=u'access',
136
            fullname=u'',
137
            email=u'user.has@access',
138
        )
139
        usergroup = UserGroup(
140
            group_name=u'users_with_access',
141
        )
142
        usergroup.permissions.append(perm)
143
        user.usergroups.append(usergroup)
144
        DBSession.add(user)
145
        DBSession.add(usergroup)
146
        DBSession.flush()
147

  
148
        user = User(
149
            user_name=u'no_access',
150
            fullname=u'',
151
            email=u'user.has.no@access',
152
        )
153
        usergroup = UserGroup(
154
            group_name=u'users_without_access',
155
        )
156
        usergroup.permissions.append(perm)
157
        user.usergroups.append(usergroup)
158
        DBSession.add(user)
159
        DBSession.add(usergroup)
160
        DBSession.flush()
161

  
162
        self.aggregate = populate_DB()
163

  
127 164
    def test_no_impacted_hls(self):
128 165
        """
129 166
        Retour du plugin HLS pour 0 HLS impacté
......
132 169
        """
133 170
        
134 171
        # On peuple la base de données avant le test.
135
        aggregate = populate_DB()
136
        DBSession.add(aggregate)
137
        add_paths(0, 0, aggregate.events[0].idsupitem)
138
        DBSession.add(aggregate)
172
        DBSession.add(self.aggregate)
173
        add_paths(0, 0, self.aggregate.events[0].idsupitem)
174
        DBSession.add(self.aggregate)
139 175
        
140 176
        ### 1er cas : l'utilisateur n'est pas connecté.
141 177
        # On vérifie que le plugin retourne bien une erreur 401.
142 178
        resp = self.app.post(
143 179
            '/get_plugin_value', 
144
            {"idcorrevent" : str(aggregate.idcorrevent),
180
            {"idcorrevent" : str(self.aggregate.idcorrevent),
145 181
             "plugin_name" : "hls"},
146 182
            status = 401,)
147 183
        
......
150 186
        # On vérifie que le plugin retourne bien une erreur 404.
151 187
        resp = self.app.post(
152 188
            '/get_plugin_value', 
153
            {"idcorrevent" : str(aggregate.idcorrevent),
189
            {"idcorrevent" : str(self.aggregate.idcorrevent),
154 190
             "plugin_name" : "hls"},
155 191
            status = 404,
156
            extra_environ={'REMOTE_USER': 'editor'})
192
            extra_environ={'REMOTE_USER': 'no_access'})
157 193
        
158 194
        ### 3ème cas : l'utilisateur a cette fois les droits.
159 195
        resp = self.app.post(
160 196
            '/get_plugin_value', 
161
            {"idcorrevent" : str(aggregate.idcorrevent),
197
            {"idcorrevent" : str(self.aggregate.idcorrevent),
162 198
             "plugin_name" : "hls"},
163
            extra_environ={'REMOTE_USER': 'manager'})
199
            extra_environ={'REMOTE_USER': 'access'})
164 200
        # On vérifie que le plugin ne retourne toujours rien.
165 201
        assert_equal(resp.json, {"services": []})
166 202
    
......
172 208
        """
173 209
        
174 210
        # On peuple la base de données avant le test.
175
        aggregate = populate_DB()
176
        DBSession.add(aggregate)
177
        add_paths(1, 2, aggregate.events[0].idsupitem)
178
        DBSession.add(aggregate)
211
        DBSession.add(self.aggregate)
212
        add_paths(1, 2, self.aggregate.events[0].idsupitem)
213
        DBSession.add(self.aggregate)
179 214
        
180 215
        ### 1er cas : l'utilisateur n'est pas connecté.
181 216
        # On vérifie que le plugin retourne bien une erreur 401.
182 217
        resp = self.app.post(
183 218
            '/get_plugin_value', 
184
            {"idcorrevent" : str(aggregate.idcorrevent),
219
            {"idcorrevent" : str(self.aggregate.idcorrevent),
185 220
             "plugin_name" : "hls"},
186 221
            status = 401,)
187 222
        
......
191 226
        ### avec les informations liées à cet utilisateur).
192 227
        resp = self.app.post(
193 228
            '/get_plugin_value', 
194
            {"idcorrevent" : str(aggregate.idcorrevent),
229
            {"idcorrevent" : str(self.aggregate.idcorrevent),
195 230
             "plugin_name" : "hls"},
196 231
            status = 404,
197
            extra_environ={'REMOTE_USER': 'editor'})
232
            extra_environ={'REMOTE_USER': 'no_access'})
198 233
        
199 234
        ### 3ème cas : l'utilisateur a cette fois les droits.
200 235
        resp = self.app.post(
201 236
            '/get_plugin_value', 
202
            {"idcorrevent" : str(aggregate.idcorrevent),
237
            {"idcorrevent" : str(self.aggregate.idcorrevent),
203 238
             "plugin_name" : "hls"},
204
            extra_environ={'REMOTE_USER': 'manager'})
239
            extra_environ={'REMOTE_USER': 'access'})
205 240
        # On vérifie que le plugin retourne bien les 2 HLS impactés.
206 241
        assert_equal(resp.json, {"services": ['HLS12']})
207 242
    
......
213 248
        """
214 249
        
215 250
        # On peuple la base de données avant le test.
216
        aggregate = populate_DB()
217
        DBSession.add(aggregate)
218
        add_paths(2, 2, aggregate.events[0].idsupitem)
219
        DBSession.add(aggregate)
251
        DBSession.add(self.aggregate)
252
        add_paths(2, 2, self.aggregate.events[0].idsupitem)
253
        DBSession.add(self.aggregate)
220 254
        
221 255
        ### 1er cas : l'utilisateur n'est pas connecté.
222 256
        # On vérifie que le plugin retourne bien une erreur 401.
223 257
        resp = self.app.post(
224 258
            '/get_plugin_value', 
225
            {"idcorrevent" : str(aggregate.idcorrevent),
259
            {"idcorrevent" : str(self.aggregate.idcorrevent),
226 260
             "plugin_name" : "hls"},
227 261
            status = 401,)
228 262
        
......
230 264
        ### droits sur l'hôte ayant causé le correvent.
231 265
        resp = self.app.post(
232 266
            '/get_plugin_value', 
233
            {"idcorrevent" : str(aggregate.idcorrevent),
267
            {"idcorrevent" : str(self.aggregate.idcorrevent),
234 268
             "plugin_name" : "hls"},
235 269
            status = 404,
236
            extra_environ={'REMOTE_USER': 'editor'})
270
            extra_environ={'REMOTE_USER': 'no_access'})
237 271
        
238 272
        ### 3ème cas : l'utilisateur a cette fois les droits.
239 273
        resp = self.app.post(
240 274
            '/get_plugin_value', 
241
            {"idcorrevent" : str(aggregate.idcorrevent),
275
            {"idcorrevent" : str(self.aggregate.idcorrevent),
242 276
             "plugin_name" : "hls"},
243
            extra_environ={'REMOTE_USER': 'manager'})
277
            extra_environ={'REMOTE_USER': 'access'})
244 278
        # On vérifie que le plugin retourne bien les 4 HLS impactés.
245 279
        assert_equal(resp.json, {"services": ['HLS12', 'HLS22']})
246 280

  
vigiboard/tests/functional/test_correvents_table.py
9 9
import transaction
10 10

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

  
......
41 41
    ))
42 42
    DBSession.flush()
43 43

  
44
    manage_perm = Permission.by_permission_name(u'manage')
45
    edit_perm = Permission.by_permission_name(u'edit')
44
    usergroup = UserGroup.by_group_name(u'users_with_access')
45
    DBSession.add(DataPermission(
46
        group=hostmanagers,
47
        usergroup=usergroup,
48
        access=u'r',
49
    ))
50
    DBSession.add(DataPermission(
51
        group=hosteditors,
52
        usergroup=usergroup,
53
        access=u'r',
54
    ))
46 55

  
47
    hostmanagers.permissions.append(manage_perm)
48
    hosteditors.permissions.append(edit_perm)
56
    usergroup = UserGroup.by_group_name(u'users_with_limited_access')
57
    DBSession.add(DataPermission(
58
        group=hosteditors,
59
        usergroup=usergroup,
60
        access=u'r',
61
    ))
49 62
    DBSession.flush()
50 63

  
51 64
    # Création des hôtes de test.
......
161 174
    """
162 175
    Test du tableau d'événements de Vigiboard
163 176
    """
177
    def setUp(self):
178
        super(TestEventTable, self).setUp()
179
        perm = Permission.by_permission_name(u'vigiboard-access')
180

  
181
        user = User(
182
            user_name=u'access',
183
            fullname=u'',
184
            email=u'user.has@access',
185
        )
186
        usergroup = UserGroup(
187
            group_name=u'users_with_access',
188
        )
189
        usergroup.permissions.append(perm)
190
        user.usergroups.append(usergroup)
191
        DBSession.add(user)
192
        DBSession.add(usergroup)
193
        DBSession.flush()
194

  
195
        user = User(
196
            user_name=u'limited_access',
197
            fullname=u'',
198
            email=u'user.has.no@access',
199
        )
200
        usergroup = UserGroup(
201
            group_name=u'users_with_limited_access',
202
        )
203
        usergroup.permissions.append(perm)
204
        user.usergroups.append(usergroup)
205
        DBSession.add(user)
206
        DBSession.add(usergroup)
207
        DBSession.flush()
208

  
209
        populate_DB()
210

  
164 211

  
165 212
    def test_homepage(self):
166 213
        """
167 214
        Tableau des événements (page d'accueil).
168 215
        """
169
        populate_DB()
170

  
171 216
        # L'utilisateur n'est pas authentifié.
172 217
        response = self.app.get('/', status=401)
173 218

  
174 219
        # L'utilisateur est authentifié avec des permissions réduites.
175
        environ = {'REMOTE_USER': 'editor'}
220
        environ = {'REMOTE_USER': 'limited_access'}
176 221
        response = self.app.get('/', extra_environ=environ)
177 222

  
178 223
        # Il doit y avoir 2 lignes de résultats.
......
186 231
        assert_true(len(cols) > 1)
187 232

  
188 233
        # L'utilisateur est authentifié avec des permissions plus étendues.
189
        environ = {'REMOTE_USER': 'manager'}
234
        environ = {'REMOTE_USER': 'access'}
190 235
        response = self.app.get('/', extra_environ=environ)
191 236

  
192 237
        # Il doit y avoir 4 lignes de résultats.
......
203 248
        """
204 249
        Tableau des événements corrélés pour un service de bas niveau.
205 250
        """
206
        populate_DB()
207 251
        url = '/item/1/%s/%s' % ('managerhost', 'managerservice')
208 252

  
209 253
        # L'utilisateur n'est pas authentifié.
......
212 256
        # L'utilisateur dispose de permissions restreintes.
213 257
        # Il n'a pas accès aux événements corrélés sur le service donné.
214 258
        # Donc, on s'attend à être redirigé avec un message d'erreur.
215
        environ = {'REMOTE_USER': 'editor'}
259
        environ = {'REMOTE_USER': 'limited_access'}
216 260
        response = self.app.get(url, extra_environ=environ, status=302)
217 261
        response = response.follow(status = 200, extra_environ = environ)
218 262
        assert_true(len(response.lxml.xpath(
......
221 265
        # L'utilisateur dispose de permissions plus étendues.
222 266
        # Il doit avoir accès à l'historique.
223 267
        # Ici, il n'y a qu'un seul événement corrélé pour ce service.
224
        environ = {'REMOTE_USER': 'manager'}
268
        environ = {'REMOTE_USER': 'access'}
225 269
        response = self.app.get(url, extra_environ=environ, status=200)
226 270

  
227 271
        # Il doit y avoir 1 ligne de résultats.
......
233 277
        """
234 278
        Tableau des événements corrélés pour un hôte.
235 279
        """
236
        populate_DB()
237 280
        url = '/item/1/%s/' % ('managerhost', )
238 281

  
239 282
        # L'utilisateur n'est pas authentifié.
......
242 285
        # L'utilisateur dispose de permissions restreintes.
243 286
        # Il n'a pas accès aux événements corrélés sur le service donné.
244 287
        # Donc, on s'attend à être redirigé avec un message d'erreur.
245
        environ = {'REMOTE_USER': 'editor'}
288
        environ = {'REMOTE_USER': 'limited_access'}
246 289
        response = self.app.get(url, extra_environ=environ, status=302)
247 290
        response = response.follow(status = 200, extra_environ = environ)
248 291
        assert_true(len(response.lxml.xpath(
......
251 294
        # L'utilisateur dispose de permissions plus étendues.
252 295
        # Il doit avoir accès à l'historique.
253 296
        # Ici, il n'y a qu'un seul événement corrélé pour ce service.
254
        environ = {'REMOTE_USER': 'manager'}
297
        environ = {'REMOTE_USER': 'access'}
255 298
        response = self.app.get(url, extra_environ=environ, status=200)
256 299

  
257 300
        # Il doit y avoir 1 ligne de résultats.
vigiboard/tests/functional/test_history_table.py
12 12
from vigilo.models.session import DBSession
13 13
from vigilo.models.tables import Event, EventHistory, CorrEvent, \
14 14
                            Permission, StateName, Host, \
15
                            SupItemGroup, LowLevelService
15
                            SupItemGroup, LowLevelService, \
16
                            Permission, DataPermission, User, \
17
                            UserGroup
16 18
from vigilo.models.tables.grouphierarchy import GroupHierarchy
17 19
from vigiboard.tests import TestController
18 20

  
......
29 31
        hops=0,
30 32
    ))
31 33

  
32
    # On ajoute la permission 'manage' à ces deux groupes.
33
    manage_perm = Permission.by_permission_name(u'manage')
34
    supitemmanagers.permissions.append(manage_perm)
34
    usergroup = UserGroup.by_group_name(u'users_with_access')
35
    DBSession.add(DataPermission(
36
        group=supitemmanagers,
37
        usergroup=usergroup,
38
        access=u'r',
39
    ))
35 40
    DBSession.flush()
36 41

  
37 42
    # On crée un hôte de test, et on l'ajoute au groupe d'hôtes.
......
108 113
    Teste la table qui affiche l'historique des actions
109 114
    sur un événement brut.
110 115
    """
116
    def setUp(self):
117
        super(TestHistoryTable, self).setUp()
118
        perm = Permission.by_permission_name(u'vigiboard-access')
119

  
120
        user = User(
121
            user_name=u'access',
122
            fullname=u'',
123
            email=u'user.has@access',
124
        )
125
        usergroup = UserGroup(
126
            group_name=u'users_with_access',
127
        )
128
        usergroup.permissions.append(perm)
129
        user.usergroups.append(usergroup)
130
        DBSession.add(user)
131
        DBSession.add(usergroup)
132
        DBSession.flush()
133

  
134
        user = User(
135
            user_name=u'limited_access',
136
            fullname=u'',
137
            email=u'user.has.no@access',
138
        )
139
        usergroup = UserGroup(
140
            group_name=u'users_with_limited_access',
141
        )
142
        usergroup.permissions.append(perm)
143
        user.usergroups.append(usergroup)
144
        DBSession.add(user)
145
        DBSession.add(usergroup)
146
        DBSession.flush()
147

  
111 148

  
112 149
    def test_cause_host_history(self):
113 150
        """Historique de la cause d'un événement corrélé sur un hôte."""
......
128 165
            status = 401)
129 166

  
130 167
        # L'utilisateur N'A PAS les bonnes permissions.
131
        environ = {'REMOTE_USER': 'editor'}
168
        environ = {'REMOTE_USER': 'limited_access'}
132 169
        
133 170
        # On s'attend à ce qu'une erreur 302 soit renvoyée, et à
134 171
        # ce qu'un message d'erreur précise à l'utilisateur qu'il
......
144 181
            '//div[@id="flash"]/div[@class="error"]')))
145 182

  
146 183
        # L'utilisateur a les bonnes permissions.
147
        environ = {'REMOTE_USER': 'manager'}
184
        environ = {'REMOTE_USER': 'access'}
148 185
        
149 186
        # On s'attend à ce que le statut de la requête soit 200.
150 187
        response = self.app.get(
......
180 217
            status = 401)
181 218

  
182 219
        # L'utilisateur N'A PAS les bonnes permissions.
183
        environ = {'REMOTE_USER': 'editor'}
220
        environ = {'REMOTE_USER': 'limited_access'}
184 221
        
185 222
        # On s'attend à ce qu'une erreur 302 soit renvoyée, et à
186 223
        # ce qu'un message d'erreur précise à l'utilisateur qu'il
......
196 233
            '//div[@id="flash"]/div[@class="error"]')))
197 234

  
198 235
        # L'utilisateur a les bonnes permissions.
199
        environ = {'REMOTE_USER': 'manager'}
236
        environ = {'REMOTE_USER': 'access'}
200 237
        
201 238
        # On s'attend à ce que le statut de la requête soit 200.
202 239
        response = self.app.get(
vigiboard/tests/functional/test_raw_events_table.py
9 9
import transaction
10 10

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

  
18
def populate_accounts():
19
        perm = Permission.by_permission_name(u'vigiboard-access')
20

  
21
        user = User(
22
            user_name=u'access',
23
            fullname=u'',
24
            email=u'user.has@access',
25
        )
26
        usergroup = UserGroup(
27
            group_name=u'users_with_access',
28
        )
29
        usergroup.permissions.append(perm)
30
        user.usergroups.append(usergroup)
31
        DBSession.add(user)
32
        DBSession.add(usergroup)
33
        DBSession.flush()
34

  
35
        user = User(
36
            user_name=u'limited_access',
37
            fullname=u'',
38
            email=u'user.has.no@access',
39
        )
40
        usergroup = UserGroup(
41
            group_name=u'users_with_limited_access',
42
        )
43
        usergroup.permissions.append(perm)
44
        user.usergroups.append(usergroup)
45
        DBSession.add(user)
46
        DBSession.add(usergroup)
47
        DBSession.flush()
48
        transaction.commit()
49

  
18 50
def populate_DB(caused_by_service):
19 51
    """ Peuple la base de données. """
20 52
    # On ajoute un groupe d'hôtes et un groupe de services.
......
29 61
    ))
30 62
    DBSession.flush()
31 63

  
32
    # On ajoute la permission 'manage' à ces deux groupes.
33
    manage_perm = Permission.by_permission_name(u'manage')
34
    supitemmanagers.permissions.append(manage_perm)
64
    usergroup = UserGroup.by_group_name(u'users_with_access')
65
    DBSession.add(DataPermission(
66
        group=supitemmanagers,
67
        usergroup=usergroup,
68
        access=u'r',
69
    ))
35 70
    DBSession.flush()
36 71

  
37 72
    # On crée un hôte de test, et on l'ajoute au groupe d'hôtes.
......
141 176
    """
142 177
    test_service = True
143 178

  
179
    def setUp(self):
180
        super(TestRawEventsTableAnonymousLLS, self).setUp()
181
        populate_accounts()
182

  
144 183
    def test_table(self):
145 184
        """Événements masqués d'un agrégat sur un LLS en anonyme."""
146 185
        # On peuple la BDD avec un hôte, un service de bas niveau,
......
172 211
    """
173 212
    test_service = True
174 213

  
214
    def setUp(self):
215
        super(TestRawEventsTableWithoutPermsLLS, self).setUp()
216
        populate_accounts()
217

  
175 218
    def test_table(self):
176 219
        """Événements masqués d'un agrégat sur un LLS sans permissions."""
177 220
        # On peuple la BDD avec un hôte, un service de bas niveau,
......
179 222
        idcorrevent = populate_DB(self.test_service)
180 223
        transaction.commit()
181 224

  
182
        environ = {'REMOTE_USER': 'editor'}
225
        environ = {'REMOTE_USER': 'limited_access'}
183 226

  
184 227
        # On s'attend à ce qu'une erreur 302 soit renvoyée, et à
185 228
        # ce qu'un message d'erreur précise à l'utilisateur qu'il
......
221 264
    """
222 265
    test_service = True
223 266

  
267
    def setUp(self):
268
        super(TestRawEventsTableWithPermsLLS, self).setUp()
269
        populate_accounts()
270

  
224 271
    def test_table(self):
225 272
        """Événements masqués d'un agrégat sur un LLS avec permissions."""
226 273
        # On peuple la BDD avec un hôte, un service de bas niveau,
......
228 275
        idcorrevent = populate_DB(True)
229 276
        transaction.commit()
230 277

  
231
        environ = {'REMOTE_USER': 'manager'}
278
        environ = {'REMOTE_USER': 'access'}
232 279

  
233 280
        # On s'attend à ce qu'une erreur 302 soit renvoyée, et à
234 281
        # ce qu'un message d'erreur précise à l'utilisateur qu'il
vigiboard/tests/functional/test_root.py
16 16
import transaction
17 17

  
18 18
from vigilo.models.session import DBSession
19
from vigilo.models.tables import Event, EventHistory, CorrEvent, \
20
                            Permission, StateName, Host, \
21
                            SupItemGroup, LowLevelService
19
from vigilo.models.tables import Event, EventHistory, CorrEvent, User, \
20
                            Permission, StateName, Host, UserGroup, \
21
                            SupItemGroup, LowLevelService, DataPermission
22 22
from vigilo.models.tables.grouphierarchy import GroupHierarchy
23 23
from vigiboard.tests import TestController
24 24

  
......
36 36
    ))
37 37
    DBSession.flush()
38 38

  
39
    # On ajoute la permission 'manage' à ces deux groupes.
40
    manage_perm = Permission.by_permission_name(u'manage')
41
    supitemmanagers.permissions.append(manage_perm)
39
    usergroup = UserGroup.by_group_name(u'users_with_access')
40
    DBSession.add(DataPermission(
41
        group=supitemmanagers,
42
        usergroup=usergroup,
43
        access=u'w',
44
    ))
42 45
    DBSession.flush()
43 46

  
44 47
    # On crée un 2 hôtes, et on les ajoute au groupe d'hôtes.
......
122 125

  
123 126
class TestRootController(TestController):
124 127
    """ Classe de test du root controller """
128
    def setUp(self):
129
        super(TestRootController, self).setUp()
130
        perm = Permission.by_permission_name(u'vigiboard-access')
131
        perm2 = Permission.by_permission_name(u'vigiboard-update')
132

  
133
        user = User(
134
            user_name=u'access',
135
            fullname=u'',
136
            email=u'user.has@access',
137
        )
138
        usergroup = UserGroup(
139
            group_name=u'users_with_access',
140
        )
141
        usergroup.permissions.append(perm)
142
        usergroup.permissions.append(perm2)
143
        user.usergroups.append(usergroup)
144
        DBSession.add(user)
145
        DBSession.add(usergroup)
146
        DBSession.flush()
147

  
148
        user = User(
149
            user_name=u'limited_access',
150
            fullname=u'',
151
            email=u'user.has.no@access',
152
        )
153
        usergroup = UserGroup(
154
            group_name=u'users_with_limited_access',
155
        )
156
        usergroup.permissions.append(perm)
157
        usergroup.permissions.append(perm2)
158
        user.usergroups.append(usergroup)
159
        DBSession.add(user)
160
        DBSession.add(usergroup)
161
        DBSession.flush()
162

  
125 163
    def test_index(self):
126 164
        """Test that access to the root webpage is restricted."""
127 165

  
......
153 191
            }, status = 401)
154 192
        
155 193
        ### 2ème cas : L'utilisateur utilisé pour
156
        # se connecter à Vigiboard est 'editor'.
157
        environ = {'REMOTE_USER': 'editor'}
194
        # se connecter à Vigiboard est 'limited_access'.
195
        environ = {'REMOTE_USER': 'limited_access'}
158 196
        
159 197
        # On s'attend à ce qu'une erreur 302 soit renvoyée, et à
160 198
        # ce qu'un message d'erreur précise à l'utilisateur qu'il
......
172 210
            '//div[@id="flash"]/div[@class="error"]'))
173 211

  
174 212
        ### 3ème cas : L'utilisateur utilisé pour
175
        # se connecter à Vigiboard est 'manager'.
176
        environ = {'REMOTE_USER': 'manager'}
213
        # se connecter à Vigiboard est 'access'.
214
        environ = {'REMOTE_USER': 'access'}
177 215
        
178 216
        # On s'attend à ce que le statut de la requête soit 302,
179 217
        # et à ce qu'un message informe l'utilisateur que les
......
227 265
            }, status = 401)
228 266
        
229 267
        ### 2ème cas : L'utilisateur utilisé pour
230
        # se connecter à Vigiboard est 'editor'.
231
        environ = {'REMOTE_USER': 'editor'}
268
        # se connecter à Vigiboard est 'limited_access'.
269
        environ = {'REMOTE_USER': 'limited_access'}
232 270
        
233 271
        # On s'attend à ce qu'une erreur 302 soit renvoyée, et à
234 272
        # ce qu'un message d'erreur précise à l'utilisateur qu'il
......
246 284
            '//div[@id="flash"]/div[@class="error"]'))
247 285

  
248 286
        ### 3ème cas : L'utilisateur utilisé pour
249
        # se connecter à Vigiboard est 'manager'.
250
        environ = {'REMOTE_USER': 'manager'}
287
        # se connecter à Vigiboard est 'access'.
288
        environ = {'REMOTE_USER': 'access'}
251 289
        
252 290
        # On s'attend à ce que le statut de la requête soit 302,
253 291
        # et à ce qu'un message informe l'utilisateur que les
......
299 337
            }, status = 401)
300 338
        
301 339
        ### 2ème cas : L'utilisateur utilisé pour
302
        # se connecter à Vigiboard est 'editor'.
303
        environ = {'REMOTE_USER': 'editor'}
340
        # se connecter à Vigiboard est 'limited_access'.
341
        environ = {'REMOTE_USER': 'limited_access'}
304 342
        
305 343
        # On s'attend à ce qu'une erreur 302 soit renvoyée, et à
306 344
        # ce qu'un message d'erreur précise à l'utilisateur qu'il
......
318 356
            '//div[@id="flash"]/div[@class="error"]'))
319 357

  
320 358
        ### 3ème cas : L'utilisateur utilisé pour
321
        # se connecter à Vigiboard est 'manager'.
322
        environ = {'REMOTE_USER': 'manager'}
359
        # se connecter à Vigiboard est 'access'.
360
        environ = {'REMOTE_USER': 'access'}
323 361
        
324 362
        # On s'attend à ce que le statut de la requête soit 302,
325 363
        # et à ce qu'un message informe l'utilisateur que les
......
373 411
            }, status = 401)
374 412
        
375 413
        ### 2ème cas : L'utilisateur utilisé pour
376
        # se connecter à Vigiboard est 'editor'.
377
        environ = {'REMOTE_USER': 'editor'}
414
        # se connecter à Vigiboard est 'limited_access'.
415
        environ = {'REMOTE_USER': 'limited_access'}
378 416
        
379 417
        # On s'attend à ce qu'une erreur 302 soit renvoyée, et à
380 418
        # ce qu'un message d'erreur précise à l'utilisateur qu'il
......
392 430
            '//div[@id="flash"]/div[@class="error"]'))
393 431

  
394 432
        ### 3ème cas : L'utilisateur utilisé pour
395
        # se connecter à Vigiboard est 'manager'.
396
        environ = {'REMOTE_USER': 'manager'}
433
        # se connecter à Vigiboard est 'access'.
434
        environ = {'REMOTE_USER': 'access'}
397 435
        
398 436
        # On s'attend à ce que le statut de la requête soit 302,
399 437
        # et à ce qu'un message informe l'utilisateur que les
......
452 490
        
453 491
        transaction.commit()
454 492
        
455
        # L'utilisateur utilisé pour se connecter à Vigiboard est 'manager'.
456
        environ = {'REMOTE_USER': 'manager'}
493
        # L'utilisateur utilisé pour se connecter à Vigiboard est 'access'.
494
        environ = {'REMOTE_USER': 'access'}
457 495
        
458 496
        # On s'attend à ce que le statut de la requête soit 302, et
459 497
        # à ce qu'un message d'erreur avise l'utilisateur que des
vigiboard/tests/functional/test_search_form_host.py
9 9
from vigiboard.tests import TestController
10 10
from vigilo.models.session import DBSession
11 11
from vigilo.models.tables import SupItemGroup, Host, Permission, \
12
                                    Event, CorrEvent, StateName
12
                                    Event, CorrEvent, StateName, \
13
                                    User, UserGroup, DataPermission
13 14
from vigilo.models.tables.grouphierarchy import GroupHierarchy
14 15

  
15 16
def insert_deps():
......
71 72

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

  
75 92
    def test_search_host_when_allowed(self):
76 93
        """Teste la recherche par hôte avec les bons droits."""
......
78 95
        # L'hôte est rattaché à un groupe d'hôtes
79 96
        # pour lesquel l'utilisateur a les permissions.
80 97
        hostgroup = insert_deps()
81
        edit = Permission.by_permission_name(u'edit')
82
        edit.supitemgroups.append(hostgroup)
98
        usergroup = UserGroup.by_group_name(u'users')
99
        DBSession.add(DataPermission(
100
            group=hostgroup,
101
            usergroup=usergroup,
102
            access=u'r',
103
        ))
83 104
        DBSession.flush()
84 105
        transaction.commit()
85 106

  
86 107
        # On envoie une requête avec recherche sur l'hôte créé,
87 108
        # on s'attend à recevoir 1 résultat.
88 109
        response = self.app.get('/?host=bar',
89
            extra_environ={'REMOTE_USER': 'editor'})
110
            extra_environ={'REMOTE_USER': 'user'})
90 111

  
91 112
        # Il doit y avoir 1 seule ligne de résultats.
92 113
        rows = response.lxml.xpath('//table[@class="vigitable"]/tbody/tr')
......
102 123
        """Teste la recherche par hôte sur un hôte inexistant."""
103 124
        # On envoie une requête avec recherche sur un hôte
104 125
        # qui n'existe pas, on s'attend à n'obtenir aucun résultat.
126
        transaction.commit()
105 127
        response = self.app.get('/?host=bad',
106
            extra_environ={'REMOTE_USER': 'editor'})
128
            extra_environ={'REMOTE_USER': 'user'})
107 129

  
108 130
        # Il doit y avoir 1 seule ligne de résultats.
109 131
        rows = response.lxml.xpath('//table[@class="vigitable"]/tbody/tr')
......
127 149
        # mais avec un utilisateur ne disposant pas des permissions adéquates.
128 150
        # On s'attend à n'obtenir aucun résultat.
129 151
        response = self.app.get('/?host=bar',
130
            extra_environ={'REMOTE_USER': 'editor'})
152
            extra_environ={'REMOTE_USER': 'user'})
131 153

  
132 154
        # Il doit y avoir 1 seule ligne de résultats.
133 155
        rows = response.lxml.xpath('//table[@class="vigitable"]/tbody/tr')
vigiboard/tests/functional/test_search_form_hostgroup.py
9 9
from vigiboard.tests import TestController
10 10
from vigilo.models.session import DBSession
11 11
from vigilo.models.tables import SupItemGroup, Host, Permission, StateName, \
12
                                    Event, CorrEvent
12
                                    Event, CorrEvent, User, UserGroup, \
13
                                    DataPermission
13 14
from vigilo.models.tables.grouphierarchy import GroupHierarchy
14 15

  
15 16
def insert_deps():
......
71 72

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

  
75 92
    def test_search_hostgroup_when_allowed(self):
76 93
        """Teste la recherche par hostgroup avec les bons droits d'accès."""
......
80 97
        # De plus, on donne l'autorisation aux utilisateurs
81 98
        # ayant la permission 'edit' de voir cette alerte.
82 99
        hostgroup = insert_deps()
83
        edit = Permission.by_permission_name(u'edit')
84
        edit.supitemgroups.append(hostgroup)
100
        usergroup = UserGroup.by_group_name(u'users')
101
        DBSession.add(DataPermission(
102
            group=hostgroup,
103
            usergroup=usergroup,
104
            access=u'r',
105
        ))
85 106
        DBSession.flush()
86 107
        transaction.commit()
87 108

  
88 109
        # On envoie une requête avec recherche sur le groupe d'hôtes créé,
89 110
        # on s'attend à recevoir 1 résultat.
90 111
        response = self.app.get('/?supitemgroup=foo',
91
            extra_environ={'REMOTE_USER': 'editor'})
112
            extra_environ={'REMOTE_USER': 'user'})
92 113

  
93 114
        # Il doit y avoir 1 seule ligne de résultats.
94 115
        rows = response.lxml.xpath('//table[@class="vigitable"]/tbody/tr')
......
104 125
        """Teste la recherche par hostgroup sur un groupe inexistant."""
105 126
        # On envoie une requête avec recherche sur un groupe d'hôtes
106 127
        # qui n'existe pas, on s'attend à n'obtenir aucun résultat.
128
        transaction.commit()
107 129
        response = self.app.get('/?supitemgroup=foot',
108
            extra_environ={'REMOTE_USER': 'editor'})
130
            extra_environ={'REMOTE_USER': 'user'})
109 131

  
110 132
        # Il doit y avoir 1 seule ligne de résultats.
111 133
        rows = response.lxml.xpath('//table[@class="vigitable"]/tbody/tr')
......
132 154
        # mais avec un utilisateur ne disposant pas des permissions adéquates.
133 155
        # On s'attend à n'obtenir aucun résultat.
134 156
        response = self.app.get('/?supitemgroup=foo',
135
            extra_environ={'REMOTE_USER': 'editor'})
157
            extra_environ={'REMOTE_USER': 'user'})
136 158

  
137 159
        # Il doit y avoir 1 seule ligne de résultats.
138 160
        rows = response.lxml.xpath('//table[@class="vigitable"]/tbody/tr')
vigiboard/tests/functional/test_search_form_misc.py
10 10
from vigiboard.tests import TestController
11 11
from vigilo.models.session import DBSession
12 12
from vigilo.models.tables import SupItemGroup, Host, Permission, \
13
                                   Event, CorrEvent, StateName
13
                                    Event, CorrEvent, StateName, \
14
                                    User, UserGroup, DataPermission
14 15
from vigilo.models.tables.grouphierarchy import GroupHierarchy
15 16

  
16 17
def insert_deps():
......
65 66
    DBSession.add(correvent)
66 67
    DBSession.flush()
67 68

  
68
    # On attribut les permissions.
69
    manage = Permission.by_permission_name(u'manage')
70
    manage.supitemgroups.append(hostgroup)
69
    # On donne l'accès aux données.
70
    usergroup = UserGroup.by_group_name(u'users')
71
    DBSession.add(DataPermission(
72
        group=hostgroup,
73
        usergroup=usergroup,
74
        access=u'r',
75
    ))
71 76
    DBSession.flush()
72 77
    return timestamp
73 78

  
74 79

  
75 80
class TestSearchFormMisc(TestController):
76 81
    """Teste la récupération d'événements selon le nom d'hôte."""
82
    def setUp(self):
83
        super(TestSearchFormMisc, self).setUp()
84
        perm = Permission.by_permission_name(u'vigiboard-access')
85
        user = User(
86
            user_name=u'user',
87
            fullname=u'',
88
            email=u'some.random@us.er',
89
        )
90
        usergroup = UserGroup(
91
            group_name=u'users',
92
        )
93
        user.usergroups.append(usergroup)
94
        usergroup.permissions.append(perm)
95
        DBSession.add(user)
96
        DBSession.add(usergroup)
97
        DBSession.flush()
98

  
77 99
    def test_search_by_output(self):
78 100
        """Teste la recherche sur le message issu de Nagios."""
79 101
        insert_deps()
......
82 104
        # Permet également de vérifier que la recherche est
83 105
        # insensible à la casse.
84 106
        response = self.app.get('/?output=hello',
85
            extra_environ={'REMOTE_USER': 'manager'})
107
            extra_environ={'REMOTE_USER': 'user'})
86 108

  
87 109
        # Il doit y avoir 1 seule ligne de résultats.
88 110
        rows = response.lxml.xpath('//table[@class="vigitable"]/tbody/tr')
......
102 124
        # Permet également de vérifier que la recherche est
103 125
        # insensible à la casse.
104 126
        response = self.app.get('/?trouble_ticket=bar',
105
            extra_environ={'REMOTE_USER': 'manager'})
127
            extra_environ={'REMOTE_USER': 'user'})
106 128
        transaction.commit()
107 129

  
108 130
        # Il doit y avoir 1 seule ligne de résultats.
......
135 157
                'from_date': from_date,
136 158
                'to_date': to_date,
137 159
            },
138
            extra_environ={'REMOTE_USER': 'manager'})
160
            extra_environ={'REMOTE_USER': 'user'})
139 161
        transaction.commit()
140 162

  
141 163
        # Il doit y avoir 1 seule ligne de résultats.
vigiboard/tests/functional/test_search_form_service.py
10 10
from vigilo.models.session import DBSession
11 11
from vigilo.models.tables import SupItemGroup, Host, Permission, \
12 12
                                    StateName, LowLevelService, \
13
                                    Event, CorrEvent
13
                                    Event, CorrEvent, User, UserGroup, \
14
                                    DataPermission
14 15
from vigilo.models.tables.grouphierarchy import GroupHierarchy
15 16

  
16 17
def insert_deps():
......
92 93

  
93 94
class TestSearchFormService(TestController):
94 95
    """Teste la récupération d'événements selon le groupe de services."""
96
    def setUp(self):
97
        super(TestSearchFormService, self).setUp()
98
        perm = Permission.by_permission_name(u'vigiboard-access')
99
        user = User(
100
            user_name=u'user',
101
            fullname=u'',
102
            email=u'some.random@us.er',
103
        )
104
        usergroup = UserGroup(
105
            group_name=u'users',
106
        )
107
        user.usergroups.append(usergroup)
108
        usergroup.permissions.append(perm)
109
        DBSession.add(user)
110
        DBSession.add(usergroup)
111
        DBSession.flush()
95 112

  
96 113
    def test_search_service_when_allowed_by_host(self):
97 114
        """
......
103 120
        # à un groupe d'hôtes pour lesquels l'utilisateur
104 121
        # a les permissions.
105 122
        hostgroup = insert_deps()[0]
106
        print "Adding permission for 'editor' on host group '%s'" % \
107
            hostgroup.name
108
        edit = Permission.by_permission_name(u'edit')
109
        edit.supitemgroups.append(hostgroup)
123
        usergroup = UserGroup.by_group_name(u'users')
124
        DBSession.add(DataPermission(
125
            group=hostgroup,
126
            usergroup=usergroup,
127
            access=u'r',
128
        ))
110 129
        DBSession.flush()
111 130
        transaction.commit()
112 131

  
113 132
        # On envoie une requête avec recherche sur le service créé,
114 133
        # on s'attend à recevoir 1 résultat.
115 134
        response = self.app.get('/?service=baz',
116
            extra_environ={'REMOTE_USER': 'editor'})
135
            extra_environ={'REMOTE_USER': 'user'})
117 136

  
118 137
        # Il doit y avoir 1 seule ligne de résultats.
119 138
        rows = response.lxml.xpath('//table[@class="vigitable"]/tbody/tr')
......
135 154
        # Le service est rattaché à un groupe de services
136 155
        # pour lesquel l'utilisateur a les permissions.
137 156
        servicegroup = insert_deps()[1]
138
        print "Adding permission for 'editor' on service group '%s'" % \
139
            servicegroup.name
140
        edit = Permission.by_permission_name(u'edit')
141
        edit.supitemgroups.append(servicegroup)
157
        usergroup = UserGroup.by_group_name(u'users')
158
        DBSession.add(DataPermission(
159
            group=servicegroup,
160
            usergroup=usergroup,
161
            access=u'r',
162
        ))
142 163
        DBSession.flush()
143 164
        transaction.commit()
144 165

  
145 166
        # On envoie une requête avec recherche sur le service créé,
146 167
        # on s'attend à recevoir 1 résultat.
147 168
        response = self.app.get('/?service=baz',
148
            extra_environ={'REMOTE_USER': 'editor'})
169
            extra_environ={'REMOTE_USER': 'user'})
149 170

  
150 171
        # Il doit y avoir 1 seule ligne de résultats.
151 172
        rows = response.lxml.xpath('//table[@class="vigitable"]/tbody/tr')
......
159 180

  
160 181
    def test_search_inexistent_service(self):
161 182
        """Teste la recherche par service sur un service inexistant."""
183
        transaction.commit()
162 184
        # On envoie une requête avec recherche sur un service
163 185
        # qui n'existe pas, on s'attend à n'obtenir aucun résultat.
164 186
        response = self.app.get('/?service=bad',
165
            extra_environ={'REMOTE_USER': 'editor'})
187
            extra_environ={'REMOTE_USER': 'user'})
166 188

  
167 189
        # Il doit y avoir 1 seule ligne de résultats.
168 190
        rows = response.lxml.xpath('//table[@class="vigitable"]/tbody/tr')
......
185 207
        # mais avec un utilisateur ne disposant pas des permissions adéquates.
186 208
        # On s'attend à n'obtenir aucun résultat.
187 209
        response = self.app.get('/?service=baz',
188
            extra_environ={'REMOTE_USER': 'editor'})
210
            extra_environ={'REMOTE_USER': 'user'})
189 211

  
190 212
        # Il doit y avoir 1 seule ligne de résultats.
191 213
        rows = response.lxml.xpath('//table[@class="vigitable"]/tbody/tr')
vigiboard/tests/functional/test_search_form_servicegroup.py
9 9
from vigiboard.tests import TestController
10 10
from vigilo.models.session import DBSession
11 11
from vigilo.models.tables import SupItemGroup, Host, Permission, Event, \
12
                                    LowLevelService, CorrEvent, StateName
12
                                    LowLevelService, CorrEvent, StateName, \
13
                                    User, UserGroup, DataPermission
13 14
from vigilo.models.tables.grouphierarchy import GroupHierarchy
14 15

  
15 16
def insert_deps():
......
78 79

  
79 80
class TestSearchFormServiceGroup(TestController):
80 81
    """Teste la récupération d'événements selon le groupe de services."""
82
    def setUp(self):
83
        super(TestSearchFormServiceGroup, self).setUp()
84
        perm = Permission.by_permission_name(u'vigiboard-access')
85
        user = User(
86
            user_name=u'user',
87
            fullname=u'',
88
            email=u'some.random@us.er',
89
        )
90
        usergroup = UserGroup(
91
            group_name=u'users',
92
        )
93
        user.usergroups.append(usergroup)
94
        usergroup.permissions.append(perm)
95
        DBSession.add(user)
96
        DBSession.add(usergroup)
97
        DBSession.flush()
81 98

  
82 99
    def test_search_servicegroup_when_allowed(self):
83 100
        """Teste la recherche par servicegroup avec les bons droits d'accès."""
......
87 104
        # De plus, on donne l'autorisation aux utilisateurs
88 105
        # ayant la permission 'edit' de voir cette alerte.
89 106
        servicegroup = insert_deps()
90
        edit = Permission.by_permission_name(u'edit')
91
        edit.supitemgroups.append(servicegroup)
107
        usergroup = UserGroup.by_group_name(u'users')
108
        DBSession.add(DataPermission(
109
            group=servicegroup,
110
            usergroup=usergroup,
111
            access=u'r',
112
        ))
92 113
        DBSession.flush()
93 114
        transaction.commit()
94 115

  
95 116
        # On envoie une requête avec recherche sur le groupe
96 117
        # de services créé, on s'attend à recevoir 1 résultat.
97 118
        response = self.app.get('/?supitemgroup=foo',
98
            extra_environ={'REMOTE_USER': 'editor'})
119
            extra_environ={'REMOTE_USER': 'user'})
99 120

  
100 121
        # Il doit y avoir 1 seule ligne de résultats.
101 122
        rows = response.lxml.xpath('//table[@class="vigitable"]/tbody/tr')
......
109 130

  
110 131
    def test_search_inexistent_servicegroup(self):
111 132
        """Teste la recherche par servicegroup sur un groupe inexistant."""
133
        transaction.commit()
112 134
        # On envoie une requête avec recherche sur un groupe de services
113 135
        # qui n'existe pas, on s'attend à n'obtenir aucun résultat.
114 136
        response = self.app.get('/?supitemgroup=foot',
115
            extra_environ={'REMOTE_USER': 'editor'})
137
            extra_environ={'REMOTE_USER': 'user'})
116 138

  
117 139
        # Il doit y avoir 1 seule ligne de résultats.
118 140
        rows = response.lxml.xpath('//table[@class="vigitable"]/tbody/tr')
......
139 161
        # services créé, mais avec un utilisateur ne disposant pas des
140 162
        # permissions adéquates. On s'attend à n'obtenir aucun résultat.
141 163
        response = self.app.get('/?supitemgroup=foo',
142
            extra_environ={'REMOTE_USER': 'editor'})
164
            extra_environ={'REMOTE_USER': 'user'})
143 165

  
144 166
        # Il doit y avoir 1 seule ligne de résultats.
145 167
        rows = response.lxml.xpath('//table[@class="vigitable"]/tbody/tr')
vigiboard/tests/functional/test_userutils.py
1
# -*- coding: utf-8 -*-
2
# vim:set expandtab tabstop=4 shiftwidth=4:
3
"""
4
Teste l'héritage des permissions sur les groupes d'hôtes/services.
5
"""
6
import transaction
7
from nose.tools import assert_true
8

  
9
from vigilo.models.session import DBSession
10
from vigilo.models.tables import SupItemGroup, Permission, User
11
from vigilo.models.tables.grouphierarchy import GroupHierarchy
12
from vigiboard.tests import TestController
13

  
14
class TestGroupPermissionsInheritance(TestController):
15
    """Test retrieval of groups of hosts/services."""
16
    def test_groups_inheritance(self):
17
        """
18
        S'assure que les groupes sont correctement hérités.
19
        """
20

  
21
        # Création de 2 groupes d'utilisateurs.
22
        hosteditors = SupItemGroup(name=u'hosteditors')
23
        DBSession.add(hosteditors)
24

  
25
        hostmanagers = SupItemGroup(name=u'hostmanagers')
26
        DBSession.add(hostmanagers)
27

  
28
        # Hiérarchie des groupes.
29
        DBSession.add(GroupHierarchy(
30
            parent=hosteditors,
31
            child=hosteditors,
32
            hops=0,
33
        ))
34
        DBSession.add(GroupHierarchy(
35
            parent=hostmanagers,
36
            child=hostmanagers,
37
            hops=0,
38
        ))
39
        DBSession.add(GroupHierarchy(
40
            parent=hostmanagers,
41
            child=hosteditors,
42
            hops=1,
43
        ))
44

  
45
        # L'attribution des permissions.
46
        manage_perm = Permission.by_permission_name(u'manage')
47
        edit_perm = Permission.by_permission_name(u'edit')
48

  
49
        manage_perm.supitemgroups.append(hostmanagers)
50
        edit_perm.supitemgroups.append(hosteditors)
51
        DBSession.flush()
52
        transaction.commit()
53

  
54
        # On obtient les variables de session comme si on était loggué
55
        # en tant que manager.
56
        environ = {'REMOTE_USER': 'manager'}
57
        response = self.app.get('/', extra_environ=environ)
58
        
59
        # On récupère la liste des groups auxquels l'utilisateur appartient.
60
        username = response.request.environ \
61
            ['repoze.who.identity'] \
62
            ['repoze.who.userid']
63
        grp = User.by_user_name(username).supitemgroups()
64

  
65
        # Permet de rafraîchir les instances.
66
        hostmanagers = DBSession.query(SupItemGroup).filter(
67
                            SupItemGroup.name==u'hostmanagers').one()
68
        hosteditors = DBSession.query(SupItemGroup).filter(
69
                            SupItemGroup.name==u'hosteditors').one()
70

  
71
        # On vérifie que la liste est correcte : le manager doit avoir accès
72
        # aux groupes 'hostmanagers' & 'hosteditors' (dont il hérite).
73
        assert_true(hostmanagers.idgroup in grp and
74
            hosteditors.idgroup in grp,
75
            msg = "il est dans %s" % grp)
76

  
77
        # On recommence avec l'utilisateur editor.
78
        environ = {'REMOTE_USER': 'editor'}
79
        response = self.app.get('/', extra_environ=environ)
80

  
81
        username = response.request.environ \
82
            ['repoze.who.identity'] \
83
            ['repoze.who.userid']
84
        grp = User.by_user_name(username).supitemgroups(False)
... This diff was truncated because it exceeds the maximum size that can be displayed.

Also available in: Unified diff