コード例 #1
0
    def test_handle_multiple_roles(self, _config_mock):
        keyman = Keyman(["foo", "-o", "foo", "-u", "bar", "-a", "baz"])
        keyman.selector_menu = mock.MagicMock()
        keyman.selector_menu.return_value = 0
        roles = [
            {"account": "acct1", "role_name": "role1", "roleIdx": 0},
            {"account": "acct1", "role_name": "role2", "roleIdx": 1},
        ]
        mock_session = mock.MagicMock()
        mock_session.available_roles.return_value = roles

        keyman.config.account = None
        keyman.config.role = None

        keyman.handle_multiple_roles(mock_session)

        keyman.selector_menu.assert_has_calls(
            [
                mock.call(
                    roles,
                    [{"account": "Account"}, {"role_name": "Role"}],
                ),
            ],
        )
        mock_session.assert_has_calls(
            [
                mock.call.available_roles(),
            ],
        )
コード例 #2
0
    def test_handle_multiple_roles(self, _config_mock):
        keyman = Keyman(['foo', '-o', 'foo', '-u', 'bar', '-a', 'baz'])
        keyman.selector_menu = mock.MagicMock()
        keyman.selector_menu.return_value = 0
        roles = ([{
            'account': 'acct1',
            'role_name': 'role1',
            'roleIdx': 0
        }, {
            'account': 'acct1',
            'role_name': 'role2',
            'roleIdx': 1
        }])
        mock_session = mock.MagicMock()
        mock_session.available_roles.return_value = roles

        keyman.config.account = None
        keyman.config.role = None

        keyman.handle_multiple_roles(mock_session)

        keyman.selector_menu.assert_has_calls([
            mock.call(roles, [{
                'account': 'Account'
            }, {
                'role_name': 'Role'
            }])
        ])
        mock_session.assert_has_calls([mock.call.available_roles()])
コード例 #3
0
    def test_handle_multiple_roles_single_role_match(self, _config_mock):
        keyman = Keyman(["foo", "-o", "foo", "-u", "bar", "-a", "baz"])
        keyman.selector_menu = mock.MagicMock()
        keyman.selector_menu.return_value = 0
        roles = [
            {"account": "acct1", "role_name": "role1", "roleIdx": 0},
            {"account": "acct1", "role_name": "role2", "roleIdx": 1},
            {"account": "acct2", "role_name": "role1", "roleIdx": 2},
            {"account": "acct2", "role_name": "role2", "roleIdx": 3},
        ]
        mock_session = mock.MagicMock()
        mock_session.available_roles.return_value = roles

        keyman.config.account = "acct1"
        keyman.config.role = "role2"

        assert keyman.handle_multiple_roles(mock_session)
        assert keyman.role == 1

        keyman.selector_menu.assert_not_called()

        mock_session.assert_has_calls(
            [
                mock.call.available_roles(),
            ],
        )
コード例 #4
0
    def test_handle_multiple_roles_no_match_role(self, _config_mock):
        keyman = Keyman(['foo', '-o', 'foo', '-u', 'bar', '-a', 'baz'])
        keyman.selector_menu = mock.MagicMock()
        keyman.selector_menu.return_value = 0
        roles = ([{
            'account': 'acct1',
            'role_name': 'role1',
            'roleIdx': 0
        }, {
            'account': 'acct1',
            'role_name': 'role2',
            'roleIdx': 1
        }, {
            'account': 'acct2',
            'role_name': 'role1',
            'roleIdx': 2
        }])
        mock_session = mock.MagicMock()
        mock_session.available_roles.return_value = roles

        keyman.config.account = 'role3'
        keyman.config.role = None

        assert not keyman.handle_multiple_roles(mock_session)

        keyman.selector_menu.assert_not_called()

        mock_session.assert_has_calls([mock.call.available_roles()])
コード例 #5
0
    def test_aws_auth_loop_multirole(self, config_mock):
        config_mock().reup = False
        keyman = Keyman(['foo', '-o', 'foo', '-u', 'bar', '-a', 'baz'])
        keyman.start_session = mock.MagicMock()
        keyman.start_session().assume_role.side_effect = aws.MultipleRoles
        keyman.handle_multiple_roles = mock.MagicMock()

        keyman.aws_auth_loop()

        keyman.handle_multiple_roles.assert_has_calls([mock.call(mock.ANY)])
コード例 #6
0
    def test_aws_auth_loop(self, config_mock):
        config_mock().reup = False
        keyman = Keyman(['foo', '-o', 'foo', '-u', 'bar', '-a', 'baz'])
        keyman.start_session = mock.MagicMock()
        keyman.wrap_up = mock.MagicMock()
        keyman.handle_multiple_roles = mock.MagicMock()
        keyman.handle_multiple_roles.return_value = True

        keyman.aws_auth_loop()

        keyman.start_session.assert_has_calls(
            [mock.call(), mock.call().assume_role(mock.ANY)])
        assert keyman.wrap_up.called
        assert keyman.handle_multiple_roles.called
コード例 #7
0
    def test_aws_auth_loop_reauth(self, config_mock, _sleep_mock):
        config_mock().reup = False
        keyman = Keyman(['foo', '-o', 'foo', '-u', 'bar', '-a', 'baz'])
        session_instance = mock.MagicMock()
        session_instance.assume_role.side_effect = okta.ReauthNeeded
        session_instance.is_valid = False
        keyman.start_session = mock.MagicMock()
        keyman.start_session.side_effect = session_instance, Exception()
        keyman.handle_multiple_roles = mock.MagicMock()
        keyman.auth_okta = mock.MagicMock()

        with self.assertRaises(Exception):
            keyman.aws_auth_loop()

        keyman.auth_okta.assert_has_calls([mock.call(state_token=None)])
コード例 #8
0
    def test_handle_multiple_roles_rollname_match(self, _config_mock):
        keyman = Keyman(['foo', '-o', 'foo', '-u', 'bar', '-a', 'baz'])
        keyman.selector_menu = mock.MagicMock()
        keyman.selector_menu.return_value = 0
        roles = ([{
            'account': 'acct1',
            'role_name': 'role1',
            'roleIdx': 0
        }, {
            'account': 'acct1',
            'role_name': 'role2',
            'roleIdx': 1
        }, {
            'account': 'acct2',
            'role_name': 'role1',
            'roleIdx': 2
        }, {
            'account': 'acct2',
            'role_name': 'role2',
            'roleIdx': 3
        }])
        mock_session = mock.MagicMock()
        mock_session.available_roles.return_value = roles

        keyman.config.account = None
        keyman.config.role = 'role2'

        assert keyman.handle_multiple_roles(mock_session)
        # item 0 "selected" from menu translates to role #1
        assert keyman.role == 1

        keyman.selector_menu.assert_has_calls([
            mock.call(([{
                'account': 'acct1',
                'role_name': 'role2',
                'roleIdx': 1
            }, {
                'account': 'acct2',
                'role_name': 'role2',
                'roleIdx': 3
            }]), [{
                'account': 'Account'
            }, {
                'role_name': 'Role'
            }])
        ])

        mock_session.assert_has_calls([mock.call.available_roles()])
コード例 #9
0
    def test_aws_auth_loop_multirole_no_match(self, config_mock):
        config_mock().reup = False
        config_mock().screen = False
        keyman = Keyman(['foo', '-o', 'foo', '-u', 'bar', '-a', 'baz'])
        session_instance = mock.MagicMock()
        session_instance.assume_role.side_effect = aws.MultipleRoles
        keyman.start_session = mock.MagicMock()
        keyman.start_session.return_value = session_instance
        keyman.handle_multiple_roles = mock.MagicMock()
        keyman.handle_multiple_roles.return_value = False

        ret = keyman.aws_auth_loop()

        keyman.handle_multiple_roles.assert_has_calls([mock.call(mock.ANY)])

        self.assertEqual(ret, 1)
コード例 #10
0
    def test_aws_auth_loop_continue(self, config_mock, sleep_mock):
        config_mock().reup = False
        keyman = Keyman(['foo', '-o', 'foo', '-u', 'bar', '-a', 'baz'])
        keyman.config.reup = True
        session_instance = mock.MagicMock()
        session_instance.is_valid = True
        keyman.start_session = mock.MagicMock()
        keyman.start_session.return_value = session_instance
        keyman.handle_multiple_roles = mock.MagicMock()
        keyman.handle_multiple_roles.return_value = True

        with self.assertRaises(Exception):
            keyman.aws_auth_loop()

        sleep_mock.assert_has_calls([mock.call(60)])

        assert keyman.handle_multiple_roles.called
コード例 #11
0
    def test_aws_auth_loop(self, config_mock):
        config_mock().reup = False
        keyman = Keyman(["foo", "-o", "foo", "-u", "bar", "-a", "baz"])
        keyman.start_session = mock.MagicMock()
        keyman.wrap_up = mock.MagicMock()
        keyman.handle_multiple_roles = mock.MagicMock()
        keyman.handle_multiple_roles.return_value = True

        keyman.aws_auth_loop()

        keyman.start_session.assert_has_calls(
            [
                mock.call(),
                mock.call().assume_role(mock.ANY),
            ],
        )
        assert keyman.wrap_up.called
        assert keyman.handle_multiple_roles.called
コード例 #12
0
    def test_aws_auth_loop_multirole(self, config_mock):
        config_mock().reup = False
        keyman = Keyman(['foo', '-o', 'foo', '-u', 'bar', '-a', 'baz'])
        session_instance = mock.MagicMock()
        session_instance.assume_role.side_effect = aws.MultipleRoles
        keyman.start_session = mock.MagicMock()
        keyman.start_session.return_value = session_instance
        keyman.handle_multiple_roles = mock.MagicMock()

        with self.assertRaises(Exception):
            keyman.aws_auth_loop()

        session_instance.assume_role.assert_has_calls([
            mock.call(),
            mock.call(),
        ])
        keyman.handle_multiple_roles.assert_has_calls([
            mock.call(mock.ANY)
        ])
コード例 #13
0
    def test_handle_multiple_roles(self, _config_mock):
        keyman = Keyman(['foo', '-o', 'foo', '-u', 'bar', '-a', 'baz'])
        keyman.selector_menu = mock.MagicMock()
        keyman.selector_menu.return_value = 0
        roles = [{}, {}]
        mock_session = mock.MagicMock()
        mock_session.available_roles.return_value = roles

        ret = keyman.handle_multiple_roles(mock_session)

        self.assertEqual(ret, 0)

        keyman.selector_menu.assert_has_calls(
            [mock.call([{}, {}], 'role', 'Role')])
        mock_session.assert_has_calls([
            mock.call.available_roles(),
            mock.call.set_role(mock.ANY),
            mock.call.assume_role()
        ])
コード例 #14
0
    def test_handle_multiple_roles_rollname_match(self, _config_mock):
        keyman = Keyman(["foo", "-o", "foo", "-u", "bar", "-a", "baz"])
        keyman.selector_menu = mock.MagicMock()
        keyman.selector_menu.return_value = 0
        roles = [
            {"account": "acct1", "role_name": "role1", "roleIdx": 0},
            {"account": "acct1", "role_name": "role2", "roleIdx": 1},
            {"account": "acct2", "role_name": "role1", "roleIdx": 2},
            {"account": "acct2", "role_name": "role2", "roleIdx": 3},
        ]
        mock_session = mock.MagicMock()
        mock_session.available_roles.return_value = roles

        keyman.config.account = None
        keyman.config.role = "role2"

        assert keyman.handle_multiple_roles(mock_session)
        # item 0 "selected" from menu translates to role #1
        assert keyman.role == 1

        keyman.selector_menu.assert_has_calls(
            [
                mock.call(
                    (
                        [
                            {"account": "acct1", "role_name": "role2", "roleIdx": 1},
                            {"account": "acct2", "role_name": "role2", "roleIdx": 3},
                        ]
                    ),
                    [{"account": "Account"}, {"role_name": "Role"}],
                ),
            ],
        )

        mock_session.assert_has_calls(
            [
                mock.call.available_roles(),
            ],
        )