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  }