X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/59cf374273bfae0baec8370526a747bbb8e5edb7..57074c15587686e066d7e44adec7b6c7154d6ac4:/lib/controller/federation_test.go diff --git a/lib/controller/federation_test.go b/lib/controller/federation_test.go index 6c54fc8d34..8dd8e806de 100644 --- a/lib/controller/federation_test.go +++ b/lib/controller/federation_test.go @@ -23,10 +23,12 @@ import ( var _ = check.Suite(&FederationSuite{}) type FederationSuite struct { - log *logrus.Logger - localServer *httpserver.Server - remoteServer *httpserver.Server - handler *Handler + log *logrus.Logger + localServer *httpserver.Server + remoteServer *httpserver.Server + remoteMock *httpserver.Server + remoteMockRequests []http.Request + handler *Handler } func (s *FederationSuite) SetUpTest(c *check.C) { @@ -37,6 +39,10 @@ func (s *FederationSuite) SetUpTest(c *check.C) { s.remoteServer = newServerFromIntegrationTestEnv(c) c.Assert(s.remoteServer.Start(), check.IsNil) + s.remoteMock = newServerFromIntegrationTestEnv(c) + s.remoteMock.Server.Handler = http.HandlerFunc(s.remoteMockHandler) + c.Assert(s.remoteMock.Start(), check.IsNil) + nodeProfile := arvados.NodeProfile{ Controller: arvados.SystemServiceInstance{Listen: ":"}, RailsAPI: arvados.SystemServiceInstance{Listen: ":1"}, // local reqs will error "connection refused" @@ -49,16 +55,27 @@ func (s *FederationSuite) SetUpTest(c *check.C) { }, NodeProfile: &nodeProfile} s.localServer = newServerFromIntegrationTestEnv(c) s.localServer.Server.Handler = httpserver.AddRequestIDs(httpserver.LogRequests(s.log, s.handler)) + s.handler.Cluster.RemoteClusters = map[string]arvados.RemoteCluster{ "zzzzz": { Host: s.remoteServer.Addr, Proxy: true, Scheme: "http", }, + "zmock": { + Host: s.remoteMock.Addr, + Proxy: true, + Scheme: "http", + }, } + c.Assert(s.localServer.Start(), check.IsNil) } +func (s *FederationSuite) remoteMockHandler(w http.ResponseWriter, req *http.Request) { + s.remoteMockRequests = append(s.remoteMockRequests, *req) +} + func (s *FederationSuite) TearDownTest(c *check.C) { if s.remoteServer != nil { s.remoteServer.Close() @@ -94,7 +111,7 @@ func (s *FederationSuite) TestNoAuth(c *check.C) { func (s *FederationSuite) TestBadAuth(c *check.C) { req := httptest.NewRequest("GET", "/arvados/v1/workflows/"+arvadostest.WorkflowWithDefinitionYAMLUUID, nil) - req.Header.Set("Authorization", "Bearer aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa") + req.Header.Set("Authorization", "Bearer aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa") resp := httptest.NewRecorder() s.handler.ServeHTTP(resp, req) c.Check(resp.Code, check.Equals, http.StatusUnauthorized) @@ -144,15 +161,31 @@ func (s *FederationSuite) TestGetRemoteWorkflow(c *check.C) { c.Check(wf.OwnerUUID, check.Equals, arvadostest.ActiveUserUUID) } +func (s *FederationSuite) TestRemoteWithTokenInQuery(c *check.C) { + req := httptest.NewRequest("GET", "/arvados/v1/workflows/"+strings.Replace(arvadostest.WorkflowWithDefinitionYAMLUUID, "zzzzz-", "zmock-", 1)+"?api_token="+arvadostest.ActiveToken, nil) + s.handler.ServeHTTP(httptest.NewRecorder(), req) + c.Assert(len(s.remoteMockRequests), check.Equals, 1) + c.Check(s.remoteMockRequests[0].URL.String(), check.Not(check.Matches), `.*api_token=.*`) +} + func (s *FederationSuite) TestUpdateRemoteWorkflow(c *check.C) { - req := httptest.NewRequest("PATCH", "/arvados/v1/workflows/"+arvadostest.WorkflowWithDefinitionYAMLUUID, strings.NewReader(url.Values{ - "workflow": {`{"description":"updated by TestUpdateRemoteWorkflow"}`}, - }.Encode())) - req.Header.Set("Content-type", "application/x-www-form-urlencoded") - req.Header.Set("Authorization", "Bearer "+arvadostest.ActiveToken) - resp := httptest.NewRecorder() - s.handler.ServeHTTP(resp, req) - s.checkResponseOK(c, resp) + updateDescription := func(descr string) *httptest.ResponseRecorder { + req := httptest.NewRequest("PATCH", "/arvados/v1/workflows/"+arvadostest.WorkflowWithDefinitionYAMLUUID, strings.NewReader(url.Values{ + "workflow": {`{"description":"` + descr + `"}`}, + }.Encode())) + req.Header.Set("Content-type", "application/x-www-form-urlencoded") + req.Header.Set("Authorization", "Bearer "+arvadostest.ActiveToken) + resp := httptest.NewRecorder() + s.handler.ServeHTTP(resp, req) + s.checkResponseOK(c, resp) + return resp + } + + // Update description twice so running this test twice in a + // row still causes ModifiedAt to change + updateDescription("updated once by TestUpdateRemoteWorkflow") + resp := updateDescription("updated twice by TestUpdateRemoteWorkflow") + var wf arvados.Workflow c.Check(json.Unmarshal(resp.Body.Bytes(), &wf), check.IsNil) c.Check(wf.UUID, check.Equals, arvadostest.WorkflowWithDefinitionYAMLUUID)