Merge pull request #1243 from RichardScothern/client-header-message
Add clearer messaging around missing content-length headers.master
						commit
						95e80a8283
					
				| 
						 | 
					@ -488,6 +488,10 @@ func (bs *blobStatter) Stat(ctx context.Context, dgst digest.Digest) (distributi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if SuccessStatus(resp.StatusCode) {
 | 
						if SuccessStatus(resp.StatusCode) {
 | 
				
			||||||
		lengthHeader := resp.Header.Get("Content-Length")
 | 
							lengthHeader := resp.Header.Get("Content-Length")
 | 
				
			||||||
 | 
							if lengthHeader == "" {
 | 
				
			||||||
 | 
								return distribution.Descriptor{}, fmt.Errorf("missing content-length header for request: %s", u)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		length, err := strconv.ParseInt(lengthHeader, 10, 64)
 | 
							length, err := strconv.ParseInt(lengthHeader, 10, 64)
 | 
				
			||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
			return distribution.Descriptor{}, fmt.Errorf("error parsing content-length: %v", err)
 | 
								return distribution.Descriptor{}, fmt.Errorf("error parsing content-length: %v", err)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -159,6 +159,59 @@ func TestBlobFetch(t *testing.T) {
 | 
				
			||||||
	// TODO(dmcgowan): Test for unknown blob case
 | 
						// TODO(dmcgowan): Test for unknown blob case
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func TestBlobExistsNoContentLength(t *testing.T) {
 | 
				
			||||||
 | 
						var m testutil.RequestResponseMap
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						repo := "biff"
 | 
				
			||||||
 | 
						dgst, content := newRandomBlob(1024)
 | 
				
			||||||
 | 
						m = append(m, testutil.RequestResponseMapping{
 | 
				
			||||||
 | 
							Request: testutil.Request{
 | 
				
			||||||
 | 
								Method: "GET",
 | 
				
			||||||
 | 
								Route:  "/v2/" + repo + "/blobs/" + dgst.String(),
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							Response: testutil.Response{
 | 
				
			||||||
 | 
								StatusCode: http.StatusOK,
 | 
				
			||||||
 | 
								Body:       content,
 | 
				
			||||||
 | 
								Headers: http.Header(map[string][]string{
 | 
				
			||||||
 | 
									//			"Content-Length": {fmt.Sprint(len(content))},
 | 
				
			||||||
 | 
									"Last-Modified": {time.Now().Add(-1 * time.Second).Format(time.ANSIC)},
 | 
				
			||||||
 | 
								}),
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
						})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						m = append(m, testutil.RequestResponseMapping{
 | 
				
			||||||
 | 
							Request: testutil.Request{
 | 
				
			||||||
 | 
								Method: "HEAD",
 | 
				
			||||||
 | 
								Route:  "/v2/" + repo + "/blobs/" + dgst.String(),
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							Response: testutil.Response{
 | 
				
			||||||
 | 
								StatusCode: http.StatusOK,
 | 
				
			||||||
 | 
								Headers: http.Header(map[string][]string{
 | 
				
			||||||
 | 
									//			"Content-Length": {fmt.Sprint(len(content))},
 | 
				
			||||||
 | 
									"Last-Modified": {time.Now().Add(-1 * time.Second).Format(time.ANSIC)},
 | 
				
			||||||
 | 
								}),
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
						})
 | 
				
			||||||
 | 
						e, c := testServer(m)
 | 
				
			||||||
 | 
						defer c()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						ctx := context.Background()
 | 
				
			||||||
 | 
						r, err := NewRepository(ctx, repo, e, nil)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							t.Fatal(err)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						l := r.Blobs(ctx)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						_, err = l.Stat(ctx, dgst)
 | 
				
			||||||
 | 
						if err == nil {
 | 
				
			||||||
 | 
							t.Fatal(err)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if !strings.Contains(err.Error(), "missing content-length heade") {
 | 
				
			||||||
 | 
							t.Fatalf("Expected missing content-length error message")
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func TestBlobExists(t *testing.T) {
 | 
					func TestBlobExists(t *testing.T) {
 | 
				
			||||||
	d1, b1 := newRandomBlob(1024)
 | 
						d1, b1 := newRandomBlob(1024)
 | 
				
			||||||
	var m testutil.RequestResponseMap
 | 
						var m testutil.RequestResponseMap
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue