Skip to content

Common Data Structures Tests

RDAP Conformance validation

Test group: [stdRdapConformanceValidation]

The following steps should be used to test that an RDAP Conformance data structure is valid:

  1. Test case -10500: The RDAP Conformance data structure must be a syntactically valid JSON array.
    {
      "code": -10500,
      "value": "<rdapConformance structure>",
      "message": "The RDAP Conformance structure is not syntactically valid."
    }
    
  2. Test case -10501: Every value of the JSON array shall be a JSON string data type.
    {
      "code": -10501,
      "value": "<JSON value>",
      "message": "The JSON value is not a string."
    }
    
  3. Test case -10502: Each of the JSON string values in the JSON array, with the exception of "rdap_level_0", shall be included as an Extension Identifier in RDAPExtensions.
    {
      "code": -10502,
      "value": "<JSON string>",
      "message": "The JSON string is not included as an Extension Identifier in RDAPExtensions."
    }
    
  4. Test case -10503: The JSON string value "rdap_level_0" is not included in the RDAP Conformance data structure.
    {
      "code": -10503,
      "value": "<rdapConformance>",
      "message": "The RDAP Conformance data structure does not include rdap_level_0."
    }
    
  5. Test case -10504: The rdapConformance array must exist in all RDAP responses.
    {
      "code": -10504,
      "value": "<response>",
      "message": "RFC 9083 requires all RDAP responses to have an rdapConformance array."
    }
    
  6. Test case -10505: If the rdapConformance array exists in an object that is embedded in another object, then this is an error because rdapConformance must only appear in the top-most part of an RDAP response.
    {
      "code": -10505,
      "value": "<RDAP object>",
      "message": "The rdapConformance array must appear only in the top-most of the RDAP response."
    }
    

Test group: [stdRdapLinksValidation]

The following steps should be used to test that a links data structure is valid:

  1. Test case -10600: The links data structure must be a syntactically valid JSON array.
    {
      "code": -10600,
      "value": "<links structure>",
      "message": "The links structure is not syntactically valid."
    }
    
  2. For every object (i.e. link) of the JSON array, verify that the link structure complies with:
    1. Test case -10601: The name of every name/value pair shall be value, rel, href, hreflang, title, media or type.
      {
        "code": -10601,
        "value": "<name/value pair>",
        "message": "The name in the name/value pair is not of: value, rel, href, hreflang, title, media or type."
      }
      
    2. Test case -10602: The JSON name/value pairs of rel, href, hreflang, title, media and type shall appear only once.
      {
        "code": -10602,
        "value": "<name/value pair>",
        "message": "The name in the name/value pair of a link structure was found more than once."
      }
      
    3. Test case -10603: If the JSON name media exists, the allowed values are: screen, tty, tv, projection, handheld, print, braille, embossed, speech, and all.
      {
        "code": -10603,
        "value": "<name/value pair>",
        "message": "The value for the JSON name media is not of: screen, tty, tv, projection, handheld, print, braille, embossed, speech, or all."
      }
      
    4. Test case -10604: If the JSON name rel exists, the value shall be included as a "Relation Name" in linkRelations.
      {
        "code": -10604,
        "value": "<name/value pair>",
        "message": "The JSON value is not included as a Relation Name in linkRelations."
      }
      
    5. Test case -10605: If the JSON name type exists, the value shall be included as a "Type Name/Subtype Name" as registered in mediaTypes.
      {
        "code": -10605,
        "value": "<name/value pair>",
        "message": "The JSON value is not included as a Name in mediaTypes."
      }
      
    6. Test case -10606: If the JSON name title exists, the value shall be a JSON string data type.
      {
        "code": -10606,
        "value": "<name/value pair>",
        "message": "The JSON value is not a string."
      }
      
    7. Test case -10607: If the JSON name hreflang exists, the value shall be a JSON string data type or a valid JSON array where every value is a JSON string data type.
      {
        "code": -10607,
        "value": "<name/value pair>",
        "message": "The value for the JSON name hreflang is not a JSON string data type or a valid JSON array where every value is a JSON string data type."
      }
      
    8. Test case -10608: If the JSON name hreflang exists, every one of the JSON string data values shall conform to the Language-Tag syntax.
      {
        "code": -10608,
        "value": "<name/value pair>",
        "message": "The value of the JSON string data in the hreflang does not conform to Language-Tag syntax."
      }
      
    9. Test case -10609: If the JSON name value exists, the value shall pass the test Web URI validation [webUriValidation] defined in this document.
      {
        "code": -10609,
        "value": "<name/value pair>",
        "message": "The value for the JSON name value does not pass Web URI validation [webUriValidation]."
      }
      
    10. Test case -10610: The JSON name href shall exist.
      {
        "code": -10610,
        "value": "<links structure>",
        "message": "The href element does not exist."
      }
      
    11. Test case -10611: For the JSON name href, the value shall pass the test Web URI validation [webUriValidation] defined in this document.
      {
        "code": -10611,
        "value": "<name/value pair>",
        "message": "The value for the JSON name href does not pass Web URI validation [webUriValidation]."
      }
      
    12. Test case -10612: The JSON name value shall exist:
      {
        "code": -10612,
        "value": "<link structure>",
        "message": "A 'value' propert does not exist in the link object."
      }
      
    13. Test case -10613: The JSON name “rel” shall exist:
      {
        "code": -10613,
        "value": "<link structure>",
        "message": "A 'rel' property does not exist in the link object."
      }
      

Notices and Remarks Validation

Test group: [stdRdapNoticesRemarksValidation]

The following steps should be used to test that a notices or remarks data structure is valid:

  1. Test case -10700: The notices or remarks data structure must be a syntactically valid JSON array.
    {
      "code": -10700,
      "value": "<notices or remarks structure>",
      "message": "The notices or remarks structure is not syntactically valid."
    }
    
  2. For every object of the JSON array, verify that the structure complies with:
    1. Test case -10701: The name of every name/value pair shall be title, type, description or links.
      {
        "code": -10701,
        "value": "<name/value pair>",
        "message": "The name in the name/value pair is not of: title, type, description or links."
      }
      
    2. Test case -10702: The JSON name/values of title, type, description and links shall exist only once.
      {
        "code": -10702,
        "value": "<name/value pair>",
        "message": "The name in the name/value pair of a link structure was found more than once."
      }
      
    3. Test case -10703: If the JSON name title exists, the value shall be a JSON string data type.
      {
        "code": -10703,
        "value": "<name/value pair>",
        "message": "The JSON value is not a string."
      }
      
    4. Test case -10704: If the JSON name links exists, the value shall pass the test Links validation [stdRdapLinksValidation] defined in this document.
      {
        "code": -10704,
        "value": "<name/value pair>",
        "message": "The value for the JSON name value does not pass Links validation [stdRdapLinksValidation]."
      }
      
    5. Test case -10705: If the JSON name type exists, the value shall be a JSON string data type.
      {
        "code": -10705,
        "value": "<name/value pair>",
        "message": "The JSON value is not a string."
      }
      
    6. Test case -10706: If the JSON name type exists, the value shall be included in the RDAPJSONValues with Type="notice and remark type".
      {
        "code": -10706,
        "value": "<JSON string>",
        "message": "The JSON string is not included as a Value with Type='notice and remark type' in the RDAPJSONValues dataset."
      }
      
    7. Test case -10707: The JSON name description shall exist.
      {
        "code": -10707,
        "value": "<notices or remarks structure>",
        "message": "The description element does not exist."
      }
      
    8. Test case -10708: The description data structure must be a syntactically valid JSON array.
      {
        "code": -10708,
        "value": "<description structure>",
        "message": "The description structure is not syntactically valid."
      }
      
    9. Test case -10709: Every value of the JSON array of the description data structure shall be a JSON string data type.
      {
        "code": -10709,
        "value": "<JSON value>",
        "message": "The JSON value is not a string."
      }
      

Language Identifier Validation

Test group: [stdRdapLanguageIdentifierValidation]

The following steps should be used to test that a lang data structure is valid:

  1. Test case -10800: For the JSON name lang, the value shall conform to the Language-Tag syntax.
    {
      "code": -10800,
      "value": "<name/value pair>",
      "message": "The value of the JSON string data in lang does not conform to Language-Tag syntax."
    }
    

Events Validation

Test group: [stdRdapEventsValidation]

The following steps should be used to test that a events data structure is valid:

  1. Test case -10900: The events data structure must be a syntactically valid JSON array.
    {
      "code": -10900,
      "value": "<events structure>",
      "message": "The events structure is not syntactically valid."
    }
    
  2. For every object of the JSON array, verify that the structure complies with:
    1. Test case -10901: The name of every name/value pair shall be any of: eventAction, eventActor, eventDate or links.
      {
        "code": -10901,
        "value": "<name/value pair>",
        "message": "The name in the name/value pair is not of: eventAction, eventActor, eventDate or links."
      }
      
    2. Test case -10902: The JSON name/value pairs of eventAction, eventActor, eventDate and links shall exist only once.
      {
        "code": -10902,
        "value": "<name/value pair>",
        "message": "The name in the name/value pair of a link structure was found more than once. "
      }
      
    3. Test case -10903: The JSON name eventAction shall exist.
      {
        "code": -10903,
        "value": "<links structure>",
        "message": "The eventAction element does not exist."
      }
      
    4. Test case -10904: For the JSON name eventAction, the value shall be a JSON string data type.
      {
        "code": -10904,
        "value": "<name/value pair>",
        "message": "The JSON value is not a string."
      }
      
    5. For the JSON name eventAction, the value shall be included in the RDAPJSONValues with Type="event action".
      {
        "code": -10905,
        "value": "<JSON string>",
        "message": "The JSON string is not included as a Value with Type='event action' in the RDAPJSONValues data set.
      }
      
    6. Test case -10906: The JSON name eventDate shall exist.
      {
        "code": -10906,
        "value": "<links structure>",
        "message": "The eventDate element does not exist."
      }
      
    7. Test case -10907: For the JSON name eventDate, the value shall be a JSON string data type.
      {
        "code": -10907,
        "value": "<name/value pair>",
        "message": "The JSON value is not a string."
      }
      
    8. Test case -10908: For the JSON name eventDate, the value shall be syntactically valid time and date according to RFC3339.
      {
      "code": -10908,
      "value": "<name/value pair>",
      "message": "The JSON value shall be a syntactically valid time and date according to RFC3339."
      }
      
    9. Test case -10909: If the JSON name eventActor exists, the value shall be a JSON string data type.
      {
        "code": -10909,
        "value": "<name/value pair>",
        "message": "The JSON value is not a string."
      }
      
    10. Test case -10910: If the JSON name links exists, the JSON name eventActor shall also exist.
      {
        "code": -10910,
        "value": "<events structure>",
        "message": "A links structure was found but an eventActor was not."
      }
      
    11. Test case -10911: If the JSON name links exists, the value shall pass the test Links validation [stdRdapLinksValidation] defined in this document.
      {
        "code": -10911,
        "value": "<name/value pair>",
        "message": "The value for the JSON name value does not pass Links validation [stdRdapLinksValidation]."
      }
      
  3. Test case -10912: An eventAction value shall only appears once within the events array.
    {
      "code": -10912,
      "value": "<events structure>",
      "message": "An eventAction value exists more than once within the events array."
    }
    

Status validation

Test group: [stdRdapStatusValidation]

The following steps should be used to test that a status data structure is valid:

  1. Test case -11000: The status data structure must be a syntactically valid JSON array.
    {
      "code": -11000,
      "value": "<status structure>",
      "message": "The status structure is not syntactically valid."
    }
    
  2. Test case -11001: Every value of the JSON array shall be a JSON string data type.
    {
      "code": -11001,
      "value": "<JSON value>",
      "message": "The JSON value is not a string."
    }
    
  3. Test case -11002: Each of the JSON string values in the JSON array shall be included in the RDAPJSONValues with Type="status".
    {
      "code": -11002,
      "value": "<JSON string>",
      "message": "The JSON string is not included as a Value with Type='status'."
    }
    
  4. Test case -11003: A string in the status array shall only appear once:
    {
      "code": -11003,
      "value": "<JSON string>",
      "message": "A status value exists more than once in the status array."
    }
    

Port 43 WHOIS Server

Test group: [stdRdapPort43WhoisServerValidation]

The following steps should be used to test that a port43 data structure is valid:

  1. Test case -11100: For the JSON name port43, the value shall pass the test [IPv4Validation], [IPv6Validation] or [DomainNameValidation] defined in this document.
    {
    "code": -11100,
    "value": "<name/value pair>",
    "message": "The value for the JSON name port43 does not pass [IPv4Validation], [IPv6Validation] or [DomainNameValidation]."
    }
    

Public IDs validation

Test group: [stdRdapPublicIdsValidation]

The following steps should be used to test that a publicIds data structure is valid:

  1. Test case -11200: The publicIds data structure must be a syntactically valid JSON array.
    {
      "code": -11200,
      "value": "<publicIds structure>",
      "message": "The publicIds structure is not syntactically valid."
    }
    
  2. For every object of the JSON array, verify that the structure complies with:
    1. Test case -11201: The name of every name/value pairs shall be type or identifier.
      {
        "code": -11201,
        "value": "<name/value pair>",
        "message": "The name in the name/value pair is not of: type or identifier."
      }
      
    2. Test case -11202: The JSON name/values of type or identifier shall appear only once.
      {
        "code": -11202,
        "value": "<name/value pair>",
        "message": "The name in the name/value pair of a domain structure was found more than once."
      }
      
    3. Test case -11203: The JSON name/values of type and identifier shall appear.
      {
        "code": -11203,
        "value": "<publicIds structure>",
        "message": "The following name/values shall exist: type or identifier."
      }
      
    4. Test case -11204: For the JSON name type, the value shall be a JSON string data type.
      {
        "code": -11204,
        "value": "<name/value pair>",
        "message": "The JSON value is not a string."
      }
      
    5. Test case -11205: For the JSON name identifier, the value shall be a JSON string data type.
      {
        "code": -11205,
        "value": "<name/value pair>",
        "message": "The JSON value is not a string."
      }
      

asEventActor Validation

Test group: [stdRdapAsEventActorValidation]

The following steps should be used to test that an asEventActor data structure is valid:

  1. Test case -11300: The asEventActor data structure must be a syntactically valid JSON array.
    {
      "code": -11300,
      "value": "<asEventActor structure>",
      "message": "The asEventActor structure is not syntactically valid."
    }
    
  2. Test case -11301: The asEventActor data structure must be embedded within an entity object, and the entity object must be embedded within another object.
    {
      "code": -11301,
      "value": "<asEventActor structure>",
      "message": "The asEventActor structure is not embedded within an entity object and the entity object is not embedded within another object."
    }
    
  3. For every object of the JSON array, verify that the structure complies with:
    1. Test case -11302: The name of every name/value pair shall be any of: eventAction or eventDate.
      {
        "code": -11302,
        "value": "<name/value pair>",
        "message": "The name in the name/value pair is not of: eventAction and eventDate."
      }
      
    2. Test case -11303: The JSON name/values of eventAction or eventDate shall appear only once.
      {
        "code": -11303,
        "value": "<name/value pair>",
        "message": "The name in the name/value pair of a link structure was found more than once."
      }
      
    3. Test case -11304: The JSON name eventAction shall exist.
      {
        "code": -11304,
        "value": "<links structure>",
        "message": "The eventAction element does not exist."
      }
      
    4. Test case -11305: For the JSON name eventAction, the value shall be a JSON string data type.
      {
        "code": -11305,
        "value": "<name/value pair>",
        "message": "The JSON value is not a string."
      }
      
    5. Test case -11306: For the JSON name eventAction, the value shall be included in the RDAPJSONValues with Type="event action".
      {
        "code": -11306,
        "value": "<JSON string>",
        "message": "The JSON string is not included as a Value with Type='event action' in the RDAPJSONValues dataset."
      }
      
    6. Test case -11307: The JSON name eventDate shall exist.
      {
        "code": -11307,
        "value": "<links structure>",
        "message": "The eventDate element does not exist."
      }
      
    7. Test case -11308: For the JSON name eventDate, the value shall be a JSON string data type.
      {
        "code": -11308,
        "value": "<name/value pair>",
        "message": "The JSON value is not a string."
      }
      
    8. Test case -11309: For the JSON name eventDate, the value shall be syntactically valid time and date according to RFC3339.
      {
        "code": -11309,
        "value": "<name/value pair>",
        "message": "The JSON value shall be a syntactically valid time and date according to RFC3339."
      }
      
  4. Test case -11310: An eventAction shall only appear once within the events array.
    {
      "code": -11310,
      "value": "<events structure>",
      "message": "An _eventAction_ exists more than once within the events array."
    }
    

IP Addresses Validation

Test group: [stdRdapIpAddressesValidation]

The following steps should be used to test that an ipAddresses data structure is valid:

  1. Test case -11400: The ipAddresses data structure must be a syntactically valid JSON object.
    {
      "code": -11400,
      "value": "<ipAddresses structure>",
      "message": "The ipAddresses structure is not syntactically valid."
    }
    
  2. Test case -11401: The name of every name/value pair shall be any of: v4 or v6.
    {
      "code": -11401,
      "value": "<name/value pair>",
      "message": "The name in the name/value pair is not of: v4 or v6."
    }
    
  3. Test case -11402: The JSON name/values of v4 and v6 shall appear only once.
    {
      "code": -11402,
      "value": "<name/value pair>",
      "message": "The name in the name/value pair of an ipAddresses structure was found more than once."
    }
    
  4. Test case -11403: One v4 name/values or one v6 name/value shall appear.
    {
      "code": -11403,
      "value": "<name/value pair>",
      "message": "v4 nor v6 name/value pair exists."
    }
    
  5. If the JSON name v4 exists, the value shall pass the following:
    1. Test case -11404: The v4 data structure must be a syntactically valid JSON array.
      {
        "code": -11404,
        "value": "<v4 structure>",
        "message": "The v4 structure is not syntactically valid."
      }
      
    2. For every object of the JSON array, verify that the structure complies with:
      1. Test case -11405: Every value of the JSON array shall be a JSON string data type.
        {
          "code": -11405,
          "value": "<JSON value>",
          "message": "The JSON value is not a string."
        }
        
      2. Test case -11406: The IPv4 address is syntactically valid in dot-decimal notation.
        {
          "code": -11406,
          "value": "<IPv4 address string>",
          "message": "The IPv4 address is not syntactically valid in dot-decimal notation."
        }
        
  6. If the JSON name v6 exists, the value shall pass the following:
    1. Test case -11407: The v6 data structure must be a syntactically valid JSON array.
      {
        "code": -11407,
        "value": "<v6 structure>",
        "message": "The v6 structure is not syntactically valid."
      }
      
    2. For every object of the JSON array, verify that the structure complies with:
      1. Test case -11408: Every value of the JSON array shall be a JSON string data type.
        {
          "code": -11408,
          "value": "<JSON value>",
          "message": "The JSON value is not a string."
        }
        
      2. Test case -11409: The IPv6 address is syntactically valid.
        {
          "code": -11409,
          "value": "<IPv6 address string>",
          "message": "The IPv6 address is not syntactically valid."
        }
        

Variants validation

Test group: [stdRdapVariantsValidation]

The following steps should be used to test that a variants data structure is valid:

  1. Test case -11500: The variants data structure must be a syntactically valid JSON array.
    {
      "code": -11500,
      "value": "<variants structure>",
      "message": "The variants structure is not syntactically valid."
    }
    
  2. For every object of the JSON array, verify that the structure complies with:

    1. Test case -11501: The name of every name/value pair shall be relation, idnTable or variantNames.
      {
        "code": -11501,
        "value": "<name/value pair>",
        "message": "The name in the name/value pair is not of: relation, idnTable or variantNames."
      }
      
    2. Test case -11502: The JSON name/value pairs of relation, idnTable and variantNames shall appear only once.
      {
        "code": -11502,
        "value": "<name/value pair>",
        "message": "The name in the name/value pair of a link structure was found more than once."
      }
      
    3. Test case -11503: The RDAP relation data structure must be a syntactically valid JSON array.
      {
        "code": -11503,
        "value": "<relation structure>",
        "message": "The RDAP Conformance structure is not syntactically valid."
      }
      
    4. For every object of the JSON array, verify that the structure complies with:

    5. Test case -11504: Every value of the JSON array shall be a JSON string data type.

      {
        "code": -11504,
        "value": "<JSON value>",
        "message": "The JSON value is not a string."
      }
      

    6. Test case -11505: Each of the JSON string values in the JSON array shall be included in the RDAPJSONValues with Type="domain variant relation".
      {
        "code": -11505,
        "value": "<JSON string>",
        "message": "The JSON string is not included as a Value with Type='domain variant relation '."
      }
      
    7. Test case -11506: If the JSON name idnTable exists, the value shall be a JSON string data type.
      {
        "code": -11506,
        "value": "<name/value pair>",
        "message": "The JSON value is not a string."
      }
      
    8. Test case -11507: The variantNames data structure must be a syntactically valid JSON array.
      {
        "code": -11507,
        "value": "<variantNames structure>",
        "message": "The variantNames structure is not syntactically valid."
      }
      
    9. For every object of the JSON array, verify that the structure complies with:
      1. Test case -11508: The name of every name/value pair shall be any of: ldhName or unicodeName
        {
          "code": -11508,
          "value": "<name/value pair>",
          "message": "The name in the name/value pair is not of: ldhName or unicodeName."
        }
        
      2. Test case -11509: The JSON name/value pairs of ldhName or unicodeName shall exist only once.
        {
          "code": -11509,
          "value": "<name/value pair>",
          "message": "The name in the name/value pair of a link structure was found more than once."
        }
        
      3. Test case -11510: If the JSON name title ldhName exists, the value shall pass the test LDH name [stdRdapLdhNameValidation] defined in this document.
        {
          "code": -11510,
          "value": "<name/value pair>",
          "message": " The value for the JSON name value does not pass LDH name [stdRdapLdhNameValidation]."
        }
        
      4. Test case -11511: If the JSON name unicodeName exists, the value shall pass the test Unicode name [stdRdapUnicodeNameValidation] defined in this document.
        {
          "code": -11511,
          "value": "<name/value pair>",
          "message": "The value for the JSON name value does not pass Unicode name [stdRdapUnicodeNameValidation]."
        }
        

Unicode name

Test group: [stdRdapUnicodeNameValidation]

The following steps should be used to test that a unicodeName is valid:

  1. Test case -11600: The length of each label is between 1 and 63.
    {
      "code": -11600,
      "value": "<domain name>",
      "message": "A DNS label with length not between 1 and 63 was found."
    }
    
  2. Test case -11601: A maximum total length of 253 characters not including the last ".".
    {
      "code": -11601,
      "value": "<domain name>",
      "message": "A domain name of more than 253 characters was found."
    }
    
  3. Test case -11602: At least two labels shall exist in the domain name. See, RDAP_Technical_Implementation_Guide_2_1 section 1.10.
    {
      "code": -11602,
      "value": "<domain name>",
      "message": "A domain name with less than two labels was found. See RDAP_Technical_Implementation_Guide_2_1 section 1.10"
    }
    
  4. Test case -11603: Each label of the domain name is a valid "U-label or "NR-LDH label".
    {
      "code": -11603,
      "value": "<domain name>",
      "message": "A label not being a valid 'U-label' or 'NR-LDH label' was found."
    }
    

Note: the latest version of the IANA IDNA Rules and Derived Property Values shall be used. See, https://www.iana.org/assignments/idna-tables-11.0.0/idna-tables-11.0.0.xml

Note: some legacy gTLDs may fail this test, because they have a few domain name registrations that comply with IDNA2003 but not IDNA2018. Such names are not recommended to be used when testing an RDAP response with this tool.

LDH name

Test group: [stdRdapLdhNameValidation]

The following steps should be used to test that a ldhName is valid:

  1. Test case -11700: The length of each label is between 1 and 63.
    {
      "code": -11700,
      "value": "<domain name>",
      "message": "A DNS label with length not between 1 and 63 was found."
    }
    
  2. Test case -11701: A maximum total length of 253 characters not including the last ".".
    {
      "code": -11701,
      "value": "<domain name>",
      "message": "A domain name of more than 253 characters was found."
    }
    
  3. Test case -11702: At least two labels shall exist in the domain name. See, RDAP_Technical_Implementation_Guide_2_1 section 1.10.
    {
      "code": -11702,
      "value": "<domain name>",
      "message": "A domain name with less than two labels was found. See RDAP_Technical_Implementation_Guide_2_1 section 1.10"
    }
    
  4. Test case -11703: Each label of the domain name is a valid "A-label or "NR-LDH label".
    {
      "code": -11703,
      "value": "<domain name>",
      "message": "A label not being a valid 'A-label' or 'NR-LDH label' was found."
    }
    

Note: the latest version of the IANA IDNA Rules and Derived Property Values shall be used. See, https://www.iana.org/assignments/idna-tables-11.0.0/idna-tables-11.0.0.xml

Note: some legacy gTLDs may fail this test, because they have a few domain name registrations that comply with IDNA2003 but not IDNA2018. Such names are not recommended to be used when testing an RDAP response with this tool.

Roles validation

Test group: [stdRdapRolesValidation]

The following steps should be used to test that a roles data structure is valid:

  1. Test case -11800: The roles data structure must be a syntactically valid JSON array.
    {
      "code": -11800,
      "value": "<roles structure>",
      "message": "The roles structure is not syntactically valid."
    }
    
  2. Test case -11801: Every value of the JSON array shall be a JSON string data type.
    {
      "code": -11801,
      "value": "<JSON value>",
      "message": "The JSON value is not a string."
    }
    
  3. Test case -11802: Each of the JSON string values in the JSON array shall be included in the RDAPJSONValues with Type="role".
    {
      "code": -11802,
      "value": "<JSON string>",
      "message": "The JSON string is not included as a Value with Type='role'."
    }
    
  4. Test case -11803: The role value shall only appear once in the JSON array.
    {
      "code": -11803,
      "value": "<roles structure>",
      "message": "A role value appeared more than once."
    }
    

Entities validation

Test group: [stdRdapEntitiesValidation]

The following steps should be used to test that an entities data structure is valid:

  1. Test case -11900: The entities data structure must be a syntactically valid JSON array.
    {
        "code": -11900,
        "value": "<entities structure>",
        "message": "The entities structure is not syntactically valid."
    }
    
  2. Test case -11901: Every value of the JSON array shall pass the test Entity lookup validation [stdRdapEntityLookupValidation] defined in this document.
    {
        "code": -11901,
        "value": "<JSON value>",
        "message": "The JSON value does not pass Entity lookup validation [stdRdapEntityLookupValidation]."
    }
    

Secure DNS validation

Test group: [stdRdapSecureDnsValidation]

The following steps should be used to test that a secureDNS data structure is valid:

  1. Test case -12000: The secureDNS data structure must be a syntactically valid JSON object.
    {
      "code": -12000,
      "value": "<secureDNS structure>",
      "message": "The domain structure is not syntactically valid."
    }
    
  2. Test case -12001: The name of every name/value pairs shall be zoneSigned, delegationSigned, maxSigLife, dsData or keyData.
    {
      "code": -12001,
      "value": "<name/value pair>",
      "message": "The name in the name/value pair is not of: zoneSigned, delegationSigned, maxSigLife, dsData or keyData."
    }
    
  3. Test case -12002: The JSON name/values of zoneSigned, delegationSigned, maxSigLife, dsData and keyData shall appear only once.
    {
      "code": -12002,
      "value": "<name/value pair>",
      "message": "The name in the name/value pair of a domain structure was found more than once."
    }
    
  4. Test case -12003: If the JSON name zoneSigned appears, the value shall be a JSON boolean data type.
    {
      "code": -12003,
      "value": "<name/value pair>",
      "message": "The JSON value is not a boolean."
    }
    
  5. Test case -12005: If the JSON name delegationSigned appears, the value shall be a JSON boolean data type.
    {
      "code": -12005,
      "value": "<name/value pair>",
      "message": "The JSON value is not a boolean."
    }
    
  6. Test case -12006: If the JSON name maxSigLife exists, the value shall be a JSON number data type between 1 and 2147483647.
    {
      "code": -12006,
      "value": "<name/value pair>",
      "message": "The JSON value is not a number between 1 and 2147483647."
    }
    
  7. If the JSON name dsData appears, the value shall pass the following:
    1. Test case -12008: The dsData data structure must be a syntactically valid array of JSON objects.
      {
        "code": -12008,
        "value": "<dsData structure>",
        "message": "The dsData structure is not syntactically valid."
      }
      
    2. Test case -12009: The name of every name/value pair shall be any of: keyTag, algorithm, digest, digestType, events or links.
      {
        "code": -12009,
        "value": "<name/value pair>",
        "message": "The name in the name/value pair is not of: keyTag, algorithm, digest, digestType, events or links."
      }
      
    3. Test case -12010: The JSON name/values of keyTag, algorithm, digest, digestType, events or links shall appear only once.
      {
        "code": -12010,
        "value": "<name/value pair>",
        "message": "The name in the name/value pair of a dsData structure was found more than once."
      }
      
    4. Test case -12011: The JSON name/values of keyTag, algorithm, digest and digestType shall appear.
      {
        "code": -12011,
        "value": "<dsData structure>",
        "message": "The following name/values shall exist: keyTag, algorithm, digest and digestType."
      }
      
    5. Test case -12012: For the JSON name keyTag, the value shall be a JSON number data type between 1 and 65535.
      {
        "code": -12012,
        "value": "<name/value pair>",
        "message": "The JSON value is not a number between 1 and 65535."
      }
      
    6. Test case -12013: For the JSON name algorithm, the value shall be a JSON number listed with Zone Signing=Y in dnsSecAlgNumbers. The values 253 and 254 are not valid for this test.
      {
        "code": -12013,
        "value": "<name/value pair>",
        "message": "The JSON value is not listed with Zone Signing=Y in dnsSecAlgNumbers, or it's 253 or 254."
      }
      
    7. Test case -12014: For the JSON name digest, the value shall be a JSON string of case-insensitive hexadecimal digits. Whitespace is allowed within the hexadecimal text.
      {
        "code": -12014,
        "value": "<name/value pair>",
        "message": "The JSON value is not a string of case-insensitive hexadecimal digits. Whitespace is allowed within the hexadecimal test."
      }
      
    8. Test case -12015: For the JSON name digestType, the value shall be a JSON number assigned in dsRrTypes.
      {
        "code": -12015,
        "value": "<name/value pair>",
        "message": "The JSON value is not assigned in dsRrTypes."
      }
      
    9. Test case -12016: If the JSON name events exists, the value shall pass the test Events Validation [stdRdapEventsValidation] defined in this document.
      {
        "code": -12016,
        "value": "<name/value pair>",
        "message": "The value for the JSON name value does not pass Events Validation [stdRdapEventsValidation]."
      }
      
    10. Test case -12017: If the JSON name links exists, the value shall pass the test Links validation [stdRdapLinksValidation] defined in this document.
      {
        "code": -12017,
        "value": "<name/value pair>",
        "message": "The value for the JSON name value does not pass Links validation [stdRdapLinksValidation]."
      }
      
  8. If the JSON name keyData exists, the value shall pass the following:
    1. Test case -12018: The keyData data structure must be a syntactically valid array of JSON objects.
      {
        "code": -12018,
        "value": "<keyData structure>",
        "message": "The keyData structure is not syntactically valid."
      }
      
    2. Test case -12019: The name of every name/value pair shall be flags, protocol, publicKey, algorithm, events or links.
      {
        "code": -12019,
        "value": "<name/value pair>",
        "message": "The name in the name/value pair is not of: flags, protocol, publicKey, algorithm, events or links."
      }
      
    3. Test case -12020: The JSON name/values of flags, protocol, publicKey, algorithm, events or links shall appear only once.
      {
        "code": -12020,
        "value": "<name/value pair>",
        "message": "The name in the name/value pair of a keyData structure was found more than once."
      }
      
    4. Test case -12021: The JSON name/values of flags, protocol, publicKey and algorithm shall appear.
      {
        "code": -12021,
        "value": "<dsData structure>",
        "message": "The following name/values shall exist: flags, protocol, publicKey and algorithm."
      }
      
    5. Test case -12022: For the JSON name flags, the value shall be a JSON number data type with values: 256 or 257.
      {
        "code": -12022,
        "value": "<name/value pair>",
        "message": "The JSON value is not 256 or 257."
      }
      
    6. Test case -12023: For the JSON name protocol, the value shall be a JSON number data type with value: 3.
      {
        "code": -12023,
        "value": "<name/value pair>",
        "message": "The JSON value is not 3."
      }
      
    7. Test case -12024: For the JSON name publicKey, the value shall be a JSON string, and the key is represented as a Base64. Whitespace is allowed within the text.
      {
        "code": -12024,
        "value": "<name/value pair>",
        "message": "The JSON value is not a string of case-insensitive hexadecimal digits. Whitespace is allowed within the hexadecimal text."
      }
      
    8. Test case -12025: For the JSON name algorithm, the value shall be a JSON number listed with Zone Signing=Y in dnsSecAlgNumbers. The values 253 and 254 are not valid for this test.
      {
        "code": -12025,
        "value": "<name/value pair>",
        "message": "The JSON value is not listed with Zone Signing=Y in dnsSecAlgNumbers, or it's 253 or 254."
      }
      
    9. Test case -12026: If the JSON name events exists, the value shall pass the test Events Validation [stdRdapEventsValidation] defined in this document.
      {
        "code": -12026,
        "value": "<name/value pair>",
        "message": "The value for the JSON name value does not pass Events Validation [stdRdapEventsValidation]."
      }
      
    10. Test case -12027: If the JSON name links exists, the value shall pass the test Links validation [stdRdapLinksValidation] defined in this document.
      {
        "code": -12027,
        "value": "<name/value pair>",
        "message": "The value for the JSON name value does not pass Links validation [stdRdapLinksValidation]."
      }
      

Codes -12004 and -12007 are intentionally omitted.

Error Response Body

Test group: [stdRdapErrorResponseBodyValidation]

The following steps should be used to test that an error data structure is valid:

  1. Test case -12100: The error data structure must be a syntactically valid JSON object.
    {
      "code": -12100,
      "value": "<error structure>",
      "message": "The error structure is not syntactically valid."
    }
    
  2. Test case -12101: At least the following name/value pairs shall appear: errorCode, title and description.
    {
      "code": -12101,
      "value": "<name/value pair>",
      "message": "At least the following name/value pairs shall exist: errorCode, title and description."
    }
    
  3. Test case -12102: The JSON name/values of errorCode, title, and description shall appear only once.
    {
      "code": -12102,
      "value": "<name/value pair>",
      "message": "The name in the name/value pair of an error structure was found more than once."
    }
    
  4. Test case -12103: For the JSON name errorCode, the value shall be a JSON number data type.
    {
      "code": -12103,
      "value": "<name/value pair>",
      "message": "The JSON value is not a number."
    }
    
  5. Test case -12104: For the JSON name title, the value shall be a JSON string data type.
    {
      "code": -12104,
      "value": "<name/value pair>",
      "message": "The JSON value is not a string."
    }
    
  6. Test case -12105: The description data structure must be a syntactically valid JSON array.
    {
      "code": -12105,
      "value": "<description structure>",
      "message": "The description structure is not syntactically valid."
    }
    
  7. Test case -12106: Every value of the JSON array of the description data structure shall be a JSON string data type.
    {
      "code": -12106,
      "value": "<JSON value>",
      "message": "The JSON value is not a string."
    }
    
  8. Test case -12107: "errorCode" is required in an error response.
    {
      "code": -12107,
      "value": "<error structure>",
      "message": "The errorCode value is required in an error response."
    }