X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/2887fa9c26cfd4ae6379e2cf4e6c5d50aaa0dd11..b35e98fcf41753bf7d04ee21340b09618580509e:/services/keep-balance/integration_test.go diff --git a/services/keep-balance/integration_test.go b/services/keep-balance/integration_test.go index a79779c7dc..3ddcb159d8 100644 --- a/services/keep-balance/integration_test.go +++ b/services/keep-balance/integration_test.go @@ -6,15 +6,20 @@ package main import ( "bytes" + "io" "os" "strings" "testing" "time" - "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" + "git.arvados.org/arvados.git/lib/config" + "git.arvados.org/arvados.git/sdk/go/arvados" + "git.arvados.org/arvados.git/sdk/go/arvadosclient" + "git.arvados.org/arvados.git/sdk/go/arvadostest" + "git.arvados.org/arvados.git/sdk/go/ctxlog" + "git.arvados.org/arvados.git/sdk/go/keepclient" + "github.com/jmoiron/sqlx" + "github.com/prometheus/client_golang/prometheus" "github.com/sirupsen/logrus" check "gopkg.in/check.v1" ) @@ -22,7 +27,9 @@ import ( var _ = check.Suite(&integrationSuite{}) type integrationSuite struct { - config Config + config *arvados.Cluster + db *sqlx.DB + client *arvados.Client keepClient *keepclient.KeepClient } @@ -35,7 +42,7 @@ func (s *integrationSuite) SetUpSuite(c *check.C) { arvadostest.StartKeep(4, true) arv, err := arvadosclient.MakeArvadosClient() - arv.ApiToken = arvadostest.DataManagerToken + arv.ApiToken = arvadostest.SystemRootToken c.Assert(err, check.IsNil) s.keepClient, err = keepclient.MakeKeepClient(arv) @@ -59,14 +66,18 @@ func (s *integrationSuite) TearDownSuite(c *check.C) { } func (s *integrationSuite) SetUpTest(c *check.C) { - s.config = Config{ - Client: arvados.Client{ - APIHost: os.Getenv("ARVADOS_API_HOST"), - AuthToken: arvadostest.DataManagerToken, - Insecure: true, - }, - KeepServiceTypes: []string{"disk"}, - RunPeriod: arvados.Duration(time.Second), + cfg, err := config.NewLoader(nil, ctxlog.TestLogger(c)).Load() + c.Assert(err, check.Equals, nil) + s.config, err = cfg.GetCluster("") + c.Assert(err, check.Equals, nil) + s.db, err = sqlx.Open("postgres", s.config.PostgreSQL.Connection.String()) + c.Assert(err, check.IsNil) + s.config.Collections.BalancePeriod = arvados.Duration(time.Second) + + s.client = &arvados.Client{ + APIHost: os.Getenv("ARVADOS_API_HOST"), + AuthToken: arvadostest.SystemRootToken, + Insecure: true, } } @@ -75,18 +86,20 @@ func (s *integrationSuite) TestBalanceAPIFixtures(c *check.C) { for iter := 0; iter < 20; iter++ { logBuf.Reset() logger := logrus.New() - logger.Out = &logBuf + logger.Out = io.MultiWriter(&logBuf, os.Stderr) opts := RunOptions{ - CommitPulls: true, - CommitTrash: true, - Logger: logger, + CommitPulls: true, + CommitTrash: true, + CommitConfirmedFields: true, + Logger: logger, } bal := &Balancer{ + DB: s.db, Logger: logger, - Metrics: newMetrics(), + Metrics: newMetrics(prometheus.NewRegistry()), } - nextOpts, err := bal.Run(s.config, opts) + nextOpts, err := bal.Run(s.client, s.config, opts) c.Check(err, check.IsNil) c.Check(nextOpts.SafeRendezvousState, check.Not(check.Equals), "") c.Check(nextOpts.CommitPulls, check.Equals, true) @@ -99,4 +112,23 @@ func (s *integrationSuite) TestBalanceAPIFixtures(c *check.C) { time.Sleep(200 * time.Millisecond) } c.Check(logBuf.String(), check.Not(check.Matches), `(?ms).*0 replicas (0 blocks, 0 bytes) underreplicated.*`) + + for _, trial := range []struct { + uuid string + repl int + classes []string + }{ + {arvadostest.EmptyCollectionUUID, 0, []string{"default"}}, + {arvadostest.FooCollection, 2, []string{"default"}}, // "foo" blk + {arvadostest.StorageClassesDesiredDefaultConfirmedDefault, 2, []string{"default"}}, // "bar" blk + {arvadostest.StorageClassesDesiredArchiveConfirmedDefault, 0, []string{"archive"}}, // "bar" blk + } { + c.Logf("%#v", trial) + var coll arvados.Collection + s.client.RequestAndDecode(&coll, "GET", "arvados/v1/collections/"+trial.uuid, nil, nil) + if c.Check(coll.ReplicationConfirmed, check.NotNil) { + c.Check(*coll.ReplicationConfirmed, check.Equals, trial.repl) + } + c.Check(coll.StorageClassesConfirmed, check.DeepEquals, trial.classes) + } }