From 38aaec0f479523809f786bd97969f8ff15cf1079 Mon Sep 17 00:00:00 2001 From: Davanum Srinivas Date: Wed, 25 Jan 2017 20:46:36 -0500 Subject: [PATCH] Refactor tests * separate batch, extensions and the regular apis into separate * added delete for some tests * drop '_' for is_k8s_running * remove comments that do not add value --- kubernetes/e2e_test/base.py | 21 +++++ kubernetes/e2e_test/test_batch.py | 55 +++++++++++ kubernetes/e2e_test/test_client.py | 126 ++----------------------- kubernetes/e2e_test/test_extensions.py | 93 ++++++++++++++++++ 4 files changed, 176 insertions(+), 119 deletions(-) create mode 100644 kubernetes/e2e_test/base.py create mode 100644 kubernetes/e2e_test/test_batch.py create mode 100644 kubernetes/e2e_test/test_extensions.py diff --git a/kubernetes/e2e_test/base.py b/kubernetes/e2e_test/base.py new file mode 100644 index 000000000..84e5668e2 --- /dev/null +++ b/kubernetes/e2e_test/base.py @@ -0,0 +1,21 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +import urllib3 + + +def is_k8s_running(): + try: + urllib3.PoolManager().request('GET', '127.0.0.1:8080') + return True + except urllib3.exceptions.HTTPError: + return False diff --git a/kubernetes/e2e_test/test_batch.py b/kubernetes/e2e_test/test_batch.py new file mode 100644 index 000000000..ac4b3fc6e --- /dev/null +++ b/kubernetes/e2e_test/test_batch.py @@ -0,0 +1,55 @@ +# -*- coding: utf-8 -*- + +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +import unittest +import uuid + +from kubernetes.client import api_client +from kubernetes.client.apis import batch_v1_api +from kubernetes.e2e_test import base + + +class TestClientBatch(unittest.TestCase): + @unittest.skipUnless( + base.is_k8s_running(), "Kubernetes is not available") + def test_job_apis(self): + client = api_client.ApiClient('http://127.0.0.1:8080/') + api = batch_v1_api.BatchV1Api(client) + + name = 'test-job-' + str(uuid.uuid4()) + job_manifest = { + 'kind': 'Job', + 'spec': { + 'template': + {'spec': + {'containers': [ + {'image': 'busybox', + 'name': name, + 'command': ["sh", "-c", "sleep 5"] + }], + 'restartPolicy': 'Never'}, + 'metadata': {'name': name}}}, + 'apiVersion': 'batch/v1', + 'metadata': {'name': name}} + + resp = api.create_namespaced_job( + body=job_manifest, namespace='default') + self.assertEqual(name, resp.metadata.name) + + resp = api.read_namespaced_job( + name=name, namespace='default') + self.assertEqual(name, resp.metadata.name) + + resp = api.delete_namespaced_job( + name=name, body={}, namespace='default') \ No newline at end of file diff --git a/kubernetes/e2e_test/test_client.py b/kubernetes/e2e_test/test_client.py index 1569fb787..84f0ea6f6 100644 --- a/kubernetes/e2e_test/test_client.py +++ b/kubernetes/e2e_test/test_client.py @@ -12,95 +12,17 @@ # License for the specific language governing permissions and limitations # under the License. -""" -test_client ----------------------------------- - -Tests for `client` module. Deploy Kubernetes using: -http://kubernetes.io/docs/getting-started-guides/docker/ - -and then run this test -""" - import unittest -import urllib3 import uuid -import yaml from kubernetes.client import api_client from kubernetes.client.apis import core_v1_api -from kubernetes.client.apis import extensions_v1beta1_api - - -def _is_k8s_running(): - try: - urllib3.PoolManager().request('GET', '127.0.0.1:8080') - return True - except urllib3.exceptions.HTTPError: - return False +from kubernetes.e2e_test import base class TestClient(unittest.TestCase): @unittest.skipUnless( - _is_k8s_running(), "Kubernetes is not available") - def test_read_namespaces(self): - client = api_client.ApiClient('http://127.0.0.1:8080/') - api = core_v1_api.CoreV1Api(client) - - expected_namespaces = ('default', 'kube-system') - for ns in expected_namespaces: - api.read_namespace(name=ns) - - @unittest.skipUnless( - _is_k8s_running(), "Kubernetes is not available") - def test_read_services(self): - client = api_client.ApiClient('http://127.0.0.1:8080/') - api = core_v1_api.CoreV1Api(client) - - expected_services = ('kubernetes',) - for service in expected_services: - api.read_namespaced_service(service, 'default') - - @unittest.skipUnless( - _is_k8s_running(), "Kubernetes is not available") - def test_list_endpoints(self): - client = api_client.ApiClient('http://127.0.0.1:8080/') - api = core_v1_api.CoreV1Api(client) - - endpoints = api.list_endpoints_for_all_namespaces() - self.assertTrue(len(endpoints.items) > 0) - - @unittest.skipUnless( - _is_k8s_running(), "Kubernetes is not available") - def test_create_deployment(self): - client = api_client.ApiClient('http://127.0.0.1:8080/') - api = extensions_v1beta1_api.ExtensionsV1beta1Api(client) - name = 'nginx-deployment-' + str(uuid.uuid4()) - deployment = '''apiVersion: extensions/v1beta1 -kind: Deployment -metadata: - name: %s -spec: - replicas: 3 - template: - metadata: - labels: - app: nginx - spec: - containers: - - name: nginx - image: nginx:1.7.9 - ports: - - containerPort: 80 -''' - resp = api.create_namespaced_deployment( - body=yaml.load(deployment % name), - namespace="default") - resp = api.read_namespaced_deployment(name, 'default') - self.assertIsNotNone(resp) - - @unittest.skipUnless( - _is_k8s_running(), "Kubernetes is not available") + base.is_k8s_running(), "Kubernetes is not available") def test_pod_apis(self): client = api_client.ApiClient('http://127.0.0.1:8080/') api = core_v1_api.CoreV1Api(client) @@ -129,7 +51,7 @@ spec: namespace='default') @unittest.skipUnless( - _is_k8s_running(), "Kubernetes is not available") + base.is_k8s_running(), "Kubernetes is not available") def test_service_apis(self): client = api_client.ApiClient('http://127.0.0.1:8080/') api = core_v1_api.CoreV1Api(client) @@ -170,7 +92,7 @@ spec: namespace='default') @unittest.skipUnless( - _is_k8s_running(), "Kubernetes is not available") + base.is_k8s_running(), "Kubernetes is not available") def test_replication_controller_apis(self): client = api_client.ApiClient('http://127.0.0.1:8080/') api = core_v1_api.CoreV1Api(client) @@ -205,7 +127,7 @@ spec: name=name, body={}, namespace='default') @unittest.skipUnless( - _is_k8s_running(), "Kubernetes is not available") + base.is_k8s_running(), "Kubernetes is not available") def test_configmap_apis(self): client = api_client.ApiClient('http://127.0.0.1:8080/') api = core_v1_api.CoreV1Api(client) @@ -243,7 +165,7 @@ spec: self.assertEqual([], resp.items) @unittest.skipUnless( - _is_k8s_running(), "Kubernetes is not available") + base.is_k8s_running(), "Kubernetes is not available") def test_node_apis(self): client = api_client.ApiClient('http://127.0.0.1:8080/') api = core_v1_api.CoreV1Api(client) @@ -251,38 +173,4 @@ spec: for item in api.list_node().items: node = api.read_node(name=item.metadata.name) self.assertTrue(len(node.metadata.labels) > 0) - self.assertTrue(isinstance(node.metadata.labels, dict)) - - @unittest.skipUnless( - _is_k8s_running(), "Kubernetes is not available") - def test_create_daemonset(self): - client = api_client.ApiClient('http://127.0.0.1:8080/') - api = extensions_v1beta1_api.ExtensionsV1beta1Api(client) - name = 'nginx-app-' + str(uuid.uuid4()) - daemonset = { - 'apiVersion': 'extensions/v1beta1', - 'kind': 'DaemonSet', - 'metadata': { - 'labels': {'app': 'nginx'}, - 'name': '%s' % name, - }, - 'spec': { - 'template': { - 'metadata': { - 'labels': {'app': 'nginx'}, - 'name': name}, - 'spec': { - 'containers': [ - {'name': 'nginx-app', - 'image': 'nginx:1.10'}, - ], - }, - }, - 'updateStrategy': { - 'type': 'RollingUpdate', - }, - } - } - resp = api.create_namespaced_daemon_set('default', body=daemonset) - resp = api.read_namespaced_daemon_set(name, 'default') - self.assertIsNotNone(resp) \ No newline at end of file + self.assertTrue(isinstance(node.metadata.labels, dict)) \ No newline at end of file diff --git a/kubernetes/e2e_test/test_extensions.py b/kubernetes/e2e_test/test_extensions.py new file mode 100644 index 000000000..42030911a --- /dev/null +++ b/kubernetes/e2e_test/test_extensions.py @@ -0,0 +1,93 @@ +# -*- coding: utf-8 -*- + +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +import unittest +import uuid +import yaml + +from kubernetes.client import api_client +from kubernetes.client.apis import extensions_v1beta1_api +from kubernetes.client.models import v1_delete_options +from kubernetes.e2e_test import base + + +class TestClientExtensions(unittest.TestCase): + @unittest.skipUnless( + base.is_k8s_running(), "Kubernetes is not available") + def test_create_deployment(self): + client = api_client.ApiClient('http://127.0.0.1:8080/') + api = extensions_v1beta1_api.ExtensionsV1beta1Api(client) + name = 'nginx-deployment-' + str(uuid.uuid4()) + deployment = '''apiVersion: extensions/v1beta1 +kind: Deployment +metadata: + name: %s +spec: + replicas: 3 + template: + metadata: + labels: + app: nginx + spec: + containers: + - name: nginx + image: nginx:1.7.9 + ports: + - containerPort: 80 +''' + resp = api.create_namespaced_deployment( + body=yaml.load(deployment % name), + namespace="default") + resp = api.read_namespaced_deployment(name, 'default') + self.assertIsNotNone(resp) + + options = v1_delete_options.V1DeleteOptions() + resp = api.delete_namespaced_deployment(name, 'default', body=options) + + @unittest.skipUnless( + base.is_k8s_running(), "Kubernetes is not available") + def test_create_daemonset(self): + client = api_client.ApiClient('http://127.0.0.1:8080/') + api = extensions_v1beta1_api.ExtensionsV1beta1Api(client) + name = 'nginx-app-' + str(uuid.uuid4()) + daemonset = { + 'apiVersion': 'extensions/v1beta1', + 'kind': 'DaemonSet', + 'metadata': { + 'labels': {'app': 'nginx'}, + 'name': '%s' % name, + }, + 'spec': { + 'template': { + 'metadata': { + 'labels': {'app': 'nginx'}, + 'name': name}, + 'spec': { + 'containers': [ + {'name': 'nginx-app', + 'image': 'nginx:1.10'}, + ], + }, + }, + 'updateStrategy': { + 'type': 'RollingUpdate', + }, + } + } + resp = api.create_namespaced_daemon_set('default', body=daemonset) + resp = api.read_namespaced_daemon_set(name, 'default') + self.assertIsNotNone(resp) + + options = v1_delete_options.V1DeleteOptions() + resp = api.delete_namespaced_daemon_set(name, 'default', body=options) \ No newline at end of file