~hduran-8/juju-ci-tools/add_status_ci_tests

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
from unittest import TestCase
from argparse import Namespace

from mock import (
    call,
    patch,
    )

from industrial_test import (
    FULL,
    suites,
    UPGRADE,
    )
from jujuci import Credentials
from schedule_reliability_tests import (
    build_job,
    parse_args,
    )
from test_utility import (
    parse_error,
    write_config,
    )
from utility import temp_dir


class TestParseArgs(TestCase):

    def test_parse_args(self):
        args, credentials = parse_args([
            'foo', '--user', 'jrandom', '--password', 'password1'])
        self.assertEqual(
            args,
            Namespace(root_dir='foo', suite=[], jobs=None, user='jrandom',
                      password='password1'))
        self.assertEqual(credentials,
                         Credentials(user='jrandom', password='password1'))

    def test_parse_args_suite_supports_known_suites(self):
        for suite in suites.keys():
            self.assertEqual(
                parse_args([
                    'foo', '--suite', suite, '--user', 'u', '--password',
                    'p'])[0],
                Namespace(root_dir='foo', suite=[suite], jobs=None,
                          user='u', password='p'))

    def test_parse_args_bad_suite(self):
        with parse_error(self) as stderr:
            parse_args(['foo', '--suite', 'foo'])
        self.assertRegexpMatches(stderr.getvalue(),
                                 ".*invalid choice: 'foo'.*")

    def test_parse_args_multi_suite(self):
        args = parse_args(['foo', '--suite', FULL, '--suite', UPGRADE,
                           '--user=u', '--password=p'])[0]
        self.assertEqual(args.suite, [FULL, UPGRADE])

    def test_parse_jobs(self):
        self.assertEqual(
            parse_args(['foo', 'bar', '--user', 'jrandom', '--password',
                        'password1'])[0],
            Namespace(root_dir='foo', suite=[], jobs=['bar'], user='jrandom',
                      password='password1'))
        self.assertEqual(
            parse_args(['foo', 'bar', 'baz', '--user', 'jrandom',
                        '--password', 'password1'])[0],
            Namespace(root_dir='foo', suite=[], jobs=['bar', 'baz'],
                      user='jrandom', password='password1'))


class TestBuildJob(TestCase):

    def test_build_job(self):
        jenkins_cxt = patch('schedule_reliability_tests.Jenkins')
        with jenkins_cxt as jenkins_mock, temp_dir() as root:
            write_config(root, 'foo', 'quxxx')
            build_job(Credentials('jrandom', 'password1'), root, 'foo',
                      ['bar', 'baz'], ['qux'])
        jenkins_mock.assert_called_once_with(
            'http://localhost:8080', 'jrandom', 'password1')
        calls = jenkins_mock.return_value.build_job.mock_calls
        expected = [
            call('foo', {'suite': 'qux', 'attempts': '10',
                         'new_juju_dir': 'bar'}, token='quxxx'),
            call('foo', {'suite': 'qux', 'attempts': '10',
                         'new_juju_dir': 'baz'}, token='quxxx'),
            ]
        self.assertEqual(calls, expected)

    def test_build_job_multi_suite(self):
        jenkins_cxt = patch('schedule_reliability_tests.Jenkins')
        with jenkins_cxt as jenkins_mock, temp_dir() as root:
            write_config(root, 'foo', 'bar')
            build_job(Credentials('jrandom', 'password1'), root, 'foo',
                      ['baz'], ['qux', 'quxx'])
        jenkins_mock.return_value.build_job.assert_called_once_with(
            'foo', {'suite': 'qux,quxx', 'attempts': '10',
                    'new_juju_dir': 'baz'}, token='bar')