package com.theotherian.dns; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.reset; import static org.mockito.Mockito.when; import java.io.FileInputStream; import java.util.Arrays; import org.junit.BeforeClass; import org.junit.Test; import com.theotherian.dns.HostsFileResolver; public class HostsFileResolverTest extends BaseTest { private static String emptyHosts; private static String oneHost; private static String multipleHosts; private static String malformedHost; private static String commentAfterHost; @BeforeClass public static void setUpBefore() throws Exception { emptyHosts = SampleFileLoader.loadAsUrl("empty-hosts"); oneHost = SampleFileLoader.loadAsUrl("sample-host"); multipleHosts = SampleFileLoader.loadAsUrl("sample-hosts"); malformedHost = SampleFileLoader.loadAsUrl("malformed-host"); commentAfterHost = SampleFileLoader.loadAsUrl("comment-after-host"); } @Test public void isIpv6() throws Exception { assertTrue(HostsFileResolver.isIpv6("aa::aa")); assertFalse(HostsFileResolver.isIpv6("aa")); } @Test public void parseLine() throws Exception { FileInputStream fis = mock(FileInputStream.class); // eof when(fis.read()).thenReturn(-1); assertNull(HostsFileResolver.parseLine(fis)); reset(fis); // empty file fis = new FileInputStream(emptyHosts); assertNull(HostsFileResolver.parseLine(fis)); fis.close(); // one host fis = new FileInputStream(oneHost); assertEquals(Arrays.asList("10.10.10.10", "www.tendotten.com"), HostsFileResolver.parseLine(fis)); fis.close(); // multiple hosts fis = new FileInputStream(multipleHosts); assertEquals(Arrays.asList("10.10.10.10", "www.tendotten.com"), HostsFileResolver.parseLine(fis)); fis.close(); // malformed host fis = new FileInputStream(malformedHost); assertNull(HostsFileResolver.parseLine(fis)); fis.close(); // comment after host fis = new FileInputStream(commentAfterHost); assertEquals(Arrays.asList("10.10.10.10", "www.tendotten.com"), HostsFileResolver.parseLine(fis)); fis.close(); } @Test public void isEol() throws Exception { assertTrue(HostsFileResolver.isEOL(-1)); assertTrue(HostsFileResolver.isEOL('\n')); assertTrue(HostsFileResolver.isEOL('\r')); assertFalse(HostsFileResolver.isEOL('a')); } @Test public void readLine() throws Exception { FileInputStream fis = mock(FileInputStream.class); // eof when(fis.read()).thenReturn(-1); assertNull(HostsFileResolver.readLine(fis)); reset(fis); //eol when(fis.read()).thenReturn((int) '\n'); assertTrue(HostsFileResolver.readLine(fis).isEmpty()); reset(fis); // valid when(fis.read()).thenReturn((int) 'a', (int) 'a', (int) '\n'); assertEquals("aa", HostsFileResolver.readLine(fis)); reset(fis); } @Test public void isCommentDelimeter() throws Exception { assertTrue(HostsFileResolver.isCommentDelimiter("#")); assertTrue(HostsFileResolver.isCommentDelimiter(";")); assertFalse(HostsFileResolver.isCommentDelimiter("a")); } }