1 // Copyright (C) The Arvados Authors. All rights reserved.
3 // SPDX-License-Identifier: AGPL-3.0
12 "git.curoverse.com/arvados.git/sdk/go/arvados"
13 "git.curoverse.com/arvados.git/sdk/go/arvadostest"
14 "github.com/sirupsen/logrus"
15 check "gopkg.in/check.v1"
18 // Gocheck boilerplate
19 func Test(t *testing.T) {
23 var _ = check.Suite(&IntegrationSuite{})
25 type IntegrationSuite struct{}
27 func (*IntegrationSuite) TestControllerBackedQueue(c *check.C) {
28 client := arvados.NewClientFromEnv()
29 cq := NewQueue(logrus.StandardLogger(), nil, testTypeChooser, client)
32 c.Check(err, check.IsNil)
34 ents, threshold := cq.Entries()
35 c.Check(len(ents), check.Not(check.Equals), 0)
36 c.Check(time.Since(threshold) < time.Minute, check.Equals, true)
37 c.Check(time.Since(threshold) > 0, check.Equals, true)
39 _, ok := ents[arvadostest.QueuedContainerUUID]
40 c.Check(ok, check.Equals, true)
43 for uuid, ent := range ents {
44 c.Check(ent.Container.UUID, check.Equals, uuid)
45 c.Check(ent.InstanceType.Name, check.Equals, "testType")
46 c.Check(ent.Container.State, check.Equals, arvados.ContainerStateQueued)
47 c.Check(ent.Container.Priority > 0, check.Equals, true)
49 ctr, ok := cq.Get(uuid)
50 c.Check(ok, check.Equals, true)
51 c.Check(ctr.UUID, check.Equals, uuid)
56 err := cq.Unlock(uuid)
57 c.Check(err, check.NotNil)
59 c.Check(err, check.IsNil)
60 ctr, ok := cq.Get(uuid)
61 c.Check(ok, check.Equals, true)
62 c.Check(ctr.State, check.Equals, arvados.ContainerStateLocked)
64 c.Check(err, check.NotNil)
66 c.Check(err, check.IsNil)
67 ctr, ok = cq.Get(uuid)
68 c.Check(ok, check.Equals, true)
69 c.Check(ctr.State, check.Equals, arvados.ContainerStateQueued)
71 c.Check(err, check.NotNil)
76 err = cq.Cancel(arvadostest.CompletedContainerUUID)
77 c.Check(err, check.ErrorMatches, `.*State cannot change from Complete to Cancelled.*`)
80 func testTypeChooser(ctr *arvados.Container) (arvados.InstanceType, error) {
81 return arvados.InstanceType{Name: "testType"}, nil