| package gcs_test |
| |
| import ( |
| "context" |
| "errors" |
| "io" |
| "testing" |
| |
| "github.com/stretchr/testify/require" |
| "go.skia.org/infra/go/gcs" |
| "go.skia.org/infra/go/gcs/mem_gcsclient" |
| ) |
| |
| // captureFileWriterGCSClient captures FileWriter args for TestWithWriteFile* and |
| // TestWithWriteFileGzip*. |
| type captureFileWriterGCSClient struct { |
| *mem_gcsclient.MemoryGCSClient |
| fileWriterCtx context.Context |
| fileWriterOpts gcs.FileWriteOptions |
| } |
| |
| func (c *captureFileWriterGCSClient) FileWriter(ctx context.Context, path string, opts gcs.FileWriteOptions) io.WriteCloser { |
| c.fileWriterCtx = ctx |
| c.fileWriterOpts = opts |
| return c.MemoryGCSClient.FileWriter(ctx, path, opts) |
| } |
| |
| func TestWithWriteFileSimple(t *testing.T) { |
| |
| c := &captureFileWriterGCSClient{ |
| MemoryGCSClient: mem_gcsclient.New("compositions"), |
| } |
| |
| ctx := context.Background() |
| opts := gcs.FileWriteOptions{ |
| ContentType: "text/plain", |
| } |
| const path = "story" |
| const contents = "Once upon a time..." |
| require.NoError(t, gcs.WithWriteFile(c, ctx, path, opts, func(w io.Writer) error { |
| _, err := w.Write([]byte(contents)) |
| return err |
| })) |
| // The context should be canceled. |
| require.Equal(t, context.Canceled, c.fileWriterCtx.Err()) |
| require.Equal(t, opts, c.fileWriterOpts) |
| actualContents, err := c.GetFileContents(ctx, path) |
| require.NoError(t, err) |
| require.Equal(t, []byte(contents), actualContents) |
| } |
| |
| func TestWithWriteFileError(t *testing.T) { |
| |
| c := &captureFileWriterGCSClient{ |
| MemoryGCSClient: mem_gcsclient.New("compositions"), |
| } |
| |
| ctx := context.Background() |
| opts := gcs.FileWriteOptions{ |
| ContentType: "text/plain", |
| } |
| const path = "the-neverstarting-story" |
| err := errors.New("I can't remember how it starts.") |
| require.Equal(t, gcs.WithWriteFile(c, ctx, path, opts, func(w io.Writer) error { |
| return err |
| }), err) |
| // The context should be canceled. |
| require.Equal(t, context.Canceled, c.fileWriterCtx.Err()) |
| require.Equal(t, opts, c.fileWriterOpts) |
| exists, err := c.DoesFileExist(ctx, path) |
| require.NoError(t, err) |
| require.False(t, exists) |
| } |
| |
| func TestWithWriteFileGzipSimple(t *testing.T) { |
| |
| c := &captureFileWriterGCSClient{ |
| MemoryGCSClient: mem_gcsclient.New("compositions"), |
| } |
| |
| ctx := context.Background() |
| const path = "condensible-story" |
| const contents = "So like there was like this one time that I was like totally like..." |
| require.NoError(t, gcs.WithWriteFileGzip(c, ctx, path, func(w io.Writer) error { |
| _, err := w.Write([]byte(contents)) |
| return err |
| })) |
| // The context should be canceled. |
| require.Equal(t, context.Canceled, c.fileWriterCtx.Err()) |
| require.Equal(t, gcs.FileWriteOptions{ |
| ContentEncoding: "gzip", |
| }, c.fileWriterOpts) |
| actualContents, err := c.GetFileContents(ctx, path) |
| require.NoError(t, err) |
| require.Equal(t, []byte(contents), actualContents) |
| } |