package server import ( "strings" "testing" ) // The DNSSEC page says where each zone's DS record goes. func TestDNSSECWhereDSGoes(t *testing.T) { e := newAPIEnv(t) e.do("POST", "/views", e.token, map[string]any{"name": "internal", "match_clients": []string{"10.0.0.0/8"}}, 201) e.do("POST", "/views", e.token, map[string]any{"name": "external"}, 201) zone := func(name, view string) { e.do("POST", "/zones", e.token, map[string]any{"name": name, "view": view, "nameservers": []string{"ns1.example.net."}}, 201) } zone("adbraun.lol", "external") zone("lab.adbraun.lol", "external") zone("dev.adbraun.lol", "internal") // its parent only in external zone("sub.example.com", "external") zone("10.0.10.0/24", "internal") zone("home.lan", "internal") for _, c := range []struct{ zone, at, place, parent string }{ {"adbraun.lol?view=external", "registrar", "at your registrar", ""}, {"lab.adbraun.lol?view=external", "parent_zone", "in the parent zone adbraun.lol", "adbraun.lol."}, {"dev.adbraun.lol?view=internal", "parent_zone", "in the parent zone adbraun.lol (view external)", "adbraun.lol."}, {"sub.example.com?view=external", "parent", "in its parent zone (most likely example.com)", ""}, {"10.0.10.in-addr.arpa?view=internal", "reverse", "your ISP", ""}, {"home.lan?view=internal", "none", "", ""}, } { r := e.do("GET", "/zones/"+strings.Replace(c.zone, "?", "/dnssec?", 1), e.token, nil, 200) place, _ := r["ds_place"].(string) parent, _ := r["parent_zone"].(string) if r["ds_at"] != c.at || !strings.Contains(place, c.place) || (c.place == "" && place != "") || parent != c.parent { t.Errorf("%s: ds_at %v, ds_place %q, parent_zone %q", c.zone, r["ds_at"], place, parent) } } } // A zone lists the zones of its name in the other views. func TestZoneInViews(t *testing.T) { e := newAPIEnv(t) e.do("POST", "/views", e.token, map[string]any{"name": "internal", "match_clients": []string{"10.0.0.0/8"}}, 201) e.do("POST", "/views", e.token, map[string]any{"name": "external"}, 201) e.do("POST", "/zones", e.token, map[string]any{"name": "adbraun.lol", "view": "internal", "nameservers": []string{"ns1.example.net."}}, 201) e.do("POST", "/zones", e.token, map[string]any{"name": "adbraun.lol", "view": "external", "nameservers": []string{"ns1.example.net."}}, 201) z := e.do("GET", "/zones/adbraun.lol?view=internal", e.token, nil, 200) in, _ := z["in_views"].([]any) if len(in) != 1 || in[0].(map[string]any)["view"] != "external" || in[0].(map[string]any)["type"] != "primary" { t.Errorf("in_views = %v", z["in_views"]) } }