// 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" ) // StubResponse struct with response status and body type StubResponse struct { Status int Body string } // 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 *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.Responses[req.URL.Path] if pathResponse.Status == -1 { http.Redirect(resp, req, "/redirect-loop", http.StatusFound) } else if pathResponse.Body != "" { resp.WriteHeader(pathResponse.Status) resp.Write([]byte(pathResponse.Body)) } 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) } }