Skip to content

Commit 213d133

Browse files
command/meta: Enable migration from PSS to a backend (#37949)
* command/meta: Enable migration from PSS to a backend * Address PR feedback * Update internal/command/meta_backend.go Co-authored-by: Sarah French <[email protected]> * meta_backend: Rename stateStore_c_S to stateStore_to_backend --------- Co-authored-by: Sarah French <[email protected]>
1 parent b2aad91 commit 213d133

File tree

7 files changed

+361
-152
lines changed

7 files changed

+361
-152
lines changed

internal/backend/remote-state/http/client_test.go

Lines changed: 7 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,9 @@
44
package http
55

66
import (
7-
"bytes"
8-
"fmt"
9-
"io"
107
"net/http"
118
"net/http/httptest"
129
"net/url"
13-
"reflect"
1410
"testing"
1511

1612
"github.com/hashicorp/go-retryablehttp"
@@ -23,7 +19,7 @@ func TestHTTPClient_impl(t *testing.T) {
2319
}
2420

2521
func TestHTTPClient(t *testing.T) {
26-
handler := new(testHTTPHandler)
22+
handler := new(TestHTTPBackend)
2723
ts := httptest.NewServer(http.HandlerFunc(handler.Handle))
2824
defer ts.Close()
2925

@@ -66,7 +62,7 @@ func TestHTTPClient(t *testing.T) {
6662
remote.TestRemoteLocks(t, a, b)
6763

6864
// test a WebDAV-ish backend
69-
davhandler := new(testHTTPHandler)
65+
davhandler := new(TestHTTPBackend)
7066
ts = httptest.NewServer(http.HandlerFunc(davhandler.HandleWebDAV))
7167
defer ts.Close()
7268

@@ -84,8 +80,8 @@ func TestHTTPClient(t *testing.T) {
8480
remote.TestClient(t, client) // second time, with identical data: 204
8581

8682
// test a broken backend
87-
brokenHandler := new(testBrokenHTTPHandler)
88-
brokenHandler.handler = new(testHTTPHandler)
83+
brokenHandler := new(TestBrokenHTTPBackend)
84+
brokenHandler.handler = new(TestHTTPBackend)
8985
ts = httptest.NewServer(http.HandlerFunc(brokenHandler.Handle))
9086
defer ts.Close()
9187

@@ -97,77 +93,12 @@ func TestHTTPClient(t *testing.T) {
9793
remote.TestClient(t, client)
9894
}
9995

100-
type testHTTPHandler struct {
101-
Data []byte
102-
Locked bool
103-
}
104-
105-
func (h *testHTTPHandler) Handle(w http.ResponseWriter, r *http.Request) {
106-
switch r.Method {
107-
case "GET":
108-
w.Write(h.Data)
109-
case "PUT":
110-
buf := new(bytes.Buffer)
111-
if _, err := io.Copy(buf, r.Body); err != nil {
112-
w.WriteHeader(500)
113-
}
114-
w.WriteHeader(201)
115-
h.Data = buf.Bytes()
116-
case "POST":
117-
buf := new(bytes.Buffer)
118-
if _, err := io.Copy(buf, r.Body); err != nil {
119-
w.WriteHeader(500)
120-
}
121-
h.Data = buf.Bytes()
122-
case "LOCK":
123-
if h.Locked {
124-
w.WriteHeader(423)
125-
} else {
126-
h.Locked = true
127-
}
128-
case "UNLOCK":
129-
h.Locked = false
130-
case "DELETE":
131-
h.Data = nil
132-
w.WriteHeader(200)
133-
default:
134-
w.WriteHeader(500)
135-
w.Write([]byte(fmt.Sprintf("Unknown method: %s", r.Method)))
136-
}
137-
}
138-
139-
// mod_dav-ish behavior
140-
func (h *testHTTPHandler) HandleWebDAV(w http.ResponseWriter, r *http.Request) {
141-
switch r.Method {
142-
case "GET":
143-
w.Write(h.Data)
144-
case "PUT":
145-
buf := new(bytes.Buffer)
146-
if _, err := io.Copy(buf, r.Body); err != nil {
147-
w.WriteHeader(500)
148-
}
149-
if reflect.DeepEqual(h.Data, buf.Bytes()) {
150-
h.Data = buf.Bytes()
151-
w.WriteHeader(204)
152-
} else {
153-
h.Data = buf.Bytes()
154-
w.WriteHeader(201)
155-
}
156-
case "DELETE":
157-
h.Data = nil
158-
w.WriteHeader(200)
159-
default:
160-
w.WriteHeader(500)
161-
w.Write([]byte(fmt.Sprintf("Unknown method: %s", r.Method)))
162-
}
163-
}
164-
165-
type testBrokenHTTPHandler struct {
96+
type TestBrokenHTTPBackend struct {
16697
lastRequestWasBroken bool
167-
handler *testHTTPHandler
98+
handler *TestHTTPBackend
16899
}
169100

170-
func (h *testBrokenHTTPHandler) Handle(w http.ResponseWriter, r *http.Request) {
101+
func (h *TestBrokenHTTPBackend) Handle(w http.ResponseWriter, r *http.Request) {
171102
if h.lastRequestWasBroken {
172103
h.lastRequestWasBroken = false
173104
h.handler.Handle(w, r)
Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
// Copyright (c) HashiCorp, Inc.
2+
// SPDX-License-Identifier: BUSL-1.1
3+
package http
4+
5+
import (
6+
"bytes"
7+
"fmt"
8+
"io"
9+
"net/http"
10+
"reflect"
11+
)
12+
13+
type TestHTTPBackend struct {
14+
Data []byte
15+
Locked bool
16+
17+
GetCalled int
18+
PutCalled int
19+
PostCalled int
20+
LockCalled int
21+
UnlockCalled int
22+
DeleteCalled int
23+
}
24+
25+
func (h *TestHTTPBackend) Handle(w http.ResponseWriter, r *http.Request) {
26+
switch r.Method {
27+
case "GET":
28+
h.GetCalled++
29+
w.Write(h.Data)
30+
case "PUT":
31+
h.PutCalled++
32+
buf := new(bytes.Buffer)
33+
if _, err := io.Copy(buf, r.Body); err != nil {
34+
w.WriteHeader(500)
35+
}
36+
w.WriteHeader(201)
37+
h.Data = buf.Bytes()
38+
case "POST":
39+
h.PostCalled++
40+
buf := new(bytes.Buffer)
41+
if _, err := io.Copy(buf, r.Body); err != nil {
42+
w.WriteHeader(500)
43+
}
44+
h.Data = buf.Bytes()
45+
case "LOCK":
46+
h.LockCalled++
47+
if h.Locked {
48+
w.WriteHeader(423)
49+
} else {
50+
h.Locked = true
51+
}
52+
case "UNLOCK":
53+
h.UnlockCalled++
54+
h.Locked = false
55+
case "DELETE":
56+
h.DeleteCalled++
57+
h.Data = nil
58+
w.WriteHeader(200)
59+
default:
60+
w.WriteHeader(500)
61+
w.Write([]byte(fmt.Sprintf("Unknown method: %s", r.Method)))
62+
}
63+
}
64+
65+
// mod_dav-ish behavior
66+
func (h *TestHTTPBackend) HandleWebDAV(w http.ResponseWriter, r *http.Request) {
67+
switch r.Method {
68+
case "GET":
69+
h.GetCalled++
70+
w.Write(h.Data)
71+
case "PUT":
72+
h.PutCalled++
73+
buf := new(bytes.Buffer)
74+
if _, err := io.Copy(buf, r.Body); err != nil {
75+
w.WriteHeader(500)
76+
}
77+
if reflect.DeepEqual(h.Data, buf.Bytes()) {
78+
h.Data = buf.Bytes()
79+
w.WriteHeader(204)
80+
} else {
81+
h.Data = buf.Bytes()
82+
w.WriteHeader(201)
83+
}
84+
case "DELETE":
85+
h.DeleteCalled++
86+
h.Data = nil
87+
w.WriteHeader(200)
88+
default:
89+
w.WriteHeader(500)
90+
w.Write([]byte(fmt.Sprintf("Unknown method: %s", r.Method)))
91+
}
92+
}

0 commit comments

Comments
 (0)