Completed
Push — master ( 12b62e...11d6ab )
by
unknown
17s queued 11s
created

GmpCreateTaskCommandTestCase.test_create_task_with_preferences()   A

Complexity

Conditions 1

Size

Total Lines 11
Code Lines 9

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 9
nop 1
dl 0
loc 11
rs 9.95
c 0
b 0
f 0
1
# -*- coding: utf-8 -*-
2
# Copyright (C) 2018 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
import unittest
20
import warnings
21
22
from collections import OrderedDict
23
24
from gvm.errors import RequiredArgument, InvalidArgument
25
26
from . import Gmpv7TestCase
27
28
29
class GmpCreateTaskCommandTestCase(Gmpv7TestCase):
30
    def test_create_task(self):
31
        self.gmp.create_task(
32
            name='foo', config_id='c1', target_id='t1', scanner_id='s1'
33
        )
34
35
        self.connection.send.has_been_called_with(
36
            '<create_task>'
37
            '<name>foo</name>'
38
            '<config id="c1"/>'
39
            '<target id="t1"/>'
40
            '<scanner id="s1"/>'
41
            '</create_task>'
42
        )
43
44
    def test_create_task_missing_name(self):
45
        with self.assertRaises(RequiredArgument):
46
            self.gmp.create_task(
47
                name=None, config_id='c1', target_id='t1', scanner_id='s1'
48
            )
49
50
        with self.assertRaises(RequiredArgument):
51
            self.gmp.create_task(
52
                name='', config_id='c1', target_id='t1', scanner_id='s1'
53
            )
54
55
    def test_create_task_missing_config_id(self):
56
        with self.assertRaises(RequiredArgument):
57
            self.gmp.create_task(
58
                name='foo', config_id=None, target_id='t1', scanner_id='s1'
59
            )
60
61
        with self.assertRaises(RequiredArgument):
62
            self.gmp.create_task(
63
                name='foo', config_id='', target_id='t1', scanner_id='s1'
64
            )
65
66
    def test_create_task_missing_target_id(self):
67
        with self.assertRaises(RequiredArgument):
68
            self.gmp.create_task(
69
                name='foo', config_id='c1', target_id=None, scanner_id='s1'
70
            )
71
72
        with self.assertRaises(RequiredArgument):
73
            self.gmp.create_task(
74
                name='foo', config_id='c1', target_id='', scanner_id='s1'
75
            )
76
77
    def test_create_task_missing_scanner_id(self):
78
        with self.assertRaises(RequiredArgument):
79
            self.gmp.create_task(
80
                name='foo', config_id='c1', target_id='t1', scanner_id=None
81
            )
82
83
        with self.assertRaises(RequiredArgument):
84
            self.gmp.create_task(
85
                name='foo', config_id='c1', target_id='t1', scanner_id=''
86
            )
87
88
    def test_create_task_with_comment(self):
89
        self.gmp.create_task(
90
            name='foo',
91
            config_id='c1',
92
            target_id='t1',
93
            scanner_id='s1',
94
            comment='bar',
95
        )
96
97
        self.connection.send.has_been_called_with(
98
            '<create_task>'
99
            '<name>foo</name>'
100
            '<config id="c1"/>'
101
            '<target id="t1"/>'
102
            '<scanner id="s1"/>'
103
            '<comment>bar</comment>'
104
            '</create_task>'
105
        )
106
107
    def test_create_task_single_alert(self):
108
        # pylint: disable=invalid-name
109
        with warnings.catch_warnings(record=True) as w:
110
            warnings.simplefilter("always")
111
112
            self.gmp.create_task(
113
                name='foo',
114
                config_id='c1',
115
                target_id='t1',
116
                scanner_id='s1',
117
                alert_ids='a1',  # will be removed in future
118
            )
119
120
            self.assertEqual(len(w), 1)
121
            self.assertTrue(issubclass(w[0].category, DeprecationWarning))
122
123
        self.connection.send.has_been_called_with(
124
            '<create_task>'
125
            '<name>foo</name>'
126
            '<config id="c1"/>'
127
            '<target id="t1"/>'
128
            '<scanner id="s1"/>'
129
            '<alert id="a1"/>'
130
            '</create_task>'
131
        )
132
133
        self.gmp.create_task(
134
            name='foo',
135
            config_id='c1',
136
            target_id='t1',
137
            scanner_id='s1',
138
            alert_ids=['a1'],
139
        )
140
141
        self.connection.send.has_been_called_with(
142
            '<create_task>'
143
            '<name>foo</name>'
144
            '<config id="c1"/>'
145
            '<target id="t1"/>'
146
            '<scanner id="s1"/>'
147
            '<alert id="a1"/>'
148
            '</create_task>'
149
        )
150
151
    def test_create_task_multiple_alerts(self):
152
        self.gmp.create_task(
153
            name='foo',
154
            config_id='c1',
155
            target_id='t1',
156
            scanner_id='s1',
157
            alert_ids=['a1', 'a2', 'a3'],
158
        )
159
160
        self.connection.send.has_been_called_with(
161
            '<create_task>'
162
            '<name>foo</name>'
163
            '<config id="c1"/>'
164
            '<target id="t1"/>'
165
            '<scanner id="s1"/>'
166
            '<alert id="a1"/>'
167
            '<alert id="a2"/>'
168
            '<alert id="a3"/>'
169
            '</create_task>'
170
        )
171
172
    def test_create_task_with_alterable(self):
173
        self.gmp.create_task(
174
            name='foo',
175
            config_id='c1',
176
            target_id='t1',
177
            scanner_id='s1',
178
            alterable=True,
179
        )
180
181
        self.connection.send.has_been_called_with(
182
            '<create_task>'
183
            '<name>foo</name>'
184
            '<config id="c1"/>'
185
            '<target id="t1"/>'
186
            '<scanner id="s1"/>'
187
            '<alterable>1</alterable>'
188
            '</create_task>'
189
        )
190
191
        self.gmp.create_task(
192
            name='foo',
193
            config_id='c1',
194
            target_id='t1',
195
            scanner_id='s1',
196
            alterable=False,
197
        )
198
199
        self.connection.send.has_been_called_with(
200
            '<create_task>'
201
            '<name>foo</name>'
202
            '<config id="c1"/>'
203
            '<target id="t1"/>'
204
            '<scanner id="s1"/>'
205
            '<alterable>0</alterable>'
206
            '</create_task>'
207
        )
208
209
    def test_create_task_with_hosts_ordering(self):
210
        self.gmp.create_task(
211
            name='foo',
212
            config_id='c1',
213
            target_id='t1',
214
            scanner_id='s1',
215
            hosts_ordering='foo',
216
        )
217
218
        self.connection.send.has_been_called_with(
219
            '<create_task>'
220
            '<name>foo</name>'
221
            '<config id="c1"/>'
222
            '<target id="t1"/>'
223
            '<scanner id="s1"/>'
224
            '<hosts_ordering>foo</hosts_ordering>'
225
            '</create_task>'
226
        )
227
228
    def test_create_task_with_schedule(self):
229
        self.gmp.create_task(
230
            name='foo',
231
            config_id='c1',
232
            target_id='t1',
233
            scanner_id='s1',
234
            schedule_id='s1',
235
        )
236
237
        self.connection.send.has_been_called_with(
238
            '<create_task>'
239
            '<name>foo</name>'
240
            '<config id="c1"/>'
241
            '<target id="t1"/>'
242
            '<scanner id="s1"/>'
243
            '<schedule id="s1"/>'
244
            '</create_task>'
245
        )
246
247
    def test_create_task_with_schedule_and_schedule_periods(self):
248
        self.gmp.create_task(
249
            name='foo',
250
            config_id='c1',
251
            target_id='t1',
252
            scanner_id='s1',
253
            schedule_id='s1',
254
            schedule_periods=0,
255
        )
256
257
        self.connection.send.has_been_called_with(
258
            '<create_task>'
259
            '<name>foo</name>'
260
            '<config id="c1"/>'
261
            '<target id="t1"/>'
262
            '<scanner id="s1"/>'
263
            '<schedule id="s1"/>'
264
            '<schedule_periods>0</schedule_periods>'
265
            '</create_task>'
266
        )
267
268
        self.gmp.create_task(
269
            name='foo',
270
            config_id='c1',
271
            target_id='t1',
272
            scanner_id='s1',
273
            schedule_id='s1',
274
            schedule_periods=5,
275
        )
276
277
        self.connection.send.has_been_called_with(
278
            '<create_task>'
279
            '<name>foo</name>'
280
            '<config id="c1"/>'
281
            '<target id="t1"/>'
282
            '<scanner id="s1"/>'
283
            '<schedule id="s1"/>'
284
            '<schedule_periods>5</schedule_periods>'
285
            '</create_task>'
286
        )
287
288
    def test_create_task_with_schedule_and_invalid_schedule_periods(self):
289
        with self.assertRaises(InvalidArgument):
290
            self.gmp.create_task(
291
                name='foo',
292
                config_id='c1',
293
                target_id='t1',
294
                scanner_id='s1',
295
                schedule_id='s1',
296
                schedule_periods='foo',
297
            )
298
299
        with self.assertRaises(InvalidArgument):
300
            self.gmp.create_task(
301
                name='foo',
302
                config_id='c1',
303
                target_id='t1',
304
                scanner_id='s1',
305
                schedule_id='s1',
306
                schedule_periods=-1,
307
            )
308
309
    def test_create_task_with_observers(self):
310
        self.gmp.create_task(
311
            name='foo',
312
            config_id='c1',
313
            target_id='t1',
314
            scanner_id='s1',
315
            observers=['u1', 'u2'],
316
        )
317
318
        self.connection.send.has_been_called_with(
319
            '<create_task>'
320
            '<name>foo</name>'
321
            '<config id="c1"/>'
322
            '<target id="t1"/>'
323
            '<scanner id="s1"/>'
324
            '<observers>u1,u2</observers>'
325
            '</create_task>'
326
        )
327
328
    def test_create_task_invalid_observers(self):
329
        with self.assertRaises(InvalidArgument):
330
            self.gmp.create_task(
331
                name='foo',
332
                config_id='c1',
333
                target_id='t1',
334
                scanner_id='s1',
335
                observers='',
336
            )
337
338
        with self.assertRaises(InvalidArgument):
339
            self.gmp.create_task(
340
                name='foo',
341
                config_id='c1',
342
                target_id='t1',
343
                scanner_id='s1',
344
                observers='foo',
345
            )
346
347
    def test_create_task_with_preferences(self):
348
        self.gmp.create_task(
349
            name='foo',
350
            config_id='c1',
351
            target_id='t1',
352
            scanner_id='s1',
353
            preferences=OrderedDict([('foo', 'bar'), ('lorem', 'ipsum')]),
354
        )
355
356
        self.connection.send.has_been_called_with(
357
            '<create_task>'
358
            '<name>foo</name>'
359
            '<config id="c1"/>'
360
            '<target id="t1"/>'
361
            '<scanner id="s1"/>'
362
            '<preferences>'
363
            '<preference>'
364
            '<scanner_name>foo</scanner_name>'
365
            '<value>bar</value>'
366
            '</preference>'
367
            '<preference>'
368
            '<scanner_name>lorem</scanner_name>'
369
            '<value>ipsum</value>'
370
            '</preference>'
371
            '</preferences>'
372
            '</create_task>'
373
        )
374
375
    def test_create_task_invalid_preferences(self):
376
        with self.assertRaises(InvalidArgument):
377
            self.gmp.create_task(
378
                name='foo',
379
                config_id='c1',
380
                target_id='t1',
381
                scanner_id='s1',
382
                preferences='',
383
            )
384
385
        with self.assertRaises(InvalidArgument):
386
            self.gmp.create_task(
387
                name='foo',
388
                config_id='c1',
389
                target_id='t1',
390
                scanner_id='s1',
391
                preferences=['foo', 'bar'],
392
            )
393
394
    def test_create_task_don_t_allow_container_task(self):
395
        with self.assertRaises(InvalidArgument):
396
            self.gmp.create_task(
397
                name='foo',
398
                config_id='c1',
399
                target_id='0',
400
                scanner_id='s1',
401
                observers='',
402
            )
403
404
        # target_id=0 is considered as False
405
        with self.assertRaises(RequiredArgument):
406
            self.gmp.create_task(
407
                name='foo',
408
                config_id='c1',
409
                target_id=0,
410
                scanner_id='s1',
411
                observers='',
412
            )
413
414
415
if __name__ == '__main__':
416
    unittest.main()
417