From 003fe66cd741d4ac7e841da56eda30d7ea88f392 Mon Sep 17 00:00:00 2001 From: Tom Clegg Date: Thu, 17 Jan 2019 16:31:55 -0500 Subject: [PATCH] 14325: Test dispatch container queue against controller. Arvados-DCO-1.1-Signed-off-by: Tom Clegg --- lib/dispatchcloud/container/queue_test.go | 82 +++++++++++++++++++++++ sdk/go/arvadostest/fixtures.go | 4 ++ 2 files changed, 86 insertions(+) create mode 100644 lib/dispatchcloud/container/queue_test.go diff --git a/lib/dispatchcloud/container/queue_test.go b/lib/dispatchcloud/container/queue_test.go new file mode 100644 index 0000000000..9d2f830903 --- /dev/null +++ b/lib/dispatchcloud/container/queue_test.go @@ -0,0 +1,82 @@ +// Copyright (C) The Arvados Authors. All rights reserved. +// +// SPDX-License-Identifier: AGPL-3.0 + +package container + +import ( + "sync" + "testing" + "time" + + "git.curoverse.com/arvados.git/sdk/go/arvados" + "git.curoverse.com/arvados.git/sdk/go/arvadostest" + "github.com/sirupsen/logrus" + check "gopkg.in/check.v1" +) + +// Gocheck boilerplate +func Test(t *testing.T) { + check.TestingT(t) +} + +var _ = check.Suite(&IntegrationSuite{}) + +type IntegrationSuite struct{} + +func (*IntegrationSuite) TestControllerBackedQueue(c *check.C) { + client := arvados.NewClientFromEnv() + cq := NewQueue(logrus.StandardLogger(), nil, testTypeChooser, client) + + err := cq.Update() + c.Check(err, check.IsNil) + + ents, threshold := cq.Entries() + c.Check(len(ents), check.Not(check.Equals), 0) + c.Check(time.Since(threshold) < time.Minute, check.Equals, true) + c.Check(time.Since(threshold) > 0, check.Equals, true) + + _, ok := ents[arvadostest.QueuedContainerUUID] + c.Check(ok, check.Equals, true) + + var wg sync.WaitGroup + for uuid, ent := range ents { + c.Check(ent.Container.UUID, check.Equals, uuid) + c.Check(ent.InstanceType.Name, check.Equals, "testType") + c.Check(ent.Container.State, check.Equals, arvados.ContainerStateQueued) + c.Check(ent.Container.Priority > 0, check.Equals, true) + + ctr, ok := cq.Get(uuid) + c.Check(ok, check.Equals, true) + c.Check(ctr.UUID, check.Equals, uuid) + + wg.Add(1) + go func() { + defer wg.Done() + err := cq.Unlock(uuid) + c.Check(err, check.NotNil) + err = cq.Lock(uuid) + c.Check(err, check.IsNil) + ctr, ok := cq.Get(uuid) + c.Check(ok, check.Equals, true) + c.Check(ctr.State, check.Equals, arvados.ContainerStateLocked) + err = cq.Lock(uuid) + c.Check(err, check.NotNil) + err = cq.Unlock(uuid) + c.Check(err, check.IsNil) + ctr, ok = cq.Get(uuid) + c.Check(ok, check.Equals, true) + c.Check(ctr.State, check.Equals, arvados.ContainerStateQueued) + err = cq.Unlock(uuid) + c.Check(err, check.NotNil) + }() + } + wg.Wait() + + err = cq.Cancel(arvadostest.CompletedContainerUUID) + c.Check(err, check.ErrorMatches, `.*State cannot change from Complete to Cancelled.*`) +} + +func testTypeChooser(ctr *arvados.Container) (arvados.InstanceType, error) { + return arvados.InstanceType{Name: "testType"}, nil +} diff --git a/sdk/go/arvadostest/fixtures.go b/sdk/go/arvadostest/fixtures.go index e0f2483131..4f648e9b43 100644 --- a/sdk/go/arvadostest/fixtures.go +++ b/sdk/go/arvadostest/fixtures.go @@ -41,6 +41,10 @@ const ( QueuedContainerRequestUUID = "zzzzz-xvhdp-cr4queuedcontnr" QueuedContainerUUID = "zzzzz-dz642-queuedcontainer" + RunningContainerUUID = "zzzzz-dz642-runningcontainr" + + CompletedContainerUUID = "zzzzz-dz642-compltcontainer" + ArvadosRepoUUID = "zzzzz-s0uqq-arvadosrepo0123" ArvadosRepoName = "arvados" FooRepoUUID = "zzzzz-s0uqq-382brsig8rp3666" -- 2.30.2