Skip to content

Commit 6b696ec

Browse files
authored
Merge pull request #347 from java-operator-sdk/fix-346
fix: do not run extension on abstract controllers
2 parents b3d76cb + 4ee525a commit 6b696ec

File tree

8 files changed

+56
-54
lines changed

8 files changed

+56
-54
lines changed

operator-framework-quarkus-extension/deployment/src/main/java/io/javaoperatorsdk/quarkus/extension/deployment/QuarkusExtensionProcessor.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import io.quarkus.deployment.builditem.IndexDependencyBuildItem;
2727
import io.quarkus.deployment.builditem.nativeimage.ReflectiveClassBuildItem;
2828
import io.quarkus.deployment.util.JandexUtil;
29+
import java.lang.reflect.Modifier;
2930
import java.util.List;
3031
import java.util.Optional;
3132
import java.util.function.Function;
@@ -75,6 +76,7 @@ void createConfigurationServiceAndOperator(
7576

7677
final List<ControllerConfiguration> controllerConfigs =
7778
resourceControllers.stream()
79+
.filter(ci -> !Modifier.isAbstract(ci.flags()))
7880
.map(ci -> createControllerConfiguration(ci, additionalBeans, reflectionClasses, index))
7981
.collect(Collectors.toList());
8082

@@ -124,7 +126,7 @@ private ControllerConfiguration createControllerConfiguration(
124126
try {
125127
cr = crClass.getConstructor().newInstance();
126128
} catch (Exception e) {
127-
throw new IllegalArgumentException(e.getCause());
129+
throw new IllegalArgumentException("Cannot instantiate '" + crType + "' CR class", e);
128130
}
129131

130132
// retrieve CRD name from CR type

operator-framework-quarkus-extension/tests/pom.xml

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,11 @@
3333
<artifactId>quarkus-junit5-internal</artifactId>
3434
<scope>test</scope>
3535
</dependency>
36+
<dependency>
37+
<groupId>io.quarkus</groupId>
38+
<artifactId>quarkus-test-kubernetes-client</artifactId>
39+
<scope>test</scope>
40+
</dependency>
3641
<dependency>
3742
<groupId>io.quarkus</groupId>
3843
<artifactId>quarkus-junit5</artifactId>
@@ -74,6 +79,18 @@
7479
</systemPropertyVariables>
7580
</configuration>
7681
</plugin>
82+
<plugin>
83+
<groupId>io.quarkus</groupId>
84+
<artifactId>quarkus-maven-plugin</artifactId>
85+
<version>${quarkus.version}</version>
86+
<executions>
87+
<execution>
88+
<goals>
89+
<goal>build</goal>
90+
</goals>
91+
</execution>
92+
</executions>
93+
</plugin>
7794
</plugins>
7895
</build>
7996

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package io.javaoperatorsdk.quarkus.it;
2+
3+
import io.javaoperatorsdk.operator.api.Context;
4+
import io.javaoperatorsdk.operator.api.DeleteControl;
5+
import io.javaoperatorsdk.operator.api.ResourceController;
6+
import io.javaoperatorsdk.operator.api.UpdateControl;
7+
8+
public abstract class AbstractController<T extends TestResource> implements ResourceController<T> {
9+
10+
@Override
11+
public DeleteControl deleteResource(T resource, Context<T> context) {
12+
return null;
13+
}
14+
15+
@Override
16+
public UpdateControl<T> createOrUpdateResource(T resource, Context<T> context) {
17+
return null;
18+
}
19+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package io.javaoperatorsdk.quarkus.it;
2+
3+
import io.fabric8.kubernetes.model.annotation.Group;
4+
import io.fabric8.kubernetes.model.annotation.Version;
5+
6+
@Group("example.com")
7+
@Version("v1")
8+
public class ChildTestResource extends TestResource {}
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,9 @@
11
package io.javaoperatorsdk.quarkus.it;
22

3-
import io.javaoperatorsdk.operator.api.Context;
43
import io.javaoperatorsdk.operator.api.Controller;
5-
import io.javaoperatorsdk.operator.api.DeleteControl;
6-
import io.javaoperatorsdk.operator.api.ResourceController;
7-
import io.javaoperatorsdk.operator.api.UpdateControl;
84

95
@Controller(name = ConfiguredController.NAME, namespaces = "foo")
10-
public class ConfiguredController implements ResourceController<TestResource> {
6+
public class ConfiguredController extends AbstractController<ChildTestResource> {
117

128
public static final String NAME = "annotation";
13-
14-
@Override
15-
public DeleteControl deleteResource(TestResource resource, Context<TestResource> context) {
16-
return null;
17-
}
18-
19-
@Override
20-
public UpdateControl<TestResource> createOrUpdateResource(
21-
TestResource resource, Context<TestResource> context) {
22-
return null;
23-
}
249
}
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,8 @@
11
package io.javaoperatorsdk.quarkus.it;
22

3-
import io.javaoperatorsdk.operator.api.Context;
43
import io.javaoperatorsdk.operator.api.Controller;
5-
import io.javaoperatorsdk.operator.api.DeleteControl;
6-
import io.javaoperatorsdk.operator.api.ResourceController;
7-
import io.javaoperatorsdk.operator.api.UpdateControl;
84

95
@Controller(name = TestController.NAME)
10-
public class TestController implements ResourceController<TestResource> {
6+
public class TestController extends AbstractController<ChildTestResource> {
117
public static final String NAME = "test";
12-
13-
@Override
14-
public DeleteControl deleteResource(TestResource resource, Context<TestResource> context) {
15-
return null;
16-
}
17-
18-
@Override
19-
public UpdateControl<TestResource> createOrUpdateResource(
20-
TestResource resource, Context<TestResource> context) {
21-
return null;
22-
}
238
}

operator-framework-quarkus-extension/tests/src/main/java/io/javaoperatorsdk/quarkus/it/TestResource.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,4 @@
66

77
@Group("example.com")
88
@Version("v1")
9-
public class TestResource extends CustomResource {}
9+
public abstract class TestResource extends CustomResource<String, Void> {}

operator-framework-quarkus-extension/tests/src/test/java/io/javaoperatorsdk/quarkus/it/QuarkusExtensionProcessorTest.java

Lines changed: 6 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -5,33 +5,19 @@
55
import static org.hamcrest.Matchers.hasItem;
66
import static org.hamcrest.Matchers.is;
77

8-
import io.quarkus.test.QuarkusProdModeTest;
9-
import org.jboss.shrinkwrap.api.ShrinkWrap;
10-
import org.jboss.shrinkwrap.api.spec.JavaArchive;
8+
import io.quarkus.test.common.QuarkusTestResource;
9+
import io.quarkus.test.junit.QuarkusTest;
10+
import io.quarkus.test.kubernetes.client.KubernetesMockServerTestResource;
1111
import org.junit.jupiter.api.Test;
12-
import org.junit.jupiter.api.extension.RegisterExtension;
1312

1413
/**
1514
* This tests creates and starts an application accessed over REST to assess that injected values
1615
* are present and what we expect.
1716
*/
17+
@QuarkusTest
18+
@QuarkusTestResource(KubernetesMockServerTestResource.class)
1819
public class QuarkusExtensionProcessorTest {
1920

20-
@RegisterExtension
21-
static final QuarkusProdModeTest config =
22-
new QuarkusProdModeTest()
23-
.setArchiveProducer(
24-
() ->
25-
ShrinkWrap.create(JavaArchive.class)
26-
.addClasses(
27-
TestOperatorApp.class,
28-
TestController.class,
29-
ConfiguredController.class,
30-
TestResource.class))
31-
.setApplicationName("basic-app")
32-
.setApplicationVersion("0.1-SNAPSHOT")
33-
.setRun(true);
34-
3521
@Test
3622
void controllerShouldExist() {
3723
// first check that we're not always returning true for any controller name :)
@@ -46,7 +32,7 @@ void controllerShouldExist() {
4632
void configurationForControllerShouldExist() {
4733
// check that the config for the test controller can be retrieved and is conform to our
4834
// expectations
49-
final var resourceName = TestResource.class.getCanonicalName();
35+
final var resourceName = ChildTestResource.class.getCanonicalName();
5036
given()
5137
.when()
5238
.get("/operator/" + TestController.NAME + "/config")

0 commit comments

Comments
 (0)