-
Notifications
You must be signed in to change notification settings - Fork 3.3k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add a test for custom object operations #930
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -19,6 +19,8 @@ | |
|
||
from kubernetes.client import api_client | ||
from kubernetes.client.apis import core_v1_api | ||
from kubernetes.client.apis import apiextensions_v1beta1_api | ||
from kubernetes.client.apis import custom_objects_api | ||
from kubernetes.e2e_test import base | ||
from kubernetes.stream import stream | ||
from kubernetes.stream.ws_client import ERROR_CHANNEL | ||
|
@@ -234,3 +236,65 @@ def test_node_apis(self): | |
node = api.read_node(name=item.metadata.name) | ||
self.assertTrue(len(node.metadata.labels) > 0) | ||
self.assertTrue(isinstance(node.metadata.labels, dict)) | ||
|
||
def test_custom_objects_apis(self): | ||
""" | ||
It should be able to create and patch a namespaced custom object. | ||
""" | ||
client = api_client.ApiClient(configuration=self.config) | ||
crd_api = apiextensions_v1beta1_api.ApiextensionsV1beta1Api(client) | ||
cr_api = custom_objects_api.CustomObjectsApi(client) | ||
|
||
# create a CRD that defines a namespace-scoped custom resource Foo | ||
# TODO: The test objects in this test file are unstructured. Verify | ||
# if it makes more sense to switch to typed objects defined under | ||
# kubernetes.client.models | ||
group_prefix = 'test-crd-' + short_uuid() | ||
group = group_prefix + '.test.e2e.com' | ||
api_version = group + '/v1' | ||
name = 'foos.' + group | ||
test_crd = { | ||
'kind': 'CustomResourceDefinition', | ||
'apiVersion': 'apiextensions.k8s.io/v1beta1', | ||
'metadata': { | ||
'name': name, | ||
}, | ||
'spec': { | ||
'group': group, | ||
'versions': [{ | ||
'name': 'v1', | ||
'served': True, | ||
'storage': True | ||
}], | ||
'names': { | ||
'kind': 'Foo', | ||
'plural': 'foos' | ||
}, | ||
'scope': 'Namespaced' | ||
} | ||
} | ||
resp = crd_api.create_custom_resource_definition(body=test_crd) | ||
self.assertEqual(name, resp.metadata.name) | ||
print('E2E test CRD created') | ||
|
||
# wait for the CRD to be ready | ||
time.sleep(5) | ||
|
||
# create a custom object | ||
name = 'test-foo-' + short_uuid() | ||
resp = cr_api.create_namespaced_custom_object(group=group, | ||
version='v1', | ||
plural='foos', | ||
namespace='default', | ||
body={'kind':'Foo', 'apiVersion':api_version, 'metadata':{'name':name}}) | ||
self.assertEqual(name, resp.metadata.name) | ||
print('E2E test CR created') | ||
|
||
# perform an emtpy JSON merge patch on the custom object | ||
resp = cr_api.patch_namespaced_custom_object(group=group, | ||
version='v1', | ||
plural='foos', | ||
namespace='default', | ||
name=name, | ||
body={}) | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. do you want to check the resp? does it succeed? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. added also added a commit to make the CRD deserializer usable before we fix the upstream openapi spec: kubernetes/kubernetes#64996 |
||
self.assertEqual(name, resp.metadata.name) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
this is generated, and will be overwritten in next release, right?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
yes, the proper fix will come in 1.16 kubernetes/kubernetes#64996
somehow in the test, the response is deserialized into a dict instead of a CRD object, which causes the attribute assertion to fail. Perhaps this workaround isn't ideal either. I will abandon this pull and verify the CR patch methods manually in the next couple of releases
/close