From 9753ba65e27fde34ab9f6bb923103e97c54ec0ee Mon Sep 17 00:00:00 2001 From: Rohan Kumar Date: Fri, 9 Apr 2021 22:13:58 +0530 Subject: [PATCH] Add DSL Support for `apps/v1#ControllerRevision` resource Related to https://github.com/fabric8io/kubernetes-client/issues/2912 --- CHANGELOG.md | 1 + .../kubernetes/client/AppsAPIGroupClient.java | 8 ++ .../client/dsl/AppsAPIGroupDSL.java | 9 ++ .../client/mock/ControllerRevisionTest.java | 116 ++++++++++++++++++ .../resources/test-controllerrevision.yml | 23 ++++ 5 files changed, 157 insertions(+) create mode 100644 kubernetes-tests/src/test/java/io/fabric8/kubernetes/client/mock/ControllerRevisionTest.java create mode 100644 kubernetes-tests/src/test/resources/test-controllerrevision.yml diff --git a/CHANGELOG.md b/CHANGELOG.md index 82137498335..ac66b278fcb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ #### Dependency Upgrade #### New Features +* Add DSL Support for `apps/v1#ControllerRevision` resource ### 5.3.0 (2021-04-08) diff --git a/kubernetes-client/src/main/java/io/fabric8/kubernetes/client/AppsAPIGroupClient.java b/kubernetes-client/src/main/java/io/fabric8/kubernetes/client/AppsAPIGroupClient.java index b4c862fb6fa..f32d6a18d3f 100644 --- a/kubernetes-client/src/main/java/io/fabric8/kubernetes/client/AppsAPIGroupClient.java +++ b/kubernetes-client/src/main/java/io/fabric8/kubernetes/client/AppsAPIGroupClient.java @@ -15,6 +15,8 @@ */ package io.fabric8.kubernetes.client; +import io.fabric8.kubernetes.api.model.apps.ControllerRevision; +import io.fabric8.kubernetes.api.model.apps.ControllerRevisionList; import io.fabric8.kubernetes.api.model.apps.DaemonSet; import io.fabric8.kubernetes.api.model.apps.DaemonSetList; import io.fabric8.kubernetes.api.model.apps.Deployment; @@ -27,6 +29,7 @@ import io.fabric8.kubernetes.client.dsl.Resource; import io.fabric8.kubernetes.client.dsl.MixedOperation; import io.fabric8.kubernetes.client.dsl.AppsAPIGroupDSL; +import io.fabric8.kubernetes.client.dsl.internal.apps.v1.ControllerRevisionOperationsImpl; import io.fabric8.kubernetes.client.dsl.internal.apps.v1.DaemonSetOperationsImpl; import io.fabric8.kubernetes.client.dsl.internal.apps.v1.DeploymentOperationsImpl; import io.fabric8.kubernetes.client.dsl.internal.apps.v1.ReplicaSetOperationsImpl; @@ -63,4 +66,9 @@ public MixedOperation> statefulSets() { return new StatefulSetOperationsImpl(httpClient, getConfiguration()); } + + @Override + public MixedOperation> controllerRevisions() { + return new ControllerRevisionOperationsImpl(httpClient, getConfiguration()); + } } diff --git a/kubernetes-client/src/main/java/io/fabric8/kubernetes/client/dsl/AppsAPIGroupDSL.java b/kubernetes-client/src/main/java/io/fabric8/kubernetes/client/dsl/AppsAPIGroupDSL.java index 0f3c99b116f..c310be4d517 100644 --- a/kubernetes-client/src/main/java/io/fabric8/kubernetes/client/dsl/AppsAPIGroupDSL.java +++ b/kubernetes-client/src/main/java/io/fabric8/kubernetes/client/dsl/AppsAPIGroupDSL.java @@ -16,6 +16,8 @@ package io.fabric8.kubernetes.client.dsl; +import io.fabric8.kubernetes.api.model.apps.ControllerRevision; +import io.fabric8.kubernetes.api.model.apps.ControllerRevisionList; import io.fabric8.kubernetes.api.model.apps.DaemonSet; import io.fabric8.kubernetes.api.model.apps.DaemonSetList; import io.fabric8.kubernetes.api.model.apps.Deployment; @@ -36,4 +38,11 @@ public interface AppsAPIGroupDSL extends Client { MixedOperation> statefulSets(); + /** + * DSL entrypoint for ControllerRevision in api group apps/v1 + * + * @return {@link MixedOperation} for ControllerRevision resource + */ + MixedOperation> controllerRevisions(); + } diff --git a/kubernetes-tests/src/test/java/io/fabric8/kubernetes/client/mock/ControllerRevisionTest.java b/kubernetes-tests/src/test/java/io/fabric8/kubernetes/client/mock/ControllerRevisionTest.java new file mode 100644 index 00000000000..577390a86ba --- /dev/null +++ b/kubernetes-tests/src/test/java/io/fabric8/kubernetes/client/mock/ControllerRevisionTest.java @@ -0,0 +1,116 @@ +/** + * Copyright (C) 2015 Red Hat, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package io.fabric8.kubernetes.client.mock; + +import io.fabric8.kubernetes.api.model.HasMetadata; +import io.fabric8.kubernetes.api.model.apps.ControllerRevision; +import io.fabric8.kubernetes.api.model.apps.ControllerRevisionBuilder; +import io.fabric8.kubernetes.api.model.apps.ControllerRevisionList; +import io.fabric8.kubernetes.api.model.apps.ControllerRevisionListBuilder; +import io.fabric8.kubernetes.client.KubernetesClient; +import io.fabric8.kubernetes.client.server.mock.EnableKubernetesMockClient; +import io.fabric8.kubernetes.client.server.mock.KubernetesMockServer; +import org.junit.jupiter.api.Test; + +import java.net.HttpURLConnection; +import java.util.List; + +import static org.assertj.core.api.AssertionsForInterfaceTypes.assertThat; + +@EnableKubernetesMockClient +class ControllerRevisionTest { + private KubernetesMockServer server; + private KubernetesClient client; + + @Test + void load() { + List items = client.load(getClass().getResourceAsStream("/test-controllerrevision.yml")).get(); + assertThat(items).isNotNull().hasSize(1); + assertThat(items.get(0)).isInstanceOf(ControllerRevision.class); + } + + @Test + void create() { + // Given + ControllerRevision controllerRevision = getMockControllerRevision("my-cr1"); + server.expect().post().withPath("/apis/apps/v1/namespaces/default/controllerrevisions") + .andReturn(HttpURLConnection.HTTP_CREATED, controllerRevision) + .once(); + + // When + ControllerRevision myCr = client.apps().controllerRevisions().inNamespace("default").create(controllerRevision); + + // Then + assertThat(myCr).isNotNull().hasFieldOrPropertyWithValue("metadata.name", "my-cr1"); + } + + @Test + void get() { + // Given + server.expect().get().withPath("/apis/apps/v1/namespaces/default/controllerrevisions/cr1") + .andReturn(HttpURLConnection.HTTP_OK, getMockControllerRevision("cr1")) + .once(); + + // When + ControllerRevision cr1 = client.apps().controllerRevisions().inNamespace("default").withName("cr1").get(); + + // Then + assertThat(cr1) + .isNotNull() + .hasFieldOrPropertyWithValue("metadata.name", "cr1"); + } + + @Test + void list() { + // Given + server.expect().get().withPath("/apis/apps/v1/namespaces/default/controllerrevisions") + .andReturn(HttpURLConnection.HTTP_OK, new ControllerRevisionListBuilder().addToItems(getMockControllerRevision("cr1")).build()) + .once(); + + // When + ControllerRevisionList controllerRevisionList = client.apps().controllerRevisions().inNamespace("default").list(); + + // Then + assertThat(controllerRevisionList).isNotNull(); + assertThat(controllerRevisionList.getItems()).isNotNull().hasSize(1); + assertThat(controllerRevisionList.getItems().get(0)).hasFieldOrPropertyWithValue("metadata.name", "cr1"); + } + + @Test + void delete() { + // Given + server.expect().delete().withPath("/apis/apps/v1/namespaces/default/controllerrevisions/cr1") + .andReturn(HttpURLConnection.HTTP_OK, getMockControllerRevision("cr1")) + .once(); + + // When + Boolean isDeleted = client.apps().controllerRevisions().inNamespace("default").withName("cr1").delete(); + + // Then + assertThat(isDeleted).isTrue(); + } + + private ControllerRevision getMockControllerRevision(String name) { + return new ControllerRevisionBuilder() + .withNewMetadata().withName(name).endMetadata() + .withNewDaemonSetData() + .withApiVersion("apps/v1") + .withKind("DaemonSet") + .endDaemonSetData() + .build(); + } + +} diff --git a/kubernetes-tests/src/test/resources/test-controllerrevision.yml b/kubernetes-tests/src/test/resources/test-controllerrevision.yml new file mode 100644 index 00000000000..7cb9d6ef96c --- /dev/null +++ b/kubernetes-tests/src/test/resources/test-controllerrevision.yml @@ -0,0 +1,23 @@ +# +# Copyright (C) 2015 Red Hat, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +apiVersion: apps/v1 +kind: ControllerRevision +metadata: + name: example +data: + key: value +revision: 1