Merge branch '9848-copy-container-output' refs #9848
[arvados.git] / services / keep-web / server_test.go
index 0a38384f076fe7aba70f1cfe6940decb469e0dbe..6441364e99fcc93d4da26f4c1f6fe150c740be7b 100644 (file)
@@ -6,16 +6,20 @@ import (
        "io"
        "io/ioutil"
        "net"
+       "os"
        "os/exec"
        "strings"
        "testing"
 
+       "git.curoverse.com/arvados.git/sdk/go/arvados"
        "git.curoverse.com/arvados.git/sdk/go/arvadosclient"
        "git.curoverse.com/arvados.git/sdk/go/arvadostest"
        "git.curoverse.com/arvados.git/sdk/go/keepclient"
        check "gopkg.in/check.v1"
 )
 
+var testAPIHost = os.Getenv("ARVADOS_API_HOST")
+
 var _ = check.Suite(&IntegrationSuite{})
 
 // IntegrationSuite tests need an API server and a keep-web server
@@ -50,14 +54,18 @@ func (s *IntegrationSuite) TestNoToken(c *check.C) {
 // really works against the server.
 func (s *IntegrationSuite) Test404(c *check.C) {
        for _, uri := range []string{
-               // Routing errors
+               // Routing errors (always 404 regardless of what's stored in Keep)
                "/",
                "/foo",
                "/download",
                "/collections",
                "/collections/",
+               // Implicit/generated index is not implemented yet;
+               // until then, return 404.
                "/collections/" + arvadostest.FooCollection,
                "/collections/" + arvadostest.FooCollection + "/",
+               "/collections/" + arvadostest.FooBarDirCollection + "/dir1",
+               "/collections/" + arvadostest.FooBarDirCollection + "/dir1/",
                // Non-existent file in collection
                "/collections/" + arvadostest.FooCollection + "/theperthcountyconspiracy",
                "/collections/download/" + arvadostest.FooCollection + "/" + arvadostest.ActiveToken + "/theperthcountyconspiracy",
@@ -80,8 +88,14 @@ func (s *IntegrationSuite) Test1GBFile(c *check.C) {
        s.test100BlockFile(c, 10000000)
 }
 
-func (s *IntegrationSuite) Test300MBFile(c *check.C) {
-       s.test100BlockFile(c, 3000000)
+func (s *IntegrationSuite) Test100BlockFile(c *check.C) {
+       if testing.Short() {
+               // 3 MB
+               s.test100BlockFile(c, 30000)
+       } else {
+               // 300 MB
+               s.test100BlockFile(c, 3000000)
+       }
 }
 
 func (s *IntegrationSuite) test100BlockFile(c *check.C, blocksize int) {
@@ -92,7 +106,7 @@ func (s *IntegrationSuite) test100BlockFile(c *check.C, blocksize int) {
        arv, err := arvadosclient.MakeArvadosClient()
        c.Assert(err, check.Equals, nil)
        arv.ApiToken = arvadostest.ActiveToken
-       kc, err := keepclient.MakeKeepClient(&arv)
+       kc, err := keepclient.MakeKeepClient(arv)
        c.Assert(err, check.Equals, nil)
        loc, _, err := kc.PutB(testdata[:])
        c.Assert(err, check.Equals, nil)
@@ -120,7 +134,6 @@ func (s *IntegrationSuite) test100BlockFile(c *check.C, blocksize int) {
 }
 
 type curlCase struct {
-       id      string
        auth    string
        host    string
        path    string
@@ -128,7 +141,7 @@ type curlCase struct {
 }
 
 func (s *IntegrationSuite) Test200(c *check.C) {
-       anonymousTokens = []string{arvadostest.AnonymousToken}
+       s.testServer.Config.AnonymousTokens = []string{arvadostest.AnonymousToken}
        for _, spec := range []curlCase{
                // My collection
                {
@@ -137,6 +150,12 @@ func (s *IntegrationSuite) Test200(c *check.C) {
                        path:    "/foo",
                        dataMD5: "acbd18db4cc2f85cedef654fccc4a4d8",
                },
+               {
+                       auth:    arvadostest.ActiveToken,
+                       host:    arvadostest.FooCollection + ".collections.example.com",
+                       path:    "/foo",
+                       dataMD5: "acbd18db4cc2f85cedef654fccc4a4d8",
+               },
                {
                        host:    strings.Replace(arvadostest.FooPdh, "+", "-", 1) + ".collections.example.com",
                        path:    "/t=" + arvadostest.ActiveToken + "/foo",
@@ -170,7 +189,7 @@ func (s *IntegrationSuite) Test200(c *check.C) {
                        dataMD5: "acbd18db4cc2f85cedef654fccc4a4d8",
                },
 
-               // Anonymously accessible user agreement
+               // Anonymously accessible data
                {
                        path:    "/c=" + arvadostest.HelloWorldCollection + "/Hello%20world.txt",
                        dataMD5: "f0ef7081e1539ac00ef5b761b4fb01b3",
@@ -273,12 +292,12 @@ func (s *IntegrationSuite) runCurl(c *check.C, token, host, uri string, args ...
 
 func (s *IntegrationSuite) SetUpSuite(c *check.C) {
        arvadostest.StartAPI()
-       arvadostest.StartKeep()
+       arvadostest.StartKeep(2, true)
 
        arv, err := arvadosclient.MakeArvadosClient()
        c.Assert(err, check.Equals, nil)
        arv.ApiToken = arvadostest.ActiveToken
-       kc, err := keepclient.MakeKeepClient(&arv)
+       kc, err := keepclient.MakeKeepClient(arv)
        c.Assert(err, check.Equals, nil)
        kc.PutB([]byte("Hello world\n"))
        kc.PutB([]byte("foo"))
@@ -286,16 +305,20 @@ func (s *IntegrationSuite) SetUpSuite(c *check.C) {
 }
 
 func (s *IntegrationSuite) TearDownSuite(c *check.C) {
-       arvadostest.StopKeep()
+       arvadostest.StopKeep(2)
        arvadostest.StopAPI()
 }
 
 func (s *IntegrationSuite) SetUpTest(c *check.C) {
        arvadostest.ResetEnv()
-       s.testServer = &server{}
-       var err error
-       address = "127.0.0.1:0"
-       err = s.testServer.Start()
+       s.testServer = &server{Config: &Config{
+               Client: arvados.Client{
+                       APIHost:  testAPIHost,
+                       Insecure: true,
+               },
+               Listen: "127.0.0.1:0",
+       }}
+       err := s.testServer.Start()
        c.Assert(err, check.Equals, nil)
 }