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 }