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
- 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:
--- /dev/null
+---
+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.
* "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:
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/*' \
@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
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|
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"]
permission_args=""
fi
-exec keep $permission_args -listen=":25107" -volumes="/keep-data"
+exec keepstore $permission_args -listen=":25107" -volumes="/keep-data"
/* Simple Arvados Go SDK for communicating with API server. */
-package sdk
+package arvadosclient
import (
"bytes"
-package sdk
+package arvadosclient
import (
"fmt"
"net/http"
"os"
"os/exec"
- "strings"
"testing"
)
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) {
+++ /dev/null
-#! /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 $*
// 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
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"
// Information about Arvados and Keep servers.
type KeepClient struct {
- Arvados *sdk.ArvadosClient
+ Arvados *arvadosclient.ArvadosClient
Want_replicas int
Using_proxy bool
service_roots *[]string
// 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,
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"
"net/http"
"os"
"os/exec"
- "strings"
"testing"
)
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))
}
}
}
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)
listener, url := RunBogusKeepServer(st, 2990)
defer listener.Close()
- arv, _ := sdk.MakeArvadosClient()
+ arv, _ := arvadosclient.MakeArvadosClient()
arv.ApiToken = "abc123"
kc, _ := MakeKeepClient(&arv)
"foo",
make(chan string, 2)}
- arv, _ := sdk.MakeArvadosClient()
+ arv, _ := arvadosclient.MakeArvadosClient()
kc, _ := MakeKeepClient(&arv)
kc.Want_replicas = 2
"foo",
make(chan string, 2)}
- arv, _ := sdk.MakeArvadosClient()
+ arv, _ := arvadosclient.MakeArvadosClient()
kc, _ := MakeKeepClient(&arv)
kc.Want_replicas = 2
fh := FailHandler{
make(chan string, 1)}
- arv, err := sdk.MakeArvadosClient()
+ arv, err := arvadosclient.MakeArvadosClient()
kc, _ := MakeKeepClient(&arv)
kc.Want_replicas = 2
fh := FailHandler{
make(chan string, 4)}
- arv, err := sdk.MakeArvadosClient()
+ arv, err := arvadosclient.MakeArvadosClient()
kc, _ := MakeKeepClient(&arv)
kc.Want_replicas = 2
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})
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})
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})
"abc123",
[]byte("foo")}
- arv, err := sdk.MakeArvadosClient()
+ arv, err := arvadosclient.MakeArvadosClient()
kc, _ := MakeKeepClient(&arv)
arv.ApiToken = "abc123"
service_roots := make([]string, 5)
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)
st := StubProxyHandler{make(chan string, 1)}
- arv, err := sdk.MakeArvadosClient()
+ arv, err := arvadosclient.MakeArvadosClient()
kc, _ := MakeKeepClient(&arv)
kc.Want_replicas = 2
st := StubProxyHandler{make(chan string, 1)}
- arv, err := sdk.MakeArvadosClient()
+ arv, err := arvadosclient.MakeArvadosClient()
kc, _ := MakeKeepClient(&arv)
kc.Want_replicas = 3
package keepclient
import (
- "arvados.org/streamer"
+ "git.curoverse.com/arvados.git/sdk/go/streamer"
"errors"
"fmt"
"io"
/dist/
/*.egg
/*.egg-info
-/tmp
+/tests/tmp
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:
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()
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
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)
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))]
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")
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)):
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")
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)
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())
# 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:
+++ /dev/null
-#! /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 $*
+++ /dev/null
-#! /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 $*
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"
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())
}
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"
"net/url"
"os"
"os/exec"
- "strings"
"testing"
"time"
)
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) {
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")
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)
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)
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")
{
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")
"os"
"path"
"regexp"
+ "sort"
+ "strings"
"testing"
)
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)