github.com/terramate-io/tf@v0.0.0-20230830114523-fce866b4dfcd/legacy/terraform/resource_provider_mock.go (about) 1 // Copyright (c) HashiCorp, Inc. 2 // SPDX-License-Identifier: MPL-2.0 3 4 package terraform 5 6 import ( 7 "sync" 8 ) 9 10 // MockResourceProvider implements ResourceProvider but mocks out all the 11 // calls for testing purposes. 12 type MockResourceProvider struct { 13 sync.Mutex 14 15 // Anything you want, in case you need to store extra data with the mock. 16 Meta interface{} 17 18 CloseCalled bool 19 CloseError error 20 GetSchemaCalled bool 21 GetSchemaRequest *ProviderSchemaRequest 22 GetSchemaReturn *ProviderSchema 23 GetSchemaReturnError error 24 InputCalled bool 25 InputInput UIInput 26 InputConfig *ResourceConfig 27 InputReturnConfig *ResourceConfig 28 InputReturnError error 29 InputFn func(UIInput, *ResourceConfig) (*ResourceConfig, error) 30 ApplyCalled bool 31 ApplyInfo *InstanceInfo 32 ApplyState *InstanceState 33 ApplyDiff *InstanceDiff 34 ApplyFn func(*InstanceInfo, *InstanceState, *InstanceDiff) (*InstanceState, error) 35 ApplyReturn *InstanceState 36 ApplyReturnError error 37 ConfigureCalled bool 38 ConfigureConfig *ResourceConfig 39 ConfigureProviderFn func(*ResourceConfig) error 40 ConfigureReturnError error 41 DiffCalled bool 42 DiffInfo *InstanceInfo 43 DiffState *InstanceState 44 DiffDesired *ResourceConfig 45 DiffFn func(*InstanceInfo, *InstanceState, *ResourceConfig) (*InstanceDiff, error) 46 DiffReturn *InstanceDiff 47 DiffReturnError error 48 RefreshCalled bool 49 RefreshInfo *InstanceInfo 50 RefreshState *InstanceState 51 RefreshFn func(*InstanceInfo, *InstanceState) (*InstanceState, error) 52 RefreshReturn *InstanceState 53 RefreshReturnError error 54 ResourcesCalled bool 55 ResourcesReturn []ResourceType 56 ReadDataApplyCalled bool 57 ReadDataApplyInfo *InstanceInfo 58 ReadDataApplyDiff *InstanceDiff 59 ReadDataApplyFn func(*InstanceInfo, *InstanceDiff) (*InstanceState, error) 60 ReadDataApplyReturn *InstanceState 61 ReadDataApplyReturnError error 62 ReadDataDiffCalled bool 63 ReadDataDiffInfo *InstanceInfo 64 ReadDataDiffDesired *ResourceConfig 65 ReadDataDiffFn func(*InstanceInfo, *ResourceConfig) (*InstanceDiff, error) 66 ReadDataDiffReturn *InstanceDiff 67 ReadDataDiffReturnError error 68 StopCalled bool 69 StopFn func() error 70 StopReturnError error 71 DataSourcesCalled bool 72 DataSourcesReturn []DataSource 73 ValidateCalled bool 74 ValidateConfig *ResourceConfig 75 ValidateFn func(*ResourceConfig) ([]string, []error) 76 ValidateReturnWarns []string 77 ValidateReturnErrors []error 78 ValidateResourceFn func(string, *ResourceConfig) ([]string, []error) 79 ValidateResourceCalled bool 80 ValidateResourceType string 81 ValidateResourceConfig *ResourceConfig 82 ValidateResourceReturnWarns []string 83 ValidateResourceReturnErrors []error 84 ValidateDataSourceFn func(string, *ResourceConfig) ([]string, []error) 85 ValidateDataSourceCalled bool 86 ValidateDataSourceType string 87 ValidateDataSourceConfig *ResourceConfig 88 ValidateDataSourceReturnWarns []string 89 ValidateDataSourceReturnErrors []error 90 91 ImportStateCalled bool 92 ImportStateInfo *InstanceInfo 93 ImportStateID string 94 ImportStateReturn []*InstanceState 95 ImportStateReturnError error 96 ImportStateFn func(*InstanceInfo, string) ([]*InstanceState, error) 97 } 98 99 func (p *MockResourceProvider) Close() error { 100 p.CloseCalled = true 101 return p.CloseError 102 } 103 104 func (p *MockResourceProvider) GetSchema(req *ProviderSchemaRequest) (*ProviderSchema, error) { 105 p.Lock() 106 defer p.Unlock() 107 108 p.GetSchemaCalled = true 109 p.GetSchemaRequest = req 110 return p.GetSchemaReturn, p.GetSchemaReturnError 111 } 112 113 func (p *MockResourceProvider) Input( 114 input UIInput, c *ResourceConfig) (*ResourceConfig, error) { 115 p.Lock() 116 defer p.Unlock() 117 p.InputCalled = true 118 p.InputInput = input 119 p.InputConfig = c 120 if p.InputFn != nil { 121 return p.InputFn(input, c) 122 } 123 return p.InputReturnConfig, p.InputReturnError 124 } 125 126 func (p *MockResourceProvider) Validate(c *ResourceConfig) ([]string, []error) { 127 p.Lock() 128 defer p.Unlock() 129 130 p.ValidateCalled = true 131 p.ValidateConfig = c 132 if p.ValidateFn != nil { 133 return p.ValidateFn(c) 134 } 135 return p.ValidateReturnWarns, p.ValidateReturnErrors 136 } 137 138 func (p *MockResourceProvider) ValidateResource(t string, c *ResourceConfig) ([]string, []error) { 139 p.Lock() 140 defer p.Unlock() 141 142 p.ValidateResourceCalled = true 143 p.ValidateResourceType = t 144 p.ValidateResourceConfig = c 145 146 if p.ValidateResourceFn != nil { 147 return p.ValidateResourceFn(t, c) 148 } 149 150 return p.ValidateResourceReturnWarns, p.ValidateResourceReturnErrors 151 } 152 153 func (p *MockResourceProvider) Configure(c *ResourceConfig) error { 154 p.Lock() 155 defer p.Unlock() 156 157 p.ConfigureCalled = true 158 p.ConfigureConfig = c 159 160 if p.ConfigureProviderFn != nil { 161 return p.ConfigureProviderFn(c) 162 } 163 164 return p.ConfigureReturnError 165 } 166 167 func (p *MockResourceProvider) Stop() error { 168 p.Lock() 169 defer p.Unlock() 170 171 p.StopCalled = true 172 if p.StopFn != nil { 173 return p.StopFn() 174 } 175 176 return p.StopReturnError 177 } 178 179 func (p *MockResourceProvider) Apply( 180 info *InstanceInfo, 181 state *InstanceState, 182 diff *InstanceDiff) (*InstanceState, error) { 183 // We only lock while writing data. Reading is fine 184 p.Lock() 185 p.ApplyCalled = true 186 p.ApplyInfo = info 187 p.ApplyState = state 188 p.ApplyDiff = diff 189 p.Unlock() 190 191 if p.ApplyFn != nil { 192 return p.ApplyFn(info, state, diff) 193 } 194 195 return p.ApplyReturn.DeepCopy(), p.ApplyReturnError 196 } 197 198 func (p *MockResourceProvider) Diff( 199 info *InstanceInfo, 200 state *InstanceState, 201 desired *ResourceConfig) (*InstanceDiff, error) { 202 p.Lock() 203 defer p.Unlock() 204 205 p.DiffCalled = true 206 p.DiffInfo = info 207 p.DiffState = state 208 p.DiffDesired = desired 209 210 if p.DiffFn != nil { 211 return p.DiffFn(info, state, desired) 212 } 213 214 return p.DiffReturn.DeepCopy(), p.DiffReturnError 215 } 216 217 func (p *MockResourceProvider) Refresh( 218 info *InstanceInfo, 219 s *InstanceState) (*InstanceState, error) { 220 p.Lock() 221 defer p.Unlock() 222 223 p.RefreshCalled = true 224 p.RefreshInfo = info 225 p.RefreshState = s 226 227 if p.RefreshFn != nil { 228 return p.RefreshFn(info, s) 229 } 230 231 return p.RefreshReturn.DeepCopy(), p.RefreshReturnError 232 } 233 234 func (p *MockResourceProvider) Resources() []ResourceType { 235 p.Lock() 236 defer p.Unlock() 237 238 p.ResourcesCalled = true 239 return p.ResourcesReturn 240 } 241 242 func (p *MockResourceProvider) ImportState(info *InstanceInfo, id string) ([]*InstanceState, error) { 243 p.Lock() 244 defer p.Unlock() 245 246 p.ImportStateCalled = true 247 p.ImportStateInfo = info 248 p.ImportStateID = id 249 if p.ImportStateFn != nil { 250 return p.ImportStateFn(info, id) 251 } 252 253 var result []*InstanceState 254 if p.ImportStateReturn != nil { 255 result = make([]*InstanceState, len(p.ImportStateReturn)) 256 for i, v := range p.ImportStateReturn { 257 result[i] = v.DeepCopy() 258 } 259 } 260 261 return result, p.ImportStateReturnError 262 } 263 264 func (p *MockResourceProvider) ValidateDataSource(t string, c *ResourceConfig) ([]string, []error) { 265 p.Lock() 266 defer p.Unlock() 267 268 p.ValidateDataSourceCalled = true 269 p.ValidateDataSourceType = t 270 p.ValidateDataSourceConfig = c 271 272 if p.ValidateDataSourceFn != nil { 273 return p.ValidateDataSourceFn(t, c) 274 } 275 276 return p.ValidateDataSourceReturnWarns, p.ValidateDataSourceReturnErrors 277 } 278 279 func (p *MockResourceProvider) ReadDataDiff( 280 info *InstanceInfo, 281 desired *ResourceConfig) (*InstanceDiff, error) { 282 p.Lock() 283 defer p.Unlock() 284 285 p.ReadDataDiffCalled = true 286 p.ReadDataDiffInfo = info 287 p.ReadDataDiffDesired = desired 288 if p.ReadDataDiffFn != nil { 289 return p.ReadDataDiffFn(info, desired) 290 } 291 292 return p.ReadDataDiffReturn.DeepCopy(), p.ReadDataDiffReturnError 293 } 294 295 func (p *MockResourceProvider) ReadDataApply( 296 info *InstanceInfo, 297 d *InstanceDiff) (*InstanceState, error) { 298 p.Lock() 299 defer p.Unlock() 300 301 p.ReadDataApplyCalled = true 302 p.ReadDataApplyInfo = info 303 p.ReadDataApplyDiff = d 304 305 if p.ReadDataApplyFn != nil { 306 return p.ReadDataApplyFn(info, d) 307 } 308 309 return p.ReadDataApplyReturn.DeepCopy(), p.ReadDataApplyReturnError 310 } 311 312 func (p *MockResourceProvider) DataSources() []DataSource { 313 p.Lock() 314 defer p.Unlock() 315 316 p.DataSourcesCalled = true 317 return p.DataSourcesReturn 318 }