Merge pull request #2920 from dmathieu/blob_writer_offset
Append the written bytes to the blob writer's sizemaster
						commit
						6c329e56a2
					
				|  | @ -64,8 +64,8 @@ func (hbu *httpBlobUpload) ReadFrom(r io.Reader) (n int64, err error) { | |||
| 		return 0, fmt.Errorf("bad range format: %s", rng) | ||||
| 	} | ||||
| 
 | ||||
| 	hbu.offset += end - start + 1 | ||||
| 	return (end - start + 1), nil | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
| func (hbu *httpBlobUpload) Write(p []byte) (n int, err error) { | ||||
|  | @ -99,8 +99,8 @@ func (hbu *httpBlobUpload) Write(p []byte) (n int, err error) { | |||
| 		return 0, fmt.Errorf("bad range format: %s", rng) | ||||
| 	} | ||||
| 
 | ||||
| 	hbu.offset += int64(end - start + 1) | ||||
| 	return (end - start + 1), nil | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
| func (hbu *httpBlobUpload) Size() int64 { | ||||
|  |  | |||
|  | @ -209,3 +209,91 @@ func TestUploadReadFrom(t *testing.T) { | |||
| 		t.Fatalf("Unexpected response status: %s, expected %s", uploadErr.Status, expected) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func TestUploadSize(t *testing.T) { | ||||
| 	_, b := newRandomBlob(64) | ||||
| 	readFromLocationPath := "/v2/test/upload/readfrom/uploads/testid" | ||||
| 	writeLocationPath := "/v2/test/upload/readfrom/uploads/testid" | ||||
| 
 | ||||
| 	m := testutil.RequestResponseMap([]testutil.RequestResponseMapping{ | ||||
| 		{ | ||||
| 			Request: testutil.Request{ | ||||
| 				Method: "GET", | ||||
| 				Route:  "/v2/", | ||||
| 			}, | ||||
| 			Response: testutil.Response{ | ||||
| 				StatusCode: http.StatusOK, | ||||
| 				Headers: http.Header(map[string][]string{ | ||||
| 					"Docker-Distribution-API-Version": {"registry/2.0"}, | ||||
| 				}), | ||||
| 			}, | ||||
| 		}, | ||||
| 		{ | ||||
| 			Request: testutil.Request{ | ||||
| 				Method: "PATCH", | ||||
| 				Route:  readFromLocationPath, | ||||
| 				Body:   b, | ||||
| 			}, | ||||
| 			Response: testutil.Response{ | ||||
| 				StatusCode: http.StatusAccepted, | ||||
| 				Headers: http.Header(map[string][]string{ | ||||
| 					"Docker-Upload-UUID": {"46603072-7a1b-4b41-98f9-fd8a7da89f9b"}, | ||||
| 					"Location":           {readFromLocationPath}, | ||||
| 					"Range":              {"0-63"}, | ||||
| 				}), | ||||
| 			}, | ||||
| 		}, | ||||
| 		{ | ||||
| 			Request: testutil.Request{ | ||||
| 				Method: "PATCH", | ||||
| 				Route:  writeLocationPath, | ||||
| 				Body:   b, | ||||
| 			}, | ||||
| 			Response: testutil.Response{ | ||||
| 				StatusCode: http.StatusAccepted, | ||||
| 				Headers: http.Header(map[string][]string{ | ||||
| 					"Docker-Upload-UUID": {"46603072-7a1b-4b41-98f9-fd8a7da89f9b"}, | ||||
| 					"Location":           {writeLocationPath}, | ||||
| 					"Range":              {"0-63"}, | ||||
| 				}), | ||||
| 			}, | ||||
| 		}, | ||||
| 	}) | ||||
| 
 | ||||
| 	e, c := testServer(m) | ||||
| 	defer c() | ||||
| 
 | ||||
| 	// Writing with ReadFrom
 | ||||
| 	blobUpload := &httpBlobUpload{ | ||||
| 		client:   &http.Client{}, | ||||
| 		location: e + readFromLocationPath, | ||||
| 	} | ||||
| 
 | ||||
| 	if blobUpload.Size() != 0 { | ||||
| 		t.Fatalf("Wrong size returned from Size: %d, expected 0", blobUpload.Size()) | ||||
| 	} | ||||
| 
 | ||||
| 	_, err := blobUpload.ReadFrom(bytes.NewReader(b)) | ||||
| 	if err != nil { | ||||
| 		t.Fatalf("Error calling ReadFrom: %s", err) | ||||
| 	} | ||||
| 
 | ||||
| 	if blobUpload.Size() != 64 { | ||||
| 		t.Fatalf("Wrong size returned from Size: %d, expected 64", blobUpload.Size()) | ||||
| 	} | ||||
| 
 | ||||
| 	// Writing with Write
 | ||||
| 	blobUpload = &httpBlobUpload{ | ||||
| 		client:   &http.Client{}, | ||||
| 		location: e + writeLocationPath, | ||||
| 	} | ||||
| 
 | ||||
| 	_, err = blobUpload.Write(b) | ||||
| 	if err != nil { | ||||
| 		t.Fatalf("Error calling Write: %s", err) | ||||
| 	} | ||||
| 
 | ||||
| 	if blobUpload.Size() != 64 { | ||||
| 		t.Fatalf("Wrong size returned from Size: %d, expected 64", blobUpload.Size()) | ||||
| 	} | ||||
| } | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue