1010import java .io .InputStream ;
1111import java .nio .file .Files ;
1212import java .nio .file .Path ;
13+ import java .util .Objects ;
1314import java .util .stream .Stream ;
1415
1516import org .assertj .core .api .Assertions ;
3233import io .fabric8 .kubernetes .client .KubernetesClientException ;
3334import io .fabric8 .kubernetes .client .dsl .NamespaceableResource ;
3435import io .fabric8 .kubernetes .client .dsl .NonDeletingOperation ;
36+ import io .fabric8 .openshift .api .model .Route ;
3537import io .javaoperatorsdk .operator .junit .LocallyRunOperatorExtension ;
3638
3739import io .kroxylicious .kubernetes .api .v1alpha1 .KafkaProtocolFilter ;
4143import io .kroxylicious .kubernetes .api .v1alpha1 .VirtualKafkaCluster ;
4244
4345import static org .assertj .core .api .Assertions .assertThat ;
46+ import static org .assertj .core .api .Assumptions .assumeThat ;
4447
4548@ EnabledIf (value = "io.kroxylicious.kubernetes.operator.OperatorTestUtils#isKubeClientAvailable" , disabledReason = "no viable kube client available" )
4649class CustomResourceValidationIT {
4750
4851 public static final Namespace NAMESPACE = new NamespaceBuilder ().withNewMetadata ().withName ("proxy-ns" ).endMetadata ().build ();
4952 public static final ObjectMapper YAML_MAPPER = new ObjectMapper (new YAMLFactory ());
53+ private static boolean isOpenShiftRouteApiAvailable ;
5054
5155 @ BeforeAll
5256 static void beforeAll () {
@@ -57,6 +61,8 @@ static void beforeAll() {
5761 LocallyRunOperatorExtension .applyCrd (KafkaService .class , client );
5862 LocallyRunOperatorExtension .applyCrd (KafkaProxyIngress .class , client );
5963 client .namespaces ().resource (NAMESPACE ).createOr (NonDeletingOperation ::update );
64+
65+ isOpenShiftRouteApiAvailable = client .supports (Route .class );
6066 }
6167
6268 @ AfterAll
@@ -116,6 +122,7 @@ void testResourceValid(Path validYaml) {
116122 private static void testValid (Path validYaml ) {
117123 try (InputStream is = Files .newInputStream (validYaml )) {
118124 NamespaceableResource <HasMetadata > resource = OperatorTestUtils .kubeClient ().resource (is );
125+ assumeThatOpenShiftRouteApiAvailable (resource );
119126 Assertions .assertThatCode (resource ::create ).doesNotThrowAnyException ();
120127 Assertions .assertThatCode (resource ::delete ).doesNotThrowAnyException ();
121128 }
@@ -139,6 +146,7 @@ String resourceAsString() {
139146 @ ParameterizedTest
140147 void testResourceInvalid (InvalidResource invalidYaml ) {
141148 NamespaceableResource <HasMetadata > resource = OperatorTestUtils .kubeClient ().resource (invalidYaml .resourceAsString ());
149+ assumeThatOpenShiftRouteApiAvailable (resource );
142150 try {
143151 Assertions .assertThatThrownBy (resource ::create ).isInstanceOfSatisfying (KubernetesClientException .class , e -> {
144152 Status status = e .getStatus ();
@@ -166,6 +174,7 @@ public static Stream<Path> testResourceValidStatus() {
166174 void testResourceValidStatus (Path validYaml ) {
167175 try (InputStream is = Files .newInputStream (validYaml )) {
168176 NamespaceableResource <HasMetadata > resource = OperatorTestUtils .kubeClient ().resource (is );
177+ assumeThatOpenShiftRouteApiAvailable (resource );
169178 Assertions .assertThatCode (resource ::create ).doesNotThrowAnyException ();
170179 Assertions .assertThatCode (resource ::patchStatus ).doesNotThrowAnyException ();
171180 Assertions .assertThatCode (resource ::delete ).doesNotThrowAnyException ();
@@ -179,6 +188,7 @@ void testResourceValidStatus(Path validYaml) {
179188 @ ParameterizedTest
180189 void testResourceInvalidStatus (InvalidResource invalidYaml ) {
181190 NamespaceableResource <HasMetadata > resource = OperatorTestUtils .kubeClient ().resource (invalidYaml .resourceAsString ());
191+ assumeThatOpenShiftRouteApiAvailable (resource );
182192 try {
183193 Assertions .assertThatCode (resource ::create ).doesNotThrowAnyException ();
184194 Assertions .assertThatThrownBy (resource ::patchStatus ).isInstanceOfSatisfying (KubernetesClientException .class , e -> {
@@ -198,4 +208,10 @@ void testResourceInvalidStatus(InvalidResource invalidYaml) {
198208 }
199209 }
200210
211+ static void assumeThatOpenShiftRouteApiAvailable (NamespaceableResource <HasMetadata > resource ) {
212+ if (Objects .equals (resource .item ().getKind (), "Route" )) {
213+ assumeThat (isOpenShiftRouteApiAvailable ).withFailMessage ("kubernetes server is missing support for resource kind Route" ).isTrue ();
214+ }
215+ }
216+
201217}
0 commit comments