package preset import "testing" func TestParsePrefix(t *testing.T) { ok := []struct { in string want int }{ {"24", 24}, {"/24", 24}, {" /24 ", 24}, {"255.255.255.0", 24}, {"255.255.255.255", 32}, {"0.0.0.0", 0}, {"255.255.254.0", 23}, {"128.0.0.0", 1}, {"32", 32}, {"0", 0}, } for _, tc := range ok { got, err := ParsePrefix(tc.in) if err != nil { t.Errorf("ParsePrefix(%q) returned error: %v", tc.in, err) continue } if got != tc.want { t.Errorf("ParsePrefix(%q) = %d, want %d", tc.in, got, tc.want) } } bad := []string{"", "33", "-1", "255.255.0.255", "1.2.3", "abc", "255.0.255.0", "/", "24.5"} for _, in := range bad { if got, err := ParsePrefix(in); err == nil { t.Errorf("ParsePrefix(%q) = %d, want error", in, got) } } } func TestMaskStringRoundTrip(t *testing.T) { for p := 0; p <= 32; p++ { got, err := ParsePrefix(MaskString(p)) if err != nil { t.Fatalf("ParsePrefix(MaskString(%d)) errored: %v", p, err) } if got != p { t.Errorf("round trip of /%d gave /%d (mask %s)", p, got, MaskString(p)) } } } func TestMaskStringKnown(t *testing.T) { cases := map[int]string{ 0: "0.0.0.0", 8: "255.0.0.0", 16: "255.255.0.0", 24: "255.255.255.0", 30: "255.255.255.252", 32: "255.255.255.255", } for prefix, want := range cases { if got := MaskString(prefix); got != want { t.Errorf("MaskString(%d) = %s, want %s", prefix, got, want) } } }