5538: update the test case for "error" to use better stub parameters with nil status...
[arvados.git] / sdk / go / util / util.go
index 4505db6a52720ef762a8555d4c95821bd8f7a81c..6bc86250b4e369548d71e77ed38d07413d0d56a7 100644 (file)
@@ -3,40 +3,9 @@
 package util
 
 import (
-       "errors"
        "git.curoverse.com/arvados.git/sdk/go/arvadosclient"
-       "log"
 )
 
-type SdkListResponse interface {
-       NumItemsAvailable() (int, error)
-       NumItemsContained() (int, error)
-}
-
-type UnstructuredSdkListResponse map[string]interface{}
-
-func (m UnstructuredSdkListResponse) NumItemsAvailable() (numAvailable int, err error) {
-       if itemsAvailable, ok := m["items_available"]; !ok {
-               err = errors.New("Could not find \"items_available\" field in " +
-                       "UnstructuredSdkListResponse that NumItemsAvailable was called on.")
-       } else {
-               // TODO(misha): Check whether this assertion will work before casting
-               numAvailable = int(itemsAvailable.(float64))
-       }
-       return
-}
-
-func (m UnstructuredSdkListResponse) NumItemsContained() (numContained int, err error) {
-       if value, ok := m["items"]; ok {
-               // TODO(misha): check whether this assertion will work before casting
-               numContained = len(value.([]interface{}))
-       } else {
-               err = errors.New(`Could not find "items" field in ` +
-                       "UnstructuredSdkListResponse that NumItemsContained was called on.")
-       }
-       return
-}
-
 func UserIsAdmin(arv arvadosclient.ArvadosClient) (is_admin bool, err error) {
        type user struct {
                IsAdmin bool `json:"is_admin"`
@@ -46,38 +15,20 @@ func UserIsAdmin(arv arvadosclient.ArvadosClient) (is_admin bool, err error) {
        return u.IsAdmin, err
 }
 
-// TODO(misha): Consider returning an error here instead of fatal'ing
-func ContainsAllAvailableItems(response SdkListResponse) (containsAll bool, numContained int, numAvailable int) {
-       var err error
-       numContained, err = response.NumItemsContained()
-       if err != nil {
-               log.Fatalf("Error retrieving number of items contained in SDK response: %v",
-                       err)
-       }
-       numAvailable, err = response.NumItemsAvailable()
-       if err != nil {
-               log.Fatalf("Error retrieving number of items available from "+
-                       "SDK response: %v",
-                       err)
+// Returns the total count of a particular type of resource
+//
+//   resource - the arvados resource to count
+// return
+//   count - the number of items of type resource the api server reports, if no error
+//   err - error accessing the resource, or nil if no error
+func NumberItemsAvailable(client arvadosclient.ArvadosClient, resource string) (count int, err error) {
+       var response struct {
+               ItemsAvailable int `json:"items_available"`
        }
-       containsAll = numContained == numAvailable
-       return
-}
-
-func IterateSdkListItems(response map[string]interface{}) (c <-chan map[string]interface{}, err error) {
-       if value, ok := response["items"]; ok {
-               ch := make(chan map[string]interface{})
-               c = ch
-               items := value.([]interface{})
-               go func() {
-                       for _, item := range items {
-                               ch <- item.(map[string]interface{})
-                       }
-                       close(ch)
-               }()
-       } else {
-               err = errors.New("Could not find \"items\" field in response " +
-                       "passed to IterateSdkListItems()")
+       sdkParams := arvadosclient.Dict{"limit": 0}
+       err = client.List(resource, sdkParams, &response)
+       if err == nil {
+               count = response.ItemsAvailable
        }
        return
 }