From a975d44294186f2c6c91401a5452aed3606c1bf0 Mon Sep 17 00:00:00 2001 From: jialiang Date: Tue, 29 Oct 2024 08:50:28 +0800 Subject: [PATCH 1/4] AMBARI-26211: Fix TaskActionScheduler test failed --- .../actionmanager/TestActionScheduler.java | 21 +-- .../HostsRepositoryVersionCheckTest.java | 4 +- .../server/checks/ServicesUpCheckTest.java | 4 +- .../orchestrate/UpgradeHelperTest.java | 121 ++++++++++++------ 4 files changed, 100 insertions(+), 50 deletions(-) diff --git a/ambari-server/src/test/java/org/apache/ambari/server/actionmanager/TestActionScheduler.java b/ambari-server/src/test/java/org/apache/ambari/server/actionmanager/TestActionScheduler.java index 33268cc2ef7..17d8ce9a7d3 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/actionmanager/TestActionScheduler.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/actionmanager/TestActionScheduler.java @@ -24,6 +24,7 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; +import static org.mockito.ArgumentMatchers.nullable; import static org.mockito.Matchers.any; import static org.mockito.Matchers.anyBoolean; import static org.mockito.Matchers.anyCollectionOf; @@ -426,7 +427,7 @@ public void testActionTimeout() throws Exception { ServiceComponentHost sch = mock(ServiceComponentHost.class); UnitOfWork unitOfWork = mock(UnitOfWork.class); AgentCommandsPublisher agentCommandsPublisher = mock(AgentCommandsPublisher.class); - when(fsm.getCluster(anyString())).thenReturn(oneClusterMock); + when(fsm.getCluster(nullable(String.class))).thenReturn(oneClusterMock); when(oneClusterMock.getService(anyString())).thenReturn(serviceObj); when(serviceObj.getServiceComponent(anyString())).thenReturn(scomp); when(scomp.getServiceComponentHost(anyString())).thenReturn(sch); @@ -475,7 +476,7 @@ public Void answer(InvocationOnMock invocation) throws Throwable { command.setStatus(HostRoleStatus.TIMEDOUT); return null; } - }).when(db).timeoutHostRole(anyString(), anyLong(), anyLong(), anyString(), anyBoolean(), eq(false)); + }).when(db).timeoutHostRole(nullable(String.class), anyLong(), anyLong(), anyString(), anyBoolean(), eq(false)); //Small action timeout to test rescheduling @@ -526,7 +527,7 @@ public void testActionTimeoutForLostHost() throws Exception { ServiceComponentHost sch = mock(ServiceComponentHost.class); UnitOfWork unitOfWork = mock(UnitOfWork.class); AgentCommandsPublisher agentCommandsPublisher = mock(AgentCommandsPublisher.class); - when(fsm.getCluster(anyString())).thenReturn(oneClusterMock); + when(fsm.getCluster(nullable(String.class))).thenReturn(oneClusterMock); when(oneClusterMock.getService(anyString())).thenReturn(serviceObj); when(serviceObj.getServiceComponent(anyString())).thenReturn(scomp); when(scomp.getServiceComponentHost(anyString())).thenReturn(sch); @@ -566,7 +567,7 @@ public Void answer(InvocationOnMock invocation) throws Throwable { command.setStatus(HostRoleStatus.ABORTED); return null; } - }).when(db).timeoutHostRole(anyString(), anyLong(), anyLong(), anyString(), anyBoolean(), eq(true)); + }).when(db).timeoutHostRole(nullable(String.class), anyLong(), anyLong(), anyString(), anyBoolean(), eq(true)); //Small action timeout to test rescheduling AmbariEventPublisher aep = EasyMock.createNiceMock(AmbariEventPublisher.class); @@ -624,7 +625,7 @@ public void testOpFailedEventRaisedForAbortedHostRole() throws Exception { UnitOfWork unitOfWork = mock(UnitOfWork.class); AgentCommandsPublisher agentCommandsPublisher = mock(AgentCommandsPublisher.class); - when(fsm.getCluster(anyString())).thenReturn(oneClusterMock); + when(fsm.getCluster(nullable(String.class))).thenReturn(oneClusterMock); when(oneClusterMock.getService(anyString())).thenReturn(serviceObj); when(serviceObj.getServiceComponent(anyString())).thenReturn(scomp); when(serviceObj.getCluster()).thenReturn(oneClusterMock); @@ -657,7 +658,7 @@ public Void answer(InvocationOnMock invocation) throws Throwable { command.setStatus(HostRoleStatus.ABORTED); return null; } - }).when(db).timeoutHostRole(anyString(), anyLong(), anyLong(), anyString(), anyBoolean(), eq(true)); + }).when(db).timeoutHostRole(nullable(String.class), anyLong(), anyLong(), anyString(), anyBoolean(), eq(true)); doAnswer(new Answer>() { @Override @@ -782,7 +783,7 @@ public Void answer(InvocationOnMock invocation) throws Throwable { command.setStatus(HostRoleStatus.valueOf(commandReport.getStatus())); return null; } - }).when(db).updateHostRoleState(anyString(), anyLong(), anyLong(), anyString(), any(CommandReport.class)); + }).when(db).updateHostRoleState(nullable(String.class), anyLong(), anyLong(), anyString(), any(CommandReport.class)); doAnswer(new Answer() { @Override @@ -944,7 +945,7 @@ public Void answer(InvocationOnMock invocation) throws Throwable { command.setStatus(HostRoleStatus.valueOf(commandReport.getStatus())); return null; } - }).when(db).updateHostRoleState(anyString(), anyLong(), anyLong(), anyString(), any(CommandReport.class)); + }).when(db).updateHostRoleState(nullable(String.class), anyLong(), anyLong(), anyString(), any(CommandReport.class)); doAnswer(new Answer() { @Override @@ -1160,7 +1161,7 @@ public Void answer(InvocationOnMock invocation) throws Throwable { command.setStatus(HostRoleStatus.valueOf(commandReport.getStatus())); return null; } - }).when(db).updateHostRoleState(anyString(), anyLong(), anyLong(), anyString(), any(CommandReport.class)); + }).when(db).updateHostRoleState(nullable(String.class), anyLong(), anyLong(), anyString(), any(CommandReport.class)); doAnswer(new Answer() { @Override @@ -2426,7 +2427,7 @@ public Void answer(InvocationOnMock invocation) throws Throwable { command.setStatus(HostRoleStatus.valueOf(commandReport.getStatus())); return null; } - }).when(db).updateHostRoleState(anyString(), anyLong(), anyLong(), anyString(), any(CommandReport.class)); + }).when(db).updateHostRoleState(nullable(String.class), anyLong(), anyLong(), anyString(), any(CommandReport.class)); doAnswer(new Answer>() { @Override diff --git a/ambari-server/src/test/java/org/apache/ambari/server/checks/HostsRepositoryVersionCheckTest.java b/ambari-server/src/test/java/org/apache/ambari/server/checks/HostsRepositoryVersionCheckTest.java index e7639de9e5f..99ce6047df5 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/checks/HostsRepositoryVersionCheckTest.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/checks/HostsRepositoryVersionCheckTest.java @@ -53,6 +53,8 @@ import com.google.inject.Provider; +import static org.mockito.ArgumentMatchers.nullable; + /** * Unit tests for HostsRepositoryVersionCheck * @@ -185,7 +187,7 @@ public CheckHelper get() { Mockito.when( hostVersionDAO.findByClusterStackVersionAndHost(Mockito.anyString(), Mockito.any(StackId.class), Mockito.anyString(), - Mockito.anyString())).thenReturn(hostVersion); + nullable(String.class))).thenReturn(hostVersion); check = hostsRepositoryVersionCheck.perform(request); Assert.assertEquals(UpgradeCheckStatus.PASS, check.getStatus()); diff --git a/ambari-server/src/test/java/org/apache/ambari/server/checks/ServicesUpCheckTest.java b/ambari-server/src/test/java/org/apache/ambari/server/checks/ServicesUpCheckTest.java index bb3dc6be230..35170a0f797 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/checks/ServicesUpCheckTest.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/checks/ServicesUpCheckTest.java @@ -61,6 +61,8 @@ import com.google.inject.Provider; +import static org.mockito.ArgumentMatchers.nullable; + /** * Unit tests for ServicesUpCheck @@ -191,7 +193,7 @@ public CheckHelper get() { Mockito.when(cluster.getService("AMBARI_METRICS")).thenReturn(amsService); Mockito.when(ambariMetaInfo.getComponent(Mockito.anyString(), Mockito.anyString(), - Mockito.anyString(), Mockito.anyString())).thenAnswer(new Answer() { + nullable(String.class), Mockito.anyString())).thenAnswer(new Answer() { @Override public ComponentInfo answer(InvocationOnMock invocation) throws Throwable { ComponentInfo anyInfo = Mockito.mock(ComponentInfo.class); diff --git a/ambari-server/src/test/java/org/apache/ambari/server/stack/upgrade/orchestrate/UpgradeHelperTest.java b/ambari-server/src/test/java/org/apache/ambari/server/stack/upgrade/orchestrate/UpgradeHelperTest.java index a0975872a78..eeca71595bc 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/stack/upgrade/orchestrate/UpgradeHelperTest.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/stack/upgrade/orchestrate/UpgradeHelperTest.java @@ -122,15 +122,13 @@ import org.apache.ambari.spi.upgrade.OrchestrationOptions; import org.apache.ambari.spi.upgrade.UpgradeType; import org.apache.commons.io.FileUtils; -import org.easymock.Capture; -import org.easymock.EasyMock; -import org.easymock.EasyMockSupport; -import org.easymock.IAnswer; +import org.easymock.*; import org.junit.After; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.rules.TemporaryFolder; +import org.mockito.ArgumentMatcher; import org.springframework.security.core.context.SecurityContextHolder; import com.google.common.collect.ImmutableMap; @@ -2549,7 +2547,6 @@ public void testUpgradeOrchestrationWithRackError() throws Exception { } } - /** * Tests merging configurations between existing and new stack values on * upgrade. @@ -2725,6 +2722,33 @@ public void testMergeConfigurations() throws Exception { assertEquals("three-changed", expectedBazType.get("3")); } + + private static class ClusterEnvCaptureWrapper { + private final Capture>> capture; + private final Map clusterEnvMap; + + public ClusterEnvCaptureWrapper(Map clusterEnvMap) { + this.capture = Capture.newInstance(); + this.clusterEnvMap = clusterEnvMap; + } + + public Capture>> getCapture() { + return capture; + } + + public void handleCapturedValue() { + Map> value = capture.getValue(); + System.out.println("Captured value: " + value); // Debug print + + if (value.containsKey("cluster-env")) { + clusterEnvMap.putAll(value.get("cluster-env")); + } + System.out.println("ClusterEnvMap after handling: " + clusterEnvMap); // Debug print + + } + } + + @Test public void testMergeConfigurationsWithClusterEnv() throws Exception { Cluster cluster = makeCluster(true); @@ -2735,12 +2759,12 @@ public void testMergeConfigurationsWithClusterEnv() throws Exception { ConfigFactory cf = injector.getInstance(ConfigFactory.class); Config clusterEnv = cf.createNew(cluster, "cluster-env", "version1", - ImmutableMap.builder().put("a", "b").build(), - Collections.emptyMap()); + ImmutableMap.builder().put("a", "b").build(), + Collections.emptyMap()); Config zooCfg = cf.createNew(cluster, "zoo.cfg", "version1", - ImmutableMap.builder().put("c", "d").build(), - Collections.emptyMap()); + ImmutableMap.builder().put("c", "d").build(), + Collections.emptyMap()); cluster.addDesiredConfig("admin", Sets.newHashSet(clusterEnv, zooCfg)); @@ -2748,25 +2772,8 @@ public void testMergeConfigurationsWithClusterEnv() throws Exception { stackMap.put("cluster-env", new HashMap<>()); stackMap.put("hive-site", new HashMap<>()); - final Map clusterEnvMap = new HashMap<>(); - - Capture captureCluster = Capture.newInstance(); - Capture captureStackId = Capture.newInstance(); - Capture captureAmc = Capture.newInstance(); - - Capture>> cap = Capture.newInstance(); - - /*Capture>> cap = new Capture>>() { - @Override - public void setValue(Map> value) { - if (value.containsKey("cluster-env")) { - clusterEnvMap.putAll(value.get("cluster-env")); - } - } - };*/ - - Capture captureUsername = Capture.newInstance(); - Capture captureNote = Capture.newInstance(); + final ClusterEnvWrapper clusterEnvWrapper = new ClusterEnvWrapper(); + System.out.println("Initial clusterEnvMap: " + clusterEnvWrapper.getClusterEnvMap()); // Debug print EasyMock.reset(m_configHelper); expect(m_configHelper.getDefaultProperties(oldStack, "HIVE")).andReturn(stackMap).atLeastOnce(); @@ -2774,14 +2781,13 @@ public void setValue(Map> value) { expect(m_configHelper.getDefaultProperties(oldStack, "ZOOKEEPER")).andReturn(stackMap).atLeastOnce(); expect(m_configHelper.getDefaultProperties(newStack, "ZOOKEEPER")).andReturn(stackMap).atLeastOnce(); expect(m_configHelper.createConfigTypes( - EasyMock.capture(captureCluster), - EasyMock.capture(captureStackId), - EasyMock.capture(captureAmc), - EasyMock.capture(cap), - - EasyMock.capture(captureUsername), - EasyMock.capture(captureNote))).andReturn(true); - + EasyMock.anyObject(Cluster.class), + EasyMock.anyObject(StackId.class), + EasyMock.anyObject(AmbariManagementController.class), + eqClusterEnv(clusterEnvWrapper), + EasyMock.anyString(), + EasyMock.anyString() + )).andReturn(true); replay(m_configHelper); RepositoryVersionEntity repoVersionEntity = helper.getOrCreateRepositoryVersion(new StackId("HDP-2.5.0"), "2.5.0-1234"); @@ -2798,14 +2804,53 @@ public void setValue(Map> value) { UpgradeHelper upgradeHelper = injector.getInstance(UpgradeHelper.class); upgradeHelper.updateDesiredRepositoriesAndConfigs(context); - assertNotNull(clusterEnvMap); - assertTrue(clusterEnvMap.containsKey("a")); + assertEquals("b",clusterEnvWrapper.getClusterEnvMap().get("a")); + assertTrue(clusterEnvWrapper.getClusterEnvMap().containsKey("a")); // Do stacks cleanup stackManagerMock.invalidateCurrentPaths(); ambariMetaInfo.init(); } + // Custom matcher for cluster-env map + private static Map> eqClusterEnv(final ClusterEnvWrapper wrapper) { + EasyMock.reportMatcher(new IArgumentMatcher() { + @Override + public boolean matches(Object argument) { + if (argument instanceof Map) { + Map> map = (Map>) argument; + if (map.containsKey("cluster-env")) { + wrapper.updateClusterEnvMap(map.get("cluster-env")); + return true; + } + } + return false; + } + + @Override + public void appendTo(StringBuffer buffer) { + buffer.append("eqClusterEnv("); + buffer.append(wrapper); + buffer.append(")"); + } + }); + return null; + } + + // Custom wrapper class to hold and update clusterEnvMap + private static class ClusterEnvWrapper { + private final Map clusterEnvMap = new HashMap<>(); + + public void updateClusterEnvMap(Map newMap) { + clusterEnvMap.putAll(newMap); + } + + public Map getClusterEnvMap() { + return clusterEnvMap; + } + } + + @Test public void testSequentialServiceChecks() throws Exception { Map upgrades = ambariMetaInfo.getUpgradePacks("HDP", "2.1.1"); From 868576b6fb08a862cce12ac587d27c276e39f59c Mon Sep 17 00:00:00 2001 From: jialiang Date: Tue, 29 Oct 2024 08:57:09 +0800 Subject: [PATCH 2/4] remove unused code --- .../orchestrate/UpgradeHelperTest.java | 27 ------------------- 1 file changed, 27 deletions(-) diff --git a/ambari-server/src/test/java/org/apache/ambari/server/stack/upgrade/orchestrate/UpgradeHelperTest.java b/ambari-server/src/test/java/org/apache/ambari/server/stack/upgrade/orchestrate/UpgradeHelperTest.java index eeca71595bc..cfdf7607f91 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/stack/upgrade/orchestrate/UpgradeHelperTest.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/stack/upgrade/orchestrate/UpgradeHelperTest.java @@ -2722,33 +2722,6 @@ public void testMergeConfigurations() throws Exception { assertEquals("three-changed", expectedBazType.get("3")); } - - private static class ClusterEnvCaptureWrapper { - private final Capture>> capture; - private final Map clusterEnvMap; - - public ClusterEnvCaptureWrapper(Map clusterEnvMap) { - this.capture = Capture.newInstance(); - this.clusterEnvMap = clusterEnvMap; - } - - public Capture>> getCapture() { - return capture; - } - - public void handleCapturedValue() { - Map> value = capture.getValue(); - System.out.println("Captured value: " + value); // Debug print - - if (value.containsKey("cluster-env")) { - clusterEnvMap.putAll(value.get("cluster-env")); - } - System.out.println("ClusterEnvMap after handling: " + clusterEnvMap); // Debug print - - } - } - - @Test public void testMergeConfigurationsWithClusterEnv() throws Exception { Cluster cluster = makeCluster(true); From fe138cdedf8341155ab3cb715eab7cca26685b2e Mon Sep 17 00:00:00 2001 From: jialiang Date: Tue, 29 Oct 2024 10:35:35 +0800 Subject: [PATCH 3/4] fix BlueprintConfigurationProcessorTest hang for long time --- .../internal/BlueprintConfigurationProcessorTest.java | 2 ++ .../server/security/ldap/AmbariLdapDataPopulatorTest.java | 2 ++ 2 files changed, 4 insertions(+) diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/BlueprintConfigurationProcessorTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/BlueprintConfigurationProcessorTest.java index 71afb42c2e1..3683012d22e 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/BlueprintConfigurationProcessorTest.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/BlueprintConfigurationProcessorTest.java @@ -91,6 +91,7 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.powermock.api.easymock.PowerMock; +import org.powermock.core.classloader.annotations.PowerMockIgnore; import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; @@ -107,6 +108,7 @@ */ @RunWith(PowerMockRunner.class) @PrepareForTest(AmbariServer.class) +@PowerMockIgnore({"org.apache.logging.log4j.*","org.slf4j.*"}) public class BlueprintConfigurationProcessorTest extends EasyMockSupport { private static final Configuration EMPTY_CONFIG = new Configuration(emptyMap(), emptyMap()); diff --git a/ambari-server/src/test/java/org/apache/ambari/server/security/ldap/AmbariLdapDataPopulatorTest.java b/ambari-server/src/test/java/org/apache/ambari/server/security/ldap/AmbariLdapDataPopulatorTest.java index 4bdc3545509..6a9defba2f9 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/security/ldap/AmbariLdapDataPopulatorTest.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/security/ldap/AmbariLdapDataPopulatorTest.java @@ -69,6 +69,7 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.powermock.api.easymock.PowerMock; +import org.powermock.core.classloader.annotations.PowerMockIgnore; import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; import org.springframework.ldap.control.PagedResultsCookie; @@ -86,6 +87,7 @@ @RunWith(PowerMockRunner.class) @PrepareForTest(AmbariLdapUtils.class) +@PowerMockIgnore({"org.apache.logging.log4j.*","org.slf4j.*"}) public class AmbariLdapDataPopulatorTest { public static class AmbariLdapDataPopulatorTestInstance extends TestAmbariLdapDataPopulator { public AmbariLdapDataPopulatorTestInstance(Provider configurationProvider, Users users) { From 88d5cd78ac9ab1acac929fce9513c7155958a13d Mon Sep 17 00:00:00 2001 From: jialiang Date: Tue, 29 Oct 2024 10:38:17 +0800 Subject: [PATCH 4/4] remove maven.test.failure.ignore --- Jenkinsfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Jenkinsfile b/Jenkinsfile index 3080789340b..4cea9715f15 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -117,7 +117,7 @@ pipeline { } stage('Ambari Server JTests') { steps { - sh 'mvn -am test -pl ambari-server -DskipPythonTests -Dmaven.test.failure.ignore -Dmaven.artifact.threads=10 -Drat.skip' + sh 'mvn -am test -pl ambari-server -DskipPythonTests -Dmaven.artifact.threads=10 -Drat.skip' } } }