Example #1
0
 public function test_validate_record()
 {
     echo "\n";
     // Missing content and too long name
     $data = array("name" => "example.toolongtldtoolongtldtoolongtldtoolongtldtoolongtldtoolongtld1", "type" => "A", "content" => "");
     $validator = new RecordValidator($data);
     $this->assertFalse($validator->validates());
     $this->assertCount(2, $validator->getErrors());
     // Missing content only
     $data['name'] = "example.longtld";
     $validator = new RecordValidator($data);
     $this->assertFalse($validator->validates());
     $this->assertCount(1, $validator->getErrors());
     // Missing type
     $data['name'] = "example.com";
     $data['type'] = "";
     $data['content'] = "127.0.0.2";
     $validator = new RecordValidator($data);
     // Invalid type
     $data['type'] = "ZZZZ";
     $data['content'] = "127.0.0.2";
     $validator = new RecordValidator($data);
     $this->assertFalse($validator->validates());
     $this->assertCount(1, $validator->getErrors());
     // Record content too long
     $data['type'] = "TXT";
     $data['content'] = '"' . str_repeat("a", 4096) . '"';
     $validator = new RecordValidator($data);
     $this->assertFalse($validator->validates());
     $this->assertCount(1, $validator->getErrors());
     // Invalid priority for non-MX/SRV record
     $data['content'] = '""';
     $data['priority'] = "a";
     $validator = new RecordValidator($data);
     $this->assertFalse($validator->validates());
     $this->assertCount(1, $validator->getErrors());
     // Valid priority for non-MX/SRV record
     $data['content'] = '""';
     $data['priority'] = 12;
     $validator = new RecordValidator($data);
     $this->assertTrue($validator->validates());
     $this->assertEmpty($validator->getErrors());
     // Invalid AAAA record
     unset($data['priority']);
     $data['type'] = "AAAA";
     $data['content'] = "2001:838:300:417:::";
     $validator = new RecordValidator($data);
     $this->assertFalse($validator->validates());
     $this->assertCount(1, $validator->getErrors());
     // Valid AAAA record
     $data['content'] = "2001:838:300:417::";
     $validator = new RecordValidator($data);
     $this->assertTrue($validator->validates());
     // Invalid NS record
     $data['type'] = "NS";
     $data['content'] = "example.toolongtldtoolongtldtoolongtldtoolongtldtoolongtldtoolongtld1";
     $validator = new RecordValidator($data);
     $this->assertFalse($validator->validates());
     $this->assertCount(1, $validator->getErrors());
     // Invalid PTR record
     $data['type'] = "PTR";
     $validator = new RecordValidator($data);
     $this->assertFalse($validator->validates());
     $this->assertCount(1, $validator->getErrors());
     // NAPTR records
     $data['type'] = "NAPTR";
     $wrong = array('only three parts', 'a 20 "s" "SIP+I2C" "" .', '10 b "s" "SIP+I2C" "" .', '10 20 s "SIP+I2C" "" .', '10 20 "!" "SIP+I2C" "" .', '10 20 "su" "SIP+I2C" "" .', '10 20 "s" SIP+I2C "" .', '10 20 "s" "" "" .', '10 20 "s" "+I2C" "" .', '10 20 "s" "SIP+I2C" A .', '10 20 "s" "SIP+I2C" "iAiAi" .', '10 20 "s" "SIP+I2C" "!A!" .', '10 20 "s" "SIP+I2C" "!A!A!z" .', '10 20 "s" "SIP+I2C" "!A!\\1!z" .', '10 20 "s" "SIP+I2C" "!A!\\1!i" example.com.', '10 20 "s" "SIP+I2C" "!A!\\1!z" example.com.', '10 20 "s" "SIP+I2C" "" ', '10 20 "s" "SIP+I2C" "" x');
     $right = array('10 20 "s" "SIP+I2C" "" .', '10 20 "p" "" "" .', '10 20 "s" "SIP+I2C" "!A!\\3!i" .', '10 20 "u" "SIP+I2C" "" .', '10 20 "u" "SIP+I2C" "" example.com.');
     foreach ($wrong as $w) {
         printf("Testing /%s/\n", $w);
         $data['content'] = $w;
         $validator = new RecordValidator($data);
         $this->assertFalse($validator->validates());
         $this->assertCount(1, $validator->getErrors());
     }
     foreach ($right as $r) {
         printf("Testing /%s/\n", $r);
         $data['content'] = $r;
         $validator = new RecordValidator($data);
         $this->assertTrue($validator->validates());
         $this->assertEmpty($validator->getErrors());
     }
     // Invalid RP record
     $data['type'] = "RP";
     $data['content'] = "1 2 3";
     $validator = new RecordValidator($data);
     $this->assertFalse($validator->validates());
     $this->assertCount(1, $validator->getErrors());
     $data['content'] = "webmaster@example.com example.com";
     $validator = new RecordValidator($data);
     $this->assertFalse($validator->validates());
     $this->assertCount(1, $validator->getErrors());
     $data['content'] = "webmaster.example.com +invalid.example.com";
     $validator = new RecordValidator($data);
     $this->assertFalse($validator->validates());
     $this->assertCount(1, $validator->getErrors());
     // Valid RP record
     $data['content'] = "webmaster.example.com example.com";
     $validator = new RecordValidator($data);
     $this->assertTrue($validator->validates());
     $this->assertEmpty($validator->getErrors());
     // Invalid SOA record
     $data['type'] = "SOA";
     $data['content'] = "1 2";
     $validator = new RecordValidator($data);
     $this->assertFalse($validator->validates());
     $this->assertCount(1, $validator->getErrors());
     $data['content'] = "ns+.example.com hostmaster.example.com 0 86400 3600 86400 86400";
     $validator = new RecordValidator($data);
     $this->assertFalse($validator->validates());
     $this->assertCount(1, $validator->getErrors());
     $data['content'] = "ns.example.com hostmaster+.example.com 0 86400 3600 86400 86400";
     $validator = new RecordValidator($data);
     $this->assertFalse($validator->validates());
     $this->assertCount(1, $validator->getErrors());
     $data['content'] = "ns.example.com hostmaster.example.com a 86400 3600 86400 86400";
     $validator = new RecordValidator($data);
     $this->assertFalse($validator->validates());
     $this->assertCount(1, $validator->getErrors());
     // Valid SOA record
     $data['content'] = "ns.example.com hostmaster.example.com 0 86400 3600 86400 86400";
     $validator = new RecordValidator($data);
     $this->assertTrue($validator->validates());
     $this->assertEmpty($validator->getErrors());
     // Invalid SPF record
     $data['type'] = "SPF";
     $data['content'] = "unquoted string";
     $validator = new RecordValidator($data);
     $this->assertFalse($validator->validates());
     $this->assertCount(1, $validator->getErrors());
     // Invalid TXT record
     $data['type'] = "TXT";
     $validator = new RecordValidator($data);
     $this->assertFalse($validator->validates());
     $this->assertCount(1, $validator->getErrors());
     // Valid TXT/SPF record
     $data['content'] = '"quoted string"';
     $validator = new RecordValidator($data);
     $this->assertTrue($validator->validates());
     $this->assertEmpty($validator->getErrors());
     // Invalid SSHFP record
     $data['type'] = "SSHFP";
     $data['content'] = "1 2 3 4";
     $validator = new RecordValidator($data);
     $this->assertFalse($validator->validates());
     $this->assertCount(1, $validator->getErrors());
     $data['content'] = "1 2 0123456789ABCDEF0123456789ABCDEF01234567";
     $validator = new RecordValidator($data);
     $this->assertFalse($validator->validates());
     $this->assertCount(1, $validator->getErrors());
     $data['content'] = "1 1 0123456789ABCDEF0123456789ABCDEF01234567Z";
     $validator = new RecordValidator($data);
     $this->assertFalse($validator->validates());
     $this->assertCount(1, $validator->getErrors());
     // Valid SSHFP
     $data['content'] = "1 1 0123456789ABCDEF0123456789ABCDEF01234567";
     $validator = new RecordValidator($data);
     $this->assertTrue($validator->validates());
     $this->assertEmpty($validator->getErrors());
     $data['content'] = "3 2 0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF";
     $validator = new RecordValidator($data);
     $this->assertTrue($validator->validates());
     $this->assertEmpty($validator->getErrors());
     // Invalid SRV record
     $data['type'] = "SRV";
     $data['content'] = "1 2 3 4";
     $validator = new RecordValidator($data);
     $this->assertFalse($validator->validates());
     $this->assertCount(1, $validator->getErrors());
     $data['priority'] = 10;
     $validator = new RecordValidator($data);
     $this->assertFalse($validator->validates());
     $this->assertCount(1, $validator->getErrors());
     $data['content'] = "a 443 service.example.com";
     $validator = new RecordValidator($data);
     $this->assertFalse($validator->validates());
     $this->assertCount(1, $validator->getErrors());
     $data['content'] = "100 a service.example.com";
     $validator = new RecordValidator($data);
     $this->assertFalse($validator->validates());
     $this->assertCount(1, $validator->getErrors());
     $data['content'] = "100 443 invalid+.service.example.com";
     $validator = new RecordValidator($data);
     $this->assertFalse($validator->validates());
     $this->assertCount(1, $validator->getErrors());
     // Valid SRV record
     $data['content'] = "100 443 service.example.com";
     $validator = new RecordValidator($data);
     $this->assertTrue($validator->validates());
     $this->assertEmpty($validator->getErrors());
 }