public function test_validate_zone() { // Wrong identifier, type, master and templates. $data = array("identifier" => "\$_example.com", "name" => "example.com", "type" => "master", "master" => "85.158.202.321", "templates" => "test_template++", "query" => "example*"); $validator = new ZoneValidator($data); $this->assertFalse($validator->validates()); $this->assertCount(4, $validator->getErrors()); // Wrong type, and templates unset($data['master']); $data['identifier'] = "example.com"; $data['type'] = "MASTERRRR"; $data['templates'] = array($data['templates']); $validator = new ZoneValidator($data); $this->assertFalse($validator->validates()); $this->assertCount(2, $validator->getErrors()); // Master should not have IP, invalid IP, empty template object $data['templates'][0] = new stdClass(); $data['master'] = "85.158.202.321"; $data['type'] = "MASTER"; $validator = new ZoneValidator($data); $this->assertFalse($validator->validates()); $this->assertCount(2, $validator->getErrors()); // Invalid ip $data['templates'][0]->identifier = "test_template"; $data['type'] = "SLAVE"; $validator = new ZoneValidator($data); $this->assertFalse($validator->validates()); $this->assertCount(1, $validator->getErrors()); // Slave without IP unset($data['master']); $validator = new ZoneValidator($data); $this->assertFalse($validator->validates()); $this->assertCount(1, $validator->getErrors()); // All valid $data['master'] = "85.158.202.123"; $validator = new ZoneValidator($data); $this->assertTrue($validator->validates()); $this->assertEmpty($validator->getErrors()); // Changing SLAVE zone records $data['records'] = array(); $validator = new ZoneValidator($data); $this->assertFalse($validator->validates()); $this->assertCount(1, $validator->getErrors()); // Reset to valid NATIVE zone unset($data['query']); unset($data['templates']); unset($data['master']); $data['type'] = "NATIVE"; $validator = new ZoneValidator($data); $this->assertTrue($validator->validates()); $this->assertEmpty($validator->getErrors()); // Invalid records type $data['records'] = new StdClass(); $validator = new ZoneValidator($data); $this->assertFalse($validator->validates()); $this->assertCount(1, $validator->getErrors()); // Invalid record content $data['records'] = array(array("name" => "example.com", "type" => "A", "content" => "127.0.0.22222")); $validator = new ZoneValidator($data); $this->assertFalse($validator->validates()); $this->assertCount(1, $validator->getErrors()); // Record name label too long $data['records'] = array(array("name" => str_repeat("a", 253) . ".com", "type" => "A", "content" => "127.0.0.2")); $validator = new ZoneValidator($data); $this->assertFalse($validator->validates()); $this->assertCount(1, $validator->getErrors()); // Record name total size too long $data['records'] = array(array("name" => str_repeat(str_repeat("a", 60) . ".", 10) . "com", "type" => "A", "content" => "127.0.0.2")); $validator = new ZoneValidator($data); $this->assertFalse($validator->validates()); $this->assertCount(1, $validator->getErrors()); // All valid $data['records'] = array(array("name" => "example.com", "type" => "A", "content" => "127.0.0.2")); $validator = new ZoneValidator($data); $this->assertTrue($validator->validates()); $this->assertEmpty($validator->getErrors()); }
/** * Validates the properties of a zone. * * To validator Zone records, use the RecordResource. * * ### Request: ### * * ~~~ * { * "name": <string>, * "type": MASTER|SLAVE|NATIVE, * "master": <ipv4 optional> * } * ~~~ * * ### Response: ### * * ~~~ * true * ~~~ * * ### Errors: ### * * * 508 - Invalid request, missing required parameters or input validation failed. * * @access public * @param mixed $request Request parameters * @return Response True if record is valid, error message with parse errors otherwise. */ public function validate($request) { $response = new FormattedResponse($request); $data = $request->parseData(); if (empty($data) || !isset($data->name)) { $response->code = Response::BADREQUEST; $response->error = "Request body was malformed. Ensure that all mandatory properties have been set."; $response->error_detail = "BODY_MALFORMED"; return $response; } $validator = new ZoneValidator($data); if ($validator->validates()) { $response->code = Response::OK; $response->body = true; $response->log_message = "Zone was successfully validated."; } else { $response->code = Response::BADREQUEST; $response->error = $validator->getFormattedErrors(); $response->error_detail = $validator->getErrorDetails(); } return $response; }
/** * @param int $transfersOut * * @return self Instance */ public function setTransfersOut($transfersOut) { ZoneValidator::checkIfZoneIsSlaveAndThrowExceptionIfNot($this->_type); $this->_transfersOut = intval($transfersOut); return $this; }