Skip to content

Commit 21719b5

Browse files
committed
test for operator created 'true'
1 parent 480fb7b commit 21719b5

File tree

8 files changed

+86
-14
lines changed

8 files changed

+86
-14
lines changed

model/src/main/java/oracle/kubernetes/operator/LabelConstants.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,11 @@ public interface LabelConstants {
2020
String CLUSTERRESTARTVERSION_LABEL = "weblogic.clusterRestartVersion";
2121
String SERVERRESTARTVERSION_LABEL = "weblogic.serverRestartVersion";
2222

23-
static String forDomainUid(String uid) {
23+
static String forDomainUidSelector(String uid) {
2424
return String.format("%s=%s", DOMAINUID_LABEL, uid);
2525
}
26+
27+
static String getCreatedbyOperatorSelector() {
28+
return String.format("%s=%s", CREATEDBYOPERATOR_LABEL, "true");
29+
}
2630
}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -512,15 +512,15 @@ public NextAction apply(Packet packet) {
512512
private static Step readExistingPods(DomainPresenceInfo info) {
513513
return new CallBuilder()
514514
.withLabelSelectors(
515-
LabelConstants.forDomainUid(info.getDomainUID()),
515+
LabelConstants.forDomainUidSelector(info.getDomainUID()),
516516
LabelConstants.CREATEDBYOPERATOR_LABEL)
517517
.listPodAsync(info.getNamespace(), new PodListStep(info));
518518
}
519519

520520
private Step readExistingServices(DomainPresenceInfo info) {
521521
return new CallBuilder()
522522
.withLabelSelectors(
523-
LabelConstants.forDomainUid(info.getDomainUID()),
523+
LabelConstants.forDomainUidSelector(info.getDomainUID()),
524524
LabelConstants.CREATEDBYOPERATOR_LABEL)
525525
.listServiceAsync(info.getNamespace(), new ServiceListStep(info));
526526
}

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@ boolean matches(V1Service service) {
8181
private static final String SERVICE_TYPE = "serviceType";
8282

8383
static KubernetesServiceType getType(V1Service service) {
84+
if (!KubernetesUtils.isOperatorCreated(service.getMetadata())) return EXTERNAL;
8485
String type = ServiceHelper.getLabelValue(service, SERVICE_TYPE);
8586
if (type != null) return KubernetesServiceType.valueOf(type);
8687

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

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,13 @@
44

55
package oracle.kubernetes.operator.helpers;
66

7+
import static oracle.kubernetes.operator.LabelConstants.CREATEDBYOPERATOR_LABEL;
8+
79
import io.kubernetes.client.models.V1ObjectMeta;
810
import java.lang.reflect.Field;
911
import java.util.Map;
1012
import java.util.Objects;
13+
import java.util.Optional;
1114
import javax.json.JsonPatchBuilder;
1215
import oracle.kubernetes.operator.LabelConstants;
1316
import org.apache.commons.collections.MapUtils;
@@ -133,6 +136,16 @@ private static int getResourceVersion(V1ObjectMeta metadata) {
133136

134137
public static V1ObjectMeta withOperatorLabels(V1ObjectMeta meta, String uid) {
135138
return meta.putLabelsItem(LabelConstants.DOMAINUID_LABEL, uid)
136-
.putLabelsItem(LabelConstants.CREATEDBYOPERATOR_LABEL, "true");
139+
.putLabelsItem(CREATEDBYOPERATOR_LABEL, "true");
140+
}
141+
142+
static boolean isOperatorCreated(V1ObjectMeta metadata) {
143+
return Boolean.parseBoolean(getOperatorCreatedLabel(metadata));
144+
}
145+
146+
private static String getOperatorCreatedLabel(V1ObjectMeta metadata) {
147+
return Optional.ofNullable(metadata.getLabels())
148+
.map(labels -> labels.get(CREATEDBYOPERATOR_LABEL))
149+
.orElse("false");
137150
}
138151
}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
package oracle.kubernetes.operator.helpers;
66

7-
import static oracle.kubernetes.operator.LabelConstants.forDomainUid;
7+
import static oracle.kubernetes.operator.LabelConstants.forDomainUidSelector;
88
import static oracle.kubernetes.operator.VersionConstants.DEFAULT_DOMAIN_VERSION;
99

1010
import io.kubernetes.client.custom.IntOrString;
@@ -529,7 +529,7 @@ public NextAction apply(Packet packet) {
529529
String domainUID = getDomainUID();
530530
Step list =
531531
new CallBuilder()
532-
.withLabelSelectors(forDomainUid(domainUID))
532+
.withLabelSelectors(forDomainUidSelector(domainUID))
533533
.listPersistentVolumeAsync(
534534
new DefaultResponseStep<V1PersistentVolumeList>(getNext()) {
535535
@Override

operator/src/main/java/oracle/kubernetes/operator/steps/DeleteDomainStep.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
// Copyright 2017, 2018, Oracle Corporation and/or its affiliates. All rights reserved.
1+
// Copyright 2017, 2019, Oracle Corporation and/or its affiliates. All rights reserved.
22
// Licensed under the Universal Permissive License v 1.0 as shown at
33
// http://oss.oracle.com/licenses/upl.
44

55
package oracle.kubernetes.operator.steps;
66

7-
import static oracle.kubernetes.operator.LabelConstants.CREATEDBYOPERATOR_LABEL;
8-
import static oracle.kubernetes.operator.LabelConstants.forDomainUid;
7+
import static oracle.kubernetes.operator.LabelConstants.forDomainUidSelector;
8+
import static oracle.kubernetes.operator.LabelConstants.getCreatedbyOperatorSelector;
99

1010
import io.kubernetes.client.models.V1PersistentVolumeClaimList;
1111
import io.kubernetes.client.models.V1PersistentVolumeList;
@@ -54,7 +54,7 @@ public NextAction apply(Packet packet) {
5454

5555
private Step deleteServices() {
5656
return new CallBuilder()
57-
.withLabelSelectors(forDomainUid(domainUID), CREATEDBYOPERATOR_LABEL)
57+
.withLabelSelectors(forDomainUidSelector(domainUID), getCreatedbyOperatorSelector())
5858
.listServiceAsync(
5959
namespace,
6060
new ActionResponseStep<V1ServiceList>() {
@@ -66,13 +66,13 @@ Step createSuccessStep(V1ServiceList result, Step next) {
6666

6767
private Step deletePods() {
6868
return new CallBuilder()
69-
.withLabelSelectors(forDomainUid(domainUID), CREATEDBYOPERATOR_LABEL)
69+
.withLabelSelectors(forDomainUidSelector(domainUID), getCreatedbyOperatorSelector())
7070
.deleteCollectionPodAsync(namespace, new DefaultResponseStep<>(null));
7171
}
7272

7373
private Step deletePersistentVolumes() {
7474
return new CallBuilder()
75-
.withLabelSelectors(forDomainUid(domainUID), CREATEDBYOPERATOR_LABEL)
75+
.withLabelSelectors(forDomainUidSelector(domainUID), getCreatedbyOperatorSelector())
7676
.listPersistentVolumeAsync(
7777
new ActionResponseStep<V1PersistentVolumeList>() {
7878
@Override
@@ -84,7 +84,7 @@ Step createSuccessStep(V1PersistentVolumeList result, Step next) {
8484

8585
private Step deletePersistentVolumeClaims() {
8686
return new CallBuilder()
87-
.withLabelSelectors(forDomainUid(domainUID), CREATEDBYOPERATOR_LABEL)
87+
.withLabelSelectors(forDomainUidSelector(domainUID), getCreatedbyOperatorSelector())
8888
.listPersistentVolumeClaimAsync(
8989
namespace,
9090
new ActionResponseStep<V1PersistentVolumeClaimList>() {

operator/src/test/java/oracle/kubernetes/operator/DomainProcessorTest.java

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,15 @@
66

77
import static com.meterware.simplestub.Stub.createStrictStub;
88
import static oracle.kubernetes.operator.KubernetesConstants.INTROSPECTOR_CONFIG_MAP_NAME_SUFFIX;
9+
import static oracle.kubernetes.operator.LabelConstants.CREATEDBYOPERATOR_LABEL;
10+
import static oracle.kubernetes.operator.LabelConstants.DOMAINNAME_LABEL;
11+
import static oracle.kubernetes.operator.LabelConstants.DOMAINUID_LABEL;
12+
import static oracle.kubernetes.operator.LabelConstants.RESOURCE_VERSION_LABEL;
913
import static oracle.kubernetes.operator.LabelConstants.SERVERNAME_LABEL;
1014
import static oracle.kubernetes.operator.ProcessingConstants.JOB_POD_NAME;
15+
import static oracle.kubernetes.operator.VersionConstants.DEFAULT_DOMAIN_VERSION;
16+
import static org.hamcrest.Matchers.contains;
17+
import static org.hamcrest.Matchers.empty;
1118
import static org.hamcrest.Matchers.equalTo;
1219
import static org.hamcrest.Matchers.notNullValue;
1320
import static org.hamcrest.junit.MatcherAssert.assertThat;
@@ -24,6 +31,7 @@
2431
import io.kubernetes.client.models.V1PodSpec;
2532
import io.kubernetes.client.models.V1SecretReference;
2633
import io.kubernetes.client.models.V1Service;
34+
import io.kubernetes.client.models.V1ServiceSpec;
2735
import java.util.ArrayList;
2836
import java.util.Arrays;
2937
import java.util.HashMap;
@@ -153,6 +161,46 @@ public void whenDomainScaledDown_removeExcessPodsAndServices() {
153161
assertThat(getRunningPods().size(), equalTo(MIN_REPLICAS + NUM_ADMIN_SERVERS + NUM_JOB_PODS));
154162
}
155163

164+
@Test
165+
public void whenDomainShutDown_removeAllPodsAndServices() {
166+
defineServerResources(ADMIN_SERVER_NAME);
167+
Arrays.stream(managedServerNames).forEach(this::defineServerResources);
168+
169+
DomainPresenceInfo info = new DomainPresenceInfo(domain);
170+
processor.makeRightDomainPresence(info, true, true, true);
171+
172+
assertThat(getRunningServices(), empty());
173+
assertThat(getRunningPods(), empty());
174+
}
175+
176+
@Test
177+
public void whenDomainShutDown_ignoreNonOperatorServices() {
178+
defineServerResources(ADMIN_SERVER_NAME);
179+
Arrays.stream(managedServerNames).forEach(this::defineServerResources);
180+
testSupport.defineResources(createNonOperatorService());
181+
182+
DomainPresenceInfo info = new DomainPresenceInfo(domain);
183+
processor.makeRightDomainPresence(info, true, true, true);
184+
185+
assertThat(getRunningServices(), contains(createNonOperatorService()));
186+
assertThat(getRunningPods(), empty());
187+
}
188+
189+
private V1Service createNonOperatorService() {
190+
return new V1Service()
191+
.metadata(
192+
new V1ObjectMeta()
193+
.name("do-not-delete-service")
194+
.namespace(NS)
195+
.putLabelsItem("serviceType", "SERVER")
196+
.putLabelsItem(CREATEDBYOPERATOR_LABEL, "false")
197+
.putLabelsItem(DOMAINNAME_LABEL, UID)
198+
.putLabelsItem(DOMAINUID_LABEL, UID)
199+
.putLabelsItem(RESOURCE_VERSION_LABEL, DEFAULT_DOMAIN_VERSION)
200+
.putLabelsItem(SERVERNAME_LABEL, ADMIN_SERVER_NAME))
201+
.spec(new V1ServiceSpec().type("ClusterIP"));
202+
}
203+
156204
private Stream<V1Service> getServerServices() {
157205
return getRunningServices().stream().filter(ServiceHelper::isServerService);
158206
}

operator/src/test/java/oracle/kubernetes/operator/helpers/ServicePresenceTest.java

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

77
import static com.meterware.simplestub.Stub.createStrictStub;
88
import static oracle.kubernetes.operator.LabelConstants.CLUSTERNAME_LABEL;
9+
import static oracle.kubernetes.operator.LabelConstants.CREATEDBYOPERATOR_LABEL;
910
import static oracle.kubernetes.operator.LabelConstants.DOMAINUID_LABEL;
1011
import static oracle.kubernetes.operator.LabelConstants.SERVERNAME_LABEL;
1112
import static oracle.kubernetes.operator.ProcessingConstants.CLUSTER_NAME;
@@ -244,7 +245,11 @@ public void onDeleteEventWithNewerClusterService_removeIt() {
244245
@Test
245246
public void whenEventContainsServiceWithClusterNameAndNoTypeLabel_addAsClusterService() {
246247
V1Service service =
247-
new V1Service().metadata(createMetadata().putLabelsItem(CLUSTERNAME_LABEL, CLUSTER));
248+
new V1Service()
249+
.metadata(
250+
createMetadata()
251+
.putLabelsItem(CREATEDBYOPERATOR_LABEL, "true")
252+
.putLabelsItem(CLUSTERNAME_LABEL, CLUSTER));
248253
Watch.Response<V1Service> event = WatchEvent.createAddedEvent(service).toWatchResponse();
249254

250255
processor.dispatchServiceWatch(event);
@@ -372,6 +377,7 @@ public void whenEventContainsServiceWithServerNameAndNoTypeLabel_addAsServerServ
372377
new V1Service()
373378
.metadata(
374379
createMetadata()
380+
.putLabelsItem(CREATEDBYOPERATOR_LABEL, "true")
375381
.putLabelsItem(CLUSTERNAME_LABEL, CLUSTER)
376382
.putLabelsItem(SERVERNAME_LABEL, SERVER));
377383
Watch.Response<V1Service> event = WatchEvent.createAddedEvent(service).toWatchResponse();

0 commit comments

Comments
 (0)