X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/405386652b50a97b9da8aa442aa5800f6d08f068..28d591b7d82143f35016681b14dfc841b9ef04b2:/sdk/go/arvadostest/stub.go diff --git a/sdk/go/arvadostest/stub.go b/sdk/go/arvadostest/stub.go index 3a40b3c65c..a812a48277 100644 --- a/sdk/go/arvadostest/stub.go +++ b/sdk/go/arvadostest/stub.go @@ -1,59 +1,61 @@ +// Copyright (C) The Arvados Authors. All rights reserved. +// +// SPDX-License-Identifier: Apache-2.0 + package arvadostest import ( "net/http" + "net/url" + + "git.arvados.org/arvados.git/sdk/go/arvados" ) -// StatusAndBody struct with response status and body -type StatusAndBody struct { - ResponseStatus int - ResponseBody string +// StubResponse struct with response status and body +type StubResponse struct { + Status int + Body string } -// APIStub with Data map of path and StatusAndBody -// Ex: /arvados/v1/keep_services = arvadostest.StatusAndBody{200, string(`{}`)} -type APIStub struct { - Data map[string]StatusAndBody +// ServerStub with response map of path and StubResponse +// Ex: /arvados/v1/keep_services = arvadostest.StubResponse{200, string(`{}`)} +type ServerStub struct { + Responses map[string]StubResponse } -func (stub *APIStub) ServeHTTP(resp http.ResponseWriter, req *http.Request) { +func (stub *ServerStub) ServeHTTP(resp http.ResponseWriter, req *http.Request) { if req.URL.Path == "/redirect-loop" { http.Redirect(resp, req, "/redirect-loop", http.StatusFound) return } - pathResponse := stub.Data[req.URL.Path] - if pathResponse.ResponseStatus == -1 { + pathResponse := stub.Responses[req.URL.Path] + if pathResponse.Status == -1 { http.Redirect(resp, req, "/redirect-loop", http.StatusFound) - } else if pathResponse.ResponseBody != "" { - resp.WriteHeader(pathResponse.ResponseStatus) - resp.Write([]byte(pathResponse.ResponseBody)) + } else if pathResponse.Body != "" { + resp.WriteHeader(pathResponse.Status) + resp.Write([]byte(pathResponse.Body)) } else { resp.WriteHeader(500) resp.Write([]byte(``)) } } -// KeepServerStub with Data map of path and StatusAndBody -// Ex: /status.json = arvadostest.StatusAndBody{200, string(`{}`)} -type KeepServerStub struct { - Data map[string]StatusAndBody -} - -func (stub *KeepServerStub) ServeHTTP(resp http.ResponseWriter, req *http.Request) { - if req.URL.Path == "/redirect-loop" { - http.Redirect(resp, req, "/redirect-loop", http.StatusFound) - return - } - - pathResponse := stub.Data[req.URL.Path] - if pathResponse.ResponseStatus == -1 { - http.Redirect(resp, req, "/redirect-loop", http.StatusFound) - } else if pathResponse.ResponseBody != "" { - resp.WriteHeader(pathResponse.ResponseStatus) - resp.Write([]byte(pathResponse.ResponseBody)) - } else { - resp.WriteHeader(500) - resp.Write([]byte(``)) +// SetServiceURL overrides the given service config/discovery with the +// given internalURLs. +// +// ExternalURL is set to the last internalURL, which only aims to +// address the case where there is only one. +// +// SetServiceURL panics on errors. +func SetServiceURL(service *arvados.Service, internalURLs ...string) { + service.InternalURLs = map[arvados.URL]arvados.ServiceInstance{} + for _, u := range internalURLs { + u, err := url.Parse(u) + if err != nil { + panic(err) + } + service.InternalURLs[arvados.URL(*u)] = arvados.ServiceInstance{} + service.ExternalURL = arvados.URL(*u) } }