From 54ee9e13cf258b981a60a6a9c090beb38ec0303d Mon Sep 17 00:00:00 2001 From: Ananya Nayak Date: Fri, 22 Sep 2023 19:26:46 +0530 Subject: [PATCH 1/2] test: add more assertions --- kubernetes/e2e_test/test_apps.py | 20 ++++-- kubernetes/e2e_test/test_batch.py | 12 +++- kubernetes/e2e_test/test_utils.py | 109 +++++++++++++++++++++++++++++- 3 files changed, 131 insertions(+), 10 deletions(-) diff --git a/kubernetes/e2e_test/test_apps.py b/kubernetes/e2e_test/test_apps.py index 92463e4066..2735ed3cba 100644 --- a/kubernetes/e2e_test/test_apps.py +++ b/kubernetes/e2e_test/test_apps.py @@ -52,14 +52,21 @@ def test_create_deployment(self): ports: - containerPort: 80 ''' - resp = api.create_namespaced_deployment( + api.create_namespaced_deployment( body=yaml.safe_load(deployment % name), namespace="default") resp = api.read_namespaced_deployment(name, 'default') self.assertIsNotNone(resp) + self.assertEqual(resp.metadata.name, name) + self.assertEqual(resp.spec.replicas, 3) + self.assertEqual(resp.spec.selector.match_labels['app'], 'nginx') + self.assertEqual(resp.spec.template.metadata.labels['app'], 'nginx') + self.assertEqual(resp.spec.template.spec.containers[0].name, 'nginx') + self.assertEqual(resp.spec.template.spec.containers[0].image, 'nginx:1.15.4') + self.assertEqual(resp.spec.template.spec.containers[0].ports[0].container_port, 80) options = v1_delete_options.V1DeleteOptions() - resp = api.delete_namespaced_deployment(name, 'default', body=options) + api.delete_namespaced_deployment(name, 'default', body=options) def test_create_daemonset(self): client = api_client.ApiClient(configuration=self.config) @@ -92,9 +99,14 @@ def test_create_daemonset(self): }, } } - resp = api.create_namespaced_daemon_set('default', body=daemonset) + api.create_namespaced_daemon_set('default', body=daemonset) resp = api.read_namespaced_daemon_set(name, 'default') self.assertIsNotNone(resp) + self.assertEqual(resp.metadata.name, name) + self.assertEqual(resp.spec.selector.match_labels['app'], 'nginx') + self.assertEqual(resp.spec.template.metadata.labels['app'], 'nginx') + self.assertEqual(resp.spec.template.spec.containers[0].name, 'nginx-app') + self.assertEqual(resp.spec.template.spec.containers[0].image, 'nginx:1.15.4') options = v1_delete_options.V1DeleteOptions() - resp = api.delete_namespaced_daemon_set(name, 'default', body=options) + api.delete_namespaced_daemon_set(name, 'default', body=options) diff --git a/kubernetes/e2e_test/test_batch.py b/kubernetes/e2e_test/test_batch.py index d68c80854c..9935df3135 100644 --- a/kubernetes/e2e_test/test_batch.py +++ b/kubernetes/e2e_test/test_batch.py @@ -46,13 +46,19 @@ def test_job_apis(self): 'apiVersion': 'batch/v1', 'metadata': {'name': name}} - resp = api.create_namespaced_job( + create_job_resp = api.create_namespaced_job( body=job_manifest, namespace='default') - self.assertEqual(name, resp.metadata.name) + self.assertEqual(name, create_job_resp.metadata.name) resp = api.read_namespaced_job( name=name, namespace='default') self.assertEqual(name, resp.metadata.name) + self.assertEqual(name, resp.spec.template.spec.containers[0].name) + self.assertEqual('busybox', resp.spec.template.spec.containers[0].image) + self.assertEqual('sh', resp.spec.template.spec.containers[0].command[0]) + self.assertEqual('-c', resp.spec.template.spec.containers[0].command[1]) + self.assertEqual('sleep 5', resp.spec.template.spec.containers[0].command[2]) + self.assertEqual('Never', resp.spec.template.spec.restart_policy) - resp = api.delete_namespaced_job( + api.delete_namespaced_job( name=name, namespace='default', propagation_policy='Background') diff --git a/kubernetes/e2e_test/test_utils.py b/kubernetes/e2e_test/test_utils.py index 98768b0c9d..cc80e6f205 100644 --- a/kubernetes/e2e_test/test_utils.py +++ b/kubernetes/e2e_test/test_utils.py @@ -55,6 +55,13 @@ def test_create_apps_deployment_from_yaml(self): dep = app_api.read_namespaced_deployment(name="nginx-app", namespace="default") self.assertIsNotNone(dep) + self.assertEqual("nginx-app", dep.metadata.name) + self.assertEqual("nginx:1.15.4", dep.spec.template.spec.containers[0].image) + self.assertEqual(80, dep.spec.template.spec.containers[0].ports[0].container_port) + self.assertEqual("nginx", dep.spec.template.spec.containers[0].name) + self.assertEqual("nginx", dep.spec.template.metadata.labels["app"]) + self.assertEqual(3, dep.spec.replicas) + while True: try: app_api.delete_namespaced_deployment( @@ -66,7 +73,7 @@ def test_create_apps_deployment_from_yaml(self): def test_create_apps_deployment_from_yaml_object(self): """ - Should be able to pass YAM objects directly to helper function. + Should be able to pass YAML objects directly to helper function. """ k8s_client = client.api_client.ApiClient(configuration=self.config) _path = self.path_prefix + "apps-deployment.yaml" @@ -80,6 +87,13 @@ def test_create_apps_deployment_from_yaml_object(self): dep = app_api.read_namespaced_deployment(name="nginx-app", namespace="default") self.assertIsNotNone(dep) + self.assertEqual("nginx-app", dep.metadata.name) + self.assertEqual("nginx:1.15.4", dep.spec.template.spec.containers[0].image) + self.assertEqual(80, dep.spec.template.spec.containers[0].ports[0].container_port) + self.assertEqual("nginx", dep.spec.template.spec.containers[0].name) + self.assertEqual("nginx", dep.spec.template.metadata.labels["app"]) + self.assertEqual(3, dep.spec.replicas) + while True: try: app_api.delete_namespaced_deployment( @@ -102,6 +116,13 @@ def test_create_apps_deployment_from_yaml_obj(self): dep = app_api.read_namespaced_deployment(name="nginx-app-3", namespace="default") self.assertIsNotNone(dep) + self.assertEqual("nginx-app-3", dep.metadata.name) + self.assertEqual("nginx:1.15.4", dep.spec.template.spec.containers[0].image) + self.assertEqual(80, dep.spec.template.spec.containers[0].ports[0].container_port) + self.assertEqual("nginx", dep.spec.template.spec.containers[0].name) + self.assertEqual("nginx", dep.spec.template.metadata.labels["app"]) + self.assertEqual(3, dep.spec.replicas) + app_api.delete_namespaced_deployment( name="nginx-app-3", namespace="default", body={}) @@ -117,6 +138,10 @@ def test_create_pod_from_yaml(self): pod = core_api.read_namespaced_pod(name="myapp-pod", namespace="default") self.assertIsNotNone(pod) + self.assertEqual("myapp-pod", pod.metadata.name) + self.assertEqual("busybox", pod.spec.containers[0].image) + self.assertEqual("myapp-container", pod.spec.containers[0].name) + core_api.delete_namespaced_pod( name="myapp-pod", namespace="default", body={}) @@ -132,6 +157,9 @@ def test_create_service_from_yaml(self): svc = core_api.read_namespaced_service(name="my-service", namespace="default") self.assertIsNotNone(svc) + self.assertEqual("my-service", svc.metadata.name) + self.assertEqual("MyApp", svc.spec.selector["app"]) + core_api.delete_namespaced_service( name="my-service", namespace="default", body={}) @@ -145,12 +173,15 @@ def test_create_namespace_from_yaml(self): k8s_client, self.path_prefix + "core-namespace.yaml") core_api = client.CoreV1Api(k8s_client) nmsp = core_api.read_namespace(name="development") + self.assertIsNotNone(nmsp) + self.assertEqual("development", nmsp.metadata.name) + core_api.delete_namespace(name="development", body={}) def test_create_rbac_role_from_yaml(self): """ - Should be able to create an rbac role. + Should be able to create a rbac role. """ k8s_client = client.api_client.ApiClient(configuration=self.config) utils.create_from_yaml( @@ -159,12 +190,15 @@ def test_create_rbac_role_from_yaml(self): rbac_role = rbac_api.read_namespaced_role( name="pod-reader", namespace="default") self.assertIsNotNone(rbac_role) + self.assertEqual("pod-reader", rbac_role.metadata.name) + self.assertEqual("pods", rbac_role.rules[0].resources[0]) + rbac_api.delete_namespaced_role( name="pod-reader", namespace="default", body={}) def test_create_rbac_role_from_yaml_with_verbose_enabled(self): """ - Should be able to create an rbac role with verbose enabled. + Should be able to create a rbac role with verbose enabled. """ k8s_client = client.api_client.ApiClient(configuration=self.config) utils.create_from_yaml( @@ -173,6 +207,9 @@ def test_create_rbac_role_from_yaml_with_verbose_enabled(self): rbac_role = rbac_api.read_namespaced_role( name="pod-reader", namespace="default") self.assertIsNotNone(rbac_role) + self.assertEqual("pod-reader", rbac_role.metadata.name) + self.assertEqual("pods", rbac_role.rules[0].resources[0]) + rbac_api.delete_namespaced_role( name="pod-reader", namespace="default", body={}) @@ -190,6 +227,8 @@ def test_create_deployment_non_default_namespace_from_yaml(self): ext_api = client.AppsV1Api(k8s_client) nmsp = core_api.read_namespace(name="dep") self.assertIsNotNone(nmsp) + self.assertEqual("dep", nmsp.metadata.name) + dep = ext_api.read_namespaced_deployment(name="nginx-deployment", namespace="dep") self.assertIsNotNone(dep) @@ -211,6 +250,10 @@ def test_create_apiservice_from_yaml_with_conflict(self): svc = reg_api.read_api_service( name="v1alpha1.wardle.k8s.io") self.assertIsNotNone(svc) + self.assertEqual("v1alpha1.wardle.k8s.io", svc.metadata.name) + self.assertEqual("wardle.k8s.io", svc.spec.group) + self.assertEqual("v1alpha1", svc.spec.version) + with self.assertRaises(utils.FailToCreateError) as cm: utils.create_from_yaml( k8s_client, "kubernetes/e2e_test/test_yaml/api-service.yaml") @@ -243,9 +286,16 @@ def test_create_general_list_from_yaml(self): svc = core_api.read_namespaced_service(name="list-service-test", namespace="default") self.assertIsNotNone(svc) + self.assertEqual("list-service-test", svc.metadata.name) + self.assertEqual("list-deployment-test", svc.spec.selector["app"]) + dep = ext_api.read_namespaced_deployment(name="list-deployment-test", namespace="default") self.assertIsNotNone(dep) + self.assertEqual("list-deployment-test", dep.metadata.name) + self.assertEqual("nginx:1.15.4", dep.spec.template.spec.containers[0].image) + self.assertEqual(1, dep.spec.replicas) + core_api.delete_namespaced_service(name="list-service-test", namespace="default", body={}) ext_api.delete_namespaced_deployment(name="list-deployment-test", @@ -262,8 +312,14 @@ def test_create_namespace_list_from_yaml(self): core_api = client.CoreV1Api(k8s_client) nmsp_1 = core_api.read_namespace(name="mock-1") self.assertIsNotNone(nmsp_1) + self.assertEqual("mock-1", nmsp_1.metadata.name) + self.assertEqual("mock-1", nmsp_1.metadata.labels["name"]) + nmsp_2 = core_api.read_namespace(name="mock-2") self.assertIsNotNone(nmsp_2) + self.assertEqual("mock-2", nmsp_2.metadata.name) + self.assertEqual("mock-2", nmsp_2.metadata.labels["name"]) + core_api.delete_namespace(name="mock-1", body={}) core_api.delete_namespace(name="mock-2", body={}) @@ -280,9 +336,15 @@ def test_create_implicit_service_list_from_yaml_with_conflict(self): svc_3 = core_api.read_namespaced_service(name="mock-3", namespace="default") self.assertIsNotNone(svc_3) + self.assertEqual("mock-3", svc_3.metadata.name) + self.assertEqual("mock-3", svc_3.metadata.labels["app"]) + svc_4 = core_api.read_namespaced_service(name="mock-4", namespace="default") self.assertIsNotNone(svc_4) + self.assertEqual("mock-4", svc_4.metadata.name) + self.assertEqual("mock-4", svc_4.metadata.labels["app"]) + core_api.delete_namespaced_service(name="mock-3", namespace="default", body={}) core_api.delete_namespaced_service(name="mock-4", @@ -302,9 +364,20 @@ def test_create_multi_resource_from_directory(self): svc = core_api.read_namespaced_service(name="mock", namespace="default") self.assertIsNotNone(svc) + self.assertEqual("mock", svc.metadata.name) + self.assertEqual("mock", svc.metadata.labels["app"]) + self.assertEqual("mock", svc.spec.selector["app"]) + ctr = core_api.read_namespaced_replication_controller( name="mock", namespace="default") self.assertIsNotNone(ctr) + self.assertEqual("mock", ctr.metadata.name) + self.assertEqual("mock", ctr.spec.template.metadata.labels["app"]) + self.assertEqual("mock", ctr.spec.selector["app"]) + self.assertEqual(1, ctr.spec.replicas) + self.assertEqual("k8s.gcr.io/pause:2.0", ctr.spec.template.spec.containers[0].image) + self.assertEqual("mock-container", ctr.spec.template.spec.containers[0].name) + core_api.delete_namespaced_replication_controller( name="mock", namespace="default", propagation_policy="Background") core_api.delete_namespaced_service(name="mock", @@ -324,9 +397,20 @@ def test_create_from_multi_resource_yaml(self): svc = core_api.read_namespaced_service(name="mock", namespace="default") self.assertIsNotNone(svc) + self.assertEqual("mock", svc.metadata.name) + self.assertEqual("mock", svc.metadata.labels["app"]) + self.assertEqual("mock", svc.spec.selector["app"]) + ctr = core_api.read_namespaced_replication_controller( name="mock", namespace="default") self.assertIsNotNone(ctr) + self.assertEqual("mock", ctr.metadata.name) + self.assertEqual("mock", ctr.spec.template.metadata.labels["app"]) + self.assertEqual("mock", ctr.spec.selector["app"]) + self.assertEqual(1, ctr.spec.replicas) + self.assertEqual("k8s.gcr.io/pause:2.0", ctr.spec.template.spec.containers[0].image) + self.assertEqual("mock-container", ctr.spec.template.spec.containers[0].name) + core_api.delete_namespaced_replication_controller( name="mock", namespace="default", propagation_policy="Background") core_api.delete_namespaced_service(name="mock", @@ -345,12 +429,26 @@ def test_create_from_list_in_multi_resource_yaml(self): pod_0 = core_api.read_namespaced_pod( name="mock-pod-0", namespace="default") self.assertIsNotNone(pod_0) + self.assertEqual("mock-pod-0", pod_0.metadata.name) + self.assertEqual("mock-pod-0", pod_0.metadata.labels["app"]) + self.assertEqual("mock-pod-0", pod_0.spec.containers[0].name) + self.assertEqual("busybox", pod_0.spec.containers[0].image) + pod_1 = core_api.read_namespaced_pod( name="mock-pod-1", namespace="default") self.assertIsNotNone(pod_1) + self.assertEqual("mock-pod-1", pod_1.metadata.name) + self.assertEqual("mock-pod-1", pod_1.metadata.labels["app"]) + self.assertEqual("mock-pod-1", pod_1.spec.containers[0].name) + self.assertEqual("busybox", pod_1.spec.containers[0].image) + dep = app_api.read_namespaced_deployment( name="mock", namespace="default") self.assertIsNotNone(dep) + self.assertEqual("mock", dep.metadata.name) + self.assertEqual("mock", dep.spec.template.metadata.labels["app"]) + self.assertEqual(3, dep.spec.replicas) + core_api.delete_namespaced_pod( name="mock-pod-0", namespace="default", body={}) core_api.delete_namespaced_pod( @@ -372,6 +470,11 @@ def test_create_from_multi_resource_yaml_with_conflict(self): svc = core_api.read_namespaced_service(name="mock-2", namespace="default") self.assertIsNotNone(svc) + self.assertEqual("mock-2", svc.metadata.name) + self.assertEqual("mock-2", svc.metadata.labels["app"]) + self.assertEqual("mock-2", svc.spec.selector["app"]) + self.assertEqual(99, svc.spec.ports[0].port) + with self.assertRaises(utils.FailToCreateError) as cm: utils.create_from_yaml( k8s_client, self.path_prefix + "yaml-conflict-multi.yaml") From 20c9ca5135df6e63cce090eaf2969a308292cc86 Mon Sep 17 00:00:00 2001 From: Ananya Nayak Date: Tue, 10 Oct 2023 10:27:34 +0530 Subject: [PATCH 2/2] ci: update codecov action version to v3 --- .github/workflows/test.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index eebf07465f..ab6e499328 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -44,7 +44,7 @@ jobs: - name: Upload coverage to Codecov if: "matrix.use_coverage" - uses: codecov/codecov-action@v4 + uses: codecov/codecov-action@v3 with: fail_ci_if_error: false verbose: true