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