github.com/Iqoqo/consul@v1.4.5/agent/snapshot_endpoint_test.go (about) 1 package agent 2 3 import ( 4 "bytes" 5 "io" 6 "net/http" 7 "net/http/httptest" 8 "strings" 9 "testing" 10 11 "github.com/hashicorp/consul/acl" 12 ) 13 14 func TestSnapshot(t *testing.T) { 15 t.Parallel() 16 var snap io.Reader 17 t.Run("", func(t *testing.T) { 18 a := NewTestAgent(t, t.Name(), "") 19 defer a.Shutdown() 20 21 body := bytes.NewBuffer(nil) 22 req, _ := http.NewRequest("GET", "/v1/snapshot?token=root", body) 23 resp := httptest.NewRecorder() 24 if _, err := a.srv.Snapshot(resp, req); err != nil { 25 t.Fatalf("err: %v", err) 26 } 27 snap = resp.Body 28 29 header := resp.Header().Get("X-Consul-Index") 30 if header == "" { 31 t.Fatalf("bad: %v", header) 32 } 33 header = resp.Header().Get("X-Consul-KnownLeader") 34 if header != "true" { 35 t.Fatalf("bad: %v", header) 36 } 37 header = resp.Header().Get("X-Consul-LastContact") 38 if header != "0" { 39 t.Fatalf("bad: %v", header) 40 } 41 }) 42 43 t.Run("", func(t *testing.T) { 44 a := NewTestAgent(t, t.Name(), "") 45 defer a.Shutdown() 46 47 req, _ := http.NewRequest("PUT", "/v1/snapshot?token=root", snap) 48 resp := httptest.NewRecorder() 49 if _, err := a.srv.Snapshot(resp, req); err != nil { 50 t.Fatalf("err: %v", err) 51 } 52 }) 53 } 54 55 func TestSnapshot_Options(t *testing.T) { 56 t.Parallel() 57 for _, method := range []string{"GET", "PUT"} { 58 t.Run(method, func(t *testing.T) { 59 a := NewTestAgent(t, t.Name(), TestACLConfig()) 60 defer a.Shutdown() 61 62 body := bytes.NewBuffer(nil) 63 req, _ := http.NewRequest(method, "/v1/snapshot?token=anonymous", body) 64 resp := httptest.NewRecorder() 65 _, err := a.srv.Snapshot(resp, req) 66 if !acl.IsErrPermissionDenied(err) { 67 t.Fatalf("err: %v", err) 68 } 69 }) 70 71 t.Run(method, func(t *testing.T) { 72 a := NewTestAgent(t, t.Name(), TestACLConfig()) 73 defer a.Shutdown() 74 75 body := bytes.NewBuffer(nil) 76 req, _ := http.NewRequest(method, "/v1/snapshot?dc=nope", body) 77 resp := httptest.NewRecorder() 78 _, err := a.srv.Snapshot(resp, req) 79 if err == nil || !strings.Contains(err.Error(), "No path to datacenter") { 80 t.Fatalf("err: %v", err) 81 } 82 }) 83 84 t.Run(method, func(t *testing.T) { 85 a := NewTestAgent(t, t.Name(), TestACLConfig()) 86 defer a.Shutdown() 87 88 body := bytes.NewBuffer(nil) 89 req, _ := http.NewRequest(method, "/v1/snapshot?token=root&stale", body) 90 resp := httptest.NewRecorder() 91 _, err := a.srv.Snapshot(resp, req) 92 if method == "GET" { 93 if err != nil { 94 t.Fatalf("err: %v", err) 95 } 96 } else { 97 if err == nil || !strings.Contains(err.Error(), "stale not allowed") { 98 t.Fatalf("err: %v", err) 99 } 100 } 101 }) 102 } 103 }