1package fakes 2 3import ( 4 "fmt" 5 6 bicloud "github.com/cloudfoundry/bosh-cli/cloud" 7 bivm "github.com/cloudfoundry/bosh-cli/deployment/vm" 8 bitestutils "github.com/cloudfoundry/bosh-cli/testutils" 9 bosherr "github.com/cloudfoundry/bosh-utils/errors" 10) 11 12type NewManagerInput struct { 13 Cloud bicloud.Cloud 14 MbusURL string 15} 16 17type newManagerOutput struct { 18 manager bivm.Manager 19} 20 21type FakeManagerFactory struct { 22 NewManagerInputs []NewManagerInput 23 newManagerBehavior map[string]newManagerOutput 24} 25 26func NewFakeManagerFactory() *FakeManagerFactory { 27 return &FakeManagerFactory{ 28 NewManagerInputs: []NewManagerInput{}, 29 newManagerBehavior: map[string]newManagerOutput{}, 30 } 31} 32 33func (f *FakeManagerFactory) NewManager(cloud bicloud.Cloud, mbusURL string) bivm.Manager { 34 input := NewManagerInput{ 35 Cloud: cloud, 36 MbusURL: mbusURL, 37 } 38 f.NewManagerInputs = append(f.NewManagerInputs, input) 39 40 inputString, marshalErr := bitestutils.MarshalToString(input) 41 if marshalErr != nil { 42 panic(bosherr.WrapError(marshalErr, "Marshaling NewManager input")) 43 } 44 45 output, found := f.newManagerBehavior[inputString] 46 if !found { 47 panic(fmt.Errorf("Unsupported NewManager Input: %#v\nExpected Behavior: %#v", input, f.newManagerBehavior)) 48 } 49 50 return output.manager 51} 52 53func (f *FakeManagerFactory) SetNewManagerBehavior(cloud bicloud.Cloud, mbusURL string, manager bivm.Manager) { 54 input := NewManagerInput{ 55 Cloud: cloud, 56 MbusURL: mbusURL, 57 } 58 59 inputString, marshalErr := bitestutils.MarshalToString(input) 60 if marshalErr != nil { 61 panic(bosherr.WrapError(marshalErr, "Marshaling NewManager input")) 62 } 63 64 f.newManagerBehavior[inputString] = newManagerOutput{manager: manager} 65} 66