Merge branch 'master' into 3112-report-bug
authorradhika <radhika@curoverse.com>
Fri, 15 Aug 2014 18:37:17 +0000 (14:37 -0400)
committerradhika <radhika@curoverse.com>
Fri, 15 Aug 2014 18:37:17 +0000 (14:37 -0400)
37 files changed:
.gitignore
doc/_config.yml
doc/sdk/go/index.html.textile.liquid [new file with mode: 0644]
doc/sdk/index.html.textile.liquid
docker/build_tools/Makefile
docker/build_tools/config.rb
docker/keep/Dockerfile
docker/keep/run-keep.in
sdk/go/arvadosclient/arvadosclient.go [moved from sdk/go/src/arvados.org/sdk/sdk.go with 99% similarity]
sdk/go/arvadosclient/arvadosclient_test.go [moved from sdk/go/src/arvados.org/sdk/sdk_test.go with 95% similarity]
sdk/go/go.sh [deleted file]
sdk/go/keepclient/hashcheck.go [moved from sdk/go/src/arvados.org/keepclient/hashcheck.go with 98% similarity]
sdk/go/keepclient/hashcheck_test.go [moved from sdk/go/src/arvados.org/keepclient/hashcheck_test.go with 100% similarity]
sdk/go/keepclient/keepclient.go [moved from sdk/go/src/arvados.org/keepclient/keepclient.go with 97% similarity]
sdk/go/keepclient/keepclient_test.go [moved from sdk/go/src/arvados.org/keepclient/keepclient_test.go with 92% similarity]
sdk/go/keepclient/support.go [moved from sdk/go/src/arvados.org/keepclient/support.go with 99% similarity]
sdk/go/streamer/streamer.go [moved from sdk/go/src/arvados.org/streamer/streamer.go with 100% similarity]
sdk/go/streamer/streamer_test.go [moved from sdk/go/src/arvados.org/streamer/streamer_test.go with 100% similarity]
sdk/go/streamer/transfer.go [moved from sdk/go/src/arvados.org/streamer/transfer.go with 100% similarity]
sdk/python/.gitignore
sdk/python/arvados/collection.py
sdk/python/tests/run_test_server.py
sdk/python/tests/test_arv_put.py
services/crunch/crunchstat/go.sh [deleted file]
services/crunchstat/crunchstat.go [moved from services/crunch/crunchstat/src/arvados.org/crunchstat/crunchstat.go with 100% similarity]
services/keep/go.sh [deleted file]
services/keepproxy/keepproxy.go [moved from services/keep/src/arvados.org/keepproxy/keepproxy.go with 98% similarity]
services/keepproxy/keepproxy_test.go [moved from services/keep/src/arvados.org/keepproxy/keepproxy_test.go with 85% similarity]
services/keepstore/handler_test.go [moved from services/keep/src/keep/handler_test.go with 100% similarity]
services/keepstore/handlers.go [moved from services/keep/src/keep/handlers.go with 100% similarity]
services/keepstore/keepstore.go [moved from services/keep/src/keep/keep.go with 100% similarity]
services/keepstore/keepstore_test.go [moved from services/keep/src/keep/keep_test.go with 97% similarity]
services/keepstore/perms.go [moved from services/keep/src/keep/perms.go with 100% similarity]
services/keepstore/perms_test.go [moved from services/keep/src/keep/perms_test.go with 100% similarity]
services/keepstore/volume.go [moved from services/keep/src/keep/volume.go with 100% similarity]
services/keepstore/volume_unix.go [moved from services/keep/src/keep/volume_unix.go with 100% similarity]
services/keepstore/volume_unix_test.go [moved from services/keep/src/keep/volume_unix_test.go with 100% similarity]

index 0cddee596c4cf665b9359f1a6276c7ecdcfd3d49..8cc6b89324311d0cd7db51f9c6a5e7ba400253dc 100644 (file)
@@ -11,11 +11,9 @@ sdk/perl/Makefile
 sdk/perl/blib
 sdk/perl/pm_to_blib
 */vendor/bundle
-services/keep/bin
-services/keep/pkg
-services/keep/src/github.com
 sdk/java/target
 *.class
 apps/workbench/vendor/bundle
 services/api/vendor/bundle
 sdk/java/log
+sdk/cli/vendor
index e89c89cb0f31abde513cef7b60f6148dd4a5fe1f..3301207250710e9d706d4177c2f12caa3ec257f9 100644 (file)
@@ -60,6 +60,8 @@ navbar:
       - sdk/ruby/index.html.textile.liquid
     - Java:
       - sdk/java/index.html.textile.liquid
+    - Go:
+      - sdk/go/index.html.textile.liquid
     - CLI:
       - sdk/cli/index.html.textile.liquid
   api:
diff --git a/doc/sdk/go/index.html.textile.liquid b/doc/sdk/go/index.html.textile.liquid
new file mode 100644 (file)
index 0000000..0e26369
--- /dev/null
@@ -0,0 +1,65 @@
+---
+layout: default
+navsection: sdk
+navmenu: Go
+title: "Go SDK"
+
+...
+
+The Go ("Golang":http://golang.org) SDK provides a generic set of wrappers so you can make API calls easily.
+
+h3. Installation
+
+You don't need to install anything. Just import the client like this. The go tools will fetch the relevant code and dependencies for you.
+
+<notextile>
+<pre><code class="userinput">import (
+       "git.curoverse.com/arvados.git/sdk/go/keepclient"
+       "git.curoverse.com/arvados.git/sdk/go/arvadosclient"
+)
+</code></pre>
+</notextile>
+
+h3. Examples
+
+Import the module. (We import the log module here too, so we can use it in the subsequent examples.)
+
+<notextile>
+<pre><code class="userinput">import (
+       "git.curoverse.com/arvados.git/sdk/go/keepclient"
+       "git.curoverse.com/arvados.git/sdk/go/arvadosclient"
+       "log"
+)
+</code></pre>
+</notextile>
+
+Set up an API client user agent:
+
+<notextile>
+<pre><code class="userinput">  arv, err := arvadosclient.MakeArvadosClient()
+       if err != nil {
+               log.Fatalf("Error setting up arvados client %s", err.Error())
+       }
+</code></pre>
+</notextile>
+
+Get the User object for the current user:
+
+<notextile>
+<pre><code class="userinput">  type user struct {
+               Uuid         string `json:"uuid"`
+               FullName     int    `json:"full_name"`
+       }
+
+       var u user
+       err := arv.Call("GET", "users", "", "current", nil, &u)
+
+       if err != nil {
+               return err
+       }
+
+       log.Printf("Logged in as %s (uuid %s)", user.Uuid, user.FullName)
+</code></pre>
+</notextile>
+
+A few more usage examples can be found in the services/keepproxy and sdk/go/keepclient directories in the arvados source tree.
index 1b1e18ab9447fbf964e414403003ae980e69926d..db5d6f13b0cbdc08c62f1f156ca70bafdd23e88b 100644 (file)
@@ -10,6 +10,7 @@ This section documents how to access the Arvados API and Keep using various prog
 * "Perl SDK":{{site.baseurl}}/sdk/perl/index.html
 * "Ruby SDK":{{site.baseurl}}/sdk/ruby/index.html
 * "Java SDK":{{site.baseurl}}/sdk/java/index.html
+* "Go SDK":{{site.baseurl}}/sdk/go/index.html
 * "Command line SDK":{{site.baseurl}}/sdk/cli/index.html ("arv")
 
 SDKs not yet implemented:
index eb611eadeb12d2388f771bfc1a0b1cf5e84f1421..7f3ad6913908f088b4eee289c9e6e6292de25667 100644 (file)
@@ -104,6 +104,13 @@ WORKBENCH_GENERATED    = workbench/generated/*
 SSO_GENERATED_IN       = sso/*.in
 SSO_GENERATED          = sso/generated/*
 
+KEEP_DEPS += keep/generated/bin/keepproxy
+KEEP_DEPS += keep/generated/bin/keepstore
+keep/generated/bin/%: $(wildcard build/services/%/*.go)
+       mkdir -p keep/generated/src/git.curoverse.com
+       ln -sfn ../../../../.. keep/generated/src/git.curoverse.com/arvados.git
+       GOPATH=$(shell pwd)/keep/generated go get $(@:keep/generated/bin/%=git.curoverse.com/arvados.git/services/%)
+
 $(BUILD):
        mkdir -p build
        rsync -rlp --exclude=docker/ --exclude='**/log/*' --exclude='**/tmp/*' \
@@ -154,21 +161,17 @@ api-image: passenger-image $(BUILD) $(API_DEPS)
        @echo "Building api-image"
        mkdir -p api/generated
        tar -czf api/generated/api.tar.gz -C build/services api
-       chmod 755 api/generated/setup.sh
-       chmod 755 api/generated/setup-gitolite.sh
        $(DOCKER_BUILD) -t arvados/api api
        date >api-image
 
 shell-image: base-image $(BUILD) $(SHELL_DEPS)
        @echo "Building shell-image"
        mkdir -p shell/generated
-       chmod 755 shell/generated/setup.sh
        $(DOCKER_BUILD) -t arvados/shell shell
        date >shell-image
 
 compute-image: slurm-image $(BUILD) $(COMPUTE_DEPS)
        @echo "Building compute-image"
-       chmod 755 compute/generated/setup.sh
        $(DOCKER_BUILD) -t arvados/compute compute
        date >compute-image
 
index 77c721c61f9ea1cca45302e58bad9c33f9e465de..d8bf256124eeeb387f6af39128b47b4ab35f9aac 100755 (executable)
@@ -40,16 +40,15 @@ else
   globdir = '*'
 end
 
-Dir.glob(globdir + '/generated/*') do |stale_file|
-  File.delete(stale_file)
-end
+FileUtils.rm_r Dir.glob(globdir + '/generated/*')
 
 File.umask(022)
 Dir.glob(globdir + '/*.in') do |template_file|
   generated_dir = File.join(File.dirname(template_file), 'generated')
   Dir.mkdir(generated_dir) unless Dir.exists? generated_dir
   output_path = File.join(generated_dir, File.basename(template_file, '.in'))
-  File.open(output_path, "w") do |output|
+  output_mode = (File.stat(template_file).mode & 0100) ? 0755 : 0644
+  File.open(output_path, "w", output_mode) do |output|
     File.open(template_file) do |input|
       input.each_line do |line|
 
index 240cb39fc5221f9a5020c48cc6c2a1b5ec653660..cd40a72f5b236d9972c710dd30c656a21eaa1607 100644 (file)
@@ -2,20 +2,11 @@
 FROM arvados/debian:wheezy
 MAINTAINER Ward Vandewege <ward@curoverse.com>
 
-RUN echo 'deb http://apt.arvados.org/ wheezy main' > /etc/apt/sources.list.d/apt.arvados.org.list
-
-RUN /usr/bin/apt-key adv --keyserver pgp.mit.edu --recv 1078ECD7
-
-RUN /usr/bin/apt-get update
-
-RUN /usr/bin/apt-get install keep
-
+ADD generated/bin/keepstore /usr/local/bin/
+ADD generated/bin/keepproxy /usr/local/bin/
 ADD generated/run-keep /usr/local/bin/
-RUN chmod +x /usr/local/bin/run-keep
 
 ADD generated/keep_signing_secret /etc/
 
-RUN /bin/chmod a+x /usr/local/bin/run-keep
-
 # Start keep
 CMD ["/usr/local/bin/run-keep"]
index 9525ed5a4c04f68083aee479e3c810e75f3bb084..a0b4cb0d2cb57101f9b287c83fffb2b9e34a7a20 100755 (executable)
@@ -8,4 +8,4 @@ else
     permission_args=""
 fi
 
-exec keep $permission_args -listen=":25107" -volumes="/keep-data"
+exec keepstore $permission_args -listen=":25107" -volumes="/keep-data"
similarity index 99%
rename from sdk/go/src/arvados.org/sdk/sdk.go
rename to sdk/go/arvadosclient/arvadosclient.go
index 9f1880fab18792f2891f205d84cadd5f668baffc..3d5aff7b2325b4d93e3a0afacd71c44329c42f6f 100644 (file)
@@ -1,6 +1,6 @@
 /* Simple Arvados Go SDK for communicating with API server. */
 
-package sdk
+package arvadosclient
 
 import (
        "bytes"
similarity index 95%
rename from sdk/go/src/arvados.org/sdk/sdk_test.go
rename to sdk/go/arvadosclient/arvadosclient_test.go
index 8af848f8d634142bf6e9cfea949384d95b1302cf..678c53310e359c8e8783b5652c9ad6c7bff1e3c9 100644 (file)
@@ -1,4 +1,4 @@
-package sdk
+package arvadosclient
 
 import (
        "fmt"
@@ -6,7 +6,6 @@ import (
        "net/http"
        "os"
        "os/exec"
-       "strings"
        "testing"
 )
 
@@ -21,8 +20,8 @@ var _ = Suite(&ServerRequiredSuite{})
 type ServerRequiredSuite struct{}
 
 func pythonDir() string {
-       gopath := os.Getenv("GOPATH")
-       return fmt.Sprintf("%s/../python/tests", strings.Split(gopath, ":")[0])
+       cwd, _ := os.Getwd()
+       return fmt.Sprintf("%s/../../python/tests", cwd)
 }
 
 func (s *ServerRequiredSuite) SetUpSuite(c *C) {
diff --git a/sdk/go/go.sh b/sdk/go/go.sh
deleted file mode 100755 (executable)
index 5553567..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-#! /bin/sh
-
-# Wraps the 'go' executable with some environment setup.  Sets GOPATH, creates
-# 'pkg' and 'bin' directories, automatically installs dependencies, then runs
-# the underlying 'go' executable with any command line parameters provided to
-# the script.
-
-rootdir=$(readlink -f $(dirname $0))
-GOPATH=$rootdir:$GOPATH
-export GOPATH
-
-mkdir -p $rootdir/pkg
-mkdir -p $rootdir/bin
-
-go get gopkg.in/check.v1
-
-go $*
similarity index 98%
rename from sdk/go/src/arvados.org/keepclient/hashcheck.go
rename to sdk/go/keepclient/hashcheck.go
index a585d0088833d08994b3891361623b3bfeabe78e..1f696d95b64d60f69c772063be7ae5b60e671cca 100644 (file)
@@ -30,9 +30,10 @@ type HashCheckingReader struct {
 // the checksum doesn't match.
 func (this HashCheckingReader) Read(p []byte) (n int, err error) {
        n, err = this.Reader.Read(p)
-       if err == nil {
+       if n > 0 {
                this.Hash.Write(p[:n])
-       } else if err == io.EOF {
+       }
+       if err == io.EOF {
                sum := this.Hash.Sum(make([]byte, 0, this.Hash.Size()))
                if fmt.Sprintf("%x", sum) != this.Check {
                        err = BadChecksum
similarity index 97%
rename from sdk/go/src/arvados.org/keepclient/keepclient.go
rename to sdk/go/keepclient/keepclient.go
index d43a2150f3f0950b692df0344c85983d7f4977e8..e1c25c9e1d82ee5f2f41bbb72182faf5a73b638d 100644 (file)
@@ -2,8 +2,8 @@
 package keepclient
 
 import (
-       "arvados.org/sdk"
-       "arvados.org/streamer"
+       "git.curoverse.com/arvados.git/sdk/go/streamer"
+       "git.curoverse.com/arvados.git/sdk/go/arvadosclient"
        "crypto/md5"
        "errors"
        "fmt"
@@ -33,7 +33,7 @@ const X_Keep_Replicas_Stored = "X-Keep-Replicas-Stored"
 
 // Information about Arvados and Keep servers.
 type KeepClient struct {
-       Arvados       *sdk.ArvadosClient
+       Arvados       *arvadosclient.ArvadosClient
        Want_replicas int
        Using_proxy   bool
        service_roots *[]string
@@ -43,7 +43,7 @@ type KeepClient struct {
 
 // Create a new KeepClient.  This will contact the API server to discover Keep
 // servers.
-func MakeKeepClient(arv *sdk.ArvadosClient) (kc KeepClient, err error) {
+func MakeKeepClient(arv *arvadosclient.ArvadosClient) (kc KeepClient, err error) {
        kc = KeepClient{
                Arvados:       arv,
                Want_replicas: 2,
similarity index 92%
rename from sdk/go/src/arvados.org/keepclient/keepclient_test.go
rename to sdk/go/keepclient/keepclient_test.go
index 5327fb507e9b6de8a323fc9be8738d7d26b6595e..015b24896ebf72ed756509057a7f622f464a4438 100644 (file)
@@ -1,8 +1,8 @@
 package keepclient
 
 import (
-       "arvados.org/sdk"
-       "arvados.org/streamer"
+       "git.curoverse.com/arvados.git/sdk/go/arvadosclient"
+       "git.curoverse.com/arvados.git/sdk/go/streamer"
        "crypto/md5"
        "flag"
        "fmt"
@@ -14,7 +14,6 @@ import (
        "net/http"
        "os"
        "os/exec"
-       "strings"
        "testing"
 )
 
@@ -36,20 +35,36 @@ type ServerRequiredSuite struct{}
 type StandaloneSuite struct{}
 
 func pythonDir() string {
-       gopath := os.Getenv("GOPATH")
-       return fmt.Sprintf("%s/../python/tests", strings.Split(gopath, ":")[0])
+       cwd, _ := os.Getwd()
+       return fmt.Sprintf("%s/../../python/tests", cwd)
 }
 
 func (s *ServerRequiredSuite) SetUpSuite(c *C) {
        if *no_server {
                c.Skip("Skipping tests that require server")
-       } else {
-               os.Chdir(pythonDir())
-               if err := exec.Command("python", "run_test_server.py", "start").Run(); err != nil {
-                       panic("'python run_test_server.py start' returned error")
+               return
+       }
+       os.Chdir(pythonDir())
+       {
+               cmd := exec.Command("python", "run_test_server.py", "start")
+               stderr, err := cmd.StderrPipe()
+               if err != nil {
+                       log.Fatalf("Setting up stderr pipe: %s", err)
+               }
+               go io.Copy(os.Stderr, stderr)
+               if err := cmd.Run(); err != nil {
+                       panic(fmt.Sprintf("'python run_test_server.py start' returned error %s", err))
+               }
+       }
+       {
+               cmd := exec.Command("python", "run_test_server.py", "start_keep")
+               stderr, err := cmd.StderrPipe()
+               if err != nil {
+                       log.Fatalf("Setting up stderr pipe: %s", err)
                }
-               if err := exec.Command("python", "run_test_server.py", "start_keep").Run(); err != nil {
-                       panic("'python run_test_server.py start_keep' returned error")
+               go io.Copy(os.Stderr, stderr)
+               if err := cmd.Run(); err != nil {
+                       panic(fmt.Sprintf("'python run_test_server.py start_keep' returned error %s", err))
                }
        }
 }
@@ -65,7 +80,7 @@ func (s *ServerRequiredSuite) TestMakeKeepClient(c *C) {
        os.Setenv("ARVADOS_API_TOKEN", "4axaw8zxe0qm22wa6urpp5nskcne8z88cvbupv653y1njyi05h")
        os.Setenv("ARVADOS_API_HOST_INSECURE", "true")
 
-       arv, err := sdk.MakeArvadosClient()
+       arv, err := arvadosclient.MakeArvadosClient()
        c.Assert(err, Equals, nil)
 
        kc, err := MakeKeepClient(&arv)
@@ -126,7 +141,7 @@ func UploadToStubHelper(c *C, st http.Handler, f func(KeepClient, string,
        listener, url := RunBogusKeepServer(st, 2990)
        defer listener.Close()
 
-       arv, _ := sdk.MakeArvadosClient()
+       arv, _ := arvadosclient.MakeArvadosClient()
        arv.ApiToken = "abc123"
 
        kc, _ := MakeKeepClient(&arv)
@@ -260,7 +275,7 @@ func (s *StandaloneSuite) TestPutB(c *C) {
                "foo",
                make(chan string, 2)}
 
-       arv, _ := sdk.MakeArvadosClient()
+       arv, _ := arvadosclient.MakeArvadosClient()
        kc, _ := MakeKeepClient(&arv)
 
        kc.Want_replicas = 2
@@ -302,7 +317,7 @@ func (s *StandaloneSuite) TestPutHR(c *C) {
                "foo",
                make(chan string, 2)}
 
-       arv, _ := sdk.MakeArvadosClient()
+       arv, _ := arvadosclient.MakeArvadosClient()
        kc, _ := MakeKeepClient(&arv)
 
        kc.Want_replicas = 2
@@ -356,7 +371,7 @@ func (s *StandaloneSuite) TestPutWithFail(c *C) {
        fh := FailHandler{
                make(chan string, 1)}
 
-       arv, err := sdk.MakeArvadosClient()
+       arv, err := arvadosclient.MakeArvadosClient()
        kc, _ := MakeKeepClient(&arv)
 
        kc.Want_replicas = 2
@@ -405,7 +420,7 @@ func (s *StandaloneSuite) TestPutWithTooManyFail(c *C) {
        fh := FailHandler{
                make(chan string, 4)}
 
-       arv, err := sdk.MakeArvadosClient()
+       arv, err := arvadosclient.MakeArvadosClient()
        kc, _ := MakeKeepClient(&arv)
 
        kc.Want_replicas = 2
@@ -465,7 +480,7 @@ func (s *StandaloneSuite) TestGet(c *C) {
        listener, url := RunBogusKeepServer(st, 2990)
        defer listener.Close()
 
-       arv, err := sdk.MakeArvadosClient()
+       arv, err := arvadosclient.MakeArvadosClient()
        kc, _ := MakeKeepClient(&arv)
        arv.ApiToken = "abc123"
        kc.SetServiceRoots([]string{url})
@@ -491,7 +506,7 @@ func (s *StandaloneSuite) TestGetFail(c *C) {
        listener, url := RunBogusKeepServer(st, 2990)
        defer listener.Close()
 
-       arv, err := sdk.MakeArvadosClient()
+       arv, err := arvadosclient.MakeArvadosClient()
        kc, _ := MakeKeepClient(&arv)
        arv.ApiToken = "abc123"
        kc.SetServiceRoots([]string{url})
@@ -521,7 +536,7 @@ func (s *StandaloneSuite) TestChecksum(c *C) {
        listener, url := RunBogusKeepServer(st, 2990)
        defer listener.Close()
 
-       arv, err := sdk.MakeArvadosClient()
+       arv, err := arvadosclient.MakeArvadosClient()
        kc, _ := MakeKeepClient(&arv)
        arv.ApiToken = "abc123"
        kc.SetServiceRoots([]string{url})
@@ -554,7 +569,7 @@ func (s *StandaloneSuite) TestGetWithFailures(c *C) {
                "abc123",
                []byte("foo")}
 
-       arv, err := sdk.MakeArvadosClient()
+       arv, err := arvadosclient.MakeArvadosClient()
        kc, _ := MakeKeepClient(&arv)
        arv.ApiToken = "abc123"
        service_roots := make([]string, 5)
@@ -589,7 +604,7 @@ func (s *ServerRequiredSuite) TestPutGetHead(c *C) {
        os.Setenv("ARVADOS_API_TOKEN", "4axaw8zxe0qm22wa6urpp5nskcne8z88cvbupv653y1njyi05h")
        os.Setenv("ARVADOS_API_HOST_INSECURE", "true")
 
-       arv, err := sdk.MakeArvadosClient()
+       arv, err := arvadosclient.MakeArvadosClient()
        kc, err := MakeKeepClient(&arv)
        c.Assert(err, Equals, nil)
 
@@ -638,7 +653,7 @@ func (s *StandaloneSuite) TestPutProxy(c *C) {
 
        st := StubProxyHandler{make(chan string, 1)}
 
-       arv, err := sdk.MakeArvadosClient()
+       arv, err := arvadosclient.MakeArvadosClient()
        kc, _ := MakeKeepClient(&arv)
 
        kc.Want_replicas = 2
@@ -669,7 +684,7 @@ func (s *StandaloneSuite) TestPutProxyInsufficientReplicas(c *C) {
 
        st := StubProxyHandler{make(chan string, 1)}
 
-       arv, err := sdk.MakeArvadosClient()
+       arv, err := arvadosclient.MakeArvadosClient()
        kc, _ := MakeKeepClient(&arv)
 
        kc.Want_replicas = 3
similarity index 99%
rename from sdk/go/src/arvados.org/keepclient/support.go
rename to sdk/go/keepclient/support.go
index f3e47f92f5864d2fe3d8b1e06de92e2075f4faf9..ce15ce91adbab7926c0eca76ece43b52ab051bb2 100644 (file)
@@ -2,7 +2,7 @@
 package keepclient
 
 import (
-       "arvados.org/streamer"
+       "git.curoverse.com/arvados.git/sdk/go/streamer"
        "errors"
        "fmt"
        "io"
index 090c08e4c22a7a2138ff7778db3293b2c17f0424..105d068d4b60377ef81bcd0f4af620da766bdb68 100644 (file)
@@ -2,4 +2,4 @@
 /dist/
 /*.egg
 /*.egg-info
-/tmp
+/tests/tmp
index 8fdfcf86c3e8f4bf5e136802ce1329592a53d10b..6cf4d07552183faffb74b13821289e2eae8feb42 100644 (file)
@@ -96,7 +96,7 @@ class CollectionReader(object):
         if re.match(r'[a-f0-9]{32}(\+\d+)?(\+\S+)*$', manifest_locator_or_text):
             self._manifest_locator = manifest_locator_or_text
             self._manifest_text = None
-        elif re.match(r'(\S+)( [a-f0-9]{32}(\+\d+)(\+\S+)*)+( \d+:\d+:\S+)+', manifest_locator_or_text):
+        elif re.match(r'(\S+)( [a-f0-9]{32}(\+\d+)(\+\S+)*)+( \d+:\d+:\S+)+\n', manifest_locator_or_text):
             self._manifest_text = manifest_locator_or_text
             self._manifest_locator = None
         else:
index dc95d8a9a5ac3f0781ed4aec9fa10d713f66479b..8ac34b8ce2b3b90a334bb08a04aa2a5c6147e541 100644 (file)
@@ -20,10 +20,13 @@ if __name__ == '__main__' and os.path.exists(
 import arvados.api
 import arvados.config
 
-ARV_API_SERVER_DIR = '../../../services/api'
-KEEP_SERVER_DIR = '../../../services/keep'
+SERVICES_SRC_DIR = os.path.join(MY_DIRNAME, '../../../services')
 SERVER_PID_PATH = 'tmp/pids/webrick-test.pid'
 WEBSOCKETS_SERVER_PID_PATH = 'tmp/pids/passenger-test.pid'
+if 'GOPATH' in os.environ:
+    gopaths = os.environ['GOPATH'].split(':')
+    gobins = [os.path.join(path, 'bin') for path in gopaths]
+    os.environ['PATH'] = ':'.join(gobins) + ':' + os.environ['PATH']
 
 def find_server_pid(PID_PATH, wait=10):
     now = time.time()
@@ -64,7 +67,7 @@ def kill_server_pid(PID_PATH, wait=10):
 
 def run(websockets=False, reuse_server=False):
     cwd = os.getcwd()
-    os.chdir(os.path.join(MY_DIRNAME, ARV_API_SERVER_DIR))
+    os.chdir(os.path.join(SERVICES_SRC_DIR, 'api'))
 
     if websockets:
         pid_file = WEBSOCKETS_SERVER_PID_PATH
@@ -116,7 +119,7 @@ def run(websockets=False, reuse_server=False):
 
 def stop():
     cwd = os.getcwd()
-    os.chdir(os.path.join(MY_DIRNAME, ARV_API_SERVER_DIR))
+    os.chdir(os.path.join(SERVICES_SRC_DIR, 'api'))
 
     kill_server_pid(WEBSOCKETS_SERVER_PID_PATH, 0)
     kill_server_pid(SERVER_PID_PATH, 0)
@@ -135,7 +138,7 @@ def stop():
 
 def _start_keep(n, keep_args):
     keep0 = tempfile.mkdtemp()
-    keep_cmd = ["bin/keep",
+    keep_cmd = ["keepstore",
                 "-volumes={}".format(keep0),
                 "-listen=:{}".format(25107+n),
                 "-pid={}".format("tmp/keep{}.pid".format(n))]
@@ -153,15 +156,6 @@ def _start_keep(n, keep_args):
 def run_keep(blob_signing_key=None, enforce_permissions=False):
     stop_keep()
 
-    cwd = os.getcwd()
-    os.chdir(os.path.join(MY_DIRNAME, KEEP_SERVER_DIR))
-    if os.environ.get('GOPATH') == None:
-        os.environ["GOPATH"] = os.getcwd()
-    else:
-        os.environ["GOPATH"] = os.getcwd() + ":" + os.environ["GOPATH"]
-
-    subprocess.call(["./go.sh", "install", "keep"])
-
     if not os.path.exists("tmp"):
         os.mkdir("tmp")
 
@@ -191,8 +185,6 @@ def run_keep(blob_signing_key=None, enforce_permissions=False):
     api.keep_disks().create(body={"keep_disk": {"keep_service_uuid": s1["uuid"] } }).execute()
     api.keep_disks().create(body={"keep_disk": {"keep_service_uuid": s2["uuid"] } }).execute()
 
-    os.chdir(cwd)
-
 def _stop_keep(n):
     kill_server_pid("tmp/keep{}.pid".format(n), 0)
     if os.path.exists("tmp/keep{}.volume".format(n)):
@@ -203,26 +195,12 @@ def _stop_keep(n):
         os.remove("tmp/keep.blob_signing_key")
 
 def stop_keep():
-    cwd = os.getcwd()
-    os.chdir(os.path.join(MY_DIRNAME, KEEP_SERVER_DIR))
-
     _stop_keep(0)
     _stop_keep(1)
 
-    os.chdir(cwd)
-
 def run_keep_proxy(auth):
     stop_keep_proxy()
 
-    cwd = os.getcwd()
-    os.chdir(os.path.join(MY_DIRNAME, KEEP_SERVER_DIR))
-    if os.environ.get('GOPATH') == None:
-        os.environ["GOPATH"] = os.getcwd()
-    else:
-        os.environ["GOPATH"] = os.getcwd() + ":" + os.environ["GOPATH"]
-
-    subprocess.call(["./go.sh", "install", "arvados.org/keepproxy"])
-
     if not os.path.exists("tmp"):
         os.mkdir("tmp")
 
@@ -230,7 +208,8 @@ def run_keep_proxy(auth):
     os.environ["ARVADOS_API_HOST_INSECURE"] = "true"
     os.environ["ARVADOS_API_TOKEN"] = fixture("api_client_authorizations")[auth]["api_token"]
 
-    kp0 = subprocess.Popen(["bin/keepproxy", "-pid=tmp/keepproxy.pid", "-listen=:{}".format(25101)])
+    kp0 = subprocess.Popen(["keepproxy",
+                            "-pid=tmp/keepproxy.pid", "-listen=:{}".format(25101)])
 
     authorize_with("admin")
     api = arvados.api('v1', cache=False)
@@ -238,17 +217,12 @@ def run_keep_proxy(auth):
 
     arvados.config.settings()["ARVADOS_KEEP_PROXY"] = "http://localhost:25101"
 
-    os.chdir(cwd)
-
 def stop_keep_proxy():
-    cwd = os.getcwd()
-    os.chdir(os.path.join(MY_DIRNAME, KEEP_SERVER_DIR))
     kill_server_pid("tmp/keepproxy.pid", 0)
-    os.chdir(cwd)
 
 def fixture(fix):
     '''load a fixture yaml file'''
-    with open(os.path.join(MY_DIRNAME, ARV_API_SERVER_DIR, "test", "fixtures",
+    with open(os.path.join(SERVICES_SRC_DIR, 'api', "test", "fixtures",
                            fix + ".yml")) as f:
         return yaml.load(f.read())
 
index 7a827684a33aaf2686a1b947c9797285d4000ca8..9bc385d2e6645cabaf140a7573c13a7705951090 100644 (file)
@@ -466,10 +466,8 @@ class ArvPutIntegrationTest(unittest.TestCase):
         # to provision the Keep server.
         config_blob_signing_key = None
         for config_file in ['application.yml', 'application.default.yml']:
-            with open(os.path.join(os.path.dirname(__file__),
-                                   run_test_server.ARV_API_SERVER_DIR,
-                                   "config",
-                                   config_file)) as f:
+            with open(os.path.join(run_test_server.SERVICES_SRC_DIR,
+                                   "api", "config", config_file)) as f:
                 rails_config = yaml.load(f.read())
                 for config_section in ['test', 'common']:
                     try:
diff --git a/services/crunch/crunchstat/go.sh b/services/crunch/crunchstat/go.sh
deleted file mode 100755 (executable)
index 640a0d2..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-#! /bin/sh
-
-# Wraps the 'go' executable with some environment setup.  Sets GOPATH, creates
-# 'pkg' and 'bin' directories, automatically installs dependencies, then runs
-# the underlying 'go' executable with any command line parameters provided to
-# the script.
-
-rootdir=$(readlink -f $(dirname $0))
-GOPATH=$rootdir:$rootdir/../../sdk/go:$GOPATH
-export GOPATH
-
-mkdir -p $rootdir/pkg
-mkdir -p $rootdir/bin
-
-go $*
diff --git a/services/keep/go.sh b/services/keep/go.sh
deleted file mode 100755 (executable)
index 156fe90..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-#! /bin/sh
-
-# Wraps the 'go' executable with some environment setup.  Sets GOPATH, creates
-# 'pkg' and 'bin' directories, automatically installs dependencies, then runs
-# the underlying 'go' executable with any command line parameters provided to
-# the script.
-
-rootdir=$(readlink -f $(dirname $0))
-GOPATH=$rootdir:$rootdir/../../sdk/go:$GOPATH
-export GOPATH
-
-mkdir -p $rootdir/pkg
-mkdir -p $rootdir/bin
-
-go get github.com/gorilla/mux
-
-go $*
similarity index 98%
rename from services/keep/src/arvados.org/keepproxy/keepproxy.go
rename to services/keepproxy/keepproxy.go
index 367854bed382ec1b17589c825126d5e31a9bf6a6..a927b87ea6575812c1b5fb728e50e946b6b46589 100644 (file)
@@ -1,8 +1,8 @@
 package main
 
 import (
-       "arvados.org/keepclient"
-       "arvados.org/sdk"
+       "git.curoverse.com/arvados.git/sdk/go/keepclient"
+       "git.curoverse.com/arvados.git/sdk/go/arvadosclient"
        "flag"
        "fmt"
        "github.com/gorilla/mux"
@@ -68,7 +68,7 @@ func main() {
 
        flagset.Parse(os.Args[1:])
 
-       arv, err := sdk.MakeArvadosClient()
+       arv, err := arvadosclient.MakeArvadosClient()
        if err != nil {
                log.Fatalf("Error setting up arvados client %s", err.Error())
        }
similarity index 85%
rename from services/keep/src/arvados.org/keepproxy/keepproxy_test.go
rename to services/keepproxy/keepproxy_test.go
index 4bf347890eb01edea36af772fed2bbef9f4f91d1..c4e5ae7258f0963093232f78877820ed15c0296c 100644 (file)
@@ -1,8 +1,8 @@
 package main
 
 import (
-       "arvados.org/keepclient"
-       "arvados.org/sdk"
+       "git.curoverse.com/arvados.git/sdk/go/keepclient"
+       "git.curoverse.com/arvados.git/sdk/go/arvadosclient"
        "crypto/md5"
        "crypto/tls"
        "fmt"
@@ -14,7 +14,6 @@ import (
        "net/url"
        "os"
        "os/exec"
-       "strings"
        "testing"
        "time"
 )
@@ -31,8 +30,8 @@ var _ = Suite(&ServerRequiredSuite{})
 type ServerRequiredSuite struct{}
 
 func pythonDir() string {
-       gopath := os.Getenv("GOPATH")
-       return fmt.Sprintf("%s/../../sdk/python/tests", strings.Split(gopath, ":")[0])
+       cwd, _ := os.Getwd()
+       return fmt.Sprintf("%s/../../sdk/python/tests", cwd)
 }
 
 func (s *ServerRequiredSuite) SetUpSuite(c *C) {
@@ -40,12 +39,27 @@ func (s *ServerRequiredSuite) SetUpSuite(c *C) {
        defer os.Chdir(cwd)
 
        os.Chdir(pythonDir())
-
-       if err := exec.Command("python", "run_test_server.py", "start").Run(); err != nil {
-               panic("'python run_test_server.py start' returned error")
+       {
+               cmd := exec.Command("python", "run_test_server.py", "start")
+               stderr, err := cmd.StderrPipe()
+               if err != nil {
+                       log.Fatalf("Setting up stderr pipe: %s", err)
+               }
+               go io.Copy(os.Stderr, stderr)
+               if err := cmd.Run(); err != nil {
+                       panic(fmt.Sprintf("'python run_test_server.py start' returned error %s", err))
+               }
        }
-       if err := exec.Command("python", "run_test_server.py", "start_keep").Run(); err != nil {
-               panic("'python run_test_server.py start_keep' returned error")
+       {
+               cmd := exec.Command("python", "run_test_server.py", "start_keep")
+               stderr, err := cmd.StderrPipe()
+               if err != nil {
+                       log.Fatalf("Setting up stderr pipe: %s", err)
+               }
+               go io.Copy(os.Stderr, stderr)
+               if err := cmd.Run(); err != nil {
+                       panic(fmt.Sprintf("'python run_test_server.py start_keep' returned error %s", err))
+               }
        }
 
        os.Setenv("ARVADOS_API_HOST", "localhost:3001")
@@ -109,7 +123,7 @@ func runProxy(c *C, args []string, token string, port int) keepclient.KeepClient
 
        os.Setenv("ARVADOS_KEEP_PROXY", fmt.Sprintf("http://localhost:%v", port))
        os.Setenv("ARVADOS_API_TOKEN", token)
-       arv, err := sdk.MakeArvadosClient()
+       arv, err := arvadosclient.MakeArvadosClient()
        kc, err := keepclient.MakeKeepClient(&arv)
        c.Check(kc.Using_proxy, Equals, true)
        c.Check(len(kc.ServiceRoots()), Equals, 1)
@@ -131,7 +145,7 @@ func (s *ServerRequiredSuite) TestPutAskGet(c *C) {
        setupProxyService()
 
        os.Setenv("ARVADOS_EXTERNAL_CLIENT", "true")
-       arv, err := sdk.MakeArvadosClient()
+       arv, err := arvadosclient.MakeArvadosClient()
        kc, err := keepclient.MakeKeepClient(&arv)
        c.Check(kc.Arvados.External, Equals, true)
        c.Check(kc.Using_proxy, Equals, true)
@@ -156,7 +170,7 @@ func (s *ServerRequiredSuite) TestPutAskGet(c *C) {
                var rep int
                var err error
                hash2, rep, err = kc.PutB([]byte("foo"))
-               c.Check(hash2, Equals, fmt.Sprintf("%s+3", hash))
+               c.Check(hash2, Matches, fmt.Sprintf(`^%s\+3(\+.+)?$`, hash))
                c.Check(rep, Equals, 2)
                c.Check(err, Equals, nil)
                log.Print("PutB")
@@ -238,7 +252,7 @@ func (s *ServerRequiredSuite) TestGetDisabled(c *C) {
 
        {
                hash2, rep, err := kc.PutB([]byte("baz"))
-               c.Check(hash2, Equals, fmt.Sprintf("%s+3", hash))
+               c.Check(hash2, Matches, fmt.Sprintf(`^%s\+3(\+.+)?$`, hash))
                c.Check(rep, Equals, 2)
                c.Check(err, Equals, nil)
                log.Print("PutB")
similarity index 97%
rename from services/keep/src/keep/keep_test.go
rename to services/keepstore/keepstore_test.go
index de189b659c0b10db9cfac8490c689ec87537d48b..b153d6dce27309f3cb692ec0d6a84b724386891a 100644 (file)
@@ -7,6 +7,8 @@ import (
        "os"
        "path"
        "regexp"
+       "sort"
+       "strings"
        "testing"
 )
 
@@ -342,11 +344,14 @@ func TestIndex(t *testing.T) {
        vols[1].Put(TEST_HASH_2+".meta", []byte("metadata"))
 
        index := vols[0].Index("") + vols[1].Index("")
-       expected := `^` + TEST_HASH + `\+\d+ \d+\n` +
+       index_rows := strings.Split(index, "\n")
+       sort.Strings(index_rows)
+       sorted_index := strings.Join(index_rows, "\n")
+       expected := `^\n` + TEST_HASH + `\+\d+ \d+\n` +
                TEST_HASH_3 + `\+\d+ \d+\n` +
-               TEST_HASH_2 + `\+\d+ \d+\n$`
+               TEST_HASH_2 + `\+\d+ \d+$`
 
-       match, err := regexp.MatchString(expected, index)
+       match, err := regexp.MatchString(expected, sorted_index)
        if err == nil {
                if !match {
                        t.Errorf("IndexLocators returned:\n%s", index)