예제 #1
0
    def test_deploy__specify_codecommit_source_with_forward_slash_in_branch_name(
            self,
            deploy_mock,
            get_env_name_mock,
            get_app_name_mock
    ):
        get_app_name_mock.return_value = 'my-application'
        get_env_name_mock.return_value = 'environment-1'

        app = EB(
            argv=[
                'deploy',
                '--source', 'codecommit/my-repository/my-branch/feature'
            ]
        )
        app.setup()
        app.run()

        deploy_mock.assert_called_with(
            'my-application',
            'environment-1',
            None,
            None,
            None,
            group_name=None,
            process_app_versions=False,
            source='codecommit/my-repository/my-branch/feature',
            staged=False,
            timeout=None
        )
예제 #2
0
    def test_list__platform_workspace__filter_by_status(
            self,
            echo_mock,
            list_custom_platform_versions_mock,
            get_platform_name_mock
    ):
        self.setup_platform_workspace()

        list_custom_platform_versions_mock.return_value = [
            'arn:aws:elasticbeanstalk:us-west-2:123123123:platform/custom-platform-4/1.0.3',
            'arn:aws:elasticbeanstalk:us-west-2:123123123:platform/custom-platform-4/1.3.6'
        ]

        app = EB(argv=['platform', 'list', '-a', '-s', 'READY'])
        app.setup()
        app.run()

        get_platform_name_mock.assert_not_called()
        list_custom_platform_versions_mock.assert_called_once_with(
            platform_name=None,
            show_status=True,
            status='READY'
        )
        echo_mock.assert_called_once_with(
            'arn:aws:elasticbeanstalk:us-west-2:123123123:platform/custom-platform-4/1.0.3',
            'arn:aws:elasticbeanstalk:us-west-2:123123123:platform/custom-platform-4/1.3.6',
            sep='{linesep}'.format(linesep=os.linesep)
        )
예제 #3
0
    def test_deploy__process_app_version_because_env_yaml_exists(
            self,
            deploy_mock,
            get_env_name_mock,
            get_app_name_mock
    ):
        open('env.yaml', 'w').close()
        get_app_name_mock.return_value = 'my-application'
        get_env_name_mock.return_value = 'environment-1'

        app = EB(
            argv=[
                'deploy',
                '--label', 'my-label',
                '--message', 'This is my message'
            ]
        )
        app.setup()
        app.run()

        deploy_mock.assert_called_with(
            'my-application',
            'environment-1',
            None,
            'my-label',
            'This is my message',
            group_name=None,
            process_app_versions=True,
            source=None,
            staged=False,
            timeout=None
        )
예제 #4
0
    def test_deploy__process_app_version_because_process_flag_is_specified(
            self,
            deploy_mock,
            get_env_name_mock,
            get_app_name_mock
    ):
        get_app_name_mock.return_value = 'my-application'
        get_env_name_mock.return_value = 'environment-1'

        app = EB(
            argv=[
                'deploy',
                '--label', 'my-label',
                '--message', 'This is my message',
                '--process'
            ]
        )
        app.setup()
        app.run()

        deploy_mock.assert_called_with(
            'my-application',
            'environment-1',
            None,
            'my-label',
            'This is my message',
            group_name=None,
            process_app_versions=True,
            source=None,
            staged=False,
            timeout=None
        )
예제 #5
0
    def test_deploy__specify_codecommit_source(
            self,
            deploy_mock,
            get_env_name_mock,
            get_app_name_mock,
            _check_env_lifecycle_state_mock,
    ):
        get_app_name_mock.return_value = 'my-application'
        get_env_name_mock.return_value = 'environment-1'

        app = EB(
            argv=[
                'deploy',
                '--source', 'codecommit/my-repository/my-branch'
            ]
        )
        app.setup()
        app.run()

        _check_env_lifecycle_state_mock.assert_called_once_with('environment-1')
        deploy_mock.assert_called_with(
            'my-application',
            'environment-1',
            None,
            None,
            None,
            group_name=None,
            process_app_versions=False,
            source='codecommit/my-repository/my-branch',
            staged=False,
            timeout=None
        )
    def test_logs__platform_workspace__stream_logs__unable_to_find_cloudwatch_logs(
            self, PackerStreamFormatter_mock, paginate_cloudwatch_logs_mock,
            stream_platform_logs_mock, get_platform_version_mock,
            get_platform_name_mock):
        self.setup_platform_workspace()

        streamer_formatter_mock = mock.MagicMock()
        PackerStreamFormatter_mock.return_value = streamer_formatter_mock
        get_platform_name_mock.return_value = 'custom-platform-4'
        stream_platform_logs_mock.side_effect = logs.NotFoundError

        with self.assertRaises(logs.NotFoundError) as context_manager:
            app = EB(argv=['platform', 'logs', '1.0.3', '--stream'])
            app.setup()
            app.run()

        self.assertEqual('Unable to find logs in CloudWatch.',
                         str(context_manager.exception))
        paginate_cloudwatch_logs_mock.assert_not_called()
        stream_platform_logs_mock.assert_called_once_with(
            'custom-platform-4',
            '1.0.3',
            formatter=streamer_formatter_mock,
            log_name='custom-platform-4/1.0.3')
        get_platform_version_mock.assert_not_called()
예제 #7
0
    def test_deploy__pass_group_name(
            self,
            deploy_mock,
            get_env_name_mock,
            get_app_name_mock,
            _check_env_lifecycle_state_mock,
    ):
        get_app_name_mock.return_value = 'my-application'
        get_env_name_mock.return_value = 'environment-1'

        app = EB(
            argv=[
                'deploy',
                '--env-group-suffix', 'group-name',
            ]
        )
        app.setup()
        app.run()

        _check_env_lifecycle_state_mock.assert_called_once_with('environment-1')
        deploy_mock.assert_called_with(
            'my-application',
            'environment-1',
            None,
            None,
            None,
            group_name='group-name',
            process_app_versions=False,
            source=None,
            staged=False,
            timeout=None
        )
예제 #8
0
    def test_deploy__with_label_and_message(
            self,
            deploy_mock,
            get_env_name_mock,
            get_app_name_mock,
            _check_env_lifecycle_state_mock,
    ):
        get_app_name_mock.return_value = 'my-application'
        get_env_name_mock.return_value = 'environment-1'

        app = EB(
            argv=[
                'deploy',
                '--label', 'my-label',
                '--message', 'This is my message'
            ]
        )
        app.setup()
        app.run()

        _check_env_lifecycle_state_mock.assert_called_once_with('environment-1')
        deploy_mock.assert_called_with(
            'my-application',
            'environment-1',
            None,
            'my-label',
            'This is my message',
            group_name=None,
            process_app_versions=False,
            source=None,
            staged=False,
            timeout=None
        )
예제 #9
0
    def test_deploy__nohang_sets_timeout_to_zero(
            self,
            deploy_mock,
            get_env_name_mock,
            get_app_name_mock,
            _check_env_lifecycle_state_mock,
    ):
        get_app_name_mock.return_value = 'my-application'
        get_env_name_mock.return_value = 'environment-1'

        app = EB(argv=['deploy', '--nohang', '--timeout', '5'])
        app.setup()
        app.run()

        _check_env_lifecycle_state_mock.assert_called_once_with('environment-1')
        deploy_mock.assert_called_with(
            'my-application',
            'environment-1',
            None,
            None,
            None,
            group_name=None,
            process_app_versions=False,
            source=None,
            staged=False,
            timeout=0
        )
예제 #10
0
    def test_list__application_workspace__non_verbose_mode(
            self,
            echo_mock,
            list_custom_platform_versions_mock,
            get_all_solution_stacks_mock
    ):
        self.setup_application_workspace()

        get_all_solution_stacks_mock.return_value = [
            SolutionStack('64bit Amazon Linux 2017.09 v4.4.0 running Node.js'),
            SolutionStack('64bit Amazon Linux 2017.09 v2.6.0 running PHP 5.4')

        ]
        list_custom_platform_versions_mock.return_value = [
            'arn:aws:elasticbeanstalk:us-west-2:123123123:platform/custom-platform-4/1.0.3',
            'arn:aws:elasticbeanstalk:us-west-2:123123123:platform/custom-platform-5/1.3.6'
        ]

        app = EB(argv=['platform', 'list'])
        app.setup()
        app.run()

        echo_mock.assert_called_once_with(
            'node.js', 'php-5.4', 'custom-platform-4', 'custom-platform-5', sep='{linesep}'.format(linesep=os.linesep)
        )
예제 #11
0
    def test_deploy__indicate_staged_changes_must_be_used(
            self,
            deploy_mock,
            get_env_name_mock,
            get_app_name_mock
    ):
        get_app_name_mock.return_value = 'my-application'
        get_env_name_mock.return_value = 'environment-1'

        app = EB(
            argv=[
                'deploy',
                '--process',
                '--staged'
            ]
        )
        app.setup()
        app.run()

        deploy_mock.assert_called_with(
            'my-application',
            'environment-1',
            None,
            None,
            None,
            group_name=None,
            process_app_versions=True,
            source=None,
            staged=True,
            timeout=None
        )
예제 #12
0
    def test_init__non_interactive_mode(
            self,
            get_platform_name_and_version_mock,
            setup_mock,
            set_region_mock,
            set_up_credentials_mock,
            get_region_from_inputs_mock,
            touch_config_folder_mock,
            write_keyname_mock,
            set_workspace_to_latest_mock
    ):
        get_region_from_inputs_mock.return_value = 'us-west-2'
        get_platform_name_and_version_mock.return_value = ('my-custom-platform', None)
        set_up_credentials_mock.return_value = 'us-west-2'

        app = EB(argv=['platform', 'init', 'my-custom-platform'])
        app.setup()
        app.run()

        set_region_mock.assert_has_calls([mock.call(None), mock.call('us-west-2')])
        set_up_credentials_mock.assert_called_once_with(None, 'us-west-2', False)
        setup_mock.assert_called_once_with(
            'Custom Platform Builder',
            'us-west-2',
            None,
            platform_name='my-custom-platform',
            platform_version=None,
            workspace_type='Platform'
        )
        touch_config_folder_mock.assert_called_once_with()
        write_keyname_mock.assert_called_once_with(None)
        set_workspace_to_latest_mock.assert_called_once_with()
예제 #13
0
    def test_init__force_interactive_mode_by_passing_interactive_argument_and_omitting_platform_argument(
            self,
            get_keyname_mock,
            get_platform_name_and_version_mock,
            setup_mock,
            set_region_mock,
            set_up_credentials_mock,
            get_region_mock,
            touch_config_folder_mock,
            write_keyname_mock,
            set_workspace_to_latest_mock
    ):
        get_region_mock.return_value = 'us-west-2'
        get_platform_name_and_version_mock.return_value = ('my-custom-platform', '1.0.3')
        set_up_credentials_mock.return_value = 'us-west-2'
        get_keyname_mock.return_value = 'keyname'

        app = EB(argv=['platform', 'init', '-i'])
        app.setup()
        app.run()

        set_region_mock.assert_has_calls([mock.call(None), mock.call('us-west-2')])
        set_up_credentials_mock.assert_called_once_with(None, 'us-west-2', True)
        setup_mock.assert_called_once_with(
            'Custom Platform Builder',
            'us-west-2',
            None,
            platform_name='my-custom-platform',
            platform_version='1.0.3',
            workspace_type='Platform'
        )
        get_region_mock.assert_called_once_with(None, True)
        touch_config_folder_mock.assert_called_once_with()
        write_keyname_mock.assert_called_once_with('keyname')
        set_workspace_to_latest_mock.assert_not_called()
예제 #14
0
    def test_delete__all_failed_versions__force(
            self, validate_action_mock, delete_platform_version_mock,
            list_custom_platform_versions_mock):
        list_custom_platform_versions_mock.return_value = [
            'arn:aws:elasticbeanstalk:us-west-2:123123123123:platform/ibnlempnsr-custom-platform/1.0.1',
            'arn:aws:elasticbeanstalk:us-west-2:123123123123:platform/ibnlempnsr-custom-platform/1.0.0'
        ]
        validate_action_mock.side_effect = None

        app = EB(argv=[
            'platform', 'delete', '--cleanup', '--all-platforms', '--force'
        ])
        app.setup()
        app.run()

        self.assertEqual(2, delete_platform_version_mock.call_count)
        validate_action_mock.assert_not_called()
        delete_platform_version_mock.assert_has_calls([
            mock.call(
                'arn:aws:elasticbeanstalk:us-west-2:123123123123:platform/ibnlempnsr-custom-platform/1.0.0',
                force=True),
            mock.call(
                'arn:aws:elasticbeanstalk:us-west-2:123123123123:platform/ibnlempnsr-custom-platform/1.0.1',
                force=True)
        ])
예제 #15
0
    def test_delete__single_platform_version(self,
                                             delete_platform_version_mock):
        app = EB(argv=['platform', 'delete', '1.1.1', '--force'])
        app.setup()
        app.run()

        delete_platform_version_mock.assert_called_once_with('1.1.1', True)
예제 #16
0
    def test_create__create_with_tags(self, create_platform_version_mock,
                                      get_instance_profile_mock):
        get_instance_profile_mock.return_value = 'my-instance-profile'

        app = EB(argv=['platform', 'create', '--tags', 'a=1, b=2'])
        app.setup()
        app.run()

        create_platform_version_mock.assert_called_once_with(
            None,
            False,
            False,
            False,
            None, {
                'id': None,
                'subnets': None,
                'publicip': False
            },
            tags=[{
                'Key': 'a',
                'Value': '1'
            }, {
                'Key': 'b',
                'Value': '2'
            }],
            timeout=None)
예제 #17
0
    def test_deploy(
            self,
            deploy_mock,
            get_env_name_mock,
            get_app_name_mock
    ):
        get_app_name_mock.return_value = 'my-application'
        get_env_name_mock.return_value = 'environment-1'

        app = EB(argv=['deploy'])
        app.setup()
        app.run()

        deploy_mock.assert_called_with(
            'my-application',
            'environment-1',
            None,
            None,
            None,
            group_name=None,
            process_app_versions=False,
            source=None,
            staged=False,
            timeout=None
        )
예제 #18
0
    def test_list(self, list_env_names_mock, get_app_name_mock):
        get_app_name_mock.return_value = 'my-application'

        app = EB(argv=['list'])
        app.setup()
        app.run()

        list_env_names_mock.assert_called_with('my-application', False, False)
예제 #19
0
    def test_failure_to_download_config_from_s3(self, delete_config_mock,
                                                get_app_name_mock):
        delete_config_mock.side_effect = None
        get_app_name_mock.return_value = 'my-application'

        app = EB(argv=['config', 'delete', 'my-cfg-name.config'])
        app.setup()
        app.run()
예제 #20
0
    def test_list__neutral_workspace__all_platforms_and_status_filters_are_not_applicable(
            self):
        self.setup_platform_workspace()
        fileoperations.write_config_setting('global', 'workspace_type', None)

        app = EB(argv=['platform', 'list', '-a', '-s', 'READY'])
        app.setup()
        app.run()
예제 #21
0
    def test_list__all__verbose(self, list_env_names_mock, get_app_name_mock):
        get_app_name_mock.return_value = 'my-application'

        app = EB(argv=['list', '--all', '--verbose'])
        app.setup()
        app.run()

        list_env_names_mock.assert_called_with(None, True, True)
예제 #22
0
    def test_clone__prompt_for_choice_between_current_and_latest_platform_arn_in_interactive_mode(
            self,
            prompt_for_item_in_list_mock,
            find_solution_stack_from_string_mock,
            is_cname_available_mock,
            get_app_name_mock,
            get_env_name_mock,
            make_cloned_env_mock,
            clone_environment_request_mock,
            prompt_for_environment_name_mock,
            get_environment_names_mock,
            get_environment_mock
    ):
        is_cname_available_mock.return_value = True
        find_solution_stack_from_string_mock.return_value = PlatformVersion(
            'arn:aws:elasticbeanstalk:us-west-2::platform/PHP 7.2 running on 64bit Amazon Linux/2.6.5'
        )
        get_app_name_mock.return_value = 'my-application'
        get_env_name_mock.return_value = 'environment-1'
        prompt_for_environment_name_mock.return_value = 'environment-1-clone'
        get_environment_names_mock.return_value = Environment.json_to_environment_objects_array(
            mock_responses.DESCRIBE_ENVIRONMENTS_RESPONSE['Environments']
        )
        get_environment_mock.return_value = environment_from_mock_responses('environment-1')
        prompt_for_item_in_list_mock.return_value = 'Latest  (arn:aws:elasticbeanstalk:us-west-2::platform/PHP 7.2 running on 64bit Amazon Linux/2.6.5)'
        clone_environment_request_mock.return_value = mock.MagicMock()
        clone_environment_request = clone_environment_request_mock.return_value

        app = EB(argv=['clone', '--cname', 'some-cname'])
        app.setup()
        app.run()

        prompt_for_environment_name_mock.assert_called_once_with(
            default_name='my-application-clone',
            prompt_text='Enter name for Environment Clone'
        )
        prompt_for_item_in_list_mock.assert_called_once_with(
            [
                'Latest  (arn:aws:elasticbeanstalk:us-west-2::platform/PHP 7.2 running on 64bit Amazon Linux/2.6.5)',
                'Same    (arn:aws:elasticbeanstalk:us-west-2::platform/PHP 7.1 running on 64bit Amazon Linux/2.6.5)'
            ]
        )
        clone_environment_request_mock.assert_called_once_with(
            app_name='environment-1',
            cname='some-cname',
            env_name='environment-1-clone',
            original_name='my-application',
            platform=PlatformVersion(
                'arn:aws:elasticbeanstalk:us-west-2::platform/PHP 7.2 running on 64bit Amazon Linux/2.6.5'
            ),
            scale=None,
            tags=[]
        )
        make_cloned_env_mock.assert_called_once_with(
            clone_environment_request,
            nohang=False,
            timeout=None
        )
    def test_delete__version_not_specified(
            self,
            delete_platform_version_mock
    ):
        app = EB(argv=['platform', 'delete', '--force'])
        app.setup()
        app.run()

        delete_platform_version_mock.assert_not_called()
예제 #24
0
    def test_local_run(self, setenv_mock):
        app = EB(argv=[
            'local', 'setenv', 'ENV_URL="www.localhost.com",HOME=/home/ubuntu/'
        ])
        app.setup()
        app.run()

        setenv_mock.assert_called_once_with(
            ['ENV_URL="www.localhost.com",HOME=/home/ubuntu/'])
    def test_tags_command_fails_when_list_appears_with_add_delete_or_update(
        self,
        get_env_name_mock,
    ):
        get_env_name_mock.return_value = 'my_env'
        app = EB(argv=['tags', 'my_env', '--add', 'key1=value1', '--list'])
        app.setup()

        with self.assertRaises(InvalidOptionsError):
            app.run()
    def test_tags__command_fails_when_branch_has_no_default_environment(
        self,
        get_env_name_mock,
    ):
        get_env_name_mock.side_effect = NoEnvironmentForBranchError

        app = EB(argv=['tags', '--list'])
        app.setup()
        with self.assertRaises(NoEnvironmentForBranchError):
            app.run()
    def test_health(self, get_app_name_mock, get_env_name_mock, open_app_mock):
        get_app_name_mock.return_value = 'my-application'
        get_env_name_mock.return_value = 'environment-1'

        app = EB(argv=['open'])
        app.setup()
        app.run()

        open_app_mock.assert_called_once_with('my-application',
                                              'environment-1')
예제 #28
0
    def test_health__should_refresh(self, display_interactive_health_mock,
                                    get_env_name_mock, get_app_name_mock):
        get_app_name_mock.return_value = 'my-application'
        get_env_name_mock.return_value = 'environment-1'

        app = EB(argv=['health', '--refresh'])
        app.setup()
        app.run()

        display_interactive_health_mock.assert_called_once_with(
            'my-application', 'environment-1', True, False, 'split')
예제 #29
0
    def test_events__follow(self, print_events_mock, get_env_name_mock,
                            get_app_name_mock):
        get_app_name_mock.return_value = 'my-application'
        get_env_name_mock.return_value = 'environment-1'

        app = EB(argv=['events', '-f'])
        app.setup()
        app.run()

        print_events_mock.assert_called_once_with('my-application',
                                                  'environment-1', True)
예제 #30
0
    def test_download_config_from_s3(self, log_error_mock,
                                     download_config_from_s3_mock,
                                     get_app_name_mock):
        download_config_from_s3_mock.side_effect = None
        get_app_name_mock.return_value = 'my-application'

        app = EB(argv=['config', 'get', 'my-cfg-name.config'])
        app.setup()
        app.run()

        log_error_mock.assert_not_called()