fixa aumento no serial do soa
This commit is contained in:
@@ -34,7 +34,6 @@ func TestListZonesSendsAPIKey(t *testing.T) {
|
||||
|
||||
func TestCreateRRSetPatchesZone(t *testing.T) {
|
||||
var patchCount int
|
||||
var getCount int
|
||||
|
||||
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
if !strings.HasPrefix(r.URL.Path, "/api/v1/servers/localhost/zones/example.org.") {
|
||||
@@ -43,12 +42,7 @@ func TestCreateRRSetPatchesZone(t *testing.T) {
|
||||
|
||||
switch r.Method {
|
||||
case http.MethodGet:
|
||||
getCount++
|
||||
serial := uint64(10)
|
||||
if getCount == 2 {
|
||||
serial = 11
|
||||
}
|
||||
writeZone(t, w, serial)
|
||||
writeZoneWithRRSets(t, w, 10, nil)
|
||||
case http.MethodPatch:
|
||||
patchCount++
|
||||
var payload struct {
|
||||
@@ -80,62 +74,7 @@ func TestCreateRRSetPatchesZone(t *testing.T) {
|
||||
t.Fatalf("CreateRRSet returned error: %v", err)
|
||||
}
|
||||
if patchCount != 1 {
|
||||
t.Fatalf("expected one patch when serial increases, got %d", patchCount)
|
||||
}
|
||||
}
|
||||
|
||||
func TestCreateRRSetBumpsSOAWhenSerialDoesNotIncrease(t *testing.T) {
|
||||
var patchCount int
|
||||
|
||||
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
if !strings.HasPrefix(r.URL.Path, "/api/v1/servers/localhost/zones/example.org.") {
|
||||
t.Fatalf("unexpected path: %s", r.URL.Path)
|
||||
}
|
||||
|
||||
switch r.Method {
|
||||
case http.MethodGet:
|
||||
writeZone(t, w, 10)
|
||||
case http.MethodPatch:
|
||||
patchCount++
|
||||
var payload struct {
|
||||
RRSets []changeRRSet `json:"rrsets"`
|
||||
}
|
||||
if err := json.NewDecoder(r.Body).Decode(&payload); err != nil {
|
||||
t.Fatalf("decode request: %v", err)
|
||||
}
|
||||
if len(payload.RRSets) != 1 {
|
||||
t.Fatalf("unexpected payload: %#v", payload)
|
||||
}
|
||||
if patchCount == 2 {
|
||||
rrset := payload.RRSets[0]
|
||||
if rrset.Type != "SOA" {
|
||||
t.Fatalf("expected SOA fallback patch, got %#v", rrset)
|
||||
}
|
||||
if got := rrset.Records[0].Content; !strings.Contains(got, " 11 ") {
|
||||
t.Fatalf("expected bumped SOA serial, got %q", got)
|
||||
}
|
||||
}
|
||||
w.WriteHeader(http.StatusNoContent)
|
||||
default:
|
||||
t.Fatalf("unexpected method: %s", r.Method)
|
||||
}
|
||||
}))
|
||||
defer server.Close()
|
||||
|
||||
client := NewClient(server.URL, "secret", "localhost", server.Client())
|
||||
err := client.CreateRRSet(context.Background(), "example.org.", RRSet{
|
||||
Name: "www.example.org.",
|
||||
Type: "A",
|
||||
TTL: 300,
|
||||
Records: []Record{{
|
||||
Content: "192.0.2.10",
|
||||
}},
|
||||
})
|
||||
if err != nil {
|
||||
t.Fatalf("CreateRRSet returned error: %v", err)
|
||||
}
|
||||
if patchCount != 2 {
|
||||
t.Fatalf("expected requested patch plus SOA fallback patch, got %d", patchCount)
|
||||
t.Fatalf("expected one patch, got %d", patchCount)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -281,23 +220,45 @@ func TestGetServerUsesConfiguredServerID(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestCreateZonePostsZone(t *testing.T) {
|
||||
var posted bool
|
||||
var put bool
|
||||
|
||||
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
if r.Method != http.MethodPost {
|
||||
switch r.Method {
|
||||
case http.MethodPost:
|
||||
posted = true
|
||||
if r.URL.Path != "/api/v1/servers/localhost/zones" {
|
||||
t.Fatalf("unexpected path: %s", r.URL.Path)
|
||||
}
|
||||
|
||||
var payload Zone
|
||||
if err := json.NewDecoder(r.Body).Decode(&payload); err != nil {
|
||||
t.Fatalf("decode request: %v", err)
|
||||
}
|
||||
if payload.Name != "example.org." || payload.Kind != "Native" {
|
||||
t.Fatalf("unexpected payload: %#v", payload)
|
||||
}
|
||||
if payload.SOAEditAPI != soaEditAPIIncrease {
|
||||
t.Fatalf("unexpected soa_edit_api: %q", payload.SOAEditAPI)
|
||||
}
|
||||
w.WriteHeader(http.StatusCreated)
|
||||
_ = json.NewEncoder(w).Encode(payload)
|
||||
case http.MethodPut:
|
||||
put = true
|
||||
if r.URL.Path != "/api/v1/servers/localhost/zones/example.org." {
|
||||
t.Fatalf("unexpected path: %s", r.URL.Path)
|
||||
}
|
||||
var payload Zone
|
||||
if err := json.NewDecoder(r.Body).Decode(&payload); err != nil {
|
||||
t.Fatalf("decode request: %v", err)
|
||||
}
|
||||
if payload.SOAEditAPI != soaEditAPIIncrease {
|
||||
t.Fatalf("unexpected soa_edit_api: %q", payload.SOAEditAPI)
|
||||
}
|
||||
w.WriteHeader(http.StatusNoContent)
|
||||
default:
|
||||
t.Fatalf("unexpected method: %s", r.Method)
|
||||
}
|
||||
if r.URL.Path != "/api/v1/servers/localhost/zones" {
|
||||
t.Fatalf("unexpected path: %s", r.URL.Path)
|
||||
}
|
||||
|
||||
var payload Zone
|
||||
if err := json.NewDecoder(r.Body).Decode(&payload); err != nil {
|
||||
t.Fatalf("decode request: %v", err)
|
||||
}
|
||||
if payload.Name != "example.org." || payload.Kind != "Native" {
|
||||
t.Fatalf("unexpected payload: %#v", payload)
|
||||
}
|
||||
w.WriteHeader(http.StatusCreated)
|
||||
_ = json.NewEncoder(w).Encode(payload)
|
||||
}))
|
||||
defer server.Close()
|
||||
|
||||
@@ -309,6 +270,78 @@ func TestCreateZonePostsZone(t *testing.T) {
|
||||
if created.Name != "example.org." {
|
||||
t.Fatalf("unexpected zone: %#v", created)
|
||||
}
|
||||
if !posted || !put {
|
||||
t.Fatalf("expected POST and follow-up PUT, posted=%v put=%v", posted, put)
|
||||
}
|
||||
}
|
||||
|
||||
func TestEnsureAllZonesSOAEditAPIUpdatesAllZones(t *testing.T) {
|
||||
var updated []string
|
||||
|
||||
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
switch r.Method {
|
||||
case http.MethodGet:
|
||||
if r.URL.Path != "/api/v1/servers/localhost/zones" {
|
||||
t.Fatalf("unexpected path: %s", r.URL.Path)
|
||||
}
|
||||
_ = json.NewEncoder(w).Encode([]Zone{
|
||||
{ID: "already.example.org.", Name: "already.example.org.", SOAEditAPI: soaEditAPIIncrease},
|
||||
{ID: "missing.example.org.", Name: "missing.example.org."},
|
||||
{ID: "", Name: "fallback.example.org.", SOAEditAPI: "DEFAULT"},
|
||||
})
|
||||
case http.MethodPut:
|
||||
var payload Zone
|
||||
if err := json.NewDecoder(r.Body).Decode(&payload); err != nil {
|
||||
t.Fatalf("decode request: %v", err)
|
||||
}
|
||||
if payload.SOAEditAPI != soaEditAPIIncrease {
|
||||
t.Fatalf("unexpected soa_edit_api: %q", payload.SOAEditAPI)
|
||||
}
|
||||
updated = append(updated, strings.TrimPrefix(r.URL.Path, "/api/v1/servers/localhost/zones/"))
|
||||
w.WriteHeader(http.StatusNoContent)
|
||||
default:
|
||||
t.Fatalf("unexpected method: %s", r.Method)
|
||||
}
|
||||
}))
|
||||
defer server.Close()
|
||||
|
||||
client := NewClient(server.URL, "secret", "localhost", server.Client())
|
||||
if err := client.EnsureAllZonesSOAEditAPI(context.Background()); err != nil {
|
||||
t.Fatalf("EnsureAllZonesSOAEditAPI returned error: %v", err)
|
||||
}
|
||||
|
||||
if len(updated) != 3 {
|
||||
t.Fatalf("expected three updates, got %#v", updated)
|
||||
}
|
||||
if updated[0] != "already.example.org." || updated[1] != "missing.example.org." || updated[2] != "fallback.example.org." {
|
||||
t.Fatalf("unexpected updated zones: %#v", updated)
|
||||
}
|
||||
}
|
||||
|
||||
func TestSetZoneSOAEditAPIUsesPUT(t *testing.T) {
|
||||
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
if r.Method != http.MethodPut {
|
||||
t.Fatalf("unexpected method: %s", r.Method)
|
||||
}
|
||||
if r.URL.Path != "/api/v1/servers/localhost/zones/example.org." {
|
||||
t.Fatalf("unexpected path: %s", r.URL.Path)
|
||||
}
|
||||
|
||||
var payload Zone
|
||||
if err := json.NewDecoder(r.Body).Decode(&payload); err != nil {
|
||||
t.Fatalf("decode request: %v", err)
|
||||
}
|
||||
if payload.SOAEditAPI != soaEditAPIIncrease {
|
||||
t.Fatalf("unexpected soa_edit_api: %q", payload.SOAEditAPI)
|
||||
}
|
||||
w.WriteHeader(http.StatusNoContent)
|
||||
}))
|
||||
defer server.Close()
|
||||
|
||||
client := NewClient(server.URL, "secret", "localhost", server.Client())
|
||||
if err := client.SetZoneSOAEditAPI(context.Background(), "example.org."); err != nil {
|
||||
t.Fatalf("SetZoneSOAEditAPI returned error: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestDeleteZoneDeletesZone(t *testing.T) {
|
||||
@@ -329,12 +362,6 @@ func TestDeleteZoneDeletesZone(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func writeZone(t *testing.T, w http.ResponseWriter, serial uint64) {
|
||||
t.Helper()
|
||||
|
||||
writeZoneWithRRSets(t, w, serial, nil)
|
||||
}
|
||||
|
||||
func writeZoneWithRRSets(t *testing.T, w http.ResponseWriter, serial uint64, rrsets []RRSet) {
|
||||
t.Helper()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user