Skip to content

Commit a595e10

Browse files
authored
Domain roll event tests (#2385)
* Domain roll event tests
1 parent 16e85de commit a595e10

File tree

4 files changed

+544
-7
lines changed

4 files changed

+544
-7
lines changed

integration-tests/src/test/java/oracle/weblogic/kubernetes/ItIntrospectVersion.java

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,7 @@
8686
import static oracle.weblogic.kubernetes.actions.TestActions.getNextIntrospectVersion;
8787
import static oracle.weblogic.kubernetes.actions.TestActions.getServiceNodePort;
8888
import static oracle.weblogic.kubernetes.actions.TestActions.getServicePort;
89+
import static oracle.weblogic.kubernetes.actions.TestActions.now;
8990
import static oracle.weblogic.kubernetes.actions.TestActions.patchDomainResourceWithNewIntrospectVersion;
9091
import static oracle.weblogic.kubernetes.actions.TestActions.scaleCluster;
9192
import static oracle.weblogic.kubernetes.actions.TestActions.uninstallNginx;
@@ -519,6 +520,7 @@ public void conditionEvaluated(EvaluatedCondition condition) {
519520
* Updates the admin server listen port using online WLST.
520521
* Patches the domain custom resource with introSpectVersion.
521522
* Verifies the introspector runs and pods are restated in a rolling fashion.
523+
* Verifies that the domain roll starting/pod cycle starting events are logged.
522524
* Verifies the new admin port of the admin server in services.
523525
* Verifies accessing sample application in admin server works.
524526
*/
@@ -573,6 +575,9 @@ public void testDomainIntrospectVersionRolling() {
573575
assertTrue(execResult.exitValue() == 0 || execResult.stderr() == null || execResult.stderr().isEmpty(),
574576
"Failed to change admin port number");
575577

578+
//needed for event verification
579+
OffsetDateTime timestamp = now();
580+
576581
patchDomainResourceWithNewIntrospectVersion(domainUid, introDomainNamespace);
577582

578583
//verify the introspector pod is created and runs
@@ -604,6 +609,30 @@ public void testDomainIntrospectVersionRolling() {
604609
checkPodReady(managedServerPodNamePrefix + i, domainUid, introDomainNamespace);
605610
}
606611

612+
/* commented due to bug Bugs - OWLS-89879
613+
//verify the introspectVersion change causes the domain roll events to be logged
614+
logger.info("verify domain roll starting/pod cycle starting/domain roll completed events are logged");
615+
checkEvent(opNamespace, introDomainNamespace, domainUid, DOMAIN_ROLL_STARTING,
616+
"Normal", timestamp, withStandardRetryPolicy);
617+
checkEvent(opNamespace, introDomainNamespace, domainUid, POD_CYCLE_STARTING,
618+
"Normal", timestamp, withStandardRetryPolicy);
619+
620+
CoreV1Event event = getEvent(opNamespace, introDomainNamespace,
621+
domainUid, DOMAIN_ROLL_STARTING, "Normal", timestamp);
622+
logger.info(Yaml.dump(event));
623+
logger.info("verify the event message contains the domain resource changed message");
624+
assertTrue(event.getMessage().contains("resource changed"));
625+
626+
event = getEvent(opNamespace, introDomainNamespace, domainUid, POD_CYCLE_STARTING, "Normal", timestamp);
627+
logger.info(Yaml.dump(event));
628+
logger.info("verify the event message contains the property changed in domain resource");
629+
assertTrue(event.getMessage().contains("ADMIN_PORT"));
630+
631+
checkEvent(opNamespace, introDomainNamespace, domainUid, DOMAIN_ROLL_COMPLETED,
632+
"Normal", timestamp, withStandardRetryPolicy);
633+
*/
634+
635+
607636
// verify the admin port is changed to newAdminPort
608637
assertEquals(newAdminPort, assertDoesNotThrow(()
609638
-> getServicePort(introDomainNamespace, getExternalServicePodName(adminServerPodName), "default"),

integration-tests/src/test/java/oracle/weblogic/kubernetes/ItKubernetesEvents.java

Lines changed: 165 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,11 @@
1111
import java.util.ArrayList;
1212
import java.util.Arrays;
1313
import java.util.List;
14+
import java.util.Map;
1415
import java.util.Properties;
1516

1617
import io.kubernetes.client.custom.V1Patch;
18+
import io.kubernetes.client.openapi.models.CoreV1Event;
1719
import io.kubernetes.client.openapi.models.V1Container;
1820
import io.kubernetes.client.openapi.models.V1EnvVar;
1921
import io.kubernetes.client.openapi.models.V1LocalObjectReference;
@@ -22,6 +24,7 @@
2224
import io.kubernetes.client.openapi.models.V1SecretReference;
2325
import io.kubernetes.client.openapi.models.V1Volume;
2426
import io.kubernetes.client.openapi.models.V1VolumeMount;
27+
import io.kubernetes.client.util.Yaml;
2528
import oracle.weblogic.domain.AdminServer;
2629
import oracle.weblogic.domain.AdminService;
2730
import oracle.weblogic.domain.Channel;
@@ -58,12 +61,15 @@
5861
import static oracle.weblogic.kubernetes.actions.TestActions.deleteDomainCustomResource;
5962
import static oracle.weblogic.kubernetes.actions.TestActions.deletePersistentVolume;
6063
import static oracle.weblogic.kubernetes.actions.TestActions.deletePersistentVolumeClaim;
64+
import static oracle.weblogic.kubernetes.actions.TestActions.getDomainCustomResource;
6165
import static oracle.weblogic.kubernetes.actions.TestActions.getNextIntrospectVersion;
6266
import static oracle.weblogic.kubernetes.actions.TestActions.getServiceNodePort;
6367
import static oracle.weblogic.kubernetes.actions.TestActions.getServicePort;
6468
import static oracle.weblogic.kubernetes.actions.TestActions.now;
6569
import static oracle.weblogic.kubernetes.actions.TestActions.scaleClusterWithRestApi;
6670
import static oracle.weblogic.kubernetes.actions.impl.Domain.patchDomainCustomResource;
71+
import static oracle.weblogic.kubernetes.assertions.TestAssertions.verifyRollingRestartOccurred;
72+
import static oracle.weblogic.kubernetes.utils.CommonPatchTestUtils.patchDomainResource;
6773
import static oracle.weblogic.kubernetes.utils.CommonTestUtils.checkPodDoesNotExist;
6874
import static oracle.weblogic.kubernetes.utils.CommonTestUtils.checkPodExists;
6975
import static oracle.weblogic.kubernetes.utils.CommonTestUtils.checkPodReady;
@@ -78,6 +84,7 @@
7884
import static oracle.weblogic.kubernetes.utils.CommonTestUtils.createSecretWithUsernamePassword;
7985
import static oracle.weblogic.kubernetes.utils.CommonTestUtils.getExternalServicePodName;
8086
import static oracle.weblogic.kubernetes.utils.CommonTestUtils.getIntrospectJobName;
87+
import static oracle.weblogic.kubernetes.utils.CommonTestUtils.getPodsWithTimeStamps;
8188
import static oracle.weblogic.kubernetes.utils.CommonTestUtils.installAndVerifyOperator;
8289
import static oracle.weblogic.kubernetes.utils.CommonTestUtils.setPodAntiAffinity;
8390
import static oracle.weblogic.kubernetes.utils.CommonTestUtils.upgradeAndVerifyOperator;
@@ -89,13 +96,17 @@
8996
import static oracle.weblogic.kubernetes.utils.K8sEvents.DOMAIN_PROCESSING_FAILED;
9097
import static oracle.weblogic.kubernetes.utils.K8sEvents.DOMAIN_PROCESSING_RETRYING;
9198
import static oracle.weblogic.kubernetes.utils.K8sEvents.DOMAIN_PROCESSING_STARTING;
99+
import static oracle.weblogic.kubernetes.utils.K8sEvents.DOMAIN_ROLL_COMPLETED;
100+
import static oracle.weblogic.kubernetes.utils.K8sEvents.DOMAIN_ROLL_STARTING;
92101
import static oracle.weblogic.kubernetes.utils.K8sEvents.DOMAIN_VALIDATION_ERROR;
93102
import static oracle.weblogic.kubernetes.utils.K8sEvents.NAMESPACE_WATCHING_STARTED;
103+
import static oracle.weblogic.kubernetes.utils.K8sEvents.POD_CYCLE_STARTING;
94104
import static oracle.weblogic.kubernetes.utils.K8sEvents.checkDomainEvent;
95105
import static oracle.weblogic.kubernetes.utils.K8sEvents.checkDomainEventWatchingStopped;
96106
import static oracle.weblogic.kubernetes.utils.K8sEvents.checkDomainEventWithCount;
97107
import static oracle.weblogic.kubernetes.utils.K8sEvents.domainEventExists;
98108
import static oracle.weblogic.kubernetes.utils.K8sEvents.getDomainEventCount;
109+
import static oracle.weblogic.kubernetes.utils.K8sEvents.getEvent;
99110
import static oracle.weblogic.kubernetes.utils.K8sEvents.getEventCount;
100111
import static oracle.weblogic.kubernetes.utils.ThreadSafeLogger.getLogger;
101112
import static oracle.weblogic.kubernetes.utils.WLSTUtils.executeWLSTScript;
@@ -492,11 +503,161 @@ public void testDomainK8sEventsProcessingFailed() {
492503
}
493504
}
494505

506+
/**
507+
* The test modifies the logHome property and verifies the domain roll events are logged.
508+
*/
509+
@Order(10)
510+
@Test
511+
@DisplayName("Verify logHome property change rolls domain and relevant events are logged")
512+
public void testLogHomeChangeEvents() {
513+
514+
OffsetDateTime timestamp = now();
515+
516+
// get the original domain resource before update
517+
Domain domain1 = assertDoesNotThrow(() -> getDomainCustomResource(domainUid, domainNamespace1),
518+
String.format("getDomainCustomResource failed with ApiException when tried to get domain %s in namespace %s",
519+
domainUid, domainNamespace1));
520+
521+
// get the map with server pods and their original creation timestamps
522+
Map<String, OffsetDateTime> podsWithTimeStamps = getPodsWithTimeStamps(domainNamespace1,
523+
adminServerPodName, managedServerPodNamePrefix, replicaCount);
524+
525+
//print out the original image name
526+
String logHome = domain1.getSpec().getLogHome();
527+
logger.info("Currently the log home used by the domain is: {0}", logHome);
528+
529+
//change logHome from /shared/logs to /shared/logs/logHome
530+
String patchStr = "["
531+
+ "{\"op\": \"replace\", \"path\": \"/spec/logHome\", \"value\": \"/shared/logs/logHome\"}"
532+
+ "]";
533+
logger.info("PatchStr for logHome: {0}", patchStr);
534+
535+
assertTrue(patchDomainResource(domainUid, domainNamespace1, new StringBuffer(patchStr)),
536+
"patchDomainCustomResource(logHome) failed");
537+
538+
domain1 = assertDoesNotThrow(() -> getDomainCustomResource(domainUid, domainNamespace1),
539+
String.format("getDomainCustomResource failed with ApiException when tried to get domain %s in namespace %s",
540+
domainUid, domainNamespace1));
541+
542+
//print out logHome in the new patched domain
543+
logger.info("In the new patched domain logHome is: {0}", domain1.getSpec().getLogHome());
544+
assertTrue(domain1.getSpec().getLogHome().equals("/shared/logs/logHome"), "logHome is not updated");
545+
546+
// verify the server pods are rolling restarted and back to ready state
547+
logger.info("Verifying rolling restart occurred for domain {0} in namespace {1}",
548+
domainUid, domainNamespace1);
549+
assertTrue(verifyRollingRestartOccurred(podsWithTimeStamps, 1, domainNamespace1),
550+
String.format("Rolling restart failed for domain %s in namespace %s", domainUid, domainNamespace1));
551+
552+
checkPodReadyAndServiceExists(adminServerPodName, domainUid, domainNamespace1);
553+
554+
for (int i = 1; i <= replicaCount; i++) {
555+
logger.info("Checking managed server service {0} is created in namespace {1}",
556+
managedServerPodNamePrefix + i, domainNamespace1);
557+
checkPodReadyAndServiceExists(managedServerPodNamePrefix + i, domainUid, domainNamespace1);
558+
}
559+
560+
//verify the logHome change causes the domain roll events to be logged
561+
logger.info("verify domain roll starting/pod cycle starting events are logged");
562+
checkEvent(opNamespace, domainNamespace1, domainUid, DOMAIN_ROLL_STARTING, "Normal", timestamp);
563+
checkEvent(opNamespace, domainNamespace1, domainUid, POD_CYCLE_STARTING, "Normal", timestamp);
564+
565+
CoreV1Event event = getEvent(opNamespace, domainNamespace1,
566+
domainUid, DOMAIN_ROLL_STARTING, "Normal", timestamp);
567+
logger.info(Yaml.dump(event));
568+
logger.info("verify the event message contains the logHome changed messages is logged");
569+
assertTrue(event.getMessage().contains("logHome"));
570+
571+
event = getEvent(opNamespace, domainNamespace1,
572+
domainUid, POD_CYCLE_STARTING, "Normal", timestamp);
573+
logger.info(Yaml.dump(event));
574+
logger.info("verify the event message contains the LOG_HOME changed messages is logged");
575+
assertTrue(event.getMessage().contains("LOG_HOME"));
576+
577+
checkEvent(opNamespace, domainNamespace1, domainUid, DOMAIN_ROLL_COMPLETED, "Normal", timestamp);
578+
}
579+
580+
581+
/**
582+
* The test modifies the includeServerOutInPodLog property and verifies the domain roll starting events are logged.
583+
*/
584+
@Order(11)
585+
@Test
586+
@DisplayName("Verify includeServerOutInPodLog property change rolls domain and relevant events are logged")
587+
public void testIncludeServerOutInPodLog() {
588+
589+
OffsetDateTime timestamp = now();
590+
591+
// get the original domain resource before update
592+
Domain domain1 = assertDoesNotThrow(() -> getDomainCustomResource(domainUid, domainNamespace1),
593+
String.format("getDomainCustomResource failed with ApiException when tried to get domain %s in namespace %s",
594+
domainUid, domainNamespace1));
595+
596+
// get the map with server pods and their original creation timestamps
597+
Map<String, OffsetDateTime> podsWithTimeStamps = getPodsWithTimeStamps(domainNamespace1,
598+
adminServerPodName, managedServerPodNamePrefix, replicaCount);
599+
600+
//print out the original includeServerOutInPodLog value
601+
boolean includeLogInPod = domain1.getSpec().includeServerOutInPodLog();
602+
logger.info("Currently the includeServerOutInPodLog used for the domain is: {0}", includeLogInPod);
603+
604+
//change includeServerOutInPodLog
605+
String patchStr = "["
606+
+ "{\"op\": \"replace\", \"path\": \"/spec/includeServerOutInPodLog\", "
607+
+ "\"value\": " + Boolean.toString(!includeLogInPod) + "}"
608+
+ "]";
609+
logger.info("PatchStr for includeServerOutInPodLog: {0}", patchStr);
610+
611+
assertTrue(patchDomainResource(domainUid, domainNamespace1, new StringBuffer(patchStr)),
612+
"patchDomainCustomResource(includeServerOutInPodLog) failed");
613+
614+
domain1 = assertDoesNotThrow(() -> getDomainCustomResource(domainUid, domainNamespace1),
615+
String.format("getDomainCustomResource failed with ApiException when tried to get domain %s in namespace %s",
616+
domainUid, domainNamespace1));
617+
618+
//print out includeServerOutInPodLog in the new patched domain
619+
logger.info("In the new patched domain includeServerOutInPodLog is: {0}",
620+
domain1.getSpec().includeServerOutInPodLog());
621+
assertTrue(domain1.getSpec().includeServerOutInPodLog() != includeLogInPod,
622+
"includeServerOutInPodLog is not updated");
623+
624+
// verify the server pods are rolling restarted and back to ready state
625+
logger.info("Verifying rolling restart occurred for domain {0} in namespace {1}",
626+
domainUid, domainNamespace1);
627+
assertTrue(verifyRollingRestartOccurred(podsWithTimeStamps, 1, domainNamespace1),
628+
String.format("Rolling restart failed for domain %s in namespace %s", domainUid, domainNamespace1));
629+
630+
checkPodReadyAndServiceExists(adminServerPodName, domainUid, domainNamespace1);
631+
632+
for (int i = 1; i <= replicaCount; i++) {
633+
logger.info("Checking managed server service {0} is created in namespace {1}",
634+
managedServerPodNamePrefix + i, domainNamespace1);
635+
checkPodReadyAndServiceExists(managedServerPodNamePrefix + i, domainUid, domainNamespace1);
636+
}
637+
638+
//verify the includeServerOutInPodLog change causes the domain roll events to be logged
639+
logger.info("verify domain roll starting/pod cycle starting events are logged");
640+
checkEvent(opNamespace, domainNamespace1, domainUid, DOMAIN_ROLL_STARTING, "Normal", timestamp);
641+
checkEvent(opNamespace, domainNamespace1, domainUid, POD_CYCLE_STARTING, "Normal", timestamp);
642+
643+
CoreV1Event event = getEvent(opNamespace, domainNamespace1,
644+
domainUid, DOMAIN_ROLL_STARTING, "Normal", timestamp);
645+
logger.info(Yaml.dump(event));
646+
logger.info("verify the event message contains the includeServerOutInPodLog changed messages is logged");
647+
assertTrue(event.getMessage().contains("isIncludeServerOutInPodLog"));
648+
649+
event = getEvent(opNamespace, domainNamespace1, domainUid, POD_CYCLE_STARTING, "Normal", timestamp);
650+
logger.info(Yaml.dump(event));
651+
logger.info("verify the event message contains the SERVER_OUT_IN_POD_LOG changed messages is logged");
652+
assertTrue(event.getMessage().contains("SERVER_OUT_IN_POD_LOG"));
653+
654+
checkEvent(opNamespace, domainNamespace1, domainUid, DOMAIN_ROLL_COMPLETED, "Normal", timestamp);
655+
}
495656

496657
/**
497658
* Test DomainDeleted event is logged when domain resource is deleted.
498659
*/
499-
@Order(10)
660+
@Order(13)
500661
@Test
501662
@DisplayName("Test domain events for various domain life cycle changes")
502663
public void testDomainK8SEventsDelete() {
@@ -529,7 +690,7 @@ public void testDomainK8SEventsDelete() {
529690
* </pre>
530691
* </p>
531692
*/
532-
@Order(11)
693+
@Order(14)
533694
@ParameterizedTest
534695
@ValueSource(booleans = { true, false })
535696
public void testK8SEventsStartStopWatchingNS(boolean enableClusterRoleBinding) {
@@ -580,7 +741,7 @@ public void testK8SEventsStartStopWatchingNS(boolean enableClusterRoleBinding) {
580741
* </pre>
581742
* </p>
582743
*/
583-
@Order(13)
744+
@Order(15)
584745
@ParameterizedTest
585746
@ValueSource(booleans = { true, false })
586747
public void testK8SEventsStartStopWatchingNSWithLabelSelector(boolean enableClusterRoleBinding) {
@@ -646,7 +807,7 @@ public void testK8SEventsStartStopWatchingNSWithLabelSelector(boolean enableClus
646807
* </pre>
647808
* </p>
648809
*/
649-
@Order(15)
810+
@Order(16)
650811
@ParameterizedTest
651812
@ValueSource(booleans = { true, false })
652813
public void testK8SEventsStartStopWatchingNSWithRegExp(boolean enableClusterRoleBinding) {

0 commit comments

Comments
 (0)