assertInstanceOf('React\Dns\Config\HostsFile', $hosts); } public function testDefaultShouldHaveLocalhostMapped() { if (DIRECTORY_SEPARATOR === '\\') { $this->markTestSkipped('Not supported on Windows'); } $hosts = HostsFile::loadFromPathBlocking(); $this->assertContains('127.0.0.1', $hosts->getIpsForHost('localhost')); } /** * @expectedException RuntimeException */ public function testLoadThrowsForInvalidPath() { HostsFile::loadFromPathBlocking('does/not/exist'); } public function testContainsSingleLocalhostEntry() { $hosts = new HostsFile('127.0.0.1 localhost'); $this->assertEquals(array('127.0.0.1'), $hosts->getIpsForHost('localhost')); $this->assertEquals(array(), $hosts->getIpsForHost('example.com')); } public function testNonIpReturnsNothingForInvalidHosts() { $hosts = new HostsFile('a b'); $this->assertEquals(array(), $hosts->getIpsForHost('a')); $this->assertEquals(array(), $hosts->getIpsForHost('b')); } public function testIgnoresIpv6ZoneId() { $hosts = new HostsFile('fe80::1%lo0 localhost'); $this->assertEquals(array('fe80::1'), $hosts->getIpsForHost('localhost')); } public function testSkipsComments() { $hosts = new HostsFile('# start' . PHP_EOL .'#127.0.0.1 localhost' . PHP_EOL . '127.0.0.2 localhost # example.com'); $this->assertEquals(array('127.0.0.2'), $hosts->getIpsForHost('localhost')); $this->assertEquals(array(), $hosts->getIpsForHost('example.com')); } public function testContainsSingleLocalhostEntryWithCaseIgnored() { $hosts = new HostsFile('127.0.0.1 LocalHost'); $this->assertEquals(array('127.0.0.1'), $hosts->getIpsForHost('LOCALHOST')); } public function testEmptyFileContainsNothing() { $hosts = new HostsFile(''); $this->assertEquals(array(), $hosts->getIpsForHost('example.com')); } public function testSingleEntryWithMultipleNames() { $hosts = new HostsFile('127.0.0.1 localhost example.com'); $this->assertEquals(array('127.0.0.1'), $hosts->getIpsForHost('example.com')); $this->assertEquals(array('127.0.0.1'), $hosts->getIpsForHost('localhost')); } public function testMergesEntriesOverMultipleLines() { $hosts = new HostsFile("127.0.0.1 localhost\n127.0.0.2 localhost\n127.0.0.3 a localhost b\n127.0.0.4 a localhost"); $this->assertEquals(array('127.0.0.1', '127.0.0.2', '127.0.0.3', '127.0.0.4'), $hosts->getIpsForHost('localhost')); } public function testMergesIpv4AndIpv6EntriesOverMultipleLines() { $hosts = new HostsFile("127.0.0.1 localhost\n::1 localhost"); $this->assertEquals(array('127.0.0.1', '::1'), $hosts->getIpsForHost('localhost')); } public function testReverseLookup() { $hosts = new HostsFile('127.0.0.1 localhost'); $this->assertEquals(array('localhost'), $hosts->getHostsForIp('127.0.0.1')); $this->assertEquals(array(), $hosts->getHostsForIp('192.168.1.1')); } public function testReverseSkipsComments() { $hosts = new HostsFile("# start\n#127.0.0.1 localhosted\n127.0.0.2\tlocalhost\t# example.com\n\t127.0.0.3\t\texample.org\t\t"); $this->assertEquals(array(), $hosts->getHostsForIp('127.0.0.1')); $this->assertEquals(array('localhost'), $hosts->getHostsForIp('127.0.0.2')); $this->assertEquals(array('example.org'), $hosts->getHostsForIp('127.0.0.3')); } public function testReverseNonIpReturnsNothing() { $hosts = new HostsFile('127.0.0.1 localhost'); $this->assertEquals(array(), $hosts->getHostsForIp('localhost')); $this->assertEquals(array(), $hosts->getHostsForIp('127.0.0.1.1')); } public function testReverseNonIpReturnsNothingForInvalidHosts() { $hosts = new HostsFile('a b'); $this->assertEquals(array(), $hosts->getHostsForIp('a')); $this->assertEquals(array(), $hosts->getHostsForIp('b')); } public function testReverseLookupReturnsLowerCaseHost() { $hosts = new HostsFile('127.0.0.1 LocalHost'); $this->assertEquals(array('localhost'), $hosts->getHostsForIp('127.0.0.1')); } public function testReverseLookupChecksNormalizedIpv6() { $hosts = new HostsFile('FE80::00a1 localhost'); $this->assertEquals(array('localhost'), $hosts->getHostsForIp('fe80::A1')); } public function testReverseLookupIgnoresIpv6ZoneId() { $hosts = new HostsFile('fe80::1%lo0 localhost'); $this->assertEquals(array('localhost'), $hosts->getHostsForIp('fe80::1')); } public function testReverseLookupReturnsMultipleHostsOverSingleLine() { $hosts = new HostsFile("::1 ip6-localhost ip6-loopback"); $this->assertEquals(array('ip6-localhost', 'ip6-loopback'), $hosts->getHostsForIp('::1')); } public function testReverseLookupReturnsMultipleHostsOverMultipleLines() { $hosts = new HostsFile("::1 ip6-localhost\n::1 ip6-loopback"); $this->assertEquals(array('ip6-localhost', 'ip6-loopback'), $hosts->getHostsForIp('::1')); } }