GmpCreateAuditTestMixin.test_create_audit_single_alert()   A
last analyzed

Complexity

Conditions 1

Size

Total Lines 12
Code Lines 9

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 9
nop 1
dl 0
loc 12
rs 9.95
c 0
b 0
f 0
1
# -*- coding: utf-8 -*-
2
# Copyright (C) 2018-2021 Greenbone Networks GmbH
3
#
4
# SPDX-License-Identifier: GPL-3.0-or-later
5
#
6
# This program is free software: you can redistribute it and/or modify
7
# it under the terms of the GNU General Public License as published by
8
# the Free Software Foundation, either version 3 of the License, or
9
# (at your option) any later version.
10
#
11
# This program is distributed in the hope that it will be useful,
12
# but WITHOUT ANY WARRANTY; without even the implied warranty of
13
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
# GNU General Public License for more details.
15
#
16
# You should have received a copy of the GNU General Public License
17
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
18
19
from collections import OrderedDict
20
21
from gvm.errors import RequiredArgument, InvalidArgument, InvalidArgumentType
22
23
from gvm.protocols.gmpv208 import HostsOrdering
24
25
26
class GmpCreateAuditTestMixin:
27
    def test_create_task(self):
28
        self.gmp.create_audit(
29
            name='foo', policy_id='c1', target_id='t1', scanner_id='s1'
30
        )
31
32
        self.connection.send.has_been_called_with(
33
            '<create_task>'
34
            '<name>foo</name>'
35
            '<usage_type>audit</usage_type>'
36
            '<config id="c1"/>'
37
            '<target id="t1"/>'
38
            '<scanner id="s1"/>'
39
            '</create_task>'
40
        )
41
42
    def test_create_audit_missing_name(self):
43
        with self.assertRaises(RequiredArgument):
44
            self.gmp.create_audit(
45
                name=None, policy_id='c1', target_id='t1', scanner_id='s1'
46
            )
47
48
        with self.assertRaises(RequiredArgument):
49
            self.gmp.create_audit(
50
                name='', policy_id='c1', target_id='t1', scanner_id='s1'
51
            )
52
53
    def test_create_audit_missing_policy_id(self):
54
        with self.assertRaises(RequiredArgument):
55
            self.gmp.create_audit(
56
                name='foo', policy_id=None, target_id='t1', scanner_id='s1'
57
            )
58
59
        with self.assertRaises(RequiredArgument):
60
            self.gmp.create_audit(
61
                name='foo', policy_id='', target_id='t1', scanner_id='s1'
62
            )
63
64
    def test_create_audit_missing_target_id(self):
65
        with self.assertRaises(RequiredArgument):
66
            self.gmp.create_audit(
67
                name='foo', policy_id='c1', target_id=None, scanner_id='s1'
68
            )
69
70
        with self.assertRaises(RequiredArgument):
71
            self.gmp.create_audit(
72
                name='foo', policy_id='c1', target_id='', scanner_id='s1'
73
            )
74
75
    def test_create_audit_missing_scanner_id(self):
76
        with self.assertRaises(RequiredArgument):
77
            self.gmp.create_audit(
78
                name='foo', policy_id='c1', target_id='t1', scanner_id=None
79
            )
80
81
        with self.assertRaises(RequiredArgument):
82
            self.gmp.create_audit(
83
                name='foo', policy_id='c1', target_id='t1', scanner_id=''
84
            )
85
86
    def test_create_audit_with_comment(self):
87
        self.gmp.create_audit(
88
            name='foo',
89
            policy_id='c1',
90
            target_id='t1',
91
            scanner_id='s1',
92
            comment='bar',
93
        )
94
95
        self.connection.send.has_been_called_with(
96
            '<create_task>'
97
            '<name>foo</name>'
98
            '<usage_type>audit</usage_type>'
99
            '<config id="c1"/>'
100
            '<target id="t1"/>'
101
            '<scanner id="s1"/>'
102
            '<comment>bar</comment>'
103
            '</create_task>'
104
        )
105
106
    def test_create_audit_single_alert(self):
107
        # pylint: disable=invalid-name
108
        self.gmp.create_audit(
109
            name='foo',
110
            policy_id='c1',
111
            target_id='t1',
112
            scanner_id='s1',
113
            alert_ids=['a1'],
114
        )
115
116
        self.connection.send.has_been_called_with(
117
            '<create_task>'
118
            '<name>foo</name>'
119
            '<usage_type>audit</usage_type>'
120
            '<config id="c1"/>'
121
            '<target id="t1"/>'
122
            '<scanner id="s1"/>'
123
            '<alert id="a1"/>'
124
            '</create_task>'
125
        )
126
127
    def test_create_audit_multiple_alerts(self):
128
        self.gmp.create_audit(
129
            name='foo',
130
            policy_id='c1',
131
            target_id='t1',
132
            scanner_id='s1',
133
            alert_ids=['a1', 'a2', 'a3'],
134
        )
135
136
        self.connection.send.has_been_called_with(
137
            '<create_task>'
138
            '<name>foo</name>'
139
            '<usage_type>audit</usage_type>'
140
            '<config id="c1"/>'
141
            '<target id="t1"/>'
142
            '<scanner id="s1"/>'
143
            '<alert id="a1"/>'
144
            '<alert id="a2"/>'
145
            '<alert id="a3"/>'
146
            '</create_task>'
147
        )
148
149
    def test_create_audit_invalid_alerts(self):
150
        with self.assertRaises(InvalidArgumentType):
151
            self.gmp.create_audit(
152
                name='foo',
153
                policy_id='c1',
154
                target_id='t1',
155
                scanner_id='s1',
156
                alert_ids='invalid',
157
            )
158
159
    def test_create_audit_with_empty_alert_ids(self):
160
        self.gmp.create_audit(
161
            name='foo',
162
            policy_id='c1',
163
            target_id='t1',
164
            scanner_id='s1',
165
            alert_ids=[],
166
        )
167
168
        self.connection.send.has_been_called_with(
169
            '<create_task>'
170
            '<name>foo</name>'
171
            '<usage_type>audit</usage_type>'
172
            '<config id="c1"/>'
173
            '<target id="t1"/>'
174
            '<scanner id="s1"/>'
175
            '</create_task>'
176
        )
177
178
    def test_create_audit_with_alterable(self):
179
        self.gmp.create_audit(
180
            name='foo',
181
            policy_id='c1',
182
            target_id='t1',
183
            scanner_id='s1',
184
            alterable=True,
185
        )
186
187
        self.connection.send.has_been_called_with(
188
            '<create_task>'
189
            '<name>foo</name>'
190
            '<usage_type>audit</usage_type>'
191
            '<config id="c1"/>'
192
            '<target id="t1"/>'
193
            '<scanner id="s1"/>'
194
            '<alterable>1</alterable>'
195
            '</create_task>'
196
        )
197
198
        self.gmp.create_audit(
199
            name='foo',
200
            policy_id='c1',
201
            target_id='t1',
202
            scanner_id='s1',
203
            alterable=False,
204
        )
205
206
        self.connection.send.has_been_called_with(
207
            '<create_task>'
208
            '<name>foo</name>'
209
            '<usage_type>audit</usage_type>'
210
            '<config id="c1"/>'
211
            '<target id="t1"/>'
212
            '<scanner id="s1"/>'
213
            '<alterable>0</alterable>'
214
            '</create_task>'
215
        )
216
217
    def test_create_audit_with_hosts_ordering(self):
218
        self.gmp.create_audit(
219
            name='foo',
220
            policy_id='c1',
221
            target_id='t1',
222
            scanner_id='s1',
223
            hosts_ordering=HostsOrdering.REVERSE,
224
        )
225
226
        self.connection.send.has_been_called_with(
227
            '<create_task>'
228
            '<name>foo</name>'
229
            '<usage_type>audit</usage_type>'
230
            '<config id="c1"/>'
231
            '<target id="t1"/>'
232
            '<scanner id="s1"/>'
233
            '<hosts_ordering>reverse</hosts_ordering>'
234
            '</create_task>'
235
        )
236
237
    def test_create_audit_invalid_hosts_ordering(self):
238
        with self.assertRaises(InvalidArgumentType):
239
            self.gmp.create_audit(
240
                name='foo',
241
                policy_id='c1',
242
                target_id='t1',
243
                scanner_id='s1',
244
                hosts_ordering='foo',
245
            )
246
247
    def test_create_audit_with_schedule(self):
248
        self.gmp.create_audit(
249
            name='foo',
250
            policy_id='c1',
251
            target_id='t1',
252
            scanner_id='s1',
253
            schedule_id='s1',
254
        )
255
256
        self.connection.send.has_been_called_with(
257
            '<create_task>'
258
            '<name>foo</name>'
259
            '<usage_type>audit</usage_type>'
260
            '<config id="c1"/>'
261
            '<target id="t1"/>'
262
            '<scanner id="s1"/>'
263
            '<schedule id="s1"/>'
264
            '</create_task>'
265
        )
266
267
    def test_create_audit_with_schedule_and_schedule_periods(self):
268
        self.gmp.create_audit(
269
            name='foo',
270
            policy_id='c1',
271
            target_id='t1',
272
            scanner_id='s1',
273
            schedule_id='s1',
274
            schedule_periods=0,
275
        )
276
277
        self.connection.send.has_been_called_with(
278
            '<create_task>'
279
            '<name>foo</name>'
280
            '<usage_type>audit</usage_type>'
281
            '<config id="c1"/>'
282
            '<target id="t1"/>'
283
            '<scanner id="s1"/>'
284
            '<schedule id="s1"/>'
285
            '<schedule_periods>0</schedule_periods>'
286
            '</create_task>'
287
        )
288
289
        self.gmp.create_audit(
290
            name='foo',
291
            policy_id='c1',
292
            target_id='t1',
293
            scanner_id='s1',
294
            schedule_id='s1',
295
            schedule_periods=5,
296
        )
297
298
        self.connection.send.has_been_called_with(
299
            '<create_task>'
300
            '<name>foo</name>'
301
            '<usage_type>audit</usage_type>'
302
            '<config id="c1"/>'
303
            '<target id="t1"/>'
304
            '<scanner id="s1"/>'
305
            '<schedule id="s1"/>'
306
            '<schedule_periods>5</schedule_periods>'
307
            '</create_task>'
308
        )
309
310
    def test_create_audit_with_schedule_and_invalid_schedule_periods(self):
311
        with self.assertRaises(InvalidArgument):
312
            self.gmp.create_audit(
313
                name='foo',
314
                policy_id='c1',
315
                target_id='t1',
316
                scanner_id='s1',
317
                schedule_id='s1',
318
                schedule_periods='foo',
319
            )
320
321
        with self.assertRaises(InvalidArgument):
322
            self.gmp.create_audit(
323
                name='foo',
324
                policy_id='c1',
325
                target_id='t1',
326
                scanner_id='s1',
327
                schedule_id='s1',
328
                schedule_periods=-1,
329
            )
330
331
    def test_create_audit_with_observers(self):
332
        self.gmp.create_audit(
333
            name='foo',
334
            policy_id='c1',
335
            target_id='t1',
336
            scanner_id='s1',
337
            observers=['u1', 'u2'],
338
        )
339
340
        self.connection.send.has_been_called_with(
341
            '<create_task>'
342
            '<name>foo</name>'
343
            '<usage_type>audit</usage_type>'
344
            '<config id="c1"/>'
345
            '<target id="t1"/>'
346
            '<scanner id="s1"/>'
347
            '<observers>u1,u2</observers>'
348
            '</create_task>'
349
        )
350
351
    def test_create_audit_invalid_observers(self):
352
        with self.assertRaises(InvalidArgumentType):
353
            self.gmp.create_audit(
354
                name='foo',
355
                policy_id='c1',
356
                target_id='t1',
357
                scanner_id='s1',
358
                observers='',
359
            )
360
361
        with self.assertRaises(InvalidArgumentType):
362
            self.gmp.create_audit(
363
                name='foo',
364
                policy_id='c1',
365
                target_id='t1',
366
                scanner_id='s1',
367
                observers='foo',
368
            )
369
370
    def test_create_audit_with_preferences(self):
371
        self.gmp.create_audit(
372
            name='foo',
373
            policy_id='c1',
374
            target_id='t1',
375
            scanner_id='s1',
376
            preferences=OrderedDict([('foo', 'bar'), ('lorem', 'ipsum')]),
377
        )
378
379
        self.connection.send.has_been_called_with(
380
            '<create_task>'
381
            '<name>foo</name>'
382
            '<usage_type>audit</usage_type>'
383
            '<config id="c1"/>'
384
            '<target id="t1"/>'
385
            '<scanner id="s1"/>'
386
            '<preferences>'
387
            '<preference>'
388
            '<scanner_name>foo</scanner_name>'
389
            '<value>bar</value>'
390
            '</preference>'
391
            '<preference>'
392
            '<scanner_name>lorem</scanner_name>'
393
            '<value>ipsum</value>'
394
            '</preference>'
395
            '</preferences>'
396
            '</create_task>'
397
        )
398
399
    def test_create_audit_invalid_preferences(self):
400
        with self.assertRaises(InvalidArgumentType):
401
            self.gmp.create_audit(
402
                name='foo',
403
                policy_id='c1',
404
                target_id='t1',
405
                scanner_id='s1',
406
                preferences='',
407
            )
408
409
        with self.assertRaises(InvalidArgumentType):
410
            self.gmp.create_audit(
411
                name='foo',
412
                policy_id='c1',
413
                target_id='t1',
414
                scanner_id='s1',
415
                preferences=['foo', 'bar'],
416
            )
417
418
    def test_create_audit_don_t_allow_container_task(self):
419
        with self.assertRaises(InvalidArgument):
420
            self.gmp.create_audit(
421
                name='foo',
422
                policy_id='c1',
423
                target_id='0',
424
                scanner_id='s1',
425
                observers='',
426
            )
427
428
        # target_id=0 is considered as False
429
        with self.assertRaises(RequiredArgument):
430
            self.gmp.create_audit(
431
                name='foo',
432
                policy_id='c1',
433
                target_id=0,
434
                scanner_id='s1',
435
                observers='',
436
            )
437