From 83f17e28921e5cb2edcbd6b50a09e08d19b16a6a Mon Sep 17 00:00:00 2001 From: Jana Cupova Date: Thu, 10 Mar 2022 10:43:02 +0100 Subject: [PATCH] Skip activate_session when logged Fixes: https://pagure.io/koji/issue/3253 --- cli/koji_cli/lib.py | 2 + tests/test_cli/test_activate_session.py | 196 +++++++++++++++--------- 2 files changed, 122 insertions(+), 76 deletions(-) diff --git a/cli/koji_cli/lib.py b/cli/koji_cli/lib.py index 31a2d877..04ef329b 100644 --- a/cli/koji_cli/lib.py +++ b/cli/koji_cli/lib.py @@ -730,6 +730,8 @@ def warn(msg): def activate_session(session, options): """Test and login the session is applicable""" + if session.logged_in: + return if isinstance(options, dict): options = optparse.Values(options) noauth = options.authtype == "noauth" or getattr(options, 'noauth', False) diff --git a/tests/test_cli/test_activate_session.py b/tests/test_cli/test_activate_session.py index 23e700bf..7b01998a 100644 --- a/tests/test_cli/test_activate_session.py +++ b/tests/test_cli/test_activate_session.py @@ -13,108 +13,152 @@ class TestActivateSession(unittest.TestCase): self.tempdir = tempfile.mkdtemp() self.warn = mock.patch('koji_cli.lib.warn').start() self.error = mock.patch('koji_cli.lib.error').start() - # self.ensure_connection = mock.patch('koji_cli.lib.warn.ensure_connection').start() + self.session = mock.MagicMock() def tearDown(self): mock.patch.stopall() shutil.rmtree(self.tempdir) def test_activate_session_noauth(self): - session = mock.MagicMock() - session.logged_in = False + self.session.logged_in = False options = {'authtype': 'noauth', 'debug': False} - activate_session(session, options) + activate_session(self.session, options) options = {'authtype': None, 'noauth': True, 'debug': False} - activate_session(session, options) - session.login.assert_not_called() - session.ssl_login.assert_not_called() - session.gssapi_login.assert_not_called() + activate_session(self.session, options) + self.session.login.assert_not_called() + self.session.ssl_login.assert_not_called() + self.session.gssapi_login.assert_not_called() def test_activate_session_ssl(self): - session = mock.MagicMock() - session.logged_in = True + self.session.logged_in = False certfile = '%s/CERT' % self.tempdir - options = {'authtype': 'ssl', - 'debug': False, - 'cert': certfile, - 'serverca': 'SERVERCA'} - activate_session(session, options) - session.ssl_login.assert_called_once_with(certfile, None, 'SERVERCA', - proxyuser=None) - session.login.assert_not_called() - session.gssapi_login.assert_not_called() + options = {'authtype': 'ssl', 'debug': False, 'cert': certfile, 'serverca': 'SERVERCA'} + activate_session(self.session, options) + self.session.ssl_login.assert_called_once_with(certfile, None, 'SERVERCA', proxyuser=None) + self.session.login.assert_not_called() + self.session.gssapi_login.assert_not_called() - def test_activate_session_ssl_implicit(self): - session = mock.MagicMock() - session.logged_in = True + def test_activate_session_ssl_logged(self): + self.session.logged_in = True + certfile = '%s/CERT' % self.tempdir + options = {'authtype': 'ssl', 'debug': False, 'cert': certfile, 'serverca': 'SERVERCA'} + activate_session(self.session, options) + self.session.ssl_login.assert_not_called() + self.session.login.assert_not_called() + self.session.gssapi_login.assert_not_called() + + def test_activate_session_ssl_implicit_logged(self): + self.session.logged_in = True certfile = '%s/CERT' % self.tempdir open(certfile, 'w').close() - options = {'authtype': None, - 'debug': False, - 'cert': certfile, - 'serverca': 'SERVERCA'} - activate_session(session, options) - session.ssl_login.assert_called_once_with(certfile, None, 'SERVERCA', - proxyuser=None) - session.login.assert_not_called() - session.gssapi_login.assert_not_called() + options = {'authtype': None, 'debug': False, 'cert': certfile, 'serverca': 'SERVERCA'} + activate_session(self.session, options) + self.session.ssl_login.assert_not_called() + self.session.login.assert_not_called() + self.session.gssapi_login.assert_not_called() + + def test_activate_session_ssl_implicit(self): + self.session.logged_in = False + certfile = '%s/CERT' % self.tempdir + open(certfile, 'w').close() + options = {'authtype': None, 'debug': False, 'cert': certfile, 'serverca': 'SERVERCA'} + activate_session(self.session, options) + self.session.ssl_login.assert_called_once_with(certfile, None, 'SERVERCA', proxyuser=None) + self.session.login.assert_not_called() + self.session.gssapi_login.assert_not_called() + + def test_activate_session_pw_logged(self): + self.session.logged_in = True + options = {'authtype': 'password', 'debug': False, 'cert': ''} + activate_session(self.session, options) + self.session.login.assert_not_called() + self.session.ssl_login.assert_not_called() + self.session.gssapi_login.assert_not_called() def test_activate_session_pw(self): - session = mock.MagicMock() - session.logged_in = True + self.session.logged_in = False options = {'authtype': 'password', 'debug': False, 'cert': ''} - activate_session(session, options) - session.login.assert_called_once_with() - session.ssl_login.assert_not_called() - session.gssapi_login.assert_not_called() + activate_session(self.session, options) + self.session.login.assert_called_once_with() + self.session.ssl_login.assert_not_called() + self.session.gssapi_login.assert_not_called() + + def test_activate_session_pw_implicit_logged(self): + self.session.logged_in = True + options = {'authtype': None, 'debug': False, 'cert': '', 'user': 'USER'} + activate_session(self.session, options) + self.session.login.assert_not_called() + self.session.ssl_login.assert_not_called() + self.session.gssapi_login.assert_not_called() def test_activate_session_pw_implicit(self): - session = mock.MagicMock() - session.logged_in = True - options = {'authtype': None, 'debug': False, 'cert': '', - 'user': 'USER'} - activate_session(session, options) - session.login.assert_called_once_with() - session.ssl_login.assert_not_called() - session.gssapi_login.assert_not_called() + self.session.logged_in = False + options = {'authtype': None, 'debug': False, 'cert': '', 'user': 'USER'} + activate_session(self.session, options) + self.session.login.assert_called_once_with() + self.session.ssl_login.assert_not_called() + self.session.gssapi_login.assert_not_called() + + def test_activate_session_krb_logged(self): + self.session.logged_in = True + options = {'authtype': 'kerberos', 'debug': False, 'cert': '', 'keytab': None, + 'principal': None} + activate_session(self.session, options) + self.session.login.assert_not_called() + self.session.ssl_login.assert_not_called() + self.session.gssapi_login.assert_not_called() def test_activate_session_krb(self): - session = mock.MagicMock() - session.logged_in = True - options = {'authtype': 'kerberos', 'debug': False, 'cert': '', - 'keytab': None, 'principal': None} - activate_session(session, options) - session.login.assert_not_called() - session.ssl_login.assert_not_called() - session.gssapi_login.assert_called_once_with(proxyuser=None) + self.session.logged_in = False + options = {'authtype': 'kerberos', 'debug': False, 'cert': '', 'keytab': None, + 'principal': None} + activate_session(self.session, options) + self.session.login.assert_not_called() + self.session.ssl_login.assert_not_called() + self.session.gssapi_login.assert_called_once_with(proxyuser=None) + + def test_activate_session_krb_implicit_logged(self): + self.session.logged_in = True + options = {'authtype': None, 'debug': False, 'cert': '', 'keytab': None, + 'principal': None} + activate_session(self.session, options) + self.session.login.assert_not_called() + self.session.ssl_login.assert_not_called() + self.session.gssapi_login.assert_not_called() def test_activate_session_krb_implicit(self): - session = mock.MagicMock() - session.logged_in = True - options = {'authtype': None, 'debug': False, 'cert': '', - 'keytab': None, 'principal': None} - activate_session(session, options) - session.login.assert_not_called() - session.ssl_login.assert_not_called() - session.gssapi_login.assert_called_once_with(proxyuser=None) + self.session.logged_in = False + options = {'authtype': None, 'debug': False, 'cert': '', 'keytab': None, + 'principal': None} + activate_session(self.session, options) + self.session.login.assert_not_called() + self.session.ssl_login.assert_not_called() + self.session.gssapi_login.assert_called_once_with(proxyuser=None) + + def test_activate_session_krb_keytab_logged(self): + self.session.logged_in = True + options = {'authtype': 'kerberos', 'debug': False, 'cert': '', 'keytab': 'KEYTAB', + 'principal': 'PRINCIPAL'} + activate_session(self.session, options) + self.session.login.assert_not_called() + self.session.ssl_login.assert_not_called() + self.session.gssapi_login.assert_not_called() def test_activate_session_krb_keytab(self): - session = mock.MagicMock() - session.logged_in = True - options = {'authtype': 'kerberos', 'debug': False, 'cert': '', - 'keytab': 'KEYTAB', 'principal': 'PRINCIPAL'} - activate_session(session, options) - session.login.assert_not_called() - session.ssl_login.assert_not_called() - session.gssapi_login.assert_called_once_with(principal='PRINCIPAL', - keytab='KEYTAB', proxyuser=None) + self.session.logged_in = False + options = {'authtype': 'kerberos', 'debug': False, 'cert': '', 'keytab': 'KEYTAB', + 'principal': 'PRINCIPAL'} + activate_session(self.session, options) + self.session.login.assert_not_called() + self.session.ssl_login.assert_not_called() + self.session.gssapi_login.assert_called_once_with(principal='PRINCIPAL', keytab='KEYTAB', + proxyuser=None) def test_activate_session_no_method(self): - session = mock.MagicMock() - session.logged_in = False + self.session.logged_in = False options = {'authtype': None, 'debug': False, 'cert': ''} - activate_session(session, options) - session.login.assert_not_called() - session.ssl_login.assert_not_called() - session.gssapi_login.assert_called_once() + activate_session(self.session, options) + self.session.login.assert_not_called() + self.session.ssl_login.assert_not_called() + self.session.gssapi_login.assert_called_once() self.error.assert_called_once()