diff --git a/CHANGELOG.md b/CHANGELOG.md
index 1f26b86096d..c3885deb9b9 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -5,6 +5,7 @@
#### Bugs
* Fix #4590: only using a builder if there are visitors
* Fix #4159: ensure the token refresh obeys how the Config was created
+* Fix #4447: `isSupported` doesn't check all of the applicable API Groups
* Fix #4491: added a more explicit shutdown exception for okhttp
* Fix #4510: Fix StackOverflow on cyclic references involving collections.
* Fix #4534: Java Generator CLI default handling of skipGeneratedAnnotations
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/DefaultCamelKClient.java b/extensions/camel-k/client/src/main/java/io/fabric8/camelk/client/DefaultCamelKClient.java
index 313c2998ff3..b68ae19564f 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
@@ -62,7 +62,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..99155c40012
--- /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.isAdaptable(CamelKClient.class)).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/DefaultCertManagerClient.java b/extensions/certmanager/client/src/main/java/io/fabric8/certmanager/client/DefaultCertManagerClient.java
index d173321f123..dd146246d70 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
@@ -25,9 +25,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;
public class DefaultCertManagerClient extends ExtensionRootClientAdapter
- implements NamespacedCertManagerClient {
+ implements NamespacedCertManagerClient, SupportTestingClient {
public DefaultCertManagerClient() {
super();
@@ -71,4 +72,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..1e04d16d278
--- /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.isAdaptable(CertManagerClient.class)).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/DefaultChaosMeshClient.java b/extensions/chaosmesh/client/src/main/java/io/fabric8/chaosmesh/client/DefaultChaosMeshClient.java
index 2093bc65b29..4bc531aab3e 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
@@ -136,6 +136,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..6d8efa95324
--- /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.isAdaptable(ChaosMeshClient.class)).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..258fa30136d 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
@@ -60,6 +60,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/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..71eea5cc66c
--- /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.isAdaptable(IstioClient.class)).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..812e20d7d00 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
@@ -241,6 +241,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/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..ddb3bf80357
--- /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.isAdaptable(KnativeClient.class)).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/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..4f1339f9b4a
--- /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.isAdaptable(OpenClusterManagementClient.class)).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..b3a34c0349c 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
@@ -114,6 +114,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/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..8ecb6906aac
--- /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.isAdaptable(ServiceCatalogClient.class)).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..b23f603891f 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
@@ -62,7 +62,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/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..515d6dce865
--- /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.isAdaptable(TektonClient.class)).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..18d56bc872d 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
@@ -56,7 +56,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/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..0f1215d79da
--- /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.isAdaptable(VerticalPodAutoscalerClient.class)).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..75a747da492 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
@@ -75,6 +75,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/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..17c153d0907
--- /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.isAdaptable(VolcanoClient.class)).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..70ea242ea22 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
@@ -73,6 +73,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/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..3ab73a35877
--- /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.isAdaptable(VolumeSnapshotClient.class)).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