Skip to content

Commit c3e2ab1

Browse files
Changes required to run integration tests on FMW Jenkins (#2454)
* Changes required to run integration tests on FMW Jenkins
1 parent f4bc146 commit c3e2ab1

File tree

10 files changed

+69
-132
lines changed

10 files changed

+69
-132
lines changed

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

Lines changed: 3 additions & 111 deletions
Original file line numberDiff line numberDiff line change
@@ -14,19 +14,11 @@
1414
import java.util.Map;
1515
import java.util.Properties;
1616

17-
import io.kubernetes.client.openapi.models.V1ConfigMapVolumeSource;
1817
import io.kubernetes.client.openapi.models.V1Container;
19-
import io.kubernetes.client.openapi.models.V1ContainerPort;
2018
import io.kubernetes.client.openapi.models.V1EnvVar;
21-
import io.kubernetes.client.openapi.models.V1Job;
22-
import io.kubernetes.client.openapi.models.V1JobCondition;
23-
import io.kubernetes.client.openapi.models.V1JobSpec;
2419
import io.kubernetes.client.openapi.models.V1LocalObjectReference;
2520
import io.kubernetes.client.openapi.models.V1ObjectMeta;
2621
import io.kubernetes.client.openapi.models.V1PersistentVolumeClaimVolumeSource;
27-
import io.kubernetes.client.openapi.models.V1Pod;
28-
import io.kubernetes.client.openapi.models.V1PodSpec;
29-
import io.kubernetes.client.openapi.models.V1PodTemplateSpec;
3022
import io.kubernetes.client.openapi.models.V1SecretReference;
3123
import io.kubernetes.client.openapi.models.V1Volume;
3224
import io.kubernetes.client.openapi.models.V1VolumeMount;
@@ -61,21 +53,16 @@
6153
import static oracle.weblogic.kubernetes.actions.ActionConstants.ITTESTS_DIR;
6254
import static oracle.weblogic.kubernetes.actions.ActionConstants.RESOURCE_DIR;
6355
import static oracle.weblogic.kubernetes.actions.TestActions.addLabelsToNamespace;
64-
import static oracle.weblogic.kubernetes.actions.TestActions.createNamespacedJob;
65-
import static oracle.weblogic.kubernetes.actions.TestActions.getJob;
66-
import static oracle.weblogic.kubernetes.actions.TestActions.getPodLog;
67-
import static oracle.weblogic.kubernetes.actions.TestActions.listPods;
6856
import static oracle.weblogic.kubernetes.actions.TestActions.scaleCluster;
69-
import static oracle.weblogic.kubernetes.assertions.TestAssertions.jobCompleted;
7057
import static oracle.weblogic.kubernetes.utils.CommonPatchTestUtils.patchServerStartPolicy;
7158
import static oracle.weblogic.kubernetes.utils.CommonTestUtils.checkAppUsingHostHeader;
7259
import static oracle.weblogic.kubernetes.utils.CommonTestUtils.checkPodDeleted;
7360
import static oracle.weblogic.kubernetes.utils.CommonTestUtils.checkPodReady;
7461
import static oracle.weblogic.kubernetes.utils.CommonTestUtils.checkServiceExists;
7562
import static oracle.weblogic.kubernetes.utils.CommonTestUtils.createDomainAndVerify;
63+
import static oracle.weblogic.kubernetes.utils.CommonTestUtils.createDomainJob;
7664
import static oracle.weblogic.kubernetes.utils.CommonTestUtils.createSecretForBaseImages;
7765
import static oracle.weblogic.kubernetes.utils.CommonTestUtils.createSecretWithUsernamePassword;
78-
import static oracle.weblogic.kubernetes.utils.CommonTestUtils.createfixPVCOwnerContainer;
7966
import static oracle.weblogic.kubernetes.utils.CommonTestUtils.generateFileFromTemplate;
8067
import static oracle.weblogic.kubernetes.utils.CommonTestUtils.installAndVerifyOperator;
8168
import static oracle.weblogic.kubernetes.utils.CommonTestUtils.setPodAntiAffinity;
@@ -89,7 +76,6 @@
8976
import static org.junit.jupiter.api.Assertions.assertEquals;
9077
import static org.junit.jupiter.api.Assertions.assertNotNull;
9178
import static org.junit.jupiter.api.Assertions.assertTrue;
92-
import static org.junit.jupiter.api.Assertions.fail;
9379

9480
/**
9581
* Tests to create domain in persistent volume using WLST.
@@ -407,105 +393,11 @@ private void createDomainOnPVUsingWlst(Path wlstScriptFile, Path domainPropertie
407393
.addArgsItem("/u01/weblogic/" + domainPropertiesFile.getFileName()); //domain property file
408394

409395
logger.info("Running a Kubernetes job to create the domain");
410-
createDomainJob(pvName, pvcName, domainScriptConfigMapName, namespace, jobCreationContainer);
411-
412-
}
413-
414-
/**
415-
* Create a job to create a domain in persistent volume.
416-
*
417-
* @param pvName name of the persistent volume to create domain in
418-
* @param pvcName name of the persistent volume claim
419-
* @param domainScriptCM configmap holding domain creation script files
420-
* @param namespace name of the domain namespace in which the job is created
421-
* @param jobContainer V1Container with job commands to create domain
422-
*/
423-
private void createDomainJob(String pvName,
424-
String pvcName, String domainScriptCM, String namespace, V1Container jobContainer) {
425-
logger.info("Running Kubernetes job to create domain");
426396
Map<String, String> annotMap = new HashMap<String, String>();
427397
annotMap.put("sidecar.istio.io/inject", "false");
428-
429-
V1Job jobBody = new V1Job()
430-
.metadata(
431-
new V1ObjectMeta()
432-
.name("create-domain-onpv-job-" + pvName) // name of the create domain job
433-
.namespace(namespace))
434-
.spec(new V1JobSpec()
435-
.backoffLimit(0) // try only once
436-
.template(new V1PodTemplateSpec()
437-
.metadata(new V1ObjectMeta()
438-
.annotations(annotMap))
439-
.spec(new V1PodSpec()
440-
.restartPolicy("Never")
441-
.initContainers(Arrays.asList(createfixPVCOwnerContainer(pvName, "/shared")))
442-
.containers(Arrays.asList(jobContainer // container containing WLST or WDT details
443-
.name("create-weblogic-domain-onpv-container")
444-
.image(WEBLOGIC_IMAGE_TO_USE_IN_SPEC)
445-
.imagePullPolicy("Always")
446-
.ports(Arrays.asList(new V1ContainerPort()
447-
.containerPort(7001)))
448-
.volumeMounts(Arrays.asList(
449-
new V1VolumeMount()
450-
.name("create-weblogic-domain-job-cm-volume") // domain creation scripts volume
451-
.mountPath("/u01/weblogic"), // availble under /u01/weblogic inside pod
452-
new V1VolumeMount()
453-
.name(pvName) // location to write domain
454-
.mountPath("/shared"))))) // mounted under /shared inside pod
455-
.volumes(Arrays.asList(
456-
new V1Volume()
457-
.name(pvName)
458-
.persistentVolumeClaim(
459-
new V1PersistentVolumeClaimVolumeSource()
460-
.claimName(pvcName)),
461-
new V1Volume()
462-
.name("create-weblogic-domain-job-cm-volume")
463-
.configMap(
464-
new V1ConfigMapVolumeSource()
465-
.name(domainScriptCM)))) //config map containing domain scripts
466-
.imagePullSecrets(Arrays.asList(
467-
new V1LocalObjectReference()
468-
.name(BASE_IMAGES_REPO_SECRET)))))); // this secret is used only on non-kind cluster
469-
470-
String jobName = assertDoesNotThrow(()
471-
-> createNamespacedJob(jobBody), "Failed to create Job");
472-
473-
logger.info("Checking if the domain creation job {0} completed in namespace {1}",
474-
jobName, namespace);
475-
withStandardRetryPolicy
476-
.conditionEvaluationListener(
477-
condition -> logger.info("Waiting for job {0} to be completed in namespace {1} "
478-
+ "(elapsed time {2} ms, remaining time {3} ms)",
479-
jobName,
480-
namespace,
481-
condition.getElapsedTimeInMS(),
482-
condition.getRemainingTimeInMS()))
483-
.until(jobCompleted(jobName, null, namespace));
484-
485-
// check job status and fail test if the job failed to create domain
486-
V1Job job = assertDoesNotThrow(() -> getJob(jobName, namespace),
487-
"Getting the job failed");
488-
if (job != null) {
489-
V1JobCondition jobCondition = job.getStatus().getConditions().stream().filter(
490-
v1JobCondition -> "Failed".equalsIgnoreCase(v1JobCondition.getType()))
491-
.findAny()
492-
.orElse(null);
493-
if (jobCondition != null) {
494-
logger.severe("Job {0} failed to create domain", jobName);
495-
List<V1Pod> pods = assertDoesNotThrow(()
496-
-> listPods(namespace, "job-name=" + jobName).getItems(),
497-
"Listing pods failed");
498-
if (!pods.isEmpty()) {
499-
String podLog = assertDoesNotThrow(() -> getPodLog(pods.get(0).getMetadata().getName(), namespace),
500-
"Failed to get pod log");
501-
logger.severe(podLog);
502-
fail("Domain create job failed");
503-
}
504-
}
505-
}
398+
createDomainJob(WEBLOGIC_IMAGE_TO_USE_IN_SPEC, pvName, pvcName, domainScriptConfigMapName,
399+
namespace, jobCreationContainer, annotMap);
506400

507401
}
508402

509-
510-
511403
}

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

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,6 @@
102102
import static oracle.weblogic.kubernetes.TestConstants.ADMIN_SERVER_NAME_BASE;
103103
import static oracle.weblogic.kubernetes.TestConstants.ADMIN_USERNAME_DEFAULT;
104104
import static oracle.weblogic.kubernetes.TestConstants.DOMAIN_API_VERSION;
105-
import static oracle.weblogic.kubernetes.TestConstants.DOMAIN_IMAGES_REPO;
106105
import static oracle.weblogic.kubernetes.TestConstants.GRAFANA_CHART_VERSION;
107106
import static oracle.weblogic.kubernetes.TestConstants.K8S_NODEPORT_HOST;
108107
import static oracle.weblogic.kubernetes.TestConstants.MANAGED_SERVER_NAME_BASE;
@@ -1001,9 +1000,6 @@ public static boolean installAndVerifyPodFromCustomImage(String dockerFileDir,
10011000
String secretName) throws ApiException {
10021001
//build webhook image
10031002
String imagePullPolicy = "IfNotPresent";
1004-
if (!DOMAIN_IMAGES_REPO.isEmpty()) {
1005-
imagePullPolicy = "Always";
1006-
}
10071003
String image = createImageAndPushToRepo(dockerFileDir,baseImageName, namespace, secretName, "");
10081004
logger.info("Installing {0} in namespace {1}", baseImageName, namespace);
10091005
if (baseImageName.equalsIgnoreCase(("webhook"))) {
@@ -1625,9 +1621,6 @@ private static void createDomainCrAndVerify(String adminSecretName,
16251621
e.printStackTrace();
16261622
}
16271623
String imagePullPolicy = "IfNotPresent";
1628-
if (!DOMAIN_IMAGES_REPO.isEmpty()) {
1629-
imagePullPolicy = "Always";
1630-
}
16311624
domain.getSpec().monitoringExporter(new MonitoringExporterSpecification()
16321625
.image(exporterImage)
16331626
.imagePullPolicy(imagePullPolicy)

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,7 @@
122122
import static oracle.weblogic.kubernetes.utils.CommonTestUtils.checkPodReady;
123123
import static oracle.weblogic.kubernetes.utils.CommonTestUtils.checkPodReadyAndServiceExists;
124124
import static oracle.weblogic.kubernetes.utils.CommonTestUtils.createDomainAndVerify;
125+
import static oracle.weblogic.kubernetes.utils.CommonTestUtils.createDomainJob;
125126
import static oracle.weblogic.kubernetes.utils.CommonTestUtils.createImageAndVerify;
126127
import static oracle.weblogic.kubernetes.utils.CommonTestUtils.createIngressForDomainAndVerify;
127128
import static oracle.weblogic.kubernetes.utils.CommonTestUtils.createJobAndWaitUntilComplete;
@@ -1244,7 +1245,8 @@ private static void runCreateDomainOnPVJobUsingWdt(Path domainCreationScriptFile
12441245
.value(HTTPS_PROXY));
12451246

12461247
logger.info("Running a Kubernetes job to create the domain");
1247-
createDomainJob(pvName, pvcName, domainScriptConfigMapName, namespace, jobCreationContainer);
1248+
createDomainJob(pvName, pvcName,
1249+
domainScriptConfigMapName, namespace, jobCreationContainer);
12481250
}
12491251

12501252
/**

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -306,7 +306,8 @@ private Domain buildDomainResource(Shutdown[] shutDownObject) {
306306
.model(new Model()
307307
.configMap(cmName)
308308
.domainType(WLS_DOMAIN_TYPE)
309-
.runtimeEncryptionSecret(encryptionSecretName)))
309+
.runtimeEncryptionSecret(encryptionSecretName))
310+
.introspectorJobActiveDeadlineSeconds(300L))
310311
.addManagedServersItem(new ManagedServer()
311312
.serverStartState("RUNNING")
312313
.serverStartPolicy("ALWAYS")

integration-tests/src/test/java/oracle/weblogic/kubernetes/actions/impl/primitive/Docker.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import oracle.weblogic.kubernetes.logging.LoggingFacade;
1111
import oracle.weblogic.kubernetes.utils.ExecResult;
1212

13+
import static oracle.weblogic.kubernetes.TestConstants.KIND_REPO;
1314
import static oracle.weblogic.kubernetes.utils.ThreadSafeLogger.getLogger;
1415

1516
/**
@@ -53,6 +54,9 @@ public static boolean pull(String image) {
5354
*/
5455
public static boolean push(String image) {
5556
String cmdToExecute = String.format("docker push %s", image);
57+
if (KIND_REPO != null) {
58+
cmdToExecute = String.format("kind load docker-image %s --name kind", image);
59+
}
5660
return new Command()
5761
.withParams(new CommandParams()
5862
.command(cmdToExecute))

integration-tests/src/test/java/oracle/weblogic/kubernetes/extensions/ImageBuilders.java

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@
2424
import com.fasterxml.jackson.databind.JsonNode;
2525
import com.fasterxml.jackson.databind.ObjectMapper;
2626
import oracle.weblogic.kubernetes.actions.impl.Operator;
27+
import oracle.weblogic.kubernetes.actions.impl.primitive.Command;
28+
import oracle.weblogic.kubernetes.actions.impl.primitive.CommandParams;
2729
import oracle.weblogic.kubernetes.logging.LoggingFacade;
2830
import oracle.weblogic.kubernetes.utils.ExecCommand;
2931
import oracle.weblogic.kubernetes.utils.ExecResult;
@@ -113,6 +115,7 @@ public class ImageBuilders implements BeforeAllCallback, ExtensionContext.Store.
113115
@Override
114116
public void beforeAll(ExtensionContext context) {
115117
LoggingFacade logger = getLogger();
118+
116119
/* The pattern is that we have initialization code that we want to run once to completion
117120
* before any tests are executed. This method will be called before every test method. Therefore, the
118121
* very first time this method is called we will do the initialization. Since we assume that the tests
@@ -254,16 +257,30 @@ public void beforeAll(ExtensionContext context) {
254257
}
255258

256259
for (String image : images) {
257-
logger.info("docker push image {0} to {1}", image, DOMAIN_IMAGES_REPO);
260+
if (KIND_REPO != null) {
261+
logger.info("kind load docker-image {0} --name kind", image);
262+
} else {
263+
logger.info("docker push image {0} to {1}", image, DOMAIN_IMAGES_REPO);
264+
}
258265
withStandardRetryPolicy
259266
.conditionEvaluationListener(
260-
condition -> logger.info("Waiting for docker push to OCIR for image {0} to be successful"
267+
condition -> logger.info("Waiting for docker push to OCIR/kind for image {0} to be successful"
261268
+ "(elapsed time {1} ms, remaining time {2} ms)",
262269
image,
263270
condition.getElapsedTimeInMS(),
264271
condition.getRemainingTimeInMS()))
265272
.until(() -> dockerPush(image));
266273
}
274+
275+
// list images for Kind cluster
276+
if (KIND_REPO != null) {
277+
new Command()
278+
.withParams(new CommandParams()
279+
.command("docker exec kind-worker crictl images")
280+
.verbose(true)
281+
.saveResults(true))
282+
.execute();
283+
}
267284
}
268285

269286
// set initialization success to true, not counting the istio installation as not all tests use istio

integration-tests/src/test/java/oracle/weblogic/kubernetes/utils/CommonTestUtils.java

Lines changed: 31 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -956,7 +956,7 @@ public static HelmParams installAndVerifyApache(String apacheNamespace,
956956
.helmParams(apacheHelmParams)
957957
.imagePullSecrets(secretNameMap)
958958
.image(image)
959-
.imagePullPolicy("Always")
959+
.imagePullPolicy("IfNotPresent")
960960
.domainUID(domainUid);
961961

962962
if (httpNodePort >= 0 && httpsNodePort >= 0) {
@@ -3675,6 +3675,7 @@ public static void createConfigMapForDomainCreation(String configMapName, List<P
36753675
assertTrue(cmCreated, String.format("Failed while creating ConfigMap %s", configMapName));
36763676
}
36773677

3678+
36783679
/**
36793680
* Create a job to create a domain in persistent volume.
36803681
*
@@ -3687,17 +3688,34 @@ public static void createConfigMapForDomainCreation(String configMapName, List<P
36873688
*/
36883689
public static void createDomainJob(String image, String pvName,
36893690
String pvcName, String domainScriptCM, String namespace, V1Container jobContainer) {
3691+
createDomainJob(image, pvName, pvcName, domainScriptCM, namespace, jobContainer, null);
3692+
}
3693+
3694+
/**
3695+
* Create a job to create a domain in persistent volume.
3696+
*
3697+
* @param image image name used to create the domain
3698+
* @param pvName name of the persistent volume to create domain in
3699+
* @param pvcName name of the persistent volume claim
3700+
* @param domainScriptCM configmap holding domain creation script files
3701+
* @param namespace name of the domain namespace in which the job is created
3702+
* @param jobContainer V1Container with job commands to create domain
3703+
* @param podAnnotationsMap annotations for the job pod
3704+
*/
3705+
public static void createDomainJob(String image, String pvName, String pvcName, String domainScriptCM,
3706+
String namespace, V1Container jobContainer, Map podAnnotationsMap) {
36903707

36913708
LoggingFacade logger = getLogger();
3692-
logger.info("Running Kubernetes job to create domain for image: {1}: {2} "
3693-
+ " pvName: {3}, pvcName: {4}, domainScriptCM: {5}, namespace: {6}", image,
3709+
logger.info("Running Kubernetes job to create domain for image: {0}"
3710+
+ " pvName: {1}, pvcName: {2}, domainScriptCM: {3}, namespace: {4}", image,
36943711
pvName, pvcName, domainScriptCM, namespace);
3712+
36953713
V1PodSpec podSpec = new V1PodSpec()
36963714
.restartPolicy("Never")
36973715
.containers(Arrays.asList(jobContainer // container containing WLST or WDT details
36983716
.name("create-weblogic-domain-onpv-container")
36993717
.image(image)
3700-
.imagePullPolicy("Always")
3718+
.imagePullPolicy("IfNotPresent")
37013719
.ports(Arrays.asList(new V1ContainerPort()
37023720
.containerPort(7001)))
37033721
.volumeMounts(Arrays.asList(
@@ -3724,15 +3742,22 @@ public static void createDomainJob(String image, String pvName,
37243742
if (!OKD) {
37253743
podSpec.initContainers(Arrays.asList(createfixPVCOwnerContainer(pvName, "/shared")));
37263744
}
3745+
3746+
V1PodTemplateSpec podTemplateSpec = new V1PodTemplateSpec();
3747+
if (podAnnotationsMap != null) {
3748+
podTemplateSpec.metadata(new V1ObjectMeta()
3749+
.annotations(podAnnotationsMap));
3750+
}
3751+
podTemplateSpec.spec(podSpec);
3752+
37273753
V1Job jobBody = new V1Job()
37283754
.metadata(
37293755
new V1ObjectMeta()
37303756
.name("create-domain-onpv-job-" + pvName) // name of the create domain job
37313757
.namespace(namespace))
37323758
.spec(new V1JobSpec()
37333759
.backoffLimit(0) // try only once
3734-
.template(new V1PodTemplateSpec()
3735-
.spec(podSpec)));
3760+
.template(podTemplateSpec));
37363761
String jobName = assertDoesNotThrow(()
37373762
-> createNamespacedJob(jobBody), "Failed to create Job");
37383763

integration-tests/src/test/java/oracle/weblogic/kubernetes/utils/IstioUtils.java

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@
2828
import oracle.weblogic.kubernetes.logging.LoggingFacade;
2929

3030
import static oracle.weblogic.kubernetes.TestConstants.DOMAIN_API_VERSION;
31-
import static oracle.weblogic.kubernetes.TestConstants.DOMAIN_IMAGES_REPO;
3231
import static oracle.weblogic.kubernetes.TestConstants.ISTIO_VERSION;
3332
import static oracle.weblogic.kubernetes.TestConstants.RESULTS_ROOT;
3433
import static oracle.weblogic.kubernetes.actions.ActionConstants.RESOURCE_DIR;
@@ -407,9 +406,6 @@ public static Domain createIstioDomainResource(String domainUid, String domNames
407406
fail("Failed to read configuration file");
408407
}
409408
String imagePullPolicy = "IfNotPresent";
410-
if (!DOMAIN_IMAGES_REPO.isEmpty()) {
411-
imagePullPolicy = "Always";
412-
}
413409
domain.getSpec().monitoringExporter(new MonitoringExporterSpecification()
414410
.image(monexpImage)
415411
.imagePullPolicy(imagePullPolicy)

kindtest.sh

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -289,6 +289,10 @@ if [ "$skip_tests" = true ] ; then
289289
exit 0
290290
fi
291291

292+
echo 'docker info'
293+
docker info
294+
docker ps
295+
292296
echo 'Clean up result root...'
293297
rm -rf "${RESULT_ROOT:?}/*"
294298

0 commit comments

Comments
 (0)