Passed
Pull Request — master (#89)
by
unknown
01:45
created

GMPCreateTaskCommandTestCase.test_create_task_invalid_observers()   A

Complexity

Conditions 3

Size

Total Lines 17
Code Lines 15

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 3
eloc 15
nop 1
dl 0
loc 17
rs 9.65
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 gvm.errors import RequiredArgument, InvalidArgument
23
from gvm.protocols.gmpv7 import Gmp
24
25
from .. import MockConnection
26
27
28
class GMPCreateTaskCommandTestCase(unittest.TestCase):
29
30
    def setUp(self):
31
        self.connection = MockConnection()
32
        self.gmp = Gmp(self.connection)
33
34
    def test_create_task(self):
35
        self.gmp.create_task(
36
            name='foo',
37
            config_id='c1',
38
            target_id='t1',
39
            scanner_id='s1',
40
        )
41
42
        self.connection.send.has_been_called_with(
43
            '<create_task>'
44
            '<name>foo</name>'
45
            '<config id="c1"/>'
46
            '<target id="t1"/>'
47
            '<scanner id="s1"/>'
48
            '</create_task>'
49
        )
50
51
    def test_create_task_missing_name(self):
52
        with self.assertRaises(RequiredArgument):
53
            self.gmp.create_task(
54
                name=None,
55
                config_id='c1',
56
                target_id='t1',
57
                scanner_id='s1',
58
            )
59
60
        with self.assertRaises(RequiredArgument):
61
            self.gmp.create_task(
62
                name='',
63
                config_id='c1',
64
                target_id='t1',
65
                scanner_id='s1',
66
            )
67
68
    def test_create_task_missing_config_id(self):
69
        with self.assertRaises(RequiredArgument):
70
            self.gmp.create_task(
71
                name='foo',
72
                config_id=None,
73
                target_id='t1',
74
                scanner_id='s1',
75
            )
76
77
        with self.assertRaises(RequiredArgument):
78
            self.gmp.create_task(
79
                name='foo',
80
                config_id='',
81
                target_id='t1',
82
                scanner_id='s1',
83
            )
84
85
    def test_create_task_missing_target_id(self):
86
        with self.assertRaises(RequiredArgument):
87
            self.gmp.create_task(
88
                name='foo',
89
                config_id='c1',
90
                target_id=None,
91
                scanner_id='s1',
92
            )
93
94
        with self.assertRaises(RequiredArgument):
95
            self.gmp.create_task(
96
                name='foo',
97
                config_id='c1',
98
                target_id='',
99
                scanner_id='s1',
100
            )
101
102
    def test_create_task_missing_scanner_id(self):
103
        with self.assertRaises(RequiredArgument):
104
            self.gmp.create_task(
105
                name='foo',
106
                config_id='c1',
107
                target_id='t1',
108
                scanner_id=None,
109
            )
110
111
        with self.assertRaises(RequiredArgument):
112
            self.gmp.create_task(
113
                name='foo',
114
                config_id='c1',
115
                target_id='t1',
116
                scanner_id='',
117
            )
118
119
    def test_create_task_with_comment(self):
120
        self.gmp.create_task(
121
            name='foo',
122
            config_id='c1',
123
            target_id='t1',
124
            scanner_id='s1',
125
            comment='bar',
126
        )
127
128
        self.connection.send.has_been_called_with(
129
            '<create_task>'
130
            '<name>foo</name>'
131
            '<config id="c1"/>'
132
            '<target id="t1"/>'
133
            '<scanner id="s1"/>'
134
            '<comment>bar</comment>'
135
            '</create_task>'
136
        )
137
138
    def test_create_task_single_alert(self):
139
140
        with warnings.catch_warnings(record=True) as w:
0 ignored issues
show
Coding Style Naming introduced by
Variable name "w" doesn't conform to '[a-z_][a-z0-9_]+$' pattern ('[a-z_][a-z0-9_]+$' pattern)

This check looks for invalid names for a range of different identifiers.

You can set regular expressions to which the identifiers must conform if the defaults do not match your requirements.

If your project includes a Pylint configuration file, the settings contained in that file take precedence.

To find out more about Pylint, please refer to their site.

Loading history...
141
            warnings.simplefilter("always")
142
143
            self.gmp.create_task(
144
                name='foo',
145
                config_id='c1',
146
                target_id='t1',
147
                scanner_id='s1',
148
                alert_ids='a1', # will be removed in future
149
            )
150
151
            self.assertEqual(len(w), 1)
152
            self.assertTrue(issubclass(w[0].category, DeprecationWarning))
153
154
        self.connection.send.has_been_called_with(
155
            '<create_task>'
156
            '<name>foo</name>'
157
            '<config id="c1"/>'
158
            '<target id="t1"/>'
159
            '<scanner id="s1"/>'
160
            '<alert id="a1"/>'
161
            '</create_task>'
162
        )
163
164
        self.gmp.create_task(
165
            name='foo',
166
            config_id='c1',
167
            target_id='t1',
168
            scanner_id='s1',
169
            alert_ids=['a1'],
170
        )
171
172
        self.connection.send.has_been_called_with(
173
            '<create_task>'
174
            '<name>foo</name>'
175
            '<config id="c1"/>'
176
            '<target id="t1"/>'
177
            '<scanner id="s1"/>'
178
            '<alert id="a1"/>'
179
            '</create_task>'
180
        )
181
182
    def test_create_task_multiple_alerts(self):
183
        self.gmp.create_task(
184
            name='foo',
185
            config_id='c1',
186
            target_id='t1',
187
            scanner_id='s1',
188
            alert_ids=['a1', 'a2', 'a3'],
189
        )
190
191
        self.connection.send.has_been_called_with(
192
            '<create_task>'
193
            '<name>foo</name>'
194
            '<config id="c1"/>'
195
            '<target id="t1"/>'
196
            '<scanner id="s1"/>'
197
            '<alert id="a1"/>'
198
            '<alert id="a2"/>'
199
            '<alert id="a3"/>'
200
            '</create_task>'
201
        )
202
203
    def test_create_task_with_alterable(self):
204
        self.gmp.create_task(
205
            name='foo',
206
            config_id='c1',
207
            target_id='t1',
208
            scanner_id='s1',
209
            alterable=True,
210
        )
211
212
        self.connection.send.has_been_called_with(
213
            '<create_task>'
214
            '<name>foo</name>'
215
            '<config id="c1"/>'
216
            '<target id="t1"/>'
217
            '<scanner id="s1"/>'
218
            '<alterable>1</alterable>'
219
            '</create_task>'
220
        )
221
222
        self.gmp.create_task(
223
            name='foo',
224
            config_id='c1',
225
            target_id='t1',
226
            scanner_id='s1',
227
            alterable=False,
228
        )
229
230
        self.connection.send.has_been_called_with(
231
            '<create_task>'
232
            '<name>foo</name>'
233
            '<config id="c1"/>'
234
            '<target id="t1"/>'
235
            '<scanner id="s1"/>'
236
            '<alterable>0</alterable>'
237
            '</create_task>'
238
        )
239
240
    def test_create_task_with_hosts_ordering(self):
241
        self.gmp.create_task(
242
            name='foo',
243
            config_id='c1',
244
            target_id='t1',
245
            scanner_id='s1',
246
            hosts_ordering='foo',
247
        )
248
249
        self.connection.send.has_been_called_with(
250
            '<create_task>'
251
            '<name>foo</name>'
252
            '<config id="c1"/>'
253
            '<target id="t1"/>'
254
            '<scanner id="s1"/>'
255
            '<hosts_ordering>foo</hosts_ordering>'
256
            '</create_task>'
257
        )
258
259
    def test_create_task_with_schedule(self):
260
        self.gmp.create_task(
261
            name='foo',
262
            config_id='c1',
263
            target_id='t1',
264
            scanner_id='s1',
265
            schedule_id='s1',
266
        )
267
268
        self.connection.send.has_been_called_with(
269
            '<create_task>'
270
            '<name>foo</name>'
271
            '<config id="c1"/>'
272
            '<target id="t1"/>'
273
            '<scanner id="s1"/>'
274
            '<schedule id="s1"/>'
275
            '</create_task>'
276
        )
277
278
    def test_create_task_with_schedule_and_schedule_periods(self):
279
        self.gmp.create_task(
280
            name='foo',
281
            config_id='c1',
282
            target_id='t1',
283
            scanner_id='s1',
284
            schedule_id='s1',
285
            schedule_periods=0,
286
        )
287
288
        self.connection.send.has_been_called_with(
289
            '<create_task>'
290
            '<name>foo</name>'
291
            '<config id="c1"/>'
292
            '<target id="t1"/>'
293
            '<scanner id="s1"/>'
294
            '<schedule id="s1"/>'
295
            '<schedule_periods>0</schedule_periods>'
296
            '</create_task>'
297
        )
298
299
        self.gmp.create_task(
300
            name='foo',
301
            config_id='c1',
302
            target_id='t1',
303
            scanner_id='s1',
304
            schedule_id='s1',
305
            schedule_periods=5,
306
        )
307
308
        self.connection.send.has_been_called_with(
309
            '<create_task>'
310
            '<name>foo</name>'
311
            '<config id="c1"/>'
312
            '<target id="t1"/>'
313
            '<scanner id="s1"/>'
314
            '<schedule id="s1"/>'
315
            '<schedule_periods>5</schedule_periods>'
316
            '</create_task>'
317
        )
318
319
    def test_create_task_with_schedule_and_invalid_schedule_periods(self):
320
        with self.assertRaises(InvalidArgument):
321
            self.gmp.create_task(
322
                name='foo',
323
                config_id='c1',
324
                target_id='t1',
325
                scanner_id='s1',
326
                schedule_id='s1',
327
                schedule_periods='foo',
328
            )
329
330
        with self.assertRaises(InvalidArgument):
331
            self.gmp.create_task(
332
                name='foo',
333
                config_id='c1',
334
                target_id='t1',
335
                scanner_id='s1',
336
                schedule_id='s1',
337
                schedule_periods=-1,
338
            )
339
340
    def test_create_task_with_observers(self):
341
        self.gmp.create_task(
342
            name='foo',
343
            config_id='c1',
344
            target_id='t1',
345
            scanner_id='s1',
346
            observers=['u1', 'u2'],
347
        )
348
349
        self.connection.send.has_been_called_with(
350
            '<create_task>'
351
            '<name>foo</name>'
352
            '<config id="c1"/>'
353
            '<target id="t1"/>'
354
            '<scanner id="s1"/>'
355
            '<observers>u1,u2</observers>'
356
            '</create_task>'
357
        )
358
359
    def test_create_task_invalid_observers(self):
360
        with self.assertRaises(InvalidArgument):
361
            self.gmp.create_task(
362
                name='foo',
363
                config_id='c1',
364
                target_id='t1',
365
                scanner_id='s1',
366
                observers='',
367
            )
368
369
        with self.assertRaises(InvalidArgument):
370
            self.gmp.create_task(
371
                name='foo',
372
                config_id='c1',
373
                target_id='t1',
374
                scanner_id='s1',
375
                observers='foo',
376
            )
377
378
    def test_create_task_with_preferences(self):
379
        self.gmp.create_task(
380
            name='foo',
381
            config_id='c1',
382
            target_id='t1',
383
            scanner_id='s1',
384
            preferences={
385
                'foo': 'bar',
386
                'lorem': 'ipsum',
387
            },
388
        )
389
390
        self.connection.send.has_been_called_with(
391
            '<create_task>'
392
            '<name>foo</name>'
393
            '<config id="c1"/>'
394
            '<target id="t1"/>'
395
            '<scanner id="s1"/>'
396
            '<preferences>'
397
            '<preference>'
398
            '<scanner_name>foo</scanner_name>'
399
            '<value>bar</value>'
400
            '</preference>'
401
            '<preference>'
402
            '<scanner_name>lorem</scanner_name>'
403
            '<value>ipsum</value>'
404
            '</preference>'
405
            '</preferences>'
406
            '</create_task>'
407
        )
408
409
    def test_create_task_invalid_preferences(self):
410
        with self.assertRaises(InvalidArgument):
411
            self.gmp.create_task(
412
                name='foo',
413
                config_id='c1',
414
                target_id='t1',
415
                scanner_id='s1',
416
                preferences='',
417
            )
418
419
        with self.assertRaises(InvalidArgument):
420
            self.gmp.create_task(
421
                name='foo',
422
                config_id='c1',
423
                target_id='t1',
424
                scanner_id='s1',
425
                preferences=['foo', 'bar'],
426
            )
427
428
429
if __name__ == '__main__':
430
    unittest.main()
431