88import java .nio .file .Path ;
99import java .nio .file .Paths ;
1010import java .nio .file .StandardCopyOption ;
11+ import java .time .OffsetDateTime ;
1112import java .util .HashMap ;
1213import java .util .List ;
1314import java .util .Map ;
1415
1516import io .kubernetes .client .custom .Quantity ;
1617import io .kubernetes .client .openapi .ApiException ;
18+ import io .kubernetes .client .openapi .models .CoreV1Event ;
1719import io .kubernetes .client .openapi .models .V1LocalObjectReference ;
1820import io .kubernetes .client .openapi .models .V1ResourceRequirements ;
21+ import io .kubernetes .client .util .Yaml ;
1922import oracle .weblogic .domain .ClusterResource ;
2023import oracle .weblogic .domain .DomainResource ;
2124import oracle .weblogic .domain .ServerPod ;
5659import static oracle .weblogic .kubernetes .actions .TestActions .deletePersistentVolumeClaim ;
5760import static oracle .weblogic .kubernetes .actions .TestActions .deletePod ;
5861import static oracle .weblogic .kubernetes .actions .TestActions .getServiceNodePort ;
62+ import static oracle .weblogic .kubernetes .actions .TestActions .now ;
5963import static oracle .weblogic .kubernetes .actions .TestActions .uninstallNginx ;
6064import static oracle .weblogic .kubernetes .actions .impl .primitive .Kubernetes .deleteNamespace ;
6165import static oracle .weblogic .kubernetes .utils .ClusterUtils .createClusterAndVerify ;
6266import static oracle .weblogic .kubernetes .utils .ClusterUtils .createClusterResource ;
6367import static oracle .weblogic .kubernetes .utils .CommonMiiTestUtils .createDomainResource ;
68+ import static oracle .weblogic .kubernetes .utils .CommonTestUtils .checkClusterReplicaCountMatches ;
6469import static oracle .weblogic .kubernetes .utils .CommonTestUtils .checkPodReadyAndServiceExists ;
6570import static oracle .weblogic .kubernetes .utils .CommonTestUtils .testUntil ;
6671import static oracle .weblogic .kubernetes .utils .CommonTestUtils .withLongRetryPolicy ;
6974import static oracle .weblogic .kubernetes .utils .FileUtils .replaceStringInFile ;
7075import static oracle .weblogic .kubernetes .utils .ImageUtils .createBaseRepoSecret ;
7176import static oracle .weblogic .kubernetes .utils .ImageUtils .createTestRepoSecret ;
77+ import static oracle .weblogic .kubernetes .utils .K8sEvents .getEvents ;
7278import static oracle .weblogic .kubernetes .utils .LoadBalancerUtils .createIngressForDomainAndVerify ;
7379import static oracle .weblogic .kubernetes .utils .LoadBalancerUtils .installAndVerifyNginx ;
7480import static oracle .weblogic .kubernetes .utils .MonitoringUtils .cleanupPromGrafanaClusterRoles ;
8086import static oracle .weblogic .kubernetes .utils .MonitoringUtils .installMonitoringExporter ;
8187import static oracle .weblogic .kubernetes .utils .OperatorUtils .installAndVerifyOperator ;
8288import static oracle .weblogic .kubernetes .utils .PersistentVolumeUtils .createPvAndPvc ;
83- import static oracle .weblogic .kubernetes .utils .PodUtils .checkPodDeleted ;
89+ import static oracle .weblogic .kubernetes .utils .PodUtils .isPodDeleted ;
8490import static oracle .weblogic .kubernetes .utils .SecretUtils .createSecretWithUsernamePassword ;
8591import static oracle .weblogic .kubernetes .utils .ThreadSafeLogger .getLogger ;
8692import static org .assertj .core .api .Assertions .assertThat ;
8793import static org .junit .jupiter .api .Assertions .assertDoesNotThrow ;
94+ import static org .junit .jupiter .api .Assertions .assertEquals ;
8895import static org .junit .jupiter .api .Assertions .assertNotNull ;
8996import static org .junit .jupiter .api .Assertions .assertTrue ;
9097
@@ -296,6 +303,7 @@ void testHPAWithCustomMetrics() {
296303 //reboot server1 and server2 to kill open sessions
297304 assertDoesNotThrow (() -> deletePod (managedServerPrefix + 1 , domainNamespace ));
298305 assertDoesNotThrow (() -> deletePod (managedServerPrefix + 2 , domainNamespace ));
306+ OffsetDateTime timestamp = now ();
299307 // wait until reboot
300308 for (int i = 1 ; i < 3 ; i ++) {
301309 checkPodReadyAndServiceExists (managedServerPrefix + i , domainUid , domainNamespace );
@@ -312,21 +320,42 @@ void testHPAWithCustomMetrics() {
312320 logger ,
313321 "Checking if replica switched to 2" );
314322
315- try {
316- checkPodDeleted (managedServerPrefix + 3 , domainUid , domainNamespace );
317- } catch (Exception ex ) {
323+ if (!isPodDeleted (managedServerPrefix + 3 , domainUid , domainNamespace )) {
324+
318325 //check if different server was scaled down
319- try {
320- if (!Kubernetes .doesPodExist (domainNamespace , domainUid , managedServerPrefix + 1 )) {
326+ assertDoesNotThrow (() -> {
327+ logger .info ("Checking if HPA scaled down managed server 1 or managed server 2" );
328+ String command = KUBERNETES_CLI + " get pods -n" + domainNamespace ;
329+
330+ logger .info ("Executing command " + command );
331+ ExecResult result = ExecCommand .exec (command );
332+ logger .info (" Result output: " + result .stdout ());
333+ command = KUBERNETES_CLI + " describe pod " + managedServerPrefix + 3 + " -n" + domainNamespace ;
334+
335+ logger .info ("Executing command " + command );
336+ result = ExecCommand .exec (command );
337+ logger .info (" Result output: " + result .stdout ());
338+ List <CoreV1Event > events = getEvents (domainNamespace ,timestamp );
339+ for (CoreV1Event event : events ) {
340+ logger .info ("Generated events after HPA scaling " + Yaml .dump (event ));
341+ }
342+ int numberOfManagedSvs = 3 ;
343+ if (!Kubernetes .doesPodExist (domainNamespace , domainUid , managedServerPrefix + 1 )
344+ || Kubernetes .isPodTerminating (domainNamespace , domainUid , managedServerPrefix + 1 )) {
321345 logger .info ("HPA scaled down managed server 1" );
322- } else if (!Kubernetes .doesPodExist (domainNamespace , domainUid , managedServerPrefix + 2 )) {
346+ --numberOfManagedSvs ;
347+ } else if (!Kubernetes .doesPodExist (domainNamespace , domainUid , managedServerPrefix + 2 )
348+ || Kubernetes .isPodTerminating (domainNamespace , domainUid , managedServerPrefix + 2 )) {
323349 logger .info ("HPA scaled down managed server 2" );
324- } else {
325- checkPodDeleted (managedServerPrefix + 3 , domainUid , domainNamespace );
350+ --numberOfManagedSvs ;
351+ } else if (!Kubernetes .doesPodExist (domainNamespace , domainUid , managedServerPrefix + 3 )
352+ || Kubernetes .isPodTerminating (domainNamespace , domainUid , managedServerPrefix + 2 )) {
353+ logger .info ("HPA scaled down managed server 3" );
354+ --numberOfManagedSvs ;
326355 }
327- } catch ( Exception ex1 ) {
328- throw ex ;
329- }
356+ assertTrue ( checkClusterReplicaCountMatches ( clusterResName , domainNamespace , 2 ));
357+ assertEquals ( 2 , numberOfManagedSvs ) ;
358+ });
330359 }
331360 }
332361
0 commit comments