7253: Write a test that "does not" fail when an invalid manifest text is retrieved...
[arvados.git] / services / datamanager / collection / collection_test.go
index 07c82e1abc0b5581c523683b4947e7d094f7c9cd..3938b2f3fc984421e688dc08715dba83429d1675 100644 (file)
@@ -1,8 +1,12 @@
 package collection
 
 import (
+       "git.curoverse.com/arvados.git/sdk/go/arvadosclient"
+       "git.curoverse.com/arvados.git/sdk/go/arvadostest"
        "git.curoverse.com/arvados.git/sdk/go/blockdigest"
        . "gopkg.in/check.v1"
+       "net/http"
+       "net/http/httptest"
        "testing"
 )
 
@@ -121,3 +125,65 @@ func (s *MySuite) TestSummarizeOverlapping(checker *C) {
 
        CompareSummarizedReadCollections(checker, rc, expected)
 }
+
+type APITestData struct {
+       // path and response map
+       data map[string]arvadostest.StatusAndBody
+
+       // expected error, if any
+       expectedError string
+}
+
+func (s *MySuite) TestGetCollectionsAndSummarize_DiscoveryError(c *C) {
+       testData := APITestData{}
+       testData.expectedError = "arvados API server error: 500.*"
+       testGetCollectionsAndSummarize(c, testData)
+}
+
+func (s *MySuite) TestGetCollectionsAndSummarize_ApiErrorGetCollections(c *C) {
+       dataMap := make(map[string]arvadostest.StatusAndBody)
+       dataMap["/discovery/v1/apis/arvados/v1/rest"] = arvadostest.StatusAndBody{200, `{"defaultCollectionReplication":2}`}
+       dataMap["/arvados/v1/collections"] = arvadostest.StatusAndBody{-1, ``}
+
+       testData := APITestData{}
+       testData.data = dataMap
+       testData.expectedError = "arvados API server error: 302.*"
+
+       testGetCollectionsAndSummarize(c, testData)
+}
+
+func (s *MySuite) TestGetCollectionsAndSummarize_GetCollectionsBadManifest(c *C) {
+       dataMap := make(map[string]arvadostest.StatusAndBody)
+       dataMap["/discovery/v1/apis/arvados/v1/rest"] = arvadostest.StatusAndBody{200, `{"defaultCollectionReplication":2}`}
+       dataMap["/arvados/v1/collections"] = arvadostest.StatusAndBody{200, `{"items_available":1,"items":[{"modified_at":"2015-11-24T15:04:05Z","manifest_text":"thisisnotavalidmanifest"}]}`}
+
+       testData := APITestData{}
+       testData.data = dataMap
+       testData.expectedError = ".*invalid manifest format.*"
+
+       testGetCollectionsAndSummarize(c, testData)
+}
+
+func testGetCollectionsAndSummarize(c *C, testData APITestData) {
+       apiStub := arvadostest.APIStub{testData.data}
+
+       api := httptest.NewServer(&apiStub)
+       defer api.Close()
+
+       arv := arvadosclient.ArvadosClient{
+               Scheme:    "http",
+               ApiServer: api.URL[7:],
+               ApiToken:  "abc123",
+               Client:    &http.Client{Transport: &http.Transport{}},
+       }
+
+       // GetCollectionsAndSummarize
+       results := GetCollectionsAndSummarize(GetCollectionsParams{arv, nil, 10})
+
+       if testData.expectedError == "" {
+               c.Assert(results.Err, IsNil)
+               c.Assert(results, NotNil)
+       } else {
+               c.Assert(results.Err, ErrorMatches, testData.expectedError)
+       }
+}