github.com/juju/juju@v0.0.0-20240327075706-a90865de2538/container/testing/common.go (about) 1 // Copyright 2013 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package testing 5 6 import ( 7 "context" 8 "os" 9 10 jc "github.com/juju/testing/checkers" 11 "github.com/juju/version/v2" 12 gc "gopkg.in/check.v1" 13 14 "github.com/juju/juju/cloudconfig/instancecfg" 15 "github.com/juju/juju/container" 16 corebase "github.com/juju/juju/core/base" 17 "github.com/juju/juju/core/constraints" 18 "github.com/juju/juju/core/status" 19 "github.com/juju/juju/environs/imagemetadata" 20 "github.com/juju/juju/environs/instances" 21 jujutesting "github.com/juju/juju/juju/testing" 22 "github.com/juju/juju/testing" 23 "github.com/juju/juju/tools" 24 ) 25 26 func MockMachineConfig(machineId string) (*instancecfg.InstanceConfig, error) { 27 28 apiInfo := jujutesting.FakeAPIInfo(machineId) 29 instanceConfig, err := instancecfg.NewInstanceConfig(testing.ControllerTag, machineId, "fake-nonce", 30 imagemetadata.ReleasedStream, corebase.MakeDefaultBase("ubuntu", "22.04"), apiInfo) 31 if err != nil { 32 return nil, err 33 } 34 err = instanceConfig.SetTools(tools.List{ 35 &tools.Tools{ 36 Version: version.MustParseBinary("2.5.2-ubuntu-amd64"), 37 URL: "http://tools.testing.invalid/2.5.2-ubuntu-amd64.tgz", 38 }, 39 }) 40 if err != nil { 41 return nil, err 42 } 43 44 return instanceConfig, nil 45 } 46 47 func CreateContainer(c *gc.C, manager container.Manager, machineId string) instances.Instance { 48 instanceConfig, err := MockMachineConfig(machineId) 49 c.Assert(err, jc.ErrorIsNil) 50 return CreateContainerWithMachineConfig(c, manager, instanceConfig) 51 } 52 53 func CreateContainerWithMachineConfig( 54 c *gc.C, 55 manager container.Manager, 56 instanceConfig *instancecfg.InstanceConfig, 57 ) instances.Instance { 58 59 networkConfig := container.BridgeNetworkConfig(0, nil) 60 storageConfig := &container.StorageConfig{} 61 return CreateContainerWithMachineAndNetworkAndStorageConfig(c, manager, instanceConfig, networkConfig, storageConfig) 62 } 63 64 func CreateContainerWithMachineAndNetworkAndStorageConfig( 65 c *gc.C, 66 manager container.Manager, 67 instanceConfig *instancecfg.InstanceConfig, 68 networkConfig *container.NetworkConfig, 69 storageConfig *container.StorageConfig, 70 ) instances.Instance { 71 callback := func(settableStatus status.Status, info string, data map[string]interface{}) error { return nil } 72 inst, hardware, err := manager.CreateContainer( 73 context.Background(), instanceConfig, constraints.Value{}, corebase.MakeDefaultBase("ubuntu", "18.04"), networkConfig, storageConfig, callback) 74 c.Assert(err, jc.ErrorIsNil) 75 c.Assert(hardware, gc.NotNil) 76 c.Assert(hardware.String(), gc.Not(gc.Equals), "") 77 return inst 78 } 79 80 func AssertCloudInit(c *gc.C, filename string) []byte { 81 c.Assert(filename, jc.IsNonEmptyFile) 82 data, err := os.ReadFile(filename) 83 c.Assert(err, jc.ErrorIsNil) 84 c.Assert(string(data), jc.HasPrefix, "#cloud-config\n") 85 return data 86 }