package main
import (
+ "errors"
"flag"
"fmt"
"git.curoverse.com/arvados.git/sdk/go/arvadosclient"
func main() {
flag.Parse()
if minutesBetweenRuns == 0 {
- err := singlerun()
+ err := singlerun(makeArvadosClient())
if err != nil {
log.Fatalf("Got an error: %v", err)
}
waitTime := time.Minute * time.Duration(minutesBetweenRuns)
for {
log.Println("Beginning Run")
- err := singlerun()
+ err := singlerun(makeArvadosClient())
if err != nil {
log.Printf("Got an error: %v", err)
}
}
}
-func singlerun() error {
+func makeArvadosClient() arvadosclient.ArvadosClient {
arv, err := arvadosclient.MakeArvadosClient()
if err != nil {
- log.Fatalf("Error setting up arvados client %s", err.Error())
+ log.Fatalf("Error setting up arvados client: %s", err)
}
+ return arv
+}
+
+var dataManagerToken string
+func singlerun(arv arvadosclient.ArvadosClient) error {
+ var err error
if is_admin, err := util.UserIsAdmin(arv); err != nil {
- log.Fatalf("Error querying current arvados user %s", err.Error())
+ log.Printf("Error querying current arvados user %s", err.Error())
+ return err
} else if !is_admin {
- log.Fatalf("Current user is not an admin. Datamanager can only be run by admins.")
+ log.Printf("Current user is not an admin. Datamanager can only be run by admins.")
+ return errors.New("Current user is not an admin. Datamanager can only be run by admins.")
}
var arvLogger *logger.Logger
}
// Verify that datamanager token belongs to an admin user
- dataManagerToken := keep.GetDataManagerToken(arvLogger)
+ if dataManagerToken == "" {
+ dataManagerToken = keep.GetDataManagerToken(arvLogger)
+ }
origArvToken := arv.ApiToken
arv.ApiToken = dataManagerToken
if is_admin, err := util.UserIsAdmin(arv); err != nil {
- log.Fatalf("Error querying arvados user for data manager token %s", err.Error())
+ log.Printf("Error querying arvados user for data manager token %s", err.Error())
+ return err
} else if !is_admin {
- log.Fatalf("Datamanager token does not belong to an admin user.")
+ log.Printf("Datamanager token does not belong to an admin user.")
+ return errors.New("Datamanager token does not belong to an admin user.")
}
arv.ApiToken = origArvToken
"git.curoverse.com/arvados.git/sdk/go/keepclient"
"git.curoverse.com/arvados.git/services/datamanager/keep"
"io/ioutil"
- "log"
"net/http"
"os"
"os/exec"
"time"
)
+const ACTIVE_USER_TOKEN = "3kg6k6lzmp9kj5cpkcoxie963cmvjahbt2fod9zru30k1jqdmi"
+
var arv arvadosclient.ArvadosClient
var keepClient *keepclient.KeepClient
var keepServers []string
arvadostest.StartAPI()
arvadostest.StartKeep()
- // make arvadosclient
- var err error
- arv, err = arvadosclient.MakeArvadosClient()
- if err != nil {
- t.Fatalf("Error setting up arvados client: %s", err)
- }
+ arv = makeArvadosClient()
// keep client
keepClient = &keepclient.KeepClient{
}
func dataManagerSingleRun(t *testing.T) {
- err := singlerun()
+ err := singlerun(arv)
if err != nil {
t.Fatalf("Error during singlerun %s", err)
}
Verify block indexes.
*/
func TestPutAndGetBlocks(t *testing.T) {
- log.Print("TestPutAndGetBlocks start")
defer TearDownDataManagerTest(t)
SetupDataManagerTest(t)
}
func TestDatamanagerSingleRunRepeatedly(t *testing.T) {
- log.Print("TestDatamanagerSingleRunRepeatedly start")
-
defer TearDownDataManagerTest(t)
SetupDataManagerTest(t)
for i := 0; i < 10; i++ {
- err := singlerun()
+ err := singlerun(arv)
if err != nil {
t.Fatalf("Got an error during datamanager singlerun: %v", err)
}
}
}
}
+
+func TestRunDatamanagerWithBogusServer(t *testing.T) {
+ defer TearDownDataManagerTest(t)
+ SetupDataManagerTest(t)
+
+ arv.ApiServer = "bogus-server"
+
+ err := singlerun(arv)
+ if err == nil {
+ t.Fatalf("Expected error during singlerun with bogus server")
+ }
+}
+
+func TestRunDatamanagerAsNonAdminUser(t *testing.T) {
+ defer TearDownDataManagerTest(t)
+ SetupDataManagerTest(t)
+
+ arv.ApiToken = ACTIVE_USER_TOKEN
+
+ err := singlerun(arv)
+ if err == nil {
+ t.Fatalf("Expected error during singlerun as non-admin user")
+ }
+}
+
+func TestRunDatamanagerWithNonAdminDataManagerToken(t *testing.T) {
+ defer TearDownDataManagerTest(t)
+ SetupDataManagerTest(t)
+
+ dataManagerToken = ACTIVE_USER_TOKEN
+
+ err := singlerun(arv)
+ if err == nil {
+ t.Fatalf("Expected error during singlerun with non-admin user token as datamanager token")
+ }
+}