From d39401ccc3e1c607543d283f100f74cab34bad2c Mon Sep 17 00:00:00 2001 From: micw523 Date: Tue, 12 Feb 2019 20:29:26 -0600 Subject: [PATCH] Add tests, clean up test names --- kubernetes/e2e_test/test_utils.py | 218 +++++++++++------- ...eployment-dep.yaml => dep-deployment.yaml} | 0 ...-namespace-dep.yaml => dep-namespace.yaml} | 0 ...rce-svclist.json => implicit-svclist.json} | 0 .../test_yaml/multi-resource-with-list.yaml | 47 ++++ ...resource-yaml.yaml => multi-resource.yaml} | 0 .../e2e_test/test_yaml/namespace-list.yaml | 15 ++ 7 files changed, 197 insertions(+), 83 deletions(-) rename kubernetes/e2e_test/test_yaml/{extensions-deployment-dep.yaml => dep-deployment.yaml} (100%) rename kubernetes/e2e_test/test_yaml/{core-namespace-dep.yaml => dep-namespace.yaml} (100%) rename kubernetes/e2e_test/test_yaml/{multi-resource-svclist.json => implicit-svclist.json} (100%) create mode 100644 kubernetes/e2e_test/test_yaml/multi-resource-with-list.yaml rename kubernetes/e2e_test/test_yaml/{multi-resource-yaml.yaml => multi-resource.yaml} (100%) create mode 100644 kubernetes/e2e_test/test_yaml/namespace-list.yaml diff --git a/kubernetes/e2e_test/test_utils.py b/kubernetes/e2e_test/test_utils.py index fae79c574b..8438ad40c7 100644 --- a/kubernetes/e2e_test/test_utils.py +++ b/kubernetes/e2e_test/test_utils.py @@ -23,144 +23,166 @@ class TestUtils(unittest.TestCase): @classmethod def setUpClass(cls): cls.config = base.get_e2e_configuration() + cls.path_prefix = "kubernetes/e2e_test/test_yaml/" - def test_apps_v1beta1_deployment(self): + # Tests for creating individual API objects + + def test_apps_deployment(self): """ Should be able to create an apps/v1beta1 deployment. """ k8s_client = client.api_client.ApiClient(configuration=self.config) utils.create_from_yaml( - k8s_client, "kubernetes/e2e_test/test_yaml/apps-deployment.yaml") - k8s_api = client.AppsV1beta1Api(k8s_client) - dep = k8s_api.read_namespaced_deployment(name="nginx-app", + k8s_client, self.path_prefix + "apps-deployment.yaml") + app_api = client.AppsV1beta1Api(k8s_client) + dep = app_api.read_namespaced_deployment(name="nginx-app", namespace="default") self.assertIsNotNone(dep) - k8s_api.delete_namespaced_deployment( + app_api.delete_namespaced_deployment( name="nginx-app", namespace="default", body={}) - def test_extension_v1beta1_deployment(self): + def test_extensions_deployment(self): """ Should be able to create an extensions/v1beta1 deployment. """ k8s_client = client.api_client.ApiClient(configuration=self.config) utils.create_from_yaml( - k8s_client, "kubernetes/e2e_test/test_yaml/extensions-deployment.yaml") - k8s_api = client.ExtensionsV1beta1Api(k8s_client) - dep = k8s_api.read_namespaced_deployment(name="nginx-deployment", + k8s_client, self.path_prefix + "extensions-deployment.yaml") + ext_api = client.ExtensionsV1beta1Api(k8s_client) + dep = ext_api.read_namespaced_deployment(name="nginx-deployment", namespace="default") self.assertIsNotNone(dep) - k8s_api.delete_namespaced_deployment( + ext_api.delete_namespaced_deployment( name="nginx-deployment", namespace="default", body={}) - def test_core_v1_pod(self): + def test_pod(self): """ Should be able to create a pod. """ k8s_client = client.api_client.ApiClient(configuration=self.config) utils.create_from_yaml( - k8s_client, "kubernetes/e2e_test/test_yaml/core-pod.yaml") - k8s_api = client.CoreV1Api(k8s_client) - pod = k8s_api.read_namespaced_pod(name="myapp-pod", - namespace="default") + k8s_client, self.path_prefix + "core-pod.yaml") + core_api = client.CoreV1Api(k8s_client) + pod = core_api.read_namespaced_pod(name="myapp-pod", + namespace="default") self.assertIsNotNone(pod) - k8s_api.delete_namespaced_pod( + core_api.delete_namespaced_pod( name="myapp-pod", namespace="default", body={}) - def test_core_v1_service(self): + def test_service(self): """ Should be able to create a service. """ k8s_client = client.api_client.ApiClient(configuration=self.config) utils.create_from_yaml( - k8s_client, "kubernetes/e2e_test/test_yaml/core-service.yaml") - k8s_api = client.CoreV1Api(k8s_client) - svc = k8s_api.read_namespaced_service(name="my-service", - namespace="default") + k8s_client, self.path_prefix + "core-service.yaml") + core_api = client.CoreV1Api(k8s_client) + svc = core_api.read_namespaced_service(name="my-service", + namespace="default") self.assertIsNotNone(svc) - k8s_api.delete_namespaced_service( + core_api.delete_namespaced_service( name="my-service", namespace="default", body={}) - def test_core_v1_namespace(self): + def test_namespace(self): """ Should be able to create a namespace. """ k8s_client = client.api_client.ApiClient(configuration=self.config) utils.create_from_yaml( - k8s_client, "kubernetes/e2e_test/test_yaml/core-namespace.yaml") - k8s_api = client.CoreV1Api(k8s_client) - nmsp = k8s_api.read_namespace(name="development") + k8s_client, self.path_prefix + "core-namespace.yaml") + core_api = client.CoreV1Api(k8s_client) + nmsp = core_api.read_namespace(name="development") self.assertIsNotNone(nmsp) - k8s_api.delete_namespace(name="development", body={}) + core_api.delete_namespace(name="development", body={}) - def test_extensions_v1beta1_deployment_non_default_namespace(self): + def test_deployment_non_default_namespace(self): """ - Should be able to create a namespace, - and then create an extensions/v1beta1 deployment - in the just-created namespace. + Should be able to create a namespace "dep", + and then create a deployment in the just-created namespace. """ k8s_client = client.ApiClient(configuration=self.config) utils.create_from_yaml( - k8s_client, "kubernetes/e2e_test/test_yaml/core-namespace-dep.yaml") + k8s_client, self.path_prefix + "dep-namespace.yaml") + utils.create_from_yaml( + k8s_client, self.path_prefix + "dep-deployment.yaml") core_api = client.CoreV1Api(k8s_client) + ext_api = client.ExtensionsV1beta1Api(k8s_client) nmsp = core_api.read_namespace(name="dep") self.assertIsNotNone(nmsp) - utils.create_from_yaml( - k8s_client, "kubernetes/e2e_test/test_yaml/extensions-deployment-dep.yaml") - dep_api = client.ExtensionsV1beta1Api(k8s_client) - dep = dep_api.read_namespaced_deployment(name="nginx-deployment", + dep = ext_api.read_namespaced_deployment(name="nginx-deployment", namespace="dep") self.assertIsNotNone(dep) - dep_api.delete_namespaced_deployment( + ext_api.delete_namespaced_deployment( name="nginx-deployment", namespace="dep", body={}) core_api.delete_namespace(name="dep", body={}) - def test_apiregistration_v1beta1_apiservice_with_conflict(self): + def test_apiservice_with_conflict(self): """ - Should be able to create an apiregistration.k8s.io/v1beta1 API service. + Should be able to create an API service. Should verify that creating the same API service should fail due to conflict. """ k8s_client = client.api_client.ApiClient(configuration=self.config) utils.create_from_yaml( - k8s_client, "kubernetes/e2e_test/test_yaml/api-service.yaml") - k8s_api = client.ApiregistrationV1beta1Api() - svc = k8s_api.read_api_service( + k8s_client, self.path_prefix + "api-service.yaml") + reg_api = client.ApiregistrationV1beta1Api(k8s_client) + svc = reg_api.read_api_service( name="v1alpha1.wardle.k8s.io") self.assertIsNotNone(svc) - with self.assertRaises(utils.FailToCreateError): - # TODO: verify error message + with self.assertRaises(utils.FailToCreateError) as cm: utils.create_from_yaml( k8s_client, "kubernetes/e2e_test/test_yaml/api-service.yaml") - k8s_api.delete_api_service( + exp_error = ('Error from server (Conflict): ' + 'apiservices.apiregistration.k8s.io ' + '"v1alpha1.wardle.k8s.io" already exists\n' + ) + self.assertEqual(exp_error, str(cm.exception)) + reg_api.delete_api_service( name="v1alpha1.wardle.k8s.io", body={}) + # Tests for creating API objects from lists + def test_service_and_deployment_list(self): """ - Should be able to create a service and an extensions/v1beta1 deployment + Should be able to create a service and a deployment from a kind: List yaml file """ k8s_client = client.api_client.ApiClient(configuration=self.config) utils.create_from_yaml( - k8s_client, "kubernetes/e2e_test/test_yaml/list.yaml") - svc_api = client.CoreV1Api(k8s_client) - svc = svc_api.read_namespaced_service(name="list-service-test", - namespace="default") - self.assertIsNotNone(svc) + k8s_client, self.path_prefix + "list.yaml") + core_api = client.CoreV1Api(k8s_client) ext_api = client.ExtensionsV1beta1Api(k8s_client) + svc = core_api.read_namespaced_service(name="list-service-test", + namespace="default") + self.assertIsNotNone(svc) dep = ext_api.read_namespaced_deployment(name="list-deployment-test", namespace="default") self.assertIsNotNone(dep) + core_api.delete_namespaced_service(name="list-service-test", + namespace="default", body={}) ext_api.delete_namespaced_deployment(name="list-deployment-test", namespace="default", body={}) - svc_api.delete_namespaced_service(name="list-service-test", - namespace="default", body={}) - # TODO: a xxxList kind with no failure + def test_namespace_list(self): + """ + Should be able to create two namespaces + from a kind: NamespaceList yaml file + """ + k8s_client = client.api_client.ApiClient(configuration=self.config) + utils.create_from_yaml( + k8s_client, self.path_prefix + "namespace-list.yaml") + core_api = client.CoreV1Api(k8s_client) + nmsp_1 = core_api.read_namespace(name="mock-1") + self.assertIsNotNone(nmsp_1) + nmsp_2 = core_api.read_namespace(name="mock-2") + self.assertIsNotNone(nmsp_2) + core_api.delete_namespace(name="mock-1", body={}) + core_api.delete_namespace(name="mock-2", body={}) def test_implicit_service_list_with_conflict(self): """ @@ -170,18 +192,20 @@ def test_implicit_service_list_with_conflict(self): k8s_client = client.api_client.ApiClient(configuration=self.config) with self.assertRaises(utils.FailToCreateError): utils.create_from_yaml( - k8s_client, "kubernetes/e2e_test/test_yaml/multi-resource-svclist.json") - svc_api = client.CoreV1Api(k8s_client) - svc_0 = svc_api.read_namespaced_service(name="mock-3", - namespace="default") - self.assertIsNotNone(svc_0) - svc_1 = svc_api.read_namespaced_service(name="mock-4", - namespace="default") - self.assertIsNotNone(svc_1) - svc_api.delete_namespaced_service(name="mock-3", - namespace="default", body={}) - svc_api.delete_namespaced_service(name="mock-4", - namespace="default", body={}) + k8s_client, self.path_prefix + "implicit-svclist.json") + core_api = client.CoreV1Api(k8s_client) + svc_3 = core_api.read_namespaced_service(name="mock-3", + namespace="default") + self.assertIsNotNone(svc_3) + svc_4 = core_api.read_namespaced_service(name="mock-4", + namespace="default") + self.assertIsNotNone(svc_4) + core_api.delete_namespaced_service(name="mock-3", + namespace="default", body={}) + core_api.delete_namespaced_service(name="mock-4", + namespace="default", body={}) + + # Tests for multi-resource yaml objects def test_service_replication_controller_multi_resource(self): """ @@ -190,10 +214,10 @@ def test_service_replication_controller_multi_resource(self): """ k8s_client = client.api_client.ApiClient(configuration=self.config) utils.create_from_yaml( - k8s_client, "kubernetes/e2e_test/test_yaml/multi-resource-yaml.yaml") + k8s_client, self.path_prefix + "multi-resource.yaml") core_api = client.CoreV1Api(k8s_client) svc = core_api.read_namespaced_service(name="mock", - namespace="default") + namespace="default") self.assertIsNotNone(svc) ctr = core_api.read_namespaced_replication_controller( name="mock", namespace="default") @@ -201,7 +225,33 @@ def test_service_replication_controller_multi_resource(self): core_api.delete_namespaced_replication_controller( name="mock", namespace="default", body={}) core_api.delete_namespaced_service(name="mock", - namespace="default", body={}) + namespace="default", body={}) + + def test_list_in_multi_resource(self): + """ + Should be able to create the items in the PodList and a deployment + specified in the multi-resource file + """ + k8s_client = client.api_client.ApiClient(configuration=self.config) + utils.create_from_yaml( + k8s_client, self.path_prefix + "multi-resource-with-list.yaml") + core_api = client.CoreV1Api(k8s_client) + app_api = client.AppsV1beta1Api(k8s_client) + pod_0 = core_api.read_namespaced_pod( + name="mock-pod-0", namespace="default") + self.assertIsNotNone(pod_0) + pod_1 = core_api.read_namespaced_pod( + name="mock-pod-1", namespace="default") + self.assertIsNotNone(pod_1) + dep = app_api.read_namespaced_deployment( + name="mock", namespace="default") + self.assertIsNotNone(dep) + core_api.delete_namespaced_pod( + name="mock-pod-0", namespace="default", body={}) + core_api.delete_namespaced_pod( + name="mock-pod-1", namespace="default", body={}) + app_api.delete_namespaced_deployment( + name="mock", namespace="default", body={}) def test_multi_resource_with_conflict(self): """ @@ -212,44 +262,46 @@ def test_multi_resource_with_conflict(self): """ k8s_client = client.api_client.ApiClient(configuration=self.config) utils.create_from_yaml( - k8s_client, "kubernetes/e2e_test/test_yaml/yaml-conflict-first.yaml") + k8s_client, self.path_prefix + "yaml-conflict-first.yaml") core_api = client.CoreV1Api(k8s_client) svc = core_api.read_namespaced_service(name="mock-2", - namespace="default") + namespace="default") self.assertIsNotNone(svc) - with self.assertRaises(utils.FailToCreateError): + with self.assertRaises(utils.FailToCreateError) as cm: utils.create_from_yaml( - k8s_client, "kubernetes/e2e_test/test_yaml/yaml-conflict-multi.yaml") - # TODO: check error message. + k8s_client, self.path_prefix + "yaml-conflict-multi.yaml") + exp_error = ('Error from server (Conflict): ' + 'services "mock-2" already exists\n' + ) + self.assertEqual(exp_error, str(cm.exception)) ctr = core_api.read_namespaced_replication_controller( name="mock-2", namespace="default") self.assertIsNotNone(ctr) core_api.delete_namespaced_replication_controller( name="mock-2", namespace="default", body={}) core_api.delete_namespaced_service(name="mock-2", - namespace="default", body={}) + namespace="default", body={}) - - def test_multiple_failures(self): + def test_multi_conflicts(self): """ - Should create an extensions/v1beta1 deployment and fail to create - the same deployment twice. + Should create an extensions/v1beta1 deployment + and fail to create the same deployment twice. Should raise an exception that contains two error messages. """ k8s_client = client.api_client.ApiClient(configuration=self.config) with self.assertRaises(utils.FailToCreateError) as cm: utils.create_from_yaml( - k8s_client, "kubernetes/e2e_test/test_yaml/triple-nginx.yaml") + k8s_client, self.path_prefix + "triple-nginx.yaml") exp_error = ('Error from server (Conflict): ' 'deployments.extensions "triple-nginx" ' 'already exists\n' ) exp_error += exp_error self.assertEqual(exp_error, str(cm.exception)) - k8s_api = client.ExtensionsV1beta1Api(k8s_client) - dep = k8s_api.read_namespaced_deployment(name="triple-nginx", + ext_api = client.ExtensionsV1beta1Api(k8s_client) + dep = ext_api.read_namespaced_deployment(name="triple-nginx", namespace="default") self.assertIsNotNone(dep) - k8s_api.delete_namespaced_deployment( + ext_api.delete_namespaced_deployment( name="triple-nginx", namespace="default", body={}) diff --git a/kubernetes/e2e_test/test_yaml/extensions-deployment-dep.yaml b/kubernetes/e2e_test/test_yaml/dep-deployment.yaml similarity index 100% rename from kubernetes/e2e_test/test_yaml/extensions-deployment-dep.yaml rename to kubernetes/e2e_test/test_yaml/dep-deployment.yaml diff --git a/kubernetes/e2e_test/test_yaml/core-namespace-dep.yaml b/kubernetes/e2e_test/test_yaml/dep-namespace.yaml similarity index 100% rename from kubernetes/e2e_test/test_yaml/core-namespace-dep.yaml rename to kubernetes/e2e_test/test_yaml/dep-namespace.yaml diff --git a/kubernetes/e2e_test/test_yaml/multi-resource-svclist.json b/kubernetes/e2e_test/test_yaml/implicit-svclist.json similarity index 100% rename from kubernetes/e2e_test/test_yaml/multi-resource-svclist.json rename to kubernetes/e2e_test/test_yaml/implicit-svclist.json diff --git a/kubernetes/e2e_test/test_yaml/multi-resource-with-list.yaml b/kubernetes/e2e_test/test_yaml/multi-resource-with-list.yaml new file mode 100644 index 0000000000..b3228b8cde --- /dev/null +++ b/kubernetes/e2e_test/test_yaml/multi-resource-with-list.yaml @@ -0,0 +1,47 @@ +apiVersion: v1 +kind: PodList +items: +- apiVersion: v1 + kind: Pod + metadata: + name: mock-pod-0 + labels: + app: mock-pod-0 + spec: + containers: + - name: mock-pod-0 + image: busybox + command: ['sh', '-c', 'echo Hello Kubernetes! && sleep 3600'] +- apiVersion: v1 + kind: Pod + metadata: + name: mock-pod-1 + labels: + app: mock-pod-1 + spec: + containers: + - name: mock-pod-1 + image: busybox + command: ['sh', '-c', 'echo Hello Kubernetes! && sleep 3600'] +--- +apiVersion: apps/v1beta1 +kind: Deployment +metadata: + name: mock + labels: + app: mock +spec: + replicas: 3 + selector: + matchLabels: + app: mock + template: + metadata: + labels: + app: mock + spec: + containers: + - name: mock + image: nginx:1.15.4 + ports: + - containerPort: 80 \ No newline at end of file diff --git a/kubernetes/e2e_test/test_yaml/multi-resource-yaml.yaml b/kubernetes/e2e_test/test_yaml/multi-resource.yaml similarity index 100% rename from kubernetes/e2e_test/test_yaml/multi-resource-yaml.yaml rename to kubernetes/e2e_test/test_yaml/multi-resource.yaml diff --git a/kubernetes/e2e_test/test_yaml/namespace-list.yaml b/kubernetes/e2e_test/test_yaml/namespace-list.yaml new file mode 100644 index 0000000000..c6900685ba --- /dev/null +++ b/kubernetes/e2e_test/test_yaml/namespace-list.yaml @@ -0,0 +1,15 @@ +apiVersion: v1 +kind: NamespaceList +items: +- apiVersion: v1 + kind: Namespace + metadata: + name: mock-1 + labels: + name: mock-1 +- apiVersion: v1 + kind: Namespace + metadata: + name: mock-2 + labels: + name: mock-2 \ No newline at end of file