Skip to content

Commit 1f4c2e3

Browse files
committed
Keep unsupported transfer adapter check
1 parent e05f47d commit 1f4c2e3

File tree

2 files changed

+49
-28
lines changed

2 files changed

+49
-28
lines changed

modules/lfs/http_client.go

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,8 @@ var ErrUnexpectedEOF = errors.New("unexpected EOF in response")
2727
type HTTPClient struct {
2828
client *http.Client
2929
endpoint string
30-
transfers []string
31-
activeAdapter TransferAdapter
30+
transfers map[string]TransferAdapter
31+
transferNames []string
3232
}
3333

3434
// BatchSize returns the preferred size of batchs to process
@@ -49,10 +49,12 @@ func newHTTPClient(endpoint *url.URL, httpTransport *http.Transport) *HTTPClient
4949

5050
basic := &BasicTransferAdapter{hc}
5151
client := &HTTPClient{
52-
client: hc,
53-
endpoint: strings.TrimSuffix(endpoint.String(), "/"),
54-
transfers: []string{basic.Name()},
55-
activeAdapter: basic,
52+
client: hc,
53+
endpoint: strings.TrimSuffix(endpoint.String(), "/"),
54+
transfers: map[string]TransferAdapter{
55+
basic.Name(): basic,
56+
},
57+
transferNames: []string{basic.Name()},
5658
}
5759

5860
return client
@@ -63,7 +65,7 @@ func (c *HTTPClient) batch(ctx context.Context, operation string, objects []Poin
6365

6466
url := fmt.Sprintf("%s/objects/batch", c.endpoint)
6567

66-
request := &BatchRequest{operation, c.transfers, nil, objects}
68+
request := &BatchRequest{operation, c.transferNames, nil, objects}
6769
payload := new(bytes.Buffer)
6870
err := json.NewEncoder(payload).Encode(request)
6971
if err != nil {
@@ -121,6 +123,11 @@ func (c *HTTPClient) performOperation(ctx context.Context, objects []Pointer, dc
121123
return err
122124
}
123125

126+
transferAdapter, ok := c.transfers[result.Transfer]
127+
if !ok {
128+
return fmt.Errorf("TransferAdapter not found: %s", result.Transfer)
129+
}
130+
124131
for _, object := range result.Objects {
125132
if object.Error != nil {
126133
objectError := errors.New(object.Error.Message)
@@ -154,15 +161,15 @@ func (c *HTTPClient) performOperation(ctx context.Context, objects []Pointer, dc
154161
return err
155162
}
156163

157-
err = c.activeAdapter.Upload(ctx, link, object.Pointer, content)
164+
err = transferAdapter.Upload(ctx, link, object.Pointer, content)
158165

159166
if err != nil {
160167
return err
161168
}
162169

163170
link, ok = object.Actions["verify"]
164171
if ok {
165-
if err := c.activeAdapter.Verify(ctx, link, object.Pointer); err != nil {
172+
if err := transferAdapter.Verify(ctx, link, object.Pointer); err != nil {
166173
return err
167174
}
168175
}
@@ -173,7 +180,7 @@ func (c *HTTPClient) performOperation(ctx context.Context, objects []Pointer, dc
173180
return errors.New("missing action 'download'")
174181
}
175182

176-
content, err := c.activeAdapter.Download(ctx, link)
183+
content, err := transferAdapter.Download(ctx, link)
177184
if err != nil {
178185
return err
179186
}

modules/lfs/http_client_test.go

Lines changed: 32 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -195,31 +195,36 @@ func TestHTTPClientDownload(t *testing.T) {
195195
expectederror: "",
196196
},
197197
// case 4
198+
{
199+
endpoint: "https://unknown-transfer-adapter.io",
200+
expectederror: "TransferAdapter not found: ",
201+
},
202+
// case 5
198203
{
199204
endpoint: "https://error-in-response-objects.io",
200205
expectederror: "Object not found",
201206
},
202-
// case 5
207+
// case 6
203208
{
204209
endpoint: "https://empty-actions-map.io",
205210
expectederror: "missing action 'download'",
206211
},
207-
// case 6
212+
// case 7
208213
{
209214
endpoint: "https://download-actions-map.io",
210215
expectederror: "",
211216
},
212-
// case 7
217+
// case 8
213218
{
214219
endpoint: "https://upload-actions-map.io",
215220
expectederror: "missing action 'download'",
216221
},
217-
// case 8
222+
// case 9
218223
{
219224
endpoint: "https://verify-actions-map.io",
220225
expectederror: "missing action 'download'",
221226
},
222-
// case 9
227+
// case 10
223228
{
224229
endpoint: "https://unknown-actions-map.io",
225230
expectederror: "missing action 'download'",
@@ -228,10 +233,12 @@ func TestHTTPClientDownload(t *testing.T) {
228233

229234
for n, c := range cases {
230235
client := &HTTPClient{
231-
client: hc,
232-
endpoint: c.endpoint,
233-
transfers: []string{"dummy"},
234-
activeAdapter: dummy,
236+
client: hc,
237+
endpoint: c.endpoint,
238+
transfers: map[string]TransferAdapter{
239+
"dummy": dummy,
240+
},
241+
transferNames: []string{"dummy"},
235242
}
236243

237244
err := client.Download(context.Background(), []Pointer{p}, func(p Pointer, content io.ReadCloser, objectError error) error {
@@ -297,31 +304,36 @@ func TestHTTPClientUpload(t *testing.T) {
297304
expectederror: "",
298305
},
299306
// case 4
307+
{
308+
endpoint: "https://unknown-transfer-adapter.io",
309+
expectederror: "TransferAdapter not found: ",
310+
},
311+
// case 5
300312
{
301313
endpoint: "https://error-in-response-objects.io",
302314
expectederror: "Object not found",
303315
},
304-
// case 5
316+
// case 6
305317
{
306318
endpoint: "https://empty-actions-map.io",
307319
expectederror: "",
308320
},
309-
// case 6
321+
// case 7
310322
{
311323
endpoint: "https://download-actions-map.io",
312324
expectederror: "missing action 'upload'",
313325
},
314-
// case 7
326+
// case 8
315327
{
316328
endpoint: "https://upload-actions-map.io",
317329
expectederror: "",
318330
},
319-
// case 8
331+
// case 9
320332
{
321333
endpoint: "https://verify-actions-map.io",
322334
expectederror: "missing action 'upload'",
323335
},
324-
// case 9
336+
// case 10
325337
{
326338
endpoint: "https://unknown-actions-map.io",
327339
expectederror: "missing action 'upload'",
@@ -330,10 +342,12 @@ func TestHTTPClientUpload(t *testing.T) {
330342

331343
for n, c := range cases {
332344
client := &HTTPClient{
333-
client: hc,
334-
endpoint: c.endpoint,
335-
transfers: []string{"dummy"},
336-
activeAdapter: dummy,
345+
client: hc,
346+
endpoint: c.endpoint,
347+
transfers: map[string]TransferAdapter{
348+
"dummy": dummy,
349+
},
350+
transferNames: []string{"dummy"},
337351
}
338352

339353
err := client.Upload(context.Background(), []Pointer{p}, func(p Pointer, objectError error) (io.ReadCloser, error) {

0 commit comments

Comments
 (0)