Merge branch '21666-provision-test-improvement'
[arvados.git] / lib / controller / rpc / conn_test.go
index eee8db9ac830588754956afc62806b757d72b89a..ed26e041173e31a1ccbd0493426106d46dfcf40a 100644 (file)
@@ -10,6 +10,7 @@ import (
        "os"
        "testing"
 
+       "git.arvados.org/arvados.git/lib/config"
        "git.arvados.org/arvados.git/sdk/go/arvados"
        "git.arvados.org/arvados.git/sdk/go/arvadostest"
        "git.arvados.org/arvados.git/sdk/go/ctxlog"
@@ -39,13 +40,26 @@ type RPCSuite struct {
 func (s *RPCSuite) SetUpTest(c *check.C) {
        ctx := ctxlog.Context(context.Background(), ctxlog.TestLogger(c))
        s.ctx = context.WithValue(ctx, contextKeyTestTokens, []string{arvadostest.ActiveToken})
-       s.conn = NewConn("zzzzz", &url.URL{Scheme: "https", Host: os.Getenv("ARVADOS_TEST_API_HOST")}, true, func(ctx context.Context) ([]string, error) {
+}
+
+func (s *RPCSuite) setupConn(c *check.C, host string) {
+       s.conn = NewConn("zzzzz", &url.URL{Scheme: "https", Host: host}, true, func(ctx context.Context) ([]string, error) {
                tokens, _ := ctx.Value(contextKeyTestTokens).([]string)
                return tokens, nil
        })
 }
 
-func (s *RPCSuite) TestLogin(c *check.C) {
+func (s *RPCSuite) workbench2URL(c *check.C) string {
+       loader := config.NewLoader(nil, s.log)
+       cfg, err := loader.Load()
+       c.Assert(err, check.IsNil)
+       cluster, err := cfg.GetCluster("")
+       c.Assert(err, check.IsNil)
+       return cluster.Services.Workbench2.ExternalURL.String()
+}
+
+func (s *RPCSuite) TestRailsLogin404(c *check.C) {
+       s.setupConn(c, os.Getenv("ARVADOS_TEST_API_HOST"))
        s.ctx = context.Background()
        opts := arvados.LoginOptions{
                ReturnTo: "https://foo.example.com/bar",
@@ -54,17 +68,30 @@ func (s *RPCSuite) TestLogin(c *check.C) {
        c.Check(err.(*arvados.TransactionError).StatusCode, check.Equals, 404)
 }
 
-func (s *RPCSuite) TestLogout(c *check.C) {
+func (s *RPCSuite) TestRailsLogout404(c *check.C) {
+       s.setupConn(c, os.Getenv("ARVADOS_TEST_API_HOST"))
        s.ctx = context.Background()
        opts := arvados.LogoutOptions{
                ReturnTo: "https://foo.example.com/bar",
        }
+       _, err := s.conn.Logout(s.ctx, opts)
+       c.Check(err.(*arvados.TransactionError).StatusCode, check.Equals, 404)
+}
+
+func (s *RPCSuite) TestControllerLogout(c *check.C) {
+       s.setupConn(c, os.Getenv("ARVADOS_API_HOST"))
+       s.ctx = context.Background()
+       url := s.workbench2URL(c)
+       opts := arvados.LogoutOptions{
+               ReturnTo: url,
+       }
        resp, err := s.conn.Logout(s.ctx, opts)
        c.Check(err, check.IsNil)
-       c.Check(resp.RedirectLocation, check.Equals, opts.ReturnTo)
+       c.Check(resp.RedirectLocation, check.Equals, url)
 }
 
 func (s *RPCSuite) TestCollectionCreate(c *check.C) {
+       s.setupConn(c, os.Getenv("ARVADOS_TEST_API_HOST"))
        coll, err := s.conn.CollectionCreate(s.ctx, arvados.CreateOptions{Attrs: map[string]interface{}{
                "owner_uuid":         arvadostest.ActiveUserUUID,
                "portable_data_hash": "d41d8cd98f00b204e9800998ecf8427e+0",
@@ -73,22 +100,24 @@ func (s *RPCSuite) TestCollectionCreate(c *check.C) {
        c.Check(coll.UUID, check.HasLen, 27)
 }
 
-func (s *RPCSuite) TestSpecimenCRUD(c *check.C) {
-       sp, err := s.conn.SpecimenCreate(s.ctx, arvados.CreateOptions{Attrs: map[string]interface{}{
-               "owner_uuid": arvadostest.ActiveUserUUID,
-               "properties": map[string]string{"foo": "bar"},
+func (s *RPCSuite) TestGroupCRUD(c *check.C) {
+       s.setupConn(c, os.Getenv("ARVADOS_TEST_API_HOST"))
+       sp, err := s.conn.GroupCreate(s.ctx, arvados.CreateOptions{Attrs: map[string]interface{}{
+               "group_class": "project",
+               "owner_uuid":  arvadostest.ActiveUserUUID,
+               "properties":  map[string]string{"foo": "bar"},
        }})
        c.Check(err, check.IsNil)
        c.Check(sp.UUID, check.HasLen, 27)
        c.Check(sp.Properties, check.HasLen, 1)
        c.Check(sp.Properties["foo"], check.Equals, "bar")
 
-       spGet, err := s.conn.SpecimenGet(s.ctx, arvados.GetOptions{UUID: sp.UUID})
+       spGet, err := s.conn.GroupGet(s.ctx, arvados.GetOptions{UUID: sp.UUID})
        c.Check(err, check.IsNil)
        c.Check(spGet.UUID, check.Equals, sp.UUID)
        c.Check(spGet.Properties["foo"], check.Equals, "bar")
 
-       spList, err := s.conn.SpecimenList(s.ctx, arvados.ListOptions{Limit: -1, Filters: []arvados.Filter{{"uuid", "=", sp.UUID}}})
+       spList, err := s.conn.GroupList(s.ctx, arvados.ListOptions{Limit: -1, Filters: []arvados.Filter{{"uuid", "=", sp.UUID}}})
        c.Check(err, check.IsNil)
        c.Check(spList.ItemsAvailable, check.Equals, 1)
        c.Assert(spList.Items, check.HasLen, 1)
@@ -96,12 +125,12 @@ func (s *RPCSuite) TestSpecimenCRUD(c *check.C) {
        c.Check(spList.Items[0].Properties["foo"], check.Equals, "bar")
 
        anonCtx := context.WithValue(context.Background(), contextKeyTestTokens, []string{arvadostest.AnonymousToken})
-       spList, err = s.conn.SpecimenList(anonCtx, arvados.ListOptions{Limit: -1, Filters: []arvados.Filter{{"uuid", "=", sp.UUID}}})
+       spList, err = s.conn.GroupList(anonCtx, arvados.ListOptions{Limit: -1, Filters: []arvados.Filter{{"uuid", "=", sp.UUID}}})
        c.Check(err, check.IsNil)
        c.Check(spList.ItemsAvailable, check.Equals, 0)
        c.Check(spList.Items, check.HasLen, 0)
 
-       spDel, err := s.conn.SpecimenDelete(s.ctx, arvados.DeleteOptions{UUID: sp.UUID})
+       spDel, err := s.conn.GroupDelete(s.ctx, arvados.DeleteOptions{UUID: sp.UUID})
        c.Check(err, check.IsNil)
        c.Check(spDel.UUID, check.Equals, sp.UUID)
 }