This is an automated email from the ASF dual-hosted git repository.

dockerzhang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/inlong.git


The following commit(s) were added to refs/heads/master by this push:
     new 30dd38f8af [INLONG-9909][Agent] Add unit test for installer (#9916)
30dd38f8af is described below

commit 30dd38f8af2239e5b91ad8d4872f41f7baf167ea
Author: justinwwhuang <[email protected]>
AuthorDate: Wed Apr 3 22:23:14 2024 +0800

    [INLONG-9909][Agent] Add unit test for installer (#9916)
---
 .../agent-installer/conf/installer.properties      |  12 +-
 inlong-agent/agent-installer/pom.xml               |  18 ++
 .../inlong/agent/installer/ManagerFetcher.java     |  12 +-
 .../inlong/agent/installer/ModuleManager.java      |  22 +--
 .../src/test/java/installer/BaseTestsHelper.java   |  67 +++++++
 .../test/java/installer/ModuleActionTypeEnum.java  |  57 ++++++
 .../src/test/java/installer/TestModuleManager.java | 208 +++++++++++++++++++++
 .../src/test/resources/conf/modules.json           |   1 +
 .../agent-installer/src/test/resources/log4j2.xml  |  45 +++++
 9 files changed, 419 insertions(+), 23 deletions(-)

diff --git a/inlong-agent/agent-installer/conf/installer.properties 
b/inlong-agent/agent-installer/conf/installer.properties
index 52b4ce071f..85b2de5bfc 100755
--- a/inlong-agent/agent-installer/conf/installer.properties
+++ b/inlong-agent/agent-installer/conf/installer.properties
@@ -18,21 +18,21 @@
 #######################
 #   common config
 #######################
-local.ip=127.0.0.1
+agent.local.ip=127.0.0.1
 agent.enable.oom.exit=false
 
 ############################
 # manager config
 ############################
-manager.addr=http://127.0.0.1:8083
-manager.auth.secretId=
-manager.auth.secretKey=
+agent.manager.addr=http://127.0.0.1:8083
+agent.manager.auth.secretId=
+agent.manager.auth.secretKey=
 
 ############################
 # cluster config for automatically report and register
 ############################
-cluster.tag=default_cluster
-cluster.name=default_agent
+agent.cluster.tag=default_cluster
+agent.cluster.name=default_agent
 
 ############################
 # audit config
diff --git a/inlong-agent/agent-installer/pom.xml 
b/inlong-agent/agent-installer/pom.xml
index 4ce97f8344..939df6ebe8 100644
--- a/inlong-agent/agent-installer/pom.xml
+++ b/inlong-agent/agent-installer/pom.xml
@@ -58,6 +58,24 @@
                 </exclusion>
             </exclusions>
         </dependency>
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.awaitility</groupId>
+            <artifactId>awaitility</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.powermock</groupId>
+            <artifactId>powermock-api-mockito2</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.powermock</groupId>
+            <artifactId>powermock-module-junit4</artifactId>
+        </dependency>
     </dependencies>
 
     <build>
diff --git 
a/inlong-agent/agent-installer/src/main/java/org/apache/inlong/agent/installer/ManagerFetcher.java
 
b/inlong-agent/agent-installer/src/main/java/org/apache/inlong/agent/installer/ManagerFetcher.java
index ab17b6a5a9..63fbffa76e 100644
--- 
a/inlong-agent/agent-installer/src/main/java/org/apache/inlong/agent/installer/ManagerFetcher.java
+++ 
b/inlong-agent/agent-installer/src/main/java/org/apache/inlong/agent/installer/ManagerFetcher.java
@@ -33,13 +33,15 @@ import com.google.gson.JsonObject;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import static 
org.apache.inlong.agent.constant.AgentConstants.AGENT_CLUSTER_NAME;
+import static 
org.apache.inlong.agent.constant.AgentConstants.AGENT_CLUSTER_TAG;
+import static org.apache.inlong.agent.constant.AgentConstants.AGENT_LOCAL_IP;
 import static 
org.apache.inlong.agent.constant.FetcherConstants.AGENT_FETCHER_INTERVAL;
 import static 
org.apache.inlong.agent.constant.FetcherConstants.AGENT_MANAGER_RETURN_PARAM_DATA;
 import static 
org.apache.inlong.agent.constant.FetcherConstants.DEFAULT_AGENT_FETCHER_INTERVAL;
 import static 
org.apache.inlong.agent.constant.FetcherConstants.DEFAULT_INSTALLER_MANAGER_CONFIG_HTTP_PATH;
 import static 
org.apache.inlong.agent.constant.FetcherConstants.INSTALLER_MANAGER_CONFIG_HTTP_PATH;
 import static 
org.apache.inlong.agent.installer.ManagerResultFormatter.getResultData;
-import static org.apache.inlong.agent.utils.AgentUtils.fetchLocalIp;
 import static org.apache.inlong.agent.utils.AgentUtils.fetchLocalUuid;
 
 /**
@@ -47,8 +49,6 @@ import static 
org.apache.inlong.agent.utils.AgentUtils.fetchLocalUuid;
  */
 public class ManagerFetcher extends AbstractDaemon implements ProfileFetcher {
 
-    public static final String CLUSTER_NAME = "cluster.name";
-    public static final String CLUSTER_TAG = "cluster.tag";
     private static final Logger LOGGER = 
LoggerFactory.getLogger(ManagerFetcher.class);
     private static final GsonBuilder gsonBuilder = new 
GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss");
     private static final Gson GSON = gsonBuilder.create();
@@ -68,8 +68,8 @@ public class ManagerFetcher extends AbstractDaemon implements 
ProfileFetcher {
         httpManager = manager.getModuleManager().getHttpManager(conf);
         baseManagerUrl = httpManager.getBaseUrl();
         staticConfigUrl = buildStaticConfigUrl(baseManagerUrl);
-        clusterTag = conf.get(CLUSTER_TAG);
-        clusterName = conf.get(CLUSTER_NAME);
+        clusterTag = conf.get(AGENT_CLUSTER_TAG);
+        clusterName = conf.get(AGENT_CLUSTER_NAME);
     }
 
     /**
@@ -140,7 +140,7 @@ public class ManagerFetcher extends AbstractDaemon 
implements ProfileFetcher {
     @Override
     public void start() throws Exception {
         // when agent start, check local ip and fetch manager ip list;
-        localIp = fetchLocalIp();
+        localIp = conf.get(AGENT_LOCAL_IP);
         uuid = fetchLocalUuid();
         submitWorker(configFetchThread());
     }
diff --git 
a/inlong-agent/agent-installer/src/main/java/org/apache/inlong/agent/installer/ModuleManager.java
 
b/inlong-agent/agent-installer/src/main/java/org/apache/inlong/agent/installer/ModuleManager.java
index 590644d6c3..031057bb48 100755
--- 
a/inlong-agent/agent-installer/src/main/java/org/apache/inlong/agent/installer/ModuleManager.java
+++ 
b/inlong-agent/agent-installer/src/main/java/org/apache/inlong/agent/installer/ModuleManager.java
@@ -59,6 +59,9 @@ import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.LinkedBlockingQueue;
 import java.util.stream.Collectors;
 
+import static 
org.apache.inlong.agent.constant.FetcherConstants.AGENT_MANAGER_ADDR;
+import static 
org.apache.inlong.agent.constant.FetcherConstants.AGENT_MANAGER_AUTH_SECRET_ID;
+import static 
org.apache.inlong.agent.constant.FetcherConstants.AGENT_MANAGER_AUTH_SECRET_KEY;
 import static 
org.apache.inlong.agent.constant.FetcherConstants.AGENT_MANAGER_REQUEST_TIMEOUT;
 import static 
org.apache.inlong.agent.constant.FetcherConstants.AGENT_MANAGER_VIP_HTTP_PREFIX_PATH;
 import static 
org.apache.inlong.agent.constant.FetcherConstants.DEFAULT_AGENT_MANAGER_REQUEST_TIMEOUT;
@@ -70,9 +73,6 @@ import static 
org.apache.inlong.agent.constant.FetcherConstants.DEFAULT_AGENT_MA
  */
 public class ModuleManager extends AbstractDaemon {
 
-    public static final String MANAGER_ADDR = "manager.addr";
-    public static final String MANAGER_AUTH_SECRET_ID = 
"manager.auth.secretId";
-    public static final String MANAGER_AUTH_SECRET_KEY = 
"manager.auth.secretKey";
     public static final int CONFIG_QUEUE_CAPACITY = 1;
     public static final int CORE_THREAD_SLEEP_TIME = 10000;
     public static final int DOWNLOAD_PACKAGE_READ_BUFF_SIZE = 1024 * 1024;
@@ -97,18 +97,18 @@ public class ModuleManager extends AbstractDaemon {
     }
 
     public HttpManager getHttpManager(InstallerConfiguration conf) {
-        String managerAddr = conf.get(MANAGER_ADDR);
+        String managerAddr = conf.get(AGENT_MANAGER_ADDR);
         String managerHttpPrefixPath = 
conf.get(AGENT_MANAGER_VIP_HTTP_PREFIX_PATH,
                 DEFAULT_AGENT_MANAGER_VIP_HTTP_PREFIX_PATH);
         int timeout = conf.getInt(AGENT_MANAGER_REQUEST_TIMEOUT,
                 DEFAULT_AGENT_MANAGER_REQUEST_TIMEOUT);
-        String secretId = conf.get(MANAGER_AUTH_SECRET_ID);
-        String secretKey = conf.get(MANAGER_AUTH_SECRET_KEY);
+        String secretId = conf.get(AGENT_MANAGER_AUTH_SECRET_ID);
+        String secretKey = conf.get(AGENT_MANAGER_AUTH_SECRET_KEY);
         return new HttpManager(managerAddr, managerHttpPrefixPath, timeout, 
secretId, secretKey);
     }
 
     private boolean requiredKeys(InstallerConfiguration conf) {
-        return conf.hasKey(MANAGER_ADDR);
+        return conf.hasKey(AGENT_MANAGER_ADDR);
     }
 
     public void submitConfig(ConfigResult config) {
@@ -318,12 +318,12 @@ public class ModuleManager extends AbstractDaemon {
     private void updateModule(ModuleConfig localModule, ModuleConfig 
managerModule) {
         LOGGER.info("update module {} start", localModule.getId());
         if 
(localModule.getPackageConfig().getMd5().equals(managerModule.getPackageConfig().getMd5()))
 {
-            LOGGER.info("package md5 changed, will reinstall", 
localModule.getId());
+            LOGGER.info("module {} package md5 no change, will restart", 
localModule.getId());
+            restartModule(localModule, managerModule);
+        } else {
+            LOGGER.info("module {} package md5 changed, will reinstall", 
localModule.getId());
             deleteModule(localModule);
             addModule(managerModule);
-        } else {
-            LOGGER.info("package md5 no chang, will restart", 
localModule.getId());
-            restartModule(localModule, managerModule);
         }
         LOGGER.info("update module {} end", localModule.getId());
     }
diff --git 
a/inlong-agent/agent-installer/src/test/java/installer/BaseTestsHelper.java 
b/inlong-agent/agent-installer/src/test/java/installer/BaseTestsHelper.java
new file mode 100755
index 0000000000..1b9d02c8c9
--- /dev/null
+++ b/inlong-agent/agent-installer/src/test/java/installer/BaseTestsHelper.java
@@ -0,0 +1,67 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package installer;
+
+import org.apache.inlong.agent.constant.AgentConstants;
+import org.apache.inlong.agent.constant.FetcherConstants;
+import org.apache.inlong.agent.installer.conf.InstallerConfiguration;
+
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
+import org.apache.commons.io.FileUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.nio.file.Path;
+import java.nio.file.Paths;
+
+/**
+ * common environment setting up for test cases.
+ */
+public class BaseTestsHelper {
+
+    private static final Logger LOGGER = 
LoggerFactory.getLogger(BaseTestsHelper.class);
+    private static final Gson GSON = new 
GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss").create();
+    private final String className;
+    private Path testRootDir;
+
+    public BaseTestsHelper(String className) {
+        this.className = className;
+    }
+
+    public BaseTestsHelper setupAgentHome() {
+        testRootDir = Paths
+                .get("/tmp", BaseTestsHelper.class.getSimpleName(), className);
+        teardownAgentHome();
+        boolean result = testRootDir.toFile().mkdirs();
+        LOGGER.info("try to create {}, result is {}", testRootDir, result);
+        
InstallerConfiguration.getInstallerConf().set(AgentConstants.AGENT_HOME, 
testRootDir.toString());
+        
InstallerConfiguration.getInstallerConf().set(FetcherConstants.AGENT_MANAGER_ADDR,
 "");
+        return this;
+    }
+
+    public void teardownAgentHome() {
+        if (testRootDir != null) {
+            try {
+                FileUtils.deleteDirectory(testRootDir.toFile());
+            } catch (Exception ignored) {
+                LOGGER.warn("deleteDirectory error ", ignored);
+            }
+        }
+    }
+}
diff --git 
a/inlong-agent/agent-installer/src/test/java/installer/ModuleActionTypeEnum.java
 
b/inlong-agent/agent-installer/src/test/java/installer/ModuleActionTypeEnum.java
new file mode 100644
index 0000000000..d54979a6fc
--- /dev/null
+++ 
b/inlong-agent/agent-installer/src/test/java/installer/ModuleActionTypeEnum.java
@@ -0,0 +1,57 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package installer;
+
+/**
+ * Enum of module action.
+ */
+public enum ModuleActionTypeEnum {
+
+    DOWNLOAD(0),
+    INSTALL(1),
+    UNINSTALL(2),
+    START(3),
+    STOP(4);
+
+    private final int type;
+
+    ModuleActionTypeEnum(int state) {
+        this.type = state;
+    }
+
+    public static ModuleActionTypeEnum getTaskState(int state) {
+        switch (state) {
+            case 0:
+                return DOWNLOAD;
+            case 1:
+                return INSTALL;
+            case 2:
+                return UNINSTALL;
+            case 3:
+                return START;
+            case 4:
+                return STOP;
+            default:
+                throw new RuntimeException("Unsupported module action " + 
state);
+        }
+    }
+
+    public int getType() {
+        return type;
+    }
+}
diff --git 
a/inlong-agent/agent-installer/src/test/java/installer/TestModuleManager.java 
b/inlong-agent/agent-installer/src/test/java/installer/TestModuleManager.java
new file mode 100755
index 0000000000..719727852b
--- /dev/null
+++ 
b/inlong-agent/agent-installer/src/test/java/installer/TestModuleManager.java
@@ -0,0 +1,208 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package installer;
+
+import org.apache.inlong.agent.installer.ModuleManager;
+import org.apache.inlong.common.pojo.agent.installer.ConfigResult;
+import org.apache.inlong.common.pojo.agent.installer.ModuleConfig;
+import org.apache.inlong.common.pojo.agent.installer.ModuleStateEnum;
+import org.apache.inlong.common.pojo.agent.installer.PackageConfig;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.junit.AfterClass;
+import org.junit.Assert;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mockito;
+import org.powermock.api.mockito.PowerMockito;
+import org.powermock.core.classloader.annotations.PowerMockIgnore;
+import org.powermock.core.classloader.annotations.PrepareForTest;
+import org.powermock.modules.junit4.PowerMockRunner;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+import java.util.concurrent.TimeUnit;
+
+import static org.awaitility.Awaitility.await;
+
+@RunWith(PowerMockRunner.class)
+@PrepareForTest(ModuleManager.class)
+@PowerMockIgnore({"javax.management.*"})
+public class TestModuleManager {
+
+    private static final Logger LOGGER = 
LoggerFactory.getLogger(TestModuleManager.class);
+    private static BaseTestsHelper helper;
+    private static final ClassLoader LOADER = 
TestModuleManager.class.getClassLoader();
+    private static ModuleManager manager;
+    private static List<Action> realActionList = new ArrayList<>();
+    private static List<Action> expectedActionList = new ArrayList<>();
+    private static String OLD_MD5 = "95648c83b45971dce503d5d844496cfc";
+    private static String NEW_MD5 = "e573f399da60ddeff09904bb95bdc307";
+
+    @Data
+    @Builder
+    @AllArgsConstructor
+    @NoArgsConstructor
+    private static class Action {
+
+        public ModuleActionTypeEnum type;
+        public String md5;
+
+        @Override
+        public boolean equals(Object o) {
+            if (this == o) {
+                return true;
+            }
+            if (o == null || getClass() != o.getClass()) {
+                return false;
+            }
+            Action action = (Action) o;
+            return Objects.equals(type, action.type) &&
+                    Objects.equals(md5, action.md5);
+        }
+    }
+
+    @BeforeClass
+    public static void setup() {
+        helper = new 
BaseTestsHelper(TestModuleManager.class.getName()).setupAgentHome();
+        manager = PowerMockito.spy(new ModuleManager());
+    }
+
+    @AfterClass
+    public static void teardown() throws Exception {
+        manager.stop();
+    }
+
+    private void fillExpectedActionList() {
+        expectedActionList.add(new Action(ModuleActionTypeEnum.STOP, OLD_MD5));
+        expectedActionList.add(new Action(ModuleActionTypeEnum.UNINSTALL, 
OLD_MD5));
+        expectedActionList.add(new Action(ModuleActionTypeEnum.DOWNLOAD, 
NEW_MD5));
+        expectedActionList.add(new Action(ModuleActionTypeEnum.INSTALL, 
NEW_MD5));
+        expectedActionList.add(new Action(ModuleActionTypeEnum.START, 
NEW_MD5));
+    }
+
+    private void mockFunctions() {
+        try {
+            PowerMockito.doAnswer(invocation -> {
+                ModuleConfig module = invocation.getArgument(0);
+                realActionList.add(new Action(ModuleActionTypeEnum.DOWNLOAD, 
module.getPackageConfig().getMd5()));
+                return true;
+            }).when(manager, "downloadModule", Mockito.any());
+
+            PowerMockito.doAnswer(invocation -> {
+                ModuleConfig module = invocation.getArgument(0);
+                realActionList.add(new Action(ModuleActionTypeEnum.INSTALL, 
module.getPackageConfig().getMd5()));
+                return true;
+            }).when(manager, "installModule", Mockito.any());
+
+            PowerMockito.doAnswer(invocation -> {
+                ModuleConfig module = invocation.getArgument(0);
+                realActionList.add(new Action(ModuleActionTypeEnum.UNINSTALL, 
module.getPackageConfig().getMd5()));
+                return true;
+            }).when(manager, "uninstallModule", Mockito.any());
+
+            PowerMockito.doAnswer(invocation -> {
+                ModuleConfig module = invocation.getArgument(0);
+                realActionList.add(new Action(ModuleActionTypeEnum.START, 
module.getPackageConfig().getMd5()));
+                return true;
+            }).when(manager, "startModule", Mockito.any());
+
+            PowerMockito.doAnswer(invocation -> {
+                ModuleConfig module = invocation.getArgument(0);
+                realActionList.add(new Action(ModuleActionTypeEnum.STOP, 
module.getPackageConfig().getMd5()));
+                return true;
+            }).when(manager, "stopModule", Mockito.any());
+
+            PowerMockito.doAnswer(invocation -> {
+                ModuleConfig module = invocation.getArgument(0);
+                return true;
+            }).when(manager, "isProcessAllStarted", Mockito.any());
+
+            PowerMockito.doReturn(null).when(manager, "getHttpManager", 
Mockito.any());
+        } catch (Exception e) {
+            LOGGER.error("mock downloadModule error", e);
+            Assert.fail();
+        }
+    }
+
+    @Test
+    public void testModuleManager() {
+        fillExpectedActionList();
+        mockFunctions();
+        String confPath = LOADER.getResource("conf/").getPath();
+        manager.restoreFromLocalFile(confPath);
+        Assert.assertEquals(manager.getModule(1).getPackageConfig().getMd5(), 
OLD_MD5);
+        manager.submitConfig(getConfig());
+        try {
+            manager.start();
+        } catch (Exception e) {
+            LOGGER.error("start module manager error", e);
+            Assert.fail("start module manager error");
+        }
+        await().atMost(3, TimeUnit.SECONDS).until(() -> manager.getModule(1) 
!= null);
+        await().atMost(10, TimeUnit.SECONDS).until(() -> realActionList.size() 
== expectedActionList.size());
+        for (int i = 0; i < expectedActionList.size(); i++) {
+            LOGGER.info("{} {}", realActionList.get(i), 
expectedActionList.get(i));
+            Assert.assertEquals(Integer.toString(i), realActionList.get(i), 
expectedActionList.get(i));
+        }
+    }
+
+    private ConfigResult getConfig() {
+        List<ModuleConfig> configs = new ArrayList<>();
+        configs.add(getModuleConfig(1, "inlong-agent", 
"inlong-agent-md5-185454", "1.0", 1,
+                "cd ~/inlong-agent/bin;sh agent.sh start", "cd 
~/inlong-agent/bin;sh agent.sh stop",
+                "ps aux | grep core.AgentMain | grep java | grep -v grep | awk 
'{print $2}'",
+                "cd ~/inlong-agent/bin;sh agent.sh stop;rm -rf 
~/inlong-agent/;mkdir ~/inlong-agent;cd /tmp;tar -xzvf 
agent-release-1.12.0-SNAPSHOT-bin.tar.gz -C ~/inlong-agent;cd 
~/inlong-agent/bin;sh agent.sh start",
+                "echo empty uninstall cmd", 
"agent-release-1.12.0-SNAPSHOT-bin.tar.gz",
+                
"http://11.151.252.111:8083/inlong/manager/openapi/agent/download/agent-release-1.12.0-SNAPSHOT-bin.tar.gz";,
+                NEW_MD5));
+        return 
ConfigResult.builder().moduleList(configs).moduleNum(1).md5("config-result-md5-193603").build();
+    }
+
+    private ModuleConfig getModuleConfig(int id, String name, String md5, 
String version, Integer procNum,
+            String startCmd, String stopCmd, String checkCmd, String 
installCmd, String uninstallCmd, String fileName,
+            String downloadUrl,
+            String packageMd5) {
+        ModuleConfig moduleConfig = new ModuleConfig();
+        moduleConfig.setId(id);
+        moduleConfig.setName(name);
+        moduleConfig.setVersion(version);
+        moduleConfig.setMd5(md5);
+        moduleConfig.setProcessesNum(procNum);
+        moduleConfig.setStartCommand(startCmd);
+        moduleConfig.setStopCommand(stopCmd);
+        moduleConfig.setCheckCommand(checkCmd);
+        moduleConfig.setInstallCommand(installCmd);
+        moduleConfig.setUninstallCommand(uninstallCmd);
+        PackageConfig packageConfig = new PackageConfig();
+        packageConfig.setFileName(fileName);
+        packageConfig.setDownloadUrl(downloadUrl);
+        packageConfig.setStoragePath("/tmp");
+        packageConfig.setMd5(packageMd5);
+        moduleConfig.setPackageConfig(packageConfig);
+        moduleConfig.setState(ModuleStateEnum.NEW);
+        return moduleConfig;
+    }
+}
diff --git a/inlong-agent/agent-installer/src/test/resources/conf/modules.json 
b/inlong-agent/agent-installer/src/test/resources/conf/modules.json
new file mode 100644
index 0000000000..1b365c587c
--- /dev/null
+++ b/inlong-agent/agent-installer/src/test/resources/conf/modules.json
@@ -0,0 +1 @@
+{"md5":"b38c63451ff966a32994a867ec79d259","moduleNum":1,"moduleList":[{"id":1,"name":"inlong-agent","md5":"55175a3b2cb143f31ad3d79e081e794c","version":"1.0","processesNum":1,"startCommand":"cd
 ~/inlong-agent/bin;sh agent.sh start","stopCommand":"cd ~/inlong-agent/bin;sh 
agent.sh stop","checkCommand":"ps aux | grep core.AgentMain | grep java | grep 
-v grep | awk \u0027{print $2}\u0027","installCommand":"cd 
~/inlong-agent/bin;sh agent.sh stop;rm -rf ~/inlong-agent/;mkdir 
~/inlong-agent;cd  [...]
\ No newline at end of file
diff --git a/inlong-agent/agent-installer/src/test/resources/log4j2.xml 
b/inlong-agent/agent-installer/src/test/resources/log4j2.xml
new file mode 100644
index 0000000000..8b051e8620
--- /dev/null
+++ b/inlong-agent/agent-installer/src/test/resources/log4j2.xml
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+    Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements. See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership. The ASF licenses this file
+    to you under the Apache License, Version 2.0 (the
+    "License"); you may not use this file except in compliance
+    with the License. You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing,
+    software distributed under the License is distributed on an
+    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+    KIND, either express or implied.  See the License for the
+    specific language governing permissions and limitations
+    under the License.
+-->
+<configuration status="WARN" monitorInterval="30">
+    <Properties>
+        <property name="basePath">logs/core</property>
+        <property name="log_pattern">%d{yyyy-MM-dd HH:mm:ss.SSS} -%5p ${PID:-} 
[%15.15t] %-30.30C{1.}:%L %m%n</property>
+        <property name="output_log_level">DEBUG</property>
+        <property name="debug_fileName">${basePath}/ut-debug.log</property>
+        <property name="console_print_level">DEBUG</property>
+    </Properties>
+
+    <appenders>
+        <Console name="Console" target="SYSTEM_OUT">
+            <ThresholdFilter level="${console_print_level}" onMatch="ACCEPT" 
onMismatch="DENY"/>
+            <PatternLayout pattern="${log_pattern}"/>
+            <follow>true</follow>
+        </Console>
+        <File name="File" fileName="${debug_fileName}">
+            <PatternLayout pattern="${log_pattern}"/>
+        </File>
+    </appenders>
+
+    <loggers>
+        <root level="${output_log_level}">
+            <appender-ref ref="Console"/>
+        </root>
+    </loggers>
+</configuration>
\ No newline at end of file

Reply via email to