Skip to content

Commit 76de3de

Browse files
authored
Merge pull request #110 from dims/more-e2e-tests
More e2e tests
2 parents d383faa + 839ce73 commit 76de3de

File tree

1 file changed

+111
-25
lines changed

1 file changed

+111
-25
lines changed

kubernetes/e2e_test/test_client.py

Lines changed: 111 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,11 @@
2525
import unittest
2626
import urllib3
2727
import uuid
28+
import yaml
2829

2930
from kubernetes.client import api_client
3031
from kubernetes.client.apis import core_v1_api
32+
from kubernetes.client.apis import extensions_v1beta1_api
3133

3234

3335
def _is_k8s_running():
@@ -39,6 +41,26 @@ def _is_k8s_running():
3941

4042

4143
class TestClient(unittest.TestCase):
44+
@unittest.skipUnless(
45+
_is_k8s_running(), "Kubernetes is not available")
46+
def test_read_namespaces(self):
47+
client = api_client.ApiClient('http://127.0.0.1:8080/')
48+
api = core_v1_api.CoreV1Api(client)
49+
50+
expected_namespaces = ('default', 'kube-system')
51+
for ns in expected_namespaces:
52+
api.read_namespace(name=ns)
53+
54+
@unittest.skipUnless(
55+
_is_k8s_running(), "Kubernetes is not available")
56+
def test_read_services(self):
57+
client = api_client.ApiClient('http://127.0.0.1:8080/')
58+
api = core_v1_api.CoreV1Api(client)
59+
60+
expected_services = ('kubernetes',)
61+
for service in expected_services:
62+
api.read_namespaced_service(service, 'default')
63+
4264
@unittest.skipUnless(
4365
_is_k8s_running(), "Kubernetes is not available")
4466
def test_list_endpoints(self):
@@ -48,14 +70,42 @@ def test_list_endpoints(self):
4870
endpoints = api.list_endpoints_for_all_namespaces()
4971
self.assertTrue(len(endpoints.items) > 0)
5072

73+
@unittest.skipUnless(
74+
_is_k8s_running(), "Kubernetes is not available")
75+
def test_create_deployment(self):
76+
client = api_client.ApiClient('http://127.0.0.1:8080/')
77+
api = extensions_v1beta1_api.ExtensionsV1beta1Api(client)
78+
name = 'nginx-deployment-' + str(uuid.uuid4())
79+
deployment = '''apiVersion: extensions/v1beta1
80+
kind: Deployment
81+
metadata:
82+
name: %s
83+
spec:
84+
replicas: 3
85+
template:
86+
metadata:
87+
labels:
88+
app: nginx
89+
spec:
90+
containers:
91+
- name: nginx
92+
image: nginx:1.7.9
93+
ports:
94+
- containerPort: 80
95+
'''
96+
resp = api.create_namespaced_deployment(
97+
body=yaml.load(deployment % name),
98+
namespace="default")
99+
resp = api.read_namespaced_deployment(name, 'default')
100+
self.assertIsNotNone(resp)
101+
51102
@unittest.skipUnless(
52103
_is_k8s_running(), "Kubernetes is not available")
53104
def test_pod_apis(self):
54105
client = api_client.ApiClient('http://127.0.0.1:8080/')
55106
api = core_v1_api.CoreV1Api(client)
56107

57108
name = 'test-' + str(uuid.uuid4())
58-
59109
pod_manifest = {'apiVersion': 'v1',
60110
'kind': 'Pod',
61111
'metadata': {'color': 'blue', 'name': name},
@@ -84,38 +134,39 @@ def test_service_apis(self):
84134
client = api_client.ApiClient('http://127.0.0.1:8080/')
85135
api = core_v1_api.CoreV1Api(client)
86136

137+
name = 'frontend-' + str(uuid.uuid4())
87138
service_manifest = {'apiVersion': 'v1',
88139
'kind': 'Service',
89-
'metadata': {'labels': {'name': 'frontend'},
90-
'name': 'frontend',
140+
'metadata': {'labels': {'name': name},
141+
'name': name,
91142
'resourceversion': 'v1'},
92143
'spec': {'ports': [{'name': 'port',
93144
'port': 80,
94145
'protocol': 'TCP',
95146
'targetPort': 80}],
96-
'selector': {'name': 'frontend'}}}
147+
'selector': {'name': name}}}
97148

98149
resp = api.create_namespaced_service(body=service_manifest,
99150
namespace='default')
100-
self.assertEqual('frontend', resp.metadata.name)
151+
self.assertEqual(name, resp.metadata.name)
101152
self.assertTrue(resp.status)
102153

103-
resp = api.read_namespaced_service(name='frontend',
154+
resp = api.read_namespaced_service(name=name,
104155
namespace='default')
105-
self.assertEqual('frontend', resp.metadata.name)
156+
self.assertEqual(name, resp.metadata.name)
106157
self.assertTrue(resp.status)
107158

108159
service_manifest['spec']['ports'] = [{'name': 'new',
109160
'port': 8080,
110161
'protocol': 'TCP',
111162
'targetPort': 8080}]
112163
resp = api.patch_namespaced_service(body=service_manifest,
113-
name='frontend',
164+
name=name,
114165
namespace='default')
115166
self.assertEqual(2, len(resp.spec.ports))
116167
self.assertTrue(resp.status)
117168

118-
resp = api.delete_namespaced_service(name='frontend',
169+
resp = api.delete_namespaced_service(name=name,
119170
namespace='default')
120171

121172
@unittest.skipUnless(
@@ -124,15 +175,16 @@ def test_replication_controller_apis(self):
124175
client = api_client.ApiClient('http://127.0.0.1:8080/')
125176
api = core_v1_api.CoreV1Api(client)
126177

178+
name = 'frontend-' + str(uuid.uuid4())
127179
rc_manifest = {
128180
'apiVersion': 'v1',
129181
'kind': 'ReplicationController',
130-
'metadata': {'labels': {'name': 'frontend'},
131-
'name': 'frontend'},
182+
'metadata': {'labels': {'name': name},
183+
'name': name},
132184
'spec': {'replicas': 2,
133-
'selector': {'name': 'frontend'},
185+
'selector': {'name': name},
134186
'template': {'metadata': {
135-
'labels': {'name': 'frontend'}},
187+
'labels': {'name': name}},
136188
'spec': {'containers': [{
137189
'image': 'nginx',
138190
'name': 'nginx',
@@ -141,29 +193,29 @@ def test_replication_controller_apis(self):
141193

142194
resp = api.create_namespaced_replication_controller(
143195
body=rc_manifest, namespace='default')
144-
self.assertEqual('frontend', resp.metadata.name)
196+
self.assertEqual(name, resp.metadata.name)
145197
self.assertEqual(2, resp.spec.replicas)
146198

147199
resp = api.read_namespaced_replication_controller(
148-
name='frontend', namespace='default')
149-
self.assertEqual('frontend', resp.metadata.name)
200+
name=name, namespace='default')
201+
self.assertEqual(name, resp.metadata.name)
150202
self.assertEqual(2, resp.spec.replicas)
151203

152204
resp = api.delete_namespaced_replication_controller(
153-
name='frontend', body={}, namespace='default')
154-
205+
name=name, body={}, namespace='default')
155206

156207
@unittest.skipUnless(
157208
_is_k8s_running(), "Kubernetes is not available")
158209
def test_configmap_apis(self):
159210
client = api_client.ApiClient('http://127.0.0.1:8080/')
160211
api = core_v1_api.CoreV1Api(client)
161212

213+
name = 'test-configmap-' + str(uuid.uuid4())
162214
test_configmap = {
163215
"kind": "ConfigMap",
164216
"apiVersion": "v1",
165217
"metadata": {
166-
"name": "test-configmap",
218+
"name": name,
167219
},
168220
"data": {
169221
"config.json": "{\"command\":\"/usr/bin/mysqld_safe\"}",
@@ -174,18 +226,18 @@ def test_configmap_apis(self):
174226
resp = api.create_namespaced_config_map(
175227
body=test_configmap, namespace='default'
176228
)
177-
self.assertEqual('test-configmap', resp.metadata.name)
229+
self.assertEqual(name, resp.metadata.name)
178230

179231
resp = api.read_namespaced_config_map(
180-
name='test-configmap', namespace='default')
181-
self.assertEqual('test-configmap', resp.metadata.name)
232+
name=name, namespace='default')
233+
self.assertEqual(name, resp.metadata.name)
182234

183235
test_configmap['data']['config.json'] = "{}"
184236
resp = api.patch_namespaced_config_map(
185-
name='test-configmap', namespace='default', body=test_configmap)
237+
name=name, namespace='default', body=test_configmap)
186238

187239
resp = api.delete_namespaced_config_map(
188-
name='test-configmap', body={}, namespace='default')
240+
name=name, body={}, namespace='default')
189241

190242
resp = api.list_namespaced_config_map('kube-system', pretty=True)
191243
self.assertEqual([], resp.items)
@@ -199,4 +251,38 @@ def test_node_apis(self):
199251
for item in api.list_node().items:
200252
node = api.read_node(name=item.metadata.name)
201253
self.assertTrue(len(node.metadata.labels) > 0)
202-
self.assertTrue(isinstance(node.metadata.labels, dict))
254+
self.assertTrue(isinstance(node.metadata.labels, dict))
255+
256+
@unittest.skipUnless(
257+
_is_k8s_running(), "Kubernetes is not available")
258+
def test_create_daemonset(self):
259+
client = api_client.ApiClient('http://127.0.0.1:8080/')
260+
api = extensions_v1beta1_api.ExtensionsV1beta1Api(client)
261+
name = 'nginx-app-' + str(uuid.uuid4())
262+
daemonset = {
263+
'apiVersion': 'extensions/v1beta1',
264+
'kind': 'DaemonSet',
265+
'metadata': {
266+
'labels': {'app': 'nginx'},
267+
'name': '%s' % name,
268+
},
269+
'spec': {
270+
'template': {
271+
'metadata': {
272+
'labels': {'app': 'nginx'},
273+
'name': name},
274+
'spec': {
275+
'containers': [
276+
{'name': 'nginx-app',
277+
'image': 'nginx:1.10'},
278+
],
279+
},
280+
},
281+
'updateStrategy': {
282+
'type': 'RollingUpdate',
283+
},
284+
}
285+
}
286+
resp = api.create_namespaced_daemon_set('default', body=daemonset)
287+
resp = api.read_namespaced_daemon_set(name, 'default')
288+
self.assertIsNotNone(resp)

0 commit comments

Comments
 (0)