Skip to content

Commit 0e944bb

Browse files
committed
Merge branch 'main' of https://github.com/oracle/weblogic-kubernetes-operator into xc-91861
2 parents f8d6ca5 + 2da56fe commit 0e944bb

File tree

11 files changed

+842
-49
lines changed

11 files changed

+842
-49
lines changed

integration-tests/pom.xml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -282,6 +282,15 @@
282282
</includes-failsafe>
283283
</properties>
284284
</profile>
285+
<profile>
286+
<id>resilience</id>
287+
<properties>
288+
<skipITs>false</skipITs>
289+
<includes-failsafe>
290+
**/ItResilience
291+
</includes-failsafe>
292+
</properties>
293+
</profile>
285294
<profile>
286295
<id>kind-sequential</id>
287296
<properties>

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

Lines changed: 23 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
import oracle.weblogic.kubernetes.logging.LoggingFacade;
3535
import oracle.weblogic.kubernetes.utils.ExecResult;
3636
import org.junit.jupiter.api.BeforeAll;
37+
import org.junit.jupiter.api.BeforeEach;
3738
import org.junit.jupiter.api.DisplayName;
3839
import org.junit.jupiter.api.Test;
3940

@@ -53,7 +54,7 @@
5354
import static oracle.weblogic.kubernetes.assertions.TestAssertions.domainExists;
5455
import static oracle.weblogic.kubernetes.utils.ApplicationUtils.checkAppIsActive;
5556
import static oracle.weblogic.kubernetes.utils.BuildApplication.buildApplication;
56-
import static oracle.weblogic.kubernetes.utils.CommonTestUtils.checkServiceExists;
57+
import static oracle.weblogic.kubernetes.utils.CommonTestUtils.checkPodReadyAndServiceExists;
5758
import static oracle.weblogic.kubernetes.utils.CommonTestUtils.getNextFreePort;
5859
import static oracle.weblogic.kubernetes.utils.CommonTestUtils.testUntil;
5960
import static oracle.weblogic.kubernetes.utils.DbUtils.getDBNodePort;
@@ -66,8 +67,6 @@
6667
import static oracle.weblogic.kubernetes.utils.ImageUtils.createSecretForBaseImages;
6768
import static oracle.weblogic.kubernetes.utils.ImageUtils.dockerLoginAndPushImageToRegistry;
6869
import static oracle.weblogic.kubernetes.utils.OperatorUtils.installAndVerifyOperator;
69-
import static oracle.weblogic.kubernetes.utils.PodUtils.checkPodExists;
70-
import static oracle.weblogic.kubernetes.utils.PodUtils.checkPodReady;
7170
import static oracle.weblogic.kubernetes.utils.PodUtils.getExternalServicePodName;
7271
import static oracle.weblogic.kubernetes.utils.PodUtils.setPodAntiAffinity;
7372
import static oracle.weblogic.kubernetes.utils.SecretUtils.createSecretWithUsernamePassword;
@@ -156,10 +155,26 @@ public static void initAll(@Namespaces(3) List<String> namespaces) {
156155

157156
// install and verify operator
158157
installAndVerifyOperator(opNamespace, domain1Namespace, domain2Namespace);
159-
160158
buildApplicationsAndDomains();
161159
}
162160

161+
/**
162+
* Verify all server pods are running.
163+
* Verify k8s services for all servers are created.
164+
*/
165+
@BeforeEach
166+
public void beforeEach() {
167+
int replicaCount = 2;
168+
for (int i = 1; i <= replicaCount; i++) {
169+
checkPodReadyAndServiceExists(domain2ManagedServerPrefix + i,
170+
domainUid2, domain2Namespace);
171+
}
172+
for (int i = 1; i <= replicaCount; i++) {
173+
checkPodReadyAndServiceExists(domain1ManagedServerPrefix + i,
174+
domainUid1, domain1Namespace);
175+
}
176+
}
177+
163178
private static void updatePropertyFile() {
164179
//create a temporary directory to copy and update the properties file
165180
Path target = Paths.get(PROPS_TEMP_DIR);
@@ -482,38 +497,16 @@ private static void createDomain(String domainUid, String domainNamespace, Strin
482497
);
483498

484499
// check admin server pod exists
500+
// check admin server services created
485501
logger.info("Check for admin server pod {0} existence in namespace {1}",
486502
adminServerPodName, domainNamespace);
487-
checkPodExists(adminServerPodName, domainUid, domainNamespace);
488-
503+
checkPodReadyAndServiceExists(adminServerPodName, domainUid, domainNamespace);
489504
// check managed server pods exist
490-
for (int i = 1; i <= replicaCount; i++) {
491-
logger.info("Check for managed server pod {0} existence in namespace {1}",
492-
managedServerPrefix + i, domainNamespace);
493-
checkPodExists(managedServerPrefix + i, domainUid, domainNamespace);
494-
}
495-
496-
// check admin server pod is ready
497-
logger.info("Wait for admin server pod {0} to be ready in namespace {1}",
498-
adminServerPodName, domainNamespace);
499-
checkPodReady(adminServerPodName, domainUid, domainNamespace);
500-
501-
// check managed server pods are ready
502-
for (int i = 1; i <= replicaCount; i++) {
503-
logger.info("Wait for managed server pod {0} to be ready in namespace {1}",
504-
managedServerPrefix + i, domainNamespace);
505-
checkPodReady(managedServerPrefix + i, domainUid, domainNamespace);
506-
}
507-
508-
logger.info("Check admin service {0} is created in namespace {1}",
509-
adminServerPodName, domainNamespace);
510-
checkServiceExists(adminServerPodName, domainNamespace);
511-
512505
// check managed server services created
513506
for (int i = 1; i <= replicaCount; i++) {
514-
logger.info("Check managed server service {0} is created in namespace {1}",
507+
logger.info("Check for managed server pod {0} existence in namespace {1}",
515508
managedServerPrefix + i, domainNamespace);
516-
checkServiceExists(managedServerPrefix + i, domainNamespace);
509+
checkPodReadyAndServiceExists(managedServerPrefix + i, domainUid, domainNamespace);
517510
}
518511

519512
logger.info("Getting node port");

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

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
import oracle.weblogic.kubernetes.logging.LoggingFacade;
3535
import oracle.weblogic.kubernetes.utils.ExecResult;
3636
import org.junit.jupiter.api.BeforeAll;
37+
import org.junit.jupiter.api.BeforeEach;
3738
import org.junit.jupiter.api.DisplayName;
3839
import org.junit.jupiter.api.Test;
3940

@@ -55,6 +56,7 @@
5556
import static oracle.weblogic.kubernetes.utils.ApplicationUtils.checkAppIsActive;
5657
import static oracle.weblogic.kubernetes.utils.ApplicationUtils.checkAppUsingHostHeader;
5758
import static oracle.weblogic.kubernetes.utils.BuildApplication.buildApplication;
59+
import static oracle.weblogic.kubernetes.utils.CommonTestUtils.checkPodReadyAndServiceExists;
5860
import static oracle.weblogic.kubernetes.utils.CommonTestUtils.checkServiceExists;
5961
import static oracle.weblogic.kubernetes.utils.CommonTestUtils.getNextFreePort;
6062
import static oracle.weblogic.kubernetes.utils.CommonTestUtils.testUntil;
@@ -162,12 +164,26 @@ public static void initAll(@Namespaces(3) List<String> namespaces) {
162164
assertDoesNotThrow(() -> addLabelsToNamespace(domain1Namespace,labelMap));
163165
assertDoesNotThrow(() -> addLabelsToNamespace(domain2Namespace,labelMap));
164166
assertDoesNotThrow(() -> addLabelsToNamespace(opNamespace,labelMap));
165-
166167
// install and verify operator
167168
installAndVerifyOperator(opNamespace, domain1Namespace, domain2Namespace);
168-
169169
buildApplicationsAndDomains();
170+
}
170171

172+
/**
173+
* Verify all server pods are running.
174+
* Verify k8s services for all servers are created.
175+
*/
176+
@BeforeEach
177+
public void beforeEach() {
178+
int replicaCount = 2;
179+
for (int i = 1; i <= replicaCount; i++) {
180+
checkPodReadyAndServiceExists(domain2ManagedServerPrefix + i,
181+
domainUid2, domain2Namespace);
182+
}
183+
for (int i = 1; i <= replicaCount; i++) {
184+
checkPodReadyAndServiceExists(domain1ManagedServerPrefix + i,
185+
domainUid1, domain1Namespace);
186+
}
171187
}
172188

173189
private static void updatePropertyFile() {
@@ -539,7 +555,6 @@ private static void createDomain(String domainUid, String domainNamespace, Strin
539555
managedServerPrefix + i, domainNamespace);
540556
checkPodReady(managedServerPrefix + i, domainUid, domainNamespace);
541557
}
542-
543558
}
544559

545560
private static void createDomainResource(String domainUid, String domNamespace, String adminSecretName,
Lines changed: 179 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,179 @@
1+
// Copyright (c) 2021, Oracle and/or its affiliates.
2+
// Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl.
3+
4+
package oracle.weblogic.kubernetes;
5+
6+
import java.util.List;
7+
8+
import oracle.weblogic.kubernetes.actions.impl.primitive.Slammer;
9+
import oracle.weblogic.kubernetes.actions.impl.primitive.SlammerParams;
10+
import oracle.weblogic.kubernetes.annotations.IntegrationTest;
11+
import oracle.weblogic.kubernetes.annotations.Namespaces;
12+
import oracle.weblogic.kubernetes.logging.LoggingFacade;
13+
import oracle.weblogic.kubernetes.utils.SlammerUtils;
14+
import org.awaitility.core.ConditionFactory;
15+
import org.junit.jupiter.api.BeforeAll;
16+
import org.junit.jupiter.api.DisplayName;
17+
import org.junit.jupiter.api.Test;
18+
19+
import static java.util.concurrent.TimeUnit.MINUTES;
20+
import static java.util.concurrent.TimeUnit.SECONDS;
21+
import static oracle.weblogic.kubernetes.TestConstants.ADMIN_SERVER_NAME_BASE;
22+
import static oracle.weblogic.kubernetes.TestConstants.MANAGED_SERVER_NAME_BASE;
23+
import static oracle.weblogic.kubernetes.TestConstants.MII_BASIC_IMAGE_NAME;
24+
import static oracle.weblogic.kubernetes.TestConstants.MII_BASIC_IMAGE_TAG;
25+
import static oracle.weblogic.kubernetes.actions.TestActions.scaleCluster;
26+
import static oracle.weblogic.kubernetes.utils.CommonMiiTestUtils.createMiiDomainAndVerify;
27+
import static oracle.weblogic.kubernetes.utils.CommonTestUtils.checkPodReadyAndServiceExists;
28+
import static oracle.weblogic.kubernetes.utils.OperatorUtils.installAndVerifyOperator;
29+
import static oracle.weblogic.kubernetes.utils.ThreadSafeLogger.getLogger;
30+
import static org.awaitility.Awaitility.with;
31+
import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
32+
import static org.junit.jupiter.api.Assertions.assertNotNull;
33+
import static org.junit.jupiter.api.Assertions.assertTrue;
34+
35+
36+
// Test resilience using slammer
37+
@DisplayName("Test resilience using slammer")
38+
@IntegrationTest
39+
class ItResilience {
40+
private static String opNamespace = null;
41+
private static String domainNamespace = null;
42+
private static String domainUid = "domain1";
43+
private static ConditionFactory withStandardRetryPolicy = null;
44+
45+
private static String adminServerPodName = String.format("%s-%s", domainUid, ADMIN_SERVER_NAME_BASE);
46+
private static String managedServerPrefix = String.format("%s-%s", domainUid, MANAGED_SERVER_NAME_BASE);
47+
private static int replicaCount = 2;
48+
private static LoggingFacade logger = null;
49+
private static String ingressHost = null; //only used for OKD
50+
51+
/**
52+
* Perform initialization for all the tests in this class.
53+
* Set up the necessary namespaces, install the operator in the first namespace, and
54+
* create a domain in the second namespace using the pre-created basic MII image.
55+
*
56+
* @param namespaces list of namespaces created by the IntegrationTestWatcher by the
57+
* JUnit engine parameter resolution mechanism
58+
*/
59+
@BeforeAll
60+
public static void initAll(@Namespaces(2) List<String> namespaces) {
61+
logger = getLogger();
62+
// create standard, reusable retry/backoff policy
63+
withStandardRetryPolicy = with().pollDelay(2, SECONDS)
64+
.and().with().pollInterval(10, SECONDS)
65+
.atMost(6, MINUTES).await();
66+
67+
//install slammer
68+
Slammer.installSlammer();
69+
70+
//check if slammer is up
71+
assertTrue(Slammer.list("network"), "Can't reach slammer");
72+
// get namespaces
73+
assertNotNull(namespaces.get(0), "Namespace namespaces.get(0) is null");
74+
opNamespace = namespaces.get(0);
75+
76+
assertNotNull(namespaces.get(1), "Namespace namespaces.get(1) is null");
77+
domainNamespace = namespaces.get(1);
78+
79+
// install the operator
80+
logger.info("Install an operator in namespace {0}, managing namespace {1}",
81+
opNamespace, domainNamespace);
82+
installAndVerifyOperator(opNamespace, domainNamespace);
83+
84+
// create a domain resource
85+
logger.info("Create model-in-image domain {0} in namespace {1}, and wait until it comes up",
86+
domainUid, domainNamespace);
87+
createMiiDomainAndVerify(
88+
domainNamespace,
89+
domainUid,
90+
MII_BASIC_IMAGE_NAME + ":" + MII_BASIC_IMAGE_TAG,
91+
adminServerPodName,
92+
managedServerPrefix,
93+
replicaCount);
94+
}
95+
96+
/**
97+
* verify the cluster is scaled up.
98+
*/
99+
@Test
100+
@DisplayName("increase replica count for the domain, and verify cluster is scaled up")
101+
void testNetworkDelayVerifyScaling() {
102+
103+
try {
104+
//check if slammer is up
105+
assertTrue(Slammer.list("network"), "Can't reach slammer");
106+
107+
// check new server is started and existing servers are running
108+
logger.info("Check admin service and pod {0} is created in namespace {1}",
109+
adminServerPodName, domainNamespace);
110+
checkPodReadyAndServiceExists(adminServerPodName, domainUid, domainNamespace);
111+
112+
// check managed server services and pods are ready
113+
for (int i = 1; i <= replicaCount; i++) {
114+
logger.info("Wait for managed server pod {0} to be ready in namespace {1}",
115+
managedServerPrefix + i, domainNamespace);
116+
checkPodReadyAndServiceExists(managedServerPrefix + i, domainUid, domainNamespace);
117+
}
118+
119+
Thread t2 = new ScalingUpThread(5);
120+
SlammerParams params = new SlammerParams().delay("9");
121+
Thread t1 = new SlammerThread(params);
122+
t1.start();
123+
t2.start();
124+
125+
assertDoesNotThrow(() -> t2.join(100 * 1000), "failed to join thread");
126+
assertDoesNotThrow(() -> t1.join(100 * 1000), "failed to join thread");
127+
// check managed server services and pods are ready
128+
for (int i = 1; i <= 5; i++) {
129+
logger.info("Wait for managed server pod {0} to be ready in namespace {1}",
130+
managedServerPrefix + i, domainNamespace);
131+
checkPodReadyAndServiceExists(managedServerPrefix + i, domainUid, domainNamespace);
132+
}
133+
} finally {
134+
SlammerUtils.deleteNetworkLatencyDelay();
135+
}
136+
}
137+
138+
private void runScaleOperation(int replicaCount) {
139+
// scale up the domain by increasing replica count
140+
boolean scalingSuccess = assertDoesNotThrow(() ->
141+
scaleCluster(domainUid, domainNamespace, "cluster-1", replicaCount),
142+
String.format("Scaling the cluster cluster-1 of domain %s in namespace %s failed", domainUid, domainNamespace));
143+
assertTrue(scalingSuccess,
144+
String.format("Cluster scaling failed for domain %s in namespace %s", domainUid, domainNamespace));
145+
}
146+
147+
class ScalingUpThread extends Thread {
148+
int replicaCount;
149+
150+
ScalingUpThread(int replicaCount) {
151+
this.replicaCount = replicaCount;
152+
}
153+
154+
public void run() {
155+
logger.info("Started Scaling thread");
156+
runScaleOperation(replicaCount);
157+
logger.info("Finished Scaling thread");
158+
}
159+
}
160+
161+
class SlammerThread extends Thread {
162+
SlammerParams params;
163+
164+
SlammerThread(SlammerParams params) {
165+
this.params = params;
166+
167+
}
168+
169+
public void run() {
170+
logger.info("Started Slammer thread");
171+
logger.info("Adding Network delay for " + params.getDelay());
172+
Slammer.list("network");
173+
assertTrue(SlammerUtils.addNetworkLatencyDelay(params.getDelay()), "addNetworkLatencyDelay failed");
174+
Slammer.list("network");
175+
logger.info("Finished Slammer thread");
176+
}
177+
}
178+
179+
}

0 commit comments

Comments
 (0)