Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(334)

Unified Diff: go/src/infra/tools/cipd/storage_test.go

Issue 1129043003: cipd: Refactor client to make it more readable. (Closed) Base URL: https://chromium.googlesource.com/infra/infra.git@master
Patch Set: Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « go/src/infra/tools/cipd/storage.go ('k') | go/src/infra/tools/cipd/uploader.go » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: go/src/infra/tools/cipd/storage_test.go
diff --git a/go/src/infra/tools/cipd/storage_test.go b/go/src/infra/tools/cipd/storage_test.go
new file mode 100644
index 0000000000000000000000000000000000000000..adbd11323b7c431ef777ef167fb6646a167d15e9
--- /dev/null
+++ b/go/src/infra/tools/cipd/storage_test.go
@@ -0,0 +1,113 @@
+// Copyright 2015 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package cipd
+
+import (
+ "bytes"
+ "io/ioutil"
+ "net/http"
+ "os"
+ "path/filepath"
+ "testing"
+
+ . "github.com/smartystreets/goconvey/convey"
+)
+
+func TestUpload(t *testing.T) {
+ Convey("Upload full flow", t, func(c C) {
+ storage := mockStorageImpl(c, []expectedHTTPCall{
+ {
+ Method: "PUT",
+ Path: "/upl",
+ Body: "01234",
+ Headers: http.Header{"Content-Range": []string{"bytes 0-4/13"}},
+ },
+ {
+ Method: "PUT",
+ Path: "/upl",
+ Body: "56789",
+ Headers: http.Header{"Content-Range": []string{"bytes 5-9/13"}},
+ },
+ // Insert a error.
+ {
+ Method: "PUT",
+ Path: "/upl",
+ Body: "abc",
+ Headers: http.Header{"Content-Range": []string{"bytes 10-12/13"}},
+ Status: 500,
+ },
+ // Request for uploaded offset #1: failed itself.
+ {
+ Method: "PUT",
+ Path: "/upl",
+ Body: "",
+ Headers: http.Header{"Content-Range": []string{"bytes */13"}},
+ Status: 500,
+ },
+ // Request for uploaded offset #2: indicates part of data uploaded.
+ {
+ Method: "PUT",
+ Path: "/upl",
+ Body: "",
+ Headers: http.Header{"Content-Range": []string{"bytes */13"}},
+ Status: 308,
+ ResponseHeaders: http.Header{"Range": []string{"bytes=0-7"}},
+ },
+ // Resume of the upload from returned offset.
+ {
+ Method: "PUT",
+ Path: "/upl",
+ Body: "89abc",
+ Headers: http.Header{"Content-Range": []string{"bytes 8-12/13"}},
+ },
+ })
+ err := storage.upload("http://localhost/upl", bytes.NewReader([]byte("0123456789abc")))
+ So(err, ShouldBeNil)
+ })
+}
+
+func TestDownload(t *testing.T) {
+ Convey("With temp directory", t, func() {
+ tempDir, err := ioutil.TempDir("", "cipd_test")
+ So(err, ShouldBeNil)
+ Reset(func() { os.RemoveAll(tempDir) })
+ tempFile := filepath.Join(tempDir, "pkg")
+
+ Convey("Download full flow", func(c C) {
+ out, err := os.OpenFile(tempFile, os.O_RDWR|os.O_CREATE, 0666)
+ So(err, ShouldBeNil)
+ defer out.Close()
+
+ storage := mockStorageImpl(c, []expectedHTTPCall{
+ // Simulate a transient error.
+ {
+ Method: "GET",
+ Path: "/dwn",
+ Status: 500,
+ Reply: "error",
+ },
+ {
+ Method: "GET",
+ Path: "/dwn",
+ Status: 200,
+ Reply: "file data",
+ },
+ })
+ err = storage.download("http://localhost/dwn", out)
+ So(err, ShouldBeNil)
+
+ out.Seek(0, os.SEEK_SET)
+ fetched, err := ioutil.ReadAll(out)
+ So(err, ShouldBeNil)
+ So(string(fetched), ShouldEqual, "file data")
+ })
+ })
+}
+
+////////////////////////////////////////////////////////////////////////////////
+
+func mockStorageImpl(c C, expectations []expectedHTTPCall) *storageImpl {
+ return &storageImpl{client: mockClient(c, expectations), chunkSize: 5}
+}
« no previous file with comments | « go/src/infra/tools/cipd/storage.go ('k') | go/src/infra/tools/cipd/uploader.go » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698