From b5b39b378eafd919ae0d731e291a2de33be64cbf Mon Sep 17 00:00:00 2001 From: Peter Horsley Date: Mon, 8 May 2023 08:11:56 +1000 Subject: [PATCH] Fix exception in ExecProvider when no console is attached. --- kubernetes/base/config/exec_provider.py | 4 ++-- kubernetes/base/config/exec_provider_test.py | 13 +++++++++++++ 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/kubernetes/base/config/exec_provider.py b/kubernetes/base/config/exec_provider.py index 3f9c8ca0d8..9dd3827609 100644 --- a/kubernetes/base/config/exec_provider.py +++ b/kubernetes/base/config/exec_provider.py @@ -53,11 +53,11 @@ def __init__(self, exec_config, cwd): value = item['value'] additional_vars[name] = value self.env.update(additional_vars) - + self.cwd = cwd or None def run(self, previous_response=None): - is_interactive = sys.stdout.isatty() + is_interactive = hasattr(sys.stdout, 'isatty') and sys.stdout.isatty() kubernetes_exec_info = { 'apiVersion': self.api_version, 'kind': 'ExecCredential', diff --git a/kubernetes/base/config/exec_provider_test.py b/kubernetes/base/config/exec_provider_test.py index b439268738..de8109499f 100644 --- a/kubernetes/base/config/exec_provider_test.py +++ b/kubernetes/base/config/exec_provider_test.py @@ -149,6 +149,19 @@ def test_run_in_dir(self, mock): ep.run() self.assertEqual(mock.call_args[1]['cwd'], '/some/directory') + @mock.patch('subprocess.Popen') + def test_ok_no_console_attached(self, mock): + instance = mock.return_value + instance.wait.return_value = 0 + instance.communicate.return_value = (self.output_ok, '') + mock_stdout = unittest.mock.patch( + 'sys.stdout', new=None) # Simulate detached console + with mock_stdout: + ep = ExecProvider(self.input_ok, None) + result = ep.run() + self.assertTrue(isinstance(result, dict)) + self.assertTrue('token' in result) + if __name__ == '__main__': unittest.main()