~andrewjbeach/juju-ci-tools/make-local-patcher

« back to all changes in this revision

Viewing changes to tests/test_utility.py

  • Committer: Aaron Bentley
  • Date: 2016-07-08 14:26:06 UTC
  • mfrom: (1465.1.14 client-from-config-5)
  • mto: This revision was merged to the branch mainline in revision 1509.
  • Revision ID: aaron.bentley@canonical.com-20160708142606-4x5rpd5c9jw9bn6n
Merged client-from-config-5 into client-from-config.

Show diffs side-by-side

added added

removed removed

Lines of Context:
30
30
    _find_candidates,
31
31
    find_candidates,
32
32
    find_latest_branch_candidates,
 
33
    get_auth_token,
33
34
    get_candidates_path,
34
35
    get_deb_arch,
35
36
    get_winrm_certs,
40
41
    split_address_port,
41
42
    temp_dir,
42
43
    until_timeout,
43
 
    unqualified_model_name,
44
 
    qualified_model_name,
45
44
    wait_for_port,
46
45
    )
47
46
 
100
99
            '<config><authToken>{}</authToken></config>'.format(token))
101
100
 
102
101
 
 
102
class TestGetAuthToken(TestCase):
 
103
 
 
104
    def test_get_auth_token(self):
 
105
        with temp_dir() as root:
 
106
            write_config(root, 'job-name', 'foo')
 
107
            self.assertEqual(get_auth_token(root, 'job-name'), 'foo')
 
108
 
 
109
 
103
110
class TestFindCandidates(TestCase):
104
111
 
105
112
    def test__find_candidates_artifacts_default(self):
357
364
 
358
365
    def test_no_args(self):
359
366
        cmd_line = []
360
 
        parser = add_basic_testing_arguments(ArgumentParser(), deadline=True)
361
 
        with patch('utility.os.getenv', return_value=''):
362
 
            args = parser.parse_args(cmd_line)
 
367
        parser = add_basic_testing_arguments(ArgumentParser())
 
368
        with patch('utility.os.makedirs'):
 
369
            with patch('utility.os.getenv', return_value=''):
 
370
                args = parser.parse_args(cmd_line)
363
371
        self.assertEqual(args.env, 'lxd')
364
372
        self.assertEqual(args.juju_bin, '/usr/bin/juju')
365
373
 
366
 
        self.assertEqual(args.logs, None)
 
374
        logs_arg = args.logs.split("/")
 
375
        logs_ts = logs_arg[4]
 
376
        self.assertEqual(logs_arg[1:4], ['tmp', 'test_utility', 'logs'])
 
377
        self.assertTrue(logs_ts, datetime.strptime(logs_ts, "%Y%m%d%H%M%S"))
367
378
 
368
 
        temp_env_name_arg = args.temp_env_name.split("-")
369
 
        temp_env_name_ts = temp_env_name_arg[1]
370
 
        self.assertEqual(temp_env_name_arg[0:1], ['testutility'])
 
379
        temp_env_name_arg = args.temp_env_name.split("_")
 
380
        temp_env_name_ts = temp_env_name_arg[2]
 
381
        self.assertEqual(temp_env_name_arg[0:2], ['test', 'utility'])
371
382
        self.assertTrue(temp_env_name_ts,
372
383
                        datetime.strptime(temp_env_name_ts, "%Y%m%d%H%M%S"))
373
 
        self.assertEqual(temp_env_name_arg[2:4], ['temp', 'env'])
374
 
        self.assertIs(None, args.deadline)
 
384
        self.assertEqual(temp_env_name_arg[3:5], ['temp', 'env'])
 
385
 
 
386
        self.assertEqual(logs_ts, temp_env_name_ts)
375
387
 
376
388
    def test_default_binary(self):
377
389
        cmd_line = []
378
 
        with patch('utility.os.getenv', return_value='/tmp'):
379
 
            with patch('utility.os.path.isfile', return_value=True):
380
 
                parser = add_basic_testing_arguments(ArgumentParser())
381
 
                args = parser.parse_args(cmd_line)
 
390
        with patch('utility.os.makedirs'):
 
391
            with patch('utility.os.getenv', return_value='/tmp'):
 
392
                with patch('utility.os.path.isfile', return_value=True):
 
393
                    parser = add_basic_testing_arguments(ArgumentParser())
 
394
                    args = parser.parse_args(cmd_line)
382
395
        self.assertEqual(args.juju_bin, '/tmp/bin/juju')
383
396
 
384
397
    def test_positional_args(self):
385
398
        cmd_line = ['local', '/foo/juju', '/tmp/logs', 'testtest']
386
 
        parser = add_basic_testing_arguments(ArgumentParser(), deadline=True)
 
399
        parser = add_basic_testing_arguments(ArgumentParser())
387
400
        args = parser.parse_args(cmd_line)
388
401
        expected = Namespace(
389
402
            agent_url=None, debug=False, env='local', temp_env_name='testtest',
390
403
            juju_bin='/foo/juju', logs='/tmp/logs', series=None,
391
404
            verbose=logging.INFO, agent_stream=None, keep_env=False,
392
 
            upload_tools=False, bootstrap_host=None, machine=[], region=None,
393
 
            deadline=None)
 
405
            upload_tools=False, bootstrap_host=None, machine=[], region=None)
394
406
        self.assertEqual(args, expected)
395
407
 
396
408
    def test_positional_args_add_juju_bin_name(self):
397
409
        cmd_line = ['local', '/juju', '/tmp/logs', 'testtest']
398
 
        parser = add_basic_testing_arguments(ArgumentParser(), deadline=True)
 
410
        parser = add_basic_testing_arguments(ArgumentParser())
399
411
        args = parser.parse_args(cmd_line)
400
412
        self.assertEqual(args.juju_bin, '/juju')
401
413
 
402
414
    def test_positional_args_accepts_juju_exe(self):
403
415
        cmd_line = ['local', 'c:\\juju.exe', '/tmp/logs', 'testtest']
404
 
        parser = add_basic_testing_arguments(ArgumentParser(), deadline=True)
 
416
        parser = add_basic_testing_arguments(ArgumentParser())
405
417
        args = parser.parse_args(cmd_line)
406
418
        self.assertEqual(args.juju_bin, 'c:\\juju.exe')
407
419
 
429
441
            self.assertEqual(warned, [])
430
442
        self.assertEqual("", self.log_stream.getvalue())
431
443
 
432
 
    def test_no_warn_on_help(self):
433
 
        """Special case help should not generate a warning"""
434
 
        with warnings.catch_warnings(record=True) as warned:
435
 
            with patch('utility.sys.exit'):
436
 
                parser = add_basic_testing_arguments(ArgumentParser())
437
 
                cmd_line = ['-h']
438
 
                parser.parse_args(cmd_line)
439
 
                cmd_line = ['--help']
440
 
                parser.parse_args(cmd_line)
441
 
 
442
 
            self.assertEqual(warned, [])
443
 
 
444
444
    def test_warn_on_nonexistent_directory_creation(self):
445
445
        with warnings.catch_warnings(record=True) as warned:
446
446
            log_dir = mkdtemp()
454
454
                r"Not a directory " + log_dir)
455
455
            self.assertEqual("", self.log_stream.getvalue())
456
456
 
 
457
    def test_warn_on_directory_creation_failure(self):
 
458
        with warnings.catch_warnings(record=True) as warned:
 
459
            with patch('utility.os.makedirs', side_effect=OSError):
 
460
                cmd_line = []
 
461
                try:
 
462
                    parser = add_basic_testing_arguments(ArgumentParser())
 
463
                    parser.parse_args(cmd_line)
 
464
                except OSError:
 
465
                    # we catch our thrown OSError
 
466
                    pass
 
467
                else:
 
468
                    self.fail('No exception thrown after' +
 
469
                              ' directory creation failure')
 
470
                self.assertEqual(len(warned), 1)
 
471
                self.assertRegexpMatches(
 
472
                    str(warned[0].message),
 
473
                    r"Failed to create logging directory: /tmp/test_utility/" +
 
474
                    "logs/.*. Please specify empty folder or try again")
 
475
 
457
476
    def test_debug(self):
458
477
        cmd_line = ['local', '/foo/juju', '/tmp/logs', 'testtest', '--debug']
459
478
        parser = add_basic_testing_arguments(ArgumentParser())
531
550
        args = parser.parse_args(cmd_line)
532
551
        self.assertEqual('foo-bar', args.region)
533
552
 
534
 
    def test_deadline(self):
535
 
        now = datetime(2012, 11, 10, 9, 8, 7)
536
 
        cmd_line = ['--timeout', '300']
537
 
        parser = add_basic_testing_arguments(ArgumentParser(), deadline=True)
538
 
        with patch('utility.datetime') as dt_class:
539
 
            # Can't patch the utcnow method of datetime.datetime (because it's
540
 
            # C code?) but we can patch out the whole datetime class.
541
 
            dt_class.utcnow.return_value = now
542
 
            args = parser.parse_args(cmd_line)
543
 
        self.assertEqual(now + timedelta(seconds=300), args.deadline)
544
 
 
545
553
 
546
554
class TestRunCommand(TestCase):
547
555
 
628
636
            self.assertTrue(os.path.exists(d))
629
637
            self.assertTrue(os.path.exists(os.path.join(d, "a-file")))
630
638
        self.assertFalse(os.path.exists(p))
631
 
 
632
 
 
633
 
class TestUnqualifiedModelName(TestCase):
634
 
 
635
 
    def test_returns_just_model_name_when_passed_qualifed_full_username(self):
636
 
        self.assertEqual(
637
 
            unqualified_model_name('admin@local/default'),
638
 
            'default'
639
 
        )
640
 
 
641
 
    def test_returns_just_model_name_when_passed_just_username(self):
642
 
        self.assertEqual(
643
 
            unqualified_model_name('admin/default'),
644
 
            'default'
645
 
        )
646
 
 
647
 
    def test_returns_just_model_name_when_passed_no_username(self):
648
 
        self.assertEqual(
649
 
            unqualified_model_name('default'),
650
 
            'default'
651
 
        )
652
 
 
653
 
 
654
 
class TestQualifiedModelName(TestCase):
655
 
 
656
 
    def test_raises_valueerror_when_model_name_blank(self):
657
 
        with self.assertRaises(ValueError):
658
 
            qualified_model_name('', 'admin@local')
659
 
 
660
 
    def test_raises_valueerror_when_owner_name_blank(self):
661
 
        with self.assertRaises(ValueError):
662
 
            qualified_model_name('default', '')
663
 
 
664
 
    def test_raises_valueerror_when_owner_and_model_blank(self):
665
 
        with self.assertRaises(ValueError):
666
 
            qualified_model_name('', '')
667
 
 
668
 
    def test_raises_valueerror_when_owner_name_doesnt_match_model_owner(self):
669
 
        with self.assertRaises(ValueError):
670
 
            qualified_model_name('test/default', 'admin')
671
 
 
672
 
        with self.assertRaises(ValueError):
673
 
            qualified_model_name('test@local/default', 'admin@local')
674
 
 
675
 
    def test_returns_qualified_model_name_with_plain_model_name(self):
676
 
        self.assertEqual(
677
 
            qualified_model_name('default', 'admin@local'),
678
 
            'admin@local/default'
679
 
        )
680
 
 
681
 
        self.assertEqual(
682
 
            qualified_model_name('default', 'admin'),
683
 
            'admin/default'
684
 
        )
685
 
 
686
 
    def test_returns_qualified_model_name_with_model_name_with_owner(self):
687
 
        self.assertEqual(
688
 
            qualified_model_name('admin@local/default', 'admin@local'),
689
 
            'admin@local/default'
690
 
        )
691
 
 
692
 
        self.assertEqual(
693
 
            qualified_model_name('admin/default', 'admin'),
694
 
            'admin/default'
695
 
        )