Skip to content

Commit 5dee13b

Browse files
hzhao-githubhuizhao
andauthored
Added test for the script introspectDomain.sh located in domain-lifecycle directory (#2410)
* Added test for the script introspectDomain.sh located in domain-lifecycle directory Co-authored-by: huizhao <[email protected]>
1 parent 3756bf1 commit 5dee13b

File tree

1 file changed

+104
-0
lines changed

1 file changed

+104
-0
lines changed

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

Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import java.lang.annotation.RetentionPolicy;
1111
import java.lang.annotation.Target;
1212
import java.net.http.HttpResponse;
13+
import java.nio.file.Files;
1314
import java.nio.file.Path;
1415
import java.nio.file.Paths;
1516
import java.time.OffsetDateTime;
@@ -39,6 +40,8 @@
3940
import oracle.weblogic.domain.Domain;
4041
import oracle.weblogic.domain.DomainSpec;
4142
import oracle.weblogic.domain.ServerPod;
43+
import oracle.weblogic.kubernetes.actions.impl.primitive.Command;
44+
import oracle.weblogic.kubernetes.actions.impl.primitive.CommandParams;
4245
import oracle.weblogic.kubernetes.actions.impl.primitive.HelmParams;
4346
import oracle.weblogic.kubernetes.annotations.IntegrationTest;
4447
import oracle.weblogic.kubernetes.annotations.Namespaces;
@@ -61,6 +64,9 @@
6164
import org.junit.jupiter.api.extension.ExecutionCondition;
6265
import org.junit.jupiter.api.extension.ExtendWith;
6366
import org.junit.jupiter.api.extension.ExtensionContext;
67+
import org.junit.jupiter.params.ParameterizedTest;
68+
import org.junit.jupiter.params.provider.EmptySource;
69+
import org.junit.jupiter.params.provider.ValueSource;
6470

6571
import static java.util.concurrent.TimeUnit.MINUTES;
6672
import static java.util.concurrent.TimeUnit.SECONDS;
@@ -78,7 +84,9 @@
7884
import static oracle.weblogic.kubernetes.TestConstants.WLS_LATEST_IMAGE_TAG;
7985
import static oracle.weblogic.kubernetes.TestConstants.WLS_UPDATE_IMAGE_TAG;
8086
import static oracle.weblogic.kubernetes.actions.ActionConstants.APP_DIR;
87+
import static oracle.weblogic.kubernetes.actions.ActionConstants.ITTESTS_DIR;
8188
import static oracle.weblogic.kubernetes.actions.ActionConstants.RESOURCE_DIR;
89+
import static oracle.weblogic.kubernetes.actions.ActionConstants.WORK_DIR;
8290
import static oracle.weblogic.kubernetes.actions.TestActions.deleteSecret;
8391
import static oracle.weblogic.kubernetes.actions.TestActions.execCommand;
8492
import static oracle.weblogic.kubernetes.actions.TestActions.getCurrentIntrospectVersion;
@@ -121,10 +129,13 @@
121129
import static oracle.weblogic.kubernetes.utils.TestUtils.verifyServerCommunication;
122130
import static oracle.weblogic.kubernetes.utils.ThreadSafeLogger.getLogger;
123131
import static oracle.weblogic.kubernetes.utils.WLSTUtils.executeWLSTScript;
132+
import static org.apache.commons.io.FileUtils.copyDirectory;
133+
import static org.apache.commons.io.FileUtils.deleteDirectory;
124134
import static org.assertj.core.api.Assertions.assertThat;
125135
import static org.awaitility.Awaitility.with;
126136
import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
127137
import static org.junit.jupiter.api.Assertions.assertEquals;
138+
import static org.junit.jupiter.api.Assertions.assertFalse;
128139
import static org.junit.jupiter.api.Assertions.assertNotEquals;
129140
import static org.junit.jupiter.api.Assertions.assertNotNull;
130141
import static org.junit.jupiter.api.Assertions.assertTrue;
@@ -152,6 +163,11 @@ public class ItIntrospectVersion {
152163

153164
private Map<String, OffsetDateTime> podsWithTimeStamps = null;
154165

166+
private static final String INTROSPECT_DOMAIN_SCRIPT = "introspectDomain.sh";
167+
private static final Path samplePath = Paths.get(ITTESTS_DIR, "../kubernetes/samples");
168+
private static final Path tempSamplePath = Paths.get(WORK_DIR, "intros-sample-testing");
169+
private static final Path domainLifecycleSamplePath = Paths.get(samplePath + "/scripts/domain-lifecycle");
170+
155171
// create standard, reusable retry/backoff policy
156172
private static final ConditionFactory withStandardRetryPolicy
157173
= with().pollDelay(2, SECONDS)
@@ -203,6 +219,7 @@ public static void initAll(@Namespaces(3) List<String> namespaces) {
203219
"Application archive is not available");
204220
clusterViewAppPath = Paths.get(distDir.toString(), "clusterview.war");
205221

222+
setupSample();
206223
}
207224

208225
/**
@@ -1023,6 +1040,66 @@ public void testDedicatedModeSameNamespaceScale() {
10231040
verifyIntrospectVersionLabelInPod(replicaCount);
10241041
}
10251042

1043+
/**
1044+
* Rerun a WebLogic domain's introspect job by explicitly initiating the introspection
1045+
* using the sample script introspectDomain.sh script.
1046+
* Test that after running introspectDomain.sh w/wo a introspectVersion value specified,
1047+
* the introspection is explicitly initiating and introspectVersion in the domain is changed.
1048+
* Use ParameterizedTest to test introspectVersion = "", "v1", "8v", "v.1"
1049+
* Verify the introspector pod is created and runs
1050+
* Verifies introspection is changed.
1051+
* Verifies accessing sample application in admin server works.
1052+
*/
1053+
@Order(7)
1054+
@ParameterizedTest
1055+
@EmptySource
1056+
@ValueSource(strings = {"v1", "8v", "v.1"})
1057+
@DisplayName("Test to use sample scripts to explicitly initiate introspection")
1058+
public void testInitiateIntrospection(String introspectVersion) {
1059+
final String adminServerName = "admin-server";
1060+
final String adminServerPodName = domainUid + "-" + adminServerName;
1061+
final String managedServerNameBase = "managed-server";
1062+
String managedServerPodNamePrefix = domainUid + "-" + managedServerNameBase;
1063+
final int replicaCount = 3;
1064+
1065+
// verify admin server pods are ready
1066+
checkPodReadyAndServiceExists(adminServerPodName, domainUid, introDomainNamespace);
1067+
// verify managed server pods are ready
1068+
for (int i = 1; i <= replicaCount; i++) {
1069+
logger.info("Checking managed server service {0} is created in namespace {1}",
1070+
managedServerPodNamePrefix + i, introDomainNamespace);
1071+
checkPodReadyAndServiceExists(managedServerPodNamePrefix + i, domainUid, introDomainNamespace);
1072+
}
1073+
1074+
// get introspectVersion before running introspectDomain.sh
1075+
String introspectVersionBf =
1076+
assertDoesNotThrow(() -> getCurrentIntrospectVersion(domainUid, introDomainNamespace));
1077+
1078+
// use introspectDomain.sh to initiate introspection
1079+
logger.info("Initiate introspection with introspectDomain.sh script");
1080+
String extraParam = (introspectVersion.isEmpty()) ? "" : " -i " + introspectVersion;
1081+
1082+
assertDoesNotThrow(() -> executeLifecycleScript(INTROSPECT_DOMAIN_SCRIPT, extraParam),
1083+
String.format("Failed to run %s", INTROSPECT_DOMAIN_SCRIPT));
1084+
1085+
//verify the introspector pod is created and runs
1086+
String introspectPodNameBase = getIntrospectJobName(domainUid);
1087+
checkPodExists(introspectPodNameBase, domainUid, introDomainNamespace);
1088+
checkPodDoesNotExist(introspectPodNameBase, domainUid, introDomainNamespace);
1089+
1090+
// get introspectVersion after running introspectDomain.sh
1091+
String introspectVersionAf =
1092+
assertDoesNotThrow(() -> getCurrentIntrospectVersion(domainUid, introDomainNamespace));
1093+
1094+
// verify that introspectVersion is changed after running introspectDomain.sh
1095+
assertFalse(introspectVersionBf.equals(introspectVersionAf),
1096+
"introspectVersion should change from " + introspectVersionBf + " to " + introspectVersionAf);
1097+
1098+
// verify when a domain resource has spec.introspectVersion configured,
1099+
// after a cluster is scaled up, new server pods have the label "weblogic.introspectVersion" set as well.
1100+
verifyIntrospectVersionLabelInPod(replicaCount);
1101+
}
1102+
10261103
/**
10271104
* Create a WebLogic domain on a persistent volume by doing the following.
10281105
* Create a configmap containing WLST script and property file.
@@ -1192,4 +1269,31 @@ public ConditionEvaluationResult evaluateExecutionCondition(ExtensionContext con
11921269
@interface AssumeWebLogicImage {
11931270
}
11941271

1272+
// copy samples directory to a temporary location
1273+
private static void setupSample() {
1274+
assertDoesNotThrow(() -> {
1275+
logger.info("Deleting and recreating {0}", tempSamplePath);
1276+
Files.createDirectories(tempSamplePath);
1277+
deleteDirectory(tempSamplePath.toFile());
1278+
Files.createDirectories(tempSamplePath);
1279+
logger.info("Copying {0} to {1}", samplePath, tempSamplePath);
1280+
copyDirectory(samplePath.toFile(), tempSamplePath.toFile());
1281+
});
1282+
}
1283+
1284+
// Function to execute domain lifecyle scripts
1285+
private String executeLifecycleScript(String script, String extraParams) {
1286+
String commonParameters = " -d " + domainUid + " -n " + introDomainNamespace + extraParams;
1287+
CommandParams params = new CommandParams().defaults();
1288+
1289+
params.command("sh "
1290+
+ Paths.get(domainLifecycleSamplePath.toString(), "/" + script).toString()
1291+
+ commonParameters);
1292+
1293+
ExecResult execResult = Command.withParams(params).executeAndReturnResult();
1294+
assertEquals(0, execResult.exitValue(),
1295+
String.format("Failed to execute script %s ", script));
1296+
1297+
return execResult.toString();
1298+
}
11951299
}

0 commit comments

Comments
 (0)