github.com/philhug/dnscontrol@v0.2.4-0.20180625181521-921fa9849001/pkg/transform/transform_test.go (about) 1 package transform 2 3 import ( 4 "net" 5 "strings" 6 "testing" 7 ) 8 9 func TestIPToUint(t *testing.T) { 10 ip := net.ParseIP("1.2.3.4") 11 u, err := ipToUint(ip) 12 if err != nil { 13 t.Fatal(err) 14 } 15 if u != 16909060 { 16 t.Fatalf("I to uint conversion failed. Should be 16909060. Got %d", u) 17 } 18 ip2 := UintToIP(u) 19 if !ip.Equal(ip2) { 20 t.Fatalf("IPs should be equal. %s is not %s", ip2, ip) 21 } 22 } 23 24 func TestDecodeTransformTableFailures(t *testing.T) { 25 result, err := DecodeTransformTable("1.2.3.4 ~ 3.4.5.6") 26 if result != nil { 27 t.Errorf("expected nil, got (%v)\n", result) 28 } 29 if err == nil { 30 t.Error("expect error, got none") 31 } 32 } 33 34 func testIP(t *testing.T, test string, expected string, actual net.IP) { 35 if !net.ParseIP(expected).Equal(actual) { 36 t.Errorf("Test %v: expected Low (%v), got (%v)\n", test, actual, expected) 37 } 38 } 39 40 func Test_DecodeTransformTable_0(t *testing.T) { 41 result, err := DecodeTransformTable("1.2.3.4 ~ 2.3.4.5 ~ 3.4.5.6 ~ ") 42 if err != nil { 43 t.Fatal(err) 44 } 45 if len(result) != 1 { 46 t.Errorf("Test %v: expected col length (%v), got (%v)\n", 1, 1, len(result)) 47 } 48 testIP(t, "low", "1.2.3.4", result[0].Low) 49 testIP(t, "high", "2.3.4.5", result[0].High) 50 testIP(t, "newBase", "3.4.5.6", result[0].NewBases[0]) 51 // test_ip(t, "newIP", "", result[0].NewIPs) 52 } 53 54 func Test_DecodeTransformTable_1(t *testing.T) { 55 result, err := DecodeTransformTable("1.2.3.4~2.3.4.5~3.4.5.6 ~;8.7.6.5 ~ 9.8.7.6 ~ 7.6.5.4 ~ ") 56 if err != nil { 57 t.Fatal(err) 58 } 59 if len(result) != 2 { 60 t.Errorf("Test %v: expected col length (%v), got (%v)\n", 1, 2, len(result)) 61 } 62 testIP(t, "Low[0]", "1.2.3.4", result[0].Low) 63 testIP(t, "High[0]", "2.3.4.5", result[0].High) 64 testIP(t, "NewBase[0]", "3.4.5.6", result[0].NewBases[0]) 65 // test_ip(t, "newIP[0]", "", result[0].NewIP) 66 testIP(t, "Low[1]", "8.7.6.5", result[1].Low) 67 testIP(t, "High[1]", "9.8.7.6", result[1].High) 68 testIP(t, "NewBase[1]", "7.6.5.4", result[1].NewBases[0]) 69 // test_ip(t, "newIP[1]", "", result[0].NewIP) 70 } 71 func Test_DecodeTransformTable_NewIP(t *testing.T) { 72 result, err := DecodeTransformTable("1.2.3.4 ~ 2.3.4.5 ~ ~ 3.4.5.6 ") 73 if err != nil { 74 t.Fatal(err) 75 } 76 if len(result) != 1 { 77 t.Errorf("Test %v: expected col length (%v), got (%v)\n", 1, 1, len(result)) 78 } 79 testIP(t, "low", "1.2.3.4", result[0].Low) 80 testIP(t, "high", "2.3.4.5", result[0].High) 81 testIP(t, "newIP", "3.4.5.6", result[0].NewIPs[0]) 82 } 83 84 func Test_DecodeTransformTable_order(t *testing.T) { 85 raw := "9.8.7.6 ~ 8.7.6.5 ~ 7.6.5.4 ~" 86 result, err := DecodeTransformTable(raw) 87 if result != nil { 88 t.Errorf("Invalid range not detected: (%v)\n", raw) 89 } 90 if err == nil { 91 t.Error("expect error, got none") 92 } 93 } 94 95 func Test_DecodeTransformTable_Base_and_IP(t *testing.T) { 96 raw := "1.1.1.1~ 8.7.6.5 ~ 7.6.5.4 ~ 4.4.4.4" 97 result, err := DecodeTransformTable(raw) 98 if result != nil { 99 t.Errorf("NewBase and NewIP should not both be specified: (%v)\n", raw) 100 } 101 if err == nil { 102 t.Error("expect error, got none") 103 } 104 } 105 106 func Test_TransformIP(t *testing.T) { 107 108 var transforms1 = []IpConversion{{ 109 Low: net.ParseIP("11.11.11.0"), 110 High: net.ParseIP("11.11.11.20"), 111 NewBases: []net.IP{net.ParseIP("99.99.99.0")}, 112 }, { 113 Low: net.ParseIP("22.22.22.0"), 114 High: net.ParseIP("22.22.22.40"), 115 NewBases: []net.IP{net.ParseIP("99.99.99.100")}, 116 }, { 117 Low: net.ParseIP("33.33.33.20"), 118 High: net.ParseIP("33.33.35.40"), 119 NewBases: []net.IP{net.ParseIP("100.100.100.0")}, 120 }, { 121 Low: net.ParseIP("44.44.44.20"), 122 High: net.ParseIP("44.44.44.40"), 123 NewBases: []net.IP{net.ParseIP("100.100.100.40")}, 124 }, { 125 Low: net.ParseIP("55.0.0.0"), 126 High: net.ParseIP("55.255.0.0"), 127 NewBases: []net.IP{net.ParseIP("66.0.0.0"), net.ParseIP("77.0.0.0")}, 128 }} 129 // NO TRANSFORMS ON 99.x.x.x PLZ 130 131 var tests = []struct { 132 experiment string 133 expected string 134 }{ 135 {"11.11.11.0", "99.99.99.0"}, 136 {"11.11.11.1", "99.99.99.1"}, 137 {"11.11.11.11", "99.99.99.11"}, 138 {"11.11.11.19", "99.99.99.19"}, 139 {"11.11.11.20", "99.99.99.20"}, 140 {"11.11.11.21", "11.11.11.21"}, 141 {"22.22.22.22", "99.99.99.122"}, 142 {"22.22.22.255", "22.22.22.255"}, 143 {"33.33.33.0", "33.33.33.0"}, 144 {"33.33.33.19", "33.33.33.19"}, 145 {"33.33.33.20", "100.100.100.0"}, 146 {"33.33.33.21", "100.100.100.1"}, 147 {"33.33.33.33", "100.100.100.13"}, 148 {"33.33.35.39", "100.100.102.19"}, 149 {"33.33.35.40", "100.100.102.20"}, 150 {"33.33.35.41", "33.33.35.41"}, 151 {"44.44.44.24", "100.100.100.44"}, 152 {"44.44.44.44", "44.44.44.44"}, 153 {"55.0.42.42", "66.0.42.42,77.0.42.42"}, 154 {"99.0.0.42", "99.0.0.42"}, 155 } 156 157 for _, test := range tests { 158 experiment := net.ParseIP(test.experiment) 159 actual, err := TransformIPToList(experiment, transforms1) 160 if err != nil { 161 t.Errorf("%v: got an err: %v\n", experiment, err) 162 } 163 list := []string{} 164 for _, ip := range actual { 165 list = append(list, ip.String()) 166 } 167 act := strings.Join(list, ",") 168 if test.expected != act { 169 t.Errorf("%v: expected (%v) got (%v)\n", experiment, test.expected, act) 170 } 171 } 172 } 173 174 func Test_TransformIP_NewIP(t *testing.T) { 175 176 var transforms1 = []IpConversion{{ 177 Low: net.ParseIP("11.11.11.0"), 178 High: net.ParseIP("11.11.11.20"), 179 NewIPs: []net.IP{net.ParseIP("1.1.1.1")}, 180 }, { 181 Low: net.ParseIP("22.22.22.0"), 182 High: net.ParseIP("22.22.22.40"), 183 NewIPs: []net.IP{net.ParseIP("2.2.2.2")}, 184 }, { 185 Low: net.ParseIP("33.33.33.20"), 186 High: net.ParseIP("33.33.35.40"), 187 NewIPs: []net.IP{net.ParseIP("3.3.3.3")}, 188 }, 189 } 190 191 var tests = []struct { 192 experiment string 193 expected string 194 }{ 195 {"11.11.11.0", "1.1.1.1"}, 196 {"11.11.11.1", "1.1.1.1"}, 197 {"11.11.11.11", "1.1.1.1"}, 198 {"11.11.11.19", "1.1.1.1"}, 199 {"11.11.11.20", "1.1.1.1"}, 200 {"11.11.11.21", "11.11.11.21"}, 201 {"22.22.22.22", "2.2.2.2"}, 202 {"22.22.22.255", "22.22.22.255"}, 203 {"33.33.33.0", "33.33.33.0"}, 204 {"33.33.33.19", "33.33.33.19"}, 205 {"33.33.33.20", "3.3.3.3"}, 206 {"33.33.33.21", "3.3.3.3"}, 207 {"33.33.33.33", "3.3.3.3"}, 208 {"33.33.35.39", "3.3.3.3"}, 209 {"33.33.35.40", "3.3.3.3"}, 210 {"33.33.35.41", "33.33.35.41"}, 211 } 212 213 for _, test := range tests { 214 experiment := net.ParseIP(test.experiment) 215 expected := net.ParseIP(test.expected) 216 actual, err := TransformIP(experiment, transforms1) 217 if err != nil { 218 t.Errorf("%v: got an err: %v\n", experiment, err) 219 } 220 if !expected.Equal(actual) { 221 t.Errorf("%v: expected (%v) got (%v)\n", experiment, expected, actual) 222 } 223 } 224 }