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