1#!/usr/bin/python 2# 3# Copyright 2008 Google Inc. All Rights Reserved. 4 5"""Test for host.""" 6 7import unittest, os, sys 8 9import common 10from autotest_lib.cli import cli_mock, host 11from autotest_lib.client.common_lib import control_data 12 13CLIENT = control_data.CONTROL_TYPE_NAMES.CLIENT 14SERVER = control_data.CONTROL_TYPE_NAMES.SERVER 15 16class host_ut(cli_mock.cli_unittest): 17 def test_parse_lock_options_both_set(self): 18 hh = host.host() 19 class opt(object): 20 lock = True 21 unlock = True 22 options = opt() 23 self.usage = "unused" 24 sys.exit.expect_call(1).and_raises(cli_mock.ExitException) 25 self.god.mock_io() 26 self.assertRaises(cli_mock.ExitException, 27 hh._parse_lock_options, options) 28 self.god.unmock_io() 29 30 31 def test_cleanup_labels_with_platform(self): 32 labels = ['l0', 'l1', 'l2', 'p0', 'l3'] 33 hh = host.host() 34 self.assertEqual(['l0', 'l1', 'l2', 'l3'], 35 hh._cleanup_labels(labels, 'p0')) 36 37 38 def test_cleanup_labels_no_platform(self): 39 labels = ['l0', 'l1', 'l2', 'l3'] 40 hh = host.host() 41 self.assertEqual(['l0', 'l1', 'l2', 'l3'], 42 hh._cleanup_labels(labels)) 43 44 45 def test_cleanup_labels_with_non_avail_platform(self): 46 labels = ['l0', 'l1', 'l2', 'l3'] 47 hh = host.host() 48 self.assertEqual(['l0', 'l1', 'l2', 'l3'], 49 hh._cleanup_labels(labels, 'p0')) 50 51 52class host_list_unittest(cli_mock.cli_unittest): 53 def test_parse_host_not_required(self): 54 hl = host.host_list() 55 sys.argv = ['atest'] 56 (options, leftover) = hl.parse() 57 self.assertEqual([], hl.hosts) 58 self.assertEqual([], leftover) 59 60 61 def test_parse_with_hosts(self): 62 hl = host.host_list() 63 mfile = cli_mock.create_file('host0\nhost3\nhost4\n') 64 sys.argv = ['atest', 'host1', '--mlist', mfile.name, 'host3'] 65 (options, leftover) = hl.parse() 66 self.assertEqualNoOrder(['host0', 'host1','host3', 'host4'], 67 hl.hosts) 68 self.assertEqual(leftover, []) 69 mfile.clean() 70 71 72 def test_parse_with_labels(self): 73 hl = host.host_list() 74 sys.argv = ['atest', '--label', 'label0'] 75 (options, leftover) = hl.parse() 76 self.assertEqual(['label0'], hl.labels) 77 self.assertEqual(leftover, []) 78 79 80 def test_parse_with_multi_labels(self): 81 hl = host.host_list() 82 sys.argv = ['atest', '--label', 'label0,label2'] 83 (options, leftover) = hl.parse() 84 self.assertEqualNoOrder(['label0', 'label2'], hl.labels) 85 self.assertEqual(leftover, []) 86 87 88 def test_parse_with_escaped_commas_label(self): 89 hl = host.host_list() 90 sys.argv = ['atest', '--label', 'label\\,0'] 91 (options, leftover) = hl.parse() 92 self.assertEqual(['label,0'], hl.labels) 93 self.assertEqual(leftover, []) 94 95 96 def test_parse_with_escaped_commas_multi_labels(self): 97 hl = host.host_list() 98 sys.argv = ['atest', '--label', 'label\\,0,label\\,2'] 99 (options, leftover) = hl.parse() 100 self.assertEqualNoOrder(['label,0', 'label,2'], hl.labels) 101 self.assertEqual(leftover, []) 102 103 104 def test_parse_with_both(self): 105 hl = host.host_list() 106 mfile = cli_mock.create_file('host0\nhost3\nhost4\n') 107 sys.argv = ['atest', 'host1', '--mlist', mfile.name, 'host3', 108 '--label', 'label0'] 109 (options, leftover) = hl.parse() 110 self.assertEqualNoOrder(['host0', 'host1','host3', 'host4'], 111 hl.hosts) 112 self.assertEqual(['label0'], hl.labels) 113 self.assertEqual(leftover, []) 114 mfile.clean() 115 116 117 def test_execute_list_all_no_labels(self): 118 self.run_cmd(argv=['atest', 'host', 'list', '--ignore_site_file'], 119 rpcs=[('get_hosts', {}, 120 True, 121 [{u'status': u'Ready', 122 u'hostname': u'host0', 123 u'locked': False, 124 u'locked_by': 'user0', 125 u'lock_time': u'2008-07-23 12:54:15', 126 u'lock_reason': u'', 127 u'labels': [], 128 u'invalid': False, 129 u'synch_id': None, 130 u'platform': None, 131 u'shard': None, 132 u'id': 1}, 133 {u'status': u'Ready', 134 u'hostname': u'host1', 135 u'locked': True, 136 u'locked_by': 'user0', 137 u'lock_time': u'2008-07-23 12:54:15', 138 u'lock_reason': u'', 139 u'labels': [u'plat1'], 140 u'invalid': False, 141 u'synch_id': None, 142 u'platform': u'plat1', 143 u'shard': None, 144 u'id': 2}])], 145 out_words_ok=['host0', 'host1', 'Ready', 146 'plat1', 'False', 'True', 'None']) 147 148 149 def test_execute_list_all_with_labels(self): 150 self.run_cmd(argv=['atest', 'host', 'list', '--ignore_site_file'], 151 rpcs=[('get_hosts', {}, 152 True, 153 [{u'status': u'Ready', 154 u'hostname': u'host0', 155 u'locked': False, 156 u'locked_by': 'user0', 157 u'lock_time': u'2008-07-23 12:54:15', 158 u'lock_reason': u'', 159 u'labels': [u'label0', u'label1'], 160 u'invalid': False, 161 u'synch_id': None, 162 u'platform': None, 163 u'shard': None, 164 u'id': 1}, 165 {u'status': u'Ready', 166 u'hostname': u'host1', 167 u'locked': True, 168 u'locked_by': 'user0', 169 u'lock_time': u'2008-07-23 12:54:15', 170 u'lock_reason': u'', 171 u'labels': [u'label2', u'label3', u'plat1'], 172 u'invalid': False, 173 u'synch_id': None, 174 u'shard': None, 175 u'platform': u'plat1', 176 u'id': 2}])], 177 out_words_ok=['host0', 'host1', 'Ready', 'plat1', 178 'label0', 'label1', 'label2', 'label3', 179 'False', 'True', 'None']) 180 181 182 def test_execute_list_filter_one_host(self): 183 self.run_cmd(argv=['atest', 'host', 'list', 'host1', 184 '--ignore_site_file'], 185 rpcs=[('get_hosts', {'hostname__in': ['host1']}, 186 True, 187 [{u'status': u'Ready', 188 u'hostname': u'host1', 189 u'locked': True, 190 u'locked_by': 'user0', 191 u'lock_time': u'2008-07-23 12:54:15', 192 u'lock_reason': u'', 193 u'labels': [u'label2', u'label3', u'plat1'], 194 u'invalid': False, 195 u'synch_id': None, 196 u'platform': u'plat1', 197 u'shard': None, 198 u'id': 2}])], 199 out_words_ok=['host1', 'Ready', 'plat1', 200 'label2', 'label3', 'True', 'None'], 201 out_words_no=['host0', 'host2', 202 'label1', 'label4', 'False']) 203 204 205 def test_execute_list_filter_two_hosts(self): 206 mfile = cli_mock.create_file('host2') 207 self.run_cmd(argv=['atest', 'host', 'list', 'host1', 208 '--mlist', mfile.name, '--ignore_site_file'], 209 # This is a bit fragile as the list order may change... 210 rpcs=[('get_hosts', {'hostname__in': ['host2', 'host1']}, 211 True, 212 [{u'status': u'Ready', 213 u'hostname': u'host1', 214 u'locked': True, 215 u'locked_by': 'user0', 216 u'lock_time': u'2008-07-23 12:54:15', 217 u'lock_reason': u'', 218 u'labels': [u'label2', u'label3', u'plat1'], 219 u'invalid': False, 220 u'synch_id': None, 221 u'platform': u'plat1', 222 u'shard': None, 223 u'id': 2}, 224 {u'status': u'Ready', 225 u'hostname': u'host2', 226 u'locked': True, 227 u'locked_by': 'user0', 228 u'lock_time': u'2008-07-23 12:54:15', 229 u'lock_reason': u'', 230 u'labels': [u'label3', u'label4', u'plat1'], 231 u'invalid': False, 232 u'synch_id': None, 233 u'shard': None, 234 u'platform': u'plat1', 235 u'id': 3}])], 236 out_words_ok=['host1', 'Ready', 'plat1', 237 'label2', 'label3', 'True', 238 'host2', 'label4', 'None'], 239 out_words_no=['host0', 'label1', 'False']) 240 mfile.clean() 241 242 243 def test_execute_list_filter_two_hosts_one_not_found(self): 244 mfile = cli_mock.create_file('host2') 245 self.run_cmd(argv=['atest', 'host', 'list', 'host1', 246 '--mlist', mfile.name, '--ignore_site_file'], 247 # This is a bit fragile as the list order may change... 248 rpcs=[('get_hosts', {'hostname__in': ['host2', 'host1']}, 249 True, 250 [{u'status': u'Ready', 251 u'hostname': u'host2', 252 u'locked': True, 253 u'locked_by': 'user0', 254 u'lock_time': u'2008-07-23 12:54:15', 255 u'lock_reason': u'', 256 u'labels': [u'label3', u'label4', u'plat1'], 257 u'invalid': False, 258 u'synch_id': None, 259 u'shard': None, 260 u'platform': u'plat1', 261 u'id': 3}])], 262 out_words_ok=['Ready', 'plat1', 263 'label3', 'label4', 'True', 'None'], 264 out_words_no=['host1', 'False'], 265 err_words_ok=['host1']) 266 mfile.clean() 267 268 269 def test_execute_list_filter_two_hosts_none_found(self): 270 self.run_cmd(argv=['atest', 'host', 'list', 271 'host1', 'host2', '--ignore_site_file'], 272 # This is a bit fragile as the list order may change... 273 rpcs=[('get_hosts', {'hostname__in': ['host2', 'host1']}, 274 True, 275 [])], 276 out_words_ok=[], 277 out_words_no=['Hostname', 'Status'], 278 err_words_ok=['Unknown', 'host1', 'host2']) 279 280 281 def test_execute_list_filter_label(self): 282 self.run_cmd(argv=['atest', 'host', 'list', 283 '-b', 'label3', '--ignore_site_file'], 284 rpcs=[('get_hosts', {'labels__name__in': ['label3']}, 285 True, 286 [{u'status': u'Ready', 287 u'hostname': u'host1', 288 u'locked': True, 289 u'locked_by': 'user0', 290 u'lock_time': u'2008-07-23 12:54:15', 291 u'lock_reason': u'', 292 u'labels': [u'label2', u'label3', u'plat1'], 293 u'invalid': False, 294 u'synch_id': None, 295 u'platform': u'plat1', 296 u'shard': None, 297 u'id': 2}, 298 {u'status': u'Ready', 299 u'hostname': u'host2', 300 u'locked': True, 301 u'locked_by': 'user0', 302 u'lock_time': u'2008-07-23 12:54:15', 303 u'lock_reason': u'', 304 u'labels': [u'label3', u'label4', u'plat1'], 305 u'invalid': False, 306 u'shard': None, 307 u'synch_id': None, 308 u'platform': u'plat1', 309 u'id': 3}])], 310 out_words_ok=['host1', 'Ready', 'plat1', 311 'label2', 'label3', 'True', 312 'host2', 'label4', 'None'], 313 out_words_no=['host0', 'label1', 'False']) 314 315 316 def test_execute_list_filter_multi_labels(self): 317 self.run_cmd(argv=['atest', 'host', 'list', 318 '-b', 'label3,label2', '--ignore_site_file'], 319 rpcs=[('get_hosts', {'multiple_labels': ['label2', 320 'label3']}, 321 True, 322 [{u'status': u'Ready', 323 u'hostname': u'host1', 324 u'locked': True, 325 u'locked_by': 'user0', 326 u'lock_time': u'2008-07-23 12:54:15', 327 u'lock_reason': u'', 328 u'labels': [u'label2', u'label3', u'plat0'], 329 u'invalid': False, 330 u'synch_id': None, 331 u'shard': None, 332 u'platform': u'plat0', 333 u'id': 2}, 334 {u'status': u'Ready', 335 u'hostname': u'host3', 336 u'locked': True, 337 u'locked_by': 'user0', 338 u'lock_time': u'2008-07-23 12:54:15', 339 u'lock_reason': u'', 340 u'labels': [u'label3', u'label2', u'plat2'], 341 u'invalid': False, 342 u'synch_id': None, 343 u'shard': None, 344 u'platform': u'plat2', 345 u'id': 4}])], 346 out_words_ok=['host1', 'host3', 'Ready', 'plat0', 347 'label2', 'label3', 'plat2', 'None'], 348 out_words_no=['host2', 'label4', 'False', 'plat1']) 349 350 351 def test_execute_list_filter_three_labels(self): 352 self.run_cmd(argv=['atest', 'host', 'list', 353 '-b', 'label3,label2, label4', 354 '--ignore_site_file'], 355 rpcs=[('get_hosts', {'multiple_labels': ['label2', 356 'label3', 357 'label4']}, 358 True, 359 [{u'status': u'Ready', 360 u'hostname': u'host2', 361 u'locked': True, 362 u'locked_by': 'user0', 363 u'lock_time': u'2008-07-23 12:54:15', 364 u'lock_reason': u'', 365 u'labels': [u'label3', u'label2', u'label4', 366 u'plat1'], 367 u'invalid': False, 368 u'synch_id': None, 369 u'platform': u'plat1', 370 u'shard': None, 371 u'id': 3}])], 372 out_words_ok=['host2', 'plat1', 373 'label2', 'label3', 'label4', 'None'], 374 out_words_no=['host1', 'host3']) 375 376 377 def test_execute_list_filter_wild_labels(self): 378 self.run_cmd(argv=['atest', 'host', 'list', 379 '-b', 'label*', 380 '--ignore_site_file'], 381 rpcs=[('get_hosts', 382 {'labels__name__startswith': 'label'}, 383 True, 384 [{u'status': u'Ready', 385 u'hostname': u'host2', 386 u'locked': 1, 387 u'shard': None, 388 u'locked_by': 'user0', 389 u'lock_time': u'2008-07-23 12:54:15', 390 u'lock_reason': u'', 391 u'labels': [u'label3', u'label2', u'label4', 392 u'plat1'], 393 u'invalid': 0, 394 u'synch_id': None, 395 u'platform': u'plat1', 396 u'id': 3}])], 397 out_words_ok=['host2', 'plat1', 398 'label2', 'label3', 'label4', 'None'], 399 out_words_no=['host1', 'host3']) 400 401 402 def test_execute_list_filter_multi_labels_no_results(self): 403 self.run_cmd(argv=['atest', 'host', 'list', 404 '-b', 'label3,label2, ', '--ignore_site_file'], 405 rpcs=[('get_hosts', {'multiple_labels': ['label2', 406 'label3']}, 407 True, 408 [])], 409 out_words_ok=[], 410 out_words_no=['host1', 'host2', 'host3', 411 'label2', 'label3', 'label4']) 412 413 414 def test_execute_list_filter_label_and_hosts(self): 415 self.run_cmd(argv=['atest', 'host', 'list', 'host1', 416 '-b', 'label3', 'host2', '--ignore_site_file'], 417 rpcs=[('get_hosts', {'labels__name__in': ['label3'], 418 'hostname__in': ['host2', 'host1']}, 419 True, 420 [{u'status': u'Ready', 421 u'hostname': u'host1', 422 u'locked': True, 423 u'locked_by': 'user0', 424 u'lock_time': u'2008-07-23 12:54:15', 425 u'labels': [u'label2', u'label3', u'plat1'], 426 u'lock_reason': u'', 427 u'invalid': False, 428 u'synch_id': None, 429 u'platform': u'plat1', 430 u'shard': None, 431 u'id': 2}, 432 {u'status': u'Ready', 433 u'hostname': u'host2', 434 u'locked': True, 435 u'locked_by': 'user0', 436 u'lock_time': u'2008-07-23 12:54:15', 437 u'lock_reason': u'', 438 u'labels': [u'label3', u'label4', u'plat1'], 439 u'invalid': False, 440 u'synch_id': None, 441 u'shard': None, 442 u'platform': u'plat1', 443 u'id': 3}])], 444 out_words_ok=['host1', 'Ready', 'plat1', 445 'label2', 'label3', 'True', 446 'host2', 'label4', 'None'], 447 out_words_no=['host0', 'label1', 'False']) 448 449 450 def test_execute_list_filter_label_and_hosts_none(self): 451 self.run_cmd(argv=['atest', 'host', 'list', 'host1', 452 '-b', 'label3', 'host2', '--ignore_site_file'], 453 rpcs=[('get_hosts', {'labels__name__in': ['label3'], 454 'hostname__in': ['host2', 'host1']}, 455 True, 456 [])], 457 out_words_ok=[], 458 out_words_no=['Hostname', 'Status'], 459 err_words_ok=['Unknown', 'host1', 'host2']) 460 461 462 def test_execute_list_filter_status(self): 463 self.run_cmd(argv=['atest', 'host', 'list', 464 '-s', 'Ready', '--ignore_site_file'], 465 rpcs=[('get_hosts', {'status__in': ['Ready']}, 466 True, 467 [{u'status': u'Ready', 468 u'hostname': u'host1', 469 u'locked': True, 470 u'locked_by': 'user0', 471 u'lock_time': u'2008-07-23 12:54:15', 472 u'lock_reason': u'', 473 u'labels': [u'label2', u'label3', u'plat1'], 474 u'invalid': False, 475 u'synch_id': None, 476 u'platform': u'plat1', 477 u'shard': None, 478 u'id': 2}, 479 {u'status': u'Ready', 480 u'hostname': u'host2', 481 u'locked': True, 482 u'locked_by': 'user0', 483 u'lock_time': u'2008-07-23 12:54:15', 484 u'lock_reason': u'', 485 u'labels': [u'label3', u'label4', u'plat1'], 486 u'invalid': False, 487 u'synch_id': None, 488 u'shard': None, 489 u'platform': u'plat1', 490 u'id': 3}])], 491 out_words_ok=['host1', 'Ready', 'plat1', 492 'label2', 'label3', 'True', 493 'host2', 'label4', 'None'], 494 out_words_no=['host0', 'label1', 'False']) 495 496 497 498 def test_execute_list_filter_status_and_hosts(self): 499 self.run_cmd(argv=['atest', 'host', 'list', 'host1', 500 '-s', 'Ready', 'host2', '--ignore_site_file'], 501 rpcs=[('get_hosts', {'status__in': ['Ready'], 502 'hostname__in': ['host2', 'host1']}, 503 True, 504 [{u'status': u'Ready', 505 u'hostname': u'host1', 506 u'locked': True, 507 u'locked_by': 'user0', 508 u'lock_time': u'2008-07-23 12:54:15', 509 u'lock_reason': u'', 510 u'labels': [u'label2', u'label3', u'plat1'], 511 u'invalid': False, 512 u'synch_id': None, 513 u'platform': u'plat1', 514 u'shard': None, 515 u'id': 2}, 516 {u'status': u'Ready', 517 u'hostname': u'host2', 518 u'locked': True, 519 u'locked_by': 'user0', 520 u'lock_time': u'2008-07-23 12:54:15', 521 u'lock_reason': u'', 522 u'labels': [u'label3', u'label4', u'plat1'], 523 u'invalid': False, 524 u'synch_id': None, 525 u'shard': None, 526 u'platform': u'plat1', 527 u'id': 3}])], 528 out_words_ok=['host1', 'Ready', 'plat1', 529 'label2', 'label3', 'True', 530 'host2', 'label4', 'None'], 531 out_words_no=['host0', 'label1', 'False']) 532 533 534 def test_execute_list_filter_status_and_hosts_none(self): 535 self.run_cmd(argv=['atest', 'host', 'list', 'host1', 536 '--status', 'Repair', 537 'host2', '--ignore_site_file'], 538 rpcs=[('get_hosts', {'status__in': ['Repair'], 539 'hostname__in': ['host2', 'host1']}, 540 True, 541 [])], 542 out_words_ok=[], 543 out_words_no=['Hostname', 'Status'], 544 err_words_ok=['Unknown', 'host2']) 545 546 547 def test_execute_list_filter_statuses_and_hosts_none(self): 548 self.run_cmd(argv=['atest', 'host', 'list', 'host1', 549 '--status', 'Repair', 550 'host2', '--ignore_site_file'], 551 rpcs=[('get_hosts', {'status__in': ['Repair'], 552 'hostname__in': ['host2', 'host1']}, 553 True, 554 [])], 555 out_words_ok=[], 556 out_words_no=['Hostname', 'Status'], 557 err_words_ok=['Unknown', 'host2']) 558 559 560 def test_execute_list_filter_locked(self): 561 self.run_cmd(argv=['atest', 'host', 'list', 'host1', 562 '--locked', 'host2', '--ignore_site_file'], 563 rpcs=[('get_hosts', {'locked': True, 564 'hostname__in': ['host2', 'host1']}, 565 True, 566 [{u'status': u'Ready', 567 u'hostname': u'host1', 568 u'locked': True, 569 u'locked_by': 'user0', 570 u'lock_reason': u'', 571 u'lock_time': u'2008-07-23 12:54:15', 572 u'labels': [u'label2', u'label3', u'plat1'], 573 u'invalid': False, 574 u'synch_id': None, 575 u'platform': u'plat1', 576 u'shard': None, 577 u'id': 2}, 578 {u'status': u'Ready', 579 u'hostname': u'host2', 580 u'locked': True, 581 u'locked_by': 'user0', 582 u'lock_reason': u'', 583 u'lock_time': u'2008-07-23 12:54:15', 584 u'labels': [u'label3', u'label4', u'plat1'], 585 u'invalid': False, 586 u'synch_id': None, 587 u'shard': None, 588 u'platform': u'plat1', 589 u'id': 3}])], 590 out_words_ok=['host1', 'Ready', 'plat1', 591 'label2', 'label3', 'True', 592 'host2', 'label4', 'None'], 593 out_words_no=['host0', 'label1', 'False']) 594 595 596 def test_execute_list_filter_unlocked(self): 597 self.run_cmd(argv=['atest', 'host', 'list', 598 '--unlocked', '--ignore_site_file'], 599 rpcs=[('get_hosts', {'locked': False}, 600 True, 601 [{u'status': u'Ready', 602 u'hostname': u'host1', 603 u'locked': False, 604 u'locked_by': 'user0', 605 u'lock_time': u'2008-07-23 12:54:15', 606 u'lock_reason': u'', 607 u'labels': [u'label2', u'label3', u'plat1'], 608 u'invalid': False, 609 u'synch_id': None, 610 u'shard': None, 611 u'platform': u'plat1', 612 u'id': 2}, 613 {u'status': u'Ready', 614 u'hostname': u'host2', 615 u'locked': False, 616 u'locked_by': 'user0', 617 u'lock_time': u'2008-07-23 12:54:15', 618 u'lock_reason': u'', 619 u'labels': [u'label3', u'label4', u'plat1'], 620 u'invalid': False, 621 u'shard': None, 622 u'synch_id': None, 623 u'platform': u'plat1', 624 u'id': 3}])], 625 out_words_ok=['host1', 'Ready', 'plat1', 626 'label2', 'label3', 'False', 627 'host2', 'label4', 'None'], 628 out_words_no=['host0', 'label1', 'True']) 629 630 631class host_stat_unittest(cli_mock.cli_unittest): 632 def test_execute_stat_two_hosts(self): 633 # The order of RPCs between host1 and host0 could change... 634 self.run_cmd(argv=['atest', 'host', 'stat', 'host0', 'host1', 635 '--ignore_site_file'], 636 rpcs=[('get_hosts', {'hostname': 'host1'}, 637 True, 638 [{u'status': u'Ready', 639 u'hostname': u'host1', 640 u'locked': True, 641 u'lock_time': u'2008-07-23 12:54:15', 642 u'locked_by': 'user0', 643 u'lock_reason': u'', 644 u'protection': 'No protection', 645 u'labels': [u'label3', u'label4', u'plat1'], 646 u'invalid': False, 647 u'synch_id': None, 648 u'shard': None, 649 u'platform': u'plat1', 650 u'id': 3, 651 u'attributes': {}}]), 652 ('get_hosts', {'hostname': 'host0'}, 653 True, 654 [{u'status': u'Ready', 655 u'hostname': u'host0', 656 u'locked': False, 657 u'locked_by': 'user0', 658 u'lock_time': u'2008-07-23 12:54:15', 659 u'lock_reason': u'', 660 u'protection': u'No protection', 661 u'labels': [u'label0', u'plat0'], 662 u'invalid': False, 663 u'shard': None, 664 u'synch_id': None, 665 u'platform': u'plat0', 666 u'id': 2, 667 u'attributes': {}}]), 668 ('get_acl_groups', {'hosts__hostname': 'host1'}, 669 True, 670 [{u'description': u'', 671 u'hosts': [u'host0', u'host1'], 672 u'id': 1, 673 u'name': u'Everyone', 674 u'users': [u'user2', u'debug_user', u'user0']}]), 675 ('get_labels', {'host__hostname': 'host1'}, 676 True, 677 [{u'id': 2, 678 u'platform': 1, 679 u'name': u'jme', 680 u'invalid': False, 681 u'kernel_config': u''}]), 682 ('get_acl_groups', {'hosts__hostname': 'host0'}, 683 True, 684 [{u'description': u'', 685 u'hosts': [u'host0', u'host1'], 686 u'id': 1, 687 u'name': u'Everyone', 688 u'users': [u'user0', u'debug_user']}, 689 {u'description': u'myacl0', 690 u'hosts': [u'host0'], 691 u'id': 2, 692 u'name': u'acl0', 693 u'users': [u'user0']}]), 694 ('get_labels', {'host__hostname': 'host0'}, 695 True, 696 [{u'id': 4, 697 u'platform': 0, 698 u'name': u'label0', 699 u'invalid': False, 700 u'kernel_config': u''}, 701 {u'id': 5, 702 u'platform': 1, 703 u'name': u'plat0', 704 u'invalid': False, 705 u'kernel_config': u''}])], 706 out_words_ok=['host0', 'host1', 'plat0', 'plat1', 707 'Everyone', 'acl0', 'label0']) 708 709 710 def test_execute_stat_one_bad_host_verbose(self): 711 self.run_cmd(argv=['atest', 'host', 'stat', 'host0', 712 'host1', '-v', '--ignore_site_file'], 713 rpcs=[('get_hosts', {'hostname': 'host1'}, 714 True, 715 []), 716 ('get_hosts', {'hostname': 'host0'}, 717 True, 718 [{u'status': u'Ready', 719 u'hostname': u'host0', 720 u'locked': False, 721 u'locked_by': 'user0', 722 u'lock_time': u'2008-07-23 12:54:15', 723 u'lock_reason': u'', 724 u'protection': u'No protection', 725 u'labels': [u'label0', u'plat0'], 726 u'invalid': False, 727 u'synch_id': None, 728 u'platform': u'plat0', 729 u'id': 2, 730 u'attributes': {}}]), 731 ('get_acl_groups', {'hosts__hostname': 'host0'}, 732 True, 733 [{u'description': u'', 734 u'hosts': [u'host0', u'host1'], 735 u'id': 1, 736 u'name': u'Everyone', 737 u'users': [u'user0', u'debug_user']}, 738 {u'description': u'myacl0', 739 u'hosts': [u'host0'], 740 u'id': 2, 741 u'name': u'acl0', 742 u'users': [u'user0']}]), 743 ('get_labels', {'host__hostname': 'host0'}, 744 True, 745 [{u'id': 4, 746 u'platform': 0, 747 u'name': u'label0', 748 u'invalid': False, 749 u'kernel_config': u''}, 750 {u'id': 5, 751 u'platform': 1, 752 u'name': u'plat0', 753 u'invalid': False, 754 u'kernel_config': u''}])], 755 out_words_ok=['host0', 'plat0', 756 'Everyone', 'acl0', 'label0'], 757 out_words_no=['host1'], 758 err_words_ok=['host1', 'Unknown host'], 759 err_words_no=['host0']) 760 761 762 def test_execute_stat_one_bad_host(self): 763 self.run_cmd(argv=['atest', 'host', 'stat', 'host0', 'host1', 764 '--ignore_site_file'], 765 rpcs=[('get_hosts', {'hostname': 'host1'}, 766 True, 767 []), 768 ('get_hosts', {'hostname': 'host0'}, 769 True, 770 [{u'status': u'Ready', 771 u'hostname': u'host0', 772 u'locked': False, 773 u'locked_by': 'user0', 774 u'lock_time': u'2008-07-23 12:54:15', 775 u'lock_reason': u'', 776 u'protection': u'No protection', 777 u'labels': [u'label0', u'plat0'], 778 u'invalid': False, 779 u'synch_id': None, 780 u'platform': u'plat0', 781 u'id': 2, 782 u'attributes': {}}]), 783 ('get_acl_groups', {'hosts__hostname': 'host0'}, 784 True, 785 [{u'description': u'', 786 u'hosts': [u'host0', u'host1'], 787 u'id': 1, 788 u'name': u'Everyone', 789 u'users': [u'user0', u'debug_user']}, 790 {u'description': u'myacl0', 791 u'hosts': [u'host0'], 792 u'id': 2, 793 u'name': u'acl0', 794 u'users': [u'user0']}]), 795 ('get_labels', {'host__hostname': 'host0'}, 796 True, 797 [{u'id': 4, 798 u'platform': 0, 799 u'name': u'label0', 800 u'invalid': False, 801 u'kernel_config': u''}, 802 {u'id': 5, 803 u'platform': 1, 804 u'name': u'plat0', 805 u'invalid': False, 806 u'kernel_config': u''}])], 807 out_words_ok=['host0', 'plat0', 808 'Everyone', 'acl0', 'label0'], 809 out_words_no=['host1'], 810 err_words_ok=['host1', 'Unknown host'], 811 err_words_no=['host0']) 812 813 814 def test_execute_stat_wildcard(self): 815 # The order of RPCs between host1 and host0 could change... 816 self.run_cmd(argv=['atest', 'host', 'stat', 'ho*', 817 '--ignore_site_file'], 818 rpcs=[('get_hosts', {'hostname__startswith': 'ho'}, 819 True, 820 [{u'status': u'Ready', 821 u'hostname': u'host1', 822 u'locked': True, 823 u'lock_time': u'2008-07-23 12:54:15', 824 u'locked_by': 'user0', 825 u'lock_reason': u'', 826 u'protection': 'No protection', 827 u'labels': [u'label3', u'label4', u'plat1'], 828 u'invalid': False, 829 u'synch_id': None, 830 u'platform': u'plat1', 831 u'id': 3, 832 u'attributes': {}}, 833 {u'status': u'Ready', 834 u'hostname': u'host0', 835 u'locked': False, 836 u'locked_by': 'user0', 837 u'lock_time': u'2008-07-23 12:54:15', 838 u'lock_reason': u'', 839 u'protection': u'No protection', 840 u'labels': [u'label0', u'plat0'], 841 u'invalid': False, 842 u'synch_id': None, 843 u'platform': u'plat0', 844 u'id': 2, 845 u'attributes': {}}]), 846 ('get_acl_groups', {'hosts__hostname': 'host1'}, 847 True, 848 [{u'description': u'', 849 u'hosts': [u'host0', u'host1'], 850 u'id': 1, 851 u'name': u'Everyone', 852 u'users': [u'user2', u'debug_user', u'user0']}]), 853 ('get_labels', {'host__hostname': 'host1'}, 854 True, 855 [{u'id': 2, 856 u'platform': 1, 857 u'name': u'jme', 858 u'invalid': False, 859 u'kernel_config': u''}]), 860 ('get_acl_groups', {'hosts__hostname': 'host0'}, 861 True, 862 [{u'description': u'', 863 u'hosts': [u'host0', u'host1'], 864 u'id': 1, 865 u'name': u'Everyone', 866 u'users': [u'user0', u'debug_user']}, 867 {u'description': u'myacl0', 868 u'hosts': [u'host0'], 869 u'id': 2, 870 u'name': u'acl0', 871 u'users': [u'user0']}]), 872 ('get_labels', {'host__hostname': 'host0'}, 873 True, 874 [{u'id': 4, 875 u'platform': 0, 876 u'name': u'label0', 877 u'invalid': False, 878 u'kernel_config': u''}, 879 {u'id': 5, 880 u'platform': 1, 881 u'name': u'plat0', 882 u'invalid': False, 883 u'kernel_config': u''}])], 884 out_words_ok=['host0', 'host1', 'plat0', 'plat1', 885 'Everyone', 'acl0', 'label0']) 886 887 888 def test_execute_stat_wildcard_and_host(self): 889 # The order of RPCs between host1 and host0 could change... 890 self.run_cmd(argv=['atest', 'host', 'stat', 'ho*', 'newhost0', 891 '--ignore_site_file'], 892 rpcs=[('get_hosts', {'hostname': 'newhost0'}, 893 True, 894 [{u'status': u'Ready', 895 u'hostname': u'newhost0', 896 u'locked': False, 897 u'locked_by': 'user0', 898 u'lock_time': u'2008-07-23 12:54:15', 899 u'lock_reason': u'', 900 u'protection': u'No protection', 901 u'labels': [u'label0', u'plat0'], 902 u'invalid': False, 903 u'synch_id': None, 904 u'platform': u'plat0', 905 u'id': 5, 906 u'attributes': {}}]), 907 ('get_hosts', {'hostname__startswith': 'ho'}, 908 True, 909 [{u'status': u'Ready', 910 u'hostname': u'host1', 911 u'locked': True, 912 u'lock_time': u'2008-07-23 12:54:15', 913 u'locked_by': 'user0', 914 u'lock_reason': u'', 915 u'protection': 'No protection', 916 u'labels': [u'label3', u'label4', u'plat1'], 917 u'invalid': False, 918 u'synch_id': None, 919 u'platform': u'plat1', 920 u'id': 3, 921 u'attributes': {}}, 922 {u'status': u'Ready', 923 u'hostname': u'host0', 924 u'locked': False, 925 u'locked_by': 'user0', 926 u'lock_reason': u'', 927 u'protection': 'No protection', 928 u'lock_time': u'2008-07-23 12:54:15', 929 u'labels': [u'label0', u'plat0'], 930 u'invalid': False, 931 u'synch_id': None, 932 u'platform': u'plat0', 933 u'id': 2, 934 u'attributes': {}}]), 935 ('get_acl_groups', {'hosts__hostname': 'newhost0'}, 936 True, 937 [{u'description': u'', 938 u'hosts': [u'newhost0', 'host1'], 939 u'id': 42, 940 u'name': u'my_acl', 941 u'users': [u'user0', u'debug_user']}, 942 {u'description': u'my favorite acl', 943 u'hosts': [u'newhost0'], 944 u'id': 2, 945 u'name': u'acl10', 946 u'users': [u'user0']}]), 947 ('get_labels', {'host__hostname': 'newhost0'}, 948 True, 949 [{u'id': 4, 950 u'platform': 0, 951 u'name': u'label0', 952 u'invalid': False, 953 u'kernel_config': u''}, 954 {u'id': 5, 955 u'platform': 1, 956 u'name': u'plat0', 957 u'invalid': False, 958 u'kernel_config': u''}]), 959 ('get_acl_groups', {'hosts__hostname': 'host1'}, 960 True, 961 [{u'description': u'', 962 u'hosts': [u'host0', u'host1'], 963 u'id': 1, 964 u'name': u'Everyone', 965 u'users': [u'user2', u'debug_user', u'user0']}]), 966 ('get_labels', {'host__hostname': 'host1'}, 967 True, 968 [{u'id': 2, 969 u'platform': 1, 970 u'name': u'jme', 971 u'invalid': False, 972 u'kernel_config': u''}]), 973 ('get_acl_groups', {'hosts__hostname': 'host0'}, 974 True, 975 [{u'description': u'', 976 u'hosts': [u'host0', u'host1'], 977 u'id': 1, 978 u'name': u'Everyone', 979 u'users': [u'user0', u'debug_user']}, 980 {u'description': u'myacl0', 981 u'hosts': [u'host0'], 982 u'id': 2, 983 u'name': u'acl0', 984 u'users': [u'user0']}]), 985 ('get_labels', {'host__hostname': 'host0'}, 986 True, 987 [{u'id': 4, 988 u'platform': 0, 989 u'name': u'label0', 990 u'invalid': False, 991 u'kernel_config': u''}, 992 {u'id': 5, 993 u'platform': 1, 994 u'name': u'plat0', 995 u'invalid': False, 996 u'kernel_config': u''}])], 997 out_words_ok=['host0', 'host1', 'newhost0', 998 'plat0', 'plat1', 999 'Everyone', 'acl10', 'label0']) 1000 1001 1002class host_jobs_unittest(cli_mock.cli_unittest): 1003 def test_execute_jobs_one_host(self): 1004 self.run_cmd(argv=['atest', 'host', 'jobs', 'host0', 1005 '--ignore_site_file'], 1006 rpcs=[('get_host_queue_entries', 1007 {'host__hostname': 'host0', 'query_limit': 20, 1008 'sort_by': ['-job__id']}, 1009 True, 1010 [{u'status': u'Failed', 1011 u'complete': 1, 1012 u'host': {u'status': u'Ready', 1013 u'locked': True, 1014 u'locked_by': 'user0', 1015 u'hostname': u'host0', 1016 u'invalid': False, 1017 u'id': 3232, 1018 u'synch_id': None}, 1019 u'priority': 0, 1020 u'meta_host': u'meta0', 1021 u'job': {u'control_file': 1022 (u"def step_init():\n" 1023 "\tjob.next_step([step_test])\n" 1024 "\ttestkernel = job.kernel(" 1025 "'kernel-smp-2.6.xyz.x86_64.rpm')\n" 1026 "\ttestkernel.install()\n" 1027 "\ttestkernel.boot()\n\n" 1028 "def step_test():\n" 1029 "\tjob.run_test('kernbench')\n\n"), 1030 u'name': u'kernel-smp-2.6.xyz.x86_64', 1031 u'control_type': CLIENT, 1032 u'synchronizing': None, 1033 u'priority': u'Low', 1034 u'owner': u'user0', 1035 u'created_on': u'2008-01-09 10:45:12', 1036 u'synch_count': None, 1037 u'synch_type': u'Asynchronous', 1038 u'id': 216}, 1039 u'active': 0, 1040 u'id': 2981}, 1041 {u'status': u'Aborted', 1042 u'complete': 1, 1043 u'host': {u'status': u'Ready', 1044 u'locked': True, 1045 u'locked_by': 'user0', 1046 u'hostname': u'host0', 1047 u'invalid': False, 1048 u'id': 3232, 1049 u'synch_id': None}, 1050 u'priority': 0, 1051 u'meta_host': None, 1052 u'job': {u'control_file': 1053 u"job.run_test('sleeptest')\n\n", 1054 u'name': u'testjob', 1055 u'control_type': CLIENT, 1056 u'synchronizing': 0, 1057 u'priority': u'Low', 1058 u'owner': u'user1', 1059 u'created_on': u'2008-01-17 15:04:53', 1060 u'synch_count': None, 1061 u'synch_type': u'Asynchronous', 1062 u'id': 289}, 1063 u'active': 0, 1064 u'id': 3167}])], 1065 out_words_ok=['216', 'user0', 'Failed', 1066 'kernel-smp-2.6.xyz.x86_64', 'Aborted', 1067 '289', 'user1', 'Aborted', 1068 'testjob']) 1069 1070 1071 def test_execute_jobs_wildcard(self): 1072 self.run_cmd(argv=['atest', 'host', 'jobs', 'ho*', 1073 '--ignore_site_file'], 1074 rpcs=[('get_hosts', {'hostname__startswith': 'ho'}, 1075 True, 1076 [{u'status': u'Ready', 1077 u'hostname': u'host1', 1078 u'locked': True, 1079 u'lock_time': u'2008-07-23 12:54:15', 1080 u'locked_by': 'user0', 1081 u'labels': [u'label3', u'label4', u'plat1'], 1082 u'invalid': False, 1083 u'synch_id': None, 1084 u'platform': u'plat1', 1085 u'id': 3}, 1086 {u'status': u'Ready', 1087 u'hostname': u'host0', 1088 u'locked': False, 1089 u'locked_by': 'user0', 1090 u'lock_time': u'2008-07-23 12:54:15', 1091 u'labels': [u'label0', u'plat0'], 1092 u'invalid': False, 1093 u'synch_id': None, 1094 u'platform': u'plat0', 1095 u'id': 2}]), 1096 ('get_host_queue_entries', 1097 {'host__hostname': 'host1', 'query_limit': 20, 1098 'sort_by': ['-job__id']}, 1099 True, 1100 [{u'status': u'Failed', 1101 u'complete': 1, 1102 u'host': {u'status': u'Ready', 1103 u'locked': True, 1104 u'locked_by': 'user0', 1105 u'hostname': u'host1', 1106 u'invalid': False, 1107 u'id': 3232, 1108 u'synch_id': None}, 1109 u'priority': 0, 1110 u'meta_host': u'meta0', 1111 u'job': {u'control_file': 1112 (u"def step_init():\n" 1113 "\tjob.next_step([step_test])\n" 1114 "\ttestkernel = job.kernel(" 1115 "'kernel-smp-2.6.xyz.x86_64.rpm')\n" 1116 "\ttestkernel.install()\n" 1117 "\ttestkernel.boot()\n\n" 1118 "def step_test():\n" 1119 "\tjob.run_test('kernbench')\n\n"), 1120 u'name': u'kernel-smp-2.6.xyz.x86_64', 1121 u'control_type': CLIENT, 1122 u'synchronizing': None, 1123 u'priority': u'Low', 1124 u'owner': u'user0', 1125 u'created_on': u'2008-01-09 10:45:12', 1126 u'synch_count': None, 1127 u'synch_type': u'Asynchronous', 1128 u'id': 216}, 1129 u'active': 0, 1130 u'id': 2981}, 1131 {u'status': u'Aborted', 1132 u'complete': 1, 1133 u'host': {u'status': u'Ready', 1134 u'locked': True, 1135 u'locked_by': 'user0', 1136 u'hostname': u'host1', 1137 u'invalid': False, 1138 u'id': 3232, 1139 u'synch_id': None}, 1140 u'priority': 0, 1141 u'meta_host': None, 1142 u'job': {u'control_file': 1143 u"job.run_test('sleeptest')\n\n", 1144 u'name': u'testjob', 1145 u'control_type': CLIENT, 1146 u'synchronizing': 0, 1147 u'priority': u'Low', 1148 u'owner': u'user1', 1149 u'created_on': u'2008-01-17 15:04:53', 1150 u'synch_count': None, 1151 u'synch_type': u'Asynchronous', 1152 u'id': 289}, 1153 u'active': 0, 1154 u'id': 3167}]), 1155 ('get_host_queue_entries', 1156 {'host__hostname': 'host0', 'query_limit': 20, 1157 'sort_by': ['-job__id']}, 1158 True, 1159 [{u'status': u'Failed', 1160 u'complete': 1, 1161 u'host': {u'status': u'Ready', 1162 u'locked': True, 1163 u'locked_by': 'user0', 1164 u'hostname': u'host0', 1165 u'invalid': False, 1166 u'id': 3232, 1167 u'synch_id': None}, 1168 u'priority': 0, 1169 u'meta_host': u'meta0', 1170 u'job': {u'control_file': 1171 (u"def step_init():\n" 1172 "\tjob.next_step([step_test])\n" 1173 "\ttestkernel = job.kernel(" 1174 "'kernel-smp-2.6.xyz.x86_64.rpm')\n" 1175 "\ttestkernel.install()\n" 1176 "\ttestkernel.boot()\n\n" 1177 "def step_test():\n" 1178 "\tjob.run_test('kernbench')\n\n"), 1179 u'name': u'kernel-smp-2.6.xyz.x86_64', 1180 u'control_type': CLIENT, 1181 u'synchronizing': None, 1182 u'priority': u'Low', 1183 u'owner': u'user0', 1184 u'created_on': u'2008-01-09 10:45:12', 1185 u'synch_count': None, 1186 u'synch_type': u'Asynchronous', 1187 u'id': 216}, 1188 u'active': 0, 1189 u'id': 2981}, 1190 {u'status': u'Aborted', 1191 u'complete': 1, 1192 u'host': {u'status': u'Ready', 1193 u'locked': True, 1194 u'locked_by': 'user0', 1195 u'hostname': u'host0', 1196 u'invalid': False, 1197 u'id': 3232, 1198 u'synch_id': None}, 1199 u'priority': 0, 1200 u'meta_host': None, 1201 u'job': {u'control_file': 1202 u"job.run_test('sleeptest')\n\n", 1203 u'name': u'testjob', 1204 u'control_type': CLIENT, 1205 u'synchronizing': 0, 1206 u'priority': u'Low', 1207 u'owner': u'user1', 1208 u'created_on': u'2008-01-17 15:04:53', 1209 u'synch_count': None, 1210 u'synch_type': u'Asynchronous', 1211 u'id': 289}, 1212 u'active': 0, 1213 u'id': 3167}])], 1214 out_words_ok=['216', 'user0', 'Failed', 1215 'kernel-smp-2.6.xyz.x86_64', 'Aborted', 1216 '289', 'user1', 'Aborted', 1217 'testjob']) 1218 1219 1220 def test_execute_jobs_one_host_limit(self): 1221 self.run_cmd(argv=['atest', 'host', 'jobs', 'host0', 1222 '--ignore_site_file', '-q', '10'], 1223 rpcs=[('get_host_queue_entries', 1224 {'host__hostname': 'host0', 'query_limit': 10, 1225 'sort_by': ['-job__id']}, 1226 True, 1227 [{u'status': u'Failed', 1228 u'complete': 1, 1229 u'host': {u'status': u'Ready', 1230 u'locked': True, 1231 u'locked_by': 'user0', 1232 u'hostname': u'host0', 1233 u'invalid': False, 1234 u'id': 3232, 1235 u'synch_id': None}, 1236 u'priority': 0, 1237 u'meta_host': u'meta0', 1238 u'job': {u'control_file': 1239 (u"def step_init():\n" 1240 "\tjob.next_step([step_test])\n" 1241 "\ttestkernel = job.kernel(" 1242 "'kernel-smp-2.6.xyz.x86_64.rpm')\n" 1243 "\ttestkernel.install()\n" 1244 "\ttestkernel.boot()\n\n" 1245 "def step_test():\n" 1246 "\tjob.run_test('kernbench')\n\n"), 1247 u'name': u'kernel-smp-2.6.xyz.x86_64', 1248 u'control_type': CLIENT, 1249 u'synchronizing': None, 1250 u'priority': u'Low', 1251 u'owner': u'user0', 1252 u'created_on': u'2008-01-09 10:45:12', 1253 u'synch_count': None, 1254 u'synch_type': u'Asynchronous', 1255 u'id': 216}, 1256 u'active': 0, 1257 u'id': 2981}, 1258 {u'status': u'Aborted', 1259 u'complete': 1, 1260 u'host': {u'status': u'Ready', 1261 u'locked': True, 1262 u'locked_by': 'user0', 1263 u'hostname': u'host0', 1264 u'invalid': False, 1265 u'id': 3232, 1266 u'synch_id': None}, 1267 u'priority': 0, 1268 u'meta_host': None, 1269 u'job': {u'control_file': 1270 u"job.run_test('sleeptest')\n\n", 1271 u'name': u'testjob', 1272 u'control_type': CLIENT, 1273 u'synchronizing': 0, 1274 u'priority': u'Low', 1275 u'owner': u'user1', 1276 u'created_on': u'2008-01-17 15:04:53', 1277 u'synch_count': None, 1278 u'synch_type': u'Asynchronous', 1279 u'id': 289}, 1280 u'active': 0, 1281 u'id': 3167}])], 1282 out_words_ok=['216', 'user0', 'Failed', 1283 'kernel-smp-2.6.xyz.x86_64', 'Aborted', 1284 '289', 'user1', 'Aborted', 1285 'testjob']) 1286 1287 1288class host_mod_unittest(cli_mock.cli_unittest): 1289 def test_execute_lock_one_host(self): 1290 self.run_cmd(argv=['atest', 'host', 'mod', 1291 '--lock', 'host0', '--ignore_site_file'], 1292 rpcs=[('modify_host', {'id': 'host0', 'locked': True}, 1293 True, None)], 1294 out_words_ok=['Locked', 'host0']) 1295 1296 1297 def test_execute_unlock_two_hosts(self): 1298 self.run_cmd(argv=['atest', 'host', 'mod', 1299 '-u', 'host0,host1', '--ignore_site_file'], 1300 rpcs=[('modify_host', {'id': 'host1', 'locked': False, 1301 'lock_reason': ''}, 1302 True, None), 1303 ('modify_host', {'id': 'host0', 'locked': False, 1304 'lock_reason': ''}, 1305 True, None)], 1306 out_words_ok=['Unlocked', 'host0', 'host1']) 1307 1308 1309 def test_execute_force_lock_one_host(self): 1310 self.run_cmd(argv=['atest', 'host', 'mod', 1311 '--lock', '--force_modify_locking', 'host0', 1312 '--ignore_site_file'], 1313 rpcs=[('modify_host', 1314 {'id': 'host0', 'locked': True, 1315 'force_modify_locking': True}, 1316 True, None)], 1317 out_words_ok=['Locked', 'host0']) 1318 1319 1320 def test_execute_force_unlock_one_host(self): 1321 self.run_cmd(argv=['atest', 'host', 'mod', 1322 '--unlock', '--force_modify_locking', 'host0', 1323 '--ignore_site_file'], 1324 rpcs=[('modify_host', 1325 {'id': 'host0', 'locked': False, 1326 'force_modify_locking': True, 1327 'lock_reason': ''}, 1328 True, None)], 1329 out_words_ok=['Unlocked', 'host0']) 1330 1331 1332 def test_execute_lock_unknown_hosts(self): 1333 self.run_cmd(argv=['atest', 'host', 'mod', 1334 '-l', 'host0,host1', 'host2', '--ignore_site_file'], 1335 rpcs=[('modify_host', {'id': 'host2', 'locked': True}, 1336 True, None), 1337 ('modify_host', {'id': 'host1', 'locked': True}, 1338 False, 'DoesNotExist: Host matching ' 1339 'query does not exist.'), 1340 ('modify_host', {'id': 'host0', 'locked': True}, 1341 True, None)], 1342 out_words_ok=['Locked', 'host0', 'host2'], 1343 err_words_ok=['Host', 'matching', 'query', 'host1']) 1344 1345 1346 def test_execute_protection_hosts(self): 1347 mfile = cli_mock.create_file('host0\nhost1,host2\nhost3 host4') 1348 self.run_cmd(argv=['atest', 'host', 'mod', '--protection', 1349 'Do not repair', 1350 'host5' ,'--mlist', mfile.name, 'host1', 'host6', 1351 '--ignore_site_file'], 1352 rpcs=[('modify_host', {'id': 'host6', 1353 'protection': 'Do not repair'}, 1354 True, None), 1355 ('modify_host', {'id': 'host5', 1356 'protection': 'Do not repair'}, 1357 True, None), 1358 ('modify_host', {'id': 'host4', 1359 'protection': 'Do not repair'}, 1360 True, None), 1361 ('modify_host', {'id': 'host3', 1362 'protection': 'Do not repair'}, 1363 True, None), 1364 ('modify_host', {'id': 'host2', 1365 'protection': 'Do not repair'}, 1366 True, None), 1367 ('modify_host', {'id': 'host1', 1368 'protection': 'Do not repair'}, 1369 True, None), 1370 ('modify_host', {'id': 'host0', 1371 'protection': 'Do not repair'}, 1372 True, None)], 1373 out_words_ok=['Do not repair', 'host0', 'host1', 'host2', 1374 'host3', 'host4', 'host5', 'host6']) 1375 mfile.clean() 1376 1377 1378 1379class host_create_unittest(cli_mock.cli_unittest): 1380 def test_execute_create_muliple_hosts_all_options(self): 1381 self.run_cmd(argv=['atest', 'host', 'create', '--lock', 1382 '-b', 'label0', '--acls', 'acl0', 'host0', 'host1', 1383 '--ignore_site_file'], 1384 rpcs=[('get_labels', {'name': 'label0'}, 1385 True, 1386 [{u'id': 4, 1387 u'platform': 0, 1388 u'name': u'label0', 1389 u'invalid': False, 1390 u'kernel_config': u''}]), 1391 ('get_acl_groups', {'name': 'acl0'}, 1392 True, []), 1393 ('add_acl_group', {'name': 'acl0'}, 1394 True, 5), 1395 ('add_host', {'hostname': 'host1', 1396 'status': 'Ready', 1397 'locked': True}, 1398 True, 42), 1399 ('host_add_labels', {'id': 'host1', 1400 'labels': ['label0']}, 1401 True, None), 1402 ('add_host', {'hostname': 'host0', 1403 'status': 'Ready', 1404 'locked': True}, 1405 True, 42), 1406 ('host_add_labels', {'id': 'host0', 1407 'labels': ['label0']}, 1408 True, None), 1409 ('acl_group_add_hosts', 1410 {'id': 'acl0', 'hosts': ['host1', 'host0']}, 1411 True, None)], 1412 out_words_ok=['host0', 'host1']) 1413 1414 1415 def test_execute_create_muliple_hosts_unlocked(self): 1416 self.run_cmd(argv=['atest', 'host', 'create', 1417 '-b', 'label0', '--acls', 'acl0', 'host0', 'host1', 1418 '--ignore_site_file'], 1419 rpcs=[('get_labels', {'name': 'label0'}, 1420 True, 1421 [{u'id': 4, 1422 u'platform': 0, 1423 u'name': u'label0', 1424 u'invalid': False, 1425 u'kernel_config': u''}]), 1426 ('get_acl_groups', {'name': 'acl0'}, 1427 True, []), 1428 ('add_acl_group', {'name': 'acl0'}, 1429 True, 5), 1430 ('add_host', {'hostname': 'host1', 1431 'status': 'Ready', 1432 'locked': True, 1433 'lock_reason': 'Forced lock on device creation'}, 1434 True, 42), 1435 ('host_add_labels', {'id': 'host1', 1436 'labels': ['label0']}, 1437 True, None), 1438 ('add_host', {'hostname': 'host0', 1439 'status': 'Ready', 1440 'locked': True, 1441 'lock_reason': 'Forced lock on device creation'}, 1442 True, 42), 1443 ('host_add_labels', {'id': 'host0', 1444 'labels': ['label0']}, 1445 True, None), 1446 ('acl_group_add_hosts', 1447 {'id': 'acl0', 'hosts': ['host1', 'host0']}, 1448 True, None), 1449 ('modify_host', {'id': 'host1', 'locked': False, 1450 'lock_reason': ''}, 1451 True, None), 1452 ('modify_host', {'id': 'host0', 'locked': False, 1453 'lock_reason': ''}, 1454 True, None)], 1455 out_words_ok=['host0', 'host1']) 1456 1457 1458 def test_execute_create_muliple_hosts_label_escaped_quotes(self): 1459 self.run_cmd(argv=['atest', 'host', 'create', 1460 '-b', 'label0,label\\,1,label\\,2', 1461 '--acls', 'acl0', 'host0', 'host1', 1462 '--ignore_site_file'], 1463 rpcs=[('get_labels', {'name': 'label0'}, 1464 True, 1465 [{u'id': 4, 1466 u'platform': 0, 1467 u'name': u'label0', 1468 u'invalid': False, 1469 u'kernel_config': u''}]), 1470 ('get_labels', {'name': 'label,1'}, 1471 True, 1472 [{u'id': 4, 1473 u'platform': 0, 1474 u'name': u'label,1', 1475 u'invalid': False, 1476 u'kernel_config': u''}]), 1477 ('get_labels', {'name': 'label,2'}, 1478 True, 1479 [{u'id': 4, 1480 u'platform': 0, 1481 u'name': u'label,2', 1482 u'invalid': False, 1483 u'kernel_config': u''}]), 1484 ('get_acl_groups', {'name': 'acl0'}, 1485 True, []), 1486 ('add_acl_group', {'name': 'acl0'}, 1487 True, 5), 1488 ('add_host', {'hostname': 'host1', 1489 'status': 'Ready', 1490 'locked': True, 1491 'lock_reason': 'Forced lock on device creation'}, 1492 True, 42), 1493 ('host_add_labels', {'id': 'host1', 1494 'labels': ['label0', 'label,1', 1495 'label,2']}, 1496 True, None), 1497 ('add_host', {'hostname': 'host0', 1498 'status': 'Ready', 1499 'locked': True, 1500 'lock_reason': 'Forced lock on device creation'}, 1501 True, 42), 1502 ('host_add_labels', {'id': 'host0', 1503 'labels': ['label0', 'label,1', 1504 'label,2']}, 1505 True, None), 1506 ('acl_group_add_hosts', 1507 {'id': 'acl0', 'hosts': ['host1', 'host0']}, 1508 True, None), 1509 ('modify_host', {'id': 'host1', 'locked': False, 1510 'lock_reason': ''}, 1511 True, None), 1512 ('modify_host', {'id': 'host0', 'locked': False, 1513 'lock_reason': ''}, 1514 True, None)], 1515 out_words_ok=['host0', 'host1']) 1516 1517 1518if __name__ == '__main__': 1519 unittest.main() 1520