1 // Copyright (C) The Arvados Authors. All rights reserved.
3 // SPDX-License-Identifier: AGPL-3.0
11 "git.arvados.org/arvados.git/sdk/go/arvados"
12 "git.arvados.org/arvados.git/sdk/go/arvadostest"
13 "git.arvados.org/arvados.git/sdk/go/auth"
14 check "gopkg.in/check.v1"
17 var _ = check.Suite(&LoginSuite{})
19 type LoginSuite struct {
23 func (s *LoginSuite) TestDeferToLoginCluster(c *check.C) {
24 s.addHTTPRemote(c, "zhome", &arvadostest.APIStub{})
25 s.cluster.Login.LoginCluster = "zhome"
27 returnTo := "https://app.example.com/foo?bar"
28 for _, remote := range []string{"", "ccccc"} {
29 resp, err := s.fed.Login(context.Background(), arvados.LoginOptions{Remote: remote, ReturnTo: returnTo})
30 c.Check(err, check.IsNil)
31 c.Logf("remote %q -- RedirectLocation %q", remote, resp.RedirectLocation)
32 target, err := url.Parse(resp.RedirectLocation)
33 c.Check(err, check.IsNil)
34 c.Check(target.Host, check.Equals, s.cluster.RemoteClusters["zhome"].Host)
35 c.Check(target.Scheme, check.Equals, "http")
36 c.Check(target.Query().Get("return_to"), check.Equals, returnTo)
37 c.Check(target.Query().Get("remote"), check.Equals, remote)
38 _, remotePresent := target.Query()["remote"]
39 c.Check(remotePresent, check.Equals, remote != "")
43 func (s *LoginSuite) TestLogout(c *check.C) {
44 s.cluster.Login.GoogleClientID = "zzzzzzzzzzzzzz"
45 s.addHTTPRemote(c, "zhome", &arvadostest.APIStub{})
46 s.cluster.Login.LoginCluster = "zhome"
48 returnTo := "https://app.example.com/foo?bar"
49 for _, trial := range []struct {
53 {token: "", target: returnTo},
54 {token: "zzzzzzzzzzzzzzzzzzzzz", target: returnTo},
55 {token: "v2/zzzzz-aaaaa-aaaaaaaaaaaaaaa/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", target: returnTo},
56 {token: "v2/zhome-aaaaa-aaaaaaaaaaaaaaa/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", target: "http://" + s.cluster.RemoteClusters["zhome"].Host + "/logout?" + url.Values{"return_to": {returnTo}}.Encode()},
58 c.Logf("trial %#v", trial)
59 ctx := context.Background()
60 if trial.token != "" {
61 ctx = auth.NewContext(ctx, &auth.Credentials{Tokens: []string{trial.token}})
63 resp, err := s.fed.Logout(ctx, arvados.LogoutOptions{ReturnTo: returnTo})
64 c.Assert(err, check.IsNil)
65 c.Logf(" RedirectLocation %q", resp.RedirectLocation)
66 target, err := url.Parse(resp.RedirectLocation)
67 c.Check(err, check.IsNil)
68 c.Check(target.String(), check.Equals, trial.target)