mirror of
https://github.com/opentofu/opentofu.git
synced 2024-12-26 00:41:27 -06:00
cba592d54f
The interrupt tests for providers no longer check for the condition during the diff operation. defer the lock so other test's DiffFns don't need to be as carefull locking themselves.
316 lines
8.5 KiB
Go
316 lines
8.5 KiB
Go
package terraform
|
|
|
|
import (
|
|
"sync"
|
|
)
|
|
|
|
// MockResourceProvider implements ResourceProvider but mocks out all the
|
|
// calls for testing purposes.
|
|
type MockResourceProvider struct {
|
|
sync.Mutex
|
|
|
|
// Anything you want, in case you need to store extra data with the mock.
|
|
Meta interface{}
|
|
|
|
CloseCalled bool
|
|
CloseError error
|
|
GetSchemaCalled bool
|
|
GetSchemaRequest *ProviderSchemaRequest
|
|
GetSchemaReturn *ProviderSchema
|
|
GetSchemaReturnError error
|
|
InputCalled bool
|
|
InputInput UIInput
|
|
InputConfig *ResourceConfig
|
|
InputReturnConfig *ResourceConfig
|
|
InputReturnError error
|
|
InputFn func(UIInput, *ResourceConfig) (*ResourceConfig, error)
|
|
ApplyCalled bool
|
|
ApplyInfo *InstanceInfo
|
|
ApplyState *InstanceState
|
|
ApplyDiff *InstanceDiff
|
|
ApplyFn func(*InstanceInfo, *InstanceState, *InstanceDiff) (*InstanceState, error)
|
|
ApplyReturn *InstanceState
|
|
ApplyReturnError error
|
|
ConfigureCalled bool
|
|
ConfigureConfig *ResourceConfig
|
|
ConfigureFn func(*ResourceConfig) error
|
|
ConfigureReturnError error
|
|
DiffCalled bool
|
|
DiffInfo *InstanceInfo
|
|
DiffState *InstanceState
|
|
DiffDesired *ResourceConfig
|
|
DiffFn func(*InstanceInfo, *InstanceState, *ResourceConfig) (*InstanceDiff, error)
|
|
DiffReturn *InstanceDiff
|
|
DiffReturnError error
|
|
RefreshCalled bool
|
|
RefreshInfo *InstanceInfo
|
|
RefreshState *InstanceState
|
|
RefreshFn func(*InstanceInfo, *InstanceState) (*InstanceState, error)
|
|
RefreshReturn *InstanceState
|
|
RefreshReturnError error
|
|
ResourcesCalled bool
|
|
ResourcesReturn []ResourceType
|
|
ReadDataApplyCalled bool
|
|
ReadDataApplyInfo *InstanceInfo
|
|
ReadDataApplyDiff *InstanceDiff
|
|
ReadDataApplyFn func(*InstanceInfo, *InstanceDiff) (*InstanceState, error)
|
|
ReadDataApplyReturn *InstanceState
|
|
ReadDataApplyReturnError error
|
|
ReadDataDiffCalled bool
|
|
ReadDataDiffInfo *InstanceInfo
|
|
ReadDataDiffDesired *ResourceConfig
|
|
ReadDataDiffFn func(*InstanceInfo, *ResourceConfig) (*InstanceDiff, error)
|
|
ReadDataDiffReturn *InstanceDiff
|
|
ReadDataDiffReturnError error
|
|
StopCalled bool
|
|
StopFn func() error
|
|
StopReturnError error
|
|
DataSourcesCalled bool
|
|
DataSourcesReturn []DataSource
|
|
ValidateCalled bool
|
|
ValidateConfig *ResourceConfig
|
|
ValidateFn func(*ResourceConfig) ([]string, []error)
|
|
ValidateReturnWarns []string
|
|
ValidateReturnErrors []error
|
|
ValidateResourceFn func(string, *ResourceConfig) ([]string, []error)
|
|
ValidateResourceCalled bool
|
|
ValidateResourceType string
|
|
ValidateResourceConfig *ResourceConfig
|
|
ValidateResourceReturnWarns []string
|
|
ValidateResourceReturnErrors []error
|
|
ValidateDataSourceFn func(string, *ResourceConfig) ([]string, []error)
|
|
ValidateDataSourceCalled bool
|
|
ValidateDataSourceType string
|
|
ValidateDataSourceConfig *ResourceConfig
|
|
ValidateDataSourceReturnWarns []string
|
|
ValidateDataSourceReturnErrors []error
|
|
|
|
ImportStateCalled bool
|
|
ImportStateInfo *InstanceInfo
|
|
ImportStateID string
|
|
ImportStateReturn []*InstanceState
|
|
ImportStateReturnError error
|
|
ImportStateFn func(*InstanceInfo, string) ([]*InstanceState, error)
|
|
}
|
|
|
|
func (p *MockResourceProvider) Close() error {
|
|
p.CloseCalled = true
|
|
return p.CloseError
|
|
}
|
|
|
|
func (p *MockResourceProvider) GetSchema(req *ProviderSchemaRequest) (*ProviderSchema, error) {
|
|
p.Lock()
|
|
defer p.Unlock()
|
|
|
|
p.GetSchemaCalled = true
|
|
p.GetSchemaRequest = req
|
|
return p.GetSchemaReturn, p.GetSchemaReturnError
|
|
}
|
|
|
|
func (p *MockResourceProvider) Input(
|
|
input UIInput, c *ResourceConfig) (*ResourceConfig, error) {
|
|
p.Lock()
|
|
defer p.Unlock()
|
|
p.InputCalled = true
|
|
p.InputInput = input
|
|
p.InputConfig = c
|
|
if p.InputFn != nil {
|
|
return p.InputFn(input, c)
|
|
}
|
|
return p.InputReturnConfig, p.InputReturnError
|
|
}
|
|
|
|
func (p *MockResourceProvider) Validate(c *ResourceConfig) ([]string, []error) {
|
|
p.Lock()
|
|
defer p.Unlock()
|
|
|
|
p.ValidateCalled = true
|
|
p.ValidateConfig = c
|
|
if p.ValidateFn != nil {
|
|
return p.ValidateFn(c)
|
|
}
|
|
return p.ValidateReturnWarns, p.ValidateReturnErrors
|
|
}
|
|
|
|
func (p *MockResourceProvider) ValidateResource(t string, c *ResourceConfig) ([]string, []error) {
|
|
p.Lock()
|
|
defer p.Unlock()
|
|
|
|
p.ValidateResourceCalled = true
|
|
p.ValidateResourceType = t
|
|
p.ValidateResourceConfig = c
|
|
|
|
if p.ValidateResourceFn != nil {
|
|
return p.ValidateResourceFn(t, c)
|
|
}
|
|
|
|
return p.ValidateResourceReturnWarns, p.ValidateResourceReturnErrors
|
|
}
|
|
|
|
func (p *MockResourceProvider) Configure(c *ResourceConfig) error {
|
|
p.Lock()
|
|
defer p.Unlock()
|
|
|
|
p.ConfigureCalled = true
|
|
p.ConfigureConfig = c
|
|
|
|
if p.ConfigureFn != nil {
|
|
return p.ConfigureFn(c)
|
|
}
|
|
|
|
return p.ConfigureReturnError
|
|
}
|
|
|
|
func (p *MockResourceProvider) Stop() error {
|
|
p.Lock()
|
|
defer p.Unlock()
|
|
|
|
p.StopCalled = true
|
|
if p.StopFn != nil {
|
|
return p.StopFn()
|
|
}
|
|
|
|
return p.StopReturnError
|
|
}
|
|
|
|
func (p *MockResourceProvider) Apply(
|
|
info *InstanceInfo,
|
|
state *InstanceState,
|
|
diff *InstanceDiff) (*InstanceState, error) {
|
|
// We only lock while writing data. Reading is fine
|
|
p.Lock()
|
|
p.ApplyCalled = true
|
|
p.ApplyInfo = info
|
|
p.ApplyState = state
|
|
p.ApplyDiff = diff
|
|
p.Unlock()
|
|
|
|
if p.ApplyFn != nil {
|
|
return p.ApplyFn(info, state, diff)
|
|
}
|
|
|
|
return p.ApplyReturn.DeepCopy(), p.ApplyReturnError
|
|
}
|
|
|
|
func (p *MockResourceProvider) Diff(
|
|
info *InstanceInfo,
|
|
state *InstanceState,
|
|
desired *ResourceConfig) (*InstanceDiff, error) {
|
|
p.Lock()
|
|
defer p.Unlock()
|
|
|
|
p.DiffCalled = true
|
|
p.DiffInfo = info
|
|
p.DiffState = state
|
|
p.DiffDesired = desired
|
|
|
|
if p.DiffFn != nil {
|
|
return p.DiffFn(info, state, desired)
|
|
}
|
|
|
|
return p.DiffReturn.DeepCopy(), p.DiffReturnError
|
|
}
|
|
|
|
func (p *MockResourceProvider) Refresh(
|
|
info *InstanceInfo,
|
|
s *InstanceState) (*InstanceState, error) {
|
|
p.Lock()
|
|
defer p.Unlock()
|
|
|
|
p.RefreshCalled = true
|
|
p.RefreshInfo = info
|
|
p.RefreshState = s
|
|
|
|
if p.RefreshFn != nil {
|
|
return p.RefreshFn(info, s)
|
|
}
|
|
|
|
return p.RefreshReturn.DeepCopy(), p.RefreshReturnError
|
|
}
|
|
|
|
func (p *MockResourceProvider) Resources() []ResourceType {
|
|
p.Lock()
|
|
defer p.Unlock()
|
|
|
|
p.ResourcesCalled = true
|
|
return p.ResourcesReturn
|
|
}
|
|
|
|
func (p *MockResourceProvider) ImportState(info *InstanceInfo, id string) ([]*InstanceState, error) {
|
|
p.Lock()
|
|
defer p.Unlock()
|
|
|
|
p.ImportStateCalled = true
|
|
p.ImportStateInfo = info
|
|
p.ImportStateID = id
|
|
if p.ImportStateFn != nil {
|
|
return p.ImportStateFn(info, id)
|
|
}
|
|
|
|
var result []*InstanceState
|
|
if p.ImportStateReturn != nil {
|
|
result = make([]*InstanceState, len(p.ImportStateReturn))
|
|
for i, v := range p.ImportStateReturn {
|
|
result[i] = v.DeepCopy()
|
|
}
|
|
}
|
|
|
|
return result, p.ImportStateReturnError
|
|
}
|
|
|
|
func (p *MockResourceProvider) ValidateDataSource(t string, c *ResourceConfig) ([]string, []error) {
|
|
p.Lock()
|
|
defer p.Unlock()
|
|
|
|
p.ValidateDataSourceCalled = true
|
|
p.ValidateDataSourceType = t
|
|
p.ValidateDataSourceConfig = c
|
|
|
|
if p.ValidateDataSourceFn != nil {
|
|
return p.ValidateDataSourceFn(t, c)
|
|
}
|
|
|
|
return p.ValidateDataSourceReturnWarns, p.ValidateDataSourceReturnErrors
|
|
}
|
|
|
|
func (p *MockResourceProvider) ReadDataDiff(
|
|
info *InstanceInfo,
|
|
desired *ResourceConfig) (*InstanceDiff, error) {
|
|
p.Lock()
|
|
defer p.Unlock()
|
|
|
|
p.ReadDataDiffCalled = true
|
|
p.ReadDataDiffInfo = info
|
|
p.ReadDataDiffDesired = desired
|
|
if p.ReadDataDiffFn != nil {
|
|
return p.ReadDataDiffFn(info, desired)
|
|
}
|
|
|
|
return p.ReadDataDiffReturn.DeepCopy(), p.ReadDataDiffReturnError
|
|
}
|
|
|
|
func (p *MockResourceProvider) ReadDataApply(
|
|
info *InstanceInfo,
|
|
d *InstanceDiff) (*InstanceState, error) {
|
|
p.Lock()
|
|
defer p.Unlock()
|
|
|
|
p.ReadDataApplyCalled = true
|
|
p.ReadDataApplyInfo = info
|
|
p.ReadDataApplyDiff = d
|
|
|
|
if p.ReadDataApplyFn != nil {
|
|
return p.ReadDataApplyFn(info, d)
|
|
}
|
|
|
|
return p.ReadDataApplyReturn.DeepCopy(), p.ReadDataApplyReturnError
|
|
}
|
|
|
|
func (p *MockResourceProvider) DataSources() []DataSource {
|
|
p.Lock()
|
|
defer p.Unlock()
|
|
|
|
p.DataSourcesCalled = true
|
|
return p.DataSourcesReturn
|
|
}
|