// Copyright (C) The Arvados Authors. All rights reserved. // // SPDX-License-Identifier: AGPL-3.0 package dispatchcloud import ( "git.curoverse.com/arvados.git/sdk/go/arvados" check "gopkg.in/check.v1" ) var _ = check.Suite(&NodeSizeSuite{}) type NodeSizeSuite struct{} func (*NodeSizeSuite) TestChooseNotConfigured(c *check.C) { _, err := ChooseInstanceType(&arvados.Cluster{}, &arvados.Container{ RuntimeConstraints: arvados.RuntimeConstraints{ RAM: 1234567890, VCPUs: 2, }, }) c.Check(err, check.Equals, ErrInstanceTypesNotConfigured) } func (*NodeSizeSuite) TestChooseUnsatisfiable(c *check.C) { for _, rc := range []arvados.RuntimeConstraints{ {RAM: 9876543210, VCPUs: 2}, {RAM: 1234567890, VCPUs: 20}, {RAM: 1234567890, VCPUs: 2, KeepCacheRAM: 9876543210}, } { _, err := ChooseInstanceType(&arvados.Cluster{InstanceTypes: []arvados.InstanceType{ {Price: 1.1, RAM: 1000000000, VCPUs: 2, Name: "small1"}, {Price: 2.2, RAM: 2000000000, VCPUs: 4, Name: "small2"}, {Price: 4.4, RAM: 4000000000, VCPUs: 8, Name: "small4"}, }}, &arvados.Container{RuntimeConstraints: rc}) c.Check(err, check.Equals, ErrConstraintsNotSatisfiable) } } func (*NodeSizeSuite) TestChoose(c *check.C) { for _, menu := range [][]arvados.InstanceType{ { {Price: 4.4, RAM: 4000000000, VCPUs: 8, Name: "costly"}, {Price: 2.2, RAM: 2000000000, VCPUs: 4, Name: "best"}, {Price: 1.1, RAM: 1000000000, VCPUs: 2, Name: "small"}, }, { {Price: 4.4, RAM: 4000000000, VCPUs: 8, Name: "costly"}, {Price: 2.2, RAM: 2000000000, VCPUs: 4, Name: "goodenough"}, {Price: 2.2, RAM: 4000000000, VCPUs: 4, Name: "best"}, {Price: 1.1, RAM: 1000000000, VCPUs: 2, Name: "small"}, }, { {Price: 1.1, RAM: 1000000000, VCPUs: 2, Name: "small"}, {Price: 2.2, RAM: 2000000000, VCPUs: 4, Name: "goodenough"}, {Price: 2.2, RAM: 4000000000, VCPUs: 4, Name: "best"}, {Price: 4.4, RAM: 4000000000, VCPUs: 8, Name: "costly"}, }, } { best, err := ChooseInstanceType(&arvados.Cluster{InstanceTypes: menu}, &arvados.Container{ RuntimeConstraints: arvados.RuntimeConstraints{ VCPUs: 2, RAM: 987654321, KeepCacheRAM: 123456789, }, }) c.Check(err, check.IsNil) c.Check(best.Name, check.Equals, "best") c.Check(best.RAM >= 1234567890, check.Equals, true) c.Check(best.VCPUs >= 2, check.Equals, true) } }