From 5be9c893b3c6d15f9c4d4bfb5d70f7ab6c6c3f5b Mon Sep 17 00:00:00 2001 From: Haowei Cai Date: Tue, 5 Jan 2021 09:53:49 -0800 Subject: [PATCH 1/3] update python-base submodule --- kubernetes/base | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kubernetes/base b/kubernetes/base index 2da2b981ca..b002110430 160000 --- a/kubernetes/base +++ b/kubernetes/base @@ -1 +1 @@ -Subproject commit 2da2b981ca806b25487ad92d01a2164815c18517 +Subproject commit b0021104307c99bac5b2a7e353df21d864f85809 From 3b95adc8f36f442fc7065949b5c7801de50c07e3 Mon Sep 17 00:00:00 2001 From: Haowei Cai Date: Tue, 5 Jan 2021 09:58:42 -0800 Subject: [PATCH 2/3] configmap-e2e: use labels --- kubernetes/e2e_test/test_client.py | 3 ++- kubernetes/e2e_test/test_watch.py | 8 +++++--- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/kubernetes/e2e_test/test_client.py b/kubernetes/e2e_test/test_client.py index 4d367fa34c..af71b455a3 100644 --- a/kubernetes/e2e_test/test_client.py +++ b/kubernetes/e2e_test/test_client.py @@ -443,6 +443,7 @@ def test_configmap_apis(self): "apiVersion": "v1", "metadata": { "name": name, + "labels": {"e2e-tests": "true"}, }, "data": { "config.json": "{\"command\":\"/usr/bin/mysqld_safe\"}", @@ -466,7 +467,7 @@ def test_configmap_apis(self): resp = api.delete_namespaced_config_map( name=name, body={}, namespace='default') - resp = api.list_namespaced_config_map('default', pretty=True) + resp = api.list_namespaced_config_map('default', pretty=True, label_selector="e2e-tests=true") self.assertEqual([], resp.items) def test_node_apis(self): diff --git a/kubernetes/e2e_test/test_watch.py b/kubernetes/e2e_test/test_watch.py index 3530b8bbdf..134e9c26fd 100644 --- a/kubernetes/e2e_test/test_watch.py +++ b/kubernetes/e2e_test/test_watch.py @@ -32,6 +32,7 @@ def config_map_with_value(name, value): "kind": "ConfigMap", "metadata": { "name": name, + "labels": {"e2e-tests": "true"}, }, "data": { "key": value, @@ -57,7 +58,7 @@ def test_watch_configmaps(self): body=configmap_a, namespace='default') # list all configmaps and extract the resource version - resp = api.list_namespaced_config_map('default') + resp = api.list_namespaced_config_map('default', label_selector="e2e-tests=true") rv = resp.metadata.resource_version # create another configmap @@ -73,7 +74,7 @@ def test_watch_configmaps(self): # delete all configmaps api.delete_collection_namespaced_config_map( - namespace='default') + namespace='default', label_selector="e2e-tests=true") w = watch.Watch() # expect to observe all events happened after the initial LIST @@ -83,7 +84,8 @@ def test_watch_configmaps(self): for event in w.stream(api.list_namespaced_config_map, namespace='default', resource_version=rv, - timeout_seconds=5): + timeout_seconds=5, + label_selector="e2e-tests=true"): self.assertEqual(event['type'], expect[i]) # Kubernetes doesn't guarantee the order of the two objects # being deleted From 90931037ac2041f4029bf532e1b3d28f6053ddd1 Mon Sep 17 00:00:00 2001 From: Haowei Cai Date: Mon, 11 Jan 2021 13:04:18 -0800 Subject: [PATCH 3/3] pod e2e: wait for the default service account to be created --- kubernetes/e2e_test/test_client.py | 50 ++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/kubernetes/e2e_test/test_client.py b/kubernetes/e2e_test/test_client.py index af71b455a3..82d77eaf0d 100644 --- a/kubernetes/e2e_test/test_client.py +++ b/kubernetes/e2e_test/test_client.py @@ -19,15 +19,22 @@ import time import unittest import uuid +import six from kubernetes.client import api_client from kubernetes.client.api import core_v1_api from kubernetes.e2e_test import base from kubernetes.stream import stream, portforward from kubernetes.stream.ws_client import ERROR_CHANNEL +from kubernetes.client.rest import ApiException import six.moves.urllib.request as urllib_request +if six.PY3: + from http import HTTPStatus +else: + import httplib + def short_uuid(): id = str(uuid.uuid4()) return id[-12:] @@ -65,6 +72,27 @@ def test_pod_apis(self): name = 'busybox-test-' + short_uuid() pod_manifest = manifest_with_command(name, "while true;do date;sleep 5; done") + + # wait for the default service account to be created + timeout = time.time() + 30 + while True: + if time.time() > timeout: + print('timeout waiting for default service account creation') + break + try: + resp = api.read_namespaced_service_account(name='default', + namespace='default') + except ApiException as e: + if (six.PY3 and e.status != HTTPStatus.NOT_FOUND) or ( + six.PY3 is False and e.status != httplib.NOT_FOUND): + print('error: %s' % e) + self.fail(msg="unexpected error getting default service account") + print('default service not found yet: %s' % e) + time.sleep(1) + continue + self.assertEqual('default', resp.metadata.name) + break + resp = api.create_namespaced_pod(body=pod_manifest, namespace='default') self.assertEqual(name, resp.metadata.name) @@ -130,6 +158,28 @@ def test_exit_code(self): name = 'busybox-test-' + short_uuid() pod_manifest = manifest_with_command(name, "while true;do date;sleep 5; done") + + # wait for the default service account to be created + timeout = time.time() + 30 + while True: + if time.time() > timeout: + print('timeout waiting for default service account creation') + break + + try: + resp = api.read_namespaced_service_account(name='default', + namespace='default') + except ApiException as e: + if (six.PY3 and e.status != HTTPStatus.NOT_FOUND) or ( + six.PY3 is False and e.status != httplib.NOT_FOUND): + print('error: %s' % e) + self.fail(msg="unexpected error getting default service account") + print('default service not found yet: %s' % e) + time.sleep(1) + continue + self.assertEqual('default', resp.metadata.name) + break + resp = api.create_namespaced_pod(body=pod_manifest, namespace='default') self.assertEqual(name, resp.metadata.name)