Skip to content

Commit 86a19e4

Browse files
authored
Change KubeResourceManager API (#209)
## Description Change API of KubeResoruceManager 1. deprecated getInstance() method and use instead of get() method for getting instance 2. Context set/get methods moved from static to non-static 3. YAML path configuration method moved from static to non static ## Type of Change Please delete options that are not relevant. * Breaking change (fix or feature that would cause existing functionality to not work as expected) ## Checklist - [x] My code follows the style guidelines of this project - [x] I have performed a self-review of my own code - [x] I have commented my code, particularly in hard-to-understand areas - [x] I have made corresponding changes to the documentation - [x] My changes generate no new warnings - [x] I have added tests that prove my fix is effective or that my feature works - [x] New and existing unit/integration tests pass locally with my changes Signed-off-by: David Kornel <[email protected]>
1 parent 1963e9d commit 86a19e4

File tree

13 files changed

+68
-56
lines changed

13 files changed

+68
-56
lines changed

README.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ class Test {
7070
class Test {
7171
@Test
7272
void testMethod() {
73-
KubeResourceManager.getInstance().createResourceWithWait(
73+
KubeResourceManager.get().createResourceWithWait(
7474
new NamespaceBuilder().withNewMetadata().withName("test").endMetadata().build());
7575
assertNotNull(KubeResourceManager.getKubeCmdClient().get("namespace", "test"));
7676
}
@@ -79,7 +79,7 @@ class Test {
7979
```
8080
### Register `ResourceType` or `NamespacedResourceType` classes into `KubeResourceManager`
8181
```java
82-
KubeResourceManager.getInstance().setResourceTypes(
82+
KubeResourceManager.get().setResourceTypes(
8383
new NamespaceType(),
8484
new JobType(),
8585
new NetworkPolicyType()

test-frame-common/src/main/java/io/skodjob/testframe/listeners/ResourceManagerCleanerExtension.java

+4-4
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,8 @@ public void afterAll(ExtensionContext extensionContext) {
3434
findAnnotation(extensionContext.getRequiredTestClass(), ResourceManager.class);
3535

3636
if (annotation.isPresent() && annotation.get().cleanResources()) {
37-
KubeResourceManager.setTestContext(extensionContext);
38-
KubeResourceManager.getInstance().deleteResources();
37+
KubeResourceManager.get().setTestContext(extensionContext);
38+
KubeResourceManager.get().deleteResources();
3939
}
4040
}
4141

@@ -50,8 +50,8 @@ public void afterEach(ExtensionContext extensionContext) {
5050
findAnnotation(extensionContext.getRequiredTestClass(), ResourceManager.class);
5151

5252
if (annotation.isPresent() && annotation.get().cleanResources()) {
53-
KubeResourceManager.setTestContext(extensionContext);
54-
KubeResourceManager.getInstance().deleteResources(annotation.get().asyncDeletion());
53+
KubeResourceManager.get().setTestContext(extensionContext);
54+
KubeResourceManager.get().deleteResources(annotation.get().asyncDeletion());
5555
}
5656
}
5757
}

test-frame-common/src/main/java/io/skodjob/testframe/listeners/ResourceManagerExtension.java

+5-5
Original file line numberDiff line numberDiff line change
@@ -18,26 +18,26 @@ public class ResourceManagerExtension
1818
implements BeforeAllCallback, BeforeEachCallback, AfterAllCallback, AfterEachCallback {
1919

2020
private ResourceManagerExtension() {
21-
KubeResourceManager.getInstance();
21+
KubeResourceManager.get();
2222
}
2323

2424
@Override
2525
public void beforeAll(ExtensionContext extensionContext) {
26-
KubeResourceManager.setTestContext(extensionContext);
26+
KubeResourceManager.get().setTestContext(extensionContext);
2727
}
2828

2929
@Override
3030
public void beforeEach(ExtensionContext extensionContext) {
31-
KubeResourceManager.setTestContext(extensionContext);
31+
KubeResourceManager.get().setTestContext(extensionContext);
3232
}
3333

3434
@Override
3535
public void afterAll(ExtensionContext extensionContext) {
36-
KubeResourceManager.setTestContext(extensionContext);
36+
KubeResourceManager.get().setTestContext(extensionContext);
3737
}
3838

3939
@Override
4040
public void afterEach(ExtensionContext extensionContext) {
41-
KubeResourceManager.setTestContext(extensionContext);
41+
KubeResourceManager.get().setTestContext(extensionContext);
4242
}
4343
}

test-frame-common/src/main/java/io/skodjob/testframe/resources/KubeResourceManager.java

+17-5
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ public class KubeResourceManager {
6262
private static final ThreadLocal<ExtensionContext> TEST_CONTEXT = new ThreadLocal<>();
6363
private static final Map<String, Stack<ResourceItem<?>>> STORED_RESOURCES = new LinkedHashMap<>();
6464

65-
private static String storeYamlPath = null;
65+
private String storeYamlPath = null;
6666

6767
private KubeResourceManager() {
6868
// Private constructor to prevent instantiation
@@ -72,8 +72,20 @@ private KubeResourceManager() {
7272
* Retrieves the singleton instance of KubeResourceManager.
7373
*
7474
* @return The singleton instance of KubeResourceManager.
75+
* @deprecated Will be removed in future release.
7576
*/
77+
@Deprecated
7678
public static synchronized KubeResourceManager getInstance() {
79+
return get();
80+
}
81+
82+
83+
/**
84+
* Retrieves the singleton instance of KubeResourceManager.
85+
*
86+
* @return The singleton instance of KubeResourceManager.
87+
*/
88+
public static synchronized KubeResourceManager get() {
7789
if (instance == null) {
7890
instance = new KubeResourceManager();
7991
instance.resourceTypes = new ResourceType[]{};
@@ -110,7 +122,7 @@ public static KubeCmdClient<?> getKubeCmdClient() {
110122
*
111123
* @param context The extension context.
112124
*/
113-
public static void setTestContext(ExtensionContext context) {
125+
public void setTestContext(ExtensionContext context) {
114126
TEST_CONTEXT.set(context);
115127
}
116128

@@ -119,7 +131,7 @@ public static void setTestContext(ExtensionContext context) {
119131
*
120132
* @return The extension context.
121133
*/
122-
public static ExtensionContext getTestContext() {
134+
public ExtensionContext getTestContext() {
123135
return TEST_CONTEXT.get();
124136
}
125137

@@ -155,7 +167,7 @@ public final void addDeleteCallback(Consumer<HasMetadata> callback) {
155167
*
156168
* @param path root path for storing
157169
*/
158-
public static void setStoreYamlPath(String path) {
170+
public void setStoreYamlPath(String path) {
159171
storeYamlPath = path;
160172
}
161173

@@ -164,7 +176,7 @@ public static void setStoreYamlPath(String path) {
164176
*
165177
* @return path
166178
*/
167-
public static String getStoreYamlPath() {
179+
public String getStoreYamlPath() {
168180
return storeYamlPath;
169181
}
170182

test-frame-common/src/test/java/io/skodjob/testframe/clients/KubeResourceManagerTest.java

+12-12
Original file line numberDiff line numberDiff line change
@@ -46,27 +46,27 @@ void setupClient() {
4646

4747
@Test
4848
void testCreateDeleteNamespace() {
49-
KubeResourceManager.getInstance().createResourceWithWait(
49+
KubeResourceManager.get().createResourceWithWait(
5050
new NamespaceBuilder().withNewMetadata().withName("test").endMetadata().build());
5151
assertNotNull(KubeResourceManager.getKubeClient().getClient().namespaces().withName("test").get());
5252
}
5353

5454
@Test
5555
void testDeleteAllResources() {
56-
KubeResourceManager.getInstance().createResourceWithWait(
56+
KubeResourceManager.get().createResourceWithWait(
5757
new NamespaceBuilder().withNewMetadata().withName("test2").endMetadata().build());
5858
assertNull(KubeResourceManager.getKubeClient().getClient().namespaces().withName("test").get());
5959
assertNotNull(KubeResourceManager.getKubeClient().getClient().namespaces().withName("test2").get());
60-
KubeResourceManager.getInstance().deleteResources();
60+
KubeResourceManager.get().deleteResources();
6161
assertNull(KubeResourceManager.getKubeClient().getClient().namespaces().withName("test2").get());
6262
}
6363

6464
@Test
6565
void testUpdateResource() {
6666
Namespace ns = new NamespaceBuilder().withNewMetadata().withName("test3").endMetadata().build();
67-
KubeResourceManager.getInstance().createResourceWithWait(ns);
67+
KubeResourceManager.get().createResourceWithWait(ns);
6868
assertNotNull(KubeResourceManager.getKubeClient().getClient().namespaces().withName("test3").get());
69-
KubeResourceManager.getInstance().updateResource(ns.edit()
69+
KubeResourceManager.get().updateResource(ns.edit()
7070
.editMetadata().addToLabels(Collections.singletonMap("test-label", "true")).endMetadata().build());
7171
assertNotNull(KubeResourceManager.getKubeClient().getClient().namespaces().withName("test3").get()
7272
.getMetadata().getLabels().get("test-label"));
@@ -75,20 +75,20 @@ void testUpdateResource() {
7575
@Test
7676
void testCreateOrUpdateResource() {
7777
Namespace ns = new NamespaceBuilder().withNewMetadata().withName("test4").endMetadata().build();
78-
KubeResourceManager.getInstance().createResourceWithWait(ns);
78+
KubeResourceManager.get().createResourceWithWait(ns);
7979
assertNotNull(KubeResourceManager.getKubeClient().getClient().namespaces().withName("test4").get());
80-
KubeResourceManager.getInstance().createOrUpdateResourceWithWait(ns);
80+
KubeResourceManager.get().createOrUpdateResourceWithWait(ns);
8181
assertNotNull(KubeResourceManager.getKubeClient().getClient().namespaces().withName("test4").get());
82-
KubeResourceManager.getInstance().createOrUpdateResourceWithoutWait(ns);
82+
KubeResourceManager.get().createOrUpdateResourceWithoutWait(ns);
8383
assertNotNull(KubeResourceManager.getKubeClient().getClient().namespaces().withName("test4").get());
8484
}
8585

8686
@Test
8787
void testLoggingManagedResources() {
8888
// create resources
89-
KubeResourceManager.getInstance().createResourceWithWait(
89+
KubeResourceManager.get().createResourceWithWait(
9090
new NamespaceBuilder().withNewMetadata().withName("test-ns").endMetadata().build());
91-
KubeResourceManager.getInstance().createResourceWithWait(
91+
KubeResourceManager.get().createResourceWithWait(
9292
new ServiceAccountBuilder().withNewMetadata().withName("test-sa").endMetadata().build());
9393

9494
// setup mock logger appender
@@ -102,7 +102,7 @@ void testLoggingManagedResources() {
102102
testAppender.start();
103103

104104
// print resources
105-
KubeResourceManager.getInstance().printCurrentResources(org.slf4j.event.Level.INFO);
105+
KubeResourceManager.get().printCurrentResources(org.slf4j.event.Level.INFO);
106106
System.out.println(testAppender.getLogEvents());
107107
List<LogEvent> events = testAppender.getLogEvents();
108108

@@ -114,7 +114,7 @@ void testLoggingManagedResources() {
114114
testAppender.clean();
115115

116116
// print all resources on debug output
117-
KubeResourceManager.getInstance().printAllResources(org.slf4j.event.Level.DEBUG);
117+
KubeResourceManager.get().printAllResources(org.slf4j.event.Level.DEBUG);
118118
events = testAppender.getLogEvents();
119119

120120
assertEquals(4, events.size());

test-frame-common/src/test/java/io/skodjob/testframe/clients/UtilsTest.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -39,9 +39,9 @@ void setupClient() {
3939

4040
@Test
4141
void testPodUtils() {
42-
KubeResourceManager.getInstance().createResourceWithWait(
42+
KubeResourceManager.get().createResourceWithWait(
4343
new NamespaceBuilder().withNewMetadata().withName("test").endMetadata().build());
44-
KubeResourceManager.getInstance().createResourceWithoutWait(
44+
KubeResourceManager.get().createResourceWithoutWait(
4545
new PodBuilder()
4646
.withNewMetadata()
4747
.withName("test-pod")
@@ -71,7 +71,7 @@ void testPodUtils() {
7171

7272
@Test
7373
void testKubeUtils() {
74-
KubeResourceManager.getInstance().createResourceWithWait(
74+
KubeResourceManager.get().createResourceWithWait(
7575
new NamespaceBuilder().withNewMetadata().withName("test").endMetadata().build());
7676

7777
KubeUtils.labelNamespace("test", "test-label", "true");

test-frame-metrics-collector/src/main/java/io/skodjob/testframe/MetricsCollector.java

+6-6
Original file line numberDiff line numberDiff line change
@@ -207,8 +207,8 @@ protected void setExec(Exec exec) {
207207

208208
private synchronized KubernetesClient getKubeClient() {
209209
if (kubeClient == null) {
210-
KubeResourceManager resourceManager = KubeResourceManager.getInstance();
211-
kubeClient = resourceManager.getKubeClient().getClient();
210+
KubeResourceManager resourceManager = KubeResourceManager.get();
211+
kubeClient = KubeResourceManager.getKubeClient().getClient();
212212
if (kubeClient == null) {
213213
throw new IllegalStateException("KubeClient is not available");
214214
}
@@ -219,8 +219,8 @@ private synchronized KubernetesClient getKubeClient() {
219219

220220
private synchronized KubeCmdClient<?> getKubeCmdClient() {
221221
if (kubeCmdClient == null) {
222-
final KubeResourceManager resourceManager = KubeResourceManager.getInstance();
223-
kubeCmdClient = resourceManager.getKubeCmdClient();
222+
final KubeResourceManager resourceManager = KubeResourceManager.get();
223+
kubeCmdClient = KubeResourceManager.getKubeCmdClient();
224224
if (kubeCmdClient == null) {
225225
throw new IllegalStateException("KubeCmdClient is not available");
226226
}
@@ -411,14 +411,14 @@ private void deployScraperPod() {
411411
.endContainer()
412412
.endSpec()
413413
.build();
414-
KubeResourceManager.getInstance().createResourceWithWait(scraperPod);
414+
KubeResourceManager.get().createResourceWithWait(scraperPod);
415415
}
416416

417417
/**
418418
* Delete own scraper pod
419419
*/
420420
private void deleteScraperPod() {
421-
KubeResourceManager.getInstance().deleteResource(
421+
KubeResourceManager.get().deleteResource(
422422
new PodBuilder()
423423
.withNewMetadata()
424424
.withName(this.scraperPodName)

test-frame-test-examples/src/test/java/io/skodjob/testframe/test/integration/AbstractIT.java

+4-4
Original file line numberDiff line numberDiff line change
@@ -30,25 +30,25 @@ public abstract class AbstractIT {
3030

3131
static {
3232
// Register resources which KRM uses for handling instead of native status check
33-
KubeResourceManager.getInstance().setResourceTypes(
33+
KubeResourceManager.get().setResourceTypes(
3434
new NamespaceType(),
3535
new ServiceAccountType(),
3636
new DeploymentType()
3737
);
3838

3939
// Allow storing yaml files
40-
KubeResourceManager.setStoreYamlPath(LOG_DIR.toString());
40+
KubeResourceManager.get().setStoreYamlPath(LOG_DIR.toString());
4141

4242
// Register callback which are called with every create resource method for every resource
43-
KubeResourceManager.getInstance().addCreateCallback(r -> {
43+
KubeResourceManager.get().addCreateCallback(r -> {
4444
isCreateHandlerCalled.set(true);
4545
if (r.getKind().equals("Namespace")) {
4646
KubeUtils.labelNamespace(r.getMetadata().getName(), "test-label", "true");
4747
}
4848
});
4949

5050
// Register callback which are called with every delete resource method for every resource
51-
KubeResourceManager.getInstance().addDeleteCallback(r -> {
51+
KubeResourceManager.get().addDeleteCallback(r -> {
5252
isDeleteHandlerCalled.set(true);
5353
if (r.getKind().equals("Namespace")) {
5454
LoggerUtils.logResource("Deleted", r);

test-frame-test-examples/src/test/java/io/skodjob/testframe/test/integration/KubeClientIT.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ void testCreateResourcesFromYaml() throws IOException {
2222
List<HasMetadata> resources = KubeResourceManager.getKubeClient()
2323
.readResourcesFromFile(getClass().getClassLoader().getResourceAsStream("resources.yaml"));
2424

25-
KubeResourceManager.getInstance().createResourceWithWait(resources.toArray(new HasMetadata[0]));
25+
KubeResourceManager.get().createResourceWithWait(resources.toArray(new HasMetadata[0]));
2626

2727
assertNotNull(KubeResourceManager.getKubeClient().getClient().namespaces().withName(nsName4).get());
2828
assertNotNull(KubeResourceManager.getKubeClient().getClient().serviceAccounts()

test-frame-test-examples/src/test/java/io/skodjob/testframe/test/integration/KubeResourceManagerCleanerIT.java

+6-6
Original file line numberDiff line numberDiff line change
@@ -31,13 +31,13 @@ public final class KubeResourceManagerCleanerIT extends AbstractIT {
3131

3232
@BeforeAll
3333
void setupAll() {
34-
KubeResourceManager.getInstance().createResourceWithWait(
34+
KubeResourceManager.get().createResourceWithWait(
3535
new NamespaceBuilder().withNewMetadata().withName(nsName1).endMetadata().build());
3636
}
3737

3838
@BeforeEach
3939
void setupEach() {
40-
KubeResourceManager.getInstance().createResourceWithWait(
40+
KubeResourceManager.get().createResourceWithWait(
4141
new NamespaceBuilder().withNewMetadata().withName(nsName2).endMetadata().build());
4242
}
4343

@@ -51,12 +51,12 @@ void afterAll() {
5151
@Test
5252
void createResource() {
5353
Namespace ns = new NamespaceBuilder().withNewMetadata().withName(nsName3).endMetadata().build();
54-
KubeResourceManager.getInstance().createResourceWithWait(ns);
54+
KubeResourceManager.get().createResourceWithWait(ns);
5555
assertTrue(isCreateHandlerCalled.get());
56-
KubeResourceManager.getInstance().createOrUpdateResourceWithWait(ns);
56+
KubeResourceManager.get().createOrUpdateResourceWithWait(ns);
5757
assertNotNull(KubeResourceManager.getKubeClient().getClient().namespaces().withName(nsName3).get()
5858
.getMetadata().getLabels().get("test-label"));
59-
KubeResourceManager.getInstance().printAllResources(Level.INFO);
59+
KubeResourceManager.get().printAllResources(Level.INFO);
6060
}
6161

6262
@Test
@@ -78,6 +78,6 @@ void testKubeCmdClientNamespacesExists() {
7878
void testCreateMultipleResourcesAsync() throws IOException {
7979
List<HasMetadata> resources = KubeResourceManager.getKubeClient()
8080
.readResourcesFromFile(getClass().getClassLoader().getResourceAsStream("metrics-example.yaml"));
81-
KubeResourceManager.getInstance().createOrUpdateResourceAsyncWait(resources.toArray(new HasMetadata[0]));
81+
KubeResourceManager.get().createOrUpdateResourceAsyncWait(resources.toArray(new HasMetadata[0]));
8282
}
8383
}

test-frame-test-examples/src/test/java/io/skodjob/testframe/test/integration/KubeResourceManagerIT.java

+4-4
Original file line numberDiff line numberDiff line change
@@ -23,22 +23,22 @@ public final class KubeResourceManagerIT extends AbstractIT {
2323

2424
@BeforeEach
2525
void setupEach() {
26-
KubeResourceManager.getInstance().createResourceWithWait(ns1);
26+
KubeResourceManager.get().createResourceWithWait(ns1);
2727
}
2828

2929
@AfterEach
3030
void afterEach() {
3131
assertNotNull(KubeResourceManager.getKubeClient().getClient().namespaces().withName(nsName2).get());
32-
KubeResourceManager.getInstance().deleteResources();
32+
KubeResourceManager.get().deleteResources();
3333
}
3434

3535
@Test
3636
void createResource() {
37-
KubeResourceManager.getInstance().createResourceWithWait(
37+
KubeResourceManager.get().createResourceWithWait(
3838
new NamespaceBuilder().withNewMetadata().withName("test2").endMetadata().build());
3939
assertNotNull(KubeResourceManager.getKubeClient().getClient().namespaces().withName(nsName1).get());
4040
assertNotNull(KubeResourceManager.getKubeClient().getClient().namespaces().withName(nsName2).get());
41-
KubeResourceManager.getInstance().deleteResource(false, ns1);
41+
KubeResourceManager.get().deleteResource(false, ns1);
4242
assertTrue(isDeleteHandlerCalled.get());
4343
}
4444
}

test-frame-test-examples/src/test/java/io/skodjob/testframe/test/integration/LogCollectorIT.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ void testCollectFromMultipleNamespacesWithDifferentResources() {
6666

6767
int deploymentReplicas = 2;
6868

69-
KubeResourceManager.getInstance().createResourceWithWait(
69+
KubeResourceManager.get().createResourceWithWait(
7070
new NamespaceBuilder()
7171
.editOrNewMetadata()
7272
.withName(namespaceName1)
@@ -79,7 +79,7 @@ void testCollectFromMultipleNamespacesWithDifferentResources() {
7979
.build()
8080
);
8181

82-
KubeResourceManager.getInstance().createResourceWithWait(
82+
KubeResourceManager.get().createResourceWithWait(
8383
new DeploymentBuilder()
8484
.editOrNewMetadata()
8585
.withNamespace(namespaceName1)

0 commit comments

Comments
 (0)