Skip to content

Commit b4e89ea

Browse files
committed
quarkus wip
1 parent 00ed762 commit b4e89ea

File tree

12 files changed

+194
-7
lines changed

12 files changed

+194
-7
lines changed

samples/quarkus/pom.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,11 @@
5959
<groupId>org.jboss.resteasy</groupId>
6060
<artifactId>resteasy-jackson2-provider</artifactId>
6161
</dependency>
62+
<dependency>
63+
<groupId>io.javaoperatorsdk.admissioncontroller.sample</groupId>
64+
<artifactId>sample-commons</artifactId>
65+
<version>${project.version}</version>
66+
</dependency>
6267
</dependencies>
6368
<build>
6469
<plugins>
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package io.javaoperatorsdk.webhook.admission.sample.quarkus;
1+
package io.javaoperatorsdk.webhook.admission.sample.quarkus.admission;
22

33
import java.util.HashMap;
44
import java.util.concurrent.CompletableFuture;

samples/quarkus/src/main/java/io/javaoperatorsdk/webhook/admission/sample/quarkus/AdmissionEndpoint.java renamed to samples/quarkus/src/main/java/io/javaoperatorsdk/webhook/admission/sample/quarkus/admission/AdmissionEndpoint.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package io.javaoperatorsdk.webhook.admission.sample.quarkus;
1+
package io.javaoperatorsdk.webhook.admission.sample.quarkus.admission;
22

33
import javax.inject.Inject;
44
import javax.inject.Named;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package io.javaoperatorsdk.webhook.admission.sample.quarkus.conversion;
2+
3+
import javax.enterprise.context.Dependent;
4+
import javax.inject.Singleton;
5+
6+
import io.javaoperatorsdk.webhook.conversion.AsyncConversionController;
7+
import io.javaoperatorsdk.webhook.conversion.ConversionController;
8+
import io.javaoperatorsdk.webhook.sample.commons.mapper.AsyncV1Mapper;
9+
import io.javaoperatorsdk.webhook.sample.commons.mapper.AsyncV2Mapper;
10+
import io.javaoperatorsdk.webhook.sample.commons.mapper.V1Mapper;
11+
import io.javaoperatorsdk.webhook.sample.commons.mapper.V2Mapper;
12+
13+
@Dependent
14+
public class ConversionControllerConfig {
15+
16+
17+
@Singleton
18+
public ConversionController conversionController() {
19+
var controller = new ConversionController();
20+
controller.registerMapper(new V1Mapper());
21+
controller.registerMapper(new V2Mapper());
22+
return controller;
23+
}
24+
25+
@Singleton
26+
public AsyncConversionController asyncConversionController() {
27+
var controller = new AsyncConversionController();
28+
controller.registerMapper(new AsyncV1Mapper());
29+
controller.registerMapper(new AsyncV2Mapper());
30+
return controller;
31+
}
32+
33+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package io.javaoperatorsdk.webhook.admission.sample.quarkus.conversion;
2+
3+
import javax.ws.rs.Consumes;
4+
import javax.ws.rs.POST;
5+
import javax.ws.rs.Path;
6+
import javax.ws.rs.Produces;
7+
import javax.ws.rs.core.MediaType;
8+
9+
import io.fabric8.kubernetes.api.model.apiextensions.v1.ConversionReview;
10+
import io.javaoperatorsdk.webhook.conversion.AsyncConversionController;
11+
import io.javaoperatorsdk.webhook.conversion.ConversionController;
12+
import io.smallrye.mutiny.Uni;
13+
14+
@Path("/")
15+
public class ConversionEndpoint {
16+
17+
public static final String CONVERSION_PATH = "convert";
18+
public static final String ASYNC_CONVERSION_PATH = "async-convert";
19+
20+
private final ConversionController conversionController;
21+
private final AsyncConversionController asyncConversionController;
22+
23+
public ConversionEndpoint(ConversionController conversionController,
24+
AsyncConversionController asyncConversionController) {
25+
this.conversionController = conversionController;
26+
this.asyncConversionController = asyncConversionController;
27+
}
28+
29+
30+
@POST
31+
@Path(CONVERSION_PATH)
32+
@Consumes(MediaType.APPLICATION_JSON)
33+
@Produces(MediaType.APPLICATION_JSON)
34+
public ConversionReview convert(ConversionReview conversionReview) {
35+
return conversionController.handle(conversionReview);
36+
}
37+
38+
@POST
39+
@Path(ASYNC_CONVERSION_PATH)
40+
@Consumes(MediaType.APPLICATION_JSON)
41+
@Produces(MediaType.APPLICATION_JSON)
42+
public Uni<ConversionReview> convertAsync(ConversionReview conversionReview) {
43+
return Uni.createFrom()
44+
.completionStage(() -> asyncConversionController.handle(conversionReview));
45+
}
46+
47+
}

samples/quarkus/src/test/java/io/javaoperatorsdk/webhook/admission/sample/quarkus/AdmissionEndpointTest.java renamed to samples/quarkus/src/test/java/io/javaoperatorsdk/webhook/admission/sample/quarkus/admission/AdmissionEndpointTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package io.javaoperatorsdk.webhook.admission.sample.quarkus;
1+
package io.javaoperatorsdk.webhook.admission.sample.quarkus.admission;
22

33
import java.io.IOException;
44
import java.io.InputStream;
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package io.javaoperatorsdk.webhook.admission.sample.quarkus;
1+
package io.javaoperatorsdk.webhook.admission.sample.quarkus.admission;
22

33
import io.quarkus.test.junit.NativeImageTest;
44

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package io.javaoperatorsdk.webhook.admission.sample.quarkus.conversion;
2+
3+
import java.io.IOException;
4+
import java.io.InputStream;
5+
import java.nio.charset.StandardCharsets;
6+
7+
import org.junit.jupiter.api.Test;
8+
9+
import io.quarkus.test.junit.QuarkusTest;
10+
import io.restassured.http.ContentType;
11+
12+
import static io.javaoperatorsdk.webhook.admission.sample.quarkus.conversion.ConversionEndpoint.ASYNC_CONVERSION_PATH;
13+
import static io.javaoperatorsdk.webhook.admission.sample.quarkus.conversion.ConversionEndpoint.CONVERSION_PATH;
14+
import static io.restassured.RestAssured.given;
15+
import static org.hamcrest.CoreMatchers.is;
16+
17+
@QuarkusTest
18+
public class ConversionEndpointTest {
19+
20+
@Test
21+
void conversion() {
22+
testConversion(CONVERSION_PATH);
23+
}
24+
25+
@Test
26+
void asyncConversion() {
27+
testConversion(ASYNC_CONVERSION_PATH);
28+
}
29+
30+
public void testConversion(String path) {
31+
given().contentType(ContentType.JSON)
32+
.body(jsonRequest())
33+
.when().post("/" + path)
34+
.then()
35+
.statusCode(200)
36+
.body(is("s"));
37+
}
38+
39+
private String jsonRequest() {
40+
try (InputStream is = this.getClass().getResourceAsStream("/conversion-request.json")) {
41+
return new String(is.readAllBytes(), StandardCharsets.UTF_8);
42+
} catch (IOException e) {
43+
throw new IllegalStateException(e);
44+
}
45+
}
46+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package io.javaoperatorsdk.webhook.admission.sample.quarkus.conversion;
2+
3+
import io.quarkus.test.junit.NativeImageTest;
4+
5+
@NativeImageTest
6+
public class NativeConversionEndpointTest extends ConversionEndpointTest {
7+
}
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
{
2+
"apiVersion": "apiextensions.k8s.io/v1",
3+
"kind": "ConversionReview",
4+
"request": {
5+
6+
"uid": "705ab4f5-6393-11e8-b7cc-42010a800002",
7+
8+
"desiredAPIVersion": "sample.javaoperatorsdk/v2",
9+
10+
"objects": [
11+
{
12+
"kind": "MultiVersionCustomResource",
13+
"apiVersion": "sample.javaoperatorsdk/v1",
14+
"metadata": {
15+
"creationTimestamp": "2021-09-04T14:03:02Z",
16+
"name": "resource1",
17+
"namespace": "default",
18+
"resourceVersion": "143",
19+
"uid": "3415a7fc-162b-4300-b5da-fd6083580d66"
20+
},
21+
"spec": {
22+
"value": 1
23+
},
24+
"status":{
25+
"ready": true
26+
}
27+
},
28+
{
29+
"kind": "MultiVersionCustomResource",
30+
"apiVersion": "sample.javaoperatorsdk/v1",
31+
"metadata": {
32+
"creationTimestamp": "2021-09-04T14:03:02Z",
33+
"name": "resource2",
34+
"namespace": "default",
35+
"resourceVersion": "14344",
36+
"uid": "1115a7fc-162b-4300-b5da-fd6083580d55"
37+
},
38+
"spec": {
39+
"value": 2
40+
},
41+
"status":{
42+
"ready": false
43+
}
44+
}
45+
]
46+
}
47+
}

samples/spring-boot/pom.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@
7878
<dependency>
7979
<groupId>org.assertj</groupId>
8080
<artifactId>assertj-core</artifactId>
81+
<scope>test</scope>
8182
</dependency>
8283
</dependencies>
8384

samples/spring-boot/src/test/java/io/javaoperatorsdk/webhook/sample/springboot/conversion/ConversionEndpointTest.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -49,10 +49,11 @@ public void testConversion(String path) {
4949
.exchange()
5050
.expectStatus().isOk().expectBody(ConversionReview.class).consumeWith(res -> {
5151
var review = res.getResponseBody();
52+
var resource1 =
53+
((TestCustomResourceV2) review.getResponse().getConvertedObjects().get(0));
5254
assertThat(review.getResponse().getConvertedObjects()).hasSize(2);
53-
assertThat(((TestCustomResourceV2) review.getResponse().getConvertedObjects().get(0))
54-
.getSpec().getAdditionalValue())
55-
.isEqualTo(DEFAULT_ADDITIONAL_VALUE);
55+
assertThat(resource1).isEqualTo(DEFAULT_ADDITIONAL_VALUE);
56+
assertThat(resource1.getMetadata().getName()).isEqualTo("resource1");
5657
});
5758
}
5859

0 commit comments

Comments
 (0)