class TestAppVersions(unittest.TestCase): app_name = 'awesomeApp' solution = '64bit Amazon Linux 2014.03 v1.0.6 running PHP 5.5' def setUp(self): self.root_dir = os.getcwd() if not os.path.exists('testDir'): os.mkdir('testDir') os.chdir('testDir') fileoperations.create_config_file(self.app_name, 'us-west-2', self.solution) def tearDown(self): os.chdir(self.root_dir) shutil.rmtree('testDir') @mock.patch('ebcli.controllers.appversion.appversionops') def test_delete_particular_version_label(self, appversionops_mock): EB.Meta.exit_on_close = False self.app = EB(argv=['appversion', '--delete', 'version-label-1']) self.app.setup() self.app.run() self.app.close() appversionops_mock.delete_app_version_label.assert_called_with( self.app_name, 'version-label-1') @mock.patch('ebcli.controllers.appversion.appversionops') @mock.patch( 'ebcli.controllers.appversion.elasticbeanstalk.get_application_versions' ) def test_enter_interactive_mode(self, get_application_versions_mock, appversionops_mock): app_versions = [{ u'ApplicationName': self.app_name, u'VersionLabel': 'v13' }, { u'ApplicationName': self.app_name, u'VersionLabel': 'v8' }] get_app_versions_response = {u'ApplicationVersions': app_versions} get_application_versions_mock.return_value = get_app_versions_response EB.Meta.exit_on_close = False self.app = EB(argv=['appversion']) self.app.setup() self.app.run() self.app.close() appversionops_mock.display_versions.assert_called_with( self.app_name, None, app_versions)
class TestRestore(unittest.TestCase): def setUp(self): self.patcher_restore_ops = mock.patch( 'ebcli.controllers.restore.restoreops') self.patcher_base_controller = mock.patch( 'ebcli.controllers.restore.AbstractBaseController.get_app_name') self.mock_restore_ops = self.patcher_restore_ops.start() self.mock_base_controller = self.patcher_base_controller.start() def tearDown(self): self.patcher_restore_ops.stop() self.patcher_base_controller.stop() def test_restore_with_id(self): env_id = 'e-1234567890' EB.Meta.exit_on_close = False self.app = EB(argv=['restore', env_id]) self.app.setup() self.app.run() self.app.close() self.mock_restore_ops.restore.assert_called_with(env_id, None) def test_restore_interactive(self): env1 = { 'EnvironmnetId': "e-1234567890", 'EnvironmentName': "env1", 'VersionLabel': "v1", 'ApplicationName': "app1", 'DateUpdated': (date.today() - timedelta(days=10)) } env2 = { 'EnvironmnetId': "e-0987654321", 'EnvironmentName': "env2", 'VersionLabel': "v2", 'ApplicationName': "app2", 'DateUpdated': (date.today()) } self.mock_restore_ops.get_restorable_envs.return_value = [env1, env2] EB.Meta.exit_on_close = False self.app = EB(argv=['restore']) self.app.setup() self.app.run() self.app.close() self.mock_restore_ops.display_environments.assert_called_with( [env1, env2])
class TestCodeSource(unittest.TestCase): solution = SolutionStack( '64bit Amazon Linux 2015.03 v2.0.6 running PHP 5.5') app_name = 'ebcli-intTest-app' def setUp(self): self.patcher_io = mock.patch('ebcli.controllers.codesource.io') self.mock_io = self.patcher_io.start() def tearDown(self): self.patcher_io.stop() @mock.patch('ebcli.controllers.codesource.gitops') def test_case_insensative_input(self, mock_gitops): EB.Meta.exit_on_close = False self.app = EB(argv=['codesource', 'LoCaL']) self.app.setup() self.app.run() self.app.close() self.mock_io.echo.assert_called_once_with( strings['codesource.localmsg']) @mock.patch('ebcli.controllers.codesource.gitops') @mock.patch('ebcli.controllers.codesource.utils.io') def test_interactive_choices_codecommit(self, mock_utils_io, mock_gitops): mock_utils_io.prompt.side_effect = [ '1', # select CodeCommit ] EB.Meta.exit_on_close = False self.app = EB(argv=['codesource']) self.app.setup() self.app.run() self.app.close() self.mock_io.echo.assert_called_with( prompts['codesource.codesourceprompt']) io_calls = [mock.call('2)', 'Local'), mock.call('1)', 'CodeCommit')] mock_utils_io.echo.assert_has_calls(io_calls, any_order=True)
class TestLifecycle(unittest.TestCase): app_name = 'foo_app' def setUp(self): self.patcher_lifecycle_ops = mock.patch( 'ebcli.controllers.lifecycle.lifecycleops') self.patcher_base_get_app = mock.patch( 'ebcli.controllers.restore.AbstractBaseController.get_app_name') self.mock_lifecycle_ops = self.patcher_lifecycle_ops.start() self.mock_base_get_app = self.patcher_base_get_app.start() def tearDown(self): self.patcher_lifecycle_ops.stop() self.patcher_base_get_app.stop() def test_lifecycle_with_print_flag(self): self.mock_base_get_app.return_value = self.app_name EB.Meta.exit_on_close = False self.app = EB(argv=['appversion', 'lifecycle', '--print']) self.app.setup() self.app.run() self.app.close() self.mock_lifecycle_ops.print_lifecycle_policy.assert_called_with( self.app_name) def test_lifecycle_no_args_spawn_interactive(self): self.mock_base_get_app.return_value = self.app_name EB.Meta.exit_on_close = False self.app = EB(argv=['appversion', 'lifecycle']) self.app.setup() self.app.run() self.app.close() self.mock_lifecycle_ops.print_lifecycle_policy.assert_not_called() self.mock_lifecycle_ops.interactive_update_lifcycle_policy.assert_called_with( self.app_name)
class TestStreamArgument(TestLogs): @mock.patch('ebcli.controllers.logs.logsops.instance_log_streaming_enabled' ) @mock.patch( 'ebcli.controllers.logs.logsops.stream_instance_logs_from_cloudwatch') def test_logs__stream_instance_logs__instance_log_streaming_is_disabled( self, stream_cloudwatch_logs_mock, instance_log_streaming_enabled_mock): instance_log_streaming_enabled_mock.return_value = False self.app = EB(argv=['logs', '--stream']) self.app.setup() with self.assertRaises(InvalidOptionsError) as context_manager: self.app.run() self.assertEqual( "Can't retrieve instance logs for environment MyFooEnv. Instance log streaming is disabled.", str(context_manager.exception)) stream_cloudwatch_logs_mock.assert_not_called() @mock.patch('ebcli.controllers.logs.logsops.instance_log_streaming_enabled' ) @mock.patch( 'ebcli.controllers.logs.logsops.stream_instance_logs_from_cloudwatch') def test_logs__stream_instance_logs_with_instance_cloudwatch_log_source__instance_log_streaming_is_disabled( self, stream_cloudwatch_logs_mock, instance_log_streaming_enabled_mock): instance_log_streaming_enabled_mock.return_value = False self.app = EB( argv=['logs', '--stream', '--cloudwatch-log-source', 'instance']) self.app.setup() with self.assertRaises(InvalidOptionsError) as context_manager: self.app.run() self.assertEqual( "Can't retrieve instance logs for environment MyFooEnv. Instance log streaming is disabled.", str(context_manager.exception)) stream_cloudwatch_logs_mock.assert_not_called() @mock.patch( 'ebcli.controllers.logs.logsops.environment_health_streaming_enabled') @mock.patch( 'ebcli.controllers.logs.logsops.stream_environment_health_logs_from_cloudwatch' ) def test_logs__stream_environment_health_logs__environment_health_log_streaming_is_disabled( self, stream_cloudwatch_logs_mock, environment_health_streaming_enabled_mock): environment_health_streaming_enabled_mock.return_value = False self.app = EB(argv=[ 'logs', '--stream', '--cloudwatch-log-source', 'environment-health' ]) self.app.setup() with self.assertRaises(InvalidOptionsError) as context_manager: self.app.run() self.assertEqual( """Can't retrieve environment-health logs for environment MyFooEnv. Environment-health log streaming is disabled.""", str(context_manager.exception)) stream_cloudwatch_logs_mock.assert_not_called() @mock.patch('ebcli.controllers.logs.logsops.normalize_log_group_name') @mock.patch('ebcli.controllers.logs.logsops.instance_log_streaming_enabled' ) @mock.patch( 'ebcli.controllers.logs.logsops.raise_if_instance_log_streaming_is_not_enabled' ) @mock.patch( 'ebcli.controllers.logs.logsops.stream_instance_logs_from_cloudwatch') def test_logs__stream_instance_logs_by_default( self, stream_cloudwatch_logs_mock, raise_if_instance_log_streaming_is_not_enabled_mock, instance_log_streaming_enabled_mock, normalize_log_group_name): instance_log_streaming_enabled_mock.return_value = True raise_if_instance_log_streaming_is_not_enabled_mock.side_effect = None normalize_log_group_name.return_value = '/aws/elasticbeanstalk/MyFooEnv/var/log/eb-activity.log' self.app = EB(argv=['logs', '--stream']) self.app.setup() self.app.run() stream_cloudwatch_logs_mock.assert_called_with( log_group='/aws/elasticbeanstalk/MyFooEnv/var/log/eb-activity.log', specific_log_stream=None) @mock.patch('ebcli.controllers.logs.logsops.normalize_log_group_name') @mock.patch('ebcli.controllers.logs.logsops.instance_log_streaming_enabled' ) @mock.patch( 'ebcli.controllers.logs.logsops.raise_if_instance_log_streaming_is_not_enabled' ) @mock.patch( 'ebcli.controllers.logs.logsops.stream_instance_logs_from_cloudwatch') def test_logs__stream_instance_logs__cloudwatch_log_source_is_explicitly_specified( self, stream_cloudwatch_logs_mock, raise_if_instance_log_streaming_is_not_enabled_mock, instance_log_streaming_enabled_mock, normalize_log_group_name): instance_log_streaming_enabled_mock.return_value = True raise_if_instance_log_streaming_is_not_enabled_mock.side_effect = None normalize_log_group_name.return_value = '/aws/elasticbeanstalk/MyFooEnv/var/log/eb-activity.log' self.app = EB( argv=['logs', '--stream', '--cloudwatch-log-source', 'instance']) self.app.setup() self.app.run() stream_cloudwatch_logs_mock.assert_called_with( log_group='/aws/elasticbeanstalk/MyFooEnv/var/log/eb-activity.log', specific_log_stream=None) @mock.patch('ebcli.controllers.logs.logsops.instance_log_streaming_enabled' ) @mock.patch( 'ebcli.controllers.logs.logsops.raise_if_instance_log_streaming_is_not_enabled' ) @mock.patch( 'ebcli.controllers.logs.logsops.stream_instance_logs_from_cloudwatch') def test_logs__stream_logs_with_specified_stream_log_steaming_enabled( self, stream_cloudwatch_logs_mock, raise_if_instance_log_streaming_is_not_enabled_mock, instance_log_streaming_enabled_mock): instance_log_streaming_enabled_mock.return_value = True raise_if_instance_log_streaming_is_not_enabled_mock.side_effect = None self.app = EB(argv=[ 'logs', '--stream', '--log-group', TestLogs.SPECIFIED_LOG_GROUP ]) self.app.setup() self.app.run() stream_cloudwatch_logs_mock.assert_called_with( specific_log_stream=None, log_group= '/aws/elasticbeanstalk/MyFooEnv/aws/elasticbeanstalk/foo/specific/error.log' ) @mock.patch('ebcli.controllers.logs.logsops.instance_log_streaming_enabled' ) @mock.patch( 'ebcli.controllers.logs.logsops.raise_if_instance_log_streaming_is_not_enabled' ) @mock.patch( 'ebcli.controllers.logs.logsops.stream_instance_logs_from_cloudwatch') def test_logs__stream_instance_logs__cloudwatch_log_source_is_explicitly_specified__log_group_specified( self, stream_cloudwatch_logs_mock, raise_if_instance_log_streaming_is_not_enabled_mock, instance_log_streaming_enabled_mock): instance_log_streaming_enabled_mock.return_value = True raise_if_instance_log_streaming_is_not_enabled_mock.side_effect = None self.app = EB(argv=[ 'logs', '--stream', '--cloudwatch-log-source', 'instance', '--log-group', TestLogs.SPECIFIED_LOG_GROUP ]) self.app.setup() self.app.run() stream_cloudwatch_logs_mock.assert_called_with( specific_log_stream=None, log_group= '/aws/elasticbeanstalk/MyFooEnv/aws/elasticbeanstalk/foo/specific/error.log' ) @mock.patch('ebcli.controllers.logs.logsops.normalize_log_group_name') @mock.patch('ebcli.controllers.logs.logsops.instance_log_streaming_enabled' ) @mock.patch( 'ebcli.controllers.logs.logsops.raise_if_instance_log_streaming_is_not_enabled' ) @mock.patch( 'ebcli.controllers.logs.logsops.retrieve_cloudwatch_instance_logs') def test_logs__get_logs__zip_logs__instance_log_streaming_to_cloudwatch_enabled( self, retrieve_cloudwatch_instance_logs_mock, raise_if_instance_log_streaming_is_not_enabled_mock, instance_log_streaming_enabled_mock, normalize_log_group_name): instance_log_streaming_enabled_mock.return_value = True raise_if_instance_log_streaming_is_not_enabled_mock.side_effect = None retrieve_cloudwatch_instance_logs_mock.return_value = None normalize_log_group_name.return_value = '/aws/elasticbeanstalk/MyFooEnv/var/log/eb-activity.log' self.app = EB(argv=['logs', '--zip']) self.app.setup() self.app.run() retrieve_cloudwatch_instance_logs_mock.assert_called_with( '/aws/elasticbeanstalk/MyFooEnv/var/log/eb-activity.log', 'bundle', do_zip=True, specific_log_stream=None) @mock.patch('ebcli.controllers.logs.logsops.enable_cloudwatch_logs') def test_logs__default_option_cloudwatch_logs(self, enable_cloudwatch_logs_mock): EB.Meta.exit_on_close = False self.app = EB(argv=['logs', '--cloudwatch-logs']) self.app.setup() self.app.run() self.app.close() enable_cloudwatch_logs_mock.enable_cloudwatch_logs(TestLogs.ENV_NAME) @mock.patch('ebcli.controllers.logs.logsops.enable_cloudwatch_logs') def test_logs__enable_cloudwatch_logs(self, enable_cloudwatch_logs_mock): EB.Meta.exit_on_close = False self.app = EB(argv=['logs', '--cloudwatch-logs', 'enable']) self.app.setup() self.app.run() self.app.close() enable_cloudwatch_logs_mock.enable_cloudwatch_logs(TestLogs.ENV_NAME) @mock.patch('ebcli.controllers.logs.logsops.disable_cloudwatch_logs') def test_logs__disable_cloudwatch_logs(self, disable_cloudwatch_logs_mock): EB.Meta.exit_on_close = False self.app = EB(argv=['logs', '--cloudwatch-logs', 'disable']) self.app.setup() self.app.run() self.app.close() disable_cloudwatch_logs_mock.disable_cloudwatch_logs(TestLogs.ENV_NAME)