package com.alibaba.dcm.tool;
import org.apache.commons.io.FileUtils;
import org.junit.Before;
import org.junit.Test;
import java.io.File;
import java.lang.management.ManagementFactory;
import java.net.InetAddress;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import static org.junit.Assert.*;
/**
* @author Jerry Lee (oldratlee at gmail dot com)
*/
public class DcmToolTest {
File outputFile;
String outputFilePath;
String agentFilePath;
@Before
public void setUp() throws Exception {
outputFile = new File("target/output.log");
FileUtils.deleteQuietly(outputFile);
FileUtils.touch(outputFile);
assertTrue(outputFile.length() == 0);
outputFilePath = outputFile.getCanonicalPath();
System.out.println("Prepared output file: " + outputFilePath);
setAgentFilePath();
assertNotNull(agentFilePath);
System.out.println("Found agent file: " + agentFilePath);
}
public void setAgentFilePath() throws Exception {
// find agent jar file from dcm lib project
File dcmLibProjectDir = new File("../library");
if (!dcmLibProjectDir.exists()) {
dcmLibProjectDir = new File("library");
}
if (dcmLibProjectDir.exists()) {
File dcmLibProjectTargetDir = new File(dcmLibProjectDir, "target");
if (dcmLibProjectTargetDir.exists()) {
System.out.println("Found target dir: " + dcmLibProjectTargetDir);
}
final Iterator<File> fileIterator = FileUtils.iterateFiles(dcmLibProjectTargetDir, new String[]{"jar"}, false);
while (fileIterator.hasNext()) {
final File next = fileIterator.next();
final String fileName = next.getName();
final String agentJarPath = next.getCanonicalPath();
if (fileName.startsWith("dns-cache-manipulator")) {
final String replaced = fileName.replace("dns-cache-manipulator-", "").replace("-SNAPSHOT", "");
if (!replaced.contains("-"))
agentFilePath = agentJarPath;
}
}
}
// find agent jar file from maven local repository
if (agentFilePath == null) {
String home = System.getProperty("user.home");
String m2DcmLibDependencyDir = home + "/.m2/repository/com/alibaba/dns-cache-manipulator";
List<String> list = new ArrayList<String>();
final Iterator<File> fileIterator = FileUtils.iterateFiles(new File(m2DcmLibDependencyDir), new String[]{"jar"}, true);
while (fileIterator.hasNext()) {
final File next = fileIterator.next();
final String fileName = next.getName();
final String agentJarPath = next.getCanonicalPath();
if (fileName.startsWith("dns-cache-manipulator")) {
final String replaced = fileName.replace("dns-cache-manipulator-", "").replace("-SNAPSHOT", "");
if (!replaced.contains("-")) {
list.add(agentJarPath);
}
}
}
assertTrue(list.size() > 0);
Collections.sort(list);
System.out.println("List Agent jar from .m2: " + list);
agentFilePath = list.get(list.size() - 1);
}
}
@Test
public void test_main_getPolicy() throws Exception {
System.setProperty(DcmTool.DCM_TOOLS_TMP_FILE, outputFilePath);
System.setProperty(DcmTool.DCM_TOOLS_AGENT_JAR, agentFilePath);
DcmTool.main(new String[]{"-p", pid(), "getPolicy"});
}
@Test
public void test_main_set() throws Exception {
System.setProperty(DcmTool.DCM_TOOLS_TMP_FILE, outputFilePath);
System.setProperty(DcmTool.DCM_TOOLS_AGENT_JAR, agentFilePath);
DcmTool.main(new String[]{"-p", pid(), "set", "baidu.com", "1.1.2.2"});
assertEquals("1.1.2.2", InetAddress.getByName("baidu.com").getHostAddress());
}
static String pid() {
final String name = ManagementFactory.getRuntimeMXBean().getName();
final int idx = name.indexOf("@");
return name.substring(0, idx);
}
}