コード例 #1
0
    def test_orchestra_print_status_fail(self):
        with cd('tests_functional/charms/test/'):
            args = Arguments(tests='dummy',
                             on_timeout='fail',
                             fail_on_skip=True)
            c = juju_test.Conductor(args)
            o = juju_test.Orchestra(c, 'test/dummy')
            o.log.status = MagicMock()

            o.print_status(1)
            o.log.status.assert_called_once_with('%s' % juju_test.TEST_FAIL)

            o.log.status.reset_mock()
            o.print_status(100)
            o.log.status.assert_called_with(
                '%s (%s)' % (juju_test.TEST_FAIL, juju_test.TEST_SKIP))

            o.log.status.reset_mock()
            o.print_status(124)
            o.log.status.assert_called_with(
                '%s (%s)' % (juju_test.TEST_FAIL, juju_test.TEST_TIMEOUT))

            o.conductor.args.on_timeout = 'skip'
            o.log.status.reset_mock()
            o.print_status(124)
            o.log.status.assert_called_with(
                '%s (%s)' % (juju_test.TEST_FAIL, juju_test.TEST_TIMEOUT))
コード例 #2
0
    def test_orchestra_archive_logs_rsync_fails(self, mstatus, rsync):
        from subprocess import CalledProcessError
        mstatus.return_value = {
            'services': {
                'dummy': {
                    'units': {
                        'dummy/0': {
                            'machine': '1'
                        }
                    }
                }
            },
            'machines': {}
        }

        args = Arguments(tests='dummy', juju_env='testing', logdir='/tmp')
        with cd('tests_functional/charms/test/'):
            c = juju_test.Conductor(args)
            c.juju_version = juju_test.JujuVersion(major=1, minor=7, patch=0)
            o = juju_test.Orchestra(c, 'test/dummy')
            o.log.warn = MagicMock()
            o.build_env()

            rsync.side_effect = CalledProcessError('err', 'err', 'err')
            o.archive_logs()
            expected_warns = [
                call('Failed to fetch logs for bootstrap node'),
                call('Failed to grab logs for dummy/0')
            ]
            o.log.warn.assert_has_calls(expected_warns)
コード例 #3
0
ファイル: test_juju_test.py プロジェクト: axw/charm-tools
    def test_orchestra_archive_logs_status_fails(self, mstatus):
        mstatus.return_value = None

        args = Arguments(tests='dummy', juju_env='testing', logdir='/tmp')
        c = juju_test.Conductor(args)
        o = juju_test.Orchestra(c, 'test/dummy')
        o.build_env()

        self.assertRaises(juju_test.OrchestraError, o.archive_logs)
コード例 #4
0
ファイル: test_juju_test.py プロジェクト: axw/charm-tools
    def test_orchestra_determine_status_skip(self):
        args = Arguments(tests='dummy', on_timeout='skip')
        c = juju_test.Conductor(args)
        o = juju_test.Orchestra(c, 'test/dummy')

        self.assertEqual('pass', o.determine_status(0))
        self.assertEqual('fail', o.determine_status(1))
        self.assertEqual('skip', o.determine_status(100))
        self.assertEqual('skip', o.determine_status(124))
コード例 #5
0
ファイル: test_juju_test.py プロジェクト: axw/charm-tools
    def test_orchestra_map_status_code(self):
        args = Arguments(tests='dummy')
        c = juju_test.Conductor(args)
        o = juju_test.Orchestra(c, 'test/dummy')

        self.assertEqual('pass', o.map_status_code(0))
        self.assertEqual('fail', o.map_status_code(1))
        self.assertEqual('skip', o.map_status_code(100))
        self.assertEqual('timeout', o.map_status_code(124))
コード例 #6
0
    def test_orchestra_determine_status_pass(self):
        with cd('tests_functional/charms/test/'):
            args = Arguments(tests='dummy', on_timeout='pass')
            c = juju_test.Conductor(args)
            o = juju_test.Orchestra(c, 'test/dummy')

            self.assertEqual('fail', o.determine_status(1))
            self.assertEqual('skip', o.determine_status(100))
            self.assertEqual('pass', o.determine_status(0))
            self.assertEqual('pass', o.determine_status(124))
コード例 #7
0
ファイル: test_juju_test.py プロジェクト: axw/charm-tools
    def test_orchestra_build_env(self):
        juju_env = 'test'
        args = Arguments(tests='dummy', juju_env=juju_env)
        c = juju_test.Conductor(args)
        o = juju_test.Orchestra(c, 'test/dummy')
        expected_env = c.env
        expected_env['JUJU_ENV'] = juju_env

        o.build_env()
        self.assertEqual(expected_env, o.env)
コード例 #8
0
ファイル: test_juju_test.py プロジェクト: axw/charm-tools
    def test_orchestra_print_status_skip(self):
        args = Arguments(tests='dummy', on_timeout='skip')
        c = juju_test.Conductor(args)
        o = juju_test.Orchestra(c, 'test/dummy')
        o.log.status = MagicMock()

        o.print_status(100)
        o.log.status.assert_called_once_with('%s' % juju_test.TEST_SKIP)

        o.log.status.reset_mock()
        o.print_status(124)
        o.log.status.assert_called_with(
            '%s (%s)' % (juju_test.TEST_SKIP, juju_test.TEST_TIMEOUT))
コード例 #9
0
ファイル: test_juju_test.py プロジェクト: axw/charm-tools
    def test_orchestra_determine_status_fail(self):
        args = Arguments(tests='dummy', on_timeout='fail', fail_on_skip=True)
        c = juju_test.Conductor(args)
        o = juju_test.Orchestra(c, 'test/dummy')

        self.assertEqual('pass', o.determine_status(0))
        self.assertEqual('fail', o.determine_status(1))
        self.assertEqual('fail', o.determine_status(100))
        self.assertEqual('fail', o.determine_status(124))

        # Cornercase, timeouts sent to skip should ultimately fail do to args
        o.conductor.args.on_timeout = 'skip'
        self.assertEqual('fail', o.determine_status(124))
コード例 #10
0
    def test_orchestra_print_status_pass(self):
        with cd('tests_functional/charms/test/'):
            args = Arguments(tests='dummy', on_timeout='pass')
            c = juju_test.Conductor(args)
            o = juju_test.Orchestra(c, 'test/dummy')
            o.log.status = MagicMock()

            o.print_status(0)
            o.log.status.assert_called_once_with('%s' % juju_test.TEST_PASS)

            o.log.status.reset_mock()
            o.print_status(124)
            o.log.status.assert_called_with(
                '%s (%s)' % (juju_test.TEST_PASS, juju_test.TEST_TIMEOUT))
コード例 #11
0
    def test_orchestra_rsync_go(self, mstatus, mcheck_call):
        goyml_output = '''
        machines:
          "0":
            agent-state: started
            agent-version: 1.10.0
            dns-name: juju-yy-yy-yy-yy.compute.cloudprovider.tld
            instance-id: j-yyyyyy
            series: precise
          "1":
            agent-state: started
            agent-version: 1.10.0
            dns-name: juju-xx-xx-xx-xx.compute.cloudprovider.tld
            instance-id: j-xxxxxx
            series: precise
        services:
          dummy:
            charm: cs:precise/dummy-999
            exposed: false
            units:
              dummy/0:
                agent-state: started
                agent-version: 1.10.0
                machine: "1"
                public-address: juju-xx-xx-xx-xx.compute.cloudprovider.tld'''

        goyml_parsed = yaml.safe_load(goyml_output)
        mstatus.return_value = goyml_parsed

        machine = '1'
        dns_name = goyml_parsed['machines']['1']['dns-name']
        juju_env = 'test'
        path = '/var/log/./juju/*'
        logdir = '/tmp/'
        args = Arguments(tests='dummy', juju_env=juju_env)
        with cd('tests_functional/charms/test/'):
            c = juju_test.Conductor(args)
            c.juju_version = juju_test.JujuVersion(major=1, minor=10, patch=0)
            o = juju_test.Orchestra(c, 'test/dummy')

            expected_cmd = [
                'rsync', '-a', '-v', '-z', '-R', '-e', 'ssh',
                'ubuntu@%s:%s' % (dns_name, path), logdir
            ]
            o.build_env()
            o.rsync(machine, path, logdir)

            mcheck_call.assert_called_once_with(expected_cmd, env=o.env)
コード例 #12
0
    def test_orchestra_archive_logs_go(self, mstatus, rsync):
        goyml_output = '''
        machines:
          "0":
            agent-state: started
            agent-version: 1.10.0
            dns-name: juju-yy-yy-yy-yy.compute.cloudprovider.tld
            instance-id: j-yyyyyy
            series: precise
          "1":
            agent-state: started
            agent-version: 1.10.0
            dns-name: juju-xx-xx-xx-xx.compute.cloudprovider.tld
            instance-id: j-xxxxxx
            series: precise
        services:
          dummy:
            charm: cs:precise/dummy-999
            exposed: false
            units:
              dummy/0:
                agent-state: started
                agent-version: 1.10.0
                machine: "1"
                public-address: juju-xx-xx-xx-xx.compute.cloudprovider.tld'''
        goyml_parsed = yaml.safe_load(goyml_output)
        mstatus.return_value = goyml_parsed

        juju_env = 'testing'
        args = Arguments(tests='dummy', juju_env=juju_env, logdir='/tmp')
        with cd('tests_functional/charms/test/'):
            c = juju_test.Conductor(args)
            c.juju_version = juju_test.JujuVersion(major=1, minor=10, patch=0)
            o = juju_test.Orchestra(c, 'test/dummy')

            o.build_env()
            o.archive_logs()
            rsync.assert_has_calls([
                call(0, '/var/./log/juju/*',
                     os.path.join(args.logdir, 'bootstrap', '')),
                call('1', '/var/./log/juju/*',
                     os.path.join(args.logdir, 'dummy', ''))
            ])
コード例 #13
0
ファイル: test_juju_test.py プロジェクト: axw/charm-tools
    def test_orchestra_rsync_py(self, mcheck_call):
        machine = 0
        juju_env = 'test'
        path = '/var/log/./juju/*'
        logdir = '/tmp/'
        args = Arguments(tests='dummy', juju_env=juju_env)
        c = juju_test.Conductor(args)
        c.juju_version = juju_test.JujuVersion(major=0, minor=8, patch=2)
        o = juju_test.Orchestra(c, 'test/dummy')

        expected_cmd = [
            'rsync', '-a', '-v', '-z', '-R', '-e',
            'juju ssh -e %s' % juju_env,
            '%s:%s' % (machine, path), logdir
        ]
        o.build_env()
        o.rsync(machine, path, logdir)

        mcheck_call.assert_called_once_with(expected_cmd, env=o.env)
コード例 #14
0
    def test_orchestra_archive_logs_py(self, mstatus, rsync):
        pyyml_output = '''
        machines:
          0:
            agent-state: running
            dns-name: juju-yy-yy-yy-yy.compute.cloudprovider.tld
            instance-id: i-yyyyyy
            instance-state: running
          1:
            agent-state: running
            dns-name: juju-xx-xx-xx-xx.compute.cloudprovider.tld
            instance-id: i-xxxxxx
            instance-state: running
        services:
          dummy:
            charm: cs:precise/dummy-19
            relations: {}
            units:
              dummy/0:
                agent-state: started
                machine: 1
                public-address: juju-xx-xx-xx-xx.compute.cloudprovider.tld'''
        pyyml_parsed = yaml.safe_load(pyyml_output)
        mstatus.return_value = pyyml_parsed

        juju_env = 'testing'
        args = Arguments(tests='dummy', juju_env=juju_env, logdir='/tmp')
        with cd('tests_functional/charms/test/'):
            c = juju_test.Conductor(args)
            c.juju_version = juju_test.JujuVersion(major=0, minor=7, patch=0)
            o = juju_test.Orchestra(c, 'test/dummy')

            o.build_env()
            o.archive_logs()
            rsync.assert_has_calls([
                call(0, '/var/./log/juju/*',
                     os.path.join(args.logdir, 'bootstrap', '')),
                call(1, '/var/./log/juju/*',
                     os.path.join(args.logdir, 'dummy', '')),
                call(1, '/var/lib/juju/units/./*/charm.log',
                     os.path.join(args.logdir, 'dummy', ''))
            ])
コード例 #15
0
ファイル: test_juju_test.py プロジェクト: axw/charm-tools
    def test_orchestra_is_passing_code(self):
        args = Arguments(tests='dummy', on_timeout='pass', fail_on_skip=False)
        c = juju_test.Conductor(args)
        o = juju_test.Orchestra(c, 'test/dummy')

        self.assertTrue(o.is_passing_code(0))
        self.assertTrue(o.is_passing_code(100))
        self.assertTrue(o.is_passing_code(124))
        self.assertFalse(o.is_passing_code(1))

        o.conductor.args.on_timeout = 'skip'
        self.assertTrue(o.is_passing_code(124))

        o.conductor.args.on_timeout = 'fail'
        self.assertFalse(o.is_passing_code(124))

        o.conductor.args.on_timeout = 'skip'
        o.conductor.args.fail_on_skip = True
        self.assertFalse(o.is_passing_code(100))
        self.assertFalse(o.is_passing_code(124))