1// Copyright (c) The Thanos Authors. 2// Licensed under the Apache License 2.0. 3 4package gcs 5 6import ( 7 "context" 8 "io" 9 "io/ioutil" 10 "net/http" 11 "net/http/httptest" 12 "os" 13 "testing" 14 15 "github.com/go-kit/kit/log" 16 17 "github.com/thanos-io/thanos/pkg/testutil" 18) 19 20func TestBucket_Get_ShouldReturnErrorIfServerTruncateResponse(t *testing.T) { 21 srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { 22 w.Header().Set("Last-Modified", "Wed, 21 Oct 2015 07:28:00 GMT") 23 w.Header().Set("Content-Length", "100") 24 25 // Write less bytes than the content length. 26 _, err := w.Write([]byte("12345")) 27 testutil.Ok(t, err) 28 })) 29 defer srv.Close() 30 31 os.Setenv("STORAGE_EMULATOR_HOST", srv.Listener.Addr().String()) 32 33 cfg := Config{ 34 Bucket: "test-bucket", 35 ServiceAccount: "", 36 } 37 38 bkt, err := NewBucketWithConfig(context.Background(), log.NewNopLogger(), cfg, "test") 39 testutil.Ok(t, err) 40 41 reader, err := bkt.Get(context.Background(), "test") 42 testutil.Ok(t, err) 43 44 // We expect an error when reading back. 45 _, err = ioutil.ReadAll(reader) 46 testutil.Equals(t, io.ErrUnexpectedEOF, err) 47} 48