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  }