Skip to content

Commit 53249b4

Browse files
committed
Merge branch 'xc-111302-41' into 'release/4.1'
backport Automate WLS/JRF Domain on PV sample tests to release/4.1 See merge request weblogic-cloud/weblogic-kubernetes-operator!4390
2 parents 748c717 + d1ec382 commit 53249b4

File tree

16 files changed

+593
-2255
lines changed

16 files changed

+593
-2255
lines changed

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

Lines changed: 0 additions & 494 deletions
This file was deleted.
Lines changed: 302 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,302 @@
1+
// Copyright (c) 2023, 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.HashMap;
7+
import java.util.List;
8+
import java.util.Map;
9+
10+
import oracle.weblogic.kubernetes.actions.impl.primitive.Command;
11+
import oracle.weblogic.kubernetes.actions.impl.primitive.CommandParams;
12+
import oracle.weblogic.kubernetes.annotations.IntegrationTest;
13+
import oracle.weblogic.kubernetes.annotations.Namespaces;
14+
import oracle.weblogic.kubernetes.logging.LoggingFacade;
15+
import oracle.weblogic.kubernetes.utils.ExecResult;
16+
import org.junit.jupiter.api.AfterAll;
17+
import org.junit.jupiter.api.Assumptions;
18+
import org.junit.jupiter.api.BeforeAll;
19+
import org.junit.jupiter.api.DisplayName;
20+
import org.junit.jupiter.api.MethodOrderer;
21+
import org.junit.jupiter.api.Order;
22+
import org.junit.jupiter.api.Tag;
23+
import org.junit.jupiter.api.Test;
24+
import org.junit.jupiter.api.TestMethodOrder;
25+
import org.junit.jupiter.api.condition.DisabledIfEnvironmentVariable;
26+
27+
import static oracle.weblogic.kubernetes.TestConstants.BASE_IMAGES_REPO_SECRET_NAME;
28+
import static oracle.weblogic.kubernetes.TestConstants.BUSYBOX_IMAGE;
29+
import static oracle.weblogic.kubernetes.TestConstants.BUSYBOX_TAG;
30+
import static oracle.weblogic.kubernetes.TestConstants.DB_IMAGE_NAME;
31+
import static oracle.weblogic.kubernetes.TestConstants.DB_IMAGE_TAG;
32+
import static oracle.weblogic.kubernetes.TestConstants.FMWINFRA_IMAGE_TAG;
33+
import static oracle.weblogic.kubernetes.TestConstants.FMWINFRA_IMAGE_TO_USE_IN_SPEC;
34+
import static oracle.weblogic.kubernetes.TestConstants.K8S_NODEPORT_HOST;
35+
import static oracle.weblogic.kubernetes.TestConstants.KIND_CLUSTER;
36+
import static oracle.weblogic.kubernetes.TestConstants.KIND_REPO;
37+
import static oracle.weblogic.kubernetes.TestConstants.OKD;
38+
import static oracle.weblogic.kubernetes.TestConstants.RESULTS_ROOT;
39+
import static oracle.weblogic.kubernetes.TestConstants.TEST_IMAGES_REPO_SECRET_NAME;
40+
import static oracle.weblogic.kubernetes.TestConstants.TRAEFIK_INGRESS_IMAGE_NAME;
41+
import static oracle.weblogic.kubernetes.TestConstants.TRAEFIK_INGRESS_IMAGE_REGISTRY;
42+
import static oracle.weblogic.kubernetes.TestConstants.TRAEFIK_INGRESS_IMAGE_TAG;
43+
import static oracle.weblogic.kubernetes.TestConstants.TRAEFIK_RELEASE_NAME;
44+
import static oracle.weblogic.kubernetes.actions.ActionConstants.WDT_DOWNLOAD_URL;
45+
import static oracle.weblogic.kubernetes.actions.ActionConstants.WIT_DOWNLOAD_URL;
46+
import static oracle.weblogic.kubernetes.actions.ActionConstants.WIT_JAVA_HOME;
47+
import static oracle.weblogic.kubernetes.actions.TestActions.imagePull;
48+
import static oracle.weblogic.kubernetes.actions.TestActions.imagePush;
49+
import static oracle.weblogic.kubernetes.actions.TestActions.imageTag;
50+
import static oracle.weblogic.kubernetes.utils.CommonTestUtils.getUniqueName;
51+
import static oracle.weblogic.kubernetes.utils.ImageUtils.createBaseRepoSecret;
52+
import static oracle.weblogic.kubernetes.utils.ImageUtils.createTestRepoSecret;
53+
import static oracle.weblogic.kubernetes.utils.ThreadSafeLogger.getLogger;
54+
import static org.junit.jupiter.api.Assertions.assertNotNull;
55+
import static org.junit.jupiter.api.Assertions.assertTrue;
56+
57+
/**
58+
* Test and verify Domain on PV FMW domain sample.
59+
*/
60+
@DisplayName("test domain on pv sample for FMW domain")
61+
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
62+
@IntegrationTest
63+
@Tag("kind-sequential")
64+
@DisabledIfEnvironmentVariable(named = "SKIP_WLS_SAMPLES", matches = "true")
65+
class ItFmwDomainOnPVSample {
66+
67+
private static final String domainOnPvSampleScript = "../operator/integration-tests/domain-on-pv/run-test.sh";
68+
private static final String DOMAIN_CREATION_IMAGE_NAME = "wdt-domain-image";
69+
private static final String DOMAIN_CREATION_IMAGE_JRF_TAG = "JRF-v1";
70+
private static String traefikNamespace = null;
71+
private static Map<String, String> envMap = null;
72+
private static LoggingFacade logger = null;
73+
74+
private boolean previousTestSuccessful = true;
75+
76+
/**
77+
* Create namespaces and set environment variables for the test.
78+
* @param namespaces list of namespaces created by the IntegrationTestWatcher by the
79+
* JUnit engine parameter resolution mechanism
80+
*/
81+
@BeforeAll
82+
public static void initAll(@Namespaces(4) List<String> namespaces) {
83+
logger = getLogger();
84+
85+
// get a new unique opNamespace
86+
logger.info("Creating unique namespace for Operator");
87+
assertNotNull(namespaces.get(0), "Namespace list is null");
88+
String opNamespace = namespaces.get(0);
89+
90+
logger.info("Creating unique namespace for Domain");
91+
assertNotNull(namespaces.get(1), "Namespace list is null");
92+
String domainNamespace = namespaces.get(1);
93+
94+
logger.info("Creating unique namespace for Traefik");
95+
assertNotNull(namespaces.get(2), "Namespace list is null");
96+
traefikNamespace = namespaces.get(2);
97+
98+
logger.info("Creating unique namespace for db");
99+
assertNotNull(namespaces.get(3), "Namespace list is null");
100+
String dbNamespace = namespaces.get(3);
101+
102+
String domainOnPvSampleWorkDir =
103+
RESULTS_ROOT + "/" + domainNamespace + "/domain-on-pv-sample-work-dir";
104+
105+
// env variables to override default values in sample scripts
106+
envMap = new HashMap<>();
107+
envMap.put("OPER_NAMESPACE", opNamespace);
108+
envMap.put("DOMAIN_NAMESPACE", domainNamespace);
109+
envMap.put("DB_NAMESPACE", dbNamespace);
110+
envMap.put("DOMAIN_UID1", getUniqueName("fmw-sample-domain-"));
111+
envMap.put("TRAEFIK_NAMESPACE", traefikNamespace);
112+
envMap.put("TRAEFIK_HTTP_NODEPORT", "0"); // 0-->dynamically choose the np
113+
envMap.put("TRAEFIK_HTTPS_NODEPORT", "0"); // 0-->dynamically choose the np
114+
envMap.put("TRAEFIK_NAME", TRAEFIK_RELEASE_NAME + "-" + traefikNamespace.substring(3));
115+
envMap.put("TRAEFIK_IMAGE_REGISTRY", TRAEFIK_INGRESS_IMAGE_REGISTRY);
116+
envMap.put("TRAEFIK_IMAGE_REPOSITORY", TRAEFIK_INGRESS_IMAGE_NAME);
117+
envMap.put("TRAEFIK_IMAGE_TAG", TRAEFIK_INGRESS_IMAGE_TAG);
118+
envMap.put("WORKDIR", domainOnPvSampleWorkDir);
119+
envMap.put("BASE_IMAGE_NAME", FMWINFRA_IMAGE_TO_USE_IN_SPEC
120+
.substring(0, FMWINFRA_IMAGE_TO_USE_IN_SPEC.lastIndexOf(":")));
121+
envMap.put("BASE_IMAGE_TAG", FMWINFRA_IMAGE_TAG);
122+
envMap.put("DB_IMAGE_NAME", DB_IMAGE_NAME);
123+
envMap.put("DB_IMAGE_TAG", DB_IMAGE_TAG);
124+
envMap.put("IMAGE_PULL_SECRET_NAME", BASE_IMAGES_REPO_SECRET_NAME);
125+
envMap.put("DOMAIN_IMAGE_PULL_SECRET_NAME", TEST_IMAGES_REPO_SECRET_NAME);
126+
envMap.put("K8S_NODEPORT_HOST", K8S_NODEPORT_HOST);
127+
envMap.put("OKD", "" + OKD);
128+
envMap.put("KIND_CLUSTER", "" + KIND_CLUSTER);
129+
130+
// kind cluster uses openjdk which is not supported by image tool
131+
if (WIT_JAVA_HOME != null) {
132+
envMap.put("JAVA_HOME", WIT_JAVA_HOME);
133+
}
134+
135+
if (WIT_DOWNLOAD_URL != null) {
136+
envMap.put("WIT_INSTALLER_URL", WIT_DOWNLOAD_URL);
137+
}
138+
139+
if (WDT_DOWNLOAD_URL != null) {
140+
envMap.put("WDT_INSTALLER_URL", WDT_DOWNLOAD_URL);
141+
}
142+
logger.info("Environment variables to the script {0}", envMap);
143+
144+
logger.info("Setting up image registry secrets");
145+
// Create the repo secret to pull the domain image
146+
// this secret is used only for non-kind cluster
147+
createTestRepoSecret(domainNamespace);
148+
logger.info("Registry secret {0} created for domain image successfully in namespace {1}",
149+
TEST_IMAGES_REPO_SECRET_NAME, domainNamespace);
150+
// Create the repo secret to pull the base image
151+
// this secret is used only for non-kind cluster
152+
createBaseRepoSecret(domainNamespace);
153+
logger.info("Registry secret {0} for base image created successfully in namespace {1}",
154+
BASE_IMAGES_REPO_SECRET_NAME, domainNamespace);
155+
// create ocr/ocir image registry secret to pull the db images
156+
// this secret is used only for non-kind cluster
157+
createBaseRepoSecret(dbNamespace);
158+
logger.info("Registry secret {0} created successfully in namespace {1}",
159+
BASE_IMAGES_REPO_SECRET_NAME, dbNamespace);
160+
}
161+
162+
/**
163+
* Test Domain on PV sample install operator use case.
164+
*/
165+
@Test
166+
@Order(1)
167+
public void testInstallOperator() {
168+
execTestScriptAndAssertSuccess("-oper", "Failed to run -oper");
169+
}
170+
171+
/**
172+
* Test Domain on PV sample install Traefik use case.
173+
*/
174+
@Test
175+
@Order(2)
176+
public void testInstallTraefik() {
177+
execTestScriptAndAssertSuccess("-traefik", "Failed to run -traefik");
178+
}
179+
180+
/**
181+
* Test Domain on PV sample precleandb use case.
182+
*/
183+
@Test
184+
@Order(3)
185+
public void testPrecleandb() {
186+
execTestScriptAndAssertSuccess("-precleandb", "Failed to run -precleandb");
187+
}
188+
189+
/**
190+
* Test Domain on PV sample create db use case.
191+
*/
192+
@Test
193+
@Order(4)
194+
public void testCreatedb() {
195+
logger.info("test case for creating a db");
196+
if (KIND_REPO != null) {
197+
String dbimage = DB_IMAGE_NAME + ":" + DB_IMAGE_TAG;
198+
logger.info("loading image {0} to kind", dbimage);
199+
imagePush(dbimage);
200+
}
201+
execTestScriptAndAssertSuccess("-db", "Failed to run -db");
202+
}
203+
204+
/**
205+
* Test Domain on PV sample building image for FMW domain use case.
206+
*/
207+
@Test
208+
@Order(5)
209+
public void testInitialImage() {
210+
logger.info("test case for building image");
211+
imagePull(BUSYBOX_IMAGE + ":" + BUSYBOX_TAG);
212+
imageTag(BUSYBOX_IMAGE + ":" + BUSYBOX_TAG, "busybox");
213+
execTestScriptAndAssertSuccess("-initial-image", "Failed to run -initial-image");
214+
215+
// load the image to kind if using kind cluster
216+
if (KIND_REPO != null) {
217+
String imageCreated = DOMAIN_CREATION_IMAGE_NAME + ":" + DOMAIN_CREATION_IMAGE_JRF_TAG;
218+
logger.info("loading image {0} to kind", imageCreated);
219+
imagePush(imageCreated);
220+
}
221+
}
222+
223+
/**
224+
* Test Domain on PV sample create FMW domain use case.
225+
*/
226+
@Test
227+
@Order(6)
228+
public void testInitialMain() {
229+
logger.info("test case for creating a FMW domain");
230+
231+
// load the base image to kind if using kind cluster
232+
if (KIND_REPO != null) {
233+
logger.info("loading image {0} to kind", FMWINFRA_IMAGE_TO_USE_IN_SPEC);
234+
imagePush(FMWINFRA_IMAGE_TO_USE_IN_SPEC);
235+
}
236+
237+
execTestScriptAndAssertSuccess("-initial-main", "Failed to run -initial-main");
238+
}
239+
240+
/**
241+
* Run script run-test.sh.
242+
* @param arg arguments to execute script
243+
* @param errString a string of detailed error
244+
*/
245+
private void execTestScriptAndAssertSuccess(String arg,
246+
String errString) {
247+
248+
Assumptions.assumeTrue(previousTestSuccessful);
249+
previousTestSuccessful = false;
250+
251+
String command = domainOnPvSampleScript
252+
+ " -jrf "
253+
+ arg;
254+
255+
ExecResult result = Command.withParams(
256+
new CommandParams()
257+
.command(command)
258+
.env(envMap)
259+
.redirect(true)
260+
).executeAndReturnResult();
261+
262+
boolean success =
263+
result != null
264+
&& result.exitValue() == 0
265+
&& result.stdout() != null
266+
&& result.stdout().contains("Finished without errors");
267+
268+
String outStr = errString;
269+
outStr += ", command=\n{\n" + command + "\n}\n";
270+
outStr += ", stderr=\n{\n" + (result != null ? result.stderr() : "") + "\n}\n";
271+
outStr += ", stdout=\n{\n" + (result != null ? result.stdout() : "") + "\n}\n";
272+
273+
assertTrue(success, outStr);
274+
275+
previousTestSuccessful = true;
276+
}
277+
278+
/**
279+
* Delete DB deployment for FMW test cases and Uninstall Traefik.
280+
*/
281+
@AfterAll
282+
public static void tearDownAll() {
283+
logger = getLogger();
284+
285+
// uninstall Traefik
286+
if (traefikNamespace != null) {
287+
logger.info("Uninstall Traefik");
288+
String command =
289+
"helm uninstall " + TRAEFIK_RELEASE_NAME + "-" + traefikNamespace.substring(3) + " -n " + traefikNamespace;
290+
Command.withParams(new CommandParams()
291+
.command(command)
292+
.redirect(true)).execute();
293+
}
294+
295+
// db cleanup or deletion
296+
logger.info("Running samples DB cleanup");
297+
Command.withParams(new CommandParams()
298+
.command(domainOnPvSampleScript + " -precleandb")
299+
.env(envMap)
300+
.redirect(true)).execute();
301+
}
302+
}

0 commit comments

Comments
 (0)