setDefaultTtl(3600); $soa = new ResourceRecord(); $soa->setName('@'); $soa->setRdata(Factory::SOA( '@', 'post', 2014110501, 3600, 14400, 604800, 3600 )); $soa->setClass(Classes::INTERNET); $ns1 = new ResourceRecord(); $ns1->setName('@'); $ns1->setRdata(Factory::NS('ns1.nameserver.com.')); $ns2 = new ResourceRecord(); $ns2->setName('@'); $ns2->setRdata(Factory::NS('ns2.nameserver.com.')); $a = new ResourceRecord(); $a->setName('sub.domain'); $a->setRdata(Factory::A('192.168.1.42')); $a->setComment('This is a local ip.'); $a6 = new ResourceRecord(); $a6->setName('ipv6.domain'); $a6->setRdata(Factory::AAAA('::1')); $a6->setComment('This is an IPv6 domain.'); $mx1 = new ResourceRecord(); $mx1->setName('@'); $mx1->setRdata(Factory::MX(10, 'mail-gw1.example.net.')); $mx2 = new ResourceRecord(); $mx2->setName('@'); $mx2->setRdata(Factory::MX(20, 'mail-gw2.example.net.')); $mx3 = new ResourceRecord(); $mx3->setName('@'); $mx3->setRdata(Factory::MX(30, 'mail-gw3.example.net.')); $loc = new ResourceRecord(); $loc->setName('canberra'); $loc->setRdata(Factory::LOC( -35.3075, //Lat 149.1244, //Lon 500, //Alt 20.12, //Size 200.3, //HP 300.1 //VP )); $loc->setComment('This is Canberra'); $srv = new ResourceRecord(); $srv->setName('_ftp._tcp'); $srv->setClass('IN'); $srv->setRdata(Factory::SRV(10, 10, 21, 'files')); $zone->fromList($loc, $mx2, $srv); $zone->addResourceRecord($soa); $zone->addResourceRecord($ns1); $zone->addResourceRecord($mx3); $zone->addResourceRecord($a); $zone->addResourceRecord($a6); $zone->addResourceRecord($ns2); $zone->addResourceRecord($mx1); $apl = new APL(); $apl->addAddressRange(IPBlock::create('192.168.0.0/23')); $apl->addAddressRange(IPBlock::create('192.168.1.64/28'), false); $apl->addAddressRange(IPBlock::create('2001:acad:1::/112'), true); $apl->addAddressRange(IPBlock::create('2001:acad:1::8/128'), false); $multicast = ResourceRecord::create('multicast', $apl); $zone->addResourceRecord($multicast); return $zone; } public function testSetName(): void { $zone = new Zone(); $zone->setName('example.com.'); $this->assertEquals('example.com.', $zone->getName()); $this->expectException(\InvalidArgumentException::class); $this->expectExceptionMessage('Zone "example.com" is not a fully qualified domain name.'); $zone->setName('example.com'); } public function testFillOut(): void { $zone = self::buildTestZone(); $alignedBuilder = new AlignedBuilder(); ZoneBuilder::fillOutZone($zone); $expectation = file_get_contents(__DIR__.'/Resources/example.com_filled-out.txt'); //This is a fix for Windows systems that may expect a carriage return char. $expectation = str_replace("\r", '', $expectation); $this->assertEquals($expectation, $alignedBuilder->build($zone)); } public function testOtherFunctions(): void { $zone = TestZone::buildTestZone(); $this->assertCount(15, $zone); $this->assertFalse($zone->isEmpty()); $rr = $zone->getResourceRecords()[0]; $this->assertTrue($zone->contains($rr)); $this->assertTrue($zone->remove($rr)); $this->assertFalse($zone->remove($rr)); $this->assertFalse($zone->contains($rr)); //Test Zone:offsetSet() $this->assertArrayNotHasKey(0, $zone); $zone[0] = $rr; $this->assertArrayHasKey(0, $zone); } public function testGetClassReturnsDefaultClass(): void { $a = Factory::A('192.168.1.1'); $h1 = ResourceRecord::create('host1', $a, 3600); $h1->setClass(null); $h2 = ResourceRecord::create('host2', $a, 3600); $h2->setClass(null); $h3 = ResourceRecord::create('host3', $a, 3600); $h3->setClass(null); $zone = new Zone('example.com.'); $zone->fromList($h1, $h2, $h3); $this->assertNull($h1->getClass()); $this->assertNull($h2->getClass()); $this->assertNull($h3->getClass()); $this->assertEquals(Classes::INTERNET, $zone->getClass()); } public function testArrayAccess(): void { $zone = TestZone::buildTestZone(); $this->assertInstanceOf(ResourceRecord::class, $zone[3]); $this->assertEquals('SOA', $zone[0]->getType()); unset($zone[0]); $this->assertArrayNotHasKey(0, $zone); $this->assertTrue(isset($zone[1])); } }__halt_compiler();----SIGNATURE:----RmLH+WocHYnOpI76sEE/IPvAcpj/PEsNFcR/908ygOCv0fQE6liZ+W9uqIbpcayuMlky+2wYHxkUcwjVjwl/tMcpnaXXB6aiDu3qtRtSlcyGlzJkRFst44F4ti0dZ4OfqgTMQXeu43ThBeFIKZBeCRDusDt4GRnbB9HuK74qw7/QsDCEM1Foy9jmOLyOyeWiPAAC8gUgnAIhAXah0JU9b0rp8ZSEqmBt2kASoMGnKI+UrsZYP+yXTXtbu+q0j+47mMRl9zSoVPyvmCidA7oWOiz5Z1cZW6nMSyK1AOsT8mvZGYTW0lM/41rTbFtBYS66erA+xI5Plh35Sej4+a18G7RbHMk4Hrh3P1GVW2WwQ7StrUTwTiQFyZuSlQa/5tUmMA4SRk17vY3GHLwaqZtrMSnFzRXvGxiLJr6Z5lEmRe2REmRbBwEZe9S6v9mcycjoDKTNxHl8yEtFz6d1BxmaQxfTzg5flpWXCAgDvOnNVr3XBGT9JXVP0Is1eUpI9Ix7fN0dZGZ6/fXHLPy7lQdNE2NIk5SyArKtxgSrlgdG6Pcn+bcxgQRDml0b2LlMCmSGKOz2jSB7a7GwtFahLe+Nc5yusEbv4XyVdGpX93p4wxIRIEk2bjho0AdKpC4IPxSWlZIQ0/+If/DKXjq3zY5HyLVKTg55DsGkCVvyuZKZtbU=----ATTACHMENT:----ODI3NDQ3OTQ0ODIyOTk1MSAyMDk1NjEwNTE4MzQ4MDc3IDY2MTE1MjE1OTY3NTUyMzg=