From e83a0569c366361a4f9365453de59bd08a9b6501 Mon Sep 17 00:00:00 2001 From: xian_cao Date: Fri, 17 May 2024 18:00:02 +0000 Subject: [PATCH] catch NullPointerException in WKO tests in release/4.2 --- .../ItConfigDistributionStrategy.java | 21 +- .../kubernetes/ItEvictedPodsCycling.java | 7 +- .../kubernetes/ItIntrospectVersion.java | 6 +- .../kubernetes/ItLargeMiiDomainsClusters.java | 3 +- .../ItLiftAndShiftFromOnPremDomain.java | 15 +- .../kubernetes/ItManageNameSpace.java | 1 + .../kubernetes/ItMiiAuxiliaryImage.java | 5 +- .../kubernetes/ItMiiDomainModelInPV.java | 4 + .../kubernetes/ItMiiUpdateDomainConfig.java | 6 +- .../ItMonitoringExporterSamples.java | 12 +- .../kubernetes/ItOCILoadBalancer.java | 7 +- .../weblogic/kubernetes/ItPodTemplates.java | 5 +- .../weblogic/kubernetes/ItPodsRestart.java | 6 +- .../kubernetes/ItSessionMigration.java | 4 +- .../ItUsabilityOperatorHelmChart.java | 10 +- .../oracle/weblogic/kubernetes/ItWseeSSO.java | 2 + .../kubernetes/actions/impl/Domain.java | 11 +- .../kubernetes/utils/ApplicationUtils.java | 8 +- .../kubernetes/utils/BuildApplication.java | 10 +- .../kubernetes/utils/CleanupUtil.java | 424 ++++++++++++------ .../kubernetes/utils/ClusterUtils.java | 21 +- .../kubernetes/utils/CommonMiiTestUtils.java | 25 +- .../kubernetes/utils/CommonTestUtils.java | 34 +- .../kubernetes/utils/ConfigMapUtils.java | 33 +- .../weblogic/kubernetes/utils/DbUtils.java | 46 +- .../weblogic/kubernetes/utils/DeployUtil.java | 14 +- .../kubernetes/utils/DomainUtils.java | 8 +- .../weblogic/kubernetes/utils/FileUtils.java | 34 +- .../weblogic/kubernetes/utils/FmwUtils.java | 10 +- .../weblogic/kubernetes/utils/ImageUtils.java | 7 +- .../weblogic/kubernetes/utils/IstioUtils.java | 41 +- .../weblogic/kubernetes/utils/JobUtils.java | 6 +- .../weblogic/kubernetes/utils/K8sEvents.java | 2 +- .../kubernetes/utils/LoadBalancerUtils.java | 1 - .../kubernetes/utils/LoggingUtil.java | 56 +-- .../kubernetes/utils/MonitoringUtils.java | 5 +- .../kubernetes/utils/MySQLDBUtils.java | 9 +- .../utils/PersistentVolumeUtils.java | 24 +- .../weblogic/kubernetes/utils/PodUtils.java | 9 +- .../kubernetes/utils/SecretUtils.java | 4 +- .../kubernetes/utils/VerrazzanoUtils.java | 9 +- .../weblogic/kubernetes/utils/WLSTUtils.java | 12 +- 42 files changed, 573 insertions(+), 404 deletions(-) diff --git a/integration-tests/src/test/java/oracle/weblogic/kubernetes/ItConfigDistributionStrategy.java b/integration-tests/src/test/java/oracle/weblogic/kubernetes/ItConfigDistributionStrategy.java index a2bce3a19b0..c1e3fc221fd 100644 --- a/integration-tests/src/test/java/oracle/weblogic/kubernetes/ItConfigDistributionStrategy.java +++ b/integration-tests/src/test/java/oracle/weblogic/kubernetes/ItConfigDistributionStrategy.java @@ -207,10 +207,15 @@ public void initAll(@Namespaces(2) List namespaces) throws ApiException, //start two MySQL database instances String dbService1 = createMySQLDB("mysqldb-1", "root", "root123", domainNamespace, null); V1Pod pod = getPod(domainNamespace, null, "mysqldb-1"); + assertNotNull(pod, "pod is null"); + assertNotNull(pod.getMetadata(), "pod metadata is null"); createFileInPod(pod.getMetadata().getName(), domainNamespace, "root123"); runMysqlInsidePod(pod.getMetadata().getName(), domainNamespace, "root123"); + String dbService2 = createMySQLDB("mysqldb-2", "root", "root456", domainNamespace, null); pod = getPod(domainNamespace, null, "mysqldb-2"); + assertNotNull(pod, "pod is null"); + assertNotNull(pod.getMetadata(), "pod metadata is null"); createFileInPod(pod.getMetadata().getName(), domainNamespace, "root456"); runMysqlInsidePod(pod.getMetadata().getName(), domainNamespace, "root456"); @@ -404,8 +409,9 @@ void testModifiedOverrideContent() { testUntil( withLongRetryPolicy, - () -> listConfigMaps(domainNamespace).getItems().stream().noneMatch((cm) - -> (cm.getMetadata().getName().equals(overridecm))), + () -> listConfigMaps(domainNamespace).getItems().stream().noneMatch(cm + -> cm.getMetadata() != null && cm.getMetadata().getName() != null + && cm.getMetadata().getName().equals(overridecm)), logger, "configmap {0} to be deleted."); @@ -1195,7 +1201,10 @@ private static Integer getMySQLNodePort(String namespace, String dbName) { logger.info(dump(Kubernetes.listServices(namespace))); List services = listServices(namespace).getItems(); for (V1Service service : services) { - if (service.getMetadata().getName().startsWith(dbName)) { + if (service.getMetadata() != null && service.getMetadata().getName() != null + && service.getSpec() != null && service.getSpec().getPorts() != null + && !service.getSpec().getPorts().isEmpty() + && service.getMetadata().getName().startsWith(dbName)) { return service.getSpec().getPorts().get(0).getNodePort(); } } @@ -1206,7 +1215,8 @@ private static String getMySQLSvcName(String namespace, String dbName) { logger.info(dump(Kubernetes.listServices(namespace))); List services = listServices(namespace).getItems(); for (V1Service service : services) { - if (service.getMetadata().getName().startsWith(dbName)) { + if (service.getMetadata() != null && service.getMetadata().getName() != null + && service.getMetadata().getName().startsWith(dbName)) { return service.getMetadata().getName(); } } @@ -1227,7 +1237,8 @@ private static String getMySQLSvcEndpoint(String domainNamespace, String dbName) } catch (Exception e) { getLogger().info("Got exception, command failed with errors " + e.getMessage()); } - return result.stdout(); + assertNotNull(result, "result is null"); + return result.stdout(); } private static void runMysqlInsidePod(String podName, String namespace, String password) { diff --git a/integration-tests/src/test/java/oracle/weblogic/kubernetes/ItEvictedPodsCycling.java b/integration-tests/src/test/java/oracle/weblogic/kubernetes/ItEvictedPodsCycling.java index e57542270ac..f0e05b16ce2 100644 --- a/integration-tests/src/test/java/oracle/weblogic/kubernetes/ItEvictedPodsCycling.java +++ b/integration-tests/src/test/java/oracle/weblogic/kubernetes/ItEvictedPodsCycling.java @@ -204,9 +204,14 @@ private Callable checkEvictionEvent(String adminServerpodName, boolean gotEvent = false; List events = Kubernetes.listNamespacedEvents(domainNamespace); for (CoreV1Event event : events) { - if (event.getType().equals(type) + if (event.getType() != null + && event.getType().equals(type) + && event.getInvolvedObject() != null + && event.getInvolvedObject().getName() != null && event.getInvolvedObject().getName().equals(adminServerpodName) + && event.getReason() != null && event.getReason().equals(reason) + && event.getMessage() != null && event.getMessage().contains(message)) { logger.info(Yaml.dump(event)); gotEvent = true; diff --git a/integration-tests/src/test/java/oracle/weblogic/kubernetes/ItIntrospectVersion.java b/integration-tests/src/test/java/oracle/weblogic/kubernetes/ItIntrospectVersion.java index 1cbcc44fc14..e14f726b5d6 100644 --- a/integration-tests/src/test/java/oracle/weblogic/kubernetes/ItIntrospectVersion.java +++ b/integration-tests/src/test/java/oracle/weblogic/kubernetes/ItIntrospectVersion.java @@ -1351,6 +1351,7 @@ private static void verifyMemberHealth(String adminServerPodName, List m } catch (IOException | InterruptedException ex) { logger.severe(ex.getMessage()); } + assertNotNull(result, "result is null"); String response = result.stdout().trim(); logger.info(response); logger.info(result.stderr()); @@ -1574,7 +1575,10 @@ private DomainResource createDomainResourceWithConfigMap(String domainUid, Strin private void updateIngressBackendServicePort(int newAdminPort) throws ApiException { String ingressName = introDomainNamespace + "-" + domainUid + "-" + adminServerName + "-7001"; V1Ingress ingress = Ingress.getIngress(introDomainNamespace, ingressName).orElse(null); - if (ingress != null) { + if (ingress != null + && ingress.getSpec() != null + && ingress.getSpec().getRules() != null + && !ingress.getSpec().getRules().isEmpty()) { logger.info("Updating ingress {0} with new admin port {1}", ingressName, newAdminPort); ingress.getSpec().getRules().getFirst().getHttp() .getPaths().getFirst().getBackend().getService() diff --git a/integration-tests/src/test/java/oracle/weblogic/kubernetes/ItLargeMiiDomainsClusters.java b/integration-tests/src/test/java/oracle/weblogic/kubernetes/ItLargeMiiDomainsClusters.java index cc6e972b5f5..2c050f45986 100644 --- a/integration-tests/src/test/java/oracle/weblogic/kubernetes/ItLargeMiiDomainsClusters.java +++ b/integration-tests/src/test/java/oracle/weblogic/kubernetes/ItLargeMiiDomainsClusters.java @@ -1,4 +1,4 @@ -// Copyright (c) 2023, Oracle and/or its affiliates. +// Copyright (c) 2023, 2024, Oracle and/or its affiliates. // Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. package oracle.weblogic.kubernetes; @@ -102,7 +102,6 @@ import static oracle.weblogic.kubernetes.utils.K8sEvents.checkDomainEvent; import static oracle.weblogic.kubernetes.utils.OKDUtils.createRouteForOKD; import static oracle.weblogic.kubernetes.utils.OKDUtils.setTlsTerminationForRoute; -import static oracle.weblogic.kubernetes.utils.OperatorUtils.installAndVerifyOperator; import static oracle.weblogic.kubernetes.utils.PatchDomainUtils.patchDomainResource; import static oracle.weblogic.kubernetes.utils.PodUtils.getExternalServicePodName; import static oracle.weblogic.kubernetes.utils.PodUtils.getPodsWithTimeStamps; diff --git a/integration-tests/src/test/java/oracle/weblogic/kubernetes/ItLiftAndShiftFromOnPremDomain.java b/integration-tests/src/test/java/oracle/weblogic/kubernetes/ItLiftAndShiftFromOnPremDomain.java index 3db77b3e65b..08b410ed9ee 100644 --- a/integration-tests/src/test/java/oracle/weblogic/kubernetes/ItLiftAndShiftFromOnPremDomain.java +++ b/integration-tests/src/test/java/oracle/weblogic/kubernetes/ItLiftAndShiftFromOnPremDomain.java @@ -109,7 +109,6 @@ @IntegrationTest class ItLiftAndShiftFromOnPremDomain { - private static String opNamespace = null; private static String traefikNamespace = null; private static String domainNamespace = null; private static final String LIFT_AND_SHIFT_WORK_DIR = WORK_DIR + "/liftandshiftworkdir"; @@ -124,10 +123,8 @@ class ItLiftAndShiftFromOnPremDomain { private static final Path BUILD_SCRIPT_SOURCE_PATH = Paths.get(RESOURCE_DIR, "bash-scripts", BUILD_SCRIPT); private static final String domainUid = "onprem-domain"; private static final String adminServerName = "admin-server"; - private static final String appPath = "opdemo/index.jsp"; private static String imageName = null; private static LoggingFacade logger = null; - private Path zipFile; private static HelmParams traefikHelmParams = null; private int traefikNodePort = 0; @@ -145,7 +142,7 @@ public static void initAll(@Namespaces(3) List namespaces) { // get a new unique opNamespace logger.info("Creating unique namespace for Operator"); assertNotNull(namespaces.get(0), "Namespace list is null"); - opNamespace = namespaces.get(0); + String opNamespace = namespaces.get(0); // get a unique traefik namespace logger.info("Get a unique namespace for traefik"); @@ -220,13 +217,17 @@ void testCreateMiiDomainWithClusterFromOnPremDomain() throws UnknownHostExceptio } Path tempDomainDir = Paths.get(DOMAIN_TEMP_DIR); - zipFile = Paths.get(createZipFile(tempDomainDir)); + String tmpDomainDirZip = createZipFile(tempDomainDir); + assertNotNull(tmpDomainDirZip, String.format("failed to create zip file %s", DOMAIN_TEMP_DIR)); + Path zipFile = Paths.get(tmpDomainDirZip); logger.info("zipfile is in {0}", zipFile.toString()); // Call WDT DiscoverDomain tool with wko target to get the required file to create a // Mii domain image. Since WDT requires weblogic installation, we start a pod and run // wdt discoverDomain tool in the pod V1Pod webLogicPod = callSetupWebLogicPod(domainNamespace); + assertNotNull(webLogicPod, "webLogicPod is null"); + assertNotNull(webLogicPod.getMetadata(), "webLogicPod metadata is null"); // copy the onprem domain zip file to /u01 location inside pod try { @@ -351,7 +352,7 @@ void testCreateMiiDomainWithClusterFromOnPremDomain() throws UnknownHostExceptio } } - String hostAndPort = null; + String hostAndPort; if (OKD) { hostAndPort = getHostAndPort(hostName, traefikNodePort); } else { @@ -378,7 +379,7 @@ void testCreateMiiDomainWithClusterFromOnPremDomain() throws UnknownHostExceptio "opdemo/index.jsp", "WebLogic on prem to wko App"); - ExecResult execResult = null; + ExecResult execResult; logger.info("curl command {0}", curlString); execResult = assertDoesNotThrow( diff --git a/integration-tests/src/test/java/oracle/weblogic/kubernetes/ItManageNameSpace.java b/integration-tests/src/test/java/oracle/weblogic/kubernetes/ItManageNameSpace.java index ff91078cc96..a5a442f65f7 100644 --- a/integration-tests/src/test/java/oracle/weblogic/kubernetes/ItManageNameSpace.java +++ b/integration-tests/src/test/java/oracle/weblogic/kubernetes/ItManageNameSpace.java @@ -439,6 +439,7 @@ private static void setLabelToNamespace(String domainNS, Map lab //add label to domain namespace V1Namespace namespaceObject1 = assertDoesNotThrow(() -> Kubernetes.getNamespace(domainNS)); assertNotNull(namespaceObject1, "Can't find namespace with name " + domainNS); + assertNotNull(namespaceObject1.getMetadata(), "namespaceObject metadata is null"); namespaceObject1.getMetadata().setLabels(labels); assertDoesNotThrow(() -> Kubernetes.replaceNamespace(namespaceObject1)); } diff --git a/integration-tests/src/test/java/oracle/weblogic/kubernetes/ItMiiAuxiliaryImage.java b/integration-tests/src/test/java/oracle/weblogic/kubernetes/ItMiiAuxiliaryImage.java index 115b149ed17..cac5bbceac4 100644 --- a/integration-tests/src/test/java/oracle/weblogic/kubernetes/ItMiiAuxiliaryImage.java +++ b/integration-tests/src/test/java/oracle/weblogic/kubernetes/ItMiiAuxiliaryImage.java @@ -850,8 +850,9 @@ WEBLOGIC_IMAGE_TO_USE_IN_SPEC, adminSecretName, createSecretsForImageRepos(domai deleteConfigMap(configMapName, domainNamespace); testUntil( withLongRetryPolicy, - () -> listConfigMaps(domainNamespace).getItems().stream().noneMatch((cm) - -> (cm.getMetadata().getName().equals(configMapName))), + () -> listConfigMaps(domainNamespace).getItems().stream().noneMatch(cm + -> cm.getMetadata() != null && cm.getMetadata().getName() != null + && cm.getMetadata().getName().equals(configMapName)), logger, "configmap {0} to be deleted.", configMapName); } diff --git a/integration-tests/src/test/java/oracle/weblogic/kubernetes/ItMiiDomainModelInPV.java b/integration-tests/src/test/java/oracle/weblogic/kubernetes/ItMiiDomainModelInPV.java index ed9332d2256..b5ce1476815 100644 --- a/integration-tests/src/test/java/oracle/weblogic/kubernetes/ItMiiDomainModelInPV.java +++ b/integration-tests/src/test/java/oracle/weblogic/kubernetes/ItMiiDomainModelInPV.java @@ -202,6 +202,8 @@ public static void initAll(@Namespaces(2) List namespaces) { logger.info("Setting up WebLogic pod to access PV"); V1Pod pvPod = setupWebLogicPod(domainNamespace); + assertNotNull(pvPod, "pvPod is null"); + assertNotNull(pvPod.getMetadata(), "pvPod metadata is null"); logger.info("Creating directory {0} in PV", modelMountPath + "/applications"); execInPod(pvPod, null, true, "mkdir -p " + modelMountPath + "/applications"); @@ -346,6 +348,7 @@ private static void verifyMemberHealth(String adminServerPodName, List m } catch (IOException | InterruptedException ex) { logger.severe(ex.getMessage()); } + assertNotNull(result, "execResult is null"); String response = result.stdout().trim(); logger.info(response); boolean health = true; @@ -398,6 +401,7 @@ private static void verifyMemberHealth(String adminServerPodName, List m } boolean health = true; + assertNotNull(result, "result is null"); for (String managedServer : managedServerNames) { health = health && result.stdout().contains(managedServer + ":HEALTH_OK"); if (health) { diff --git a/integration-tests/src/test/java/oracle/weblogic/kubernetes/ItMiiUpdateDomainConfig.java b/integration-tests/src/test/java/oracle/weblogic/kubernetes/ItMiiUpdateDomainConfig.java index c1733cdaddb..02ccb1a7d30 100644 --- a/integration-tests/src/test/java/oracle/weblogic/kubernetes/ItMiiUpdateDomainConfig.java +++ b/integration-tests/src/test/java/oracle/weblogic/kubernetes/ItMiiUpdateDomainConfig.java @@ -1,4 +1,4 @@ -// Copyright (c) 2020, 2023, Oracle and/or its affiliates. +// Copyright (c) 2020, 2024, Oracle and/or its affiliates. // Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. package oracle.weblogic.kubernetes; @@ -268,8 +268,8 @@ void testMiiCustomEnv() { for (int i = 0; i < envList.size(); i++) { logger.info("The name is: {0}, value is: {1}", envList.get(i).getName(), envList.get(i).getValue()); if (envList.get(i).getName().equalsIgnoreCase("CUSTOM_ENV")) { - assertTrue( - envList.get(i).getValue().equalsIgnoreCase("${DOMAIN_UID}~##!'%*$(ls)"), + assertTrue(envList.get(i).getValue() != null + && envList.get(i).getValue().equalsIgnoreCase("${DOMAIN_UID}~##!'%*$(ls)"), "Expected value for CUSTOM_ENV variable does not mtach"); found = true; } diff --git a/integration-tests/src/test/java/oracle/weblogic/kubernetes/ItMonitoringExporterSamples.java b/integration-tests/src/test/java/oracle/weblogic/kubernetes/ItMonitoringExporterSamples.java index 90ebdc7b745..7bed8798952 100644 --- a/integration-tests/src/test/java/oracle/weblogic/kubernetes/ItMonitoringExporterSamples.java +++ b/integration-tests/src/test/java/oracle/weblogic/kubernetes/ItMonitoringExporterSamples.java @@ -295,6 +295,8 @@ public static void initAll(@Namespaces(6) List namespaces) { dbService = createMySQLDB("mysql", "root", "root123", domain2Namespace, null); assertNotNull(dbService, "Failed to create database"); V1Pod pod = getPod(domain2Namespace, null, "mysql"); + assertNotNull(pod, "pod is null"); + assertNotNull(pod.getMetadata(), "pod metadata is null"); createFileInPod(pod.getMetadata().getName(), domain2Namespace, "root123"); runMysqlInsidePod(pod.getMetadata().getName(), domain2Namespace, "root123", "/tmp/grant.sql"); runMysqlInsidePod(pod.getMetadata().getName(), domain2Namespace, "root123", "/tmp/create.sql"); @@ -390,10 +392,8 @@ private void fireAlert() throws ApiException { List pods = listPods(webhookNS, "app=webhook").getItems(); assertNotNull((pods), "No pods are running in namespace : " + webhookNS); V1Pod pod = pods.stream() - .filter(testpod -> testpod - .getMetadata() - .getName() - .contains("webhook")) + .filter(testpod -> testpod.getMetadata() != null && testpod.getMetadata().getName() != null + && testpod.getMetadata().getName().contains("webhook")) .findAny() .orElse(null); @@ -706,7 +706,7 @@ private static void uninstallDeploymentService(V1Deployment deployment, V1Servic String serviceName = null; String deploymentName = null; try { - if (service != null) { + if (service != null && service.getMetadata() != null) { serviceName = service.getMetadata().getName(); namespace = service.getMetadata().getNamespace(); Kubernetes.deleteService(serviceName, namespace); @@ -717,7 +717,7 @@ private static void uninstallDeploymentService(V1Deployment deployment, V1Servic serviceName, namespace); } try { - if (deployment != null) { + if (deployment != null && deployment.getMetadata() != null) { deploymentName = deployment.getMetadata().getName(); namespace = deployment.getMetadata().getNamespace(); Kubernetes.deleteDeployment(namespace, deploymentName); diff --git a/integration-tests/src/test/java/oracle/weblogic/kubernetes/ItOCILoadBalancer.java b/integration-tests/src/test/java/oracle/weblogic/kubernetes/ItOCILoadBalancer.java index b859da6e8e1..799158e10fd 100644 --- a/integration-tests/src/test/java/oracle/weblogic/kubernetes/ItOCILoadBalancer.java +++ b/integration-tests/src/test/java/oracle/weblogic/kubernetes/ItOCILoadBalancer.java @@ -133,12 +133,13 @@ private static String getLoadBalancerIP(String namespace, String lbName) throws V1Service service = getService(lbName, labels, namespace); assertNotNull(service, "Can't find service with name " + lbName); logger.info("Found service with name {0} in {1} namespace ", lbName, namespace); + assertNotNull(service.getStatus(), "service status is null"); + assertNotNull(service.getStatus().getLoadBalancer(), "service loadbalancer is null"); List ingress = service.getStatus().getLoadBalancer().getIngress(); if (ingress != null) { logger.info("LoadBalancer Ingress " + ingress.toString()); - V1LoadBalancerIngress lbIng = ingress.stream().filter(c -> - !c.getIp().equals("pending") - ).findAny().orElse(null); + V1LoadBalancerIngress lbIng = + ingress.stream().filter(c -> c.getIp() != null && !c.getIp().equals("pending")).findAny().orElse(null); if (lbIng != null) { logger.info("OCI LoadBalancer is created with external ip" + lbIng.getIp()); return lbIng.getIp(); diff --git a/integration-tests/src/test/java/oracle/weblogic/kubernetes/ItPodTemplates.java b/integration-tests/src/test/java/oracle/weblogic/kubernetes/ItPodTemplates.java index 32f6f4f980b..eb356a32931 100644 --- a/integration-tests/src/test/java/oracle/weblogic/kubernetes/ItPodTemplates.java +++ b/integration-tests/src/test/java/oracle/weblogic/kubernetes/ItPodTemplates.java @@ -1,4 +1,4 @@ -// Copyright (c) 2020, 2022, Oracle and/or its affiliates. +// Copyright (c) 2020, 2024, Oracle and/or its affiliates. // Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. package oracle.weblogic.kubernetes; @@ -139,6 +139,8 @@ private void createAndVerifyPodFromTemplate(String imageName, //check that managed server pod is up and all applicable variable values are initialized. assertNotNull(managedServerPod,"The managed server pod does not exist in namespace " + domainNamespace); V1ObjectMeta managedServerMetadata = managedServerPod.getMetadata(); + assertNotNull(managedServerMetadata, "managed server pod metadata is null"); + assertNotNull(managedServerMetadata.getLabels(), "managed server metadata label is null"); String serverName = managedServerMetadata.getLabels().get("servername"); logger.info("Checking that variables used in the labels and annotations " + "in the serverPod for servername, domainname, clustername are initialized"); @@ -170,6 +172,7 @@ private void createAndVerifyPodFromTemplate(String imageName, logger.info("Checking that applicable variables used " + "in the annotations for domainhome and loghome are initialized"); + assertNotNull(managedServerMetadata.getAnnotations(), "managed server metadata annotation is null"); String loghome = managedServerMetadata.getAnnotations().get("loghome"); //check that annotation contains loghome in the pod assertNotNull(loghome, "Can't find annotation loghome"); diff --git a/integration-tests/src/test/java/oracle/weblogic/kubernetes/ItPodsRestart.java b/integration-tests/src/test/java/oracle/weblogic/kubernetes/ItPodsRestart.java index 22bc20061e0..5be97ce5adb 100644 --- a/integration-tests/src/test/java/oracle/weblogic/kubernetes/ItPodsRestart.java +++ b/integration-tests/src/test/java/oracle/weblogic/kubernetes/ItPodsRestart.java @@ -1,4 +1,4 @@ -// Copyright (c) 2020, 2023, Oracle and/or its affiliates. +// Copyright (c) 2020, 2024, Oracle and/or its affiliates. // Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. package oracle.weblogic.kubernetes; @@ -375,8 +375,8 @@ void testServerPodsRestartByChangingEnvProperty() { envList = domain1.getSpec().getServerPod().getEnv(); String envValue = envList.get(0).getValue(); logger.info("In the new patched domain envValue is: {0}", envValue); - assertTrue(envValue.equalsIgnoreCase("-Dweblogic.StdoutDebugEnabled=true"), "JAVA_OPTIONS was not updated" - + " in the new patched domain"); + assertTrue(envValue != null && envValue.equalsIgnoreCase("-Dweblogic.StdoutDebugEnabled=true"), + "JAVA_OPTIONS was not updated in the new patched domain"); // verify the server pods are rolling restarted and back to ready state logger.info("Verifying rolling restart occurred for domain {0} in namespace {1}", diff --git a/integration-tests/src/test/java/oracle/weblogic/kubernetes/ItSessionMigration.java b/integration-tests/src/test/java/oracle/weblogic/kubernetes/ItSessionMigration.java index 7ccdcf174df..bf834c63aec 100644 --- a/integration-tests/src/test/java/oracle/weblogic/kubernetes/ItSessionMigration.java +++ b/integration-tests/src/test/java/oracle/weblogic/kubernetes/ItSessionMigration.java @@ -1,4 +1,4 @@ -// Copyright (c) 2020, 2023, Oracle and/or its affiliates. +// Copyright (c) 2020, 2024, Oracle and/or its affiliates. // Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. package oracle.weblogic.kubernetes; @@ -246,6 +246,8 @@ void testPodAnnotationWithSlash() { assertNotNull(managedServerPod, "The managed server pod does not exist in namespace " + domainNamespace); V1ObjectMeta managedServerMetadata = managedServerPod.getMetadata(); + assertNotNull(managedServerMetadata, "managed server metadata is null"); + assertNotNull(managedServerMetadata.getAnnotations(), "managed server metadata annotation is null"); String myAnnotationValue = managedServerMetadata.getAnnotations().get(annotationKey); String myAnnotationValue2 = managedServerMetadata.getAnnotations().get(annotationKey2); String myAnnotationValue3 = managedServerMetadata.getAnnotations().get(annotationKey3); diff --git a/integration-tests/src/test/java/oracle/weblogic/kubernetes/ItUsabilityOperatorHelmChart.java b/integration-tests/src/test/java/oracle/weblogic/kubernetes/ItUsabilityOperatorHelmChart.java index 3b05b65b3ca..cc04c5204ea 100644 --- a/integration-tests/src/test/java/oracle/weblogic/kubernetes/ItUsabilityOperatorHelmChart.java +++ b/integration-tests/src/test/java/oracle/weblogic/kubernetes/ItUsabilityOperatorHelmChart.java @@ -1246,6 +1246,7 @@ private static String getExecError(String command) { return result.stderr(); } } catch (Exception e) { + assertNotNull(result, "result is null"); getLogger().info("Got exception, command failed with errors " + e.getMessage()); return result.stderr(); } @@ -1256,9 +1257,11 @@ private void cleanUpSA(String namespace) { V1ServiceAccountList sas = Kubernetes.listServiceAccounts(namespace); if (sas != null) { for (V1ServiceAccount sa : sas.getItems()) { - String saName = sa.getMetadata().getName(); - deleteServiceAccount(saName, namespace); - checkServiceDoesNotExist(saName, namespace); + if (sa.getMetadata() != null) { + String saName = sa.getMetadata().getName(); + deleteServiceAccount(saName, namespace); + checkServiceDoesNotExist(saName, namespace); + } } } } @@ -1270,7 +1273,6 @@ private void cleanUpSA(String namespace) { **/ private boolean checkManagedServerConfiguration(String domainNamespace, String domainUid) throws UnknownHostException { - ExecResult result; String adminServerPodName = domainUid + adminServerPrefix; String managedServer = "managed-server1"; int adminServiceNodePort diff --git a/integration-tests/src/test/java/oracle/weblogic/kubernetes/ItWseeSSO.java b/integration-tests/src/test/java/oracle/weblogic/kubernetes/ItWseeSSO.java index d23f9b56d5f..5865ba17f5b 100644 --- a/integration-tests/src/test/java/oracle/weblogic/kubernetes/ItWseeSSO.java +++ b/integration-tests/src/test/java/oracle/weblogic/kubernetes/ItWseeSSO.java @@ -388,6 +388,8 @@ private static void copyKeyStores(String domainNamespace, logger.info("Setting up WebLogic pod to access PV"); V1Pod pvPod = setupWebLogicPod(domainNamespace, pvName, pvcName, "/shared"); + assertNotNull(pvPod, "pvPod is null"); + assertNotNull(pvPod.getMetadata(), "pvPod metadata is null"); logger.info("Creating directory {0} in PV", jksMountPath); execInPod(pvPod, null, true, "mkdir -p " + jksMountPath); diff --git a/integration-tests/src/test/java/oracle/weblogic/kubernetes/actions/impl/Domain.java b/integration-tests/src/test/java/oracle/weblogic/kubernetes/actions/impl/Domain.java index 7792a7dbfd4..0f3696885f0 100644 --- a/integration-tests/src/test/java/oracle/weblogic/kubernetes/actions/impl/Domain.java +++ b/integration-tests/src/test/java/oracle/weblogic/kubernetes/actions/impl/Domain.java @@ -428,7 +428,7 @@ public static boolean scaleClusterWithRestApi(String domainUid, logger.info("Getting service account token stored in secret {0} to authenticate as service account {1}" + " in namespace {2}", secretName, opServiceAccount, opNamespace); String secretToken = Secret.getSecretEncodedToken(opNamespace, secretName); - if (secretToken.isEmpty()) { + if (secretToken == null || secretToken.isEmpty()) { logger.info("Did not get encoded token for secret {0} associated with service account {1} in namespace {2}", secretName, opServiceAccount, opNamespace); return false; @@ -504,7 +504,7 @@ public static boolean scaleClusterWithRestApiInOpPod(String domainUid, logger.info("Getting the secret of service account {0} in namespace {1}", opServiceAccount, opNamespace); String secretName = Secret.getSecretOfServiceAccount(opNamespace, opServiceAccount); - if (secretName.isEmpty()) { + if (secretName == null || secretName.isEmpty()) { logger.info("Did not find secret of service account {0} in namespace {1}", opServiceAccount, opNamespace); return false; } @@ -513,7 +513,7 @@ public static boolean scaleClusterWithRestApiInOpPod(String domainUid, logger.info("Getting service account token stored in secret {0} to authenticate as service account {1}" + " in namespace {2}", secretName, opServiceAccount, opNamespace); String secretToken = Secret.getSecretEncodedToken(opNamespace, secretName); - if (secretToken.isEmpty()) { + if (secretToken == null || secretToken.isEmpty()) { logger.info("Did not get encoded token for secret {0} associated with service account {1} in namespace {2}", secretName, opServiceAccount, opNamespace); return false; @@ -595,7 +595,7 @@ public static ExecResult scaleClusterWithRestApiAndReturnResult(String domainUid logger.info("Getting service account token stored in secret {0} to authenticate as service account {1}" + " in namespace {2}", secretName, opServiceAccount, opNamespace); String secretToken = Secret.getSecretEncodedToken(opNamespace, secretName); - if (secretToken.isEmpty()) { + if (secretToken == null || secretToken.isEmpty()) { logger.info("Did not get encoded token for secret {0} associated with service account {1} in namespace {2}", secretName, opServiceAccount, opNamespace); return new ExecResult(12, "", "secret token is empty"); @@ -1126,6 +1126,8 @@ private static void scaleViaScript(String opNamespace, String domainNamespace, String commandToExecuteInsidePod = scalingCommand.toString(); ExecResult result = null; + assertNotNull(adminPod, "admin pod is null"); + assertNotNull(adminPod.getMetadata(), "admin pod metadata is null"); try { result = assertDoesNotThrow(() -> Kubernetes.exec(adminPod, null, true, "/bin/sh", "-c", commandToExecuteInsidePod), @@ -1134,6 +1136,7 @@ private static void scaleViaScript(String opNamespace, String domainNamespace, logger.info("Command {0} returned with exit value {1}, stderr {2}, stdout {3}", commandToExecuteInsidePod, result.exitValue(), result.stderr(), result.stdout()); } catch (Error err) { + assertNotNull(result, "result is null"); logger.info("Command {0} returned with exit value {1}, stderr {2}, stdout {3}", commandToExecuteInsidePod, result.exitValue(), result.stderr(), result.stdout()); // copy scalingAction.log to local diff --git a/integration-tests/src/test/java/oracle/weblogic/kubernetes/utils/ApplicationUtils.java b/integration-tests/src/test/java/oracle/weblogic/kubernetes/utils/ApplicationUtils.java index a3d434d9b13..300f365f113 100644 --- a/integration-tests/src/test/java/oracle/weblogic/kubernetes/utils/ApplicationUtils.java +++ b/integration-tests/src/test/java/oracle/weblogic/kubernetes/utils/ApplicationUtils.java @@ -36,16 +36,16 @@ public class ApplicationUtils { * @return true if curl command returns HTTP code 200 otherwise false */ public static boolean checkAppUsingHostHeader(String url, String hostHeader, Boolean... args) { - boolean checlReadyAppAccessible = (args.length == 0) ? true : false; + boolean checlReadyAppAccessible = args.length == 0; LoggingFacade logger = getLogger(); StringBuffer curlString = new StringBuffer("status=$(curl --user weblogic:welcome1 "); - StringBuffer headerString = null; + StringBuffer headerString; if (hostHeader != null) { headerString = new StringBuffer("-H 'host: "); headerString.append(hostHeader) .append("' "); } else { - headerString = new StringBuffer(""); + headerString = new StringBuffer(); } curlString.append(" -g -sk --noproxy '*' ") .append(" --silent --show-error ") @@ -426,7 +426,7 @@ public static void verifyAdminConsoleAccessible(String domainNamespace, String port, boolean secureMode, Boolean... args) { - boolean checlReadyAppAccessible = (args.length == 0) ? true : false; + boolean checlReadyAppAccessible = args.length == 0; LoggingFacade logger = getLogger(); String httpKey = "http://"; if (secureMode) { diff --git a/integration-tests/src/test/java/oracle/weblogic/kubernetes/utils/BuildApplication.java b/integration-tests/src/test/java/oracle/weblogic/kubernetes/utils/BuildApplication.java index adef2e0b001..616b4155074 100644 --- a/integration-tests/src/test/java/oracle/weblogic/kubernetes/utils/BuildApplication.java +++ b/integration-tests/src/test/java/oracle/weblogic/kubernetes/utils/BuildApplication.java @@ -1,4 +1,4 @@ -// Copyright (c) 2020, 2022, Oracle and/or its affiliates. +// Copyright (c) 2020, 2024, Oracle and/or its affiliates. // Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. package oracle.weblogic.kubernetes.utils; @@ -37,6 +37,7 @@ import static org.apache.commons.io.FileUtils.copyDirectory; import static org.apache.commons.io.FileUtils.deleteDirectory; import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; +import static org.junit.jupiter.api.Assertions.assertNotNull; /** @@ -117,7 +118,7 @@ public static Path buildApplication( Path destArchiveBaseDir = targetPath == null ? Paths.get(WORK_DIR, appSrcPath.getFileName().toString()) : targetPath; logger.info("DestArchiveBaseDir set to {0}", destArchiveBaseDir.toString()); - Path destDir = null; + assertDoesNotThrow(() -> { // recreate WORK_DIR/j2eeapplications/ @@ -138,7 +139,6 @@ public static Path buildApplication( // zip up the application source to be copied to pod for building Path zipFile = Paths.get(FileUtils.createZipFile(tempAppPath)); - // add ant properties as env variable in pod V1Container buildContainer = new V1Container(); @@ -165,6 +165,8 @@ public static Path buildApplication( //setup temporary WebLogic pod to build application V1Pod webLogicPod = setupWebLogicPod(namespace, buildContainer); + assertNotNull(webLogicPod, "webLogicPod is null"); + assertNotNull(webLogicPod.getMetadata(), "webLogicPod metadata is null"); try { //copy the zip file to /u01 location inside pod @@ -221,7 +223,7 @@ public static Path buildApplication( logger.info("Exception while copying file " + Paths.get(APPLICATIONS_PATH, archiveDistDir) + " from pod", ioex); } - return destDir = Paths.get(destArchiveBaseDir.toString(), "u01/application", archiveDistDir); + return Paths.get(destArchiveBaseDir.toString(), "u01/application", archiveDistDir); } diff --git a/integration-tests/src/test/java/oracle/weblogic/kubernetes/utils/CleanupUtil.java b/integration-tests/src/test/java/oracle/weblogic/kubernetes/utils/CleanupUtil.java index dfad0b89bbb..3277b7f76d3 100644 --- a/integration-tests/src/test/java/oracle/weblogic/kubernetes/utils/CleanupUtil.java +++ b/integration-tests/src/test/java/oracle/weblogic/kubernetes/utils/CleanupUtil.java @@ -10,18 +10,29 @@ import io.kubernetes.client.openapi.ApiException; import io.kubernetes.client.openapi.models.V1ConfigMap; +import io.kubernetes.client.openapi.models.V1ConfigMapList; import io.kubernetes.client.openapi.models.V1Deployment; +import io.kubernetes.client.openapi.models.V1DeploymentList; import io.kubernetes.client.openapi.models.V1Ingress; +import io.kubernetes.client.openapi.models.V1IngressList; import io.kubernetes.client.openapi.models.V1Job; import io.kubernetes.client.openapi.models.V1JobList; import io.kubernetes.client.openapi.models.V1PersistentVolume; import io.kubernetes.client.openapi.models.V1PersistentVolumeClaim; +import io.kubernetes.client.openapi.models.V1PersistentVolumeClaimList; import io.kubernetes.client.openapi.models.V1ReplicaSet; +import io.kubernetes.client.openapi.models.V1ReplicaSetList; import io.kubernetes.client.openapi.models.V1Role; import io.kubernetes.client.openapi.models.V1RoleBinding; +import io.kubernetes.client.openapi.models.V1RoleBindingList; +import io.kubernetes.client.openapi.models.V1RoleList; import io.kubernetes.client.openapi.models.V1Secret; +import io.kubernetes.client.openapi.models.V1SecretList; import io.kubernetes.client.openapi.models.V1Service; import io.kubernetes.client.openapi.models.V1ServiceAccount; +import io.kubernetes.client.openapi.models.V1ServiceAccountList; +import io.kubernetes.client.openapi.models.V1ServiceList; +import oracle.weblogic.domain.DomainList; import oracle.weblogic.domain.DomainResource; import oracle.weblogic.kubernetes.TestConstants; import oracle.weblogic.kubernetes.actions.TestActions; @@ -30,7 +41,32 @@ import oracle.weblogic.kubernetes.actions.impl.primitive.Kubernetes; import oracle.weblogic.kubernetes.logging.LoggingFacade; +import static oracle.weblogic.kubernetes.actions.impl.primitive.Kubernetes.deleteConfigMap; +import static oracle.weblogic.kubernetes.actions.impl.primitive.Kubernetes.deleteDeployment; +import static oracle.weblogic.kubernetes.actions.impl.primitive.Kubernetes.deleteDomainCustomResource; +import static oracle.weblogic.kubernetes.actions.impl.primitive.Kubernetes.deleteJob; +import static oracle.weblogic.kubernetes.actions.impl.primitive.Kubernetes.deleteNamespacedRole; +import static oracle.weblogic.kubernetes.actions.impl.primitive.Kubernetes.deleteNamespacedRoleBinding; +import static oracle.weblogic.kubernetes.actions.impl.primitive.Kubernetes.deletePv; +import static oracle.weblogic.kubernetes.actions.impl.primitive.Kubernetes.deletePvc; +import static oracle.weblogic.kubernetes.actions.impl.primitive.Kubernetes.deleteReplicaSet; +import static oracle.weblogic.kubernetes.actions.impl.primitive.Kubernetes.deleteSecret; +import static oracle.weblogic.kubernetes.actions.impl.primitive.Kubernetes.deleteService; +import static oracle.weblogic.kubernetes.actions.impl.primitive.Kubernetes.deleteServiceAccount; +import static oracle.weblogic.kubernetes.actions.impl.primitive.Kubernetes.listConfigMaps; +import static oracle.weblogic.kubernetes.actions.impl.primitive.Kubernetes.listDeployments; +import static oracle.weblogic.kubernetes.actions.impl.primitive.Kubernetes.listDomains; import static oracle.weblogic.kubernetes.actions.impl.primitive.Kubernetes.listJobs; +import static oracle.weblogic.kubernetes.actions.impl.primitive.Kubernetes.listNamespacedIngresses; +import static oracle.weblogic.kubernetes.actions.impl.primitive.Kubernetes.listNamespacedRoleBinding; +import static oracle.weblogic.kubernetes.actions.impl.primitive.Kubernetes.listNamespacedRoles; +import static oracle.weblogic.kubernetes.actions.impl.primitive.Kubernetes.listNamespaces; +import static oracle.weblogic.kubernetes.actions.impl.primitive.Kubernetes.listPersistentVolumeClaims; +import static oracle.weblogic.kubernetes.actions.impl.primitive.Kubernetes.listPersistentVolumes; +import static oracle.weblogic.kubernetes.actions.impl.primitive.Kubernetes.listReplicaSets; +import static oracle.weblogic.kubernetes.actions.impl.primitive.Kubernetes.listSecrets; +import static oracle.weblogic.kubernetes.actions.impl.primitive.Kubernetes.listServiceAccounts; +import static oracle.weblogic.kubernetes.actions.impl.primitive.Kubernetes.listServices; import static oracle.weblogic.kubernetes.utils.CommonTestUtils.testUntil; import static oracle.weblogic.kubernetes.utils.ThreadSafeLogger.getLogger; @@ -132,14 +168,20 @@ private static void deleteClusters(String namespace) { */ private static void deleteDomains(String namespace) { LoggingFacade logger = getLogger(); - try { - for (var item : Kubernetes.listDomains(namespace).getItems()) { - String domainUid = item.getMetadata().getName(); - Kubernetes.deleteDomainCustomResource(domainUid, namespace); + DomainList domainList = listDomains(namespace); + if (domainList != null) { + List items = domainList.getItems(); + try { + for (var item : items) { + if (item.getMetadata() != null) { + String domainUid = item.getMetadata().getName(); + deleteDomainCustomResource(domainUid, namespace); + } + } + } catch (Exception ex) { + logger.severe(ex.getMessage()); + logger.severe("Failed to delete domain or the {0} is not a domain namespace", namespace); } - } catch (Exception ex) { - logger.severe(ex.getMessage()); - logger.severe("Failed to delete domain or the {0} is not a domain namespace", namespace); } } @@ -182,13 +224,18 @@ public static Callable nothingFoundInNamespace(String namespace) { // Check if any domains exist try { - if (!Kubernetes.listDomains(namespace).getItems().isEmpty()) { - logger.info("Domain still exists !!!"); - List items = Kubernetes.listDomains(namespace).getItems(); - for (var item : items) { - logger.info(item.getMetadata().getName()); + DomainList domainList = listDomains(namespace); + if (domainList != null) { + List items = domainList.getItems(); + if (!items.isEmpty()) { + logger.info("Domain still exists !!!"); + for (var item : items) { + if (item.getMetadata() != null) { + logger.info(item.getMetadata().getName()); + } + } + nothingFound = false; } - nothingFound = false; } } catch (Exception ex) { logger.warning(ex.getMessage()); @@ -197,13 +244,18 @@ public static Callable nothingFoundInNamespace(String namespace) { // Check if any replica sets exist try { - if (!Kubernetes.listReplicaSets(namespace).getItems().isEmpty()) { - logger.info("ReplicaSets still exists!!!"); - List items = Kubernetes.listReplicaSets(namespace).getItems(); - for (var item : items) { - logger.info(item.getMetadata().getName()); + V1ReplicaSetList replicaSetList = listReplicaSets(namespace); + if (replicaSetList != null) { + List items = replicaSetList.getItems(); + if (!items.isEmpty()) { + logger.info("ReplicaSets still exists!!!"); + for (var item : items) { + if (item.getMetadata() != null) { + logger.info(item.getMetadata().getName()); + } + } + nothingFound = false; } - nothingFound = false; } } catch (Exception ex) { logger.warning(ex.getMessage()); @@ -232,13 +284,18 @@ public static Callable nothingFoundInNamespace(String namespace) { // check if any configmaps exist try { - if (!Kubernetes.listConfigMaps(namespace).getItems().isEmpty()) { - logger.info("Config Maps still exists!!!"); - List items = Kubernetes.listConfigMaps(namespace).getItems(); - for (var item : items) { - logger.info(item.getMetadata().getName()); + V1ConfigMapList configMapList = listConfigMaps(namespace); + if (configMapList != null) { + List items = configMapList.getItems(); + if (!items.isEmpty()) { + logger.info("Config Maps still exists!!!"); + for (var item : items) { + if (item.getMetadata() != null) { + logger.info(item.getMetadata().getName()); + } + } + nothingFound = false; } - nothingFound = false; } } catch (Exception ex) { logger.warning(ex.getMessage()); @@ -247,13 +304,17 @@ public static Callable nothingFoundInNamespace(String namespace) { // check if any secrets exist try { - if (!Kubernetes.listSecrets(namespace).getItems().isEmpty()) { - logger.info("Secrets still exists!!!"); - List items = Kubernetes.listSecrets(namespace).getItems(); - for (var item : items) { - logger.info(item.getMetadata().getName()); + V1SecretList secretList = listSecrets(namespace); + if (secretList != null) { + List items = secretList.getItems(); + if (!items.isEmpty()) { + for (var item : items) { + if (item.getMetadata() != null) { + logger.info(item.getMetadata().getName()); + } + } + nothingFound = false; } - nothingFound = false; } } catch (Exception ex) { logger.warning(ex.getMessage()); @@ -262,13 +323,18 @@ public static Callable nothingFoundInNamespace(String namespace) { // check if any persistent volume claims exist try { - if (!Kubernetes.listPersistentVolumeClaims(namespace).getItems().isEmpty()) { - logger.info("Persistent Volumes Claims still exists!!!"); - List items = Kubernetes.listPersistentVolumeClaims(namespace).getItems(); - for (var item : items) { - logger.info(item.getMetadata().getName()); + V1PersistentVolumeClaimList pvcList = listPersistentVolumeClaims(namespace); + if (pvcList != null) { + List items = pvcList.getItems(); + if (!items.isEmpty()) { + logger.info("Persistent Volumes Claims still exists!!!"); + for (var item : items) { + if (item.getMetadata() != null) { + logger.info(item.getMetadata().getName()); + } + } + nothingFound = false; } - nothingFound = false; } } catch (Exception ex) { logger.warning(ex.getMessage()); @@ -277,23 +343,29 @@ public static Callable nothingFoundInNamespace(String namespace) { // check if any persistent volumes exist try { - for (var item : Kubernetes.listPersistentVolumeClaims(namespace).getItems()) { - String label = Optional.ofNullable(item) - .map(pvc -> pvc.getMetadata()) - .map(metadata -> metadata.getLabels()) - .map(labels -> labels.get("weblogic.domainUid")).get(); - - if (!Kubernetes.listPersistentVolumes( - String.format("weblogic.domainUid = %s", label)) - .getItems().isEmpty()) { - logger.info("Persistent Volumes still exists!!!"); - List pvs = Kubernetes.listPersistentVolumes( + V1PersistentVolumeClaimList persistentVolumeClaimList = listPersistentVolumeClaims(namespace); + if (persistentVolumeClaimList != null) { + List items = persistentVolumeClaimList.getItems(); + for (var item : items) { + String label = Optional.ofNullable(item) + .map(pvc -> pvc.getMetadata()) + .map(metadata -> metadata.getLabels()) + .map(labels -> labels.get("weblogic.domainUid")).get(); + + if (!listPersistentVolumes( String.format("weblogic.domainUid = %s", label)) - .getItems(); - for (var pv : pvs) { - logger.info(pv.getMetadata().getName()); + .getItems().isEmpty()) { + logger.info("Persistent Volumes still exists!!!"); + List pvs = listPersistentVolumes( + String.format("weblogic.domainUid = %s", label)) + .getItems(); + for (var pv : pvs) { + if (pv.getMetadata() != null) { + logger.info(pv.getMetadata().getName()); + } + } + nothingFound = false; } - nothingFound = false; } } } catch (Exception ex) { @@ -303,13 +375,18 @@ public static Callable nothingFoundInNamespace(String namespace) { // check if any deployments exist try { - if (!Kubernetes.listDeployments(namespace).getItems().isEmpty()) { - logger.info("Deployments still exists!!!"); - List items = Kubernetes.listDeployments(namespace).getItems(); - for (var item : items) { - logger.info(item.getMetadata().getName()); + V1DeploymentList deploymentList = listDeployments(namespace); + if (deploymentList != null) { + List items = deploymentList.getItems(); + if (!items.isEmpty()) { + logger.info("Deployments still exists!!!"); + for (var item : items) { + if (item.getMetadata() != null) { + logger.info(item.getMetadata().getName()); + } + } + nothingFound = false; } - nothingFound = false; } } catch (Exception ex) { logger.warning(ex.getMessage()); @@ -318,13 +395,18 @@ public static Callable nothingFoundInNamespace(String namespace) { // check if any services exist try { - if (!Kubernetes.listServices(namespace).getItems().isEmpty()) { - logger.info("Services still exists!!!"); - List items = Kubernetes.listServices(namespace).getItems(); - for (var item : items) { - logger.info(item.getMetadata().getName()); + V1ServiceList serviceList = listServices(namespace); + if (serviceList != null) { + List items = serviceList.getItems(); + if (!items.isEmpty()) { + logger.info("Services still exists!!!"); + for (var item : items) { + if (item.getMetadata() != null) { + logger.info(item.getMetadata().getName()); + } + } + nothingFound = false; } - nothingFound = false; } } catch (Exception ex) { logger.warning(ex.getMessage()); @@ -333,13 +415,18 @@ public static Callable nothingFoundInNamespace(String namespace) { // check if any service accounts exist try { - if (!Kubernetes.listServiceAccounts(namespace).getItems().isEmpty()) { - logger.info("Service Accounts still exists!!!"); - List items = Kubernetes.listServiceAccounts(namespace).getItems(); - for (var item : items) { - logger.info(item.getMetadata().getName()); + V1ServiceAccountList serviceAccountList = listServiceAccounts(namespace); + if (serviceAccountList != null) { + List items = serviceAccountList.getItems(); + if (!items.isEmpty()) { + logger.info("Service Accounts still exists!!!"); + for (var item : items) { + if (item.getMetadata() != null) { + logger.info(item.getMetadata().getName()); + } + } + nothingFound = false; } - nothingFound = false; } } catch (Exception ex) { logger.warning(ex.getMessage()); @@ -348,13 +435,17 @@ public static Callable nothingFoundInNamespace(String namespace) { // check if any ingress exist try { - if (!Kubernetes.listNamespacedIngresses(namespace).getItems().isEmpty()) { - logger.info("Ingresses still exists!!!"); - List items = Kubernetes.listNamespacedIngresses(namespace).getItems(); - for (var item : items) { - logger.info(item.getMetadata().getName()); + V1IngressList ingressList = listNamespacedIngresses(namespace); + if (ingressList != null) { + List items = listNamespacedIngresses(namespace).getItems(); + if (!items.isEmpty()) { + for (var item : items) { + if (item.getMetadata() != null) { + logger.info(item.getMetadata().getName()); + } + } + nothingFound = false; } - nothingFound = false; } } catch (Exception ex) { logger.warning(ex.getMessage()); @@ -363,13 +454,18 @@ public static Callable nothingFoundInNamespace(String namespace) { // check if any namespaced roles exist try { - if (!Kubernetes.listNamespacedRoles(namespace).getItems().isEmpty()) { - logger.info("Namespaced roles still exists!!!"); - List items = Kubernetes.listNamespacedRoles(namespace).getItems(); - for (var item : items) { - logger.info(item.getMetadata().getName()); + V1RoleList roleList = listNamespacedRoles(namespace); + if (roleList != null) { + List items = roleList.getItems(); + if (!items.isEmpty()) { + logger.info("Namespaced roles still exists!!!"); + for (var item : items) { + if (item.getMetadata() != null) { + logger.info(item.getMetadata().getName()); + } + } + nothingFound = false; } - nothingFound = false; } } catch (Exception ex) { logger.warning(ex.getMessage()); @@ -378,13 +474,18 @@ public static Callable nothingFoundInNamespace(String namespace) { // check if any namespaced role bindings exist try { - if (!Kubernetes.listNamespacedRoleBinding(namespace).getItems().isEmpty()) { - logger.info("Namespaced role bindings still exists!!!"); - List items = Kubernetes.listNamespacedRoleBinding(namespace).getItems(); - for (var item : items) { - logger.info(item.getMetadata().getName()); + V1RoleBindingList roleBindingList = listNamespacedRoleBinding(namespace); + if (roleBindingList != null) { + List items = roleBindingList.getItems(); + if (!items.isEmpty()) { + logger.info("Namespaced role bindings still exists!!!"); + for (var item : items) { + if (item.getMetadata() != null) { + logger.info(item.getMetadata().getName()); + } + } + nothingFound = false; } - nothingFound = false; } } catch (Exception ex) { logger.warning(ex.getMessage()); @@ -408,7 +509,7 @@ public static Callable namespaceNotFound(String namespace) { boolean notFound = true; // get namespaces try { - List namespaceList = Kubernetes.listNamespaces(); + List namespaceList = listNamespaces(); if (namespaceList.contains(namespace)) { logger.info("Namespace still exists!!!"); logger.info(namespace); @@ -433,8 +534,14 @@ public static void deleteNamespacedArtifacts(String namespace) { // Delete all Domain objects in the given namespace try { - for (var item : Kubernetes.listDomains(namespace).getItems()) { - Kubernetes.deleteDomainCustomResource(item.getMetadata().getName(), namespace); + DomainList domainList = listDomains(namespace); + if (domainList != null) { + List items = domainList.getItems(); + for (var item : items) { + if (item.getMetadata() != null) { + deleteDomainCustomResource(item.getMetadata().getName(), namespace); + } + } } } catch (Exception ex) { logger.warning(ex.getMessage()); @@ -443,8 +550,14 @@ public static void deleteNamespacedArtifacts(String namespace) { // Delete deployments try { - for (var item : Kubernetes.listDeployments(namespace).getItems()) { - Kubernetes.deleteDeployment(namespace, item.getMetadata().getName()); + V1DeploymentList deploymentList = listDeployments(namespace); + if (deploymentList != null) { + List items = deploymentList.getItems(); + for (var item : items) { + if (item.getMetadata() != null) { + deleteDeployment(namespace, item.getMetadata().getName()); + } + } } } catch (Exception ex) { logger.warning(ex.getMessage()); @@ -453,8 +566,14 @@ public static void deleteNamespacedArtifacts(String namespace) { // Delete replicasets try { - for (var item : Kubernetes.listReplicaSets(namespace).getItems()) { - Kubernetes.deleteReplicaSet(namespace, item.getMetadata().getName()); + V1ReplicaSetList replicaSetList = listReplicaSets(namespace); + if (replicaSetList != null) { + List items = replicaSetList.getItems(); + for (var item : items) { + if (item.getMetadata() != null) { + deleteReplicaSet(namespace, item.getMetadata().getName()); + } + } } } catch (Exception ex) { logger.warning(ex.getMessage()); @@ -467,7 +586,7 @@ public static void deleteNamespacedArtifacts(String namespace) { if (jobList != null) { for (var item : jobList.getItems()) { if (item.getMetadata() != null) { - Kubernetes.deleteJob(namespace, item.getMetadata().getName()); + deleteJob(namespace, item.getMetadata().getName()); } } } @@ -478,8 +597,15 @@ public static void deleteNamespacedArtifacts(String namespace) { // Delete configmaps try { - for (var item : Kubernetes.listConfigMaps(namespace).getItems()) { - Kubernetes.deleteConfigMap(item.getMetadata().getName(), namespace); + V1ConfigMapList configMapList = listConfigMaps(namespace); + if (configMapList != null) { + List items = configMapList.getItems(); + for (var item : items) { + if (item.getMetadata() != null) { + deleteConfigMap(item.getMetadata().getName(), namespace); + } + } + } } catch (Exception ex) { logger.warning(ex.getMessage()); @@ -488,8 +614,14 @@ public static void deleteNamespacedArtifacts(String namespace) { // Delete secrets try { - for (var item : Kubernetes.listSecrets(namespace).getItems()) { - Kubernetes.deleteSecret(item.getMetadata().getName(), namespace); + V1SecretList secretList = listSecrets(namespace); + if (secretList != null) { + List items = secretList.getItems(); + for (var item : items) { + if (item.getMetadata() != null) { + deleteSecret(item.getMetadata().getName(), namespace); + } + } } } catch (Exception ex) { logger.warning(ex.getMessage()); @@ -497,43 +629,57 @@ public static void deleteNamespacedArtifacts(String namespace) { } // Delete pvc - List pvs = new ArrayList(); - - for (var pvc : Kubernetes.listPersistentVolumeClaims(namespace).getItems()) { - String label = null; - if (pvc.getMetadata().getLabels() != null) { - label = pvc.getMetadata().getLabels().get("weblogic.domainUid"); - } - // get a list of pvs used by the pvcs in this namespace - try { - if (null != label) { - List items = Kubernetes.listPersistentVolumes( - String.format("weblogic.domainUid = %s", label)).getItems(); - pvs.addAll(items); + List pvs = new ArrayList<>(); + + V1PersistentVolumeClaimList persistentVolumeClaimList = listPersistentVolumeClaims(namespace); + if (persistentVolumeClaimList != null) { + List pvcItems = persistentVolumeClaimList.getItems(); + for (var pvc : pvcItems) { + String label = null; + if (pvc.getMetadata() != null && pvc.getMetadata().getLabels() != null) { + label = pvc.getMetadata().getLabels().get("weblogic.domainUid"); + } + // get a list of pvs used by the pvcs in this namespace + try { + if (null != label) { + List items = listPersistentVolumes( + String.format("weblogic.domainUid = %s", label)).getItems(); + pvs.addAll(items); + } + // delete the pvc + if (pvc.getMetadata() != null) { + deletePvc(pvc.getMetadata().getName(), namespace); + } + } catch (ApiException ex) { + logger.warning(ex.getResponseBody()); } - // delete the pvc - Kubernetes.deletePvc(pvc.getMetadata().getName(), namespace); - } catch (ApiException ex) { - logger.warning(ex.getResponseBody()); } } // Delete pv if (!pvs.isEmpty()) { for (var item : pvs) { - try { - logger.info("Deleting persistent volume {0}", item.getMetadata().getName()); - Kubernetes.deletePv(item.getMetadata().getName()); - } catch (Exception ex) { - logger.warning("Failed to delete persistent volumes"); + if (item.getMetadata() != null) { + try { + logger.info("Deleting persistent volume {0}", item.getMetadata().getName()); + deletePv(item.getMetadata().getName()); + } catch (Exception ex) { + logger.warning("Failed to delete persistent volumes"); + } } } } // Delete services try { - for (var item : Kubernetes.listServices(namespace).getItems()) { - Kubernetes.deleteService(item.getMetadata().getName(), namespace); + V1ServiceList serviceList = listServices(namespace); + if (serviceList != null) { + List items = serviceList.getItems(); + for (var item : items) { + if (item.getMetadata() != null) { + deleteService(item.getMetadata().getName(), namespace); + } + } } } catch (Exception ex) { logger.warning(ex.getMessage()); @@ -542,8 +688,13 @@ public static void deleteNamespacedArtifacts(String namespace) { // Delete namespaced roles try { - for (var item : Kubernetes.listNamespacedRoles(namespace).getItems()) { - Kubernetes.deleteNamespacedRole(namespace, item.getMetadata().getName()); + V1RoleList roleList = listNamespacedRoles(namespace); + if (roleList != null) { + for (var item : roleList.getItems()) { + if (item.getMetadata() != null) { + deleteNamespacedRole(namespace, item.getMetadata().getName()); + } + } } } catch (Exception ex) { logger.warning(ex.getMessage()); @@ -552,8 +703,13 @@ public static void deleteNamespacedArtifacts(String namespace) { // Delete namespaced role bindings try { - for (var item : Kubernetes.listNamespacedRoleBinding(namespace).getItems()) { - Kubernetes.deleteNamespacedRoleBinding(namespace, item.getMetadata().getName()); + V1RoleBindingList roleBindingList = listNamespacedRoleBinding(namespace); + if (roleBindingList != null) { + for (var item : roleBindingList.getItems()) { + if (item.getMetadata() != null) { + deleteNamespacedRoleBinding(namespace, item.getMetadata().getName()); + } + } } } catch (Exception ex) { logger.warning(ex.getMessage()); @@ -562,8 +718,14 @@ public static void deleteNamespacedArtifacts(String namespace) { // Delete service accounts try { - for (var item : Kubernetes.listServiceAccounts(namespace).getItems()) { - Kubernetes.deleteServiceAccount(item.getMetadata().getName(), namespace); + V1ServiceAccountList serviceAccountList = listServiceAccounts(namespace); + if (serviceAccountList != null) { + List items = serviceAccountList.getItems(); + for (var item : items) { + if (item.getMetadata() != null) { + deleteServiceAccount(item.getMetadata().getName(), namespace); + } + } } } catch (Exception ex) { logger.warning(ex.getMessage()); @@ -583,7 +745,7 @@ public static void deleteNamespace(String namespace) { Kubernetes.deleteNamespace(namespace); } catch (Exception ex) { logger.warning(ex.getMessage()); - logger.warning("Failed to delete namespace"); + logger.warning("Failed to delete namespace {0}", namespace); } } diff --git a/integration-tests/src/test/java/oracle/weblogic/kubernetes/utils/ClusterUtils.java b/integration-tests/src/test/java/oracle/weblogic/kubernetes/utils/ClusterUtils.java index 68292ac6d25..edc3d0c7578 100644 --- a/integration-tests/src/test/java/oracle/weblogic/kubernetes/utils/ClusterUtils.java +++ b/integration-tests/src/test/java/oracle/weblogic/kubernetes/utils/ClusterUtils.java @@ -1,4 +1,4 @@ -// Copyright (c) 2022, 2023, Oracle and/or its affiliates. +// Copyright (c) 2022, 2024, Oracle and/or its affiliates. // Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. package oracle.weblogic.kubernetes.utils; @@ -295,13 +295,7 @@ public static boolean scaleClusterWithRestApi(String domainUid, logger.info("Calling curl to scale the cluster"); ExecResult result = Command.withParams(params).executeAndReturnResult(); logger.info("Return values {0}, errors {1}", result.stdout(), result.stderr()); - if (result != null) { - logger.info("Return values {0}, errors {1}", result.stdout(), result.stderr()); - if (result.stdout().contains(expectedMsg) || result.stderr().contains(expectedMsg)) { - return true; - } - } - return false; + return result.stdout().contains(expectedMsg) || result.stderr().contains(expectedMsg); } /** @@ -362,18 +356,17 @@ public static boolean scaleClusterWithRestApiInPod(String domainUid, .append(clusterName) .append("/scale"); - ExecResult result = null; + ExecResult result; try { logger.info("Calling curl to scale the cluster"); result = ExecCommand.exec(command.toString(), true); logger.info("result is: {0}", result.toString()); logger.info("Return values {0}, errors {1}", result.stdout(), result.stderr()); - if (result != null) { - logger.info("Return values {0}, errors {1}", result.stdout(), result.stderr()); - if (result.stdout().contains(expectedMsg) || result.stderr().contains(expectedMsg)) { - return true; - } + + if (result.stdout().contains(expectedMsg) || result.stderr().contains(expectedMsg)) { + return true; } + } catch (IOException | InterruptedException ex) { logger.severe(ex.getMessage()); } diff --git a/integration-tests/src/test/java/oracle/weblogic/kubernetes/utils/CommonMiiTestUtils.java b/integration-tests/src/test/java/oracle/weblogic/kubernetes/utils/CommonMiiTestUtils.java index ddbd0a4ae1a..3a846053a2a 100644 --- a/integration-tests/src/test/java/oracle/weblogic/kubernetes/utils/CommonMiiTestUtils.java +++ b/integration-tests/src/test/java/oracle/weblogic/kubernetes/utils/CommonMiiTestUtils.java @@ -565,11 +565,9 @@ public static DomainResource createDomainResource( String auxiliaryImageVolumeName, String... auxiliaryImageName) { - DomainResource domainCR = CommonMiiTestUtils.createDomainResourceWithAuxiliaryImageAndVolume(domainResourceName, + return createDomainResourceWithAuxiliaryImageAndVolume(domainResourceName, domNamespace, baseImageName, adminSecretName, repoSecretName, encryptionSecretName, auxiliaryImagePath, auxiliaryImageVolumeName, auxiliaryImageName); - - return domainCR; } /** @@ -608,15 +606,7 @@ public static DomainResource createDomainResourceWithAuxiliaryImageAndVolume( domainCR.spec().configuration().model() .withModelHome(auxiliaryImagePath + "/models") .withWdtInstallHome(auxiliaryImagePath + "/weblogic-deploy"); - for (String cmImageName: auxiliaryImageName) { - /* Commented out due to auxiliary image 4.0 changes - domainCR.spec().serverPod() - .addAuxiliaryImagesItem(new AuxiliaryImage() - .image(cmImageName) - .volume(auxiliaryImageVolumeName) - .imagePullPolicy("IfNotPresent")); - */ - } + return domainCR; } @@ -806,7 +796,6 @@ public static DomainResource createDomainResourceWithLogHome( String javaOpt, boolean onlineUpdateEnabled, boolean setDataHome) { - LoggingFacade logger = getLogger(); List securityList = new ArrayList<>(); if (dbSecretName != null) { @@ -1087,7 +1076,7 @@ private static String readRuntimeResource(String adminSvcExtHost, String domainN String domainName = adminServerPodName.split("-" + ADMIN_SERVER_NAME_BASE)[0]; String serviceName = ADMIN_SERVER_NAME_BASE; String ingressName = domainNamespace + "-" + domainName + "-" + serviceName + "-" + port; - String hostHeader = domainNamespace + "." + domainName + "." + serviceName;; + String hostHeader = domainNamespace + "." + domainName + "." + serviceName; Optional ingressFound; try { List ingresses = TestActions.listIngresses(domainNamespace); @@ -1112,7 +1101,7 @@ private static String readRuntimeResource(String adminSvcExtHost, String domainN ex.printStackTrace(); } } else { - String curlString = null; + String curlString; if (OKE_CLUSTER_PRIVATEIP) { String protocol = "http"; String port = "7001"; @@ -1261,7 +1250,7 @@ public static boolean checkWeblogicMBean(String adminSvcExtHost, String domainName = adminServerPodName.split("-" + ADMIN_SERVER_NAME_BASE)[0]; String serviceName = ADMIN_SERVER_NAME_BASE; String ingressName = domainNamespace + "-" + domainName + "-" + serviceName + "-" + port; - String hostHeader = domainNamespace + "." + domainName + "." + serviceName;; + String hostHeader = domainNamespace + "." + domainName + "." + serviceName; Optional ingressFound; try { List ingresses = TestActions.listIngresses(domainNamespace); @@ -1416,7 +1405,7 @@ public static void createJobToChangePermissionsOnPvHostPath(String pvName, Strin // check job status and fail test if the job failed V1Job job = assertDoesNotThrow(() -> getJob(jobName, namespace), "Getting the job failed"); - if (job != null) { + if (job != null && job.getStatus() != null && job.getStatus().getConditions() != null) { V1JobCondition jobCondition = job.getStatus().getConditions().stream().filter( v1JobCondition -> "Failed".equals(v1JobCondition.getType())) .findAny() @@ -1481,7 +1470,7 @@ public static void createJobToChangePermissionsOnPvHostPath(String pvName, Strin // check job status and fail test if the job failed V1Job job = assertDoesNotThrow(() -> getJob(jobName, namespace), "Getting the job failed"); - if (job != null) { + if (job != null && job.getStatus() != null && job.getStatus().getConditions() != null) { V1JobCondition jobCondition = job.getStatus().getConditions().stream().filter( v1JobCondition -> "Failed".equals(v1JobCondition.getType())) .findAny() diff --git a/integration-tests/src/test/java/oracle/weblogic/kubernetes/utils/CommonTestUtils.java b/integration-tests/src/test/java/oracle/weblogic/kubernetes/utils/CommonTestUtils.java index 6967989aff1..fa30c49b4a9 100644 --- a/integration-tests/src/test/java/oracle/weblogic/kubernetes/utils/CommonTestUtils.java +++ b/integration-tests/src/test/java/oracle/weblogic/kubernetes/utils/CommonTestUtils.java @@ -40,13 +40,12 @@ import io.kubernetes.client.openapi.models.V1IngressServiceBackend; import io.kubernetes.client.openapi.models.V1IngressTLS; import io.kubernetes.client.openapi.models.V1ServiceBackendPort; -import oracle.weblogic.domain.ClusterSpec; +import oracle.weblogic.domain.ClusterResource; import oracle.weblogic.domain.DomainCondition; import oracle.weblogic.domain.DomainResource; import oracle.weblogic.kubernetes.TestConstants; import oracle.weblogic.kubernetes.actions.impl.primitive.Command; import oracle.weblogic.kubernetes.actions.impl.primitive.CommandParams; -import oracle.weblogic.kubernetes.actions.impl.primitive.Kubernetes; import oracle.weblogic.kubernetes.logging.LoggingFacade; import org.awaitility.core.ConditionEvaluationListener; import org.awaitility.core.ConditionFactory; @@ -103,6 +102,7 @@ import static oracle.weblogic.kubernetes.actions.TestActions.scaleClusterWithRestApiInOpPod; import static oracle.weblogic.kubernetes.actions.TestActions.scaleClusterWithWLDF; import static oracle.weblogic.kubernetes.actions.impl.UniqueName.random; +import static oracle.weblogic.kubernetes.actions.impl.primitive.Kubernetes.getClusterCustomResource; import static oracle.weblogic.kubernetes.assertions.TestAssertions.credentialsNotValid; import static oracle.weblogic.kubernetes.assertions.TestAssertions.credentialsValid; import static oracle.weblogic.kubernetes.assertions.TestAssertions.isPodReady; @@ -166,11 +166,8 @@ public static ConditionFactory createStandardRetryPolicyWithAtMost(long minutes) } public static ConditionFactory withStandardRetryPolicy = createStandardRetryPolicyWithAtMost(5); - public static ConditionFactory withStandardRetryPolicyIgnoringExceptions = - createStandardRetryPolicyWithAtMost(5).ignoreExceptions(); public static ConditionFactory withLongRetryPolicy = createStandardRetryPolicyWithAtMost(15); - private static final String TMP_FILE_NAME = "temp-download-file.out"; private static int adminListenPort = 7001; /** @@ -241,7 +238,7 @@ public static boolean testUntilNoException(ConditionFactory conditionFactory, Ca private static ConditionEvaluationListener createConditionEvaluationListener( LoggingFacade logger, String msg, Object... params) { - return new ConditionEvaluationListener() { + return new ConditionEvaluationListener<>() { @Override public void conditionEvaluated(EvaluatedCondition condition) { int paramsSize = params != null ? params.length : 0; @@ -389,9 +386,10 @@ public static void checkServiceDoesNotExist(String serviceName, String namespace * @return true, if the cluster replica count is matched */ public static boolean checkClusterReplicaCountMatches(String clusterName, - String namespace, Integer replicaCount) throws ApiException { - ClusterSpec clusterSpec = Kubernetes.getClusterCustomResource(clusterName, namespace, CLUSTER_VERSION).getSpec(); - return Optional.ofNullable(clusterSpec).get().replicas() == replicaCount; + String namespace, int replicaCount) throws ApiException { + ClusterResource clusterResource = getClusterCustomResource(clusterName, namespace, CLUSTER_VERSION); + return clusterResource != null + && clusterResource.getSpec().replicas() == replicaCount; } /** Scale the WebLogic cluster to specified number of servers. @@ -485,7 +483,7 @@ public static void scaleAndVerifyCluster(String clusterName, clusterName, domainUid, domainNamespace, replicasAfterScale); if (withRestApi) { if (OKE_CLUSTER && args != null && args.length > 0) { - String operatorPodName = (args == null || args.length == 0) ? null : args[0]; + String operatorPodName = args[0]; int opExtPort = 8081; assertThat(assertDoesNotThrow(() -> scaleClusterWithRestApiInOpPod(domainUid, clusterName, replicasAfterScale, operatorPodName, opExtPort, opNamespace, opServiceAccount))) @@ -1106,15 +1104,15 @@ public static Callable runClientInsidePodVerifyResult(String podName, * Adds proxy extra arguments for image builder command. **/ public static String getImageBuilderExtraArgs() { - StringBuffer extraArgs = new StringBuffer(""); + StringBuffer extraArgs = new StringBuffer(); String httpsproxy = HTTPS_PROXY; String httpproxy = HTTP_PROXY; String noproxy = NO_PROXY; LoggingFacade logger = getLogger(); logger.info(" httpsproxy : " + httpsproxy); - String proxyHost = ""; - StringBuffer mvnArgs = new StringBuffer(""); + String proxyHost; + StringBuffer mvnArgs = new StringBuffer(); if (httpsproxy != null) { logger.info(" httpsproxy : " + httpsproxy); proxyHost = httpsproxy.substring(httpsproxy.lastIndexOf("www"), httpsproxy.lastIndexOf(":")); @@ -1135,7 +1133,7 @@ public static String getImageBuilderExtraArgs() { logger.info(" noproxy : " + noproxy); extraArgs.append(String.format(" --build-arg no_proxy=%s",noproxy)); } - if (!mvnArgs.equals("")) { + if (mvnArgs.length() > 0) { extraArgs.append(" --build-arg MAVEN_OPTS=\" " + mvnArgs.toString() + "\""); } return extraArgs.toString(); @@ -1166,7 +1164,11 @@ public static void verifyServerCommunication(String curlRequest, List ma } catch (IOException | InterruptedException ex) { logger.severe(ex.getMessage()); } - String response = result.stdout().trim(); + + String response = ""; + if (result.stdout() != null) { + response = result.stdout().trim(); + } logger.info(response); for (var managedServer : managedServers.entrySet()) { boolean connectToOthers = true; @@ -1832,7 +1834,7 @@ public static boolean checkImageContainerReady(String containerName) { ex.printStackTrace(); } - return result.stdout().contains("The server started in RUNNING mode"); + return result != null && result.stdout() != null && result.stdout().contains("The server started in RUNNING mode"); } /** diff --git a/integration-tests/src/test/java/oracle/weblogic/kubernetes/utils/ConfigMapUtils.java b/integration-tests/src/test/java/oracle/weblogic/kubernetes/utils/ConfigMapUtils.java index bd36722422d..e4f7dae700c 100644 --- a/integration-tests/src/test/java/oracle/weblogic/kubernetes/utils/ConfigMapUtils.java +++ b/integration-tests/src/test/java/oracle/weblogic/kubernetes/utils/ConfigMapUtils.java @@ -1,7 +1,6 @@ -// Copyright (c) 2021, 2022, Oracle and/or its affiliates. +// Copyright (c) 2021, 2024, Oracle and/or its affiliates. // Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. - package oracle.weblogic.kubernetes.utils; import java.io.IOException; @@ -162,17 +161,11 @@ public static void createConfigMapForDomainCreation(String configMapName, List

configMapExist(String nameSpace, String configMapName) throws ApiException { List cmList = Kubernetes.listConfigMaps(nameSpace).getItems(); V1ConfigMap configMapToModify = cmList.stream() - .filter(cm -> configMapName.equals(cm.getMetadata().getName())) + .filter(cm -> cm.getMetadata() != null && configMapName.equals(cm.getMetadata().getName())) .findAny() .orElse(null); - return () -> { - if (configMapToModify != null) { - return true; - } else { - return false; - } - }; + return () -> configMapToModify != null; } /** @@ -183,17 +176,11 @@ public static Callable configMapExist(String nameSpace, String configMa public static Callable configMapDoesNotExist(String nameSpace, String configMapName) throws ApiException { List cmList = Kubernetes.listConfigMaps(nameSpace).getItems(); V1ConfigMap configMapToModify = cmList.stream() - .filter(cm -> configMapName.equals(cm.getMetadata().getName())) + .filter(cm -> cm.getMetadata() != null && configMapName.equals(cm.getMetadata().getName())) .findAny() .orElse(null); - return () -> { - if (configMapToModify == null) { - return true; - } else { - return false; - } - }; + return () -> configMapToModify == null; } /** @@ -241,14 +228,16 @@ public static void editConfigMap(String oldRegex, String newRegex, String configFileName) throws ApiException { List cmList = Kubernetes.listConfigMaps(nameSpace).getItems(); V1ConfigMap configMapToModify = cmList.stream() - .filter(cm -> cmName.equals(cm.getMetadata().getName())) + .filter(cm -> cm.getMetadata() != null && cmName.equals(cm.getMetadata().getName())) .findAny() .orElse(null); assertNotNull(configMapToModify,"Can't find cm for " + cmName); Map cmData = configMapToModify.getData(); - - String values = cmData.get("logstash.conf").replace(oldRegex,newRegex); + String values = null; + if (cmData != null) { + values = cmData.get("logstash.conf").replace(oldRegex, newRegex); + } assertNotNull(values, "can't find values for key prometheus.yml"); cmData.replace(configFileName, values); @@ -258,7 +247,7 @@ public static void editConfigMap(String oldRegex, String newRegex, cmList = Kubernetes.listConfigMaps(nameSpace).getItems(); configMapToModify = cmList.stream() - .filter(cm -> cmName.equals(cm.getMetadata().getName())) + .filter(cm -> cm.getMetadata() != null && cmName.equals(cm.getMetadata().getName())) .findAny() .orElse(null); diff --git a/integration-tests/src/test/java/oracle/weblogic/kubernetes/utils/DbUtils.java b/integration-tests/src/test/java/oracle/weblogic/kubernetes/utils/DbUtils.java index 3a8da15def8..2337e61a6a5 100644 --- a/integration-tests/src/test/java/oracle/weblogic/kubernetes/utils/DbUtils.java +++ b/integration-tests/src/test/java/oracle/weblogic/kubernetes/utils/DbUtils.java @@ -134,7 +134,6 @@ public class DbUtils { private static V1Service oracleDBService = null; private static V1Deployment oracleDbDepl = null; - private static int suffixCount = 0; private static Map dbMap = new HashMap<>(); /** @@ -146,7 +145,7 @@ public class DbUtils { * @param dbNamespace namespace where DB and RCU schema are going to start * @param dbPort NodePort of DB * @param dbUrl URL of DB - * @throws Exception if any error occurs when setting up RCU database + * @throws ApiException if any error occurs when setting up RCU database */ public static synchronized void setupDBandRCUschema(String dbImage, String fmwImage, String rcuSchemaPrefix, @@ -167,7 +166,6 @@ public static synchronized void setupDBandRCUschema(String dbImage, String fmwIm logger.info("Create RCU schema with fmwImage: {0}, rcuSchemaPrefix: {1}, dbUrl: {2}, " + " dbNamespace: {3}:", fmwImage, rcuSchemaPrefix, dbUrl, dbNamespace); createRcuSchema(fmwImage, rcuSchemaPrefix, dbUrl, dbNamespace); - } /** @@ -448,15 +446,15 @@ public static boolean isPodReady(String namespace, String labelSelector, String LoggingFacade logger = getLogger(); boolean status = false; V1Pod pod = getPod(namespace, labelSelector, podName); - if (pod != null) { + if (pod != null && pod.getStatus() != null && pod.getStatus().getConditions() != null) { // get the podCondition with the 'Ready' type field V1PodCondition v1PodReadyCondition = pod.getStatus().getConditions().stream() .filter(v1PodCondition -> "Ready".equals(v1PodCondition.getType())) .findAny() .orElse(null); - if (v1PodReadyCondition != null) { + if (v1PodReadyCondition != null && v1PodReadyCondition.getStatus() != null) { status = v1PodReadyCondition.getStatus().equalsIgnoreCase("true"); if (status) { logger.info("Pod {0} is READY in namespace {1}", podName, namespace); @@ -536,11 +534,11 @@ private static boolean createRcuRepository(String dbNamespace, String dbUrl, */ public static String getPodNameOfDb(String dbNamespace, String podPrefix) throws ApiException { String podName = null; - V1PodList pods = null; - pods = Kubernetes.listPods(dbNamespace, null); + V1PodList pods = Kubernetes.listPods(dbNamespace, null); if (pods.getItems().size() != 0) { for (V1Pod pod : pods.getItems()) { - if (pod != null && pod.getMetadata().getName().startsWith(podPrefix)) { + if (pod != null && pod.getMetadata() != null && pod.getMetadata().getName() != null + && pod.getMetadata().getName().startsWith(podPrefix)) { podName = pod.getMetadata().getName(); break; } @@ -604,7 +602,9 @@ public static Integer getDBNodePort(String dbNamespace, String dbName) { logger.info(dump(Kubernetes.listServices(dbNamespace))); List services = listServices(dbNamespace).getItems(); for (V1Service service : services) { - if (service.getMetadata().getName().startsWith(dbName)) { + if (service.getMetadata() != null && service.getMetadata().getName() != null + && service.getMetadata().getName().startsWith(dbName) && service.getSpec() != null + && service.getSpec().getPorts() != null) { return service.getSpec().getPorts().get(0).getNodePort(); } } @@ -1051,19 +1051,23 @@ public static void createPV(String pvName) { .putCapacityItem("storage", Quantity.fromString("100Gi")) .persistentVolumeReclaimPolicy("Recycle") .accessModes(Arrays.asList("ReadWriteMany"))); - if (OKD) { - v1pv.getSpec() - .storageClassName("okd-nfsmnt") - .nfs(new V1NFSVolumeSource() - .path(PV_ROOT) - .server(NFS_SERVER) - .readOnly(false)); - } else { - v1pv.getSpec() - .storageClassName("weblogic-domain-storage-class") - .hostPath(new V1HostPathVolumeSource() - .path(pvHostPath.toString())); + + if (v1pv != null && v1pv.getSpec() != null) { + if (OKD) { + v1pv.getSpec() + .storageClassName("okd-nfsmnt") + .nfs(new V1NFSVolumeSource() + .path(PV_ROOT) + .server(NFS_SERVER) + .readOnly(false)); + } else { + v1pv.getSpec() + .storageClassName("weblogic-domain-storage-class") + .hostPath(new V1HostPathVolumeSource() + .path(pvHostPath.toString())); + } } + logger.info(Yaml.dump(v1pv)); boolean success = assertDoesNotThrow(() -> createPersistentVolume(v1pv), "Failed to create persistent volume"); diff --git a/integration-tests/src/test/java/oracle/weblogic/kubernetes/utils/DeployUtil.java b/integration-tests/src/test/java/oracle/weblogic/kubernetes/utils/DeployUtil.java index 60493b010fd..f8c3ddac0e9 100644 --- a/integration-tests/src/test/java/oracle/weblogic/kubernetes/utils/DeployUtil.java +++ b/integration-tests/src/test/java/oracle/weblogic/kubernetes/utils/DeployUtil.java @@ -201,7 +201,7 @@ private static void createDeployJob(String deployScriptConfigMap, String namespa // check job status and fail test if the job failed to deploy V1Job job = getJob(jobName, namespace); - if (job != null) { + if (job != null && job.getStatus() != null && job.getStatus().getConditions() != null) { V1JobCondition jobCondition = job.getStatus().getConditions().stream().filter( v1JobCondition -> "Failed".equals(v1JobCondition.getType())) .findAny() @@ -210,12 +210,14 @@ private static void createDeployJob(String deployScriptConfigMap, String namespa logger.severe("Job {0} failed to do deployment", jobName); List pods = listPods(namespace, "job-name=" + jobName).getItems(); if (!pods.isEmpty()) { - logger.severe(getPodLog(pods.get(0).getMetadata().getName(), namespace)); + V1Pod pod = pods.get(0); + if (pod != null && pod.getMetadata() != null) { + logger.severe(getPodLog(pod.getMetadata().getName(), namespace)); + } fail("Deployment job failed"); } } } - } /** @@ -306,14 +308,14 @@ public static ExecResult deployUsingRest(String hostAndPort, String userName, String password, String targets, Path archivePath, String hostHeader, String appName) { final LoggingFacade logger = getLogger(); - ExecResult result = null; - StringBuffer headerString = null; + ExecResult result; + StringBuffer headerString; if (hostHeader != null) { headerString = new StringBuffer("-H 'host: "); headerString.append(hostHeader) .append(" ' "); } else { - headerString = new StringBuffer(""); + headerString = new StringBuffer(); } StringBuffer curlString = new StringBuffer("status=$(curl -g --noproxy '*' "); curlString.append(" --user " + userName + ":" + password); diff --git a/integration-tests/src/test/java/oracle/weblogic/kubernetes/utils/DomainUtils.java b/integration-tests/src/test/java/oracle/weblogic/kubernetes/utils/DomainUtils.java index 2606ac78422..16975d25cdd 100644 --- a/integration-tests/src/test/java/oracle/weblogic/kubernetes/utils/DomainUtils.java +++ b/integration-tests/src/test/java/oracle/weblogic/kubernetes/utils/DomainUtils.java @@ -467,7 +467,7 @@ public static void removeClusterInDomainResource(String clusterName, String doma logger.info("Removing the cluster {0} from domain resource {1}", clusterName, domainUid); DomainResource domainCustomResource = getDomainCustomResource(domainUid, namespace); Optional cluster = domainCustomResource.getSpec() - .getClusters().stream().filter(o -> o.getName().equals(clusterName)).findAny(); + .getClusters().stream().filter(o -> o.getName() != null && o.getName().equals(clusterName)).findAny(); int clusterIndex = -1; if (cluster.isPresent()) { clusterIndex = domainCustomResource.getSpec().getClusters().indexOf(cluster.get()); @@ -482,8 +482,8 @@ public static void removeClusterInDomainResource(String clusterName, String doma V1Patch patch = new V1Patch(patchStr); assertTrue(patchDomainCustomResource(domainUid, namespace, patch, V1Patch.PATCH_FORMAT_JSON_PATCH), "Failed to patch domain"); - Callable clusterNotFound = () -> !getDomainCustomResource(domainUid, namespace).getSpec() - .getClusters().stream().anyMatch(c -> c.getName().equals(clusterName)); + Callable clusterNotFound = () -> getDomainCustomResource(domainUid, namespace).getSpec() + .getClusters().stream().noneMatch(c -> c.getName() != null && c.getName().equals(clusterName)); testUntil(clusterNotFound, logger, "cluster {0} to be removed from domain resource in namespace {1}", clusterName, namespace); } else { @@ -533,7 +533,7 @@ public static void patchDomainWithAuxiliaryImageAndVerify(String oldImageName, S assertFalse(auxiliaryImageList.isEmpty(), "AuxiliaryImage list is empty"); String searchString; - int index = 0; + int index; AuxiliaryImage ai = auxiliaryImageList.stream() .filter(auxiliaryImage -> oldImageName.equals(auxiliaryImage.getImage())) diff --git a/integration-tests/src/test/java/oracle/weblogic/kubernetes/utils/FileUtils.java b/integration-tests/src/test/java/oracle/weblogic/kubernetes/utils/FileUtils.java index 3f0d8dece65..8296edfc63c 100644 --- a/integration-tests/src/test/java/oracle/weblogic/kubernetes/utils/FileUtils.java +++ b/integration-tests/src/test/java/oracle/weblogic/kubernetes/utils/FileUtils.java @@ -1,4 +1,4 @@ -// Copyright (c) 2020, 2022, Oracle and/or its affiliates. +// Copyright (c) 2020, 2024, Oracle and/or its affiliates. // Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. package oracle.weblogic.kubernetes.utils; @@ -29,7 +29,6 @@ import oracle.weblogic.kubernetes.actions.impl.primitive.Installer; import oracle.weblogic.kubernetes.actions.impl.primitive.Kubernetes; import oracle.weblogic.kubernetes.logging.LoggingFacade; -import oracle.weblogic.kubernetes.utils.ExecResult; import static java.nio.file.StandardCopyOption.REPLACE_EXISTING; import static oracle.weblogic.kubernetes.TestConstants.KUBERNETES_CLI; @@ -90,10 +89,7 @@ public static void checkFile(String fileName) throws FileNotFoundException { */ public static boolean doesFileExist(String fileName) { File file = new File(fileName); - if (file.exists() && file.isFile()) { - return true; - } - return false; + return file.exists() && file.isFile(); } /** @@ -104,10 +100,7 @@ public static boolean doesFileExist(String fileName) { */ public static boolean doesDirExist(String dirName) { File dir = new File(dirName); - if (dir.exists() && dir.isDirectory()) { - return true; - } - return false; + return dir.exists() && dir.isDirectory(); } /** @@ -125,7 +118,6 @@ public static void cleanupDirectory(String dir) throws IOException { } cleanDirectory(file); - } /** @@ -355,7 +347,7 @@ public static void copy(Path source, Path dest) throws IOException { */ public static ExecResult copyFileToImageContainer(String containerName, String source, String dest) { LoggingFacade logger = getLogger(); - ExecResult result = null; + ExecResult result; // create a WebLogic container String cpToContainerCmd = new StringBuffer(WLSIMG_BUILDER + " cp ") @@ -425,7 +417,7 @@ public static boolean checkFileCopiedToImageContainer(String containerName, Stri logger.info("checkCmd: caught unexpected exception {0}", ex.getMessage()); } - return result.stdout().contains(dest); + return result != null && result.stdout() != null && result.stdout().contains(dest); } /** @@ -436,7 +428,6 @@ public static boolean checkFileCopiedToImageContainer(String containerName, Stri */ public static void readFileCopiedInImageContainer(String containerName, String dest) { LoggingFacade logger = getLogger(); - ExecResult result = null; // check the file is copied over successfully //String readCmd = new StringBuffer(WLSIMG_BUILDER + " exec -it " @@ -448,7 +439,7 @@ public static void readFileCopiedInImageContainer(String containerName, String d logger.info("Command to cat file {0}: ", dest, readCmd); try { - result = exec(readCmd, true); + exec(readCmd, true); } catch (Exception ex) { logger.info("checkCmd: caught unexpected exception {0}", ex.getMessage()); } @@ -464,7 +455,7 @@ public static String createZipFile(Path dirPath) { String zipFileName = dirPath.toString().concat(".zip"); try { final ZipOutputStream outputStream = new ZipOutputStream(new FileOutputStream(zipFileName)); - Files.walkFileTree(dirPath, new SimpleFileVisitor() { + Files.walkFileTree(dirPath, new SimpleFileVisitor<>() { @Override public FileVisitResult visitFile(Path file, BasicFileAttributes attributes) { try { @@ -528,11 +519,7 @@ public static boolean doesFileExistInPod(String namespace, String podName, Strin ExecResult result = execCommand(namespace, podName, null, true, "/bin/sh", "-c", "find " + filename); - if (result.stdout().contains(filename)) { - return true; - } else { - return false; - } + return result.stdout().contains(filename); } /** @@ -606,10 +593,7 @@ public static Path generateFileFromTemplate( */ public static Callable isFileExistAndNotEmpty(String fileName) { File file = new File(fileName); - return () -> { - boolean fileReady = (file.exists() && file.length() != 0); - return fileReady; - }; + return () -> file.exists() && file.length() != 0; } /** diff --git a/integration-tests/src/test/java/oracle/weblogic/kubernetes/utils/FmwUtils.java b/integration-tests/src/test/java/oracle/weblogic/kubernetes/utils/FmwUtils.java index 60c625975b4..55ece386c9d 100644 --- a/integration-tests/src/test/java/oracle/weblogic/kubernetes/utils/FmwUtils.java +++ b/integration-tests/src/test/java/oracle/weblogic/kubernetes/utils/FmwUtils.java @@ -189,7 +189,7 @@ public static DomainResource createIstioDomainResource( String opssWalletPasswordSecretName, int replicaCount, String miiImage, String configmapName) { // create the domain CR - DomainResource domain = new DomainResource() + return new DomainResource() .apiVersion(DOMAIN_API_VERSION) .kind("Domain") .metadata(new V1ObjectMeta() @@ -225,8 +225,6 @@ public static DomainResource createIstioDomainResource( .runtimeEncryptionSecret(encryptionSecretName)) .addSecretsItem(rcuAccessSecretName) .introspectorJobActiveDeadlineSeconds(600L))); - - return domain; } /** @@ -253,7 +251,7 @@ public static DomainResource createDomainResourceOnPv(String domainUid, int t3ChannelPort) { // create a domain custom resource configuration object - DomainResource domain = new DomainResource() + return new DomainResource() .apiVersion(DOMAIN_API_VERSION) .kind("Domain") .metadata(new V1ObjectMeta() @@ -299,8 +297,6 @@ public static DomainResource createDomainResourceOnPv(String domainUid, .addChannelsItem(new Channel() .channelName("T3Channel") .nodePort(t3ChannelPort))))); - - return domain; } /** @@ -672,7 +668,7 @@ public static Configuration getConfiguration(String pvName, String pvcName, Map pvCapacity, Map pvcRequest, String storageClassName, String testClass) { Configuration configuration = new Configuration(); - PersistentVolume pv = null; + PersistentVolume pv; if (OKE_CLUSTER) { storageClassName = "oci-fss"; } else if (OKD) { diff --git a/integration-tests/src/test/java/oracle/weblogic/kubernetes/utils/ImageUtils.java b/integration-tests/src/test/java/oracle/weblogic/kubernetes/utils/ImageUtils.java index eb10dc0faa4..0b561b37194 100644 --- a/integration-tests/src/test/java/oracle/weblogic/kubernetes/utils/ImageUtils.java +++ b/integration-tests/src/test/java/oracle/weblogic/kubernetes/utils/ImageUtils.java @@ -1,4 +1,4 @@ -// Copyright (c) 2021, 2023, Oracle and/or its affiliates. +// Copyright (c) 2021, 2024, Oracle and/or its affiliates. // Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. package oracle.weblogic.kubernetes.utils; @@ -368,7 +368,7 @@ public static String createImageAndVerify(String imageNameBase, if (buildAppDirList.size() != 0 && buildAppDirList.get(0) != null) { // build an application archive using what is in resources/apps/APP_NAME - String zipFile = ""; + String zipFile; if (oneArchiveContainsMultiApps) { for (String buildAppDirs : buildAppDirList) { assertTrue(buildAppArchive(appParams @@ -549,7 +549,8 @@ public static void createImageRegistrySecret(String userName, String password, V1SecretList listSecrets = listSecrets(namespace); if (listSecrets != null) { for (V1Secret item : listSecrets.getItems()) { - if (item.getMetadata().getName().equals(secretName)) { + if (item.getMetadata() != null && item.getMetadata().getName() != null + && item.getMetadata().getName().equals(secretName)) { logger.info("Secret {0} already exists in namespace {1}, skipping secret creation", secretName, namespace); return; } diff --git a/integration-tests/src/test/java/oracle/weblogic/kubernetes/utils/IstioUtils.java b/integration-tests/src/test/java/oracle/weblogic/kubernetes/utils/IstioUtils.java index 35268019473..759c2dc62f1 100644 --- a/integration-tests/src/test/java/oracle/weblogic/kubernetes/utils/IstioUtils.java +++ b/integration-tests/src/test/java/oracle/weblogic/kubernetes/utils/IstioUtils.java @@ -140,8 +140,8 @@ public static void uninstallIstio() { */ public static int getIstioHttpIngressPort() { LoggingFacade logger = getLogger(); - ExecResult result = null; - StringBuffer getIngressPort = null; + ExecResult result; + StringBuffer getIngressPort; getIngressPort = new StringBuffer(KUBERNETES_CLI + " -n istio-system get service istio-ingressgateway "); getIngressPort.append("-o jsonpath='{.spec.ports[?(@.name==\"http2\")].nodePort}'"); logger.info("getIngressPort: " + KUBERNETES_CLI + " command {0}", new String(getIngressPort)); @@ -166,8 +166,8 @@ public static int getIstioHttpIngressPort() { */ public static int getIstioSecureIngressPort() { LoggingFacade logger = getLogger(); - ExecResult result = null; - StringBuffer getSecureIngressPort = null; + ExecResult result; + StringBuffer getSecureIngressPort; getSecureIngressPort = new StringBuffer(KUBERNETES_CLI + " -n istio-system get service istio-ingressgateway "); getSecureIngressPort.append("-o jsonpath='{.spec.ports[?(@.name==\"https\")].nodePort}'"); logger.info("getSecureIngressPort: " + KUBERNETES_CLI + " command {0}", new String(getSecureIngressPort)); @@ -192,8 +192,8 @@ public static int getIstioSecureIngressPort() { */ public static int getIstioTcpIngressPort() { LoggingFacade logger = getLogger(); - ExecResult result = null; - StringBuffer getTcpIngressPort = null; + ExecResult result; + StringBuffer getTcpIngressPort; getTcpIngressPort = new StringBuffer(KUBERNETES_CLI + " -n istio-system get service istio-ingressgateway "); getTcpIngressPort.append("-o jsonpath='{.spec.ports[?(@.name==\"tcp\")].nodePort}'"); logger.info("getTcpIngressPort: " + KUBERNETES_CLI + " command {0}", new String(getTcpIngressPort)); @@ -219,8 +219,8 @@ public static int getIstioTcpIngressPort() { */ public static boolean deployHttpIstioGatewayAndVirtualservice(Path configPath) { LoggingFacade logger = getLogger(); - ExecResult result = null; - StringBuffer deployIstioGateway = null; + ExecResult result; + StringBuffer deployIstioGateway; deployIstioGateway = new StringBuffer(KUBERNETES_CLI + " apply -f "); deployIstioGateway.append(configPath); logger.info("deployIstioGateway: " + KUBERNETES_CLI + " command {0}", new String(deployIstioGateway)); @@ -243,8 +243,8 @@ public static boolean deployHttpIstioGatewayAndVirtualservice(Path configPath) { public static boolean deployTcpIstioGatewayAndVirtualservice( Path configPath) { LoggingFacade logger = getLogger(); - ExecResult result = null; - StringBuffer deployIstioGateway = null; + ExecResult result; + StringBuffer deployIstioGateway; deployIstioGateway = new StringBuffer(KUBERNETES_CLI + " apply -f "); deployIstioGateway.append(configPath); logger.info("deployIstioGateway: " + KUBERNETES_CLI + " command {0}", new String(deployIstioGateway)); @@ -267,8 +267,8 @@ public static boolean deployTcpIstioGatewayAndVirtualservice( public static boolean deployIstioDestinationRule( Path configPath) { LoggingFacade logger = getLogger(); - ExecResult result = null; - StringBuffer deployIstioGateway = null; + ExecResult result; + StringBuffer deployIstioGateway; deployIstioGateway = new StringBuffer(KUBERNETES_CLI + " apply -f "); deployIstioGateway.append(configPath); logger.info("deployIstioDestinationRule: " + KUBERNETES_CLI + " command {0}", new String(deployIstioGateway)); @@ -323,8 +323,8 @@ public static boolean deployIstioPrometheus( assertDoesNotThrow(() -> replaceStringInFile(targetPromFile.toString(), "prometheus_tag", PROMETHEUS_IMAGE_TAG)); - ExecResult result = null; - StringBuffer deployIstioPrometheus = null; + ExecResult result; + StringBuffer deployIstioPrometheus; deployIstioPrometheus = new StringBuffer(KUBERNETES_CLI + " apply -f "); deployIstioPrometheus.append(targetPromFile.toString()); logger.info("deployIstioPrometheus: " + KUBERNETES_CLI + " command {0}", new String(deployIstioPrometheus)); @@ -337,13 +337,12 @@ public static boolean deployIstioPrometheus( logger.info("deployIstioPrometheus: " + KUBERNETES_CLI + " returned {0}", result.toString()); try { for (var item : listPods("istio-system", null).getItems()) { - if (item.getMetadata() != null) { - if (item.getMetadata().getName().contains("prometheus")) { - logger.info("Waiting for pod {0} to be ready in namespace {1}", - item.getMetadata().getName(), "istio-system"); - checkPodReady(item.getMetadata().getName(), null, "istio-system"); - checkServiceExists("prometheus", "istio-system"); - } + if (item.getMetadata() != null && item.getMetadata().getName() != null + && item.getMetadata().getName().contains("prometheus")) { + logger.info("Waiting for pod {0} to be ready in namespace {1}", + item.getMetadata().getName(), "istio-system"); + checkPodReady(item.getMetadata().getName(), null, "istio-system"); + checkServiceExists("prometheus", "istio-system"); } } } catch (ApiException e) { diff --git a/integration-tests/src/test/java/oracle/weblogic/kubernetes/utils/JobUtils.java b/integration-tests/src/test/java/oracle/weblogic/kubernetes/utils/JobUtils.java index 4376eafde06..c5f28e78747 100644 --- a/integration-tests/src/test/java/oracle/weblogic/kubernetes/utils/JobUtils.java +++ b/integration-tests/src/test/java/oracle/weblogic/kubernetes/utils/JobUtils.java @@ -1,4 +1,4 @@ -// Copyright (c) 2021, 2022, Oracle and/or its affiliates. +// Copyright (c) 2021, 2024, Oracle and/or its affiliates. // Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. package oracle.weblogic.kubernetes.utils; @@ -165,7 +165,7 @@ public static void createDomainJob(String image, String pvName, String pvcName, // check job status and fail test if the job failed to create domain V1Job job = assertDoesNotThrow(() -> getJob(jobName, namespace), "Getting the job failed"); - if (job != null) { + if (job != null && job.getStatus() != null && job.getStatus().getConditions() != null) { V1JobCondition jobCondition = job.getStatus().getConditions().stream().filter( v1JobCondition -> "Failed".equals(v1JobCondition.getType())) .findAny() @@ -175,7 +175,7 @@ public static void createDomainJob(String image, String pvName, String pvcName, List pods = assertDoesNotThrow(() -> listPods( namespace, "job-name=" + jobName).getItems(), "Listing pods failed"); - if (!pods.isEmpty()) { + if (!pods.isEmpty() && pods.get(0).getMetadata() != null) { String podLog = assertDoesNotThrow(() -> getPodLog(pods.get(0).getMetadata().getName(), namespace), "Failed to get pod log"); logger.severe(podLog); diff --git a/integration-tests/src/test/java/oracle/weblogic/kubernetes/utils/K8sEvents.java b/integration-tests/src/test/java/oracle/weblogic/kubernetes/utils/K8sEvents.java index fbfbad24d3a..09b2e194dfb 100644 --- a/integration-tests/src/test/java/oracle/weblogic/kubernetes/utils/K8sEvents.java +++ b/integration-tests/src/test/java/oracle/weblogic/kubernetes/utils/K8sEvents.java @@ -337,7 +337,7 @@ public static int getDomainEventCount( try { List events = Kubernetes.listOpGeneratedNamespacedEvents(domainNamespace); for (CoreV1Event event : events) { - if (event.getMetadata() != null) { + if (event != null && event.getMetadata() != null) { Map labels = event.getMetadata().getLabels(); if (event.getReason() != null && event.getReason().equals(reason) && event.getType() != null && event.getType().equals(type) diff --git a/integration-tests/src/test/java/oracle/weblogic/kubernetes/utils/LoadBalancerUtils.java b/integration-tests/src/test/java/oracle/weblogic/kubernetes/utils/LoadBalancerUtils.java index afd6b68cf51..d595e10b5c5 100644 --- a/integration-tests/src/test/java/oracle/weblogic/kubernetes/utils/LoadBalancerUtils.java +++ b/integration-tests/src/test/java/oracle/weblogic/kubernetes/utils/LoadBalancerUtils.java @@ -651,7 +651,6 @@ public static boolean createTraefikIngressRoutingRules(String domainNamespace, * @throws Exception fails if not generated after MaxIterations number is reached. */ public static String getLbExternalIp(String lbrelname, String lbns) throws Exception { - int i = 0; LoggingFacade logger = getLogger(); String cmdip = KUBERNETES_CLI + " get svc --namespace " + lbns diff --git a/integration-tests/src/test/java/oracle/weblogic/kubernetes/utils/LoggingUtil.java b/integration-tests/src/test/java/oracle/weblogic/kubernetes/utils/LoggingUtil.java index b6014fd1785..fe8dc4cd808 100644 --- a/integration-tests/src/test/java/oracle/weblogic/kubernetes/utils/LoggingUtil.java +++ b/integration-tests/src/test/java/oracle/weblogic/kubernetes/utils/LoggingUtil.java @@ -1,4 +1,4 @@ -// Copyright (c) 2020, 2022, Oracle and/or its affiliates. +// Copyright (c) 2020, 2024, Oracle and/or its affiliates. // Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. package oracle.weblogic.kubernetes.utils; @@ -25,7 +25,9 @@ import io.kubernetes.client.openapi.models.V1Container; import io.kubernetes.client.openapi.models.V1ObjectMeta; import io.kubernetes.client.openapi.models.V1PersistentVolume; +import io.kubernetes.client.openapi.models.V1PersistentVolumeClaimList; import io.kubernetes.client.openapi.models.V1PersistentVolumeClaimVolumeSource; +import io.kubernetes.client.openapi.models.V1PersistentVolumeList; import io.kubernetes.client.openapi.models.V1Pod; import io.kubernetes.client.openapi.models.V1PodSpec; import io.kubernetes.client.openapi.models.V1Volume; @@ -40,6 +42,8 @@ import static oracle.weblogic.kubernetes.TestConstants.IMAGE_PULL_POLICY; import static oracle.weblogic.kubernetes.TestConstants.VZ_ENV; import static oracle.weblogic.kubernetes.actions.TestActions.getPodLog; +import static oracle.weblogic.kubernetes.actions.impl.primitive.Kubernetes.listPersistentVolumeClaims; +import static oracle.weblogic.kubernetes.actions.impl.primitive.Kubernetes.listPersistentVolumes; import static oracle.weblogic.kubernetes.assertions.TestAssertions.podDoesNotExist; import static oracle.weblogic.kubernetes.assertions.TestAssertions.podReady; import static oracle.weblogic.kubernetes.utils.CommonTestUtils.testUntil; @@ -112,7 +116,7 @@ public static void collectLogs(String namespace, String resultDir) { // get namespaces try { for (var ns : Kubernetes.listNamespacesAsObjects().getItems()) { - if (namespace.equals(ns.getMetadata().getName())) { + if (ns.getMetadata() != null && namespace.equals(ns.getMetadata().getName())) { writeToFile(ns, resultDir, namespace + ".list.namespace.log"); } } @@ -122,7 +126,7 @@ public static void collectLogs(String namespace, String resultDir) { // get pvc try { - writeToFile(Kubernetes.listPersistentVolumeClaims(namespace), resultDir, + writeToFile(listPersistentVolumeClaims(namespace), resultDir, namespace + ".list.persistent-volume-claims.log"); } catch (Exception ex) { logger.warning(ex.getMessage()); @@ -130,13 +134,17 @@ public static void collectLogs(String namespace, String resultDir) { // archive persistent volume contents List pvList = new ArrayList<>(); - for (var pv : Kubernetes.listPersistentVolumes().getItems()) { - for (var pvc : Kubernetes.listPersistentVolumeClaims(namespace).getItems()) { - if (pv.getSpec().getStorageClassName() - .equals(pvc.getSpec().getStorageClassName()) - && pv.getMetadata().getName() - .equals(pvc.getSpec().getVolumeName())) { - pvList.add(pv); + V1PersistentVolumeList persistentVolumeList = listPersistentVolumes(); + V1PersistentVolumeClaimList persistentVolumeClaimList = listPersistentVolumeClaims(namespace); + if (persistentVolumeList != null && persistentVolumeClaimList != null) { + for (var pv : persistentVolumeList.getItems()) { + for (var pvc : persistentVolumeClaimList.getItems()) { + if (pv.getSpec() != null && pvc.getSpec() != null && pv.getSpec().getStorageClassName() != null + && pv.getSpec().getStorageClassName().equals(pvc.getSpec().getStorageClassName()) + && pv.getMetadata() != null && pv.getMetadata().getName() != null + && pv.getMetadata().getName().equals(pvc.getSpec().getVolumeName())) { + pvList.add(pv); + } } } } @@ -551,32 +559,4 @@ public static void checkPodLogContainsString(String namespace, String podName, podName, namespace); } - - private void archivePV(String namespace, String resultDir) { - // archive persistent volume contents - List pvList = new ArrayList<>(); - for (var pv : Kubernetes.listPersistentVolumes().getItems()) { - for (var pvc : Kubernetes.listPersistentVolumeClaims(namespace).getItems()) { - if (pv.getSpec().getStorageClassName() - .equals(pvc.getSpec().getStorageClassName()) - && pv.getMetadata().getName() - .equals(pvc.getSpec().getVolumeName())) { - pvList.add(pv); - String pvName = pv.getMetadata().getName(); - String pvcName = pvc.getMetadata().getName(); - try { - if (pv.getMetadata().getDeletionTimestamp() == null) { - copyFromPV(namespace, pvcName, pvName, - Files.createDirectories( - Paths.get(resultDir, pvcName, pvName))); - } - } catch (ApiException ex) { - getLogger().warning(ex.getResponseBody()); - } catch (IOException ex) { - getLogger().warning(ex.getMessage()); - } - } - } - } - } } diff --git a/integration-tests/src/test/java/oracle/weblogic/kubernetes/utils/MonitoringUtils.java b/integration-tests/src/test/java/oracle/weblogic/kubernetes/utils/MonitoringUtils.java index 223d478c938..aa58be3bdb8 100644 --- a/integration-tests/src/test/java/oracle/weblogic/kubernetes/utils/MonitoringUtils.java +++ b/integration-tests/src/test/java/oracle/weblogic/kubernetes/utils/MonitoringUtils.java @@ -339,7 +339,7 @@ public static void editPrometheusCM(String oldRegex, String newRegex, String prometheusNS, String cmName) throws ApiException { List cmList = Kubernetes.listConfigMaps(prometheusNS).getItems(); V1ConfigMap promCm = cmList.stream() - .filter(cm -> cmName.equals(cm.getMetadata().getName())) + .filter(cm -> cm.getMetadata() != null && cmName.equals(cm.getMetadata().getName())) .findAny() .orElse(null); @@ -683,7 +683,8 @@ public static GrafanaParams installAndVerifyGrafana(String grafanaReleaseName, V1SecretList listSecrets = listSecrets(grafanaNamespace); if (null != listSecrets) { for (V1Secret item : listSecrets.getItems()) { - if (item.getMetadata().getName().equals("grafana-secret")) { + if (item.getMetadata() != null && item.getMetadata().getName() != null + && item.getMetadata().getName().equals("grafana-secret")) { secretExists = true; break; } diff --git a/integration-tests/src/test/java/oracle/weblogic/kubernetes/utils/MySQLDBUtils.java b/integration-tests/src/test/java/oracle/weblogic/kubernetes/utils/MySQLDBUtils.java index 2cdfbd14048..0a91231ec73 100644 --- a/integration-tests/src/test/java/oracle/weblogic/kubernetes/utils/MySQLDBUtils.java +++ b/integration-tests/src/test/java/oracle/weblogic/kubernetes/utils/MySQLDBUtils.java @@ -1,4 +1,4 @@ -// Copyright (c) 2020, 2022, Oracle and/or its affiliates. +// Copyright (c) 2020, 2024, Oracle and/or its affiliates. // Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. package oracle.weblogic.kubernetes.utils; @@ -33,6 +33,7 @@ import static oracle.weblogic.kubernetes.TestConstants.TEST_IMAGES_REPO_SECRET_NAME; import static oracle.weblogic.kubernetes.utils.ImageUtils.createTestRepoSecret; import static oracle.weblogic.kubernetes.utils.PodUtils.checkPodReady; +import static oracle.weblogic.kubernetes.utils.ThreadSafeLogger.getLogger; import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; import static org.junit.jupiter.api.Assertions.assertTrue; @@ -92,7 +93,11 @@ private static void startMySQLDB(String name, String secretName, String namespac .name("mysql") .containerPort(3306)))))); V1Pod pod = assertDoesNotThrow(() -> Kubernetes.createPod(namespace, mysqlPod)); - checkPodReady(pod.getMetadata().getName(), null, namespace); + if (pod != null && pod.getMetadata() != null) { + checkPodReady(pod.getMetadata().getName(), null, namespace); + } else { + getLogger().info("pod is null or pod metadata is null"); + } } //create services for MySQL database diff --git a/integration-tests/src/test/java/oracle/weblogic/kubernetes/utils/PersistentVolumeUtils.java b/integration-tests/src/test/java/oracle/weblogic/kubernetes/utils/PersistentVolumeUtils.java index 3a4ba64056a..e1c0df7d981 100644 --- a/integration-tests/src/test/java/oracle/weblogic/kubernetes/utils/PersistentVolumeUtils.java +++ b/integration-tests/src/test/java/oracle/weblogic/kubernetes/utils/PersistentVolumeUtils.java @@ -1,4 +1,4 @@ -// Copyright (c) 2021, 2023, Oracle and/or its affiliates. +// Copyright (c) 2021, 2024, Oracle and/or its affiliates. // Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. @@ -78,6 +78,8 @@ public static void createPVPVCAndVerify(V1PersistentVolume v1pv, assertNotNull(v1pv, "v1pv is null"); assertNotNull(v1pvc, "v1pvc is null"); + assertNotNull(v1pv.getMetadata(), "v1pv metadata is null"); + assertNotNull(v1pvc.getMetadata(), "v1pvc metadata is null"); String pvName = v1pv.getMetadata().getName(); String pvcName = v1pvc.getMetadata().getName(); @@ -124,6 +126,11 @@ public static void createPVPVCAndVerify(V1PersistentVolume v1pv, String labelSelector, String namespace, String storageClassName, Path pvHostPath) { LoggingFacade logger = getLogger(); + assertNotNull(v1pv, "v1pv is null"); + assertNotNull(v1pvc, "v1pvc is null"); + assertNotNull(v1pv.getSpec(), "v1pv spec is null"); + assertNotNull(v1pvc.getSpec(), "v1pvc spec is null"); + if (!OKE_CLUSTER && !OKD) { logger.info("Creating PV directory {0}", pvHostPath); assertDoesNotThrow(() -> deleteDirectory(pvHostPath.toFile()), "deleteDirectory failed with IOException"); @@ -212,6 +219,9 @@ public static void setVolumeSource(Path pvHostPath, V1PersistentVolume v1pv) { } private static void setVolumeSource(Path pvHostPath, V1PersistentVolume v1pv, String storageClassName) { + assertNotNull(v1pv, "v1pv is null"); + assertNotNull(v1pv.getSpec(), "v1pv spec is null"); + if (OKE_CLUSTER) { String fssDir = FSS_DIR[new Random().nextInt(FSS_DIR.length)]; LoggingFacade logger = getLogger(); @@ -298,6 +308,9 @@ public static void createPVC(String pvName, String pvcName, String domainUid, .putLabelsItem("weblogic.resourceVersion", "domain-v2") .putLabelsItem("weblogic.domainUid", domainUid)); + assertNotNull(v1pvc, "v1pvc is null"); + assertNotNull(v1pvc.getSpec(), "v1pvc spec is null"); + if (OKE_CLUSTER) { v1pvc.getSpec() .storageClassName("oci-fss"); @@ -380,7 +393,7 @@ public static void createPvAndPvc(String nameSuffix, String namespace, HashMap labels, String className) throws IOException { LoggingFacade logger = getLogger(); - V1PersistentVolume v1pv = null; + V1PersistentVolume v1pv; logger.info("creating persistent volume and persistent volume claim"); // create persistent volume and persistent volume claims // when tests are running in local box the PV directories need to exist @@ -405,7 +418,7 @@ public static void createPvAndPvc(String nameSuffix, String namespace, boolean hasLabels = false; String labelSelector = null; - if (labels != null || !labels.isEmpty()) { + if (labels != null && !labels.isEmpty() && v1pv.getMetadata() != null) { hasLabels = true; v1pv.getMetadata().setLabels(labels); labelSelector = labels.entrySet() @@ -424,9 +437,11 @@ public static void createPvAndPvc(String nameSuffix, String namespace, .metadata(new V1ObjectMeta() .name("pvc-" + nameSuffix) .namespace(namespace)); - if (hasLabels) { + if (hasLabels && v1pvc.getMetadata() != null) { v1pvc.getMetadata().setLabels(labels); } + + assertNotNull(v1pvc.getSpec(), "v1pvc spec is null"); if (OKE_CLUSTER) { v1pvc.getSpec() .storageClassName("oci-fss"); @@ -500,6 +515,7 @@ public static synchronized void execCommandInPv(String domainNamespace, String p assertFalse(result.exitValue() != 0 && result.stderr() != null && !result.stderr().isEmpty(), String.format("Command %s failed with exit value %s, stderr %s, stdout %s", commandToExecuteInsidePod, result.exitValue(), result.stderr(), result.stdout())); + assertNotNull(serverPod.getMetadata(), "serverpod metadata is null"); assertDoesNotThrow(() -> deletePod(serverPod.getMetadata().getName(), domainNamespace)); } diff --git a/integration-tests/src/test/java/oracle/weblogic/kubernetes/utils/PodUtils.java b/integration-tests/src/test/java/oracle/weblogic/kubernetes/utils/PodUtils.java index 6c1d04d1de7..339b79ab822 100644 --- a/integration-tests/src/test/java/oracle/weblogic/kubernetes/utils/PodUtils.java +++ b/integration-tests/src/test/java/oracle/weblogic/kubernetes/utils/PodUtils.java @@ -1,4 +1,4 @@ -// Copyright (c) 2021, 2023, Oracle and/or its affiliates. +// Copyright (c) 2021, 2024, Oracle and/or its affiliates. // Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. package oracle.weblogic.kubernetes.utils; @@ -61,7 +61,7 @@ public class PodUtils { */ public static void execInPod(V1Pod pod, String containerName, boolean redirectToStdout, String command) { LoggingFacade logger = getLogger(); - ExecResult exec = null; + ExecResult exec; try { logger.info("Executing command {0}", command); exec = Exec.exec(pod, containerName, redirectToStdout, "/bin/sh", "-c", command); @@ -551,11 +551,12 @@ public static boolean checkInUncompletedIntroPodLogContainsRegex(String regex, S */ public static String getPodName(String namespace, String podPrefix) throws ApiException { String podName = null; - V1PodList pods = null; + V1PodList pods; pods = Kubernetes.listPods(namespace, null); if (pods.getItems().size() != 0) { for (V1Pod pod : pods.getItems()) { - if (pod != null && pod.getMetadata().getName().startsWith(podPrefix)) { + if (pod != null && pod.getMetadata() != null && pod.getMetadata().getName() != null + && pod.getMetadata().getName().startsWith(podPrefix)) { podName = pod.getMetadata().getName(); break; } diff --git a/integration-tests/src/test/java/oracle/weblogic/kubernetes/utils/SecretUtils.java b/integration-tests/src/test/java/oracle/weblogic/kubernetes/utils/SecretUtils.java index 1c52b40f365..3263b43ab63 100644 --- a/integration-tests/src/test/java/oracle/weblogic/kubernetes/utils/SecretUtils.java +++ b/integration-tests/src/test/java/oracle/weblogic/kubernetes/utils/SecretUtils.java @@ -1,4 +1,4 @@ -// Copyright (c) 2021, 2023, Oracle and/or its affiliates. +// Copyright (c) 2021, 2024, Oracle and/or its affiliates. // Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. package oracle.weblogic.kubernetes.utils; @@ -274,7 +274,7 @@ public static String getServiceAccountToken(String serviceAccount, String namesp logger.info("Getting service account token stored in secret {0} to authenticate as service account {1}" + " in namespace {2}", secretName, serviceAccount, namespace); String secretToken = Secret.getSecretEncodedToken(namespace, secretName); - if (secretToken.isEmpty()) { + if (secretToken != null && secretToken.isEmpty()) { logger.info("Did not get encoded token for secret {0} associated with service account {1} in namespace {2}", secretName, serviceAccount, namespace); return null; diff --git a/integration-tests/src/test/java/oracle/weblogic/kubernetes/utils/VerrazzanoUtils.java b/integration-tests/src/test/java/oracle/weblogic/kubernetes/utils/VerrazzanoUtils.java index 3bd63bcc19f..31538d8b21a 100644 --- a/integration-tests/src/test/java/oracle/weblogic/kubernetes/utils/VerrazzanoUtils.java +++ b/integration-tests/src/test/java/oracle/weblogic/kubernetes/utils/VerrazzanoUtils.java @@ -1,4 +1,4 @@ -// Copyright (c) 2023, Oracle and/or its affiliates. +// Copyright (c) 2023, 2024, Oracle and/or its affiliates. // Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. package oracle.weblogic.kubernetes.utils; @@ -52,6 +52,7 @@ public static void setLabelToNamespace(List namespaces) throws ApiExcept for (String namespace : namespaces) { V1Namespace namespaceObject = assertDoesNotThrow(() -> Kubernetes.getNamespace(namespace)); assertNotNull(namespaceObject, "Can't find namespace with name " + namespace); + assertNotNull(namespaceObject.getMetadata(), "namespace " + namespace + " metadata is null"); namespaceObject.getMetadata().setLabels(labels); assertDoesNotThrow(() -> replaceNamespace(namespaceObject)); } @@ -153,7 +154,8 @@ public static void createVzConfigmapComponent(String componentName, String confi testUntil(() -> { try { return Kubernetes.listComponents(namespace).getItems().stream() - .anyMatch(comp -> comp.getMetadata().getName().equals(componentName)); + .anyMatch(comp -> comp.getMetadata().getName() != null + && comp.getMetadata().getName().equals(componentName)); } catch (ApiException ex) { logger.warning(ex.getResponseBody()); } @@ -177,7 +179,8 @@ public static void deleteVzConfigmapComponent(String componentName, String names testUntil(() -> { try { return !Kubernetes.listComponents(namespace).getItems().stream() - .anyMatch(component -> component.getMetadata().getName().equals(componentName)); + .anyMatch(component -> component.getMetadata().getName() != null + && component.getMetadata().getName().equals(componentName)); } catch (ApiException ex) { logger.warning(ex.getResponseBody()); } diff --git a/integration-tests/src/test/java/oracle/weblogic/kubernetes/utils/WLSTUtils.java b/integration-tests/src/test/java/oracle/weblogic/kubernetes/utils/WLSTUtils.java index f088a3c0de6..2a5c2cf3fc5 100644 --- a/integration-tests/src/test/java/oracle/weblogic/kubernetes/utils/WLSTUtils.java +++ b/integration-tests/src/test/java/oracle/weblogic/kubernetes/utils/WLSTUtils.java @@ -1,4 +1,4 @@ -// Copyright (c) 2020, 2022, Oracle and/or its affiliates. +// Copyright (c) 2020, 2024, Oracle and/or its affiliates. // Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. package oracle.weblogic.kubernetes.utils; @@ -143,7 +143,7 @@ public static void createWLSTJob(String wlstJobName, String wlstScriptConfigMapN // check job status and fail test if the job failed to execute WLST V1Job job = getJob(jobName, namespace); - if (job != null) { + if (job != null && job.getStatus() != null && job.getStatus().getConditions() != null) { V1JobCondition jobCondition = job.getStatus().getConditions().stream().filter( v1JobCondition -> "Failed".equals(v1JobCondition.getType())) .findAny() @@ -151,13 +151,13 @@ public static void createWLSTJob(String wlstJobName, String wlstScriptConfigMapN if (jobCondition != null) { logger.severe("Job {0} failed to execute WLST script", jobName); List pods = listPods(namespace, "job-name=" + jobName).getItems(); - if (!pods.isEmpty()) { + if (!pods.isEmpty() && pods.get(0).getMetadata() != null) { logger.severe(getPodLog(pods.get(0).getMetadata().getName(), namespace)); fail("WLST execute job failed"); } } List pods = listPods(namespace, "job-name=" + jobName).getItems(); - if (!pods.isEmpty()) { + if (!pods.isEmpty() && pods.get(0).getMetadata() != null) { logger.info(getPodLog(pods.get(0).getMetadata().getName(), namespace)); } } @@ -236,7 +236,9 @@ public static ExecResult executeWLSTScriptInImageContainer(String containerName, result = exec(checkImageBuilderVersion, true); logger.info(WLSIMG_BUILDER + " version: {0}", result.stdout()); } catch (Exception ex) { - logger.info(WLSIMG_BUILDER + " version failed error {0} and {1}", result.stderr(), ex.getMessage()); + if (result != null) { + logger.info(WLSIMG_BUILDER + " version failed error {0} and {1}", result.stderr(), ex.getMessage()); + } ex.printStackTrace(); }