[ARVADOS] created: 2.1.0-16-g70242f2d8

Git user git at public.arvados.org
Fri Oct 16 17:40:23 UTC 2020


        at  70242f2d84699baee2ea0b6995a447b0ba776c14 (commit)


commit 70242f2d84699baee2ea0b6995a447b0ba776c14
Author: Nico Cesar <nico at nicocesar.com>
Date:   Fri Oct 16 13:37:46 2020 -0400

    Initial commit with tests that are failing
    
    this is the verbose log of failing test:
    
    What next? test lib/controller/federation
    ======= test lib/controller/federation
    ok      git.arvados.org/arvados.git/lib/controller/federation   1.178s  coverage: 48.1% of statements
    ======= test lib/controller/federation -- 3s
    Pass: lib/controller/federation tests (3s)
    All test suites passed.
    What next? test lib/controller
    ======= test lib/controller
    
    ----------------------------------------------------------------------
    FAIL: federation_test.go:590: FederationSuite.TestCreateContainerRequestBadToken
    
    time="2020-10-16T17:27:40.958155049Z" level=info msg=request RequestID=req-33wrdjmne2bs1nwkc9z8 remoteAddr="192.0.2.1:1234" reqBytes=24 reqForwardedFor= reqHost=example.com reqMethod=POST reqPath=arvados/v1/container_requests reqQuery="cluster_id=zzzzz"
    time="2020-10-16T17:27:40.958812397Z" level=info msg=response RequestID=req-33wrdjmne2bs1nwkc9z8 remoteAddr="192.0.2.1:1234" reqBytes=24 reqForwardedFor= reqHost=example.com reqMethod=POST reqPath=arvados/v1/container_requests reqQuery="cluster_id=zzzzz" respBody="{\"errors\":[\"badly formatted token\"]}\n" respBytes=37 respStatus="Internal Server Error" respStatusCode=500 timeToStatus=0.000649 timeTotal=0.000655 timeWriteBody=0.000006
    federation_test.go:599:
        c.Check(resp.StatusCode, check.Equals, http.StatusForbidden)
    ... obtained int = 500
    ... expected int = 403
    
    federation_test.go:602:
        c.Check(e["errors"], check.DeepEquals, []string{"invalid API token"})
    ... obtained []string = []string{"badly formatted token"}
    ... expected []string = []string{"invalid API token"}
    
    ----------------------------------------------------------------------
    FAIL: federation_test.go:630: FederationSuite.TestCreateRemoteContainerRequestCheckRuntimeToken
    
    time="2020-10-16T17:27:41.013982673Z" level=info msg=request RequestID=req-1cdwy5iwe0qw3jgxdjf0 remoteAddr="192.0.2.1:1234" reqBytes=165 reqForwardedFor= reqHost=example.com reqMethod=POST reqPath=arvados/v1/container_requests reqQuery="cluster_id=zmock"
    time="2020-10-16T17:27:41.015464942Z" level=info msg=response RequestID=req-1cdwy5iwe0qw3jgxdjf0 remoteAddr="192.0.2.1:1234" reqBytes=165 reqForwardedFor= reqHost=example.com reqMethod=POST reqPath=arvados/v1/container_requests reqQuery="cluster_id=zmock" respBytes=726 respStatus=OK respStatusCode=200 timeToStatus=0.001473 timeTotal=0.001477 timeWriteBody=0.000004
    federation_test.go:659:
        c.Check(json.NewDecoder(s.remoteMockRequests[0].Body).Decode(&cr), check.IsNil)
    ... value *json.SyntaxError = &json.SyntaxError{msg:"invalid character 'c' looking for beginning of value", Offset:1} ("invalid character 'c' looking for beginning of value")
    
    federation_test.go:660:
        c.Check(strings.HasPrefix(cr.ContainerRequest.RuntimeToken, "v2/zzzzz-gj3su-"), check.Equals, true)
    ... obtained bool = false
    ... expected bool = true
    
    ----------------------------------------------------------------------
    FAIL: federation_test.go:664: FederationSuite.TestCreateRemoteContainerRequestCheckSetRuntimeToken
    
    time="2020-10-16T17:27:41.020613425Z" level=info msg=request RequestID=req-12j635qfrmsbx1jludwq remoteAddr="192.0.2.1:1234" reqBytes=193 reqForwardedFor= reqHost=example.com reqMethod=POST reqPath=arvados/v1/container_requests reqQuery="cluster_id=zmock"
    time="2020-10-16T17:27:41.022068784Z" level=info msg=response RequestID=req-12j635qfrmsbx1jludwq remoteAddr="192.0.2.1:1234" reqBytes=193 reqForwardedFor= reqHost=example.com reqMethod=POST reqPath=arvados/v1/container_requests reqQuery="cluster_id=zmock" respBytes=726 respStatus=OK respStatusCode=200 timeToStatus=0.001450 timeTotal=0.001453 timeWriteBody=0.000003
    federation_test.go:690:
        c.Check(json.NewDecoder(s.remoteMockRequests[0].Body).Decode(&cr), check.IsNil)
    ... value *json.SyntaxError = &json.SyntaxError{msg:"invalid character 'c' looking for beginning of value", Offset:1} ("invalid character 'c' looking for beginning of value")
    
    federation_test.go:691:
        c.Check(cr.ContainerRequest.RuntimeToken, check.Equals, "xyz")
    ... obtained string = ""
    ... expected string = "xyz"
    
    ----------------------------------------------------------------------
    FAIL: federation_test.go:694: FederationSuite.TestCreateRemoteContainerRequestRuntimeTokenFromAuth
    
    time="2020-10-16T17:27:41.030750822Z" level=info msg=request RequestID=req-m6xowfzgvbv2zi2sg8jo remoteAddr="192.0.2.1:1234" reqBytes=165 reqForwardedFor= reqHost=example.com reqMethod=POST reqPath=arvados/v1/container_requests reqQuery="cluster_id=zmock"
    time="2020-10-16T17:27:41.031717846Z" level=info msg=response RequestID=req-m6xowfzgvbv2zi2sg8jo remoteAddr="192.0.2.1:1234" reqBytes=165 reqForwardedFor= reqHost=example.com reqMethod=POST reqPath=arvados/v1/container_requests reqQuery="cluster_id=zmock" respBytes=726 respStatus=OK respStatusCode=200 timeToStatus=0.000961 timeTotal=0.000963 timeWriteBody=0.000002
    federation_test.go:719:
        c.Check(json.NewDecoder(s.remoteMockRequests[0].Body).Decode(&cr), check.IsNil)
    ... value *json.SyntaxError = &json.SyntaxError{msg:"invalid character 'c' looking for beginning of value", Offset:1} ("invalid character 'c' looking for beginning of value")
    
    federation_test.go:720:
        c.Check(cr.ContainerRequest.RuntimeToken, check.Equals, arvadostest.ActiveTokenV2)
    ... obtained string = ""
    ... expected string = "v2/zzzzz-gj3su-077z32aux8dg2s1/3kg6k6lzmp9kj5cpkcoxie963cmvjahbt2fod9zru30k1jqdmi"
    
    ----------------------------------------------------------------------
    FAIL: handler_test.go:321: HandlerSuite.TestGetObjects
    
    handler_test.go:351:
        s.CheckObjectType(c, "/arvados/v1/"+url, arvadostest.AdminToken, skippedFields)
    handler_test.go:316:
        c.Errorf("%s's key %q missing on controller's response.", direct["kind"], k)
    ... Error: arvados#containerRequest's key "expires_at" missing on controller's response.
    
    handler_test.go:351:
        s.CheckObjectType(c, "/arvados/v1/"+url, arvadostest.AdminToken, skippedFields)
    handler_test.go:312:
        c.Check(val, check.DeepEquals, direct[k],
            check.Commentf("RailsAPI %s key %q's value %q differs from controller's %q.", direct["kind"], k, direct[k], val))
    ... obtained string = ""
    ... expected = nil
    ... RailsAPI arvados#containerRequest key "log_uuid"'s value %!q(<nil>) differs from controller's "".
    
    handler_test.go:351:
        s.CheckObjectType(c, "/arvados/v1/"+url, arvadostest.AdminToken, skippedFields)
    handler_test.go:312:
        c.Check(val, check.DeepEquals, direct[k],
            check.Commentf("RailsAPI %s key %q's value %q differs from controller's %q.", direct["kind"], k, direct[k], val))
    ... obtained string = ""
    ... expected = nil
    ... RailsAPI arvados#containerRequest key "output_uuid"'s value %!q(<nil>) differs from controller's "".
    
    handler_test.go:351:
        s.CheckObjectType(c, "/arvados/v1/"+url, arvadostest.AdminToken, skippedFields)
    handler_test.go:316:
        c.Errorf("%s's key %q missing on controller's response.", direct["kind"], k)
    ... Error: arvados#containerRequest's key "container_count" missing on controller's response.
    
    handler_test.go:351:
        s.CheckObjectType(c, "/arvados/v1/"+url, arvadostest.AdminToken, skippedFields)
    handler_test.go:312:
        c.Check(val, check.DeepEquals, direct[k],
            check.Commentf("RailsAPI %s key %q's value %q differs from controller's %q.", direct["kind"], k, direct[k], val))
    ... obtained float64 = 0
    ... expected = nil
    ... RailsAPI arvados#containerRequest key "container_count_max"'s value %!q(<nil>) differs from controller's %!q(float64=0).
    
    handler_test.go:351:
        s.CheckObjectType(c, "/arvados/v1/"+url, arvadostest.AdminToken, skippedFields)
    handler_test.go:316:
        c.Errorf("%s's key %q missing on controller's response.", direct["kind"], k)
    ... Error: arvados#containerRequest's key "filters" missing on controller's response.
    
    handler_test.go:351:
        s.CheckObjectType(c, "/arvados/v1/"+url, arvadostest.AdminToken, skippedFields)
    handler_test.go:312:
        c.Check(val, check.DeepEquals, direct[k],
            check.Commentf("RailsAPI %s key %q's value %q differs from controller's %q.", direct["kind"], k, direct[k], val))
    ... obtained string = ""
    ... expected = nil
    ... RailsAPI arvados#containerRequest key "output_name"'s value %!q(<nil>) differs from controller's "".
    
    handler_test.go:351:
        s.CheckObjectType(c, "/arvados/v1/"+url, arvadostest.AdminToken, skippedFields)
    handler_test.go:312:
        c.Check(val, check.DeepEquals, direct[k],
            check.Commentf("RailsAPI %s key %q's value %q differs from controller's %q.", direct["kind"], k, direct[k], val))
    ... obtained map[string]interface {} = map[string]interface {}{"API":interface {}(nil), "keep_cache_ram":0, "ram":123, "vcpus":1}
    ... expected map[string]interface {} = map[string]interface {}{"ram":123, "vcpus":1}
    ... RailsAPI arvados#containerRequest key "runtime_constraints"'s value map["ram":%!q(float64=123) "vcpus":%!q(float64=1)] differs from controller's map["API":<nil> "keep_cache_ram":%!q(float64=0) "ram":%!q(float64=123) "vcpus":%!q(float64=1)].
    
    handler_test.go:351:
        s.CheckObjectType(c, "/arvados/v1/"+url, arvadostest.AdminToken, skippedFields)
    handler_test.go:312:
        c.Check(val, check.DeepEquals, direct[k],
            check.Commentf("RailsAPI %s key %q's value %q differs from controller's %q.", direct["kind"], k, direct[k], val))
    ... obtained map[string]interface {} = map[string]interface {}{"max_run_time":0, "partitions":interface {}(nil), "preemptible":false}
    ... expected map[string]interface {} = map[string]interface {}{}
    ... RailsAPI arvados#containerRequest key "scheduling_parameters"'s value map[] differs from controller's map["max_run_time":%!q(float64=0) "partitions":<nil> "preemptible":%!q(bool=false)].
    
    handler_test.go:351:
        s.CheckObjectType(c, "/arvados/v1/"+url, arvadostest.AdminToken, skippedFields)
    handler_test.go:312:
        c.Check(val, check.DeepEquals, direct[k],
            check.Commentf("RailsAPI %s key %q's value %q differs from controller's %q.", direct["kind"], k, direct[k], val))
    ... obtained string = ""
    ... expected = nil
    ... RailsAPI arvados#containerRequest key "description"'s value %!q(<nil>) differs from controller's "".
    
    handler_test.go:351:
        s.CheckObjectType(c, "/arvados/v1/"+url, arvadostest.AdminToken, skippedFields)
    handler_test.go:312:
        c.Check(val, check.DeepEquals, direct[k],
            check.Commentf("RailsAPI %s key %q's value %q differs from controller's %q.", direct["kind"], k, direct[k], val))
    ... obtained string = ""
    ... expected = nil
    ... RailsAPI arvados#containerRequest key "requesting_container_uuid"'s value %!q(<nil>) differs from controller's "".
    
    ----------------------------------------------------------------------
    FAIL: integration_test.go:43: IntegrationSuite.SetUpSuite
    
    refs #17014
    
    Arvados-DCO-1.1-Signed-off-by: Nico Cesar <nico at curii.com>

diff --git a/lib/controller/federation/conn.go b/lib/controller/federation/conn.go
index f07c3b631..955d184c5 100644
--- a/lib/controller/federation/conn.go
+++ b/lib/controller/federation/conn.go
@@ -328,6 +328,26 @@ func (conn *Conn) ContainerUnlock(ctx context.Context, options arvados.GetOption
 	return conn.chooseBackend(options.UUID).ContainerUnlock(ctx, options)
 }
 
+func (conn *Conn) ContainerRequestList(ctx context.Context, options arvados.ListOptions) (arvados.ContainerRequestList, error) {
+	return conn.generated_ContainerRequestList(ctx, options)
+}
+
+func (conn *Conn) ContainerRequestCreate(ctx context.Context, options arvados.CreateOptions) (arvados.ContainerRequest, error) {
+	return conn.chooseBackend(options.ClusterID).ContainerRequestCreate(ctx, options)
+}
+
+func (conn *Conn) ContainerRequestUpdate(ctx context.Context, options arvados.UpdateOptions) (arvados.ContainerRequest, error) {
+	return conn.chooseBackend(options.UUID).ContainerRequestUpdate(ctx, options)
+}
+
+func (conn *Conn) ContainerRequestGet(ctx context.Context, options arvados.GetOptions) (arvados.ContainerRequest, error) {
+	return conn.chooseBackend(options.UUID).ContainerRequestGet(ctx, options)
+}
+
+func (conn *Conn) ContainerRequestDelete(ctx context.Context, options arvados.DeleteOptions) (arvados.ContainerRequest, error) {
+	return conn.chooseBackend(options.UUID).ContainerRequestDelete(ctx, options)
+}
+
 func (conn *Conn) SpecimenList(ctx context.Context, options arvados.ListOptions) (arvados.SpecimenList, error) {
 	return conn.generated_SpecimenList(ctx, options)
 }
diff --git a/lib/controller/federation/generate.go b/lib/controller/federation/generate.go
index ab5d9966a..9ce7fdcb2 100644
--- a/lib/controller/federation/generate.go
+++ b/lib/controller/federation/generate.go
@@ -52,7 +52,7 @@ func main() {
 		defer out.Close()
 		out.Write(regexp.MustCompile(`(?ms)^.*package .*?import.*?\n\)\n`).Find(buf))
 		io.WriteString(out, "//\n// -- this file is auto-generated -- do not edit -- edit list.go and run \"go generate\" instead --\n//\n\n")
-		for _, t := range []string{"Container", "Specimen", "User"} {
+		for _, t := range []string{"Container", "ContainerRequest", "Specimen", "User"} {
 			_, err := out.Write(bytes.ReplaceAll(orig, []byte("Collection"), []byte(t)))
 			if err != nil {
 				panic(err)
diff --git a/lib/controller/federation/generated.go b/lib/controller/federation/generated.go
index 8745f3b97..ab9db93a4 100755
--- a/lib/controller/federation/generated.go
+++ b/lib/controller/federation/generated.go
@@ -58,6 +58,47 @@ func (conn *Conn) generated_ContainerList(ctx context.Context, options arvados.L
 	return merged, err
 }
 
+func (conn *Conn) generated_ContainerRequestList(ctx context.Context, options arvados.ListOptions) (arvados.ContainerRequestList, error) {
+	var mtx sync.Mutex
+	var merged arvados.ContainerRequestList
+	var needSort atomic.Value
+	needSort.Store(false)
+	err := conn.splitListRequest(ctx, options, func(ctx context.Context, _ string, backend arvados.API, options arvados.ListOptions) ([]string, error) {
+		options.ForwardedFor = conn.cluster.ClusterID + "-" + options.ForwardedFor
+		cl, err := backend.ContainerRequestList(ctx, options)
+		if err != nil {
+			return nil, err
+		}
+		mtx.Lock()
+		defer mtx.Unlock()
+		if len(merged.Items) == 0 {
+			merged = cl
+		} else if len(cl.Items) > 0 {
+			merged.Items = append(merged.Items, cl.Items...)
+			needSort.Store(true)
+		}
+		uuids := make([]string, 0, len(cl.Items))
+		for _, item := range cl.Items {
+			uuids = append(uuids, item.UUID)
+		}
+		return uuids, nil
+	})
+	if needSort.Load().(bool) {
+		// Apply the default/implied order, "modified_at desc"
+		sort.Slice(merged.Items, func(i, j int) bool {
+			mi, mj := merged.Items[i].ModifiedAt, merged.Items[j].ModifiedAt
+			return mj.Before(mi)
+		})
+	}
+	if merged.Items == nil {
+		// Return empty results as [], not null
+		// (https://github.com/golang/go/issues/27589 might be
+		// a better solution in the future)
+		merged.Items = []arvados.ContainerRequest{}
+	}
+	return merged, err
+}
+
 func (conn *Conn) generated_SpecimenList(ctx context.Context, options arvados.ListOptions) (arvados.SpecimenList, error) {
 	var mtx sync.Mutex
 	var merged arvados.SpecimenList
diff --git a/lib/controller/handler.go b/lib/controller/handler.go
index 2dd1d816e..38bd1c20f 100644
--- a/lib/controller/handler.go
+++ b/lib/controller/handler.go
@@ -96,6 +96,8 @@ func (h *Handler) setup() {
 		mux.Handle("/arvados/v1/collections/", rtr)
 		mux.Handle("/arvados/v1/users", rtr)
 		mux.Handle("/arvados/v1/users/", rtr)
+		mux.Handle("/arvados/v1/container_requests", rtr)
+		mux.Handle("/arvados/v1/container_requests/", rtr)
 		mux.Handle("/login", rtr)
 		mux.Handle("/logout", rtr)
 	}
diff --git a/lib/controller/router/router.go b/lib/controller/router/router.go
index 294452434..9fb2a0d32 100644
--- a/lib/controller/router/router.go
+++ b/lib/controller/router/router.go
@@ -168,6 +168,41 @@ func (rtr *router) addRoutes() {
 				return rtr.backend.ContainerDelete(ctx, *opts.(*arvados.DeleteOptions))
 			},
 		},
+		{
+			arvados.EndpointContainerRequestCreate,
+			func() interface{} { return &arvados.CreateOptions{} },
+			func(ctx context.Context, opts interface{}) (interface{}, error) {
+				return rtr.backend.ContainerRequestCreate(ctx, *opts.(*arvados.CreateOptions))
+			},
+		},
+		{
+			arvados.EndpointContainerRequestUpdate,
+			func() interface{} { return &arvados.UpdateOptions{} },
+			func(ctx context.Context, opts interface{}) (interface{}, error) {
+				return rtr.backend.ContainerRequestUpdate(ctx, *opts.(*arvados.UpdateOptions))
+			},
+		},
+		{
+			arvados.EndpointContainerRequestGet,
+			func() interface{} { return &arvados.GetOptions{} },
+			func(ctx context.Context, opts interface{}) (interface{}, error) {
+				return rtr.backend.ContainerRequestGet(ctx, *opts.(*arvados.GetOptions))
+			},
+		},
+		{
+			arvados.EndpointContainerRequestList,
+			func() interface{} { return &arvados.ListOptions{Limit: -1} },
+			func(ctx context.Context, opts interface{}) (interface{}, error) {
+				return rtr.backend.ContainerRequestList(ctx, *opts.(*arvados.ListOptions))
+			},
+		},
+		{
+			arvados.EndpointContainerRequestDelete,
+			func() interface{} { return &arvados.DeleteOptions{} },
+			func(ctx context.Context, opts interface{}) (interface{}, error) {
+				return rtr.backend.ContainerRequestDelete(ctx, *opts.(*arvados.DeleteOptions))
+			},
+		},
 		{
 			arvados.EndpointContainerLock,
 			func() interface{} {
diff --git a/lib/controller/rpc/conn.go b/lib/controller/rpc/conn.go
index cd98b6471..b0987cb46 100644
--- a/lib/controller/rpc/conn.go
+++ b/lib/controller/rpc/conn.go
@@ -286,6 +286,41 @@ func (conn *Conn) ContainerUnlock(ctx context.Context, options arvados.GetOption
 	return resp, err
 }
 
+func (conn *Conn) ContainerRequestCreate(ctx context.Context, options arvados.CreateOptions) (arvados.ContainerRequest, error) {
+	ep := arvados.EndpointContainerRequestCreate
+	var resp arvados.ContainerRequest
+	err := conn.requestAndDecode(ctx, &resp, ep, nil, options)
+	return resp, err
+}
+
+func (conn *Conn) ContainerRequestUpdate(ctx context.Context, options arvados.UpdateOptions) (arvados.ContainerRequest, error) {
+	ep := arvados.EndpointContainerRequestUpdate
+	var resp arvados.ContainerRequest
+	err := conn.requestAndDecode(ctx, &resp, ep, nil, options)
+	return resp, err
+}
+
+func (conn *Conn) ContainerRequestGet(ctx context.Context, options arvados.GetOptions) (arvados.ContainerRequest, error) {
+	ep := arvados.EndpointContainerRequestGet
+	var resp arvados.ContainerRequest
+	err := conn.requestAndDecode(ctx, &resp, ep, nil, options)
+	return resp, err
+}
+
+func (conn *Conn) ContainerRequestList(ctx context.Context, options arvados.ListOptions) (arvados.ContainerRequestList, error) {
+	ep := arvados.EndpointContainerRequestList
+	var resp arvados.ContainerRequestList
+	err := conn.requestAndDecode(ctx, &resp, ep, nil, options)
+	return resp, err
+}
+
+func (conn *Conn) ContainerRequestDelete(ctx context.Context, options arvados.DeleteOptions) (arvados.ContainerRequest, error) {
+	ep := arvados.EndpointContainerRequestDelete
+	var resp arvados.ContainerRequest
+	err := conn.requestAndDecode(ctx, &resp, ep, nil, options)
+	return resp, err
+}
+
 func (conn *Conn) SpecimenCreate(ctx context.Context, options arvados.CreateOptions) (arvados.Specimen, error) {
 	ep := arvados.EndpointSpecimenCreate
 	var resp arvados.Specimen
diff --git a/sdk/go/arvados/api.go b/sdk/go/arvados/api.go
index 5a2cfb880..a11872971 100644
--- a/sdk/go/arvados/api.go
+++ b/sdk/go/arvados/api.go
@@ -41,6 +41,11 @@ var (
 	EndpointContainerDelete               = APIEndpoint{"DELETE", "arvados/v1/containers/{uuid}", ""}
 	EndpointContainerLock                 = APIEndpoint{"POST", "arvados/v1/containers/{uuid}/lock", ""}
 	EndpointContainerUnlock               = APIEndpoint{"POST", "arvados/v1/containers/{uuid}/unlock", ""}
+	EndpointContainerRequestCreate        = APIEndpoint{"POST", "arvados/v1/container_requests", "container_request"}
+	EndpointContainerRequestUpdate        = APIEndpoint{"PATCH", "arvados/v1/container_requests/{uuid}", "container_request"}
+	EndpointContainerRequestGet           = APIEndpoint{"GET", "arvados/v1/container_requests/{uuid}", ""}
+	EndpointContainerRequestList          = APIEndpoint{"GET", "arvados/v1/container_requests", ""}
+	EndpointContainerRequestDelete        = APIEndpoint{"DELETE", "arvados/v1/container_requests/{uuid}", ""}
 	EndpointUserActivate                  = APIEndpoint{"POST", "arvados/v1/users/{uuid}/activate", ""}
 	EndpointUserCreate                    = APIEndpoint{"POST", "arvados/v1/users", "user"}
 	EndpointUserCurrent                   = APIEndpoint{"GET", "arvados/v1/users/current", ""}
@@ -175,6 +180,11 @@ type API interface {
 	ContainerDelete(ctx context.Context, options DeleteOptions) (Container, error)
 	ContainerLock(ctx context.Context, options GetOptions) (Container, error)
 	ContainerUnlock(ctx context.Context, options GetOptions) (Container, error)
+	ContainerRequestCreate(ctx context.Context, options CreateOptions) (ContainerRequest, error)
+	ContainerRequestUpdate(ctx context.Context, options UpdateOptions) (ContainerRequest, error)
+	ContainerRequestGet(ctx context.Context, options GetOptions) (ContainerRequest, error)
+	ContainerRequestList(ctx context.Context, options ListOptions) (ContainerRequestList, error)
+	ContainerRequestDelete(ctx context.Context, options DeleteOptions) (ContainerRequest, error)
 	SpecimenCreate(ctx context.Context, options CreateOptions) (Specimen, error)
 	SpecimenUpdate(ctx context.Context, options UpdateOptions) (Specimen, error)
 	SpecimenGet(ctx context.Context, options GetOptions) (Specimen, error)
diff --git a/sdk/go/arvadostest/api.go b/sdk/go/arvadostest/api.go
index fa5f53936..ce0a913b5 100644
--- a/sdk/go/arvadostest/api.go
+++ b/sdk/go/arvadostest/api.go
@@ -105,6 +105,26 @@ func (as *APIStub) ContainerUnlock(ctx context.Context, options arvados.GetOptio
 	as.appendCall(as.ContainerUnlock, ctx, options)
 	return arvados.Container{}, as.Error
 }
+func (as *APIStub) ContainerRequestCreate(ctx context.Context, options arvados.CreateOptions) (arvados.ContainerRequest, error) {
+	as.appendCall(as.ContainerRequestCreate, ctx, options)
+	return arvados.ContainerRequest{}, as.Error
+}
+func (as *APIStub) ContainerRequestUpdate(ctx context.Context, options arvados.UpdateOptions) (arvados.ContainerRequest, error) {
+	as.appendCall(as.ContainerRequestUpdate, ctx, options)
+	return arvados.ContainerRequest{}, as.Error
+}
+func (as *APIStub) ContainerRequestGet(ctx context.Context, options arvados.GetOptions) (arvados.ContainerRequest, error) {
+	as.appendCall(as.ContainerRequestGet, ctx, options)
+	return arvados.ContainerRequest{}, as.Error
+}
+func (as *APIStub) ContainerRequestList(ctx context.Context, options arvados.ListOptions) (arvados.ContainerRequestList, error) {
+	as.appendCall(as.ContainerRequestList, ctx, options)
+	return arvados.ContainerRequestList{}, as.Error
+}
+func (as *APIStub) ContainerRequestDelete(ctx context.Context, options arvados.DeleteOptions) (arvados.ContainerRequest, error) {
+	as.appendCall(as.ContainerRequestDelete, ctx, options)
+	return arvados.ContainerRequest{}, as.Error
+}
 func (as *APIStub) SpecimenCreate(ctx context.Context, options arvados.CreateOptions) (arvados.Specimen, error) {
 	as.appendCall(as.SpecimenCreate, ctx, options)
 	return arvados.Specimen{}, as.Error

-----------------------------------------------------------------------


hooks/post-receive
-- 




More information about the arvados-commits mailing list