Skip to content

Commit b33000f

Browse files
committed
Add crdPaths as property in annotation
Inject crdPaths using spring boot ConfigurationProperties Add unit test for MockOperator
1 parent 2042d20 commit b33000f

File tree

6 files changed

+109
-9
lines changed

6 files changed

+109
-9
lines changed

operator-framework-spring-boot-starter-test/pom.xml

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,5 +52,19 @@
5252
<artifactId>kubernetes-server-mock</artifactId>
5353
<version>4.12.0</version>
5454
</dependency>
55+
<dependency>
56+
<groupId>io.javaoperatorsdk</groupId>
57+
<artifactId>operator-framework-spring-boot-starter</artifactId>
58+
<version>${project.version}</version>
59+
</dependency>
60+
<dependency>
61+
<groupId>org.springframework.boot</groupId>
62+
<artifactId>spring-boot-test-autoconfigure</artifactId>
63+
</dependency>
64+
<dependency>
65+
<groupId>org.springframework.boot</groupId>
66+
<artifactId>spring-boot-starter-test</artifactId>
67+
<scope>test</scope>
68+
</dependency>
5569
</dependencies>
5670
</project>

operator-framework-spring-boot-starter-test/src/main/java/io/javaoperatorsdk/operator/springboot/starter/test/EnableMockOperator.java

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,20 @@
22

33
import java.lang.annotation.Retention;
44
import java.lang.annotation.RetentionPolicy;
5+
import org.springframework.boot.test.autoconfigure.properties.PropertyMapping;
56
import org.springframework.context.annotation.Import;
67

78
@Retention(RetentionPolicy.RUNTIME)
89
@Import(TestConfiguration.class)
9-
public @interface EnableMockOperator {}
10+
@PropertyMapping("io.javaoperatorsdk.test")
11+
public @interface EnableMockOperator {
12+
13+
/**
14+
* Define a list of files that contain CustomResourceDefinitions for the tested operator.
15+
* If the file to be loaded is shall be loaded from the classpath prefix it with 'classpath', otherwise provide a path relative to the work directory.
16+
* @return List of files
17+
*/
18+
@PropertyMapping("crd-paths")
19+
String[] crdPaths() default {};
20+
21+
}

operator-framework-spring-boot-starter-test/src/main/java/io/javaoperatorsdk/operator/springboot/starter/test/TestConfiguration.java

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,27 +6,27 @@
66
import io.fabric8.kubernetes.client.server.mock.KubernetesMockServer;
77
import io.fabric8.kubernetes.client.utils.Serialization;
88
import io.fabric8.mockwebserver.Context;
9+
import io.javaoperatorsdk.operator.springboot.starter.OperatorAutoConfiguration;
910
import java.io.FileInputStream;
1011
import java.io.FileNotFoundException;
1112
import java.util.Collections;
1213
import java.util.HashMap;
13-
import java.util.List;
1414
import okhttp3.mockwebserver.MockWebServer;
1515
import org.slf4j.Logger;
1616
import org.slf4j.LoggerFactory;
17-
import org.springframework.beans.factory.annotation.Value;
17+
import org.springframework.boot.autoconfigure.ImportAutoConfiguration;
18+
import org.springframework.boot.context.properties.EnableConfigurationProperties;
1819
import org.springframework.context.annotation.Bean;
1920
import org.springframework.context.annotation.Configuration;
2021
import org.springframework.util.ResourceUtils;
2122

2223
@Configuration
24+
@ImportAutoConfiguration(OperatorAutoConfiguration.class)
25+
@EnableConfigurationProperties(TestConfigurationProperties.class)
2326
public class TestConfiguration {
2427

2528
private static final Logger log = LoggerFactory.getLogger(TestConfiguration.class);
2629

27-
@Value("${io.javaoperatorsdk.test.crdPaths}")
28-
private List<String> crdPaths;
29-
3030
@Bean
3131
public KubernetesMockServer k8sMockServer() {
3232
final var server =
@@ -41,12 +41,12 @@ public KubernetesMockServer k8sMockServer() {
4141
}
4242

4343
@Bean
44-
public KubernetesClient kubernetesClient(KubernetesMockServer server) {
44+
public KubernetesClient kubernetesClient(KubernetesMockServer server, TestConfigurationProperties properties) {
4545
final var client = server.createClient();
4646

47-
crdPaths.forEach(
47+
properties.getCrdPaths().forEach(
4848
crdPath -> {
49-
CustomResourceDefinition crd = null;
49+
CustomResourceDefinition crd;
5050
try {
5151
crd = Serialization.unmarshal(new FileInputStream(ResourceUtils.getFile(crdPath)));
5252
} catch (FileNotFoundException e) {
@@ -60,4 +60,5 @@ public KubernetesClient kubernetesClient(KubernetesMockServer server) {
6060

6161
return client;
6262
}
63+
6364
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package io.javaoperatorsdk.operator.springboot.starter.test;
2+
3+
import java.util.ArrayList;
4+
import java.util.List;
5+
import org.springframework.boot.context.properties.ConfigurationProperties;
6+
7+
@ConfigurationProperties("io.javaoperatorsdk.test")
8+
public class TestConfigurationProperties {
9+
10+
private List<String> crdPaths = new ArrayList<>();
11+
12+
public List<String> getCrdPaths() {
13+
return crdPaths;
14+
}
15+
16+
public void setCrdPaths(List<String> crdPaths) {
17+
this.crdPaths = crdPaths;
18+
}
19+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package io.javaoperatorsdk.operator.springboot.starter.test;
2+
3+
import static org.assertj.core.api.Assertions.assertThat;
4+
5+
import io.fabric8.kubernetes.client.KubernetesClient;
6+
import io.javaoperatorsdk.operator.Operator;
7+
import org.junit.jupiter.api.Test;
8+
import org.springframework.beans.factory.annotation.Autowired;
9+
import org.springframework.boot.autoconfigure.SpringBootApplication;
10+
import org.springframework.boot.test.autoconfigure.json.JsonTest;
11+
import org.springframework.context.ApplicationContext;
12+
13+
@JsonTest
14+
@EnableMockOperator(crdPaths = "classpath:crd.yml")
15+
class EnableMockOperatorTests {
16+
17+
@Autowired
18+
KubernetesClient client;
19+
20+
@Autowired
21+
ApplicationContext applicationContext;
22+
23+
@Test
24+
void testCrdLoaded() {
25+
assertThat(applicationContext.getBean(Operator.class))
26+
.isNotNull();
27+
assertThat(client.customResourceDefinitions()
28+
.withName("customservices.sample.javaoperatorsdk")
29+
.get()).isNotNull();
30+
}
31+
32+
@SpringBootApplication
33+
static class SpringBootTestApplication {
34+
35+
}
36+
37+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
apiVersion: apiextensions.k8s.io/v1
2+
kind: CustomResourceDefinition
3+
metadata:
4+
name: customservices.sample.javaoperatorsdk
5+
spec:
6+
group: sample.javaoperatorsdk
7+
scope: Namespaced
8+
names:
9+
plural: customservices
10+
singular: customservice
11+
kind: CustomService
12+
shortNames:
13+
- cs
14+
versions:
15+
- name: v1
16+
served: true
17+
storage: true

0 commit comments

Comments
 (0)