7490: added several error condition check tests for datamanager/keep package; increas...
[arvados.git] / services / datamanager / datamanager_test.go
index 1d4e1712735f1c669e722b0a140051a4a7857d44..26a2fbf92ba124c8cbe4e534c39931107f084dca 100644 (file)
@@ -16,11 +16,6 @@ import (
        "time"
 )
 
-const (
-       ActiveUserToken = "3kg6k6lzmp9kj5cpkcoxie963cmvjahbt2fod9zru30k1jqdmi"
-       AdminToken = "4axaw8zxe0qm22wa6urpp5nskcne8z88cvbupv653y1njyi05h"
-)
-
 var arv arvadosclient.ArvadosClient
 var keepClient *keepclient.KeepClient
 var keepServers []string
@@ -31,9 +26,14 @@ func SetupDataManagerTest(t *testing.T) {
        // start api and keep servers
        arvadostest.ResetEnv()
        arvadostest.StartAPI()
-       arvadostest.StartKeep()
+       arvadostest.StartKeep(2, false)
 
-       arv = makeArvadosClient()
+       var err error
+       arv, err = makeArvadosClient()
+       if err != nil {
+               t.Fatalf("Error making arvados client: %s", err)
+       }
+       arv.ApiToken = arvadostest.DataManagerToken
 
        // keep client
        keepClient = &keepclient.KeepClient{
@@ -44,7 +44,7 @@ func SetupDataManagerTest(t *testing.T) {
        }
 
        // discover keep services
-       if err := keepClient.DiscoverKeepServers(); err != nil {
+       if err = keepClient.DiscoverKeepServers(); err != nil {
                t.Fatalf("Error discovering keep services: %s", err)
        }
        keepServers = []string{}
@@ -54,7 +54,7 @@ func SetupDataManagerTest(t *testing.T) {
 }
 
 func TearDownDataManagerTest(t *testing.T) {
-       arvadostest.StopKeep()
+       arvadostest.StopKeep(2)
        arvadostest.StopAPI()
 }
 
@@ -124,7 +124,18 @@ func getFirstLocatorFromCollection(t *testing.T, uuid string) string {
        return match[1] + "+" + match[2]
 }
 
+func switchToken(t string) func() {
+       orig := arv.ApiToken
+       restore := func() {
+               arv.ApiToken = orig
+       }
+       arv.ApiToken = t
+       return restore
+}
+
 func getCollection(t *testing.T, uuid string) Dict {
+       defer switchToken(arvadostest.AdminToken)()
+
        getback := make(Dict)
        err := arv.Get("collections", uuid, nil, &getback)
        if err != nil {
@@ -138,6 +149,8 @@ func getCollection(t *testing.T, uuid string) Dict {
 }
 
 func updateCollection(t *testing.T, uuid string, paramName string, paramValue string) {
+       defer switchToken(arvadostest.AdminToken)()
+
        err := arv.Update("collections", uuid, arvadosclient.Dict{
                "collection": arvadosclient.Dict{
                        paramName: paramValue,
@@ -152,6 +165,8 @@ func updateCollection(t *testing.T, uuid string, paramName string, paramValue st
 type Dict map[string]interface{}
 
 func deleteCollection(t *testing.T, uuid string) {
+       defer switchToken(arvadostest.AdminToken)()
+
        getback := make(Dict)
        err := arv.Delete("collections", uuid, nil, &getback)
        if err != nil {
@@ -175,7 +190,7 @@ func getBlockIndexesForServer(t *testing.T, i int) []string {
        path := keepServers[i] + "/index"
        client := http.Client{}
        req, err := http.NewRequest("GET", path, nil)
-       req.Header.Add("Authorization", "OAuth2 " + AdminToken)
+       req.Header.Add("Authorization", "OAuth2 "+arvadostest.DataManagerToken)
        req.Header.Add("Content-Type", "application/octet-stream")
        resp, err := client.Do(req)
        defer resp.Body.Close()
@@ -297,7 +312,7 @@ func backdateBlocks(t *testing.T, oldUnusedBlockLocators []string) {
 func getStatus(t *testing.T, path string) interface{} {
        client := http.Client{}
        req, err := http.NewRequest("GET", path, nil)
-       req.Header.Add("Authorization", "OAuth2 " + AdminToken)
+       req.Header.Add("Authorization", "OAuth2 "+arvadostest.DataManagerToken)
        req.Header.Add("Content-Type", "application/octet-stream")
        resp, err := client.Do(req)
        if err != nil {
@@ -316,10 +331,10 @@ func waitUntilQueuesFinishWork(t *testing.T) {
        for _, ks := range keepServers {
                for done := false; !done; {
                        time.Sleep(100 * time.Millisecond)
-                       s := getStatus(t, ks + "/status.json")
+                       s := getStatus(t, ks+"/status.json")
                        for _, qName := range []string{"PullQueue", "TrashQueue"} {
                                qStatus := s.(map[string]interface{})[qName].(map[string]interface{})
-                               if qStatus["Queued"].(float64) + qStatus["InProgress"].(float64) == 0 {
+                               if qStatus["Queued"].(float64)+qStatus["InProgress"].(float64) == 0 {
                                        done = true
                                }
                        }
@@ -365,26 +380,26 @@ func TestPutAndGetBlocks(t *testing.T) {
        }
 
        // Create a collection that would be deleted later on
-       toBeDeletedCollectionUuid := createCollection(t, "some data for collection creation")
-       toBeDeletedCollectionLocator := getFirstLocatorFromCollection(t, toBeDeletedCollectionUuid)
+       toBeDeletedCollectionUUID := createCollection(t, "some data for collection creation")
+       toBeDeletedCollectionLocator := getFirstLocatorFromCollection(t, toBeDeletedCollectionUUID)
 
        // Create another collection that has the same data as the one of the old blocks
-       oldUsedBlockCollectionUuid := createCollection(t, oldUsedBlockData)
-       oldUsedBlockCollectionLocator := getFirstLocatorFromCollection(t, oldUsedBlockCollectionUuid)
+       oldUsedBlockCollectionUUID := createCollection(t, oldUsedBlockData)
+       oldUsedBlockCollectionLocator := getFirstLocatorFromCollection(t, oldUsedBlockCollectionUUID)
        if oldUsedBlockCollectionLocator != oldUsedBlockLocator {
                t.Fatalf("Locator of the collection with the same data as old block is different %s", oldUsedBlockCollectionLocator)
        }
 
        // Create another collection whose replication level will be changed
-       replicationCollectionUuid := createCollection(t, "replication level on this collection will be reduced")
-       replicationCollectionLocator := getFirstLocatorFromCollection(t, replicationCollectionUuid)
+       replicationCollectionUUID := createCollection(t, "replication level on this collection will be reduced")
+       replicationCollectionLocator := getFirstLocatorFromCollection(t, replicationCollectionUUID)
 
        // Create two collections with same data; one will be deleted later on
        dataForTwoCollections := "one of these collections will be deleted"
-       oneOfTwoWithSameDataUuid := createCollection(t, dataForTwoCollections)
-       oneOfTwoWithSameDataLocator := getFirstLocatorFromCollection(t, oneOfTwoWithSameDataUuid)
-       secondOfTwoWithSameDataUuid := createCollection(t, dataForTwoCollections)
-       secondOfTwoWithSameDataLocator := getFirstLocatorFromCollection(t, secondOfTwoWithSameDataUuid)
+       oneOfTwoWithSameDataUUID := createCollection(t, dataForTwoCollections)
+       oneOfTwoWithSameDataLocator := getFirstLocatorFromCollection(t, oneOfTwoWithSameDataUUID)
+       secondOfTwoWithSameDataUUID := createCollection(t, dataForTwoCollections)
+       secondOfTwoWithSameDataLocator := getFirstLocatorFromCollection(t, secondOfTwoWithSameDataUUID)
        if oneOfTwoWithSameDataLocator != secondOfTwoWithSameDataLocator {
                t.Fatalf("Locators for both these collections expected to be same: %s %s", oneOfTwoWithSameDataLocator, secondOfTwoWithSameDataLocator)
        }
@@ -408,8 +423,8 @@ func TestPutAndGetBlocks(t *testing.T) {
 
        // Backdate the to-be old blocks and delete the collections
        backdateBlocks(t, oldUnusedBlockLocators)
-       deleteCollection(t, toBeDeletedCollectionUuid)
-       deleteCollection(t, secondOfTwoWithSameDataUuid)
+       deleteCollection(t, toBeDeletedCollectionUUID)
+       deleteCollection(t, secondOfTwoWithSameDataUUID)
 
        // Run data manager again
        dataManagerSingleRun(t)
@@ -425,14 +440,14 @@ func TestPutAndGetBlocks(t *testing.T) {
 
        verifyBlocks(t, oldUnusedBlockLocators, expected, 2)
 
-       // Reduce desired replication on replicationCollectionUuid
+       // Reduce desired replication on replicationCollectionUUID
        // collection, and verify that Data Manager does not reduce
        // actual replication any further than that. (It might not
        // reduce actual replication at all; that's OK for this test.)
 
        // Reduce desired replication level.
-       updateCollection(t, replicationCollectionUuid, "replication_desired", "1")
-       collection := getCollection(t, replicationCollectionUuid)
+       updateCollection(t, replicationCollectionUUID, "replication_desired", "1")
+       collection := getCollection(t, replicationCollectionUUID)
        if collection["replication_desired"].(interface{}) != float64(1) {
                t.Fatalf("After update replication_desired is not 1; instead it is %v", collection["replication_desired"])
        }
@@ -504,7 +519,7 @@ func TestRunDatamanagerAsNonAdminUser(t *testing.T) {
        defer TearDownDataManagerTest(t)
        SetupDataManagerTest(t)
 
-       arv.ApiToken = ActiveUserToken
+       arv.ApiToken = arvadostest.ActiveToken
 
        err := singlerun(arv)
        if err == nil {