Пример #1
0
 def test_init_okta_with_empty_input(self, okta_mock, _config_mock):
     okta_mock.EmptyInput = BaseException
     okta_mock.OktaSaml = mock.MagicMock()
     okta_mock.OktaSaml.side_effect = okta.EmptyInput
     keyman = Keyman(['foo', '-o', 'foo', '-u', 'bar', '-a', 'baz'])
     with self.assertRaises(SystemExit):
         keyman.init_okta('troz')
Пример #2
0
    def test_auth_okta_unknown_error(self, _config_mock):
        keyman = Keyman(['foo', '-o', 'foo', '-u', 'bar', '-a', 'baz'])
        keyman.okta_client = mock.MagicMock()
        keyman.okta_client.auth.side_effect = okta.UnknownError

        with self.assertRaises(SystemExit):
            keyman.auth_okta()
Пример #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_start_session_okta_failure(self, _config_mock):
        keyman = Keyman(["foo", "-o", "foo", "-u", "bar", "-a", "baz"])
        keyman.okta_client = mock.MagicMock()
        keyman.okta_client.get_assertion.side_effect = okta.UnknownError

        with self.assertRaises(okta.UnknownError):
            keyman.start_session()
Пример #5
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()])
Пример #6
0
    def test_auth_okta_bad_password(self, _config_mock):
        keyman = Keyman(['foo', '-o', 'foo', '-u', 'bar', '-a', 'baz'])
        keyman.okta_client = mock.MagicMock()
        keyman.okta_client.auth.side_effect = okta.InvalidPassword

        with self.assertRaises(SystemExit):
            keyman.auth_okta()
Пример #7
0
    def test_handle_appid_selection(self, _config_mock):
        keyman = Keyman(["foo", "-o", "foo", "-u", "bar"])
        keyman.config.accounts = [
            {"name": "myAccount", "appid": "myID"},
            {"name": "myAccount", "appid": "myID"},
        ]
        keyman.config.appid = None
        keyman.selector_menu = mock.MagicMock(name="selector_menu")
        keyman.selector_menu.return_value = 0
        keyman.config.set_appid_from_account_id = mock.MagicMock()

        keyman.handle_appid_selection()

        keyman.selector_menu.assert_has_calls(
            [
                mock.call(
                    [
                        {"name": "myAccount", "appid": "myID"},
                        {"name": "myAccount", "appid": "myID"},
                    ],
                    [{"name": "Account"}],
                ),
            ],
        )
        keyman.config.set_appid_from_account_id.assert_has_calls(
            [
                mock.call(0),
            ],
        )
Пример #8
0
    def test_init_okta(self, okta_mock, _config_mock):
        okta_mock.OktaSaml = mock.MagicMock()
        keyman = Keyman(['foo', '-o', 'foo', '-u', 'bar', '-a', 'baz'])
        keyman.init_okta('troz')

        okta_mock.OktaSaml.assert_has_calls(
            [mock.call(mock.ANY, mock.ANY, 'troz', duo_factor=mock.ANY)])
Пример #9
0
    def test_auth_okta(self, _config_mock):
        keyman = Keyman(['foo', '-o', 'foo', '-u', 'bar', '-a', 'baz'])
        keyman.okta_client = mock.MagicMock()
        keyman.okta_client.auth.return_value = None

        ret = keyman.auth_okta()
        self.assertEqual(ret, None)
Пример #10
0
    def test_auth_okta(self, _config_mock):
        keyman = Keyman(["foo", "-o", "foo", "-u", "bar", "-a", "baz"])
        keyman.okta_client = mock.MagicMock()
        keyman.okta_client.auth.return_value = None

        ret = keyman.auth_okta()
        self.assertEqual(ret, None)
Пример #11
0
    def test_handle_duo_factor_selection(self, _config_mock):
        keyman = Keyman(['foo', '-o', 'foo', '-u', 'bar'])
        keyman.config.accounts = [{'name': 'myAccount', 'appid': 'myID'}]
        keyman.config.appid = None
        keyman.selector_menu = mock.MagicMock(name='selector_menu')
        keyman.selector_menu.return_value = 0
        keyman.config.set_appid_from_account_id = mock.MagicMock()

        ret = keyman.handle_duo_factor_selection()

        keyman.selector_menu.assert_has_calls([
            mock.call([{
                'name': '📲 Duo Push',
                'factor': 'push'
            }, {
                'name': '📟 OTP Passcode',
                'factor': 'passcode'
            }, {
                'name': '📞 Phone call',
                'factor': 'call'
            }], [{
                'name': 'Duo Factor'
            }])
        ])
        self.assertEqual(ret, 'push')
Пример #12
0
    def test_selector_menu(self, _config_mock):
        keyman = Keyman(['foo'])
        Keyman.generate_template = mock.MagicMock()
        Keyman.print_selector_table = mock.MagicMock()
        keyman.user_input = mock.MagicMock()
        keyman.user_input.side_effect = ['invalid', '', 0]
        stuff = [{'artist': 'Metallica'}, {'artist': 'Soundgarden'}]
        header = [{'artist': 'Artist'}]

        ret = keyman.selector_menu(stuff, header)

        self.assertEqual(ret, 0)
        keyman.user_input.assert_has_calls([
            mock.call('Selection: '),
            mock.call('Selection: '),
            mock.call('Selection: ')
        ])
        Keyman.generate_template.assert_has_calls([
            mock.call([{
                'artist': 'Metallica'
            }, {
                'artist': 'Soundgarden'
            }], [{
                'artist': 'Artist'
            }]),
        ])
        Keyman.print_selector_table.assert_has_calls([
            mock.call(mock.ANY, [{
                'artist': 'Artist'
            }], [{
                'artist': 'Metallica'
            }, {
                'artist': 'Soundgarden'
            }]),
        ])
Пример #13
0
    def test_handle_appid_selection(self, _config_mock):
        keyman = Keyman(['foo', '-o', 'foo', '-u', 'bar'])
        keyman.config.accounts = [{
            'name': 'myAccount',
            'appid': 'myID'
        }, {
            'name': 'myAccount',
            'appid': 'myID'
        }]
        keyman.config.appid = None
        keyman.selector_menu = mock.MagicMock(name='selector_menu')
        keyman.selector_menu.return_value = 0
        keyman.config.set_appid_from_account_id = mock.MagicMock()

        keyman.handle_appid_selection()

        keyman.selector_menu.assert_has_calls([
            mock.call([{
                'name': 'myAccount',
                'appid': 'myID'
            }, {
                'name': 'myAccount',
                'appid': 'myID'
            }], [{
                'name': 'Account'
            }])
        ])
        keyman.config.set_appid_from_account_id.assert_has_calls(
            [mock.call(0)])
Пример #14
0
    def test_auth_okta_bad_password(self, _config_mock):
        keyman = Keyman(["foo", "-o", "foo", "-u", "bar", "-a", "baz"])
        keyman.okta_client = mock.MagicMock()
        keyman.okta_client.auth.side_effect = okta.InvalidPassword

        with self.assertRaises(SystemExit):
            keyman.auth_okta()
Пример #15
0
    def test_auth_okta_unknown_error(self, _config_mock):
        keyman = Keyman(["foo", "-o", "foo", "-u", "bar", "-a", "baz"])
        keyman.okta_client = mock.MagicMock()
        keyman.okta_client.auth.side_effect = okta.UnknownError

        with self.assertRaises(SystemExit):
            keyman.auth_okta()
Пример #16
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(),
            ],
        )
Пример #17
0
    def test_start_session_okta_failure(self, _config_mock):
        keyman = Keyman(['foo', '-o', 'foo', '-u', 'bar', '-a', 'baz'])
        keyman.okta_client = mock.MagicMock()
        keyman.okta_client.get_assertion.side_effect = okta.UnknownError

        with self.assertRaises(okta.UnknownError):
            keyman.start_session()
Пример #18
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()])
Пример #19
0
    def test_init_okta_with_oktapreview(self, okta_mock, _config_mock):
        okta_mock.OktaSaml = mock.MagicMock()
        keyman = Keyman(['foo', '-o', 'foo', '-u', 'bar', '-a', 'baz'])
        keyman.config.oktapreview = True
        keyman.init_okta('troz')

        okta_mock.OktaSaml.assert_has_calls(
            [mock.call(mock.ANY, mock.ANY, 'troz', oktapreview=True)])
Пример #20
0
    def test_start_session_xml_failure(self, session_mock, _config_mock):
        keyman = Keyman(["foo", "-o", "foo", "-u", "bar", "-a", "baz"])
        keyman.okta_client = mock.MagicMock()
        xml_error = xml.etree.ElementTree.ParseError()
        session_mock.side_effect = xml_error

        with self.assertRaises(aws.InvalidSaml):
            keyman.start_session()
Пример #21
0
    def test_user_password_cache_get_success(self, pass_mock, _config_mock,
                                             keyring_kr_mock, keyring_pw_mock):
        keyman = Keyman('')
        keyman.config.password_cache = True
        keyman.config.password_reset = False
        keyring_pw_mock.return_value = 'test'

        self.assertEqual('test', keyman.user_password())
        assert not pass_mock.called
Пример #22
0
    def test_handle_appid_selection_one_account(self, _config_mock):
        keyman = Keyman(['foo', '-o', 'foo', '-u', 'bar'])
        keyman.config.accounts = [{'name': 'myAccount', 'appid': 'myID'}]
        keyman.config.appid = None
        keyman.config.set_appid_from_account_id = mock.MagicMock()
        keyman.handle_appid_selection()

        keyman.config.set_appid_from_account_id.assert_has_calls(
            [mock.call(0)])
Пример #23
0
    def test_init_okta_with_empty_input(self, okta_mock, _config_mock):
        okta_mock.EmptyInput = BaseException
        okta_mock.OktaSaml = mock.MagicMock()
        okta_mock.OktaSaml.side_effect = okta.EmptyInput

        keyman = Keyman(["foo", "-o", "foo", "-u", "bar", "-a", "baz"])

        with self.assertRaises(SystemExit):
            keyman.init_okta("troz")
Пример #24
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.aws_auth_loop()

        keyman.start_session.assert_has_calls(
            [mock.call(), mock.call().assume_role()])
Пример #25
0
    def test_wrap_up_noop(self, config_mock):
        config_mock().command = None
        config_mock().console = None
        keyman = Keyman(['foo', '-o', 'foo', '-u', 'bar', '-a', 'baz'])
        keyman.log = mock.MagicMock()

        keyman.wrap_up(None)

        keyman.log.assert_has_calls([mock.call.info('All done! 👍')])
Пример #26
0
    def test_aws_auth_loop_exception(self, config_mock, _sleep_mock):
        config_mock().reup = False
        keyman = Keyman(['foo', '-o', 'foo', '-u', 'bar', '-a', 'baz'])
        keyman.start_session = mock.MagicMock()
        keyman.start_session.side_effect = Exception()

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

        assert keyman.start_session.called
Пример #27
0
    def test_wrap_up_with_command(self, config_mock, os_mock):
        config_mock().command = 'echo w00t'
        keyman = Keyman(['foo', '-o', 'foo', '-u', 'bar', '-a', 'baz'])
        fake_session = mock.MagicMock()
        fake_session.export_creds_to_var_string.return_value = 'foo'

        keyman.wrap_up(fake_session)

        fake_session.assert_has_calls([mock.call.export_creds_to_var_string()])
        os_mock.assert_has_calls([mock.call.system('foo echo w00t')])
Пример #28
0
    def test_user_password_cache_unavailable(self, pass_mock, _config_mock,
                                             keyring_kr_mock, keyring_pw_mock):
        keyman = Keyman('')
        keyman.config.password_cache = True
        keyman.config.password_reset = False
        keyring_kr_mock.side_effect = keyring.errors.InitError
        pass_mock.getpass.return_value = 'test'

        self.assertEqual('test', keyman.user_password())
        assert not keyring_pw_mock.called
Пример #29
0
    def test_init_okta(self, okta_mock, _config_mock):
        okta_mock.OktaSaml = mock.MagicMock()
        keyman = Keyman(["foo", "-o", "foo", "-u", "bar", "-a", "baz"])
        keyman.init_okta("troz")

        okta_mock.OktaSaml.assert_has_calls(
            [
                mock.call(mock.ANY, mock.ANY, "troz", duo_factor=mock.ANY),
            ],
        )
Пример #30
0
    def test_aws_auth_loop_exception(self, config_mock, _sleep_mock):
        config_mock().reup = False
        keyman = Keyman(["foo", "-o", "foo", "-u", "bar", "-a", "baz"])
        keyman.start_session = mock.MagicMock()
        keyman.start_session.side_effect = Exception()

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

        assert keyman.start_session.called