Merge branch '18940-go-settings-conf'
[arvados.git] / sdk / go / arvadostest / stub.go
index 3a40b3c65c178831a58bda4fed49d75c825e8e93..a812a482772974425209b79c50815431d94c673b 100644 (file)
@@ -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)
        }
 }