X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/2e03d03bc55b5a612c2bf04d878a72f2ee420d99..2c0977ca3532844d67ddeec64cf198dca7b3763a:/lib/controller/handler_test.go diff --git a/lib/controller/handler_test.go b/lib/controller/handler_test.go index 39c2b1c68e..1af3ba3626 100644 --- a/lib/controller/handler_test.go +++ b/lib/controller/handler_test.go @@ -19,6 +19,7 @@ import ( "testing" "time" + "git.arvados.org/arvados.git/lib/controller/rpc" "git.arvados.org/arvados.git/sdk/go/arvados" "git.arvados.org/arvados.git/sdk/go/arvadostest" "git.arvados.org/arvados.git/sdk/go/auth" @@ -271,18 +272,20 @@ func (s *HandlerSuite) TestProxyNotFound(c *check.C) { } func (s *HandlerSuite) TestLogoutGoogle(c *check.C) { + s.cluster.Services.Workbench2.ExternalURL = arvados.URL{Scheme: "https", Host: "wb2.example", Path: "/"} s.cluster.Login.Google.Enable = true s.cluster.Login.Google.ClientID = "test" - req := httptest.NewRequest("GET", "https://0.0.0.0:1/logout?return_to=https://example.com/foo", nil) + req := httptest.NewRequest("GET", "https://0.0.0.0:1/logout?return_to=https://wb2.example/", nil) resp := httptest.NewRecorder() s.handler.ServeHTTP(resp, req) if !c.Check(resp.Code, check.Equals, http.StatusFound) { c.Log(resp.Body.String()) } - c.Check(resp.Header().Get("Location"), check.Equals, "https://example.com/foo") + c.Check(resp.Header().Get("Location"), check.Equals, "https://wb2.example/") } func (s *HandlerSuite) TestValidateV1APIToken(c *check.C) { + c.Assert(s.handler.CheckHealth(), check.IsNil) req := httptest.NewRequest("GET", "/arvados/v1/users/current", nil) user, ok, err := s.handler.validateAPItoken(req, arvadostest.ActiveToken) c.Assert(err, check.IsNil) @@ -294,6 +297,7 @@ func (s *HandlerSuite) TestValidateV1APIToken(c *check.C) { } func (s *HandlerSuite) TestValidateV2APIToken(c *check.C) { + c.Assert(s.handler.CheckHealth(), check.IsNil) req := httptest.NewRequest("GET", "/arvados/v1/users/current", nil) user, ok, err := s.handler.validateAPItoken(req, arvadostest.ActiveTokenV2) c.Assert(err, check.IsNil) @@ -336,6 +340,7 @@ func (s *HandlerSuite) TestLogTokenUUID(c *check.C) { } func (s *HandlerSuite) TestCreateAPIToken(c *check.C) { + c.Assert(s.handler.CheckHealth(), check.IsNil) req := httptest.NewRequest("GET", "/arvados/v1/users/current", nil) auth, err := s.handler.createAPItoken(req, arvadostest.ActiveUserUUID, nil) c.Assert(err, check.IsNil) @@ -476,7 +481,7 @@ func (s *HandlerSuite) TestTrashSweep(c *check.C) { coll, err := s.handler.federation.CollectionCreate(ctx, arvados.CreateOptions{Attrs: map[string]interface{}{"name": "test trash sweep"}, EnsureUniqueName: true}) c.Assert(err, check.IsNil) defer s.handler.federation.CollectionDelete(ctx, arvados.DeleteOptions{UUID: coll.UUID}) - db, err := s.handler.db(s.ctx) + db, err := s.handler.dbConnector.GetDB(s.ctx) c.Assert(err, check.IsNil) _, err = db.ExecContext(s.ctx, `update collections set trash_at = $1, delete_at = $2 where uuid = $3`, time.Now().UTC().Add(time.Second/10), time.Now().UTC().Add(time.Hour), coll.UUID) c.Assert(err, check.IsNil) @@ -494,3 +499,67 @@ func (s *HandlerSuite) TestTrashSweep(c *check.C) { time.Sleep(time.Second / 10) } } + +func (s *HandlerSuite) TestContainerLogSweep(c *check.C) { + s.cluster.SystemRootToken = arvadostest.SystemRootToken + s.cluster.Containers.Logging.SweepInterval = arvados.Duration(time.Second / 10) + s.handler.CheckHealth() + ctx := auth.NewContext(s.ctx, &auth.Credentials{Tokens: []string{arvadostest.ActiveTokenV2}}) + logentry, err := s.handler.federation.LogCreate(ctx, arvados.CreateOptions{Attrs: map[string]interface{}{ + "object_uuid": arvadostest.CompletedContainerUUID, + "event_type": "stderr", + "properties": map[string]interface{}{ + "text": "test trash sweep\n", + }, + }}) + c.Assert(err, check.IsNil) + defer s.handler.federation.LogDelete(ctx, arvados.DeleteOptions{UUID: logentry.UUID}) + deadline := time.Now().Add(5 * time.Second) + for { + if time.Now().After(deadline) { + c.Log("timed out") + c.FailNow() + } + logentries, err := s.handler.federation.LogList(ctx, arvados.ListOptions{Filters: []arvados.Filter{{"uuid", "=", logentry.UUID}}, Limit: -1}) + c.Assert(err, check.IsNil) + if len(logentries.Items) == 0 { + break + } + time.Sleep(time.Second / 10) + } +} + +func (s *HandlerSuite) TestLogActivity(c *check.C) { + s.cluster.SystemRootToken = arvadostest.SystemRootToken + s.cluster.Users.ActivityLoggingPeriod = arvados.Duration(24 * time.Hour) + s.handler.CheckHealth() + + testServer := newServerFromIntegrationTestEnv(c) + testServer.Server.Handler = httpserver.AddRequestIDs(httpserver.LogRequests(s.handler)) + c.Assert(testServer.Start(), check.IsNil) + defer testServer.Close() + + u, _ := url.Parse("http://" + testServer.Addr) + client := rpc.NewConn(s.cluster.ClusterID, u, true, rpc.PassthroughTokenProvider) + + starttime := time.Now() + for i := 0; i < 4; i++ { + for _, token := range []string{ + arvadostest.ActiveTokenV2, + arvadostest.ActiveToken, + arvadostest.SpectatorToken, + } { + ctx := auth.NewContext(s.ctx, &auth.Credentials{Tokens: []string{token}}) + _, err := client.CollectionList(ctx, arvados.ListOptions{}) + c.Assert(err, check.IsNil) + } + } + db, err := s.handler.dbConnector.GetDB(s.ctx) + c.Assert(err, check.IsNil) + for _, userUUID := range []string{arvadostest.ActiveUserUUID, arvadostest.SpectatorUserUUID} { + var rows int + err = db.QueryRowContext(s.ctx, `select count(uuid) from logs where object_uuid = $1 and event_at > $2`, arvadostest.ActiveUserUUID, starttime.UTC()).Scan(&rows) + c.Assert(err, check.IsNil) + c.Check(rows, check.Equals, 1, check.Commentf("expect 1 row for user uuid %s", userUUID)) + } +}