This is an automated email from the ASF dual-hosted git repository. zqr10159 pushed a commit to branch 2.0.0 in repository https://gitbox.apache.org/repos/asf/hertzbeat.git
commit 0db1e44f4aef764559db04ab26a7051e6e373dce Author: Logic <[email protected]> AuthorDate: Wed Aug 26 12:20:11 2026 +0800 test: make collector e2e portable on arm --- .../basic/redis/RedisCommonCollectE2eTest.java | 3 +-- .../collect/basic/ssh/SshCollectE2eTest.java | 11 ++++---- .../src/test/resources/docker/ssh/Dockerfile | 15 +++++++++++ .../collector/collect/AbstractCollectE2eTest.java | 31 ++++++++++++++++++---- 4 files changed, 48 insertions(+), 12 deletions(-) diff --git a/hertzbeat-e2e/hertzbeat-collector-basic-e2e/src/test/java/org/apache/hertzbeat/collector/collect/basic/redis/RedisCommonCollectE2eTest.java b/hertzbeat-e2e/hertzbeat-collector-basic-e2e/src/test/java/org/apache/hertzbeat/collector/collect/basic/redis/RedisCommonCollectE2eTest.java index 673cbb0d63..169f0c7036 100644 --- a/hertzbeat-e2e/hertzbeat-collector-basic-e2e/src/test/java/org/apache/hertzbeat/collector/collect/basic/redis/RedisCommonCollectE2eTest.java +++ b/hertzbeat-e2e/hertzbeat-collector-basic-e2e/src/test/java/org/apache/hertzbeat/collector/collect/basic/redis/RedisCommonCollectE2eTest.java @@ -51,7 +51,6 @@ import java.util.stream.Stream; @ExtendWith(MockitoExtension.class) public class RedisCommonCollectE2eTest extends AbstractCollectE2eTest { private static final String REDIS_IMAGE = "redis:7.4.2"; - private static final String HOST = "127.0.0.1"; private static final int REDIS_PORT = 6379; private static final String REDIS_PATTERN = "1"; private static final List<String> ALLOW_EMPTY_WHITE_LIST = Arrays.asList("server", "errorstats", "commandstats", "keyspace"); @@ -106,7 +105,7 @@ public class RedisCommonCollectE2eTest extends AbstractCollectE2eTest { @Override protected Protocol buildProtocol(Metrics metricsDef) { RedisProtocol redisProtocol = new RedisProtocol(); - redisProtocol.setHost(HOST); + redisProtocol.setHost(redisContainer.getHost()); redisProtocol.setPort(mappedPort.toString()); redisProtocol.setPattern(REDIS_PATTERN); return redisProtocol; diff --git a/hertzbeat-e2e/hertzbeat-collector-basic-e2e/src/test/java/org/apache/hertzbeat/collector/collect/basic/ssh/SshCollectE2eTest.java b/hertzbeat-e2e/hertzbeat-collector-basic-e2e/src/test/java/org/apache/hertzbeat/collector/collect/basic/ssh/SshCollectE2eTest.java index 95e8a1bac7..5732694a15 100644 --- a/hertzbeat-e2e/hertzbeat-collector-basic-e2e/src/test/java/org/apache/hertzbeat/collector/collect/basic/ssh/SshCollectE2eTest.java +++ b/hertzbeat-e2e/hertzbeat-collector-basic-e2e/src/test/java/org/apache/hertzbeat/collector/collect/basic/ssh/SshCollectE2eTest.java @@ -34,8 +34,8 @@ import org.mockito.junit.jupiter.MockitoExtension; import org.testcontainers.containers.GenericContainer; import org.testcontainers.containers.Network; import org.testcontainers.containers.wait.strategy.Wait; +import org.testcontainers.images.builder.ImageFromDockerfile; import org.testcontainers.lifecycle.Startables; -import org.testcontainers.utility.DockerImageName; import java.time.Duration; import java.util.Arrays; @@ -51,8 +51,9 @@ import java.util.stream.Stream; @Slf4j @ExtendWith(MockitoExtension.class) public class SshCollectE2eTest extends AbstractCollectE2eTest { - private static final String UBUNTU_IMAGE = "rastasheep/ubuntu-sshd:18.04"; - private static final String HOST = "127.0.0.1"; + private static final ImageFromDockerfile UBUNTU_IMAGE = + new ImageFromDockerfile("hertzbeat/ubuntu-sshd-e2e:24.04", false) + .withFileFromClasspath("Dockerfile", "docker/ssh/Dockerfile"); private static final String ROOT_USER = "root"; private static final int SSH_PORT = 22; private static final int PASSWORD_LENGTH = 12; @@ -111,7 +112,7 @@ public class SshCollectE2eTest extends AbstractCollectE2eTest { @Override protected Protocol buildProtocol(Metrics metricsDef) { SshProtocol sshProtocol = new SshProtocol(); - sshProtocol.setHost(HOST); + sshProtocol.setHost(linuxContainer.getHost()); sshProtocol.setPort(mappedPort.toString()); sshProtocol.setUsername(ROOT_USER); sshProtocol.setPassword(password); @@ -122,7 +123,7 @@ public class SshCollectE2eTest extends AbstractCollectE2eTest { private void setupAndStartContainer() { Network network = Network.builder().build(); - linuxContainer = new GenericContainer<>(DockerImageName.parse(UBUNTU_IMAGE)) + linuxContainer = new GenericContainer<>(UBUNTU_IMAGE) .withExposedPorts(SSH_PORT) .withNetwork(network) .withNetworkAliases("ubuntu") diff --git a/hertzbeat-e2e/hertzbeat-collector-basic-e2e/src/test/resources/docker/ssh/Dockerfile b/hertzbeat-e2e/hertzbeat-collector-basic-e2e/src/test/resources/docker/ssh/Dockerfile new file mode 100644 index 0000000000..744149d7d1 --- /dev/null +++ b/hertzbeat-e2e/hertzbeat-collector-basic-e2e/src/test/resources/docker/ssh/Dockerfile @@ -0,0 +1,15 @@ +FROM public.ecr.aws/ubuntu/ubuntu:24.04@sha256:a54764b5b6340c272ffb45e303fe4c8064bbdfb76d732b325b79ae6b92900e4c + +RUN apt-get update \ + && DEBIAN_FRONTEND=noninteractive apt-get install --yes --no-install-recommends \ + openssh-server \ + procps \ + util-linux \ + && rm -rf /var/lib/apt/lists/* \ + && mkdir -p /run/sshd \ + && printf 'PermitRootLogin yes\nPasswordAuthentication yes\nUsePAM no\n' \ + > /etc/ssh/sshd_config.d/hertzbeat-e2e.conf + +EXPOSE 22 + +CMD ["/usr/sbin/sshd", "-D", "-e"] diff --git a/hertzbeat-e2e/hertzbeat-collector-common-e2e/src/test/java/org/apache/hertzbeat/collector/collect/AbstractCollectE2eTest.java b/hertzbeat-e2e/hertzbeat-collector-common-e2e/src/test/java/org/apache/hertzbeat/collector/collect/AbstractCollectE2eTest.java index b58a4423cc..1550791e50 100644 --- a/hertzbeat-e2e/hertzbeat-collector-common-e2e/src/test/java/org/apache/hertzbeat/collector/collect/AbstractCollectE2eTest.java +++ b/hertzbeat-e2e/hertzbeat-collector-common-e2e/src/test/java/org/apache/hertzbeat/collector/collect/AbstractCollectE2eTest.java @@ -28,12 +28,19 @@ import org.apache.hertzbeat.common.entity.job.Metrics; import org.apache.hertzbeat.common.entity.job.protocol.Protocol; import org.apache.hertzbeat.common.entity.message.CollectRep; import org.apache.hertzbeat.manager.dao.DefineDao; +import org.apache.hertzbeat.manager.dao.MonitorDao; +import org.apache.hertzbeat.manager.dao.ParamDao; +import org.apache.hertzbeat.manager.monitor.definition.MonitorDefinitionMutationCoordinator; +import org.apache.hertzbeat.manager.monitor.definition.MonitorDefinitionStoreFactory; +import org.apache.hertzbeat.manager.service.MonitorService; import org.apache.hertzbeat.manager.service.impl.AppServiceImpl; -import org.apache.hertzbeat.manager.service.impl.ObjectStoreConfigServiceImpl; +import org.apache.hertzbeat.manager.setup.runtime.SetupRuntimeTransition; +import org.apache.hertzbeat.warehouse.service.WarehouseService; import org.junit.jupiter.api.Assertions; -import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.MockitoAnnotations; +import org.springframework.beans.factory.ObjectProvider; +import org.springframework.test.context.bean.override.mockito.MockitoBean; import java.util.ArrayList; import java.util.List; @@ -49,7 +56,6 @@ import static org.mockito.Mockito.when; @Slf4j public abstract class AbstractCollectE2eTest { - @InjectMocks protected AppServiceImpl appService; protected AbstractCollect collect; @@ -58,8 +64,16 @@ public abstract class AbstractCollectE2eTest { protected Metrics metrics; + @MockitoBean + protected SetupRuntimeTransition setupRuntimeTransition; @Mock - protected ObjectStoreConfigServiceImpl objectStoreConfigService; + private MonitorDao monitorDao; + @Mock + private ParamDao paramDao; + @Mock + private WarehouseService warehouseService; + @Mock + private ObjectProvider<MonitorService> monitorServiceProvider; @Mock private WheelTimerTask timerJob; @Mock @@ -78,7 +92,14 @@ public abstract class AbstractCollectE2eTest { metricsCollect = new MetricsCollect(mock(Metrics.class), timeout, mock(CollectDataDispatch.class), null, List.of()); // Initialize services and components - appService.afterPropertiesSet(); + appService = new AppServiceImpl( + monitorDao, + paramDao, + warehouseService, + monitorServiceProvider, + new MonitorDefinitionStoreFactory(defineDao), + new MonitorDefinitionMutationCoordinator()); + appService.initializeRuntimeDefinitions(null); metrics = new Metrics(); } --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
