[ARVADOS] updated: 1.3.0-965-g74b22016e

Git user git at public.curoverse.com
Tue May 28 14:10:44 UTC 2019


Summary of changes:
 sdk/go/arvados/fs_collection_test.go |   3 +-
 sdk/go/arvados/fs_project_test.go    |   7 +-
 sdk/go/arvados/fs_site_test.go       |  36 ++++++---
 sdk/go/arvadostest/fixtures.go       |   1 -
 sdk/go/arvadostest/stub.go           |  20 +++--
 sdk/go/health/aggregator_test.go     | 144 ++++++++++++++++-------------------
 services/crunch-run/copier_test.go   |   6 +-
 services/keep-web/cache_test.go      |  12 +--
 services/keep-web/cadaver_test.go    |   4 +-
 services/keep-web/handler_test.go    |   6 +-
 services/keep-web/server_test.go     |   6 +-
 11 files changed, 124 insertions(+), 121 deletions(-)

       via  74b22016e6213628510414c96a7b7cd04c432378 (commit)
       via  e3f324c979fe45803e2bd42aa8f6d715ea23edb5 (commit)
       via  65836a37f88d103c2660c002beaa9e9faaa2ac8c (commit)
      from  d6358ef9fc0d8474827830a7ea0a451832e1fbec (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.


commit 74b22016e6213628510414c96a7b7cd04c432378
Author: Tom Clegg <tclegg at veritasgenetics.com>
Date:   Tue May 28 10:04:38 2019 -0400

    15003: Dedup fixture consts.
    
    Arvados-DCO-1.1-Signed-off-by: Tom Clegg <tclegg at veritasgenetics.com>

diff --git a/sdk/go/arvadostest/fixtures.go b/sdk/go/arvadostest/fixtures.go
index 4f648e9b4..95b83265a 100644
--- a/sdk/go/arvadostest/fixtures.go
+++ b/sdk/go/arvadostest/fixtures.go
@@ -26,7 +26,6 @@ const (
 	FooBarDirCollection     = "zzzzz-4zz18-foonbarfilesdir"
 	WazVersion1Collection   = "zzzzz-4zz18-25k12570yk1ver1"
 	UserAgreementPDH        = "b519d9cb706a29fc7ea24dbea2f05851+93"
-	FooPdh                  = "1f4b0bc7583c2a7f9102c395f4ffc5e3+45"
 	HelloWorldPdh           = "55713e6a34081eb03609e7ad5fcad129+62"
 
 	AProjectUUID    = "zzzzz-j7d0g-v955i6s2oi1cbso"
diff --git a/services/crunch-run/copier_test.go b/services/crunch-run/copier_test.go
index a2b560889..c0fe38008 100644
--- a/services/crunch-run/copier_test.go
+++ b/services/crunch-run/copier_test.go
@@ -111,7 +111,7 @@ func (s *copierSuite) TestSymlinkToMountedCollection(c *check.C) {
 	// simulate mounted read-only collection
 	s.cp.mounts["/mnt"] = arvados.Mount{
 		Kind:             "collection",
-		PortableDataHash: arvadostest.FooPdh,
+		PortableDataHash: arvadostest.FooCollectionPDH,
 	}
 
 	// simulate mounted writable collection
@@ -125,7 +125,7 @@ func (s *copierSuite) TestSymlinkToMountedCollection(c *check.C) {
 	c.Assert(f.Close(), check.IsNil)
 	s.cp.mounts["/mnt-w"] = arvados.Mount{
 		Kind:             "collection",
-		PortableDataHash: arvadostest.FooPdh,
+		PortableDataHash: arvadostest.FooCollectionPDH,
 		Writable:         true,
 	}
 	s.cp.binds = append(s.cp.binds, bindtmp+":/mnt-w")
@@ -197,7 +197,7 @@ func (s *copierSuite) TestUnsupportedMountKindBelow(c *check.C) {
 func (s *copierSuite) TestWritableMountBelow(c *check.C) {
 	s.cp.mounts["/ctr/outdir/mount"] = arvados.Mount{
 		Kind:             "collection",
-		PortableDataHash: arvadostest.FooPdh,
+		PortableDataHash: arvadostest.FooCollectionPDH,
 		Writable:         true,
 	}
 	c.Assert(os.MkdirAll(s.cp.hostOutputDir+"/mount", 0755), check.IsNil)
diff --git a/services/keep-web/cache_test.go b/services/keep-web/cache_test.go
index d147573ee..d6dd38927 100644
--- a/services/keep-web/cache_test.go
+++ b/services/keep-web/cache_test.go
@@ -45,7 +45,7 @@ func (s *UnitSuite) TestCache(c *check.C) {
 		coll, err = cache.Get(arv, arvadostest.FooCollection, false)
 		c.Check(err, check.Equals, nil)
 		c.Assert(coll, check.NotNil)
-		c.Check(coll.PortableDataHash, check.Equals, arvadostest.FooPdh)
+		c.Check(coll.PortableDataHash, check.Equals, arvadostest.FooCollectionPDH)
 		c.Check(coll.ManifestText[:2], check.Equals, ". ")
 	}
 	s.checkCacheMetrics(c, cache.registry,
@@ -62,10 +62,10 @@ func (s *UnitSuite) TestCache(c *check.C) {
 	// lookup.
 	arv.ApiToken = arvadostest.ActiveToken
 
-	coll2, err := cache.Get(arv, arvadostest.FooPdh, false)
+	coll2, err := cache.Get(arv, arvadostest.FooCollectionPDH, false)
 	c.Check(err, check.Equals, nil)
 	c.Assert(coll2, check.NotNil)
-	c.Check(coll2.PortableDataHash, check.Equals, arvadostest.FooPdh)
+	c.Check(coll2.PortableDataHash, check.Equals, arvadostest.FooCollectionPDH)
 	c.Check(coll2.ManifestText[:2], check.Equals, ". ")
 	c.Check(coll2.ManifestText, check.Not(check.Equals), coll.ManifestText)
 
@@ -76,10 +76,10 @@ func (s *UnitSuite) TestCache(c *check.C) {
 		"pdh_hits 4",
 		"api_calls 2")
 
-	coll2, err = cache.Get(arv, arvadostest.FooPdh, false)
+	coll2, err = cache.Get(arv, arvadostest.FooCollectionPDH, false)
 	c.Check(err, check.Equals, nil)
 	c.Assert(coll2, check.NotNil)
-	c.Check(coll2.PortableDataHash, check.Equals, arvadostest.FooPdh)
+	c.Check(coll2.PortableDataHash, check.Equals, arvadostest.FooCollectionPDH)
 	c.Check(coll2.ManifestText[:2], check.Equals, ". ")
 
 	s.checkCacheMetrics(c, cache.registry,
@@ -118,7 +118,7 @@ func (s *UnitSuite) TestCacheForceReloadByPDH(c *check.C) {
 	cache.registry = prometheus.NewRegistry()
 
 	for _, forceReload := range []bool{false, true, false, true} {
-		_, err := cache.Get(arv, arvadostest.FooPdh, forceReload)
+		_, err := cache.Get(arv, arvadostest.FooCollectionPDH, forceReload)
 		c.Check(err, check.Equals, nil)
 	}
 
diff --git a/services/keep-web/cadaver_test.go b/services/keep-web/cadaver_test.go
index 44d0b0ffe..1c93a2b91 100644
--- a/services/keep-web/cadaver_test.go
+++ b/services/keep-web/cadaver_test.go
@@ -298,8 +298,8 @@ func (s *IntegrationSuite) TestCadaverByID(c *check.C) {
 		c.Check(stdout, check.Matches, `(?ms).*collection is empty.*`)
 	}
 	for _, path := range []string{
-		"/by_id/" + arvadostest.FooPdh,
-		"/by_id/" + arvadostest.FooPdh + "/",
+		"/by_id/" + arvadostest.FooCollectionPDH,
+		"/by_id/" + arvadostest.FooCollectionPDH + "/",
 		"/by_id/" + arvadostest.FooCollection,
 		"/by_id/" + arvadostest.FooCollection + "/",
 	} {
diff --git a/services/keep-web/handler_test.go b/services/keep-web/handler_test.go
index 7a015c91f..040638623 100644
--- a/services/keep-web/handler_test.go
+++ b/services/keep-web/handler_test.go
@@ -59,7 +59,7 @@ func (s *UnitSuite) TestCORSPreflight(c *check.C) {
 }
 
 func (s *UnitSuite) TestInvalidUUID(c *check.C) {
-	bogusID := strings.Replace(arvadostest.FooPdh, "+", "-", 1) + "-"
+	bogusID := strings.Replace(arvadostest.FooCollectionPDH, "+", "-", 1) + "-"
 	token := arvadostest.ActiveToken
 	for _, trial := range []string{
 		"http://keep-web/c=" + bogusID + "/foo",
@@ -186,8 +186,8 @@ func (s *IntegrationSuite) doVhostRequests(c *check.C, authz authorizer) {
 		arvadostest.FooCollection + ".example.com/foo",
 		arvadostest.FooCollection + "--collections.example.com/foo",
 		arvadostest.FooCollection + "--collections.example.com/_/foo",
-		arvadostest.FooPdh + ".example.com/foo",
-		strings.Replace(arvadostest.FooPdh, "+", "-", -1) + "--collections.example.com/foo",
+		arvadostest.FooCollectionPDH + ".example.com/foo",
+		strings.Replace(arvadostest.FooCollectionPDH, "+", "-", -1) + "--collections.example.com/foo",
 		arvadostest.FooBarDirCollection + ".example.com/dir1/foo",
 	} {
 		c.Log("doRequests: ", hostPath)
diff --git a/services/keep-web/server_test.go b/services/keep-web/server_test.go
index a9830bc1d..ab50641be 100644
--- a/services/keep-web/server_test.go
+++ b/services/keep-web/server_test.go
@@ -164,16 +164,16 @@ func (s *IntegrationSuite) Test200(c *check.C) {
 			dataMD5: "acbd18db4cc2f85cedef654fccc4a4d8",
 		},
 		{
-			host:    strings.Replace(arvadostest.FooPdh, "+", "-", 1) + ".collections.example.com",
+			host:    strings.Replace(arvadostest.FooCollectionPDH, "+", "-", 1) + ".collections.example.com",
 			path:    "/t=" + arvadostest.ActiveToken + "/foo",
 			dataMD5: "acbd18db4cc2f85cedef654fccc4a4d8",
 		},
 		{
-			path:    "/c=" + arvadostest.FooPdh + "/t=" + arvadostest.ActiveToken + "/foo",
+			path:    "/c=" + arvadostest.FooCollectionPDH + "/t=" + arvadostest.ActiveToken + "/foo",
 			dataMD5: "acbd18db4cc2f85cedef654fccc4a4d8",
 		},
 		{
-			path:    "/c=" + strings.Replace(arvadostest.FooPdh, "+", "-", 1) + "/t=" + arvadostest.ActiveToken + "/_/foo",
+			path:    "/c=" + strings.Replace(arvadostest.FooCollectionPDH, "+", "-", 1) + "/t=" + arvadostest.ActiveToken + "/_/foo",
 			dataMD5: "acbd18db4cc2f85cedef654fccc4a4d8",
 		},
 		{

commit e3f324c979fe45803e2bd42aa8f6d715ea23edb5
Author: Tom Clegg <tclegg at veritasgenetics.com>
Date:   Tue May 28 10:02:49 2019 -0400

    15003: Fix import cycle.
    
    Arvados-DCO-1.1-Signed-off-by: Tom Clegg <tclegg at veritasgenetics.com>

diff --git a/sdk/go/arvados/fs_collection_test.go b/sdk/go/arvados/fs_collection_test.go
index 2ae2bd892..7fd03b120 100644
--- a/sdk/go/arvados/fs_collection_test.go
+++ b/sdk/go/arvados/fs_collection_test.go
@@ -23,7 +23,6 @@ import (
 	"testing"
 	"time"
 
-	"git.curoverse.com/arvados.git/sdk/go/arvadostest"
 	check "gopkg.in/check.v1"
 )
 
@@ -87,7 +86,7 @@ type CollectionFSSuite struct {
 
 func (s *CollectionFSSuite) SetUpTest(c *check.C) {
 	s.client = NewClientFromEnv()
-	err := s.client.RequestAndDecode(&s.coll, "GET", "arvados/v1/collections/"+arvadostest.FooAndBarFilesInDirUUID, nil, nil)
+	err := s.client.RequestAndDecode(&s.coll, "GET", "arvados/v1/collections/"+fixtureFooAndBarFilesInDirUUID, nil, nil)
 	c.Assert(err, check.IsNil)
 	s.kc = &keepClientStub{
 		blocks: map[string][]byte{
diff --git a/sdk/go/arvados/fs_project_test.go b/sdk/go/arvados/fs_project_test.go
index 1a06ce146..49e7d675f 100644
--- a/sdk/go/arvados/fs_project_test.go
+++ b/sdk/go/arvados/fs_project_test.go
@@ -12,7 +12,6 @@ import (
 	"path/filepath"
 	"strings"
 
-	"git.curoverse.com/arvados.git/sdk/go/arvadostest"
 	check "gopkg.in/check.v1"
 )
 
@@ -121,7 +120,7 @@ func (s *SiteFSSuite) TestProjectReaddirAfterLoadOne(c *check.C) {
 func (s *SiteFSSuite) TestSlashInName(c *check.C) {
 	badCollection := Collection{
 		Name:      "bad/collection",
-		OwnerUUID: arvadostest.AProjectUUID,
+		OwnerUUID: fixtureAProjectUUID,
 	}
 	err := s.client.RequestAndDecode(&badCollection, "POST", "arvados/v1/collections", s.client.UpdateBody(&badCollection), nil)
 	c.Assert(err, check.IsNil)
@@ -130,7 +129,7 @@ func (s *SiteFSSuite) TestSlashInName(c *check.C) {
 	badProject := Group{
 		Name:       "bad/project",
 		GroupClass: "project",
-		OwnerUUID:  arvadostest.AProjectUUID,
+		OwnerUUID:  fixtureAProjectUUID,
 	}
 	err = s.client.RequestAndDecode(&badProject, "POST", "arvados/v1/groups", s.client.UpdateBody(&badProject), nil)
 	c.Assert(err, check.IsNil)
@@ -157,7 +156,7 @@ func (s *SiteFSSuite) TestProjectUpdatedByOther(c *check.C) {
 
 	oob := Collection{
 		Name:      "oob",
-		OwnerUUID: arvadostest.AProjectUUID,
+		OwnerUUID: fixtureAProjectUUID,
 	}
 	err = s.client.RequestAndDecode(&oob, "POST", "arvados/v1/collections", s.client.UpdateBody(&oob), nil)
 	c.Assert(err, check.IsNil)
diff --git a/sdk/go/arvados/fs_site_test.go b/sdk/go/arvados/fs_site_test.go
index 80028dc59..fff0b7e01 100644
--- a/sdk/go/arvados/fs_site_test.go
+++ b/sdk/go/arvados/fs_site_test.go
@@ -8,10 +8,22 @@ import (
 	"net/http"
 	"os"
 
-	"git.curoverse.com/arvados.git/sdk/go/arvadostest"
 	check "gopkg.in/check.v1"
 )
 
+const (
+	// Importing arvadostest would be an import cycle, so these
+	// fixtures are duplicated here [until fs moves to a separate
+	// package].
+	fixtureActiveToken             = "3kg6k6lzmp9kj5cpkcoxie963cmvjahbt2fod9zru30k1jqdmi"
+	fixtureAProjectUUID            = "zzzzz-j7d0g-v955i6s2oi1cbso"
+	fixtureFooAndBarFilesInDirUUID = "zzzzz-4zz18-foonbarfilesdir"
+	fixtureFooCollectionName       = "zzzzz-4zz18-fy296fx3hot09f7 added sometime"
+	fixtureFooCollectionPDH        = "1f4b0bc7583c2a7f9102c395f4ffc5e3+45"
+	fixtureFooCollection           = "zzzzz-4zz18-fy296fx3hot09f7"
+	fixtureNonexistentCollection   = "zzzzz-4zz18-totallynotexist"
+)
+
 var _ = check.Suite(&SiteFSSuite{})
 
 type SiteFSSuite struct {
@@ -23,7 +35,7 @@ type SiteFSSuite struct {
 func (s *SiteFSSuite) SetUpTest(c *check.C) {
 	s.client = &Client{
 		APIHost:   os.Getenv("ARVADOS_API_HOST"),
-		AuthToken: arvadostest.ActiveToken,
+		AuthToken: fixtureActiveToken,
 		Insecure:  true,
 	}
 	s.kc = &keepClientStub{
@@ -53,16 +65,16 @@ func (s *SiteFSSuite) TestByUUIDAndPDH(c *check.C) {
 	c.Check(err, check.IsNil)
 	c.Check(len(fis), check.Equals, 0)
 
-	err = s.fs.Mkdir("/by_id/"+arvadostest.FooCollection, 0755)
+	err = s.fs.Mkdir("/by_id/"+fixtureFooCollection, 0755)
 	c.Check(err, check.Equals, os.ErrExist)
 
-	f, err = s.fs.Open("/by_id/" + arvadostest.NonexistentCollection)
+	f, err = s.fs.Open("/by_id/" + fixtureNonexistentCollection)
 	c.Assert(err, check.Equals, os.ErrNotExist)
 
 	for _, path := range []string{
-		arvadostest.FooCollection,
-		arvadostest.FooPdh,
-		arvadostest.AProjectUUID + "/" + arvadostest.FooCollectionName,
+		fixtureFooCollection,
+		fixtureFooCollectionPDH,
+		fixtureAProjectUUID + "/" + fixtureFooCollectionName,
 	} {
 		f, err = s.fs.Open("/by_id/" + path)
 		c.Assert(err, check.IsNil)
@@ -74,7 +86,7 @@ func (s *SiteFSSuite) TestByUUIDAndPDH(c *check.C) {
 		c.Check(names, check.DeepEquals, []string{"foo"})
 	}
 
-	f, err = s.fs.Open("/by_id/" + arvadostest.AProjectUUID + "/A Subproject/baz_file")
+	f, err = s.fs.Open("/by_id/" + fixtureAProjectUUID + "/A Subproject/baz_file")
 	c.Assert(err, check.IsNil)
 	fis, err = f.Readdir(-1)
 	var names []string
@@ -83,15 +95,15 @@ func (s *SiteFSSuite) TestByUUIDAndPDH(c *check.C) {
 	}
 	c.Check(names, check.DeepEquals, []string{"baz"})
 
-	_, err = s.fs.OpenFile("/by_id/"+arvadostest.NonexistentCollection, os.O_RDWR|os.O_CREATE, 0755)
+	_, err = s.fs.OpenFile("/by_id/"+fixtureNonexistentCollection, os.O_RDWR|os.O_CREATE, 0755)
 	c.Check(err, check.Equals, ErrInvalidOperation)
-	err = s.fs.Rename("/by_id/"+arvadostest.FooCollection, "/by_id/beep")
+	err = s.fs.Rename("/by_id/"+fixtureFooCollection, "/by_id/beep")
 	c.Check(err, check.Equals, ErrInvalidArgument)
-	err = s.fs.Rename("/by_id/"+arvadostest.FooCollection+"/foo", "/by_id/beep")
+	err = s.fs.Rename("/by_id/"+fixtureFooCollection+"/foo", "/by_id/beep")
 	c.Check(err, check.Equals, ErrInvalidArgument)
 	_, err = s.fs.Stat("/by_id/beep")
 	c.Check(err, check.Equals, os.ErrNotExist)
-	err = s.fs.Rename("/by_id/"+arvadostest.FooCollection+"/foo", "/by_id/"+arvadostest.FooCollection+"/bar")
+	err = s.fs.Rename("/by_id/"+fixtureFooCollection+"/foo", "/by_id/"+fixtureFooCollection+"/bar")
 	c.Check(err, check.IsNil)
 
 	err = s.fs.Rename("/by_id", "/beep")

commit 65836a37f88d103c2660c002beaa9e9faaa2ac8c
Author: Tom Clegg <tclegg at veritasgenetics.com>
Date:   Tue May 28 09:48:28 2019 -0400

    15003: Port health aggregator from NodeProfiles to Services.
    
    Arvados-DCO-1.1-Signed-off-by: Tom Clegg <tclegg at veritasgenetics.com>

diff --git a/sdk/go/arvadostest/stub.go b/sdk/go/arvadostest/stub.go
index 2b6e40c95..80735f86e 100644
--- a/sdk/go/arvadostest/stub.go
+++ b/sdk/go/arvadostest/stub.go
@@ -42,14 +42,20 @@ func (stub *ServerStub) ServeHTTP(resp http.ResponseWriter, req *http.Request) {
 }
 
 // SetServiceURL overrides the given service config/discovery with the
-// given internalURL.
+// given internalURLs.
+//
+// ExternalURL is set to the last internalURL, which only aims to
+// address the case where there is only one.
 //
 // SetServiceURL panics on errors.
-func SetServiceURL(service *arvados.Service, internalURL string) {
-	u, err := url.Parse(internalURL)
-	if err != nil {
-		panic(err)
+func SetServiceURL(service *arvados.Service, internalURLs ...string) {
+	service.InternalURLs = map[arvados.URL]arvados.ServiceInstance{}
+	for _, u := range internalURLs {
+		u, err := url.Parse(u)
+		if err != nil {
+			panic(err)
+		}
+		service.InternalURLs[arvados.URL(*u)] = arvados.ServiceInstance{}
+		service.ExternalURL = arvados.URL(*u)
 	}
-	service.InternalURLs = map[arvados.URL]arvados.ServiceInstance{arvados.URL(*u): {}}
-	service.ExternalURL = arvados.URL(*u)
 }
diff --git a/sdk/go/health/aggregator_test.go b/sdk/go/health/aggregator_test.go
index 122355be9..3ede3b983 100644
--- a/sdk/go/health/aggregator_test.go
+++ b/sdk/go/health/aggregator_test.go
@@ -30,13 +30,8 @@ func (s *AggregatorSuite) TestInterface(c *check.C) {
 }
 
 func (s *AggregatorSuite) SetUpTest(c *check.C) {
-	s.handler = &Aggregator{Config: &arvados.Config{
-		Clusters: map[string]arvados.Cluster{
-			"zzzzz": {
-				ManagementToken: arvadostest.ManagementToken,
-				NodeProfiles:    map[string]arvados.NodeProfile{},
-			},
-		},
+	s.handler = &Aggregator{Cluster: &arvados.Cluster{
+		ManagementToken: arvadostest.ManagementToken,
 	}}
 	s.req = httptest.NewRequest("GET", "/_health/all", nil)
 	s.req.Header.Set("Authorization", "Bearer "+arvadostest.ManagementToken)
@@ -57,9 +52,9 @@ func (s *AggregatorSuite) TestBadAuth(c *check.C) {
 	c.Check(s.resp.Code, check.Equals, http.StatusUnauthorized)
 }
 
-func (s *AggregatorSuite) TestEmptyConfig(c *check.C) {
+func (s *AggregatorSuite) TestNoServicesConfigured(c *check.C) {
 	s.handler.ServeHTTP(s.resp, s.req)
-	s.checkOK(c)
+	s.checkUnhealthy(c)
 }
 
 func (s *AggregatorSuite) stubServer(handler http.Handler) (*httptest.Server, string) {
@@ -73,51 +68,18 @@ func (s *AggregatorSuite) stubServer(handler http.Handler) (*httptest.Server, st
 	return srv, ":" + port
 }
 
-type unhealthyHandler struct{}
-
-func (*unhealthyHandler) ServeHTTP(resp http.ResponseWriter, req *http.Request) {
-	if req.URL.Path == "/_health/ping" {
-		resp.Write([]byte(`{"health":"ERROR","error":"the bends"}`))
-	} else {
-		http.Error(resp, "not found", http.StatusNotFound)
-	}
-}
-
 func (s *AggregatorSuite) TestUnhealthy(c *check.C) {
 	srv, listen := s.stubServer(&unhealthyHandler{})
 	defer srv.Close()
-	s.handler.Config.Clusters["zzzzz"].NodeProfiles["localhost"] = arvados.NodeProfile{
-		Keepstore: arvados.SystemServiceInstance{Listen: listen},
-	}
+	arvadostest.SetServiceURL(&s.handler.Cluster.Services.Keepstore, "http://localhost"+listen+"/")
 	s.handler.ServeHTTP(s.resp, s.req)
 	s.checkUnhealthy(c)
 }
 
-type healthyHandler struct{}
-
-func (*healthyHandler) ServeHTTP(resp http.ResponseWriter, req *http.Request) {
-	if req.URL.Path == "/_health/ping" {
-		resp.Write([]byte(`{"health":"OK"}`))
-	} else {
-		http.Error(resp, "not found", http.StatusNotFound)
-	}
-}
-
 func (s *AggregatorSuite) TestHealthy(c *check.C) {
 	srv, listen := s.stubServer(&healthyHandler{})
 	defer srv.Close()
-	s.handler.Config.Clusters["zzzzz"].NodeProfiles["localhost"] = arvados.NodeProfile{
-		Controller:    arvados.SystemServiceInstance{Listen: listen},
-		DispatchCloud: arvados.SystemServiceInstance{Listen: listen},
-		Keepbalance:   arvados.SystemServiceInstance{Listen: listen},
-		Keepproxy:     arvados.SystemServiceInstance{Listen: listen},
-		Keepstore:     arvados.SystemServiceInstance{Listen: listen},
-		Keepweb:       arvados.SystemServiceInstance{Listen: listen},
-		Nodemanager:   arvados.SystemServiceInstance{Listen: listen},
-		RailsAPI:      arvados.SystemServiceInstance{Listen: listen},
-		Websocket:     arvados.SystemServiceInstance{Listen: listen},
-		Workbench:     arvados.SystemServiceInstance{Listen: listen},
-	}
+	s.setAllServiceURLs(listen)
 	s.handler.ServeHTTP(s.resp, s.req)
 	resp := s.checkOK(c)
 	svc := "keepstore+http://localhost" + listen + "/_health/ping"
@@ -132,21 +94,8 @@ func (s *AggregatorSuite) TestHealthyAndUnhealthy(c *check.C) {
 	defer srvH.Close()
 	srvU, listenU := s.stubServer(&unhealthyHandler{})
 	defer srvU.Close()
-	s.handler.Config.Clusters["zzzzz"].NodeProfiles["localhost"] = arvados.NodeProfile{
-		Controller:    arvados.SystemServiceInstance{Listen: listenH},
-		DispatchCloud: arvados.SystemServiceInstance{Listen: listenH},
-		Keepbalance:   arvados.SystemServiceInstance{Listen: listenH},
-		Keepproxy:     arvados.SystemServiceInstance{Listen: listenH},
-		Keepstore:     arvados.SystemServiceInstance{Listen: listenH},
-		Keepweb:       arvados.SystemServiceInstance{Listen: listenH},
-		Nodemanager:   arvados.SystemServiceInstance{Listen: listenH},
-		RailsAPI:      arvados.SystemServiceInstance{Listen: listenH},
-		Websocket:     arvados.SystemServiceInstance{Listen: listenH},
-		Workbench:     arvados.SystemServiceInstance{Listen: listenH},
-	}
-	s.handler.Config.Clusters["zzzzz"].NodeProfiles["127.0.0.1"] = arvados.NodeProfile{
-		Keepstore: arvados.SystemServiceInstance{Listen: listenU},
-	}
+	s.setAllServiceURLs(listenH)
+	arvadostest.SetServiceURL(&s.handler.Cluster.Services.Keepstore, "http://localhost"+listenH+"/", "http://127.0.0.1"+listenU+"/")
 	s.handler.ServeHTTP(s.resp, s.req)
 	resp := s.checkUnhealthy(c)
 	ep := resp.Checks["keepstore+http://localhost"+listenH+"/_health/ping"]
@@ -158,10 +107,25 @@ func (s *AggregatorSuite) TestHealthyAndUnhealthy(c *check.C) {
 	c.Logf("%#v", ep)
 }
 
+func (s *AggregatorSuite) TestPingTimeout(c *check.C) {
+	s.handler.timeout = arvados.Duration(100 * time.Millisecond)
+	srv, listen := s.stubServer(&slowHandler{})
+	defer srv.Close()
+	arvadostest.SetServiceURL(&s.handler.Cluster.Services.Keepstore, "http://localhost"+listen+"/")
+	s.handler.ServeHTTP(s.resp, s.req)
+	resp := s.checkUnhealthy(c)
+	ep := resp.Checks["keepstore+http://localhost"+listen+"/_health/ping"]
+	c.Check(ep.Health, check.Equals, "ERROR")
+	c.Check(ep.HTTPStatusCode, check.Equals, 0)
+	rt, err := ep.ResponseTime.Float64()
+	c.Check(err, check.IsNil)
+	c.Check(rt > 0.005, check.Equals, true)
+}
+
 func (s *AggregatorSuite) checkError(c *check.C) {
 	c.Check(s.resp.Code, check.Not(check.Equals), http.StatusOK)
 	var resp ClusterHealthResponse
-	err := json.NewDecoder(s.resp.Body).Decode(&resp)
+	err := json.Unmarshal(s.resp.Body.Bytes(), &resp)
 	c.Check(err, check.IsNil)
 	c.Check(resp.Health, check.Not(check.Equals), "OK")
 }
@@ -177,36 +141,60 @@ func (s *AggregatorSuite) checkOK(c *check.C) ClusterHealthResponse {
 func (s *AggregatorSuite) checkResult(c *check.C, health string) ClusterHealthResponse {
 	c.Check(s.resp.Code, check.Equals, http.StatusOK)
 	var resp ClusterHealthResponse
-	err := json.NewDecoder(s.resp.Body).Decode(&resp)
+	c.Log(s.resp.Body.String())
+	err := json.Unmarshal(s.resp.Body.Bytes(), &resp)
 	c.Check(err, check.IsNil)
 	c.Check(resp.Health, check.Equals, health)
 	return resp
 }
 
-type slowHandler struct{}
+func (s *AggregatorSuite) setAllServiceURLs(listen string) {
+	svcs := &s.handler.Cluster.Services
+	for _, svc := range []*arvados.Service{
+		&svcs.Controller,
+		&svcs.DispatchCloud,
+		&svcs.Keepbalance,
+		&svcs.Keepproxy,
+		&svcs.Keepstore,
+		&svcs.Health,
+		&svcs.Nodemanager,
+		&svcs.RailsAPI,
+		&svcs.WebDAV,
+		&svcs.Websocket,
+		&svcs.Workbench1,
+		&svcs.Workbench2,
+	} {
+		arvadostest.SetServiceURL(svc, "http://localhost"+listen+"/")
+	}
+}
 
-func (*slowHandler) ServeHTTP(resp http.ResponseWriter, req *http.Request) {
+type unhealthyHandler struct{}
+
+func (*unhealthyHandler) ServeHTTP(resp http.ResponseWriter, req *http.Request) {
+	if req.URL.Path == "/_health/ping" {
+		resp.Write([]byte(`{"health":"ERROR","error":"the bends"}`))
+	} else {
+		http.Error(resp, "not found", http.StatusNotFound)
+	}
+}
+
+type healthyHandler struct{}
+
+func (*healthyHandler) ServeHTTP(resp http.ResponseWriter, req *http.Request) {
 	if req.URL.Path == "/_health/ping" {
-		time.Sleep(3 * time.Second)
 		resp.Write([]byte(`{"health":"OK"}`))
 	} else {
 		http.Error(resp, "not found", http.StatusNotFound)
 	}
 }
 
-func (s *AggregatorSuite) TestPingTimeout(c *check.C) {
-	s.handler.timeout = arvados.Duration(100 * time.Millisecond)
-	srv, listen := s.stubServer(&slowHandler{})
-	defer srv.Close()
-	s.handler.Config.Clusters["zzzzz"].NodeProfiles["localhost"] = arvados.NodeProfile{
-		Keepstore: arvados.SystemServiceInstance{Listen: listen},
+type slowHandler struct{}
+
+func (*slowHandler) ServeHTTP(resp http.ResponseWriter, req *http.Request) {
+	if req.URL.Path == "/_health/ping" {
+		time.Sleep(3 * time.Second)
+		resp.Write([]byte(`{"health":"OK"}`))
+	} else {
+		http.Error(resp, "not found", http.StatusNotFound)
 	}
-	s.handler.ServeHTTP(s.resp, s.req)
-	resp := s.checkUnhealthy(c)
-	ep := resp.Checks["keepstore+http://localhost"+listen+"/_health/ping"]
-	c.Check(ep.Health, check.Equals, "ERROR")
-	c.Check(ep.HTTPStatusCode, check.Equals, 0)
-	rt, err := ep.ResponseTime.Float64()
-	c.Check(err, check.IsNil)
-	c.Check(rt > 0.005, check.Equals, true)
 }

-----------------------------------------------------------------------


hooks/post-receive
-- 




More information about the arvados-commits mailing list