Skip to content

Commit 59bac25

Browse files
committed
Initial test for Main
1 parent b3f9a0c commit 59bac25

File tree

8 files changed

+393
-217
lines changed

8 files changed

+393
-217
lines changed

operator/src/main/java/oracle/kubernetes/operator/Main.java

Lines changed: 227 additions & 183 deletions
Large diffs are not rendered by default.

operator/src/main/java/oracle/kubernetes/operator/helpers/AuthorizationProxy.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -235,12 +235,12 @@ private V1ResourceAttributes prepareResourceAttributes(Operation operation, Reso
235235
return resourceAttributes;
236236
}
237237

238-
public V1SelfSubjectRulesReview review(String namespace) {
238+
V1SelfSubjectRulesReview review(String namespace) {
239239
V1SelfSubjectRulesReview subjectRulesReview = new V1SelfSubjectRulesReview();
240240
V1SelfSubjectRulesReviewSpec spec = new V1SelfSubjectRulesReviewSpec();
241241
spec.setNamespace(namespace);
242242
subjectRulesReview.setSpec(spec);
243-
CallBuilderFactory factory = ContainerResolver.getInstance().getContainer().getSPI(CallBuilderFactory.class);
243+
CallBuilderFactory factory = new CallBuilderFactory();
244244
try {
245245
return factory.create().createSelfSubjectRulesReview(subjectRulesReview);
246246
} catch (ApiException e) {

operator/src/main/java/oracle/kubernetes/operator/helpers/CRDHelper.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414
import oracle.kubernetes.operator.logging.LoggingFacade;
1515
import oracle.kubernetes.operator.logging.LoggingFactory;
1616
import oracle.kubernetes.operator.logging.MessageKeys;
17-
import oracle.kubernetes.operator.work.ContainerResolver;
1817

1918
/**
2019
* Helper class to ensure Domain CRD is created
@@ -50,7 +49,7 @@ public static void checkAndCreateCustomResourceDefinition() {
5049
crds.setNames(crdn);
5150
crd.setSpec(crds);
5251

53-
CallBuilderFactory factory = ContainerResolver.getInstance().getContainer().getSPI(CallBuilderFactory.class);
52+
CallBuilderFactory factory = new CallBuilderFactory();
5453
V1beta1CustomResourceDefinition existingCRD = null;
5554
try {
5655
existingCRD = factory.create().readCustomResourceDefinition(

operator/src/main/java/oracle/kubernetes/operator/helpers/CallBuilder.java

Lines changed: 34 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -122,12 +122,14 @@ public static String toDNS1123LegalName(String value) {
122122
public VersionInfo readVersionCode() throws ApiException {
123123
ApiClient client = helper.take();
124124
try {
125-
return new VersionApi(client).getCode();
125+
return CALL_FACTORY.getVersionCode(client);
126126
} finally {
127127
helper.recycle(client);
128128
}
129129
}
130-
130+
131+
private static SynchronousCallFactory CALL_FACTORY = new SynchronousCallFactoryImpl();
132+
131133
/* Namespaces */
132134

133135
/**
@@ -172,8 +174,8 @@ public DomainList listDomain(String namespace) throws ApiException {
172174
String _continue = "";
173175
ApiClient client = helper.take();
174176
try {
175-
return new WeblogicApi(client).listWebLogicOracleV1NamespacedDomain(namespace, pretty, _continue,
176-
fieldSelector, includeUninitialized, labelSelector, limit, resourceVersion, timeoutSeconds, watch);
177+
return CALL_FACTORY.getDomainList(client, namespace, _continue, pretty, fieldSelector, includeUninitialized, labelSelector,
178+
limit, resourceVersion, timeoutSeconds, watch);
177179
} finally {
178180
helper.recycle(client);
179181
}
@@ -612,8 +614,8 @@ public V1PersistentVolumeList listPersistentVolume() throws ApiException {
612614
String _continue = "";
613615
ApiClient client = helper.take();
614616
try {
615-
return new CoreV1Api(client).listPersistentVolume(pretty, _continue, fieldSelector,
616-
includeUninitialized, labelSelector, limit, resourceVersion, timeoutSeconds, watch);
617+
return CALL_FACTORY.listPersistentVolumes(_continue, client, pretty, fieldSelector, includeUninitialized,
618+
labelSelector, limit, resourceVersion, timeoutSeconds, watch);
617619
} finally {
618620
helper.recycle(client);
619621
}
@@ -788,7 +790,8 @@ public Step createSelfSubjectAccessReviewAsync(V1SelfSubjectAccessReview body, R
788790
public V1SelfSubjectRulesReview createSelfSubjectRulesReview(V1SelfSubjectRulesReview body) throws ApiException {
789791
ApiClient client = helper.take();
790792
try {
791-
return new AuthorizationV1Api(client).createSelfSubjectRulesReview(body, pretty);
793+
String pretty = this.pretty;
794+
return CALL_FACTORY.createSelfSubjectRulesReview(client, body, pretty);
792795
} finally {
793796
helper.recycle(client);
794797
}
@@ -962,6 +965,29 @@ public Step deleteIngressAsync(String name, String namespace, V1DeleteOptions de
962965
private <T> Step createRequestAsync(ResponseStep<T> next, RequestParams requestParams, CallFactory<T> factory) {
963966
return STEP_FACTORY.createRequestAsync(next, requestParams, factory, helper, timeoutSeconds, maxRetryCount, fieldSelector, labelSelector, resourceVersion);
964967
}
965-
966968

969+
970+
public static class SynchronousCallFactoryImpl implements SynchronousCallFactory {
971+
@Override
972+
public V1SelfSubjectRulesReview createSelfSubjectRulesReview(ApiClient client, V1SelfSubjectRulesReview body, String pretty) throws ApiException {
973+
return new AuthorizationV1Api(client).createSelfSubjectRulesReview(body, pretty);
974+
}
975+
976+
@Override
977+
public V1PersistentVolumeList listPersistentVolumes(String _continue, ApiClient client, String pretty, String fieldSelector, Boolean includeUninitialized, String labelSelector, Integer limit, String resourceVersion, Integer timeoutSeconds, Boolean watch) throws ApiException {
978+
return new CoreV1Api(client).listPersistentVolume(pretty, _continue, fieldSelector,
979+
includeUninitialized, labelSelector, limit, resourceVersion, timeoutSeconds, watch);
980+
}
981+
982+
@Override
983+
public VersionInfo getVersionCode(ApiClient client) throws ApiException {
984+
return new VersionApi(client).getCode();
985+
}
986+
987+
@Override
988+
public DomainList getDomainList(ApiClient client, String namespace, String _continue, String pretty, String fieldSelector, Boolean includeUninitialized, String labelSelector, Integer limit, String resourceVersion, Integer timeoutSeconds, Boolean watch) throws ApiException {
989+
return new WeblogicApi(client).listWebLogicOracleV1NamespacedDomain(namespace, pretty, _continue,
990+
fieldSelector, includeUninitialized, labelSelector, limit, resourceVersion, timeoutSeconds, watch);
991+
}
992+
}
967993
}

operator/src/main/java/oracle/kubernetes/operator/helpers/HealthCheckHelper.java

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,24 +3,23 @@
33

44
package oracle.kubernetes.operator.helpers;
55

6+
import java.util.Collection;
7+
import java.util.HashMap;
8+
import java.util.List;
9+
import java.util.Map;
10+
611
import io.kubernetes.client.ApiException;
712
import io.kubernetes.client.models.V1PersistentVolume;
813
import io.kubernetes.client.models.V1PersistentVolumeList;
914
import io.kubernetes.client.models.V1ResourceRule;
1015
import io.kubernetes.client.models.V1SelfSubjectRulesReview;
1116
import io.kubernetes.client.models.V1SubjectRulesReviewStatus;
1217
import io.kubernetes.client.models.VersionInfo;
13-
import oracle.kubernetes.weblogic.domain.v1.Domain;
14-
import oracle.kubernetes.weblogic.domain.v1.DomainList;
1518
import oracle.kubernetes.operator.logging.LoggingFacade;
1619
import oracle.kubernetes.operator.logging.LoggingFactory;
1720
import oracle.kubernetes.operator.logging.MessageKeys;
18-
import oracle.kubernetes.operator.work.ContainerResolver;
19-
20-
import java.util.Collection;
21-
import java.util.HashMap;
22-
import java.util.List;
23-
import java.util.Map;
21+
import oracle.kubernetes.weblogic.domain.v1.Domain;
22+
import oracle.kubernetes.weblogic.domain.v1.DomainList;
2423

2524
/**
2625
* A Helper Class for checking the health of the WebLogic Operator
@@ -273,7 +272,7 @@ public KubernetesVersion performK8sVersionCheck() throws ApiException {
273272
int major = 0;
274273
int minor = 0;
275274
try {
276-
CallBuilderFactory factory = ContainerResolver.getInstance().getContainer().getSPI(CallBuilderFactory.class);
275+
CallBuilderFactory factory = new CallBuilderFactory();
277276
info = factory.create().readVersionCode();
278277

279278
String gitVersion = info.getGitVersion();
@@ -322,7 +321,7 @@ public KubernetesVersion performK8sVersionCheck() throws ApiException {
322321
* @throws ApiException exception for k8s API
323322
*/
324323
private HashMap<String, Domain> verifyDomainUidUniqueness() throws ApiException {
325-
CallBuilderFactory factory = ContainerResolver.getInstance().getContainer().getSPI(CallBuilderFactory.class);
324+
CallBuilderFactory factory = new CallBuilderFactory();
326325

327326
HashMap<String, Domain> domainUIDMap = new HashMap<>();
328327
for (String namespace : targetNamespaces) {
@@ -350,7 +349,7 @@ private HashMap<String, Domain> verifyDomainUidUniqueness() throws ApiException
350349
* @throws ApiException exception for k8s API
351350
*/
352351
private void verifyPersistentVolume(HashMap<String, Domain> domainUIDMap) throws ApiException {
353-
CallBuilderFactory factory = ContainerResolver.getInstance().getContainer().getSPI(CallBuilderFactory.class);
352+
CallBuilderFactory factory = new CallBuilderFactory();
354353

355354
V1PersistentVolumeList pvList = factory.create().listPersistentVolume();
356355

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package oracle.kubernetes.operator.helpers;
2+
3+
import io.kubernetes.client.ApiClient;
4+
import io.kubernetes.client.ApiException;
5+
import io.kubernetes.client.models.V1PersistentVolumeList;
6+
import io.kubernetes.client.models.V1SelfSubjectRulesReview;
7+
import io.kubernetes.client.models.VersionInfo;
8+
import oracle.kubernetes.weblogic.domain.v1.DomainList;
9+
10+
public interface SynchronousCallFactory {
11+
12+
V1SelfSubjectRulesReview createSelfSubjectRulesReview(ApiClient client, V1SelfSubjectRulesReview body, String pretty) throws ApiException;
13+
14+
V1PersistentVolumeList listPersistentVolumes(String _continue, ApiClient client, String pretty, String fieldSelector, Boolean includeUninitialized, String labelSelector, Integer limit, String resourceVersion, Integer timeoutSeconds, Boolean watch) throws ApiException;
15+
16+
VersionInfo getVersionCode(ApiClient client) throws ApiException;
17+
18+
DomainList getDomainList(ApiClient client, String namespace, String _continue, String pretty, String fieldSelector, Boolean includeUninitialized, String labelSelector, Integer limit, String resourceVersion, Integer timeoutSeconds, Boolean watch) throws ApiException;
19+
}
Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
// Copyright 2018, Oracle Corporation and/or its affiliates. All rights reserved.
2+
// Licensed under the Universal Permissive License v 1.0 as shown at http://oss.oracle.com/licenses/upl.
3+
4+
package oracle.kubernetes.operator;
5+
6+
import java.util.ArrayList;
7+
import java.util.List;
8+
9+
import com.meterware.simplestub.Memento;
10+
import com.meterware.simplestub.StaticStubSupport;
11+
12+
import io.kubernetes.client.ApiClient;
13+
import io.kubernetes.client.ApiException;
14+
import io.kubernetes.client.models.V1EventList;
15+
import io.kubernetes.client.models.V1PersistentVolumeList;
16+
import io.kubernetes.client.models.V1PodList;
17+
import io.kubernetes.client.models.V1SelfSubjectRulesReview;
18+
import io.kubernetes.client.models.V1ServiceList;
19+
import io.kubernetes.client.models.V1SubjectRulesReviewStatus;
20+
import io.kubernetes.client.models.V1beta1IngressList;
21+
import io.kubernetes.client.models.VersionInfo;
22+
import oracle.kubernetes.TestUtils;
23+
import oracle.kubernetes.operator.builders.StubWatchFactory;
24+
import oracle.kubernetes.operator.helpers.CallBuilder;
25+
import oracle.kubernetes.operator.helpers.SynchronousCallFactory;
26+
import oracle.kubernetes.operator.work.AsyncCallTestSupport;
27+
import oracle.kubernetes.weblogic.domain.v1.DomainList;
28+
29+
import org.junit.After;
30+
import org.junit.Before;
31+
import org.junit.Test;
32+
33+
import static com.meterware.simplestub.Stub.createStub;
34+
35+
public class DomainPresenceTest {
36+
37+
private List<Memento> mementos = new ArrayList<>();
38+
private AsyncCallTestSupport testSupport = new AsyncCallTestSupport();
39+
40+
@Before
41+
public void setUp() throws Exception {
42+
mementos.add(TestUtils.silenceOperatorLogger());
43+
mementos.add(StubWatchFactory.install());
44+
mementos.add(testSupport.installRequestStepFactory());
45+
mementos.add(StaticStubSupport.install(CallBuilder.class, "CALL_FACTORY", createStub(SynchronousCallFactoryStub.class)));
46+
}
47+
48+
@After
49+
public void tearDown() throws Exception {
50+
for (Memento memento : mementos) memento.revert();
51+
}
52+
53+
@SuppressWarnings("unchecked")
54+
@Test
55+
public void watchPresenceWithNoPreexistingData_doesNothing() throws Exception {
56+
testSupport.createCannedResponse("listDomain").withNamespace("default").returning(new DomainList());
57+
testSupport.createCannedResponse("listIngress").withNamespace("default").returning(new V1beta1IngressList());
58+
testSupport.createCannedResponse("listService").withNamespace("default").returning(new V1ServiceList());
59+
testSupport.createCannedResponse("listEvent").withNamespace("default").returning(new V1EventList());
60+
testSupport.createCannedResponse("listPod").withNamespace("default").returning(new V1PodList());
61+
Main.begin();
62+
}
63+
64+
static abstract class SynchronousCallFactoryStub implements SynchronousCallFactory {
65+
@Override
66+
public VersionInfo getVersionCode(ApiClient client) throws ApiException {
67+
return new VersionInfo().major("1").minor("8");
68+
}
69+
70+
@Override
71+
public DomainList getDomainList(ApiClient client, String namespace, String _continue, String pretty, String fieldSelector, Boolean includeUninitialized, String labelSelector, Integer limit, String resourceVersion, Integer timeoutSeconds, Boolean watch) throws ApiException {
72+
return new DomainList();
73+
}
74+
75+
@Override
76+
public V1PersistentVolumeList listPersistentVolumes(String _continue, ApiClient client, String pretty, String fieldSelector, Boolean includeUninitialized, String labelSelector, Integer limit, String resourceVersion, Integer timeoutSeconds, Boolean watch) throws ApiException {
77+
return new V1PersistentVolumeList();
78+
}
79+
80+
@Override
81+
public V1SelfSubjectRulesReview createSelfSubjectRulesReview(ApiClient client, V1SelfSubjectRulesReview body, String pretty) throws ApiException {
82+
return new V1SelfSubjectRulesReview().status(new V1SubjectRulesReviewStatus());
83+
}
84+
}
85+
}

operator/src/test/java/oracle/kubernetes/operator/builders/StubWatchFactory.java

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,15 @@
33

44
package oracle.kubernetes.operator.builders;
55

6+
import java.io.IOException;
7+
import java.util.ArrayList;
8+
import java.util.Arrays;
9+
import java.util.HashMap;
10+
import java.util.Iterator;
11+
import java.util.List;
12+
import java.util.Map;
13+
import java.util.function.BiFunction;
14+
615
import com.meterware.simplestub.Memento;
716
import com.meterware.simplestub.StaticStubSupport;
817
import com.squareup.okhttp.Call;
@@ -13,15 +22,6 @@
1322
import io.kubernetes.client.util.Watch.Response;
1423
import oracle.kubernetes.operator.helpers.Pool;
1524

16-
import java.io.IOException;
17-
import java.util.ArrayList;
18-
import java.util.Arrays;
19-
import java.util.HashMap;
20-
import java.util.Iterator;
21-
import java.util.List;
22-
import java.util.Map;
23-
import java.util.function.BiFunction;
24-
2525
/**
2626
* A test-time replacement for the factory that creates Watch objects, allowing
2727
* tests to specify directly the events they want returned from the Watch.
@@ -69,15 +69,19 @@ public static List<Map<String, String>> getRecordedParameters() {
6969
public <T> WatchI<T> createWatch(Pool<ApiClient> pool, CallParams callParams, Class<?> responseBodyType, BiFunction<ApiClient, CallParams, Call> function) throws ApiException {
7070
getRecordedParameters().add(recordedParams(callParams));
7171

72-
if (exceptionOnNext == null)
73-
return (WatchI<T>) new WatchStub<T>((List)calls.remove(0));
72+
if (exceptionOnNext == null && hasDefinedCallResponses())
73+
return new WatchStub<T>((List)calls.remove(0));
7474
else try {
7575
return new ExceptionThrowingWatchStub<T>(exceptionOnNext);
7676
} finally {
7777
exceptionOnNext = null;
7878
}
7979
}
8080

81+
private boolean hasDefinedCallResponses() {
82+
return calls != null && !calls.isEmpty();
83+
}
84+
8185
private Map<String,String> recordedParams(CallParams callParams) {
8286
Map<String,String> result = new HashMap<>();
8387
if (callParams.getResourceVersion() != null)

0 commit comments

Comments
 (0)