X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/9cc572d6a44262e21251372e28b549cfc09e681a..4dd55960919ee83018711a7f475db9ba205a698f:/lib/controller/handler_test.go diff --git a/lib/controller/handler_test.go b/lib/controller/handler_test.go index 963fd11594..dfe60d90a5 100644 --- a/lib/controller/handler_test.go +++ b/lib/controller/handler_test.go @@ -5,6 +5,7 @@ package controller import ( + "context" "encoding/json" "net/http" "net/http/httptest" @@ -16,6 +17,7 @@ import ( "git.curoverse.com/arvados.git/sdk/go/arvados" "git.curoverse.com/arvados.git/sdk/go/arvadostest" + "git.curoverse.com/arvados.git/sdk/go/ctxlog" "git.curoverse.com/arvados.git/sdk/go/httpserver" check "gopkg.in/check.v1" ) @@ -30,9 +32,13 @@ var _ = check.Suite(&HandlerSuite{}) type HandlerSuite struct { cluster *arvados.Cluster handler http.Handler + ctx context.Context + cancel context.CancelFunc } func (s *HandlerSuite) SetUpTest(c *check.C) { + s.ctx, s.cancel = context.WithCancel(context.Background()) + s.ctx = ctxlog.Context(s.ctx, ctxlog.New(os.Stderr, "json", "debug")) s.cluster = &arvados.Cluster{ ClusterID: "zzzzz", PostgreSQL: integrationTestCluster().PostgreSQL, @@ -44,7 +50,11 @@ func (s *HandlerSuite) SetUpTest(c *check.C) { }, } node := s.cluster.NodeProfiles["*"] - s.handler = newHandler(s.cluster, &node) + s.handler = newHandler(s.ctx, s.cluster, &node) +} + +func (s *HandlerSuite) TearDownTest(c *check.C) { + s.cancel() } func (s *HandlerSuite) TestProxyDiscoveryDoc(c *check.C) { @@ -128,5 +138,41 @@ func (s *HandlerSuite) TestProxyRedirect(c *check.C) { resp := httptest.NewRecorder() s.handler.ServeHTTP(resp, req) c.Check(resp.Code, check.Equals, http.StatusFound) - c.Check(resp.Header().Get("Location"), check.Matches, `https://0.0.0.0:1/auth/joshid\?return_to=foo&?`) + c.Check(resp.Header().Get("Location"), check.Matches, `https://0.0.0.0:1/auth/joshid\?return_to=%2Cfoo&?`) +} + +func (s *HandlerSuite) TestValidateV1APIToken(c *check.C) { + req := httptest.NewRequest("GET", "/arvados/v1/users/current", nil) + user, err := s.handler.(*Handler).validateAPItoken(req, arvadostest.ActiveToken) + c.Assert(err, check.IsNil) + c.Check(user.Authorization.UUID, check.Equals, arvadostest.ActiveTokenUUID) + c.Check(user.Authorization.APIToken, check.Equals, arvadostest.ActiveToken) + c.Check(user.Authorization.Scopes, check.DeepEquals, []string{"all"}) + c.Check(user.UUID, check.Equals, arvadostest.ActiveUserUUID) +} + +func (s *HandlerSuite) TestValidateV2APIToken(c *check.C) { + req := httptest.NewRequest("GET", "/arvados/v1/users/current", nil) + user, err := s.handler.(*Handler).validateAPItoken(req, arvadostest.ActiveTokenV2) + c.Assert(err, check.IsNil) + c.Check(user.Authorization.UUID, check.Equals, arvadostest.ActiveTokenUUID) + c.Check(user.Authorization.APIToken, check.Equals, arvadostest.ActiveToken) + c.Check(user.Authorization.Scopes, check.DeepEquals, []string{"all"}) + c.Check(user.UUID, check.Equals, arvadostest.ActiveUserUUID) + c.Check(user.Authorization.TokenV2(), check.Equals, arvadostest.ActiveTokenV2) +} + +func (s *HandlerSuite) TestCreateAPIToken(c *check.C) { + req := httptest.NewRequest("GET", "/arvados/v1/users/current", nil) + auth, err := s.handler.(*Handler).createAPItoken(req, arvadostest.ActiveUserUUID, nil) + c.Assert(err, check.IsNil) + c.Check(auth.Scopes, check.DeepEquals, []string{"all"}) + + user, err := s.handler.(*Handler).validateAPItoken(req, auth.TokenV2()) + c.Assert(err, check.IsNil) + c.Check(user.Authorization.UUID, check.Equals, auth.UUID) + c.Check(user.Authorization.APIToken, check.Equals, auth.APIToken) + c.Check(user.Authorization.Scopes, check.DeepEquals, []string{"all"}) + c.Check(user.UUID, check.Equals, arvadostest.ActiveUserUUID) + c.Check(user.Authorization.TokenV2(), check.Equals, auth.TokenV2()) }