{"action":"created","comment":{"url":"https://api.github.com/repos/dotse/zonemaster/pulls/comments/182512692","pull_request_review_id":113323258,"id":182512692,"diff_hunk":"@@ -1,67 +1,214 @@\n-## CONNECTIVITY03: AS Diversity\n+# CONNECTIVITY03: AS Diversity\n \n-### Test case identifier\n+## Test case identifier\n \n **CONNECTIVITY03:** AS Diversity\n \n-### Objective\n+## Objective\n \n-[RFC 2182](https://tools.ietf.org/html/rfc2182), section 3.1\n-clearly specifies that distinct authoritative name servers for a child\n-domain should be placed in different topological and geographical locations.\n-The objective is to minimise the likelihood of a single failure disabling\n-all of them. \n+The objective in this test is to verify that all IP addresses of the domain's\n+authoritative name servers are not announced from the same [ASN]. \n \n-The objective in this test is to check that all IP addresses of the domain's\n-authoritative name servers does not belong to the same AS.\n+This test is done separately on IPv4 and IPv6, and both must match the criterion.\n \n-[missing references to AS numbers, RFC 1930?]\n+[RFC 2182], section 3.1 clearly specifies that distinct authoritative name \n+servers for a child domain should be placed in different topological and \n+geographical locations. The objective is to minimise the likelihood of a single \n+failure disabling all of them. \n \n-### Inputs\n \n-The domain name to be tested.\n+## Inputs\n \n-### Ordered description of steps to be taken to execute the test case\n+* The domain name to be tested (\"child zone\");\n+* The ASN database to be used (\"RIPE database\" or \"Cymru database\").\n+* The base name (Cymru) or Whois server (RIPE) to be used.\n \n-1. Obtain the IP addresses of the name servers from [Method4](../Methods.md).\n-2. Obtain the list of ASN lookup domains from the configuration of Zonemaster.\n-3. For obtaining the AS numbers for IPv6 addresses; first reverse its eight\n-4-character hexadecimal numbers and place dots between each. It is important \n-all omitted zeroes are included.  \n-3.1. At the end of the reversed IPv6 address, concatenate the string (from\n-step 2)  \n-3.2 Send a \"TXT\" query using the string (obtained from Step 3.1)  \n-3.3 If there is an ANSWER, then go to step 3.4, else go to the next string\n-in the list (from step 2)  \n-3.4 The AS number for the IPv6 address is found in the ANSWER for the query \n-4. To obtain the AS numbers for IPv4 addresses; first reverse the four numerical\n-octets and place dots between each.  \n-4.1. At the end of the reversed IPv4 address concatenate the string (from step 2)  \n-4.2 Send a \"TXT\" query using the string (obtained from Step 4.1)  \n-4.3 If there is an ANSWER, go to step 4.4, else go to the next string\n-in the list (from step 2)  \n-4.4 The AS number for the IPv4 address is found in the ANSWER for the query \n-5. If all the retrieved AS (obtained from step 3.3 and 4.3) are same, then the test\n-   fails.\n \n-### Outcome(s)\n+## Ordered description of steps to be taken to execute the test case\n \n-If there is a AS which is different from the other retrieved AS, then the\n-test succeeds.\n+1. Obtain the total set of IP addresses of the name servers for the \n+   *child zone* using [Method4] and [Method5].\n \n-### Special procedural requirements\n+2. For each IP address in the set from step 1 above, determine the ASN set\n+   announcing the IP address using either the *[Cymru database]* or the \n+   *[RIPE database]* as described in separate sections below. \n \n-None\n+3. For each IP protokoll (IPv4, IPv6) do:\n+   1. If all addresses are announced from one and the same ASN emit\n+      *[IPV4_ONLY_ONE_ASN]* or *[IPV6_ONLY_ONE_ASN]*.\n+   2. If all addresses are announced from the same ASN set but from more than \n+      one ASN emit *[IPV4_SAME_ASN]* or *[IPV6_SAME_ASN]*.\n+   3. If the addresses are announced from overlapping ASN sets, i.e. \n+      every set is either a subset, identical or superset of all other sets, \n+      but there are at least two IP addresses with non-identical ASN sets,\n+      emit *[IPV4_OVERLAP_ASN]* or *[IPV6_OVERLAP_ASN]*.\n+   4. If there are at least two IP addresses for which the ASN sets are \n+      neither a subset, identical or superset of the other emit","path":"docs/specifications/tests/Connectivity-TP/connectivity03.md","position":85,"original_position":85,"commit_id":"ebdfffcef622ece4d5777081535a17edef666b1e","original_commit_id":"ebdfffcef622ece4d5777081535a17edef666b1e","user":{"login":"mattias-p","id":1773045,"avatar_url":"https://avatars2.githubusercontent.com/u/1773045?v=4","gravatar_id":"","url":"https://api.github.com/users/mattias-p","html_url":"https://github.com/mattias-p","followers_url":"https://api.github.com/users/mattias-p/followers","following_url":"https://api.github.com/users/mattias-p/following{/other_user}","gists_url":"https://api.github.com/users/mattias-p/gists{/gist_id}","starred_url":"https://api.github.com/users/mattias-p/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mattias-p/subscriptions","organizations_url":"https://api.github.com/users/mattias-p/orgs","repos_url":"https://api.github.com/users/mattias-p/repos","events_url":"https://api.github.com/users/mattias-p/events{/privacy}","received_events_url":"https://api.github.com/users/mattias-p/received_events","type":"User","site_admin":false},"body":"\"or\" -> \"nor\"","created_at":"2018-04-18T17:45:18Z","updated_at":"2018-04-18T17:45:18Z","html_url":"https://github.com/dotse/zonemaster/pull/597#discussion_r182512692","pull_request_url":"https://api.github.com/repos/dotse/zonemaster/pulls/597","author_association":"CONTRIBUTOR","_links":{"self":{"href":"https://api.github.com/repos/dotse/zonemaster/pulls/comments/182512692"},"html":{"href":"https://github.com/dotse/zonemaster/pull/597#discussion_r182512692"},"pull_request":{"href":"https://api.github.com/repos/dotse/zonemaster/pulls/597"}}},"pull_request":{"url":"https://api.github.com/repos/dotse/zonemaster/pulls/597","id":177109713,"html_url":"https://github.com/dotse/zonemaster/pull/597","diff_url":"https://github.com/dotse/zonemaster/pull/597.diff","patch_url":"https://github.com/dotse/zonemaster/pull/597.patch","issue_url":"https://api.github.com/repos/dotse/zonemaster/issues/597","number":597,"state":"open","locked":false,"title":"Update connectivity03","user":{"login":"matsduf","id":5430733,"avatar_url":"https://avatars2.githubusercontent.com/u/5430733?v=4","gravatar_id":"","url":"https://api.github.com/users/matsduf","html_url":"https://github.com/matsduf","followers_url":"https://api.github.com/users/matsduf/followers","following_url":"https://api.github.com/users/matsduf/following{/other_user}","gists_url":"https://api.github.com/users/matsduf/gists{/gist_id}","starred_url":"https://api.github.com/users/matsduf/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/matsduf/subscriptions","organizations_url":"https://api.github.com/users/matsduf/orgs","repos_url":"https://api.github.com/users/matsduf/repos","events_url":"https://api.github.com/users/matsduf/events{/privacy}","received_events_url":"https://api.github.com/users/matsduf/received_events","type":"User","site_admin":false},"body":"* Added support for ASN lookup against RIPE.\r\n* Rewriting the steps.\r\n* Adding the messages and default level.\r\n\r\nThis PR is the first step to solve issue dotse/zonemaster-engine#273. It also incorporates the messages into the Test Case.","created_at":"2018-03-23T15:47:10Z","updated_at":"2018-04-18T17:45:18Z","closed_at":null,"merged_at":null,"merge_commit_sha":"7fc66d6c3a3c3c9878f239ea49a65488468b2fce","assignee":null,"assignees":[],"requested_reviewers":[{"login":"vlevigneron","id":5500216,"avatar_url":"https://avatars1.githubusercontent.com/u/5500216?v=4","gravatar_id":"","url":"https://api.github.com/users/vlevigneron","html_url":"https://github.com/vlevigneron","followers_url":"https://api.github.com/users/vlevigneron/followers","following_url":"https://api.github.com/users/vlevigneron/following{/other_user}","gists_url":"https://api.github.com/users/vlevigneron/gists{/gist_id}","starred_url":"https://api.github.com/users/vlevigneron/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/vlevigneron/subscriptions","organizations_url":"https://api.github.com/users/vlevigneron/orgs","repos_url":"https://api.github.com/users/vlevigneron/repos","events_url":"https://api.github.com/users/vlevigneron/events{/privacy}","received_events_url":"https://api.github.com/users/vlevigneron/received_events","type":"User","site_admin":false}],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/dotse/zonemaster/pulls/597/commits","review_comments_url":"https://api.github.com/repos/dotse/zonemaster/pulls/597/comments","review_comment_url":"https://api.github.com/repos/dotse/zonemaster/pulls/comments{/number}","comments_url":"https://api.github.com/repos/dotse/zonemaster/issues/597/comments","statuses_url":"https://api.github.com/repos/dotse/zonemaster/statuses/ebdfffcef622ece4d5777081535a17edef666b1e","head":{"label":"matsduf:update-connectivity03","ref":"update-connectivity03","sha":"ebdfffcef622ece4d5777081535a17edef666b1e","user":{"login":"matsduf","id":5430733,"avatar_url":"https://avatars2.githubusercontent.com/u/5430733?v=4","gravatar_id":"","url":"https://api.github.com/users/matsduf","html_url":"https://github.com/matsduf","followers_url":"https://api.github.com/users/matsduf/followers","following_url":"https://api.github.com/users/matsduf/following{/other_user}","gists_url":"https://api.github.com/users/matsduf/gists{/gist_id}","starred_url":"https://api.github.com/users/matsduf/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/matsduf/subscriptions","organizations_url":"https://api.github.com/users/matsduf/orgs","repos_url":"https://api.github.com/users/matsduf/repos","events_url":"https://api.github.com/users/matsduf/events{/privacy}","received_events_url":"https://api.github.com/users/matsduf/received_events","type":"User","site_admin":false},"repo":{"id":74040681,"name":"zonemaster","full_name":"matsduf/zonemaster","owner":{"login":"matsduf","id":5430733,"avatar_url":"https://avatars2.githubusercontent.com/u/5430733?v=4","gravatar_id":"","url":"https://api.github.com/users/matsduf","html_url":"https://github.com/matsduf","followers_url":"https://api.github.com/users/matsduf/followers","following_url":"https://api.github.com/users/matsduf/following{/other_user}","gists_url":"https://api.github.com/users/matsduf/gists{/gist_id}","starred_url":"https://api.github.com/users/matsduf/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/matsduf/subscriptions","organizations_url":"https://api.github.com/users/matsduf/orgs","repos_url":"https://api.github.com/users/matsduf/repos","events_url":"https://api.github.com/users/matsduf/events{/privacy}","received_events_url":"https://api.github.com/users/matsduf/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/matsduf/zonemaster","description":"The Zonemaster Project","fork":true,"url":"https://api.github.com/repos/matsduf/zonemaster","forks_url":"https://api.github.com/repos/matsduf/zonemaster/forks","keys_url":"https://api.github.com/repos/matsduf/zonemaster/keys{/key_id}","collaborators_url":"https://api.github.com/repos/matsduf/zonemaster/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/matsduf/zonemaster/teams","hooks_url":"https://api.github.com/repos/matsduf/zonemaster/hooks","issue_events_url":"https://api.github.com/repos/matsduf/zonemaster/issues/events{/number}","events_url":"https://api.github.com/repos/matsduf/zonemaster/events","assignees_url":"https://api.github.com/repos/matsduf/zonemaster/assignees{/user}","branches_url":"https://api.github.com/repos/matsduf/zonemaster/branches{/branch}","tags_url":"https://api.github.com/repos/matsduf/zonemaster/tags","blobs_url":"https://api.github.com/repos/matsduf/zonemaster/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/matsduf/zonemaster/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/matsduf/zonemaster/git/refs{/sha}","trees_url":"https://api.github.com/repos/matsduf/zonemaster/git/trees{/sha}","statuses_url":"https://api.github.com/repos/matsduf/zonemaster/statuses/{sha}","languages_url":"https://api.github.com/repos/matsduf/zonemaster/languages","stargazers_url":"https://api.github.com/repos/matsduf/zonemaster/stargazers","contributors_url":"https://api.github.com/repos/matsduf/zonemaster/contributors","subscribers_url":"https://api.github.com/repos/matsduf/zonemaster/subscribers","subscription_url":"https://api.github.com/repos/matsduf/zonemaster/subscription","commits_url":"https://api.github.com/repos/matsduf/zonemaster/commits{/sha}","git_commits_url":"https://api.github.com/repos/matsduf/zonemaster/git/commits{/sha}","comments_url":"https://api.github.com/repos/matsduf/zonemaster/comments{/number}","issue_comment_url":"https://api.github.com/repos/matsduf/zonemaster/issues/comments{/number}","contents_url":"https://api.github.com/repos/matsduf/zonemaster/contents/{+path}","compare_url":"https://api.github.com/repos/matsduf/zonemaster/compare/{base}...{head}","merges_url":"https://api.github.com/repos/matsduf/zonemaster/merges","archive_url":"https://api.github.com/repos/matsduf/zonemaster/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/matsduf/zonemaster/downloads","issues_url":"https://api.github.com/repos/matsduf/zonemaster/issues{/number}","pulls_url":"https://api.github.com/repos/matsduf/zonemaster/pulls{/number}","milestones_url":"https://api.github.com/repos/matsduf/zonemaster/milestones{/number}","notifications_url":"https://api.github.com/repos/matsduf/zonemaster/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/matsduf/zonemaster/labels{/name}","releases_url":"https://api.github.com/repos/matsduf/zonemaster/releases{/id}","deployments_url":"https://api.github.com/repos/matsduf/zonemaster/deployments","created_at":"2016-11-17T15:33:45Z","updated_at":"2018-04-11T14:49:42Z","pushed_at":"2018-04-18T16:20:45Z","git_url":"git://github.com/matsduf/zonemaster.git","ssh_url":"git@github.com:matsduf/zonemaster.git","clone_url":"https://github.com/matsduf/zonemaster.git","svn_url":"https://github.com/matsduf/zonemaster","homepage":"","size":7494,"stargazers_count":0,"watchers_count":0,"language":"Prolog","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":4,"license":{"key":"other","name":"Other","spdx_id":null,"url":null},"forks":0,"open_issues":4,"watchers":0,"default_branch":"master"}},"base":{"label":"dotse:develop","ref":"develop","sha":"40a43469c0b7896bd91e14355e3f87999cd6b541","user":{"login":"dotse","id":243884,"avatar_url":"https://avatars3.githubusercontent.com/u/243884?v=4","gravatar_id":"","url":"https://api.github.com/users/dotse","html_url":"https://github.com/dotse","followers_url":"https://api.github.com/users/dotse/followers","following_url":"https://api.github.com/users/dotse/following{/other_user}","gists_url":"https://api.github.com/users/dotse/gists{/gist_id}","starred_url":"https://api.github.com/users/dotse/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dotse/subscriptions","organizations_url":"https://api.github.com/users/dotse/orgs","repos_url":"https://api.github.com/users/dotse/repos","events_url":"https://api.github.com/users/dotse/events{/privacy}","received_events_url":"https://api.github.com/users/dotse/received_events","type":"Organization","site_admin":false},"repo":{"id":12428636,"name":"zonemaster","full_name":"dotse/zonemaster","owner":{"login":"dotse","id":243884,"avatar_url":"https://avatars3.githubusercontent.com/u/243884?v=4","gravatar_id":"","url":"https://api.github.com/users/dotse","html_url":"https://github.com/dotse","followers_url":"https://api.github.com/users/dotse/followers","following_url":"https://api.github.com/users/dotse/following{/other_user}","gists_url":"https://api.github.com/users/dotse/gists{/gist_id}","starred_url":"https://api.github.com/users/dotse/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dotse/subscriptions","organizations_url":"https://api.github.com/users/dotse/orgs","repos_url":"https://api.github.com/users/dotse/repos","events_url":"https://api.github.com/users/dotse/events{/privacy}","received_events_url":"https://api.github.com/users/dotse/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/dotse/zonemaster","description":"The Zonemaster Project","fork":false,"url":"https://api.github.com/repos/dotse/zonemaster","forks_url":"https://api.github.com/repos/dotse/zonemaster/forks","keys_url":"https://api.github.com/repos/dotse/zonemaster/keys{/key_id}","collaborators_url":"https://api.github.com/repos/dotse/zonemaster/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/dotse/zonemaster/teams","hooks_url":"https://api.github.com/repos/dotse/zonemaster/hooks","issue_events_url":"https://api.github.com/repos/dotse/zonemaster/issues/events{/number}","events_url":"https://api.github.com/repos/dotse/zonemaster/events","assignees_url":"https://api.github.com/repos/dotse/zonemaster/assignees{/user}","branches_url":"https://api.github.com/repos/dotse/zonemaster/branches{/branch}","tags_url":"https://api.github.com/repos/dotse/zonemaster/tags","blobs_url":"https://api.github.com/repos/dotse/zonemaster/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/dotse/zonemaster/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/dotse/zonemaster/git/refs{/sha}","trees_url":"https://api.github.com/repos/dotse/zonemaster/git/trees{/sha}","statuses_url":"https://api.github.com/repos/dotse/zonemaster/statuses/{sha}","languages_url":"https://api.github.com/repos/dotse/zonemaster/languages","stargazers_url":"https://api.github.com/repos/dotse/zonemaster/stargazers","contributors_url":"https://api.github.com/repos/dotse/zonemaster/contributors","subscribers_url":"https://api.github.com/repos/dotse/zonemaster/subscribers","subscription_url":"https://api.github.com/repos/dotse/zonemaster/subscription","commits_url":"https://api.github.com/repos/dotse/zonemaster/commits{/sha}","git_commits_url":"https://api.github.com/repos/dotse/zonemaster/git/commits{/sha}","comments_url":"https://api.github.com/repos/dotse/zonemaster/comments{/number}","issue_comment_url":"https://api.github.com/repos/dotse/zonemaster/issues/comments{/number}","contents_url":"https://api.github.com/repos/dotse/zonemaster/contents/{+path}","compare_url":"https://api.github.com/repos/dotse/zonemaster/compare/{base}...{head}","merges_url":"https://api.github.com/repos/dotse/zonemaster/merges","archive_url":"https://api.github.com/repos/dotse/zonemaster/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/dotse/zonemaster/downloads","issues_url":"https://api.github.com/repos/dotse/zonemaster/issues{/number}","pulls_url":"https://api.github.com/repos/dotse/zonemaster/pulls{/number}","milestones_url":"https://api.github.com/repos/dotse/zonemaster/milestones{/number}","notifications_url":"https://api.github.com/repos/dotse/zonemaster/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/dotse/zonemaster/labels{/name}","releases_url":"https://api.github.com/repos/dotse/zonemaster/releases{/id}","deployments_url":"https://api.github.com/repos/dotse/zonemaster/deployments","created_at":"2013-08-28T08:31:30Z","updated_at":"2018-04-17T01:16:14Z","pushed_at":"2018-04-18T16:20:47Z","git_url":"git://github.com/dotse/zonemaster.git","ssh_url":"git@github.com:dotse/zonemaster.git","clone_url":"https://github.com/dotse/zonemaster.git","svn_url":"https://github.com/dotse/zonemaster","homepage":"","size":7419,"stargazers_count":157,"watchers_count":157,"language":"Prolog","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":27,"mirror_url":null,"archived":false,"open_issues_count":58,"license":{"key":"other","name":"Other","spdx_id":null,"url":null},"forks":27,"open_issues":58,"watchers":157,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/dotse/zonemaster/pulls/597"},"html":{"href":"https://github.com/dotse/zonemaster/pull/597"},"issue":{"href":"https://api.github.com/repos/dotse/zonemaster/issues/597"},"comments":{"href":"https://api.github.com/repos/dotse/zonemaster/issues/597/comments"},"review_comments":{"href":"https://api.github.com/repos/dotse/zonemaster/pulls/597/comments"},"review_comment":{"href":"https://api.github.com/repos/dotse/zonemaster/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/dotse/zonemaster/pulls/597/commits"},"statuses":{"href":"https://api.github.com/repos/dotse/zonemaster/statuses/ebdfffcef622ece4d5777081535a17edef666b1e"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"mattias-p"}}