diff --git a/kubernetes/base/config/exec_provider.py b/kubernetes/base/config/exec_provider.py index 3f9c8ca0d..9dd382760 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 b43926873..de8109499 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()