github.com/juju/juju@v0.0.0-20240327075706-a90865de2538/container/kvm/export_test.go (about)

     1  // Copyright 2014 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package kvm
     5  
     6  import (
     7  	"strings"
     8  
     9  	"github.com/juju/juju/environs/instances"
    10  )
    11  
    12  // This file exports internal package implementations so that tests
    13  // can utilize them to mock behavior.
    14  
    15  var KVMPath = &kvmPath
    16  
    17  // MakeCreateMachineParamsTestable adds test values to non exported values on
    18  // CreateMachineParams.
    19  func MakeCreateMachineParamsTestable(params *CreateMachineParams, pathfinder pathfinderFunc, runCmd runFunc, arch string) {
    20  	params.findPath = pathfinder
    21  	params.runCmd = runCmd
    22  	params.runCmdAsRoot = runCmd
    23  	params.arch = arch
    24  	return
    25  }
    26  
    27  // NewEmptyKvmContainer returns an empty kvmContainer for testing.
    28  func NewEmptyKvmContainer() *kvmContainer {
    29  	return &kvmContainer{}
    30  }
    31  
    32  // NewTestContainer returns a new container for testing.
    33  func NewTestContainer(name string, runCmd runFunc, pathfinder pathfinderFunc) *kvmContainer {
    34  	return &kvmContainer{name: name, runCmd: runCmd, pathfinder: pathfinder}
    35  }
    36  
    37  // ContainerFromInstance extracts the inner container from input instance,
    38  // so we can access it for test assertions.
    39  func ContainerFromInstance(inst instances.Instance) Container {
    40  	kvm := inst.(*kvmInstance)
    41  	return kvm.container
    42  }
    43  
    44  // NewRunStub is a stub to fake shelling out to os.Exec or utils.RunCommand.
    45  func NewRunStub(output string, err error) *runStub {
    46  	return &runStub{output: output, err: err}
    47  }
    48  
    49  type runStub struct {
    50  	output string
    51  	err    error
    52  	calls  []string
    53  }
    54  
    55  // Run fakes running commands, instead recording calls made for use in testing.
    56  func (s *runStub) Run(dir, cmd string, args ...string) (string, error) {
    57  	call := []string{dir, cmd}
    58  	call = append(call, args...)
    59  	s.calls = append(s.calls, strings.Join(call, " "))
    60  	if s.err != nil {
    61  		return s.err.Error(), s.err
    62  	}
    63  	return s.output, nil
    64  }
    65  
    66  // Calls returns the calls made on a runStub.
    67  func (s *runStub) Calls() []string {
    68  	return s.calls
    69  }