diff --git a/kubernetes/base b/kubernetes/base index ec31e05c90..5092d96134 160000 --- a/kubernetes/base +++ b/kubernetes/base @@ -1 +1 @@ -Subproject commit ec31e05c90218a915dea948703ed0d543d5d6835 +Subproject commit 5092d9613476673908fa9df7c55da83bc3be53d8 diff --git a/kubernetes/e2e_test/test_client.py b/kubernetes/e2e_test/test_client.py index 57000b9827..d7a450c6a3 100644 --- a/kubernetes/e2e_test/test_client.py +++ b/kubernetes/e2e_test/test_client.py @@ -29,6 +29,26 @@ def short_uuid(): return id[-12:] +def manifest_with_command(name, command): + return { + 'apiVersion': 'v1', + 'kind': 'Pod', + 'metadata': { + 'name': name + }, + 'spec': { + 'containers': [{ + 'image': 'busybox', + 'name': 'sleep', + "args": [ + "/bin/sh", + "-c", + command + ] + }] + } + } + class TestClient(unittest.TestCase): @classmethod @@ -40,25 +60,7 @@ def test_pod_apis(self): api = core_v1_api.CoreV1Api(client) name = 'busybox-test-' + short_uuid() - pod_manifest = { - 'apiVersion': 'v1', - 'kind': 'Pod', - 'metadata': { - 'name': name - }, - 'spec': { - 'containers': [{ - 'image': 'busybox', - 'name': 'sleep', - "args": [ - "/bin/sh", - "-c", - "while true;do date;sleep 5; done" - ] - }] - } - } - + pod_manifest = manifest_with_command(name, "while true;do date;sleep 5; done") resp = api.create_namespaced_pod(body=pod_manifest, namespace='default') self.assertEqual(name, resp.metadata.name) @@ -117,6 +119,45 @@ def test_pod_apis(self): resp = api.delete_namespaced_pod(name=name, body={}, namespace='default') + def test_exit_code(self): + client = api_client.ApiClient(configuration=self.config) + api = core_v1_api.CoreV1Api(client) + + name = 'busybox-test-' + short_uuid() + pod_manifest = manifest_with_command(name, "while true;do date;sleep 5; done") + resp = api.create_namespaced_pod(body=pod_manifest, + namespace='default') + self.assertEqual(name, resp.metadata.name) + self.assertTrue(resp.status.phase) + + while True: + resp = api.read_namespaced_pod(name=name, + namespace='default') + self.assertEqual(name, resp.metadata.name) + self.assertTrue(resp.status.phase) + if resp.status.phase == 'Running': + break + time.sleep(1) + + commands_expected_values = ( + (["false", 1]), + (["/bin/sh", "-c", "sleep 1; exit 3"], 3), + (["true", 0]), + (["/bin/sh", "-c", "ls /"], 0) + ) + for command, value in commands_expected_values: + client = stream(api.connect_get_namespaced_pod_exec, name, 'default', + command=command, + stderr=True, stdin=False, + stdout=True, tty=False, + _preload_content=False) + + self.assertIsNone(client.returncode) + client.run_forever(timeout=10) + self.assertEqual(client.returncode, value) + + resp = api.delete_namespaced_pod(name=name, body={}, + namespace='default') def test_service_apis(self): client = api_client.ApiClient(configuration=self.config)