3 # Copyright 2008 Google Inc. All Rights Reserved.
5 """Tests for action_common."""
7 import unittest
, os
, sys
, StringIO
, copy
10 from autotest_lib
.cli
import cli_mock
, topic_common
, action_common
, rpc
11 from autotest_lib
.frontend
.afe
.json_rpc
import proxy
16 class atest_list_unittest(cli_mock
.cli_unittest
):
17 def test_check_for_wilcard_none(self
):
18 orig_filters
= {'name__in': ['item0', 'item1']}
19 orig_checks
= {'name__in': ['item0', 'item1']}
20 mytest
= action_common
.atest_list()
22 filters
= copy
.deepcopy(orig_filters
)
23 checks
= copy
.deepcopy(orig_checks
)
24 mytest
.check_for_wildcard(filters
, checks
)
25 self
.assertEqual(filters
, orig_filters
)
26 self
.assertEqual(checks
, orig_checks
)
29 def test_check_for_wilcard_none_list(self
):
30 orig_filters
= {'name__in': ['item0']}
31 orig_checks
= {'name__in': ['item0']}
32 mytest
= action_common
.atest_list()
34 filters
= copy
.deepcopy(orig_filters
)
35 checks
= copy
.deepcopy(orig_checks
)
36 mytest
.check_for_wildcard(filters
, checks
)
37 self
.assertEqual(filters
, orig_filters
)
38 self
.assertEqual(checks
, orig_checks
)
40 def test_check_for_wilcard_one_list(self
):
41 filters
= {'something__in': ['item*']}
42 checks
= {'something__in': ['item*']}
43 mytest
= action_common
.atest_list()
45 mytest
.check_for_wildcard(filters
, checks
)
46 self
.assertEqual(filters
, {'something__startswith': 'item'})
47 self
.assertEqual(checks
, {'something__startswith': None})
50 def test_check_for_wilcard_one_string(self
):
51 filters
= {'something__name': 'item*'}
52 checks
= {'something__name': 'item*'}
53 mytest
= action_common
.atest_list()
55 mytest
.check_for_wildcard(filters
, checks
)
56 self
.assertEqual(filters
, {'something__name__startswith': 'item'})
57 self
.assertEqual(checks
, {'something__name__startswith': None})
61 def test_check_for_wilcard_one_string_login(self
):
62 filters
= {'something__login': 'item*'}
63 checks
= {'something__login': 'item*'}
64 mytest
= action_common
.atest_list()
66 mytest
.check_for_wildcard(filters
, checks
)
67 self
.assertEqual(filters
, {'something__login__startswith': 'item'})
68 self
.assertEqual(checks
, {'something__login__startswith': None})
71 def test_check_for_wilcard_two(self
):
72 orig_filters
= {'something__in': ['item0*', 'item1*']}
73 orig_checks
= {'something__in': ['item0*', 'item1*']}
74 mytest
= action_common
.atest_list()
76 filters
= copy
.deepcopy(orig_filters
)
77 checks
= copy
.deepcopy(orig_checks
)
78 self
.god
.stub_function(sys
, 'exit')
79 sys
.exit
.expect_call(1).and_raises(cli_mock
.ExitException
)
81 self
.assertRaises(cli_mock
.ExitException
,
82 mytest
.check_for_wildcard
, filters
, checks
)
83 (out
, err
) = self
.god
.unmock_io()
84 self
.god
.check_playback()
85 self
.assertEqual(filters
, orig_filters
)
86 self
.assertEqual(checks
, orig_checks
)
89 def _atest_list_execute(self
, filters
={}, check_results
={}):
90 values
= [{u
'id': 180,
94 u
'kernel_config': u
''},
99 u
'kernel_config': u
''}]
100 mytest
= action_common
.atest_list()
101 mytest
.afe
= rpc
.afe_comm()
102 self
.mock_rpcs([('get_labels',
107 self
.assertEqual(values
,
108 mytest
.execute(op
='get_labels',
110 check_results
=check_results
))
111 (out
, err
) = self
.god
.unmock_io()
112 self
.god
.check_playback()
116 def test_atest_list_execute_no_filters(self
):
117 self
._atest
_list
_execute
()
120 def test_atest_list_execute_filters_all_good(self
):
123 filters
['name__in'] = ['label0', 'label1']
124 check_results
['name__in'] = 'name'
125 (out
, err
) = self
._atest
_list
_execute
(filters
, check_results
)
126 self
.assertEqual(err
, '')
129 def test_atest_list_execute_filters_good_and_bad(self
):
132 filters
['name__in'] = ['label0', 'label1', 'label2']
133 check_results
['name__in'] = 'name'
134 (out
, err
) = self
._atest
_list
_execute
(filters
, check_results
)
135 self
.assertWords(err
, ['Unknown', 'label2'])
138 def test_atest_list_execute_items_good_and_bad_no_check(self
):
141 filters
['name__in'] = ['label0', 'label1', 'label2']
142 check_results
['name__in'] = None
143 (out
, err
) = self
._atest
_list
_execute
(filters
, check_results
)
144 self
.assertEqual(err
, '')
147 def test_atest_list_execute_filters_wildcard(self
):
150 filters
['name__in'] = ['label*']
151 check_results
['name__in'] = 'name'
152 values
= [{u
'id': 180,
156 u
'kernel_config': u
''},
161 u
'kernel_config': u
''}]
162 mytest
= action_common
.atest_list()
163 mytest
.afe
= rpc
.afe_comm()
164 self
.mock_rpcs([('get_labels', {'name__startswith': 'label'},
167 self
.assertEqual(values
,
168 mytest
.execute(op
='get_labels',
170 check_results
=check_results
))
171 (out
, err
) = self
.god
.unmock_io()
172 self
.god
.check_playback()
173 self
.assertEqual(err
, '')
178 # Creation & Deletion of a topic (ACL, label, user)
180 class atest_create_or_delete_unittest(cli_mock
.cli_unittest
):
181 def _create_cr_del(self
, items
):
184 crdel
= action_common
.atest_create_or_delete()
185 crdel
.afe
= rpc
.afe_comm()
187 crdel
.topic
= crdel
.usage_topic
= 'label'
188 crdel
.op_action
= 'add'
189 crdel
.get_items
= _items
190 crdel
.data
['platform'] = False
191 crdel
.data_item_key
= 'name'
195 def test_execute_create_one_topic(self
):
196 acr
= self
._create
_cr
_del
(['label0'])
197 self
.mock_rpcs([('add_label',
198 {'name': 'label0', 'platform': False},
201 self
.god
.check_playback()
202 self
.assert_(['label0'], ret
)
205 def test_execute_create_two_topics(self
):
206 acr
= self
._create
_cr
_del
(['label0', 'label1'])
207 self
.mock_rpcs([('add_label',
208 {'name': 'label0', 'platform': False},
211 {'name': 'label1', 'platform': False},
214 self
.god
.check_playback()
215 self
.assertEqualNoOrder(['label0', 'label1'], ret
)
218 def test_execute_create_error(self
):
219 acr
= self
._create
_cr
_del
(['label0'])
220 self
.mock_rpcs([('add_label',
221 {'name': 'label0', 'platform': False},
224 {'name': 'This value must be unique (label0)'}''')])
226 self
.god
.check_playback()
227 self
.assertEqualNoOrder([], ret
)
232 # Adding or Removing users or hosts from a topic(ACL or label)
234 class atest_add_or_remove_unittest(cli_mock
.cli_unittest
):
235 def _create_add_remove(self
, items
, users
=None, hosts
=None):
238 addrm
= action_common
.atest_add_or_remove()
239 addrm
.afe
= rpc
.afe_comm()
245 addrm
.topic
= 'acl_group'
246 addrm
.msg_topic
= 'ACL'
247 addrm
.op_action
= 'add'
248 addrm
.msg_done
= 'Added to'
249 addrm
.get_items
= _items
253 def test__add_remove_uh_to_topic(self
):
254 acl_addrm
= self
._create
_add
_remove
('acl0',
255 users
=['user0', 'user1'])
256 self
.mock_rpcs([('acl_group_add_users',
258 'users': ['user0', 'user1']},
261 acl_addrm
._add
_remove
_uh
_to
_topic
('acl0', 'users')
262 self
.god
.check_playback()
265 def test__add_remove_uh_to_topic_raise(self
):
266 acl_addrm
= self
._create
_add
_remove
('acl0',
267 users
=['user0', 'user1'])
268 self
.assertRaises(AttributeError,
269 acl_addrm
._add
_remove
_uh
_to
_topic
,
273 def test_execute_add_or_remove_uh_to_topic_acl_users(self
):
274 acl_addrm
= self
._create
_add
_remove
('acl0',
275 users
=['user0', 'user1'])
276 self
.mock_rpcs([('acl_group_add_users',
278 'users': ['user0', 'user1']},
281 execute_result
= acl_addrm
.execute()
282 self
.god
.check_playback()
283 self
.assertEqualNoOrder(['acl0'], execute_result
['users'])
284 self
.assertEqual([], execute_result
['hosts'])
288 def test_execute_add_or_remove_uh_to_topic_acl_users_hosts(self
):
289 acl_addrm
= self
._create
_add
_remove
('acl0',
290 users
=['user0', 'user1'],
291 hosts
=['host0', 'host1'])
292 self
.mock_rpcs([('acl_group_add_users',
294 'users': ['user0', 'user1']},
297 ('acl_group_add_hosts',
299 'hosts': ['host0', 'host1']},
302 execute_result
= acl_addrm
.execute()
303 self
.god
.check_playback()
304 self
.assertEqualNoOrder(['acl0'], execute_result
['users'])
305 self
.assertEqualNoOrder(['acl0'], execute_result
['hosts'])
308 def test_execute_add_or_remove_uh_to_topic_acl_bad_users(self
):
309 acl_addrm
= self
._create
_add
_remove
('acl0',
310 users
=['user0', 'user1'])
311 self
.mock_rpcs([('acl_group_add_users',
313 'users': ['user0', 'user1']},
315 'DoesNotExist: The following users do not exist: '
317 execute_result
= acl_addrm
.execute()
318 self
.god
.check_playback()
319 self
.assertEqual([], execute_result
['users'])
320 self
.assertEqual([], execute_result
['hosts'])
321 self
.assertOutput(acl_addrm
, execute_result
,
322 err_words_ok
=['DoesNotExist',
323 'acl_group_add_users',
325 err_words_no
= ['acl_group_add_hosts'])
328 def test_execute_add_or_remove_uh_to_topic_acl_bad_users_partial(self
):
329 acl_addrm
= self
._create
_add
_remove
('acl0',
330 users
=['user0', 'user1'])
331 self
.mock_rpcs([('acl_group_add_users',
333 'users': ['user0', 'user1']},
335 'DoesNotExist: The following users do not exist: '
337 ('acl_group_add_users',
342 execute_result
= acl_addrm
.execute()
343 self
.god
.check_playback()
344 self
.assertEqual(['acl0'], execute_result
['users'])
345 self
.assertEqual([], execute_result
['hosts'])
346 self
.assertOutput(acl_addrm
, execute_result
,
347 out_words_ok
=["Added to ACL 'acl0'", 'user1'],
348 err_words_ok
=['DoesNotExist',
349 'acl_group_add_users',
351 err_words_no
= ['acl_group_add_hosts'])
354 def test_execute_add_or_remove_uh_to_topic_acl_bad_u_partial_kill(self
):
355 acl_addrm
= self
._create
_add
_remove
('acl0',
356 users
=['user0', 'user1'])
357 acl_addrm
.kill_on_failure
= True
358 self
.mock_rpcs([('acl_group_add_users',
360 'users': ['user0', 'user1']},
362 'DoesNotExist: The following users do not exist: '
364 sys
.exit
.expect_call(1).and_raises(cli_mock
.ExitException
)
366 self
.assertRaises(cli_mock
.ExitException
, acl_addrm
.execute
)
367 (out
, err
) = self
.god
.unmock_io()
368 self
.god
.check_playback()
369 self
._check
_output
(out
=out
, err
=err
,
370 err_words_ok
=['DoesNotExist',
371 'acl_group_add_users',
373 err_words_no
= ['acl_group_add_hosts'])
376 def test_execute_add_or_remove_uh_to_topic_acl_bad_users_good_hosts(self
):
377 acl_addrm
= self
._create
_add
_remove
('acl0',
378 users
=['user0', 'user1'],
379 hosts
=['host0', 'host1'])
380 self
.mock_rpcs([('acl_group_add_users',
382 'users': ['user0', 'user1']},
384 'DoesNotExist: The following users do not exist: '
386 ('acl_group_add_hosts',
388 'hosts': ['host0', 'host1']},
392 execute_result
= acl_addrm
.execute()
393 self
.god
.check_playback()
394 self
.assertEqual([], execute_result
['users'])
395 self
.assertEqual(['acl0'], execute_result
['hosts'])
396 self
.assertOutput(acl_addrm
, execute_result
,
397 out_words_ok
=["Added to ACL 'acl0' hosts:",
399 err_words_ok
=['DoesNotExist',
400 'acl_group_add_users',
402 err_words_no
= ['acl_group_add_hosts'])
405 def test_execute_add_or_remove_uh_to_topic_acl_good_users_bad_hosts(self
):
406 acl_addrm
= self
._create
_add
_remove
('acl0 with space',
407 users
=['user0', 'user1'],
408 hosts
=['host0', 'host1'])
409 self
.mock_rpcs([('acl_group_add_users',
410 {'id': 'acl0 with space',
411 'users': ['user0', 'user1']},
414 ('acl_group_add_hosts',
415 {'id': 'acl0 with space',
416 'hosts': ['host0', 'host1']},
418 'DoesNotExist: The following hosts do not exist: '
421 execute_result
= acl_addrm
.execute()
422 self
.god
.check_playback()
423 self
.assertEqual(['acl0 with space'], execute_result
['users'])
424 self
.assertEqual([], execute_result
['hosts'])
425 self
.assertOutput(acl_addrm
, execute_result
,
426 out_words_ok
=["Added to ACL 'acl0 with space' users:",
428 err_words_ok
=['DoesNotExist',
429 'acl_group_add_hosts',
431 err_words_no
= ['acl_group_add_users'])
434 def test_exe_add_or_remove_uh_to_topic_acl_good_u_bad_hosts_partial(self
):
435 acl_addrm
= self
._create
_add
_remove
('acl0',
436 users
=['user0', 'user1'],
437 hosts
=['host0', 'host1'])
438 self
.mock_rpcs([('acl_group_add_users',
440 'users': ['user0', 'user1']},
443 ('acl_group_add_hosts',
445 'hosts': ['host0', 'host1']},
447 'DoesNotExist: The following hosts do not exist: '
449 ('acl_group_add_hosts',
455 execute_result
= acl_addrm
.execute()
456 self
.god
.check_playback()
457 self
.assertEqual(['acl0'], execute_result
['users'])
458 self
.assertEqual(['acl0'], execute_result
['hosts'])
459 self
.assertOutput(acl_addrm
, execute_result
,
460 out_words_ok
=["Added to ACL 'acl0' users:",
461 "user0", "user1", "host0"],
462 err_words_ok
=['DoesNotExist',
463 'acl_group_add_hosts',
465 err_words_no
= ['acl_group_add_users'])
468 def test_execute_add_or_remove_uh_to_topic_acl_bad_users_bad_hosts(self
):
469 acl_addrm
= self
._create
_add
_remove
('acl0',
470 users
=['user0', 'user1'],
471 hosts
=['host0', 'host1'])
472 self
.mock_rpcs([('acl_group_add_users',
474 'users': ['user0', 'user1']},
476 'DoesNotExist: The following users do not exist: '
478 ('acl_group_add_hosts',
480 'hosts': ['host0', 'host1']},
482 'DoesNotExist: The following hosts do not exist: '
486 execute_result
= acl_addrm
.execute()
487 self
.god
.check_playback()
488 self
.assertEqual([], execute_result
['users'])
489 self
.assertEqual([], execute_result
['hosts'])
490 self
.assertOutput(acl_addrm
, execute_result
,
491 err_words_ok
=['DoesNotExist',
492 'acl_group_add_hosts',
494 'acl_group_add_users',
498 def test_execute_add_or_remove_uh_to_topic_acl_bad_u_bad_h_partial(self
):
499 acl_addrm
= self
._create
_add
_remove
('acl0',
500 users
=['user0', 'user1'],
501 hosts
=['host0', 'host1'])
502 self
.mock_rpcs([('acl_group_add_users',
504 'users': ['user0', 'user1']},
506 'DoesNotExist: The following users do not exist: '
508 ('acl_group_add_users',
513 ('acl_group_add_hosts',
515 'hosts': ['host0', 'host1']},
517 'DoesNotExist: The following hosts do not exist: '
519 ('acl_group_add_hosts',
524 execute_result
= acl_addrm
.execute()
525 self
.god
.check_playback()
526 self
.assertEqual(['acl0'], execute_result
['users'])
527 self
.assertEqual(['acl0'], execute_result
['hosts'])
528 self
.assertOutput(acl_addrm
, execute_result
,
529 out_words_ok
=["Added to ACL 'acl0' user:",
530 "Added to ACL 'acl0' host:",
532 err_words_ok
=['DoesNotExist',
533 'acl_group_add_hosts',
535 'acl_group_add_users',
539 def test_execute_add_or_remove_to_topic_bad_acl_uh(self
):
540 acl_addrm
= self
._create
_add
_remove
('acl0',
541 users
=['user0', 'user1'],
542 hosts
=['host0', 'host1'])
543 self
.mock_rpcs([('acl_group_add_users',
545 'users': ['user0', 'user1']},
547 'DoesNotExist: acl_group matching '
548 'query does not exist.'),
549 ('acl_group_add_hosts',
551 'hosts': ['host0', 'host1']},
553 'DoesNotExist: acl_group matching '
554 'query does not exist.')])
555 execute_result
= acl_addrm
.execute()
556 self
.god
.check_playback()
557 self
.assertEqual([], execute_result
['users'])
558 self
.assertEqual([], execute_result
['hosts'])
559 self
.assertOutput(acl_addrm
, execute_result
,
560 err_words_ok
=['DoesNotExist',
561 'acl_group_add_hosts',
562 'acl_group_add_users'])
565 if __name__
== '__main__':