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

Unified Diff: go/src/infra/tools/cipd/remote_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/remote.go ('k') | go/src/infra/tools/cipd/storage.go » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: go/src/infra/tools/cipd/remote_test.go
diff --git a/go/src/infra/tools/cipd/remote_test.go b/go/src/infra/tools/cipd/remote_test.go
index f8e40b466e72cc76264cc2b502fffaf3bbd87350..bc70e9f654658ebf323b5970bbd9ae14f036b7fe 100644
--- a/go/src/infra/tools/cipd/remote_test.go
+++ b/go/src/infra/tools/cipd/remote_test.go
@@ -5,104 +5,117 @@
package cipd
import (
- "fmt"
- "io/ioutil"
- "net/http"
- "net/http/httptest"
"net/url"
- "reflect"
"strings"
"testing"
"time"
- "infra/libs/logging"
-
. "github.com/smartystreets/goconvey/convey"
+
+ . "infra/tools/cipd/common"
)
-func TestRemoteService(t *testing.T) {
- mockInitiateUpload := func(c C, response string) (*uploadSession, error) {
- remote := mockRemoteService(func(w http.ResponseWriter, r *http.Request) {
- c.So(r.URL.Path, ShouldEqual, "/_ah/api/cas/v1/upload/SHA1/abc")
- c.So(r.Method, ShouldEqual, "POST")
- w.Write([]byte(response))
+func TestRemoteImpl(t *testing.T) {
+ mockInitiateUpload := func(c C, reply string) (*UploadSession, error) {
+ remote := mockRemoteImpl(c, []expectedHTTPCall{
+ {
+ Method: "POST",
+ Path: "/_ah/api/cas/v1/upload/SHA1/abc",
+ Reply: reply,
+ },
})
return remote.initiateUpload("abc")
}
- mockFinalizeUpload := func(c C, response string) (bool, error) {
- remote := mockRemoteService(func(w http.ResponseWriter, r *http.Request) {
- c.So(r.URL.Path, ShouldEqual, "/_ah/api/cas/v1/finalize/abc")
- c.So(r.Method, ShouldEqual, "POST")
- w.Write([]byte(response))
+ mockFinalizeUpload := func(c C, reply string) (bool, error) {
+ remote := mockRemoteImpl(c, []expectedHTTPCall{
+ {
+ Method: "POST",
+ Path: "/_ah/api/cas/v1/finalize/abc",
+ Reply: reply,
+ },
})
return remote.finalizeUpload("abc")
}
- mockRegisterInstance := func(c C, response string) (*registerInstanceResponse, error) {
- remote := mockRemoteService(func(w http.ResponseWriter, r *http.Request) {
- c.So(r.URL.Path, ShouldEqual, "/_ah/api/repo/v1/instance")
- c.So(r.URL.Query().Get("package_name"), ShouldEqual, "pkgname")
- c.So(r.URL.Query().Get("instance_id"), ShouldEqual, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa")
- c.So(r.Method, ShouldEqual, "POST")
- w.Write([]byte(response))
+ mockRegisterInstance := func(c C, reply string) (*registerInstanceResponse, error) {
+ remote := mockRemoteImpl(c, []expectedHTTPCall{
+ {
+ Method: "POST",
+ Path: "/_ah/api/repo/v1/instance",
+ Query: url.Values{
+ "package_name": []string{"pkgname"},
+ "instance_id": []string{"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},
+ },
+ Reply: reply,
+ },
})
- return remote.registerInstance("pkgname", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa")
+ return remote.registerInstance(Pin{"pkgname", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"})
}
- mockFetchInstance := func(c C, response string) (*fetchInstanceResponse, error) {
- remote := mockRemoteService(func(w http.ResponseWriter, r *http.Request) {
- c.So(r.URL.Path, ShouldEqual, "/_ah/api/repo/v1/instance")
- c.So(r.URL.Query().Get("package_name"), ShouldEqual, "pkgname")
- c.So(r.URL.Query().Get("instance_id"), ShouldEqual, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa")
- c.So(r.Method, ShouldEqual, "GET")
- w.Write([]byte(response))
+ mockFetchInstance := func(c C, reply string) (*fetchInstanceResponse, error) {
+ remote := mockRemoteImpl(c, []expectedHTTPCall{
+ {
+ Method: "GET",
+ Path: "/_ah/api/repo/v1/instance",
+ Query: url.Values{
+ "package_name": []string{"pkgname"},
+ "instance_id": []string{"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},
+ },
+ Reply: reply,
+ },
})
- return remote.fetchInstance("pkgname", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa")
+ return remote.fetchInstance(Pin{"pkgname", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"})
}
- mockFetchACL := func(c C, response string) ([]PackageACL, error) {
- remote := mockRemoteService(func(w http.ResponseWriter, r *http.Request) {
- c.So(r.URL.Path, ShouldEqual, "/_ah/api/repo/v1/acl")
- c.So(r.URL.Query().Get("package_path"), ShouldEqual, "pkgname")
- c.So(r.Method, ShouldEqual, "GET")
- w.Write([]byte(response))
+ mockFetchACL := func(c C, reply string) ([]PackageACL, error) {
+ remote := mockRemoteImpl(c, []expectedHTTPCall{
+ {
+ Method: "GET",
+ Path: "/_ah/api/repo/v1/acl",
+ Query: url.Values{"package_path": []string{"pkgname"}},
+ Reply: reply,
+ },
})
return remote.fetchACL("pkgname")
}
- mockModifyACL := func(c C, changes []PackageACLChange, request, response string) error {
- remote := mockRemoteService(func(w http.ResponseWriter, r *http.Request) {
- c.So(r.URL.Path, ShouldEqual, "/_ah/api/repo/v1/acl")
- c.So(r.URL.Query().Get("package_path"), ShouldEqual, "pkgname")
- c.So(r.Method, ShouldEqual, "POST")
- body, err := ioutil.ReadAll(r.Body)
- c.So(err, ShouldBeNil)
- c.So(string(body), ShouldEqual, request)
- w.Write([]byte(response))
+ mockModifyACL := func(c C, changes []PackageACLChange, body, reply string) error {
+ remote := mockRemoteImpl(c, []expectedHTTPCall{
+ {
+ Method: "POST",
+ Path: "/_ah/api/repo/v1/acl",
+ Query: url.Values{"package_path": []string{"pkgname"}},
+ Body: body,
+ Reply: reply,
+ },
})
return remote.modifyACL("pkgname", changes)
}
- mockAttachTags := func(c C, tags []string, request, response string) error {
- remote := mockRemoteService(func(w http.ResponseWriter, r *http.Request) {
- c.So(r.URL.Path, ShouldEqual, "/_ah/api/repo/v1/tags")
- c.So(r.URL.Query().Get("package_name"), ShouldEqual, "pkgname")
- c.So(r.URL.Query().Get("instance_id"), ShouldEqual, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa")
- c.So(r.Method, ShouldEqual, "POST")
- body, err := ioutil.ReadAll(r.Body)
- c.So(err, ShouldBeNil)
- c.So(string(body), ShouldEqual, request)
- w.Write([]byte(response))
+ mockAttachTags := func(c C, tags []string, body, reply string) error {
+ remote := mockRemoteImpl(c, []expectedHTTPCall{
+ {
+ Method: "POST",
+ Path: "/_ah/api/repo/v1/tags",
+ Query: url.Values{
+ "package_name": []string{"pkgname"},
+ "instance_id": []string{"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},
+ },
+ Body: body,
+ Reply: reply,
+ },
})
- return remote.attachTags("pkgname", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", tags)
+ return remote.attachTags(Pin{"pkgname", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"}, tags)
}
Convey("makeRequest POST works", t, func(c C) {
- remote := mockRemoteService(func(w http.ResponseWriter, r *http.Request) {
- c.So(r.Method, ShouldEqual, "POST")
- c.So(r.URL.Path, ShouldEqual, "/_ah/api/cas/v1/method")
- w.Write([]byte(`{"value":"123"}`))
+ remote := mockRemoteImpl(c, []expectedHTTPCall{
+ {
+ Method: "POST",
+ Path: "/_ah/api/cas/v1/method",
+ Reply: `{"value":"123"}`,
+ },
})
var reply struct {
Value string `json:"value"`
@@ -113,10 +126,12 @@ func TestRemoteService(t *testing.T) {
})
Convey("makeRequest GET works", t, func(c C) {
- remote := mockRemoteService(func(w http.ResponseWriter, r *http.Request) {
- c.So(r.Method, ShouldEqual, "GET")
- c.So(r.URL.Path, ShouldEqual, "/_ah/api/cas/v1/method")
- w.Write([]byte(`{"value":"123"}`))
+ remote := mockRemoteImpl(c, []expectedHTTPCall{
+ {
+ Method: "GET",
+ Path: "/_ah/api/cas/v1/method",
+ Reply: `{"value":"123"}`,
+ },
})
var reply struct {
Value string `json:"value"`
@@ -126,46 +141,50 @@ func TestRemoteService(t *testing.T) {
So(reply.Value, ShouldEqual, "123")
})
- Convey("makeRequest handles fatal error", t, func() {
- calls := 0
- remote := mockRemoteService(func(w http.ResponseWriter, r *http.Request) {
- calls++
- w.WriteHeader(403)
+ Convey("makeRequest handles fatal error", t, func(c C) {
+ remote := mockRemoteImpl(c, []expectedHTTPCall{
+ {
+ Method: "POST",
+ Path: "/_ah/api/cas/v1/method",
+ Status: 403,
+ },
})
var reply struct{}
err := remote.makeRequest("cas/v1/method", "POST", nil, &reply)
So(err, ShouldNotBeNil)
- So(calls, ShouldEqual, 1)
- })
-
- Convey("makeRequest handles retries", t, func() {
- mockClock(time.Now())
- calls := 0
- remote := mockRemoteService(func(w http.ResponseWriter, r *http.Request) {
- calls++
- if calls == 1 {
- w.WriteHeader(500)
- } else {
- w.Write([]byte(`{}`))
- }
+ })
+
+ Convey("makeRequest handles retries", t, func(c C) {
+ remote := mockRemoteImpl(c, []expectedHTTPCall{
+ {
+ Method: "POST",
+ Path: "/_ah/api/cas/v1/method",
+ Status: 500,
+ },
+ {
+ Method: "POST",
+ Path: "/_ah/api/cas/v1/method",
+ Reply: `{}`,
+ },
})
var reply struct{}
err := remote.makeRequest("cas/v1/method", "POST", nil, &reply)
So(err, ShouldBeNil)
- So(calls, ShouldEqual, 2)
})
- Convey("makeRequest gives up trying", t, func() {
- mockClock(time.Now())
- calls := 0
- remote := mockRemoteService(func(w http.ResponseWriter, r *http.Request) {
- calls++
- w.WriteHeader(500)
- })
+ Convey("makeRequest gives up trying", t, func(c C) {
+ calls := []expectedHTTPCall{}
+ for i := 0; i < remoteMaxRetries; i++ {
+ calls = append(calls, expectedHTTPCall{
+ Method: "POST",
+ Path: "/_ah/api/cas/v1/method",
+ Status: 500,
+ })
+ }
+ remote := mockRemoteImpl(c, calls)
var reply struct{}
err := remote.makeRequest("cas/v1/method", "POST", nil, &reply)
So(err, ShouldNotBeNil)
- So(calls, ShouldEqual, 10)
})
Convey("initiateUpload ALREADY_UPLOADED", t, func(c C) {
@@ -177,10 +196,7 @@ func TestRemoteService(t *testing.T) {
Convey("initiateUpload SUCCESS", t, func(c C) {
s, err := mockInitiateUpload(c, `{"status":"SUCCESS","upload_session_id":"123","upload_url":"http://localhost"}`)
So(err, ShouldBeNil)
- So(s, ShouldResemble, &uploadSession{
- ID: "123",
- URL: "http://localhost",
- })
+ So(s, ShouldResemble, &UploadSession{"123", "http://localhost"})
})
Convey("initiateUpload ERROR", t, func(c C) {
@@ -195,10 +211,13 @@ func TestRemoteService(t *testing.T) {
So(s, ShouldBeNil)
})
- Convey("initiateUpload bad reply", t, func() {
- remote := mockRemoteService(func(w http.ResponseWriter, r *http.Request) {
- So(r.URL.Path, ShouldEqual, "/_ah/api/cas/v1/upload/SHA1/abc")
- w.WriteHeader(403)
+ Convey("initiateUpload bad reply", t, func(c C) {
+ remote := mockRemoteImpl(c, []expectedHTTPCall{
+ {
+ Method: "POST",
+ Path: "/_ah/api/cas/v1/upload/SHA1/abc",
+ Status: 403,
+ },
})
s, err := remote.initiateUpload("abc")
So(err, ShouldNotBeNil)
@@ -242,9 +261,12 @@ func TestRemoteService(t *testing.T) {
})
Convey("finalizeUpload bad reply", t, func(c C) {
- remote := mockRemoteService(func(w http.ResponseWriter, r *http.Request) {
- c.So(r.URL.Path, ShouldEqual, "/_ah/api/cas/v1/finalize/abc")
- w.WriteHeader(403)
+ remote := mockRemoteImpl(c, []expectedHTTPCall{
+ {
+ Method: "POST",
+ Path: "/_ah/api/cas/v1/finalize/abc",
+ Status: 403,
+ },
})
finished, err := remote.finalizeUpload("abc")
So(err, ShouldNotBeNil)
@@ -253,59 +275,52 @@ func TestRemoteService(t *testing.T) {
Convey("registerInstance REGISTERED", t, func(c C) {
result, err := mockRegisterInstance(c, `{
- "status": "REGISTERED",
- "instance": {
- "registered_by": "user:abc@example.com",
- "registered_ts": "1420244414571500"
- }
- }`)
+ "status": "REGISTERED",
+ "instance": {
+ "registered_by": "user:abc@example.com",
+ "registered_ts": "1420244414571500"
+ }
+ }`)
So(err, ShouldBeNil)
So(result, ShouldResemble, &registerInstanceResponse{
- Info: packageInstanceInfo{
- RegisteredBy: "user:abc@example.com",
- RegisteredTs: time.Unix(0, 1420244414571500000),
- },
+ registeredBy: "user:abc@example.com",
+ registeredTs: time.Unix(0, 1420244414571500000),
})
})
Convey("registerInstance ALREADY_REGISTERED", t, func(c C) {
result, err := mockRegisterInstance(c, `{
- "status": "ALREADY_REGISTERED",
- "instance": {
- "registered_by": "user:abc@example.com",
- "registered_ts": "1420244414571500"
- }
- }`)
+ "status": "ALREADY_REGISTERED",
+ "instance": {
+ "registered_by": "user:abc@example.com",
+ "registered_ts": "1420244414571500"
+ }
+ }`)
So(err, ShouldBeNil)
So(result, ShouldResemble, &registerInstanceResponse{
- AlreadyRegistered: true,
- Info: packageInstanceInfo{
- RegisteredBy: "user:abc@example.com",
- RegisteredTs: time.Unix(0, 1420244414571500000),
- },
+ alreadyRegistered: true,
+ registeredBy: "user:abc@example.com",
+ registeredTs: time.Unix(0, 1420244414571500000),
})
})
Convey("registerInstance UPLOAD_FIRST", t, func(c C) {
result, err := mockRegisterInstance(c, `{
- "status": "UPLOAD_FIRST",
- "upload_session_id": "upload_session_id",
- "upload_url": "http://upload_url"
- }`)
+ "status": "UPLOAD_FIRST",
+ "upload_session_id": "upload_session_id",
+ "upload_url": "http://upload_url"
+ }`)
So(err, ShouldBeNil)
So(result, ShouldResemble, &registerInstanceResponse{
- UploadSession: &uploadSession{
- ID: "upload_session_id",
- URL: "http://upload_url",
- },
+ uploadSession: &UploadSession{"upload_session_id", "http://upload_url"},
})
})
Convey("registerInstance ERROR", t, func(c C) {
result, err := mockRegisterInstance(c, `{
- "status": "ERROR",
- "error_message": "Some error message"
- }`)
+ "status": "ERROR",
+ "error_message": "Some error message"
+ }`)
So(err, ShouldNotBeNil)
So(result, ShouldBeNil)
})
@@ -318,20 +333,18 @@ func TestRemoteService(t *testing.T) {
Convey("fetchInstance SUCCESS", t, func(c C) {
result, err := mockFetchInstance(c, `{
- "status": "SUCCESS",
- "instance": {
- "registered_by": "user:abc@example.com",
- "registered_ts": "1420244414571500"
- },
- "fetch_url": "https://fetch_url"
- }`)
+ "status": "SUCCESS",
+ "instance": {
+ "registered_by": "user:abc@example.com",
+ "registered_ts": "1420244414571500"
+ },
+ "fetch_url": "https://fetch_url"
+ }`)
So(err, ShouldBeNil)
So(result, ShouldResemble, &fetchInstanceResponse{
- Info: packageInstanceInfo{
- RegisteredBy: "user:abc@example.com",
- RegisteredTs: time.Unix(0, 1420244414571500000),
- },
- FetchURL: "https://fetch_url",
+ registeredBy: "user:abc@example.com",
+ registeredTs: time.Unix(0, 1420244414571500000),
+ fetchURL: "https://fetch_url",
})
})
@@ -349,35 +362,35 @@ func TestRemoteService(t *testing.T) {
Convey("fetchInstance ERROR", t, func(c C) {
result, err := mockFetchInstance(c, `{
- "status": "ERROR",
- "error_message": "Some error message"
- }`)
+ "status": "ERROR",
+ "error_message": "Some error message"
+ }`)
So(err, ShouldNotBeNil)
So(result, ShouldBeNil)
})
Convey("fetchACL SUCCESS", t, func(c C) {
result, err := mockFetchACL(c, `{
- "status": "SUCCESS",
- "acls": {
- "acls": [
- {
- "package_path": "a",
- "role": "OWNER",
- "principals": ["user:a", "group:b"],
- "modified_by": "user:abc@example.com",
- "modified_ts": "1420244414571500"
- },
- {
- "package_path": "a/b",
- "role": "READER",
- "principals": ["group:c"],
- "modified_by": "user:abc@example.com",
- "modified_ts": "1420244414571500"
- }
- ]
- }
- }`)
+ "status": "SUCCESS",
+ "acls": {
+ "acls": [
+ {
+ "package_path": "a",
+ "role": "OWNER",
+ "principals": ["user:a", "group:b"],
+ "modified_by": "user:abc@example.com",
+ "modified_ts": "1420244414571500"
+ },
+ {
+ "package_path": "a/b",
+ "role": "READER",
+ "principals": ["group:c"],
+ "modified_by": "user:abc@example.com",
+ "modified_ts": "1420244414571500"
+ }
+ ]
+ }
+ }`)
So(err, ShouldBeNil)
So(result, ShouldResemble, []PackageACL{
{
@@ -399,28 +412,28 @@ func TestRemoteService(t *testing.T) {
Convey("fetchACL ERROR", t, func(c C) {
result, err := mockFetchACL(c, `{
- "status": "ERROR",
- "error_message": "Some error message"
- }`)
+ "status": "ERROR",
+ "error_message": "Some error message"
+ }`)
So(err, ShouldNotBeNil)
So(result, ShouldBeNil)
})
Convey("modifyACL SUCCESS", t, func(c C) {
expected := `{
- "changes": [
- {
- "action": "GRANT",
- "role": "OWNER",
- "principal": "user:a@example.com"
- },
- {
- "action": "REVOKE",
- "role": "READER",
- "principal": "user:b@example.com"
- }
- ]
- }`
+ "changes": [
+ {
+ "action": "GRANT",
+ "role": "OWNER",
+ "principal": "user:a@example.com"
+ },
+ {
+ "action": "REVOKE",
+ "role": "READER",
+ "principal": "user:b@example.com"
+ }
+ ]
+ }`
// Strip " ", "\t" and "\n".
expected = strings.Replace(expected, " ", "", -1)
expected = strings.Replace(expected, "\n", "", -1)
@@ -443,9 +456,9 @@ func TestRemoteService(t *testing.T) {
Convey("modifyACL ERROR", t, func(c C) {
err := mockModifyACL(c, []PackageACLChange{}, `{"changes":null}`, `{
- "status": "ERROR",
- "error_message": "Error message"
- }`)
+ "status": "ERROR",
+ "error_message": "Error message"
+ }`)
So(err, ShouldNotBeNil)
})
@@ -457,13 +470,10 @@ func TestRemoteService(t *testing.T) {
So(err, ShouldBeNil)
})
- Convey("attachTags no tags", t, func(c C) {
- err := mockAttachTags(c, nil, "", "")
- So(err, ShouldNotBeNil)
- })
-
Convey("attachTags bad tag", t, func(c C) {
- err := mockAttachTags(c, []string{"BADTAG"}, "", "")
+ err := mockRemoteImpl(c, nil).attachTags(
+ Pin{"pkgname", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},
+ []string{"BADTAG"})
So(err, ShouldNotBeNil)
})
@@ -486,88 +496,6 @@ func TestRemoteService(t *testing.T) {
////////////////////////////////////////////////////////////////////////////////
-type expectedHTTPCall struct {
- Method string
- Path string
- Reply string
- Query url.Values
- Status int
-}
-
-func mockServerWithMux(mux *http.ServeMux) (*httptest.Server, *http.Client) {
- server := httptest.NewServer(mux)
- transport := &http.Transport{
- Proxy: func(req *http.Request) (*url.URL, error) {
- return url.Parse(server.URL)
- },
- }
- Reset(func() { server.Close() })
- return server, &http.Client{Transport: transport}
-}
-
-func mockServerWithHandler(pattern string, handler http.HandlerFunc) (*httptest.Server, *http.Client) {
- mux := http.NewServeMux()
- mux.HandleFunc(pattern, handler)
- return mockServerWithMux(mux)
-}
-
-func mockRemoteService(handler http.HandlerFunc) *remoteService {
- server, client := mockServerWithHandler("/", handler)
- remote := &remoteService{
- client: client,
- serviceURL: server.URL,
- log: logging.DefaultLogger,
- }
- prev := newRemoteService
- newRemoteService = func(client *http.Client, url string, log logging.Logger) *remoteService {
- return remote
- }
- Reset(func() { newRemoteService = prev })
- return remote
-}
-
-func mockRemoteServiceWithExpectations(expectations []expectedHTTPCall) *remoteService {
- index := 0
- return mockRemoteService(func(w http.ResponseWriter, r *http.Request) {
- // Can't use So(...) assertions here. They are not recognized. Return
- // errors via HTTP instead, to let the main test case catch them.
- msg := ""
- exp := expectedHTTPCall{}
- if index >= len(expectations) {
- msg = "Unexpected call"
- } else {
- // Fill in defaults.
- exp = expectations[index]
- if exp.Method == "" {
- exp.Method = "GET"
- }
- if exp.Query == nil {
- exp.Query = url.Values{}
- }
- // Check that request is what it is expected to be.
- if r.URL.Path != exp.Path {
- msg = fmt.Sprintf("Expecting call to %s, got %s instead", exp.Path, r.URL.Path)
- } else if !reflect.DeepEqual(r.URL.Query(), exp.Query) {
- msg = fmt.Sprintf("Expecting query string %v, got %v instead", exp.Query, r.URL.Query())
- } else if r.Method != exp.Method {
- msg = fmt.Sprintf("Expecting %s to %s, got %s instead", exp.Method, exp.Path, r.Method)
- }
- }
-
- // Error?
- if msg != "" {
- w.WriteHeader(400)
- w.Write([]byte(msg))
- return
- }
-
- // Mocked reply.
- if exp.Status != 0 {
- w.WriteHeader(exp.Status)
- }
- if exp.Reply != "" {
- w.Write([]byte(exp.Reply))
- }
- index++
- })
+func mockRemoteImpl(c C, expectations []expectedHTTPCall) *remoteImpl {
+ return &remoteImpl{mockClient(c, expectations)}
}
« no previous file with comments | « go/src/infra/tools/cipd/remote.go ('k') | go/src/infra/tools/cipd/storage.go » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698