| 
									
										
										
										
											2017-09-14 09:36:06 +01:00
										 |  |  | package plugin | 
					
						
							| 
									
										
										
										
											2016-09-07 12:41:40 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-05-17 22:19:54 +02:00
										 |  |  | import ( | 
					
						
							|  |  |  | 	"sort" | 
					
						
							|  |  |  | 	"testing" | 
					
						
							|  |  |  | ) | 
					
						
							| 
									
										
										
										
											2016-09-07 12:41:40 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | func TestZoneMatches(t *testing.T) { | 
					
						
							|  |  |  | 	child := "example.org." | 
					
						
							|  |  |  | 	zones := Zones([]string{"org.", "."}) | 
					
						
							|  |  |  | 	actual := zones.Matches(child) | 
					
						
							|  |  |  | 	if actual != "org." { | 
					
						
							|  |  |  | 		t.Errorf("Expected %v, got %v", "org.", actual) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	child = "bla.example.org." | 
					
						
							|  |  |  | 	zones = Zones([]string{"bla.example.org.", "org.", "."}) | 
					
						
							|  |  |  | 	actual = zones.Matches(child) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if actual != "bla.example.org." { | 
					
						
							|  |  |  | 		t.Errorf("Expected %v, got %v", "org.", actual) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func TestZoneNormalize(t *testing.T) { | 
					
						
							|  |  |  | 	zones := Zones([]string{"example.org", "Example.ORG.", "example.org."}) | 
					
						
							|  |  |  | 	expected := "example.org." | 
					
						
							|  |  |  | 	zones.Normalize() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	for _, actual := range zones { | 
					
						
							|  |  |  | 		if actual != expected { | 
					
						
							| 
									
										
										
										
											2019-01-19 11:23:13 +00:00
										 |  |  | 			t.Errorf("Expected %v, got %v", expected, actual) | 
					
						
							| 
									
										
										
										
											2016-09-07 12:41:40 +00:00
										 |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func TestNameMatches(t *testing.T) { | 
					
						
							|  |  |  | 	matches := []struct { | 
					
						
							|  |  |  | 		child    string | 
					
						
							|  |  |  | 		parent   string | 
					
						
							|  |  |  | 		expected bool | 
					
						
							|  |  |  | 	}{ | 
					
						
							|  |  |  | 		{".", ".", true}, | 
					
						
							|  |  |  | 		{"example.org.", ".", true}, | 
					
						
							|  |  |  | 		{"example.org.", "example.org.", true}, | 
					
						
							|  |  |  | 		{"example.org.", "org.", true}, | 
					
						
							|  |  |  | 		{"org.", "example.org.", false}, | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	for _, m := range matches { | 
					
						
							|  |  |  | 		actual := Name(m.parent).Matches(m.child) | 
					
						
							|  |  |  | 		if actual != m.expected { | 
					
						
							|  |  |  | 			t.Errorf("Expected %v for %s/%s, got %v", m.expected, m.parent, m.child, actual) | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func TestNameNormalize(t *testing.T) { | 
					
						
							|  |  |  | 	names := []string{ | 
					
						
							|  |  |  | 		"example.org", "example.org.", | 
					
						
							|  |  |  | 		"Example.ORG.", "example.org."} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	for i := 0; i < len(names); i += 2 { | 
					
						
							|  |  |  | 		ts := names[i] | 
					
						
							|  |  |  | 		expected := names[i+1] | 
					
						
							|  |  |  | 		actual := Name(ts).Normalize() | 
					
						
							|  |  |  | 		if expected != actual { | 
					
						
							| 
									
										
										
										
											2019-01-19 11:23:13 +00:00
										 |  |  | 			t.Errorf("Expected %v, got %v", expected, actual) | 
					
						
							| 
									
										
										
										
											2016-09-07 12:41:40 +00:00
										 |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-05-27 07:26:14 -04:00
										 |  |  | func TestHostNormalizeExact(t *testing.T) { | 
					
						
							| 
									
										
										
										
											2021-05-17 22:19:54 +02:00
										 |  |  | 	tests := []struct { | 
					
						
							|  |  |  | 		in  string | 
					
						
							|  |  |  | 		out []string | 
					
						
							|  |  |  | 	}{ | 
					
						
							|  |  |  | 		{".:53", []string{"."}}, | 
					
						
							|  |  |  | 		{"example.org:53", []string{"example.org."}}, | 
					
						
							|  |  |  | 		{"example.org.:53", []string{"example.org."}}, | 
					
						
							|  |  |  | 		{"10.0.0.0/8:53", []string{"10.in-addr.arpa."}}, | 
					
						
							|  |  |  | 		{"10.0.0.0/15", []string{"0.10.in-addr.arpa.", "1.10.in-addr.arpa."}}, | 
					
						
							| 
									
										
										
										
											2021-06-04 04:17:17 -04:00
										 |  |  | 		{"10.9.3.0/18", []string{"0.9.10.in-addr.arpa.", "1.9.10.in-addr.arpa.", "2.9.10.in-addr.arpa."}}, | 
					
						
							|  |  |  | 		{"2001:db8::/29", []string{ | 
					
						
							|  |  |  | 			"8.b.d.0.1.0.0.2.ip6.arpa.", | 
					
						
							|  |  |  | 			"9.b.d.0.1.0.0.2.ip6.arpa.", | 
					
						
							|  |  |  | 			"a.b.d.0.1.0.0.2.ip6.arpa.", | 
					
						
							|  |  |  | 			"b.b.d.0.1.0.0.2.ip6.arpa.", | 
					
						
							|  |  |  | 			"c.b.d.0.1.0.0.2.ip6.arpa.", | 
					
						
							|  |  |  | 			"d.b.d.0.1.0.0.2.ip6.arpa.", | 
					
						
							|  |  |  | 			"e.b.d.0.1.0.0.2.ip6.arpa.", | 
					
						
							|  |  |  | 			"f.b.d.0.1.0.0.2.ip6.arpa.", | 
					
						
							|  |  |  | 		}}, | 
					
						
							|  |  |  | 		{"2001:db8::/30", []string{ | 
					
						
							|  |  |  | 			"8.b.d.0.1.0.0.2.ip6.arpa.", | 
					
						
							|  |  |  | 			"9.b.d.0.1.0.0.2.ip6.arpa.", | 
					
						
							|  |  |  | 			"a.b.d.0.1.0.0.2.ip6.arpa.", | 
					
						
							|  |  |  | 			"b.b.d.0.1.0.0.2.ip6.arpa.", | 
					
						
							|  |  |  | 		}}, | 
					
						
							|  |  |  | 		{"2001:db8::/115", []string{ | 
					
						
							|  |  |  | 			"0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.b.d.0.1.0.0.2.ip6.arpa.", | 
					
						
							|  |  |  | 			"1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.b.d.0.1.0.0.2.ip6.arpa.", | 
					
						
							|  |  |  | 		}}, | 
					
						
							|  |  |  | 		{"2001:db8::/114", []string{ | 
					
						
							|  |  |  | 			"0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.b.d.0.1.0.0.2.ip6.arpa.", | 
					
						
							|  |  |  | 			"1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.b.d.0.1.0.0.2.ip6.arpa.", | 
					
						
							|  |  |  | 			"2.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.b.d.0.1.0.0.2.ip6.arpa.", | 
					
						
							|  |  |  | 			"3.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.b.d.0.1.0.0.2.ip6.arpa.", | 
					
						
							|  |  |  | 		}}, | 
					
						
							|  |  |  | 		{"2001:db8::/113", []string{ | 
					
						
							|  |  |  | 			"0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.b.d.0.1.0.0.2.ip6.arpa.", | 
					
						
							|  |  |  | 			"1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.b.d.0.1.0.0.2.ip6.arpa.", | 
					
						
							|  |  |  | 			"2.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.b.d.0.1.0.0.2.ip6.arpa.", | 
					
						
							|  |  |  | 			"3.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.b.d.0.1.0.0.2.ip6.arpa.", | 
					
						
							|  |  |  | 			"4.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.b.d.0.1.0.0.2.ip6.arpa.", | 
					
						
							|  |  |  | 			"5.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.b.d.0.1.0.0.2.ip6.arpa.", | 
					
						
							|  |  |  | 			"6.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.b.d.0.1.0.0.2.ip6.arpa.", | 
					
						
							|  |  |  | 			"7.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.b.d.0.1.0.0.2.ip6.arpa.", | 
					
						
							|  |  |  | 		}}, | 
					
						
							|  |  |  | 		{"2001:db8::/112", []string{ | 
					
						
							|  |  |  | 			"0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.b.d.0.1.0.0.2.ip6.arpa.", | 
					
						
							|  |  |  | 		}}, | 
					
						
							|  |  |  | 		{"2001:db8::/108", []string{ | 
					
						
							|  |  |  | 			"0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.b.d.0.1.0.0.2.ip6.arpa.", | 
					
						
							|  |  |  | 		}}, | 
					
						
							|  |  |  | 		{"::fFFF:B:F/115", nil}, | 
					
						
							| 
									
										
										
										
											2021-05-17 22:19:54 +02:00
										 |  |  | 		{"dns://example.org", []string{"example.org."}}, | 
					
						
							| 
									
										
										
										
											2019-10-19 03:08:14 -04:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-05-17 22:19:54 +02:00
										 |  |  | 	for i := range tests { | 
					
						
							| 
									
										
										
										
											2021-05-27 07:26:14 -04:00
										 |  |  | 		actual := Host(tests[i].in).NormalizeExact() | 
					
						
							| 
									
										
										
										
											2021-05-17 22:19:54 +02:00
										 |  |  | 		expected := tests[i].out | 
					
						
							|  |  |  | 		sort.Strings(expected) | 
					
						
							|  |  |  | 		for j := range expected { | 
					
						
							|  |  |  | 			if expected[j] != actual[j] { | 
					
						
							| 
									
										
										
										
											2021-06-04 04:17:17 -04:00
										 |  |  | 				t.Errorf("Test %d, expected %v, got %v", i, expected[j], actual[j]) | 
					
						
							| 
									
										
										
										
											2021-05-17 22:19:54 +02:00
										 |  |  | 			} | 
					
						
							| 
									
										
										
										
											2017-10-24 10:16:03 +01:00
										 |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } |