def run_bundle_test(args, env_name, test_plan=None, env=None):
    """Run Bundletester and get the test results.

    :return: test result and test status.
    """
    test_result = StringIO()
    args.output = test_result
    args.tests = test_plan.get('tests') if test_plan else None
    args.environment = env_name
    args.reporter = 'json'
    args.testdir = test_plan.get('bundle') if test_plan else args.testdir
    try:
        status = tester.main(args)
    except Exception:
        tb = traceback.format_exc()
        error = "Exception ({}):\n{}".format(env_name, tb)
        logging.error(error)
        return_code = 1
        failure = 'Exception'
        if env:
            started = is_machine_agent_started(env.status(),
                                               args.juju_major_version)
            if started is False:
                return_code = PROVISIONING_ERROR_CODE
                failure = 'Provisioning Failure'
        test_result = generate_test_result(error,
                                           test=failure,
                                           returncode=return_code)
        return test_result, None
    return test_result.getvalue(), status
def run_bundle_test(args, env_name, test_plan=None, env=None):
    """Run Bundletester and get the test results.

    :return: test result and test status.
    """
    test_result = StringIO()
    args.output = test_result
    args.tests = test_plan.get('tests') if test_plan else None
    args.environment = env_name
    args.reporter = 'json'
    args.testdir = test_plan.get('bundle') if test_plan else args.testdir
    try:
        status = tester.main(args)
    except Exception:
        tb = traceback.format_exc()
        error = "Exception ({}):\n{}".format(env_name, tb)
        logging.error(error)
        return_code = 1
        failure = 'Exception'
        if env:
            started = is_machine_agent_started(
                env.status(), args.juju_major_version)
            if started is False:
                return_code = PROVISIONING_ERROR_CODE
                failure = 'Provisioning Failure'
        test_result = generate_test_result(
            error, test=failure, returncode=return_code)
        return test_result, None
    return test_result.getvalue(), status
 def test_is_machine_agent_started_juju2_not_started(self):
     status = {
         'EnvironmentName': 'default-joyent',
         'Services': {},
         'Networks': {},
         'Machines': {
             '0': {'HasVote': True,  'Err': None, 'InstanceId': '1234',
                   'AgentStatus': {'Status': 'panding'}},
         }
     }
     started = is_machine_agent_started(status, juju_major_version=2)
     self.assertEqual(started, False)
 def test_is_machine_agent_started_juju2_not_started(self):
     status = {
         'EnvironmentName': 'default-joyent',
         'Services': {},
         'Networks': {},
         'Machines': {
             '0': {'HasVote': True,  'Err': None, 'InstanceId': '1234',
                   'AgentStatus': {'Status': 'panding'}},
         }
     }
     started = is_machine_agent_started(status, juju_major_version=2)
     self.assertEqual(started, False)
 def test_is_machine_agent_started(self):
     status = {
         'EnvironmentName': 'default-joyent',
         'Services': {},
         'Networks': {},
         'Machines': {
             '0': {'HasVote': True,  'Err': None, 'InstanceId': '1234',
                   'AgentState': 'started', 'AgentStateInfo': '',
                   'Agent': {'Status': 'started'}}
         }
     }
     started = is_machine_agent_started(status, juju_major_version=1)
     self.assertEqual(started, True)
 def test_is_machine_agent_started(self):
     status = {
         'EnvironmentName': 'default-joyent',
         'Services': {},
         'Networks': {},
         'Machines': {
             '0': {'HasVote': True,  'Err': None, 'InstanceId': '1234',
                   'AgentState': 'started', 'AgentStateInfo': '',
                   'Agent': {'Status': 'started'}}
         }
     }
     started = is_machine_agent_started(status, juju_major_version=1)
     self.assertEqual(started, True)