15851: Return items [], not null, in empty set responses.
authorTom Clegg <tclegg@veritasgenetics.com>
Thu, 21 Nov 2019 15:49:56 +0000 (10:49 -0500)
committerTom Clegg <tclegg@veritasgenetics.com>
Thu, 21 Nov 2019 15:49:56 +0000 (10:49 -0500)
Arvados-DCO-1.1-Signed-off-by: Tom Clegg <tclegg@veritasgenetics.com>

lib/controller/federation/generated.go
lib/controller/federation/list.go
lib/controller/federation/list_test.go
lib/controller/router/router_test.go

index b34b9b165a7f45b0e32b2bf870fe127f1c38bfa7..2e6eda7ff6d5fc3e2ad510bc7fda0414dba68c7c 100755 (executable)
@@ -38,6 +38,12 @@ func (conn *Conn) ContainerList(ctx context.Context, options arvados.ListOptions
                return uuids, nil
        })
        sort.Slice(merged.Items, func(i, j int) bool { return merged.Items[i].UUID < merged.Items[j].UUID })
+       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.Container{}
+       }
        return merged, err
 }
 
@@ -63,5 +69,11 @@ func (conn *Conn) SpecimenList(ctx context.Context, options arvados.ListOptions)
                return uuids, nil
        })
        sort.Slice(merged.Items, func(i, j int) bool { return merged.Items[i].UUID < merged.Items[j].UUID })
+       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.Specimen{}
+       }
        return merged, err
 }
index 6ba184c471a1f4df37493520d7df9c46c7fcfaf7..0c6bef497fabf30d7f6c9a4be8b96981fc9f6540 100644 (file)
@@ -42,6 +42,12 @@ func (conn *Conn) CollectionList(ctx context.Context, options arvados.ListOption
                return uuids, nil
        })
        sort.Slice(merged.Items, func(i, j int) bool { return merged.Items[i].UUID < merged.Items[j].UUID })
+       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.Collection{}
+       }
        return merged, err
 }
 
index c9b981fc15fed27d5fb75131894a2cff6cd77a41..27d6da98c686dba8d7ae156e57ac6aa5b0d86731 100644 (file)
@@ -426,7 +426,7 @@ func (s *CollectionListSuite) test(c *check.C, trial listTrial) {
                c.Logf("returned error string is %q", err)
        } else {
                c.Check(err, check.IsNil)
-               var expectItems []arvados.Collection
+               expectItems := []arvados.Collection{}
                for _, uuid := range trial.expectUUIDs {
                        expectItems = append(expectItems, arvados.Collection{UUID: uuid})
                }
index 3a7045aa4de2681f53af5645d7008d290b035321..a42df278f43043ee7eeb4621d5ecaa2faa0cb275 100644 (file)
@@ -225,6 +225,13 @@ func (s *RouterIntegrationSuite) TestContainerList(c *check.C) {
        c.Check(rr.Code, check.Equals, http.StatusOK)
        c.Check(jresp["items_available"], check.FitsTypeOf, float64(0))
        c.Check(jresp["items_available"].(float64) > 2, check.Equals, true)
+       c.Check(jresp["items"], check.NotNil)
+       c.Check(jresp["items"], check.HasLen, 0)
+
+       _, rr, jresp = doRequest(c, s.rtr, token, "GET", `/arvados/v1/containers?filters=[["uuid","in",[]]]`, nil, nil)
+       c.Check(rr.Code, check.Equals, http.StatusOK)
+       c.Check(jresp["items_available"], check.Equals, float64(0))
+       c.Check(jresp["items"], check.NotNil)
        c.Check(jresp["items"], check.HasLen, 0)
 
        _, rr, jresp = doRequest(c, s.rtr, token, "GET", `/arvados/v1/containers?limit=2&select=["uuid","command"]`, nil, nil)