diff --git a/extensions/camel-k/client/pom.xml b/extensions/camel-k/client/pom.xml
index f6a1d4c6e0b..a038c366735 100644
--- a/extensions/camel-k/client/pom.xml
+++ b/extensions/camel-k/client/pom.xml
@@ -84,7 +84,17 @@
org.junit.jupiter
- junit-jupiter-migrationsupport
+ junit-jupiter-params
+ test
+
+
+ org.mockito
+ mockito-core
+ test
+
+
+ org.assertj
+ assertj-core
test
diff --git a/extensions/camel-k/client/src/main/java/io/fabric8/camelk/client/CamelKClient.java b/extensions/camel-k/client/src/main/java/io/fabric8/camelk/client/CamelKClient.java
index 3ecd8096b56..d2c386bce70 100644
--- a/extensions/camel-k/client/src/main/java/io/fabric8/camelk/client/CamelKClient.java
+++ b/extensions/camel-k/client/src/main/java/io/fabric8/camelk/client/CamelKClient.java
@@ -18,11 +18,12 @@
import io.fabric8.camelk.client.dsl.V1APIGroupDSL;
import io.fabric8.camelk.client.dsl.V1alpha1APIGroupDSL;
import io.fabric8.kubernetes.client.Client;
+import io.fabric8.kubernetes.client.extension.SupportTestingClient;
/**
* Main interface for CamelK client library.
*/
-public interface CamelKClient extends Client {
+public interface CamelKClient extends Client, SupportTestingClient {
/**
* API entrypoint for camel.apache.org/v1 API group resources
*
diff --git a/extensions/camel-k/client/src/main/java/io/fabric8/camelk/client/DefaultCamelKClient.java b/extensions/camel-k/client/src/main/java/io/fabric8/camelk/client/DefaultCamelKClient.java
index 313c2998ff3..97a4d78ca1a 100644
--- a/extensions/camel-k/client/src/main/java/io/fabric8/camelk/client/DefaultCamelKClient.java
+++ b/extensions/camel-k/client/src/main/java/io/fabric8/camelk/client/DefaultCamelKClient.java
@@ -23,10 +23,9 @@
import io.fabric8.kubernetes.client.WithRequestCallable;
import io.fabric8.kubernetes.client.dsl.FunctionCallable;
import io.fabric8.kubernetes.client.extension.ExtensionRootClientAdapter;
-import io.fabric8.kubernetes.client.extension.SupportTestingClient;
public class DefaultCamelKClient extends ExtensionRootClientAdapter
- implements NamespacedCamelKClient, SupportTestingClient {
+ implements NamespacedCamelKClient {
public DefaultCamelKClient() {
super();
@@ -62,7 +61,7 @@ public V1alpha1APIGroupDSL v1alpha1() {
@Override
public boolean isSupported() {
- return hasApiGroup("camel.apache.org", true);
+ return hasApiGroup("camel.apache.org", false);
}
}
diff --git a/extensions/camel-k/client/src/test/java/io/fabric8/camelk/client/CamelKClientAdaptTest.java b/extensions/camel-k/client/src/test/java/io/fabric8/camelk/client/CamelKClientAdaptTest.java
new file mode 100644
index 00000000000..d146f2fefe8
--- /dev/null
+++ b/extensions/camel-k/client/src/test/java/io/fabric8/camelk/client/CamelKClientAdaptTest.java
@@ -0,0 +1,82 @@
+/**
+ * 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.camelk.client;
+
+import io.fabric8.kubernetes.api.model.APIGroup;
+import io.fabric8.kubernetes.api.model.APIGroupBuilder;
+import io.fabric8.kubernetes.api.model.APIGroupList;
+import io.fabric8.kubernetes.api.model.APIGroupListBuilder;
+import io.fabric8.kubernetes.client.Config;
+import io.fabric8.kubernetes.client.ConfigBuilder;
+import io.fabric8.kubernetes.client.KubernetesClient;
+import io.fabric8.kubernetes.client.dsl.internal.OperationSupport;
+import io.fabric8.kubernetes.client.http.HttpClient;
+import io.fabric8.kubernetes.client.impl.KubernetesClientImpl;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.MethodSource;
+import org.mockito.MockedConstruction;
+import org.mockito.Mockito;
+
+import java.util.stream.Stream;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.mockConstruction;
+import static org.mockito.Mockito.when;
+
+class CamelKClientAdaptTest {
+ private KubernetesClient kubernetesClient;
+
+ @BeforeEach
+ public void setUp() {
+ HttpClient mockClient = mock(HttpClient.class, Mockito.RETURNS_DEEP_STUBS);
+ Config config = new ConfigBuilder().withMasterUrl("https://localhost:8443/").build();
+ kubernetesClient = new KubernetesClientImpl(mockClient, config);
+ }
+
+ @AfterEach
+ void tearDown() {
+ kubernetesClient.close();
+ kubernetesClient = null;
+ }
+
+ @ParameterizedTest
+ @MethodSource("getInputData")
+ void isSupported_withGivenApiGroup_shouldValidateSupport(String apiGroupName, boolean expectedResult) {
+ try (MockedConstruction ignored = mockConstruction(OperationSupport.class, (mock, ctx) -> {
+ givenApiGroupsCallReturns(mock, new APIGroupBuilder().withName(apiGroupName).build());
+ })) {
+ assertThat(kubernetesClient.adapt(CamelKClient.class).isSupported()).isEqualTo(expectedResult);
+ }
+ }
+
+ private static Stream getInputData() {
+ return Stream.of(
+ Arguments.of("camel.apache.org", true),
+ Arguments.of("test.camel.apache.org", true),
+ Arguments.of("tekton.dev", false));
+ }
+
+ private void givenApiGroupsCallReturns(OperationSupport operationSupport, APIGroup apiGroup) {
+ when(operationSupport.restCall(APIGroupList.class, "/apis"))
+ .thenReturn(new APIGroupListBuilder()
+ .addToGroups(apiGroup)
+ .build());
+ }
+}
diff --git a/extensions/camel-k/client/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker b/extensions/camel-k/client/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker
new file mode 100644
index 00000000000..1f0955d450f
--- /dev/null
+++ b/extensions/camel-k/client/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker
@@ -0,0 +1 @@
+mock-maker-inline
diff --git a/extensions/certmanager/client/pom.xml b/extensions/certmanager/client/pom.xml
index 9ed649cf928..502f406ee42 100644
--- a/extensions/certmanager/client/pom.xml
+++ b/extensions/certmanager/client/pom.xml
@@ -93,7 +93,17 @@
org.junit.jupiter
- junit-jupiter-migrationsupport
+ junit-jupiter-params
+ test
+
+
+ org.mockito
+ mockito-core
+ test
+
+
+ org.assertj
+ assertj-core
test
diff --git a/extensions/certmanager/client/src/main/java/io/fabric8/certmanager/client/CertManagerClient.java b/extensions/certmanager/client/src/main/java/io/fabric8/certmanager/client/CertManagerClient.java
index 9c582f0dec3..bb0805a5ae7 100644
--- a/extensions/certmanager/client/src/main/java/io/fabric8/certmanager/client/CertManagerClient.java
+++ b/extensions/certmanager/client/src/main/java/io/fabric8/certmanager/client/CertManagerClient.java
@@ -20,11 +20,12 @@
import io.fabric8.certmanager.client.dsl.V1alpha3APIGroupDSL;
import io.fabric8.certmanager.client.dsl.V1beta1APIGroupDSL;
import io.fabric8.kubernetes.client.Client;
+import io.fabric8.kubernetes.client.extension.SupportTestingClient;
/**
* Main interface for CertManager Client library.
*/
-public interface CertManagerClient extends Client {
+public interface CertManagerClient extends Client, SupportTestingClient {
V1APIGroupDSL v1();
V1alpha2APIGroupDSL v1alpha2();
diff --git a/extensions/certmanager/client/src/main/java/io/fabric8/certmanager/client/DefaultCertManagerClient.java b/extensions/certmanager/client/src/main/java/io/fabric8/certmanager/client/DefaultCertManagerClient.java
index d173321f123..2694ba01f4e 100644
--- a/extensions/certmanager/client/src/main/java/io/fabric8/certmanager/client/DefaultCertManagerClient.java
+++ b/extensions/certmanager/client/src/main/java/io/fabric8/certmanager/client/DefaultCertManagerClient.java
@@ -71,4 +71,8 @@ public V1beta1APIGroupDSL v1beta1() {
return adapt(V1beta1APIGroupClient.class);
}
+ @Override
+ public boolean isSupported() {
+ return hasApiGroup("cert-manager.io", false);
+ }
}
diff --git a/extensions/certmanager/client/src/test/java/io/fabric8/certmanager/client/CertManagerClientAdaptTest.java b/extensions/certmanager/client/src/test/java/io/fabric8/certmanager/client/CertManagerClientAdaptTest.java
new file mode 100644
index 00000000000..dc45a581ba0
--- /dev/null
+++ b/extensions/certmanager/client/src/test/java/io/fabric8/certmanager/client/CertManagerClientAdaptTest.java
@@ -0,0 +1,82 @@
+/**
+ * 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.certmanager.client;
+
+import io.fabric8.kubernetes.api.model.APIGroup;
+import io.fabric8.kubernetes.api.model.APIGroupBuilder;
+import io.fabric8.kubernetes.api.model.APIGroupList;
+import io.fabric8.kubernetes.api.model.APIGroupListBuilder;
+import io.fabric8.kubernetes.client.Config;
+import io.fabric8.kubernetes.client.ConfigBuilder;
+import io.fabric8.kubernetes.client.KubernetesClient;
+import io.fabric8.kubernetes.client.dsl.internal.OperationSupport;
+import io.fabric8.kubernetes.client.http.HttpClient;
+import io.fabric8.kubernetes.client.impl.KubernetesClientImpl;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.MethodSource;
+import org.mockito.MockedConstruction;
+import org.mockito.Mockito;
+
+import java.util.stream.Stream;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.mockConstruction;
+import static org.mockito.Mockito.when;
+
+class CertManagerClientAdaptTest {
+ private KubernetesClient kubernetesClient;
+
+ @BeforeEach
+ public void setUp() {
+ HttpClient mockClient = mock(HttpClient.class, Mockito.RETURNS_DEEP_STUBS);
+ Config config = new ConfigBuilder().withMasterUrl("https://localhost:8443/").build();
+ kubernetesClient = new KubernetesClientImpl(mockClient, config);
+ }
+
+ @AfterEach
+ void tearDown() {
+ kubernetesClient.close();
+ kubernetesClient = null;
+ }
+
+ @ParameterizedTest
+ @MethodSource("getInputData")
+ void isSupported_withGivenApiGroup_shouldValidateSupport(String apiGroupName, boolean expectedResult) {
+ try (MockedConstruction ignored = mockConstruction(OperationSupport.class, (mock, ctx) -> {
+ givenApiGroupsCallReturns(mock, new APIGroupBuilder().withName(apiGroupName).build());
+ })) {
+ assertThat(kubernetesClient.adapt(CertManagerClient.class).isSupported()).isEqualTo(expectedResult);
+ }
+ }
+
+ private static Stream getInputData() {
+ return Stream.of(
+ Arguments.of("cert-manager.io", true),
+ Arguments.of("test.cert-manager.io", true),
+ Arguments.of("tekton.dev", false));
+ }
+
+ private void givenApiGroupsCallReturns(OperationSupport operationSupport, APIGroup apiGroup) {
+ when(operationSupport.restCall(APIGroupList.class, "/apis"))
+ .thenReturn(new APIGroupListBuilder()
+ .addToGroups(apiGroup)
+ .build());
+ }
+}
diff --git a/extensions/certmanager/client/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker b/extensions/certmanager/client/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker
new file mode 100644
index 00000000000..1f0955d450f
--- /dev/null
+++ b/extensions/certmanager/client/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker
@@ -0,0 +1 @@
+mock-maker-inline
diff --git a/extensions/chaosmesh/client/pom.xml b/extensions/chaosmesh/client/pom.xml
index d2f35dc8720..bf0ad115244 100644
--- a/extensions/chaosmesh/client/pom.xml
+++ b/extensions/chaosmesh/client/pom.xml
@@ -95,7 +95,17 @@
org.junit.jupiter
- junit-jupiter-migrationsupport
+ junit-jupiter-params
+ test
+
+
+ org.mockito
+ mockito-core
+ test
+
+
+ org.assertj
+ assertj-core
test
diff --git a/extensions/chaosmesh/client/src/main/java/io/fabric8/chaosmesh/client/ChaosMeshClient.java b/extensions/chaosmesh/client/src/main/java/io/fabric8/chaosmesh/client/ChaosMeshClient.java
index eaca971802f..6cc3bae49b7 100644
--- a/extensions/chaosmesh/client/src/main/java/io/fabric8/chaosmesh/client/ChaosMeshClient.java
+++ b/extensions/chaosmesh/client/src/main/java/io/fabric8/chaosmesh/client/ChaosMeshClient.java
@@ -42,11 +42,12 @@
import io.fabric8.kubernetes.client.Client;
import io.fabric8.kubernetes.client.dsl.MixedOperation;
import io.fabric8.kubernetes.client.dsl.Resource;
+import io.fabric8.kubernetes.client.extension.SupportTestingClient;
/**
* Main interface for Chaos Mesh Client.
*/
-public interface ChaosMeshClient extends Client {
+public interface ChaosMeshClient extends Client, SupportTestingClient {
// Serving
/**
diff --git a/extensions/chaosmesh/client/src/main/java/io/fabric8/chaosmesh/client/DefaultChaosMeshClient.java b/extensions/chaosmesh/client/src/main/java/io/fabric8/chaosmesh/client/DefaultChaosMeshClient.java
index 2093bc65b29..7b9ba9eeab3 100644
--- a/extensions/chaosmesh/client/src/main/java/io/fabric8/chaosmesh/client/DefaultChaosMeshClient.java
+++ b/extensions/chaosmesh/client/src/main/java/io/fabric8/chaosmesh/client/DefaultChaosMeshClient.java
@@ -47,10 +47,9 @@
import io.fabric8.kubernetes.client.dsl.MixedOperation;
import io.fabric8.kubernetes.client.dsl.Resource;
import io.fabric8.kubernetes.client.extension.ExtensionRootClientAdapter;
-import io.fabric8.kubernetes.client.extension.SupportTestingClient;
public class DefaultChaosMeshClient extends ExtensionRootClientAdapter
- implements NamespacedChaosMeshClient, SupportTestingClient {
+ implements NamespacedChaosMeshClient {
public DefaultChaosMeshClient() {
super();
@@ -136,6 +135,6 @@ public MixedOperation> awsChaos() {
@Override
public boolean isSupported() {
- return hasApiGroup("chaos-mesh.org", true);
+ return hasApiGroup("chaos-mesh.org", false);
}
}
diff --git a/extensions/chaosmesh/client/src/main/resources/mockito-extensions/org.mockito.plugins.MockMaker b/extensions/chaosmesh/client/src/main/resources/mockito-extensions/org.mockito.plugins.MockMaker
new file mode 100644
index 00000000000..1f0955d450f
--- /dev/null
+++ b/extensions/chaosmesh/client/src/main/resources/mockito-extensions/org.mockito.plugins.MockMaker
@@ -0,0 +1 @@
+mock-maker-inline
diff --git a/extensions/chaosmesh/client/src/test/java/io/fabric8/chaosmesh/client/ChaosMeshClientAdaptTest.java b/extensions/chaosmesh/client/src/test/java/io/fabric8/chaosmesh/client/ChaosMeshClientAdaptTest.java
new file mode 100644
index 00000000000..6399195f6e1
--- /dev/null
+++ b/extensions/chaosmesh/client/src/test/java/io/fabric8/chaosmesh/client/ChaosMeshClientAdaptTest.java
@@ -0,0 +1,81 @@
+/**
+ * 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.chaosmesh.client;
+
+import io.fabric8.kubernetes.api.model.APIGroup;
+import io.fabric8.kubernetes.api.model.APIGroupBuilder;
+import io.fabric8.kubernetes.api.model.APIGroupList;
+import io.fabric8.kubernetes.api.model.APIGroupListBuilder;
+import io.fabric8.kubernetes.client.Config;
+import io.fabric8.kubernetes.client.ConfigBuilder;
+import io.fabric8.kubernetes.client.KubernetesClient;
+import io.fabric8.kubernetes.client.dsl.internal.OperationSupport;
+import io.fabric8.kubernetes.client.http.HttpClient;
+import io.fabric8.kubernetes.client.impl.KubernetesClientImpl;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.MethodSource;
+import org.mockito.MockedConstruction;
+import org.mockito.Mockito;
+
+import java.util.stream.Stream;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.mockito.Mockito.mockConstruction;
+import static org.mockito.Mockito.when;
+
+class ChaosMeshClientAdaptTest {
+ private KubernetesClient kubernetesClient;
+
+ @BeforeEach
+ public void setUp() {
+ HttpClient mockClient = Mockito.mock(HttpClient.class, Mockito.RETURNS_DEEP_STUBS);
+ Config config = new ConfigBuilder().withMasterUrl("https://localhost:8443/").build();
+ kubernetesClient = new KubernetesClientImpl(mockClient, config);
+ }
+
+ @AfterEach
+ void tearDown() {
+ kubernetesClient.close();
+ kubernetesClient = null;
+ }
+
+ @ParameterizedTest
+ @MethodSource("getInputData")
+ void isSupported_withGivenApiGroup_shouldValidateSupport(String apiGroupName, boolean expectedResult) {
+ try (MockedConstruction ignored = mockConstruction(OperationSupport.class, (mock, ctx) -> {
+ givenApiGroupsCallReturns(mock, new APIGroupBuilder().withName(apiGroupName).build());
+ })) {
+ assertThat(kubernetesClient.adapt(ChaosMeshClient.class).isSupported()).isEqualTo(expectedResult);
+ }
+ }
+
+ private static Stream getInputData() {
+ return Stream.of(
+ Arguments.of("chaos-mesh.org", true),
+ Arguments.of("test.chaos-mesh.org", true),
+ Arguments.of("tekton.dev", false));
+ }
+
+ private void givenApiGroupsCallReturns(OperationSupport operationSupport, APIGroup apiGroup) {
+ when(operationSupport.restCall(APIGroupList.class, "/apis"))
+ .thenReturn(new APIGroupListBuilder()
+ .addToGroups(apiGroup)
+ .build());
+ }
+}
diff --git a/extensions/istio/client/pom.xml b/extensions/istio/client/pom.xml
index 69e54afe582..aeb1263e9d9 100755
--- a/extensions/istio/client/pom.xml
+++ b/extensions/istio/client/pom.xml
@@ -82,6 +82,21 @@
junit-jupiter-engine
test
+
+ org.junit.jupiter
+ junit-jupiter-params
+ test
+
+
+ org.mockito
+ mockito-core
+ test
+
+
+ org.assertj
+ assertj-core
+ test
+
org.projectlombok
lombok
diff --git a/extensions/istio/client/src/main/java/io/fabric8/istio/client/DefaultIstioClient.java b/extensions/istio/client/src/main/java/io/fabric8/istio/client/DefaultIstioClient.java
index 5d765fc50cb..bd572066802 100644
--- a/extensions/istio/client/src/main/java/io/fabric8/istio/client/DefaultIstioClient.java
+++ b/extensions/istio/client/src/main/java/io/fabric8/istio/client/DefaultIstioClient.java
@@ -21,10 +21,9 @@
import io.fabric8.kubernetes.client.WithRequestCallable;
import io.fabric8.kubernetes.client.dsl.FunctionCallable;
import io.fabric8.kubernetes.client.extension.ExtensionRootClientAdapter;
-import io.fabric8.kubernetes.client.extension.SupportTestingClient;
public class DefaultIstioClient extends ExtensionRootClientAdapter
- implements NamespacedIstioClient, SupportTestingClient {
+ implements NamespacedIstioClient {
public DefaultIstioClient() {
super();
@@ -60,6 +59,6 @@ public V1beta1APIGroupDSL v1beta1() {
@Override
public boolean isSupported() {
- return hasApiGroup("networking.istio.io", true);
+ return hasApiGroup("istio.io", false);
}
}
diff --git a/extensions/istio/client/src/main/java/io/fabric8/istio/client/IstioClient.java b/extensions/istio/client/src/main/java/io/fabric8/istio/client/IstioClient.java
index b5ccc75be06..9dda03d635b 100644
--- a/extensions/istio/client/src/main/java/io/fabric8/istio/client/IstioClient.java
+++ b/extensions/istio/client/src/main/java/io/fabric8/istio/client/IstioClient.java
@@ -16,11 +16,12 @@
package io.fabric8.istio.client;
import io.fabric8.kubernetes.client.Client;
+import io.fabric8.kubernetes.client.extension.SupportTestingClient;
/**
* Main interface for Istio Client.
*/
-public interface IstioClient extends Client {
+public interface IstioClient extends Client, SupportTestingClient {
/**
* API entrypoint for istio.io/v1beta1 API group resources
*
diff --git a/extensions/istio/client/src/test/java/io/fabric8/istio/client/IstioClientAdaptTest.java b/extensions/istio/client/src/test/java/io/fabric8/istio/client/IstioClientAdaptTest.java
new file mode 100644
index 00000000000..60e24c823f1
--- /dev/null
+++ b/extensions/istio/client/src/test/java/io/fabric8/istio/client/IstioClientAdaptTest.java
@@ -0,0 +1,81 @@
+/**
+ * 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.istio.client;
+
+import io.fabric8.kubernetes.api.model.APIGroup;
+import io.fabric8.kubernetes.api.model.APIGroupBuilder;
+import io.fabric8.kubernetes.api.model.APIGroupList;
+import io.fabric8.kubernetes.api.model.APIGroupListBuilder;
+import io.fabric8.kubernetes.client.Config;
+import io.fabric8.kubernetes.client.ConfigBuilder;
+import io.fabric8.kubernetes.client.KubernetesClient;
+import io.fabric8.kubernetes.client.dsl.internal.OperationSupport;
+import io.fabric8.kubernetes.client.http.HttpClient;
+import io.fabric8.kubernetes.client.impl.KubernetesClientImpl;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.MethodSource;
+import org.mockito.MockedConstruction;
+import org.mockito.Mockito;
+
+import java.util.stream.Stream;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.mockito.Mockito.mockConstruction;
+import static org.mockito.Mockito.when;
+
+class IstioClientAdaptTest {
+ private KubernetesClient kubernetesClient;
+
+ @BeforeEach
+ public void setUp() {
+ HttpClient mockClient = Mockito.mock(HttpClient.class, Mockito.RETURNS_DEEP_STUBS);
+ Config config = new ConfigBuilder().withMasterUrl("https://localhost:8443/").build();
+ kubernetesClient = new KubernetesClientImpl(mockClient, config);
+ }
+
+ @AfterEach
+ void tearDown() {
+ kubernetesClient.close();
+ kubernetesClient = null;
+ }
+
+ @ParameterizedTest
+ @MethodSource("getInputData")
+ void isSupported_withGivenApiGroup_shouldValidateSupport(String apiGroupName, boolean expectedResult) {
+ try (MockedConstruction ignored = mockConstruction(OperationSupport.class, (mock, ctx) -> {
+ givenApiGroupsCallReturns(mock, new APIGroupBuilder().withName(apiGroupName).build());
+ })) {
+ assertThat(kubernetesClient.adapt(IstioClient.class).isSupported()).isEqualTo(expectedResult);
+ }
+ }
+
+ private static Stream getInputData() {
+ return Stream.of(
+ Arguments.of("istio.io", true),
+ Arguments.of("security.istio.io", true),
+ Arguments.of("tekton.dev", false));
+ }
+
+ private void givenApiGroupsCallReturns(OperationSupport operationSupport, APIGroup apiGroup) {
+ when(operationSupport.restCall(APIGroupList.class, "/apis"))
+ .thenReturn(new APIGroupListBuilder()
+ .addToGroups(apiGroup)
+ .build());
+ }
+}
diff --git a/extensions/istio/client/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker b/extensions/istio/client/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker
new file mode 100644
index 00000000000..1f0955d450f
--- /dev/null
+++ b/extensions/istio/client/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker
@@ -0,0 +1 @@
+mock-maker-inline
diff --git a/extensions/knative/client/pom.xml b/extensions/knative/client/pom.xml
index 394c172fb3f..87e5d1fdf94 100755
--- a/extensions/knative/client/pom.xml
+++ b/extensions/knative/client/pom.xml
@@ -80,7 +80,17 @@
org.junit.jupiter
- junit-jupiter-migrationsupport
+ junit-jupiter-params
+ test
+
+
+ org.mockito
+ mockito-core
+ test
+
+
+ org.assertj
+ assertj-core
test
diff --git a/extensions/knative/client/src/main/java/io/fabric8/knative/client/DefaultKnativeClient.java b/extensions/knative/client/src/main/java/io/fabric8/knative/client/DefaultKnativeClient.java
index 6d971b18fb5..5570179d94b 100644
--- a/extensions/knative/client/src/main/java/io/fabric8/knative/client/DefaultKnativeClient.java
+++ b/extensions/knative/client/src/main/java/io/fabric8/knative/client/DefaultKnativeClient.java
@@ -77,10 +77,9 @@
import io.fabric8.kubernetes.client.dsl.MixedOperation;
import io.fabric8.kubernetes.client.dsl.Resource;
import io.fabric8.kubernetes.client.extension.ExtensionRootClientAdapter;
-import io.fabric8.kubernetes.client.extension.SupportTestingClient;
public class DefaultKnativeClient extends ExtensionRootClientAdapter
- implements NamespacedKnativeClient, SupportTestingClient {
+ implements NamespacedKnativeClient {
public DefaultKnativeClient() {
super();
@@ -241,6 +240,6 @@ public MixedOperation> ka
@Override
public boolean isSupported() {
- return hasApiGroup("knative.dev", true);
+ return hasApiGroup("knative.dev", false);
}
}
diff --git a/extensions/knative/client/src/main/java/io/fabric8/knative/client/KnativeClient.java b/extensions/knative/client/src/main/java/io/fabric8/knative/client/KnativeClient.java
index de3dd88afe8..70d2bd66513 100644
--- a/extensions/knative/client/src/main/java/io/fabric8/knative/client/KnativeClient.java
+++ b/extensions/knative/client/src/main/java/io/fabric8/knative/client/KnativeClient.java
@@ -72,11 +72,12 @@
import io.fabric8.kubernetes.client.Client;
import io.fabric8.kubernetes.client.dsl.MixedOperation;
import io.fabric8.kubernetes.client.dsl.Resource;
+import io.fabric8.kubernetes.client.extension.SupportTestingClient;
/**
* Main interface for Knative Client.
*/
-public interface KnativeClient extends Client {
+public interface KnativeClient extends Client, SupportTestingClient {
// Serving
/**
diff --git a/extensions/knative/client/src/test/java/io/fabric8/knative/client/KnativeClientAdaptTest.java b/extensions/knative/client/src/test/java/io/fabric8/knative/client/KnativeClientAdaptTest.java
new file mode 100644
index 00000000000..85af11902b1
--- /dev/null
+++ b/extensions/knative/client/src/test/java/io/fabric8/knative/client/KnativeClientAdaptTest.java
@@ -0,0 +1,81 @@
+/**
+ * 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.knative.client;
+
+import io.fabric8.kubernetes.api.model.APIGroup;
+import io.fabric8.kubernetes.api.model.APIGroupBuilder;
+import io.fabric8.kubernetes.api.model.APIGroupList;
+import io.fabric8.kubernetes.api.model.APIGroupListBuilder;
+import io.fabric8.kubernetes.client.Config;
+import io.fabric8.kubernetes.client.ConfigBuilder;
+import io.fabric8.kubernetes.client.KubernetesClient;
+import io.fabric8.kubernetes.client.dsl.internal.OperationSupport;
+import io.fabric8.kubernetes.client.http.HttpClient;
+import io.fabric8.kubernetes.client.impl.KubernetesClientImpl;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.MethodSource;
+import org.mockito.MockedConstruction;
+import org.mockito.Mockito;
+
+import java.util.stream.Stream;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.mockito.Mockito.mockConstruction;
+import static org.mockito.Mockito.when;
+
+class KnativeClientAdaptTest {
+ private KubernetesClient kubernetesClient;
+
+ @BeforeEach
+ public void setUp() {
+ HttpClient mockClient = Mockito.mock(HttpClient.class, Mockito.RETURNS_DEEP_STUBS);
+ Config config = new ConfigBuilder().withMasterUrl("https://localhost:8443/").build();
+ kubernetesClient = new KubernetesClientImpl(mockClient, config);
+ }
+
+ @AfterEach
+ void tearDown() {
+ kubernetesClient.close();
+ kubernetesClient = null;
+ }
+
+ @ParameterizedTest
+ @MethodSource("getInputData")
+ void isSupported_withGivenApiGroup_shouldValidateSupport(String apiGroupName, boolean expectedResult) {
+ try (MockedConstruction ignored = mockConstruction(OperationSupport.class, (mock, ctx) -> {
+ givenApiGroupsCallReturns(mock, new APIGroupBuilder().withName(apiGroupName).build());
+ })) {
+ assertThat(kubernetesClient.adapt(KnativeClient.class).isSupported()).isEqualTo(expectedResult);
+ }
+ }
+
+ private static Stream getInputData() {
+ return Stream.of(
+ Arguments.of("knative.dev", true),
+ Arguments.of("serving.knative.dev", true),
+ Arguments.of("tekton.dev", false));
+ }
+
+ private void givenApiGroupsCallReturns(OperationSupport operationSupport, APIGroup apiGroup) {
+ when(operationSupport.restCall(APIGroupList.class, "/apis"))
+ .thenReturn(new APIGroupListBuilder()
+ .addToGroups(apiGroup)
+ .build());
+ }
+}
diff --git a/extensions/knative/client/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker b/extensions/knative/client/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker
new file mode 100644
index 00000000000..1f0955d450f
--- /dev/null
+++ b/extensions/knative/client/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker
@@ -0,0 +1 @@
+mock-maker-inline
diff --git a/extensions/open-cluster-management/client/pom.xml b/extensions/open-cluster-management/client/pom.xml
index 2d097071b3c..db99ec8b824 100644
--- a/extensions/open-cluster-management/client/pom.xml
+++ b/extensions/open-cluster-management/client/pom.xml
@@ -127,7 +127,17 @@
org.junit.jupiter
- junit-jupiter-migrationsupport
+ junit-jupiter-params
+ test
+
+
+ org.mockito
+ mockito-core
+ test
+
+
+ org.assertj
+ assertj-core
test
diff --git a/extensions/open-cluster-management/client/src/main/java/io/fabric8/openclustermanagement/client/DefaultOpenClusterManagementClient.java b/extensions/open-cluster-management/client/src/main/java/io/fabric8/openclustermanagement/client/DefaultOpenClusterManagementClient.java
index 5e2c52e9e3a..129b0e88a51 100644
--- a/extensions/open-cluster-management/client/src/main/java/io/fabric8/openclustermanagement/client/DefaultOpenClusterManagementClient.java
+++ b/extensions/open-cluster-management/client/src/main/java/io/fabric8/openclustermanagement/client/DefaultOpenClusterManagementClient.java
@@ -21,7 +21,6 @@
import io.fabric8.kubernetes.client.WithRequestCallable;
import io.fabric8.kubernetes.client.dsl.FunctionCallable;
import io.fabric8.kubernetes.client.extension.ExtensionRootClientAdapter;
-import io.fabric8.kubernetes.client.extension.SupportTestingClient;
import io.fabric8.openclustermanagement.client.dsl.OpenClusterManagementAgentAPIGroupDSL;
import io.fabric8.openclustermanagement.client.dsl.OpenClusterManagementAppsAPIGroupDSL;
import io.fabric8.openclustermanagement.client.dsl.OpenClusterManagementClustersAPIGroupDSL;
@@ -31,7 +30,7 @@
import io.fabric8.openclustermanagement.client.dsl.OpenClusterManagementSearchAPIGroupDSL;
public class DefaultOpenClusterManagementClient extends ExtensionRootClientAdapter
- implements NamespacedOpenClusterManagementClient, SupportTestingClient {
+ implements NamespacedOpenClusterManagementClient {
public DefaultOpenClusterManagementClient() {
super();
diff --git a/extensions/open-cluster-management/client/src/main/java/io/fabric8/openclustermanagement/client/OpenClusterManagementClient.java b/extensions/open-cluster-management/client/src/main/java/io/fabric8/openclustermanagement/client/OpenClusterManagementClient.java
index b5f6ef5c763..2e4d5f232a7 100644
--- a/extensions/open-cluster-management/client/src/main/java/io/fabric8/openclustermanagement/client/OpenClusterManagementClient.java
+++ b/extensions/open-cluster-management/client/src/main/java/io/fabric8/openclustermanagement/client/OpenClusterManagementClient.java
@@ -16,6 +16,7 @@
package io.fabric8.openclustermanagement.client;
import io.fabric8.kubernetes.client.Client;
+import io.fabric8.kubernetes.client.extension.SupportTestingClient;
import io.fabric8.openclustermanagement.client.dsl.OpenClusterManagementAgentAPIGroupDSL;
import io.fabric8.openclustermanagement.client.dsl.OpenClusterManagementAppsAPIGroupDSL;
import io.fabric8.openclustermanagement.client.dsl.OpenClusterManagementClustersAPIGroupDSL;
@@ -24,7 +25,7 @@
import io.fabric8.openclustermanagement.client.dsl.OpenClusterManagementPolicyAPIGroupDSL;
import io.fabric8.openclustermanagement.client.dsl.OpenClusterManagementSearchAPIGroupDSL;
-public interface OpenClusterManagementClient extends Client {
+public interface OpenClusterManagementClient extends Client, SupportTestingClient {
/**
* API entrypoint for resources in apps.open-cluster-management.io apiGroup
*
diff --git a/extensions/open-cluster-management/client/src/test/java/io/fabric8/openclustermanagement/client/OpenClusterManagementClientAdaptTest.java b/extensions/open-cluster-management/client/src/test/java/io/fabric8/openclustermanagement/client/OpenClusterManagementClientAdaptTest.java
new file mode 100644
index 00000000000..74c4a9a059f
--- /dev/null
+++ b/extensions/open-cluster-management/client/src/test/java/io/fabric8/openclustermanagement/client/OpenClusterManagementClientAdaptTest.java
@@ -0,0 +1,81 @@
+/**
+ * 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.openclustermanagement.client;
+
+import io.fabric8.kubernetes.api.model.APIGroup;
+import io.fabric8.kubernetes.api.model.APIGroupBuilder;
+import io.fabric8.kubernetes.api.model.APIGroupList;
+import io.fabric8.kubernetes.api.model.APIGroupListBuilder;
+import io.fabric8.kubernetes.client.Config;
+import io.fabric8.kubernetes.client.ConfigBuilder;
+import io.fabric8.kubernetes.client.KubernetesClient;
+import io.fabric8.kubernetes.client.dsl.internal.OperationSupport;
+import io.fabric8.kubernetes.client.http.HttpClient;
+import io.fabric8.kubernetes.client.impl.KubernetesClientImpl;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.MethodSource;
+import org.mockito.MockedConstruction;
+import org.mockito.Mockito;
+
+import java.util.stream.Stream;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.mockito.Mockito.mockConstruction;
+import static org.mockito.Mockito.when;
+
+class OpenClusterManagementClientAdaptTest {
+ private KubernetesClient kubernetesClient;
+
+ @BeforeEach
+ public void setUp() {
+ HttpClient mockClient = Mockito.mock(HttpClient.class, Mockito.RETURNS_DEEP_STUBS);
+ Config config = new ConfigBuilder().withMasterUrl("https://localhost:8443/").build();
+ kubernetesClient = new KubernetesClientImpl(mockClient, config);
+ }
+
+ @AfterEach
+ void tearDown() {
+ kubernetesClient.close();
+ kubernetesClient = null;
+ }
+
+ @ParameterizedTest
+ @MethodSource("getInputData")
+ void isSupported_withGivenApiGroup_shouldValidateSupport(String apiGroupName, boolean expectedResult) {
+ try (MockedConstruction ignored = mockConstruction(OperationSupport.class, (mock, ctx) -> {
+ givenApiGroupsCallReturns(mock, new APIGroupBuilder().withName(apiGroupName).build());
+ })) {
+ assertThat(kubernetesClient.adapt(OpenClusterManagementClient.class).isSupported()).isEqualTo(expectedResult);
+ }
+ }
+
+ private static Stream getInputData() {
+ return Stream.of(
+ Arguments.of("open-cluster-management.io", true),
+ Arguments.of("operator.open-cluster-management.io", true),
+ Arguments.of("tekton.dev", false));
+ }
+
+ private void givenApiGroupsCallReturns(OperationSupport operationSupport, APIGroup apiGroup) {
+ when(operationSupport.restCall(APIGroupList.class, "/apis"))
+ .thenReturn(new APIGroupListBuilder()
+ .addToGroups(apiGroup)
+ .build());
+ }
+}
diff --git a/extensions/open-cluster-management/client/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker b/extensions/open-cluster-management/client/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker
new file mode 100644
index 00000000000..1f0955d450f
--- /dev/null
+++ b/extensions/open-cluster-management/client/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker
@@ -0,0 +1 @@
+mock-maker-inline
diff --git a/extensions/service-catalog/client/pom.xml b/extensions/service-catalog/client/pom.xml
index 1973333e9e8..86b6135fb58 100644
--- a/extensions/service-catalog/client/pom.xml
+++ b/extensions/service-catalog/client/pom.xml
@@ -94,7 +94,17 @@
org.junit.jupiter
- junit-jupiter-migrationsupport
+ junit-jupiter-params
+ test
+
+
+ org.mockito
+ mockito-core
+ test
+
+
+ org.assertj
+ assertj-core
test
diff --git a/extensions/service-catalog/client/src/main/java/io/fabric8/servicecatalog/client/DefaultServiceCatalogClient.java b/extensions/service-catalog/client/src/main/java/io/fabric8/servicecatalog/client/DefaultServiceCatalogClient.java
index a8efa61b474..d9315a5431e 100644
--- a/extensions/service-catalog/client/src/main/java/io/fabric8/servicecatalog/client/DefaultServiceCatalogClient.java
+++ b/extensions/service-catalog/client/src/main/java/io/fabric8/servicecatalog/client/DefaultServiceCatalogClient.java
@@ -24,7 +24,6 @@
import io.fabric8.kubernetes.client.dsl.NonNamespaceOperation;
import io.fabric8.kubernetes.client.dsl.Resource;
import io.fabric8.kubernetes.client.extension.ExtensionRootClientAdapter;
-import io.fabric8.kubernetes.client.extension.SupportTestingClient;
import io.fabric8.servicecatalog.api.model.ClusterServiceBroker;
import io.fabric8.servicecatalog.api.model.ClusterServiceBrokerList;
import io.fabric8.servicecatalog.api.model.ClusterServiceClass;
@@ -48,7 +47,7 @@
import io.fabric8.servicecatalog.client.dsl.ServiceInstanceResource;
public class DefaultServiceCatalogClient extends ExtensionRootClientAdapter
- implements NamespacedServiceCatalogClient, SupportTestingClient {
+ implements NamespacedServiceCatalogClient {
public DefaultServiceCatalogClient() {
super();
@@ -114,6 +113,6 @@ public FunctionCallable withRequestConfig(Reques
@Override
public boolean isSupported() {
- return hasApiGroup("servicecatalog.k8s.io", true);
+ return hasApiGroup("servicecatalog.k8s.io", false);
}
}
diff --git a/extensions/service-catalog/client/src/main/java/io/fabric8/servicecatalog/client/ServiceCatalogClient.java b/extensions/service-catalog/client/src/main/java/io/fabric8/servicecatalog/client/ServiceCatalogClient.java
index 937c34d1778..8256a322049 100644
--- a/extensions/service-catalog/client/src/main/java/io/fabric8/servicecatalog/client/ServiceCatalogClient.java
+++ b/extensions/service-catalog/client/src/main/java/io/fabric8/servicecatalog/client/ServiceCatalogClient.java
@@ -19,6 +19,7 @@
import io.fabric8.kubernetes.client.dsl.MixedOperation;
import io.fabric8.kubernetes.client.dsl.NonNamespaceOperation;
import io.fabric8.kubernetes.client.dsl.Resource;
+import io.fabric8.kubernetes.client.extension.SupportTestingClient;
import io.fabric8.servicecatalog.api.model.ClusterServiceBroker;
import io.fabric8.servicecatalog.api.model.ClusterServiceBrokerList;
import io.fabric8.servicecatalog.api.model.ClusterServiceClass;
@@ -44,7 +45,7 @@
/**
* Main interface for Service Catalog Client.
*/
-public interface ServiceCatalogClient extends Client {
+public interface ServiceCatalogClient extends Client, SupportTestingClient {
/**
* API entrypoint for ClusterServiceBroker(servicecatalog.k8s.io/v1beta1)
diff --git a/extensions/service-catalog/client/src/test/java/io/fabric8/servicecatalog/client/ServiceCatalogClientAdaptTest.java b/extensions/service-catalog/client/src/test/java/io/fabric8/servicecatalog/client/ServiceCatalogClientAdaptTest.java
new file mode 100644
index 00000000000..1f3e751b686
--- /dev/null
+++ b/extensions/service-catalog/client/src/test/java/io/fabric8/servicecatalog/client/ServiceCatalogClientAdaptTest.java
@@ -0,0 +1,81 @@
+/**
+ * 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.servicecatalog.client;
+
+import io.fabric8.kubernetes.api.model.APIGroup;
+import io.fabric8.kubernetes.api.model.APIGroupBuilder;
+import io.fabric8.kubernetes.api.model.APIGroupList;
+import io.fabric8.kubernetes.api.model.APIGroupListBuilder;
+import io.fabric8.kubernetes.client.Config;
+import io.fabric8.kubernetes.client.ConfigBuilder;
+import io.fabric8.kubernetes.client.KubernetesClient;
+import io.fabric8.kubernetes.client.dsl.internal.OperationSupport;
+import io.fabric8.kubernetes.client.http.HttpClient;
+import io.fabric8.kubernetes.client.impl.KubernetesClientImpl;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.MethodSource;
+import org.mockito.MockedConstruction;
+import org.mockito.Mockito;
+
+import java.util.stream.Stream;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.mockito.Mockito.mockConstruction;
+import static org.mockito.Mockito.when;
+
+class ServiceCatalogClientAdaptTest {
+ private KubernetesClient kubernetesClient;
+
+ @BeforeEach
+ public void setUp() {
+ HttpClient mockClient = Mockito.mock(HttpClient.class, Mockito.RETURNS_DEEP_STUBS);
+ Config config = new ConfigBuilder().withMasterUrl("https://localhost:8443/").build();
+ kubernetesClient = new KubernetesClientImpl(mockClient, config);
+ }
+
+ @AfterEach
+ void tearDown() {
+ kubernetesClient.close();
+ kubernetesClient = null;
+ }
+
+ @ParameterizedTest
+ @MethodSource("getInputData")
+ void isSupported_withGivenApiGroup_shouldValidateSupport(String apiGroupName, boolean expectedResult) {
+ try (MockedConstruction ignored = mockConstruction(OperationSupport.class, (mock, ctx) -> {
+ givenApiGroupsCallReturns(mock, new APIGroupBuilder().withName(apiGroupName).build());
+ })) {
+ assertThat(kubernetesClient.adapt(ServiceCatalogClient.class).isSupported()).isEqualTo(expectedResult);
+ }
+ }
+
+ private static Stream getInputData() {
+ return Stream.of(
+ Arguments.of("servicecatalog.k8s.io", true),
+ Arguments.of("test.servicecatalog.k8s.io", true),
+ Arguments.of("tekton.dev", false));
+ }
+
+ private void givenApiGroupsCallReturns(OperationSupport operationSupport, APIGroup apiGroup) {
+ when(operationSupport.restCall(APIGroupList.class, "/apis"))
+ .thenReturn(new APIGroupListBuilder()
+ .addToGroups(apiGroup)
+ .build());
+ }
+}
diff --git a/extensions/service-catalog/client/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker b/extensions/service-catalog/client/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker
new file mode 100644
index 00000000000..1f0955d450f
--- /dev/null
+++ b/extensions/service-catalog/client/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker
@@ -0,0 +1 @@
+mock-maker-inline
diff --git a/extensions/tekton/client/pom.xml b/extensions/tekton/client/pom.xml
index 72c2f188c92..bbdd4e75b60 100644
--- a/extensions/tekton/client/pom.xml
+++ b/extensions/tekton/client/pom.xml
@@ -92,7 +92,17 @@
org.junit.jupiter
- junit-jupiter-migrationsupport
+ junit-jupiter-params
+ test
+
+
+ org.mockito
+ mockito-core
+ test
+
+
+ org.assertj
+ assertj-core
test
diff --git a/extensions/tekton/client/src/main/java/io/fabric8/tekton/client/DefaultTektonClient.java b/extensions/tekton/client/src/main/java/io/fabric8/tekton/client/DefaultTektonClient.java
index 4d992425e68..26f8305f415 100644
--- a/extensions/tekton/client/src/main/java/io/fabric8/tekton/client/DefaultTektonClient.java
+++ b/extensions/tekton/client/src/main/java/io/fabric8/tekton/client/DefaultTektonClient.java
@@ -21,12 +21,11 @@
import io.fabric8.kubernetes.client.WithRequestCallable;
import io.fabric8.kubernetes.client.dsl.FunctionCallable;
import io.fabric8.kubernetes.client.extension.ExtensionRootClientAdapter;
-import io.fabric8.kubernetes.client.extension.SupportTestingClient;
import io.fabric8.tekton.client.dsl.V1alpha1APIGroupDSL;
import io.fabric8.tekton.client.dsl.V1beta1APIGroupDSL;
public class DefaultTektonClient extends ExtensionRootClientAdapter
- implements NamespacedTektonClient, SupportTestingClient {
+ implements NamespacedTektonClient {
public DefaultTektonClient() {
super();
@@ -62,7 +61,7 @@ public V1alpha1APIGroupDSL v1alpha1() {
@Override
public boolean isSupported() {
- return hasApiGroup("tekton.dev", true);
+ return hasApiGroup("tekton.dev", false);
}
}
diff --git a/extensions/tekton/client/src/main/java/io/fabric8/tekton/client/TektonClient.java b/extensions/tekton/client/src/main/java/io/fabric8/tekton/client/TektonClient.java
index 5e81e589c11..be2d5b61328 100644
--- a/extensions/tekton/client/src/main/java/io/fabric8/tekton/client/TektonClient.java
+++ b/extensions/tekton/client/src/main/java/io/fabric8/tekton/client/TektonClient.java
@@ -16,13 +16,14 @@
package io.fabric8.tekton.client;
import io.fabric8.kubernetes.client.Client;
+import io.fabric8.kubernetes.client.extension.SupportTestingClient;
import io.fabric8.tekton.client.dsl.V1alpha1APIGroupDSL;
import io.fabric8.tekton.client.dsl.V1beta1APIGroupDSL;
/**
* Main interface for Tekton client library.
*/
-public interface TektonClient extends Client {
+public interface TektonClient extends Client, SupportTestingClient {
/**
* API entrypoint for tekton.dev/v1beta1 API group resources
*
diff --git a/extensions/tekton/client/src/test/java/io/fabric8/tekton/client/TektonClientAdaptTest.java b/extensions/tekton/client/src/test/java/io/fabric8/tekton/client/TektonClientAdaptTest.java
new file mode 100644
index 00000000000..7de4f8311a8
--- /dev/null
+++ b/extensions/tekton/client/src/test/java/io/fabric8/tekton/client/TektonClientAdaptTest.java
@@ -0,0 +1,81 @@
+/**
+ * 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.tekton.client;
+
+import io.fabric8.kubernetes.api.model.APIGroup;
+import io.fabric8.kubernetes.api.model.APIGroupBuilder;
+import io.fabric8.kubernetes.api.model.APIGroupList;
+import io.fabric8.kubernetes.api.model.APIGroupListBuilder;
+import io.fabric8.kubernetes.client.Config;
+import io.fabric8.kubernetes.client.ConfigBuilder;
+import io.fabric8.kubernetes.client.KubernetesClient;
+import io.fabric8.kubernetes.client.dsl.internal.OperationSupport;
+import io.fabric8.kubernetes.client.http.HttpClient;
+import io.fabric8.kubernetes.client.impl.KubernetesClientImpl;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.MethodSource;
+import org.mockito.MockedConstruction;
+import org.mockito.Mockito;
+
+import java.util.stream.Stream;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.mockito.Mockito.mockConstruction;
+import static org.mockito.Mockito.when;
+
+class TektonClientAdaptTest {
+ private KubernetesClient kubernetesClient;
+
+ @BeforeEach
+ public void setUp() {
+ HttpClient mockClient = Mockito.mock(HttpClient.class, Mockito.RETURNS_DEEP_STUBS);
+ Config config = new ConfigBuilder().withMasterUrl("https://localhost:8443/").build();
+ kubernetesClient = new KubernetesClientImpl(mockClient, config);
+ }
+
+ @AfterEach
+ void tearDown() {
+ kubernetesClient.close();
+ kubernetesClient = null;
+ }
+
+ @ParameterizedTest
+ @MethodSource("getInputData")
+ void isSupported_withGivenApiGroup_shouldValidateSupport(String apiGroupName, boolean expectedResult) {
+ try (MockedConstruction ignored = mockConstruction(OperationSupport.class, (mock, ctx) -> {
+ givenApiGroupsCallReturns(mock, new APIGroupBuilder().withName(apiGroupName).build());
+ })) {
+ assertThat(kubernetesClient.adapt(TektonClient.class).isSupported()).isEqualTo(expectedResult);
+ }
+ }
+
+ private static Stream getInputData() {
+ return Stream.of(
+ Arguments.of("tekton.dev", true),
+ Arguments.of("triggers.tekton.dev", true),
+ Arguments.of("knative.dev", false));
+ }
+
+ private void givenApiGroupsCallReturns(OperationSupport operationSupport, APIGroup apiGroup) {
+ when(operationSupport.restCall(APIGroupList.class, "/apis"))
+ .thenReturn(new APIGroupListBuilder()
+ .addToGroups(apiGroup)
+ .build());
+ }
+}
diff --git a/extensions/tekton/client/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker b/extensions/tekton/client/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker
new file mode 100644
index 00000000000..1f0955d450f
--- /dev/null
+++ b/extensions/tekton/client/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker
@@ -0,0 +1 @@
+mock-maker-inline
diff --git a/extensions/verticalpodautoscaler/client/pom.xml b/extensions/verticalpodautoscaler/client/pom.xml
index 659cdd009ca..19e36a35ef8 100644
--- a/extensions/verticalpodautoscaler/client/pom.xml
+++ b/extensions/verticalpodautoscaler/client/pom.xml
@@ -81,7 +81,17 @@
org.junit.jupiter
- junit-jupiter-migrationsupport
+ junit-jupiter-params
+ test
+
+
+ org.mockito
+ mockito-core
+ test
+
+
+ org.assertj
+ assertj-core
test
diff --git a/extensions/verticalpodautoscaler/client/src/main/java/io/fabric8/verticalpodautoscaler/client/DefaultVerticalPodAutoscalerClient.java b/extensions/verticalpodautoscaler/client/src/main/java/io/fabric8/verticalpodautoscaler/client/DefaultVerticalPodAutoscalerClient.java
index b23be40334c..aa8ee877bef 100644
--- a/extensions/verticalpodautoscaler/client/src/main/java/io/fabric8/verticalpodautoscaler/client/DefaultVerticalPodAutoscalerClient.java
+++ b/extensions/verticalpodautoscaler/client/src/main/java/io/fabric8/verticalpodautoscaler/client/DefaultVerticalPodAutoscalerClient.java
@@ -21,11 +21,10 @@
import io.fabric8.kubernetes.client.WithRequestCallable;
import io.fabric8.kubernetes.client.dsl.FunctionCallable;
import io.fabric8.kubernetes.client.extension.ExtensionRootClientAdapter;
-import io.fabric8.kubernetes.client.extension.SupportTestingClient;
import io.fabric8.verticalpodautoscaler.client.dsl.V1APIGroupDSL;
public class DefaultVerticalPodAutoscalerClient extends ExtensionRootClientAdapter
- implements NamespacedVerticalPodAutoscalerClient, SupportTestingClient {
+ implements NamespacedVerticalPodAutoscalerClient {
public DefaultVerticalPodAutoscalerClient() {
super();
@@ -56,7 +55,7 @@ public V1APIGroupDSL v1() {
@Override
public boolean isSupported() {
- return getClient().hasApiGroup(VerticalPodAutoscalerExtensionAdapter.API_GROUP, true);
+ return getClient().hasApiGroup(VerticalPodAutoscalerExtensionAdapter.API_GROUP, false);
}
}
diff --git a/extensions/verticalpodautoscaler/client/src/main/java/io/fabric8/verticalpodautoscaler/client/VerticalPodAutoscalerClient.java b/extensions/verticalpodautoscaler/client/src/main/java/io/fabric8/verticalpodautoscaler/client/VerticalPodAutoscalerClient.java
index f01ff72eb87..ef2c70c3c86 100644
--- a/extensions/verticalpodautoscaler/client/src/main/java/io/fabric8/verticalpodautoscaler/client/VerticalPodAutoscalerClient.java
+++ b/extensions/verticalpodautoscaler/client/src/main/java/io/fabric8/verticalpodautoscaler/client/VerticalPodAutoscalerClient.java
@@ -16,8 +16,9 @@
package io.fabric8.verticalpodautoscaler.client;
import io.fabric8.kubernetes.client.Client;
+import io.fabric8.kubernetes.client.extension.SupportTestingClient;
import io.fabric8.verticalpodautoscaler.client.dsl.V1APIGroupDSL;
-public interface VerticalPodAutoscalerClient extends Client {
+public interface VerticalPodAutoscalerClient extends Client, SupportTestingClient {
V1APIGroupDSL v1();
}
diff --git a/extensions/verticalpodautoscaler/client/src/test/java/io/fabric8/verticalpodautoscaler/client/VerticalPodAutoscalerClientAdaptTest.java b/extensions/verticalpodautoscaler/client/src/test/java/io/fabric8/verticalpodautoscaler/client/VerticalPodAutoscalerClientAdaptTest.java
new file mode 100644
index 00000000000..77f0f45a022
--- /dev/null
+++ b/extensions/verticalpodautoscaler/client/src/test/java/io/fabric8/verticalpodautoscaler/client/VerticalPodAutoscalerClientAdaptTest.java
@@ -0,0 +1,81 @@
+/**
+ * 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.verticalpodautoscaler.client;
+
+import io.fabric8.kubernetes.api.model.APIGroup;
+import io.fabric8.kubernetes.api.model.APIGroupBuilder;
+import io.fabric8.kubernetes.api.model.APIGroupList;
+import io.fabric8.kubernetes.api.model.APIGroupListBuilder;
+import io.fabric8.kubernetes.client.Config;
+import io.fabric8.kubernetes.client.ConfigBuilder;
+import io.fabric8.kubernetes.client.KubernetesClient;
+import io.fabric8.kubernetes.client.dsl.internal.OperationSupport;
+import io.fabric8.kubernetes.client.http.HttpClient;
+import io.fabric8.kubernetes.client.impl.KubernetesClientImpl;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.MethodSource;
+import org.mockito.MockedConstruction;
+import org.mockito.Mockito;
+
+import java.util.stream.Stream;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.mockito.Mockito.mockConstruction;
+import static org.mockito.Mockito.when;
+
+class VerticalPodAutoscalerClientAdaptTest {
+ private KubernetesClient kubernetesClient;
+
+ @BeforeEach
+ public void setUp() {
+ HttpClient mockClient = Mockito.mock(HttpClient.class, Mockito.RETURNS_DEEP_STUBS);
+ Config config = new ConfigBuilder().withMasterUrl("https://localhost:8443/").build();
+ kubernetesClient = new KubernetesClientImpl(mockClient, config);
+ }
+
+ @AfterEach
+ void tearDown() {
+ kubernetesClient.close();
+ kubernetesClient = null;
+ }
+
+ @ParameterizedTest
+ @MethodSource("getInputData")
+ void isSupported_withGivenApiGroup_shouldValidateSupport(String apiGroupName, boolean expectedResult) {
+ try (MockedConstruction ignored = mockConstruction(OperationSupport.class, (mock, ctx) -> {
+ givenApiGroupsCallReturns(mock, new APIGroupBuilder().withName(apiGroupName).build());
+ })) {
+ assertThat(kubernetesClient.adapt(VerticalPodAutoscalerClient.class).isSupported()).isEqualTo(expectedResult);
+ }
+ }
+
+ private static Stream getInputData() {
+ return Stream.of(
+ Arguments.of("autoscaling.k8s.io", true),
+ Arguments.of("test.autoscaling.k8s.io", true),
+ Arguments.of("tekton.dev", false));
+ }
+
+ private void givenApiGroupsCallReturns(OperationSupport operationSupport, APIGroup apiGroup) {
+ when(operationSupport.restCall(APIGroupList.class, "/apis"))
+ .thenReturn(new APIGroupListBuilder()
+ .addToGroups(apiGroup)
+ .build());
+ }
+}
diff --git a/extensions/verticalpodautoscaler/client/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker b/extensions/verticalpodautoscaler/client/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker
new file mode 100644
index 00000000000..1f0955d450f
--- /dev/null
+++ b/extensions/verticalpodautoscaler/client/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker
@@ -0,0 +1 @@
+mock-maker-inline
diff --git a/extensions/volcano/client/pom.xml b/extensions/volcano/client/pom.xml
index 3cfd95f3a2a..5e86cc627ab 100644
--- a/extensions/volcano/client/pom.xml
+++ b/extensions/volcano/client/pom.xml
@@ -79,6 +79,21 @@
junit-jupiter-engine
test
+
+ org.junit.jupiter
+ junit-jupiter-params
+ test
+
+
+ org.mockito
+ mockito-core
+ test
+
+
+ org.assertj
+ assertj-core
+ test
+
org.projectlombok
lombok
diff --git a/extensions/volcano/client/src/main/java/io/fabric8/volcano/client/DefaultVolcanoClient.java b/extensions/volcano/client/src/main/java/io/fabric8/volcano/client/DefaultVolcanoClient.java
index 61ed326ac9e..e333da9c2fa 100644
--- a/extensions/volcano/client/src/main/java/io/fabric8/volcano/client/DefaultVolcanoClient.java
+++ b/extensions/volcano/client/src/main/java/io/fabric8/volcano/client/DefaultVolcanoClient.java
@@ -23,7 +23,6 @@
import io.fabric8.kubernetes.client.dsl.MixedOperation;
import io.fabric8.kubernetes.client.dsl.Resource;
import io.fabric8.kubernetes.client.extension.ExtensionRootClientAdapter;
-import io.fabric8.kubernetes.client.extension.SupportTestingClient;
import io.fabric8.volcano.client.dsl.V1beta1APIGroupDSL;
import io.fabric8.volcano.scheduling.v1beta1.PodGroup;
import io.fabric8.volcano.scheduling.v1beta1.PodGroupList;
@@ -31,7 +30,7 @@
import io.fabric8.volcano.scheduling.v1beta1.QueueList;
public class DefaultVolcanoClient extends ExtensionRootClientAdapter
- implements NamespacedVolcanoClient, SupportTestingClient {
+ implements NamespacedVolcanoClient {
public DefaultVolcanoClient() {
super();
@@ -75,6 +74,6 @@ public V1beta1APIGroupDSL v1beta1() {
@Override
public boolean isSupported() {
- return getClient().hasApiGroup(VolcanoExtensionAdapter.API_GROUP, true);
+ return getClient().hasApiGroup(VolcanoExtensionAdapter.API_GROUP, false);
}
}
diff --git a/extensions/volcano/client/src/main/java/io/fabric8/volcano/client/VolcanoClient.java b/extensions/volcano/client/src/main/java/io/fabric8/volcano/client/VolcanoClient.java
index 841752c102d..071d3f70997 100644
--- a/extensions/volcano/client/src/main/java/io/fabric8/volcano/client/VolcanoClient.java
+++ b/extensions/volcano/client/src/main/java/io/fabric8/volcano/client/VolcanoClient.java
@@ -18,6 +18,7 @@
import io.fabric8.kubernetes.client.Client;
import io.fabric8.kubernetes.client.dsl.MixedOperation;
import io.fabric8.kubernetes.client.dsl.Resource;
+import io.fabric8.kubernetes.client.extension.SupportTestingClient;
import io.fabric8.volcano.client.dsl.V1beta1APIGroupDSL;
import io.fabric8.volcano.scheduling.v1beta1.PodGroup;
import io.fabric8.volcano.scheduling.v1beta1.PodGroupList;
@@ -27,7 +28,7 @@
/**
* Main interface for Volcano client library.
*/
-public interface VolcanoClient extends Client {
+public interface VolcanoClient extends Client, SupportTestingClient {
MixedOperation> podGroups();
MixedOperation> queues();
diff --git a/extensions/volcano/client/src/test/java/io/fabric8/volcano/client/VolcanoClientAdaptTest.java b/extensions/volcano/client/src/test/java/io/fabric8/volcano/client/VolcanoClientAdaptTest.java
new file mode 100644
index 00000000000..add33604af6
--- /dev/null
+++ b/extensions/volcano/client/src/test/java/io/fabric8/volcano/client/VolcanoClientAdaptTest.java
@@ -0,0 +1,81 @@
+/**
+ * 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.volcano.client;
+
+import io.fabric8.kubernetes.api.model.APIGroup;
+import io.fabric8.kubernetes.api.model.APIGroupBuilder;
+import io.fabric8.kubernetes.api.model.APIGroupList;
+import io.fabric8.kubernetes.api.model.APIGroupListBuilder;
+import io.fabric8.kubernetes.client.Config;
+import io.fabric8.kubernetes.client.ConfigBuilder;
+import io.fabric8.kubernetes.client.KubernetesClient;
+import io.fabric8.kubernetes.client.dsl.internal.OperationSupport;
+import io.fabric8.kubernetes.client.http.HttpClient;
+import io.fabric8.kubernetes.client.impl.KubernetesClientImpl;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.MethodSource;
+import org.mockito.MockedConstruction;
+import org.mockito.Mockito;
+
+import java.util.stream.Stream;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.mockito.Mockito.mockConstruction;
+import static org.mockito.Mockito.when;
+
+class VolcanoClientAdaptTest {
+ private KubernetesClient kubernetesClient;
+
+ @BeforeEach
+ public void setUp() {
+ HttpClient mockClient = Mockito.mock(HttpClient.class, Mockito.RETURNS_DEEP_STUBS);
+ Config config = new ConfigBuilder().withMasterUrl("https://localhost:8443/").build();
+ kubernetesClient = new KubernetesClientImpl(mockClient, config);
+ }
+
+ @AfterEach
+ void tearDown() {
+ kubernetesClient.close();
+ kubernetesClient = null;
+ }
+
+ @ParameterizedTest
+ @MethodSource("getInputData")
+ void isSupported_withGivenApiGroup_shouldValidateSupport(String apiGroupName, boolean expectedResult) {
+ try (MockedConstruction ignored = mockConstruction(OperationSupport.class, (mock, ctx) -> {
+ givenApiGroupsCallReturns(mock, new APIGroupBuilder().withName(apiGroupName).build());
+ })) {
+ assertThat(kubernetesClient.adapt(VolcanoClient.class).isSupported()).isEqualTo(expectedResult);
+ }
+ }
+
+ private static Stream getInputData() {
+ return Stream.of(
+ Arguments.of("scheduling.volcano.sh", true),
+ Arguments.of("test.scheduling.volcano.sh", true),
+ Arguments.of("tekton.dev", false));
+ }
+
+ private void givenApiGroupsCallReturns(OperationSupport operationSupport, APIGroup apiGroup) {
+ when(operationSupport.restCall(APIGroupList.class, "/apis"))
+ .thenReturn(new APIGroupListBuilder()
+ .addToGroups(apiGroup)
+ .build());
+ }
+}
diff --git a/extensions/volcano/client/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker b/extensions/volcano/client/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker
new file mode 100644
index 00000000000..1f0955d450f
--- /dev/null
+++ b/extensions/volcano/client/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker
@@ -0,0 +1 @@
+mock-maker-inline
diff --git a/extensions/volumesnapshot/client/pom.xml b/extensions/volumesnapshot/client/pom.xml
index 7baec1138d2..ee817762a8b 100644
--- a/extensions/volumesnapshot/client/pom.xml
+++ b/extensions/volumesnapshot/client/pom.xml
@@ -94,7 +94,17 @@
org.junit.jupiter
- junit-jupiter-migrationsupport
+ junit-jupiter-params
+ test
+
+
+ org.mockito
+ mockito-core
+ test
+
+
+ org.assertj
+ assertj-core
test
diff --git a/extensions/volumesnapshot/client/src/main/java/io/fabric8/volumesnapshot/client/DefaultVolumeSnapshotClient.java b/extensions/volumesnapshot/client/src/main/java/io/fabric8/volumesnapshot/client/DefaultVolumeSnapshotClient.java
index 2f389016b0d..bc9114f85e0 100644
--- a/extensions/volumesnapshot/client/src/main/java/io/fabric8/volumesnapshot/client/DefaultVolumeSnapshotClient.java
+++ b/extensions/volumesnapshot/client/src/main/java/io/fabric8/volumesnapshot/client/DefaultVolumeSnapshotClient.java
@@ -23,7 +23,6 @@
import io.fabric8.kubernetes.client.dsl.MixedOperation;
import io.fabric8.kubernetes.client.dsl.NonNamespaceOperation;
import io.fabric8.kubernetes.client.extension.ExtensionRootClientAdapter;
-import io.fabric8.kubernetes.client.extension.SupportTestingClient;
import io.fabric8.volumesnapshot.api.model.VolumeSnapshot;
import io.fabric8.volumesnapshot.api.model.VolumeSnapshotClass;
import io.fabric8.volumesnapshot.api.model.VolumeSnapshotClassList;
@@ -32,7 +31,7 @@
import io.fabric8.volumesnapshot.api.model.VolumeSnapshotList;
public class DefaultVolumeSnapshotClient extends ExtensionRootClientAdapter
- implements NamespacedVolumeSnapshotClient, SupportTestingClient {
+ implements NamespacedVolumeSnapshotClient {
public DefaultVolumeSnapshotClient() {
super();
@@ -73,6 +72,6 @@ public FunctionCallable withRequestConfig(Reques
@Override
public boolean isSupported() {
- return getClient().hasApiGroup(VolumeSnapshotExtensionAdapter.API_GROUP, true);
+ return getClient().hasApiGroup(VolumeSnapshotExtensionAdapter.API_GROUP, false);
}
}
diff --git a/extensions/volumesnapshot/client/src/main/java/io/fabric8/volumesnapshot/client/VolumeSnapshotClient.java b/extensions/volumesnapshot/client/src/main/java/io/fabric8/volumesnapshot/client/VolumeSnapshotClient.java
index b0047f086af..6d0317ed1a0 100644
--- a/extensions/volumesnapshot/client/src/main/java/io/fabric8/volumesnapshot/client/VolumeSnapshotClient.java
+++ b/extensions/volumesnapshot/client/src/main/java/io/fabric8/volumesnapshot/client/VolumeSnapshotClient.java
@@ -18,6 +18,7 @@
import io.fabric8.kubernetes.client.Client;
import io.fabric8.kubernetes.client.dsl.MixedOperation;
import io.fabric8.kubernetes.client.dsl.NonNamespaceOperation;
+import io.fabric8.kubernetes.client.extension.SupportTestingClient;
import io.fabric8.volumesnapshot.api.model.VolumeSnapshot;
import io.fabric8.volumesnapshot.api.model.VolumeSnapshotClass;
import io.fabric8.volumesnapshot.api.model.VolumeSnapshotClassList;
@@ -28,7 +29,7 @@
/**
* Main interface for VolumeSnapshot Client library.
*/
-public interface VolumeSnapshotClient extends Client {
+public interface VolumeSnapshotClient extends Client, SupportTestingClient {
/**
* API entrypoint for dealing with VolumeSnapshotClass(snapshot.storage.k8s.io/v1)
diff --git a/extensions/volumesnapshot/client/src/test/java/io/fabric8/volumesnapshot/client/VolumeSnapshotClientAdaptTest.java b/extensions/volumesnapshot/client/src/test/java/io/fabric8/volumesnapshot/client/VolumeSnapshotClientAdaptTest.java
new file mode 100644
index 00000000000..ad9b1d8056f
--- /dev/null
+++ b/extensions/volumesnapshot/client/src/test/java/io/fabric8/volumesnapshot/client/VolumeSnapshotClientAdaptTest.java
@@ -0,0 +1,81 @@
+/**
+ * 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.volumesnapshot.client;
+
+import io.fabric8.kubernetes.api.model.APIGroup;
+import io.fabric8.kubernetes.api.model.APIGroupBuilder;
+import io.fabric8.kubernetes.api.model.APIGroupList;
+import io.fabric8.kubernetes.api.model.APIGroupListBuilder;
+import io.fabric8.kubernetes.client.Config;
+import io.fabric8.kubernetes.client.ConfigBuilder;
+import io.fabric8.kubernetes.client.KubernetesClient;
+import io.fabric8.kubernetes.client.dsl.internal.OperationSupport;
+import io.fabric8.kubernetes.client.http.HttpClient;
+import io.fabric8.kubernetes.client.impl.KubernetesClientImpl;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.MethodSource;
+import org.mockito.MockedConstruction;
+import org.mockito.Mockito;
+
+import java.util.stream.Stream;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.mockito.Mockito.mockConstruction;
+import static org.mockito.Mockito.when;
+
+class VolumeSnapshotClientAdaptTest {
+ private KubernetesClient kubernetesClient;
+
+ @BeforeEach
+ public void setUp() {
+ HttpClient mockClient = Mockito.mock(HttpClient.class, Mockito.RETURNS_DEEP_STUBS);
+ Config config = new ConfigBuilder().withMasterUrl("https://localhost:8443/").build();
+ kubernetesClient = new KubernetesClientImpl(mockClient, config);
+ }
+
+ @AfterEach
+ void tearDown() {
+ kubernetesClient.close();
+ kubernetesClient = null;
+ }
+
+ @ParameterizedTest
+ @MethodSource("getInputData")
+ void isSupported_withGivenApiGroup_shouldValidateSupport(String apiGroupName, boolean expectedResult) {
+ try (MockedConstruction ignored = mockConstruction(OperationSupport.class, (mock, ctx) -> {
+ givenApiGroupsCallReturns(mock, new APIGroupBuilder().withName(apiGroupName).build());
+ })) {
+ assertThat(kubernetesClient.adapt(VolumeSnapshotClient.class).isSupported()).isEqualTo(expectedResult);
+ }
+ }
+
+ private static Stream getInputData() {
+ return Stream.of(
+ Arguments.of("snapshot.storage.k8s.io", true),
+ Arguments.of("serving.snapshot.storage.k8s.io", true),
+ Arguments.of("tekton.dev", false));
+ }
+
+ private void givenApiGroupsCallReturns(OperationSupport operationSupport, APIGroup apiGroup) {
+ when(operationSupport.restCall(APIGroupList.class, "/apis"))
+ .thenReturn(new APIGroupListBuilder()
+ .addToGroups(apiGroup)
+ .build());
+ }
+}
diff --git a/extensions/volumesnapshot/client/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker b/extensions/volumesnapshot/client/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker
new file mode 100644
index 00000000000..1f0955d450f
--- /dev/null
+++ b/extensions/volumesnapshot/client/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker
@@ -0,0 +1 @@
+mock-maker-inline