Skip to content

Commit 8342a8e

Browse files
committed
Add error class, tidy up tests
1 parent fe2f853 commit 8342a8e

File tree

4 files changed

+289
-111
lines changed

4 files changed

+289
-111
lines changed

kubernetes/e2e_test/test_utils.py

Lines changed: 194 additions & 94 deletions
Original file line numberDiff line numberDiff line change
@@ -17,180 +17,280 @@
1717
from kubernetes import utils, client
1818
from kubernetes.e2e_test import base
1919

20+
2021
class TestUtils(unittest.TestCase):
2122

2223
@classmethod
2324
def setUpClass(cls):
2425
cls.config = base.get_e2e_configuration()
2526

2627
def test_app_yaml(self):
28+
"""
29+
Test for creating and deleting a deployment on default namespace.
30+
Using apps API
31+
Using yaml file apps-deployment.yaml
32+
"""
2733
k8s_client = client.api_client.ApiClient(configuration=self.config)
28-
k8s_api = utils.create_from_yaml(k8s_client,
29-
"kubernetes/e2e_test/test_yaml/apps-deployment.yaml")
30-
self.assertEqual("apps/v1beta1",
31-
k8s_api.get_api_resources().group_version)
34+
k8s_api = utils.create_from_yaml(
35+
k8s_client, "kubernetes/e2e_test/test_yaml/apps-deployment.yaml")
36+
self.assertEqual("apps/v1beta1",
37+
k8s_api.get_api_resources().group_version)
3238
dep = k8s_api.read_namespaced_deployment(name="nginx-app",
33-
namespace="default")
39+
namespace="default")
3440
self.assertIsNotNone(dep)
35-
resp = k8s_api.delete_namespaced_deployment(
36-
name="nginx-app", namespace="default",
41+
k8s_api.delete_namespaced_deployment(
42+
name="nginx-app", namespace="default",
3743
body={})
38-
44+
3945
def test_extension_yaml(self):
46+
"""
47+
Test for creating and deleting a deployment on default namespace.
48+
Using extensions API
49+
Using yaml file extensions-deployment.yaml
50+
"""
4051
k8s_client = client.api_client.ApiClient(configuration=self.config)
41-
k8s_api = utils.create_from_yaml(k8s_client,
42-
"kubernetes/e2e_test/test_yaml/extensions-deployment.yaml")
43-
self.assertEqual("extensions/v1beta1",
44-
k8s_api.get_api_resources().group_version)
45-
dep = k8s_api.read_namespaced_deployment(name="nginx-deployment",
46-
namespace="default")
52+
k8s_api = utils.create_from_yaml(
53+
k8s_client, "kubernetes/e2e_test/test_yaml/extensions-deployment.yaml")
54+
self.assertEqual("extensions/v1beta1",
55+
k8s_api.get_api_resources().group_version)
56+
dep = k8s_api.read_namespaced_deployment(name="nginx-deployment",
57+
namespace="default")
4758
self.assertIsNotNone(dep)
48-
resp = k8s_api.delete_namespaced_deployment(
49-
name="nginx-deployment", namespace="default",
59+
k8s_api.delete_namespaced_deployment(
60+
name="nginx-deployment", namespace="default",
5061
body={})
51-
62+
5263
def test_core_pod_yaml(self):
64+
"""
65+
Test for creating and deleting a pod on default namespace.
66+
Using core API
67+
Using yaml file core-pod.yaml
68+
"""
5369
k8s_client = client.api_client.ApiClient(configuration=self.config)
54-
k8s_api = utils.create_from_yaml(k8s_client,
55-
"kubernetes/e2e_test/test_yaml/core-pod.yaml")
56-
self.assertEqual("v1",
57-
k8s_api.get_api_resources().group_version)
58-
pod = k8s_api.read_namespaced_pod(name="myapp-pod",
59-
namespace="default")
70+
k8s_api = utils.create_from_yaml(
71+
k8s_client, "kubernetes/e2e_test/test_yaml/core-pod.yaml")
72+
self.assertEqual("v1",
73+
k8s_api.get_api_resources().group_version)
74+
pod = k8s_api.read_namespaced_pod(name="myapp-pod",
75+
namespace="default")
6076
self.assertIsNotNone(pod)
61-
resp = k8s_api.delete_namespaced_pod(
77+
k8s_api.delete_namespaced_pod(
6278
name="myapp-pod", namespace="default",
6379
body={})
6480

6581
def test_core_service_yaml(self):
82+
"""
83+
Test for creating and deleting a service on default namespace.
84+
Using core API
85+
Using yaml file core-service.yaml
86+
"""
6687
k8s_client = client.api_client.ApiClient(configuration=self.config)
67-
k8s_api = utils.create_from_yaml(k8s_client,
68-
"kubernetes/e2e_test/test_yaml/core-service.yaml")
69-
self.assertEqual("v1",
70-
k8s_api.get_api_resources().group_version)
88+
k8s_api = utils.create_from_yaml(
89+
k8s_client, "kubernetes/e2e_test/test_yaml/core-service.yaml")
90+
self.assertEqual("v1",
91+
k8s_api.get_api_resources().group_version)
7192
svc = k8s_api.read_namespaced_service(name="my-service",
72-
namespace="default")
93+
namespace="default")
7394
self.assertIsNotNone(svc)
74-
resp = k8s_api.delete_namespaced_service(
95+
k8s_api.delete_namespaced_service(
7596
name="my-service", namespace="default",
7697
body={})
77-
98+
7899
def test_core_namespace_yaml(self):
100+
"""
101+
Test for creating and deleting namespace
102+
Using core API
103+
Using yaml file core-namespace.yaml
104+
"""
79105
k8s_client = client.api_client.ApiClient(configuration=self.config)
80-
k8s_api = utils.create_from_yaml(k8s_client,
81-
"kubernetes/e2e_test/test_yaml/core-namespace.yaml")
82-
self.assertEqual("v1",
83-
k8s_api.get_api_resources().group_version)
106+
k8s_api = utils.create_from_yaml(
107+
k8s_client, "kubernetes/e2e_test/test_yaml/core-namespace.yaml")
108+
self.assertEqual("v1",
109+
k8s_api.get_api_resources().group_version)
84110
nmsp = k8s_api.read_namespace(name="development")
85111
self.assertIsNotNone(nmsp)
86-
resp = k8s_api.delete_namespace(name="development", body={})
112+
k8s_api.delete_namespace(name="development", body={})
87113

88114
def test_deployment_in_namespace(self):
115+
"""
116+
Test: Create a namespace. Create and delete a deployment on
117+
the namespace just created. Delete the namespace created at the
118+
beginning of the test.
119+
Using core, extensions API
120+
Using yaml file core-namespace-dep.yaml
121+
Using yaml file extensions-deployment-dep.yaml
122+
"""
89123
k8s_client = client.ApiClient(configuration=self.config)
90-
core_api = utils.create_from_yaml(k8s_client,
91-
"kubernetes/e2e_test/test_yaml/core-namespace-dep.yaml")
92-
self.assertEqual("v1",
93-
core_api.get_api_resources().group_version)
124+
core_api = utils.create_from_yaml(
125+
k8s_client, "kubernetes/e2e_test/test_yaml/core-namespace-dep.yaml")
126+
self.assertEqual("v1",
127+
core_api.get_api_resources().group_version)
94128
nmsp = core_api.read_namespace(name="dep")
95129
self.assertIsNotNone(nmsp)
96-
dep_api = utils.create_from_yaml(k8s_client,
97-
"kubernetes/e2e_test/test_yaml/extensions-deployment-dep.yaml")
98-
dep = dep_api.read_namespaced_deployment(name="nginx-deployment",
99-
namespace="dep")
130+
dep_api = utils.create_from_yaml(
131+
k8s_client, "kubernetes/e2e_test/test_yaml/extensions-deployment-dep.yaml")
132+
dep = dep_api.read_namespaced_deployment(name="nginx-deployment",
133+
namespace="dep")
100134
self.assertIsNotNone(dep)
101-
resp = dep_api.delete_namespaced_deployment(
102-
name="nginx-deployment", namespace="dep",
135+
dep_api.delete_namespaced_deployment(
136+
name="nginx-deployment", namespace="dep",
103137
body={})
104-
resp = core_api.delete_namespace(name="dep", body={})
105-
138+
core_api.delete_namespace(name="dep", body={})
139+
106140
def test_api_service_with_conflict(self):
141+
"""
142+
Test: Create an APIService. Recreate the APIService to test conflict
143+
handling. Delete the APIService.
144+
Check the program raises CreationFailedError.
145+
Using apiregistration API
146+
Using yaml file api-service.yaml
147+
"""
107148
k8s_client = client.api_client.ApiClient(configuration=self.config)
108-
k8s_api = utils.create_from_yaml(k8s_client,
109-
"kubernetes/e2e_test/test_yaml/api-service.yaml")
110-
self.assertEqual("apiregistration.k8s.io/v1beta1",
111-
k8s_api.get_api_resources().group_version)
149+
k8s_api = utils.create_from_yaml(
150+
k8s_client, "kubernetes/e2e_test/test_yaml/api-service.yaml")
151+
self.assertEqual("apiregistration.k8s.io/v1beta1",
152+
k8s_api.get_api_resources().group_version)
112153
svc = k8s_api.read_api_service(
113154
name="v1alpha1.wardle.k8s.io")
114155
self.assertIsNotNone(svc)
115-
svc_conflict = utils.create_from_yaml(k8s_client,
116-
"kubernetes/e2e_test/test_yaml/api-service.yaml")
117-
self.assertEqual([], svc_conflict)
118-
resp = k8s_api.delete_api_service(
156+
with self.assertRaises(utils.FailToCreateError):
157+
utils.create_from_yaml(
158+
k8s_client, "kubernetes/e2e_test/test_yaml/api-service.yaml")
159+
k8s_api.delete_api_service(
119160
name="v1alpha1.wardle.k8s.io", body={})
120161

121162
def test_list(self):
163+
"""
164+
Test for creating and deleting a service and a deployment using
165+
the List kind.
166+
Using core, extensions API
167+
Using yaml file list.yaml
168+
"""
122169
k8s_client = client.api_client.ApiClient(configuration=self.config)
123-
k8s_api = utils.create_from_yaml(k8s_client,
124-
"kubernetes/e2e_test/test_yaml/list.yaml")
170+
k8s_api = utils.create_from_yaml(
171+
k8s_client, "kubernetes/e2e_test/test_yaml/list.yaml")
125172
svc_api = k8s_api[0]
126173
self.assertEqual("v1", svc_api.get_api_resources().group_version)
127174
svc = svc_api.read_namespaced_service(name="list-service-test",
128-
namespace="default")
175+
namespace="default")
129176
self.assertIsNotNone(svc)
130177
ext_api = k8s_api[1]
131-
self.assertEqual("extensions/v1beta1",
132-
ext_api.get_api_resources().group_version)
178+
self.assertEqual("extensions/v1beta1",
179+
ext_api.get_api_resources().group_version)
133180
dep = ext_api.read_namespaced_deployment(name="list-deployment-test",
134-
namespace="default")
181+
namespace="default")
135182
self.assertIsNotNone(dep)
136183
ext_api.delete_namespaced_deployment(name="list-deployment-test",
137-
namespace="default", body={})
184+
namespace="default", body={})
138185
svc_api.delete_namespaced_service(name="list-service-test",
139-
namespace="default", body={})
140-
186+
namespace="default", body={})
187+
141188
def test_multi_resource(self):
189+
"""
190+
Test for handling a multi-resource yaml file. The yaml file contains
191+
a service and a replication controller. These two objects are
192+
created and deleted.
193+
Using core API
194+
Using yaml file multi-resource-yaml.yaml
195+
"""
142196
k8s_client = client.api_client.ApiClient(configuration=self.config)
143-
k8s_api = utils.create_from_yaml(k8s_client,
144-
"kubernetes/e2e_test/test_yaml/multi-resource-yaml.yaml")
197+
k8s_api = utils.create_from_yaml(
198+
k8s_client, "kubernetes/e2e_test/test_yaml/multi-resource-yaml.yaml")
145199
svc_api = k8s_api[0]
146200
self.assertEqual("v1", svc_api.get_api_resources().group_version)
147201
svc = svc_api.read_namespaced_service(name="mock",
148-
namespace="default")
202+
namespace="default")
149203
self.assertIsNotNone(svc)
150204
ctr_api = k8s_api[1]
151205
self.assertEqual("v1", ctr_api.get_api_resources().group_version)
152206
ctr = ctr_api.read_namespaced_replication_controller(
153207
name="mock", namespace="default")
154208
self.assertIsNotNone(ctr)
155-
ctr_api.delete_namespaced_replication_controller(name="mock",
156-
namespace="default", body={})
209+
ctr_api.delete_namespaced_replication_controller(
210+
name="mock", namespace="default", body={})
157211
svc_api.delete_namespaced_service(name="mock",
158-
namespace="default", body={})
212+
namespace="default", body={})
159213

160214
def test_multi_resource_with_conflict(self):
215+
"""
216+
Test for handling conflict.
217+
Create a service from the first yaml file. Attempt to create the
218+
same service and a replication controller using a second yaml file.
219+
The second yaml file is a multi-part file.
220+
The service and the replication controller should be created,
221+
while error is reported when attempting to create the service again.
222+
Since output_list is disabled, a single api object will be returned.
223+
Both object are deleted at the end of the test.
224+
Using core API
225+
Using yaml file yaml-conflict-first.yaml
226+
Using yaml file yaml-conflict-multi.yaml
227+
"""
161228
k8s_client = client.api_client.ApiClient(configuration=self.config)
162-
svc_api = utils.create_from_yaml(k8s_client,
163-
"kubernetes/e2e_test/test_yaml/yaml-conflict-first.yaml")
229+
svc_api = utils.create_from_yaml(
230+
k8s_client, "kubernetes/e2e_test/test_yaml/yaml-conflict-first.yaml")
164231
self.assertEqual("v1", svc_api.get_api_resources().group_version)
165232
svc = svc_api.read_namespaced_service(name="mock-2",
166-
namespace="default")
233+
namespace="default")
167234
self.assertIsNotNone(svc)
168-
ctr_api = utils.create_from_yaml(k8s_client,
169-
"kubernetes/e2e_test/test_yaml/yaml-conflict-multi.yaml")
170-
self.assertEqual("v1", ctr_api.get_api_resources().group_version)
235+
with self.assertRaises(utils.FailToCreateError):
236+
utils.create_from_yaml(
237+
k8s_client, "kubernetes/e2e_test/test_yaml/yaml-conflict-multi.yaml")
238+
ctr_api = client.CoreV1Api(k8s_client)
171239
ctr = ctr_api.read_namespaced_replication_controller(
172240
name="mock-2", namespace="default")
173241
self.assertIsNotNone(ctr)
174-
ctr_api.delete_namespaced_replication_controller(name="mock-2",
175-
namespace="default", body={})
242+
ctr_api.delete_namespaced_replication_controller(
243+
name="mock-2", namespace="default", body={})
176244
svc_api.delete_namespaced_service(name="mock-2",
177-
namespace="default", body={})
245+
namespace="default", body={})
178246

179247
def test_svc_list_with_conflict_no_kind(self):
248+
"""
249+
Test for handling yaml-compatible json files and a special kind
250+
of list. The kind field of the yaml file is ServiceList while the
251+
individual components does not contain the kind field.
252+
Two replicates exist in the json file. An exception will be raised.
253+
The kind should be inferred as Service and all these services
254+
are created and deleted.
255+
Using core API
256+
Using json file multi-resource-svclist.json
257+
"""
180258
k8s_client = client.api_client.ApiClient(configuration=self.config)
181-
svc_apis = utils.create_from_yaml(k8s_client,
182-
"kubernetes/e2e_test/test_yaml/multi-resource-svclist.json")
183-
svc_api_0 = svc_apis[0]
184-
self.assertEqual("v1", svc_api_0.get_api_resources().group_version)
185-
svc_0 = svc_api_0.read_namespaced_service(name="mock-3",
186-
namespace="default")
259+
with self.assertRaises(utils.FailToCreateError):
260+
utils.create_from_yaml(
261+
k8s_client, "kubernetes/e2e_test/test_yaml/multi-resource-svclist.json")
262+
svc_api = client.CoreV1Api(k8s_client)
263+
svc_0 = svc_api.read_namespaced_service(name="mock-3",
264+
namespace="default")
187265
self.assertIsNotNone(svc_0)
188-
svc_api_1 = svc_apis[1]
189-
self.assertEqual("v1", svc_api_1.get_api_resources().group_version)
190-
svc_1 = svc_api_1.read_namespaced_service(name="mock-4",
191-
namespace="default")
266+
svc_1 = svc_api.read_namespaced_service(name="mock-4",
267+
namespace="default")
192268
self.assertIsNotNone(svc_1)
193-
svc_api_0.delete_namespaced_service(name="mock-3",
194-
namespace="default", body={})
195-
svc_api_1.delete_namespaced_service(name="mock-4",
196-
namespace="default", body={})
269+
svc_api.delete_namespaced_service(name="mock-3",
270+
namespace="default", body={})
271+
svc_api.delete_namespaced_service(name="mock-4",
272+
namespace="default", body={})
273+
274+
def test_double_fail(self):
275+
"""
276+
Test for a file that contains triple occurences of the same object.
277+
Test if the correct exception is raised and correct message lines are
278+
being shown.
279+
"""
280+
k8s_client = client.api_client.ApiClient(configuration=self.config)
281+
with self.assertRaises(utils.FailToCreateError) as cm:
282+
utils.create_from_yaml(
283+
k8s_client, "kubernetes/e2e_test/test_yaml/triple-nginx.yaml")
284+
exp_error = ('Error from server (Conflict): '
285+
'deployments.extensions "triple-nginx" '
286+
'already exists\n'
287+
)
288+
exp_error += exp_error
289+
self.assertEqual(exp_error, str(cm.exception))
290+
k8s_api = client.ExtensionsV1beta1Api(k8s_client)
291+
dep = k8s_api.read_namespaced_deployment(name="triple-nginx",
292+
namespace="default")
293+
self.assertIsNotNone(dep)
294+
k8s_api.delete_namespaced_deployment(
295+
name="triple-nginx", namespace="default",
296+
body={})

0 commit comments

Comments
 (0)