github.com/axw/juju@v0.0.0-20161005053422-4bd6544d08d4/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 func (env *mockEnviron) StartInstance(args environs.StartInstanceParams) (*environs.StartInstanceResult, error) { 49 inst, hw, networkInfo, err := env.startInstance( 50 args.Placement, 51 args.Constraints, 52 nil, 53 args.Tools, 54 args.InstanceConfig, 55 ) 56 if err != nil { 57 return nil, err 58 } 59 return &environs.StartInstanceResult{ 60 Instance: inst, 61 Hardware: hw, 62 NetworkInfo: networkInfo, 63 }, nil 64 } 65 66 func (env *mockEnviron) StopInstances(ids ...instance.Id) error { 67 return env.stopInstances(ids) 68 } 69 70 func (env *mockEnviron) Config() *config.Config { 71 return env.config() 72 } 73 74 func (env *mockEnviron) SetConfig(cfg *config.Config) error { 75 if env.setConfig != nil { 76 return env.setConfig(cfg) 77 } 78 return nil 79 } 80 81 func (env *mockEnviron) GetToolsSources() ([]simplestreams.DataSource, error) { 82 if env.getToolsSources != nil { 83 return env.getToolsSources() 84 } 85 datasource := storage.NewStorageSimpleStreamsDataSource("test cloud storage", env.Storage(), storage.BaseToolsPath, simplestreams.SPECIFIC_CLOUD_DATA, false) 86 return []simplestreams.DataSource{datasource}, nil 87 } 88 89 func (env *mockEnviron) StorageProviderTypes() ([]jujustorage.ProviderType, error) { 90 return env.storageProviders.StorageProviderTypes() 91 } 92 93 func (env *mockEnviron) StorageProvider(t jujustorage.ProviderType) (jujustorage.Provider, error) { 94 return env.storageProviders.StorageProvider(t) 95 } 96 97 type availabilityZonesFunc func() ([]common.AvailabilityZone, error) 98 type instanceAvailabilityZoneNamesFunc func([]instance.Id) ([]string, error) 99 100 type mockZonedEnviron struct { 101 mockEnviron 102 availabilityZones availabilityZonesFunc 103 instanceAvailabilityZoneNames instanceAvailabilityZoneNamesFunc 104 } 105 106 func (env *mockZonedEnviron) AvailabilityZones() ([]common.AvailabilityZone, error) { 107 return env.availabilityZones() 108 } 109 110 func (env *mockZonedEnviron) InstanceAvailabilityZoneNames(ids []instance.Id) ([]string, error) { 111 return env.instanceAvailabilityZoneNames(ids) 112 } 113 114 type mockInstance struct { 115 id string 116 addresses []network.Address 117 addressesErr error 118 dnsName string 119 dnsNameErr error 120 instance.Instance // stub out other methods with panics 121 } 122 123 func (inst *mockInstance) Id() instance.Id { 124 return instance.Id(inst.id) 125 } 126 127 func (inst *mockInstance) Addresses() ([]network.Address, error) { 128 return inst.addresses, inst.addressesErr 129 } 130 131 type mockStorage struct { 132 storage.Storage 133 putErr error 134 removeAllErr error 135 } 136 137 func (stor *mockStorage) Put(name string, reader io.Reader, size int64) error { 138 if stor.putErr != nil { 139 return stor.putErr 140 } 141 return stor.Storage.Put(name, reader, size) 142 } 143 144 func (stor *mockStorage) RemoveAll() error { 145 if stor.removeAllErr != nil { 146 return stor.removeAllErr 147 } 148 return stor.Storage.RemoveAll() 149 } 150 151 type mockAvailabilityZone struct { 152 name string 153 available bool 154 } 155 156 func (z *mockAvailabilityZone) Name() string { 157 return z.name 158 } 159 160 func (z *mockAvailabilityZone) Available() bool { 161 return z.available 162 }