github.com/philhug/dnscontrol@v0.2.4-0.20180625181521-921fa9849001/pkg/transform/arpa_test.go (about) 1 package transform 2 3 import "testing" 4 import "fmt" 5 6 func TestReverse(t *testing.T) { 7 var tests = []struct { 8 in string 9 isError bool 10 out string 11 }{ 12 {"174.136.107.0/24", false, "107.136.174.in-addr.arpa"}, 13 {"174.136.107.1/24", true, "107.136.174.in-addr.arpa"}, 14 15 {"174.136.0.0/16", false, "136.174.in-addr.arpa"}, 16 {"174.136.43.0/16", true, "136.174.in-addr.arpa"}, 17 18 {"174.0.0.0/8", false, "174.in-addr.arpa"}, 19 {"174.136.43.0/8", true, "174.in-addr.arpa"}, 20 {"174.136.0.44/8", true, "174.in-addr.arpa"}, 21 {"174.136.45.45/8", true, "174.in-addr.arpa"}, 22 23 {"2001::/16", false, "1.0.0.2.ip6.arpa"}, 24 {"2001:0db8:0123:4567:89ab:cdef:1234:5670/124", false, "7.6.5.4.3.2.1.f.e.d.c.b.a.9.8.7.6.5.4.3.2.1.0.8.b.d.0.1.0.0.2.ip6.arpa"}, 25 26 {"174.136.107.14/32", false, "14.107.136.174.in-addr.arpa"}, 27 {"2001:0db8:0123:4567:89ab:cdef:1234:5678/128", false, "8.7.6.5.4.3.2.1.f.e.d.c.b.a.9.8.7.6.5.4.3.2.1.0.8.b.d.0.1.0.0.2.ip6.arpa"}, 28 29 // IPv4 "Classless in-addr.arpa delegation" RFC2317. 30 // From examples in the RFC: 31 {"192.0.2.0/25", false, "0/25.2.0.192.in-addr.arpa"}, 32 {"192.0.2.128/26", false, "128/26.2.0.192.in-addr.arpa"}, 33 {"192.0.2.192/26", false, "192/26.2.0.192.in-addr.arpa"}, 34 // All the base cases: 35 {"174.1.0.0/25", false, "0/25.0.1.174.in-addr.arpa"}, 36 {"174.1.0.0/26", false, "0/26.0.1.174.in-addr.arpa"}, 37 {"174.1.0.0/27", false, "0/27.0.1.174.in-addr.arpa"}, 38 {"174.1.0.0/28", false, "0/28.0.1.174.in-addr.arpa"}, 39 {"174.1.0.0/29", false, "0/29.0.1.174.in-addr.arpa"}, 40 {"174.1.0.0/30", false, "0/30.0.1.174.in-addr.arpa"}, 41 {"174.1.0.0/31", false, "0/31.0.1.174.in-addr.arpa"}, 42 // /25 (all cases) 43 {"174.1.0.0/25", false, "0/25.0.1.174.in-addr.arpa"}, 44 {"174.1.0.128/25", false, "128/25.0.1.174.in-addr.arpa"}, 45 // /26 (all cases) 46 {"174.1.0.0/26", false, "0/26.0.1.174.in-addr.arpa"}, 47 {"174.1.0.64/26", false, "64/26.0.1.174.in-addr.arpa"}, 48 {"174.1.0.128/26", false, "128/26.0.1.174.in-addr.arpa"}, 49 {"174.1.0.192/26", false, "192/26.0.1.174.in-addr.arpa"}, 50 // /27 (all cases) 51 {"174.1.0.0/27", false, "0/27.0.1.174.in-addr.arpa"}, 52 {"174.1.0.32/27", false, "32/27.0.1.174.in-addr.arpa"}, 53 {"174.1.0.64/27", false, "64/27.0.1.174.in-addr.arpa"}, 54 {"174.1.0.96/27", false, "96/27.0.1.174.in-addr.arpa"}, 55 {"174.1.0.128/27", false, "128/27.0.1.174.in-addr.arpa"}, 56 {"174.1.0.160/27", false, "160/27.0.1.174.in-addr.arpa"}, 57 {"174.1.0.192/27", false, "192/27.0.1.174.in-addr.arpa"}, 58 {"174.1.0.224/27", false, "224/27.0.1.174.in-addr.arpa"}, 59 // /28 (first 2, last 2) 60 {"174.1.0.0/28", false, "0/28.0.1.174.in-addr.arpa"}, 61 {"174.1.0.16/28", false, "16/28.0.1.174.in-addr.arpa"}, 62 {"174.1.0.224/28", false, "224/28.0.1.174.in-addr.arpa"}, 63 {"174.1.0.240/28", false, "240/28.0.1.174.in-addr.arpa"}, 64 // /29 (first 2 cases) 65 {"174.1.0.0/29", false, "0/29.0.1.174.in-addr.arpa"}, 66 {"174.1.0.8/29", false, "8/29.0.1.174.in-addr.arpa"}, 67 // /30 (first 2 cases) 68 {"174.1.0.0/30", false, "0/30.0.1.174.in-addr.arpa"}, 69 {"174.1.0.4/30", false, "4/30.0.1.174.in-addr.arpa"}, 70 // /31 (first 2 cases) 71 {"174.1.0.0/31", false, "0/31.0.1.174.in-addr.arpa"}, 72 {"174.1.0.2/31", false, "2/31.0.1.174.in-addr.arpa"}, 73 74 // Error Cases: 75 {"0.0.0.0/0", true, ""}, 76 {"2001::/0", true, ""}, 77 {"4.5/16", true, ""}, 78 {"foo.com", true, ""}, 79 } 80 for i, tst := range tests { 81 t.Run(fmt.Sprintf("%d--%s", i, tst.in), func(t *testing.T) { 82 d, err := ReverseDomainName(tst.in) 83 if err != nil && !tst.isError { 84 t.Error("Should not have errored ", err) 85 } else if tst.isError && err == nil { 86 t.Errorf("Should have errored, but didn't. Got %s", d) 87 } else if (!tst.isError) && d != tst.out { 88 t.Errorf("Expected '%s' but got '%s'", tst.out, d) 89 } 90 }) 91 } 92 }