package com.alibaba.dcm.agent;
import com.alibaba.dcm.DnsCacheManipulator;
import org.apache.commons.io.FileUtils;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import java.io.File;
import java.util.List;
import static org.hamcrest.CoreMatchers.containsString;
import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
/**
* @author Jerry Lee (oldratlee at gmail dot com)
*/
public class DcmAgentTest {
private File outputFile;
private String outputFilePath;
@Before
public void setUp() throws Exception {
outputFile = new File("target/output.log");
FileUtils.deleteQuietly(outputFile);
FileUtils.touch(outputFile);
assertTrue(outputFile.length() == 0);
System.out.println("Prepared output file: " + outputFile.getAbsolutePath());
outputFilePath = outputFile.getAbsolutePath();
DnsCacheManipulator.clearDnsCache();
}
@After
public void tearDown() throws Exception {
System.out.println("============================================");
System.out.println("Agent Output File Content");
System.out.println("============================================");
final String text = FileUtils.readFileToString(outputFile);
System.out.println(text);
}
@Test
public void test_agentmain_empty() throws Exception {
DcmAgent.agentmain(" ");
}
@Test
public void test_agentmain_file() throws Exception {
DcmAgent.agentmain("file " + outputFilePath);
final List<String> content = FileUtils.readLines(outputFile);
assertThat(content.get(0), containsString("No action in agent argument, do nothing!"));
}
@Test
public void test_agentmain_set() throws Exception {
DcmAgent.agentmain("set baidu.com 1.2.3.4");
assertEquals("1.2.3.4", DnsCacheManipulator.getDnsCache("baidu.com").getIp());
}
@Test
public void test_agentmain_set_toFile() throws Exception {
DcmAgent.agentmain("set baidu.com 1.2.3.4 file " + outputFilePath);
assertEquals("1.2.3.4", DnsCacheManipulator.getDnsCache("baidu.com").getIp());
final List<String> content = FileUtils.readLines(outputFile);
assertEquals(DcmAgent.DCM_AGENT_SUCCESS_MARK_LINE, content.get(content.size() - 1));
}
@Test
public void test_agentmain_set_MultiIp() throws Exception {
DcmAgent.agentmain("set baidu.com 1.1.1.1 2.2.2.2");
assertArrayEquals(new String[]{"1.1.1.1", "2.2.2.2"}, DnsCacheManipulator.getDnsCache("baidu.com").getIps());
}
@Test
public void test_agentmain_get() throws Exception {
DnsCacheManipulator.setDnsCache("baidu.com", "3.3.3.3");
DcmAgent.agentmain("get baidu.com");
}
@Test
public void test_agentmain_rm() throws Exception {
DnsCacheManipulator.setDnsCache("baidu.com", "3.3.3.3");
DcmAgent.agentmain("rm baidu.com");
assertNull(DnsCacheManipulator.getDnsCache("baidu.com"));
}
@Test
public void test_agentmain_rm_withFile() throws Exception {
DnsCacheManipulator.setDnsCache("baidu.com", "3.3.3.3");
assertNotNull(DnsCacheManipulator.getDnsCache("baidu.com"));
DcmAgent.agentmain("rm baidu.com file " + outputFilePath);
assertNull(DnsCacheManipulator.getDnsCache("baidu.com"));
}
@Test
public void test_agentmain_list() throws Exception {
DcmAgent.agentmain(" list ");
}
@Test
public void test_agentmain_clear() throws Exception {
DnsCacheManipulator.setDnsCache("baidu.com", "3.3.3.3");
DcmAgent.agentmain(" clear ");
assertEquals(0, DnsCacheManipulator.listDnsCache().size());
}
@Test
public void test_agentmain_setPolicy() throws Exception {
DcmAgent.agentmain(" setPolicy 345 ");
assertEquals(345, DnsCacheManipulator.getDnsCachePolicy());
}
@Test
public void test_agentmain_getPolicy() throws Exception {
DnsCacheManipulator.setDnsCachePolicy(456);
DcmAgent.agentmain(" getPolicy ");
assertEquals(456, DnsCacheManipulator.getDnsCachePolicy());
}
@Test
public void test_agentmain_setNegativePolicy() throws Exception {
DcmAgent.agentmain(" setNegativePolicy 42 ");
assertEquals(42, DnsCacheManipulator.getDnsNegativeCachePolicy());
}
@Test
public void test_agentmain_getNegativePolicy() throws Exception {
DnsCacheManipulator.setDnsNegativeCachePolicy(45);
DcmAgent.agentmain(" getNegativePolicy");
assertEquals(45, DnsCacheManipulator.getDnsNegativeCachePolicy());
}
@Test
public void test_agentmain_skipNoActionArguments() throws Exception {
DcmAgent.agentmain(" arg1 arg2 ");
}
@Test
public void test_agentmain_actionNeedMoreArgument() throws Exception {
DnsCacheManipulator.setDnsNegativeCachePolicy(1110);
DcmAgent.agentmain(" setNegativePolicy file " + outputFilePath);
assertEquals(1110, DnsCacheManipulator.getDnsNegativeCachePolicy());
final List<String> content = FileUtils.readLines(outputFile);
assertThat(content.get(0), containsString("Error to do action setNegativePolicy"));
assertThat(content.get(0), containsString("action setNegativePolicy need more argument!"));
}
@Test
public void test_agentmain_actionTooMoreArgument() throws Exception {
DnsCacheManipulator.setDnsNegativeCachePolicy(1111);
DcmAgent.agentmain(" setNegativePolicy 737 HaHa file " + outputFilePath);
assertEquals(1111, DnsCacheManipulator.getDnsNegativeCachePolicy());
final List<String> content = FileUtils.readLines(outputFile);
assertThat(content.get(0), containsString("Error to do action setNegativePolicy 737 HaHa"));
assertThat(content.get(0), containsString("Too more arguments for Action setNegativePolicy! arguments: [737, HaHa]"));
}
@Test
public void test_agentmain_unknownAction() throws Exception {
DcmAgent.agentmain(" unknownAction arg1 arg2 file " + outputFilePath);
final List<String> content = FileUtils.readLines(outputFile);
assertThat(content.get(0), containsString("No action in agent argument, do nothing!"));
}
}