github.com/wallyworld/juju@v0.0.0-20161013125918-6cf1bc9d917a/provider/common/mock_test.go (about) 1 // Copyright 2013 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package common_test 5 6 import ( 7 "io" 8 9 "github.com/juju/juju/cloudconfig/instancecfg" 10 "github.com/juju/juju/constraints" 11 "github.com/juju/juju/environs" 12 "github.com/juju/juju/environs/config" 13 "github.com/juju/juju/environs/simplestreams" 14 "github.com/juju/juju/environs/storage" 15 "github.com/juju/juju/instance" 16 "github.com/juju/juju/network" 17 "github.com/juju/juju/provider/common" 18 jujustorage "github.com/juju/juju/storage" 19 "github.com/juju/juju/tools" 20 ) 21 22 type allInstancesFunc func() ([]instance.Instance, error) 23 type startInstanceFunc func(string, constraints.Value, []string, tools.List, *instancecfg.InstanceConfig) (instance.Instance, *instance.HardwareCharacteristics, []network.InterfaceInfo, error) 24 type stopInstancesFunc func([]instance.Id) error 25 type getToolsSourcesFunc func() ([]simplestreams.DataSource, error) 26 type configFunc func() *config.Config 27 type setConfigFunc func(*config.Config) error 28 29 type mockEnviron struct { 30 storage storage.Storage 31 allInstances allInstancesFunc 32 startInstance startInstanceFunc 33 stopInstances stopInstancesFunc 34 getToolsSources getToolsSourcesFunc 35 config configFunc 36 setConfig setConfigFunc 37 storageProviders jujustorage.StaticProviderRegistry 38 environs.Environ // stub out other methods with panics 39 } 40 41 func (env *mockEnviron) Storage() storage.Storage { 42 return env.storage 43 } 44 45 func (env *mockEnviron) AllInstances() ([]instance.Instance, error) { 46 return env.allInstances() 47 } 48 49 func (env *mockEnviron) BootstrapMessage() string { 50 return "Some message" 51 } 52 53 func (env *mockEnviron) StartInstance(args environs.StartInstanceParams) (*environs.StartInstanceResult, error) { 54 inst, hw, networkInfo, err := env.startInstance( 55 args.Placement, 56 args.Constraints, 57 nil, 58 args.Tools, 59 args.InstanceConfig, 60 ) 61 if err != nil { 62 return nil, err 63 } 64 return &environs.StartInstanceResult{ 65 Instance: inst, 66 Hardware: hw, 67 NetworkInfo: networkInfo, 68 }, nil 69 } 70 71 func (env *mockEnviron) StopInstances(ids ...instance.Id) error { 72 return env.stopInstances(ids) 73 } 74 75 func (env *mockEnviron) Config() *config.Config { 76 return env.config() 77 } 78 79 func (env *mockEnviron) SetConfig(cfg *config.Config) error { 80 if env.setConfig != nil { 81 return env.setConfig(cfg) 82 } 83 return nil 84 } 85 86 func (env *mockEnviron) GetToolsSources() ([]simplestreams.DataSource, error) { 87 if env.getToolsSources != nil { 88 return env.getToolsSources() 89 } 90 datasource := storage.NewStorageSimpleStreamsDataSource("test cloud storage", env.Storage(), storage.BaseToolsPath, simplestreams.SPECIFIC_CLOUD_DATA, false) 91 return []simplestreams.DataSource{datasource}, nil 92 } 93 94 func (env *mockEnviron) StorageProviderTypes() ([]jujustorage.ProviderType, error) { 95 return env.storageProviders.StorageProviderTypes() 96 } 97 98 func (env *mockEnviron) StorageProvider(t jujustorage.ProviderType) (jujustorage.Provider, error) { 99 return env.storageProviders.StorageProvider(t) 100 } 101 102 type availabilityZonesFunc func() ([]common.AvailabilityZone, error) 103 type instanceAvailabilityZoneNamesFunc func([]instance.Id) ([]string, error) 104 105 type mockZonedEnviron struct { 106 mockEnviron 107 availabilityZones availabilityZonesFunc 108 instanceAvailabilityZoneNames instanceAvailabilityZoneNamesFunc 109 } 110 111 func (env *mockZonedEnviron) AvailabilityZones() ([]common.AvailabilityZone, error) { 112 return env.availabilityZones() 113 } 114 115 func (env *mockZonedEnviron) InstanceAvailabilityZoneNames(ids []instance.Id) ([]string, error) { 116 return env.instanceAvailabilityZoneNames(ids) 117 } 118 119 type mockInstance struct { 120 id string 121 addresses []network.Address 122 addressesErr error 123 dnsName string 124 dnsNameErr error 125 instance.Instance // stub out other methods with panics 126 } 127 128 func (inst *mockInstance) Id() instance.Id { 129 return instance.Id(inst.id) 130 } 131 132 func (inst *mockInstance) Addresses() ([]network.Address, error) { 133 return inst.addresses, inst.addressesErr 134 } 135 136 type mockStorage struct { 137 storage.Storage 138 putErr error 139 removeAllErr error 140 } 141 142 func (stor *mockStorage) Put(name string, reader io.Reader, size int64) error { 143 if stor.putErr != nil { 144 return stor.putErr 145 } 146 return stor.Storage.Put(name, reader, size) 147 } 148 149 func (stor *mockStorage) RemoveAll() error { 150 if stor.removeAllErr != nil { 151 return stor.removeAllErr 152 } 153 return stor.Storage.RemoveAll() 154 } 155 156 type mockAvailabilityZone struct { 157 name string 158 available bool 159 } 160 161 func (z *mockAvailabilityZone) Name() string { 162 return z.name 163 } 164 165 func (z *mockAvailabilityZone) Available() bool { 166 return z.available 167 }