github.com/opentofu/opentofu@v1.7.1/internal/tofu/hook_mock.go (about)

     1  // Copyright (c) The OpenTofu Authors
     2  // SPDX-License-Identifier: MPL-2.0
     3  // Copyright (c) 2023 HashiCorp, Inc.
     4  // SPDX-License-Identifier: MPL-2.0
     5  
     6  package tofu
     7  
     8  import (
     9  	"sync"
    10  
    11  	"github.com/zclconf/go-cty/cty"
    12  
    13  	"github.com/opentofu/opentofu/internal/addrs"
    14  	"github.com/opentofu/opentofu/internal/plans"
    15  	"github.com/opentofu/opentofu/internal/providers"
    16  	"github.com/opentofu/opentofu/internal/states"
    17  )
    18  
    19  // MockHook is an implementation of Hook that can be used for tests.
    20  // It records all of its function calls.
    21  type MockHook struct {
    22  	sync.Mutex
    23  
    24  	PreApplyCalled       bool
    25  	PreApplyAddr         addrs.AbsResourceInstance
    26  	PreApplyGen          states.Generation
    27  	PreApplyAction       plans.Action
    28  	PreApplyPriorState   cty.Value
    29  	PreApplyPlannedState cty.Value
    30  	PreApplyReturn       HookAction
    31  	PreApplyError        error
    32  
    33  	PostApplyCalled      bool
    34  	PostApplyAddr        addrs.AbsResourceInstance
    35  	PostApplyGen         states.Generation
    36  	PostApplyNewState    cty.Value
    37  	PostApplyError       error
    38  	PostApplyReturn      HookAction
    39  	PostApplyReturnError error
    40  	PostApplyFn          func(addrs.AbsResourceInstance, states.Generation, cty.Value, error) (HookAction, error)
    41  
    42  	PreDiffCalled        bool
    43  	PreDiffAddr          addrs.AbsResourceInstance
    44  	PreDiffGen           states.Generation
    45  	PreDiffPriorState    cty.Value
    46  	PreDiffProposedState cty.Value
    47  	PreDiffReturn        HookAction
    48  	PreDiffError         error
    49  
    50  	PostDiffCalled       bool
    51  	PostDiffAddr         addrs.AbsResourceInstance
    52  	PostDiffGen          states.Generation
    53  	PostDiffAction       plans.Action
    54  	PostDiffPriorState   cty.Value
    55  	PostDiffPlannedState cty.Value
    56  	PostDiffReturn       HookAction
    57  	PostDiffError        error
    58  
    59  	PreProvisionInstanceCalled bool
    60  	PreProvisionInstanceAddr   addrs.AbsResourceInstance
    61  	PreProvisionInstanceState  cty.Value
    62  	PreProvisionInstanceReturn HookAction
    63  	PreProvisionInstanceError  error
    64  
    65  	PostProvisionInstanceCalled bool
    66  	PostProvisionInstanceAddr   addrs.AbsResourceInstance
    67  	PostProvisionInstanceState  cty.Value
    68  	PostProvisionInstanceReturn HookAction
    69  	PostProvisionInstanceError  error
    70  
    71  	PreProvisionInstanceStepCalled          bool
    72  	PreProvisionInstanceStepAddr            addrs.AbsResourceInstance
    73  	PreProvisionInstanceStepProvisionerType string
    74  	PreProvisionInstanceStepReturn          HookAction
    75  	PreProvisionInstanceStepError           error
    76  
    77  	PostProvisionInstanceStepCalled          bool
    78  	PostProvisionInstanceStepAddr            addrs.AbsResourceInstance
    79  	PostProvisionInstanceStepProvisionerType string
    80  	PostProvisionInstanceStepErrorArg        error
    81  	PostProvisionInstanceStepReturn          HookAction
    82  	PostProvisionInstanceStepError           error
    83  
    84  	ProvisionOutputCalled          bool
    85  	ProvisionOutputAddr            addrs.AbsResourceInstance
    86  	ProvisionOutputProvisionerType string
    87  	ProvisionOutputMessage         string
    88  
    89  	PreRefreshCalled     bool
    90  	PreRefreshAddr       addrs.AbsResourceInstance
    91  	PreRefreshGen        states.Generation
    92  	PreRefreshPriorState cty.Value
    93  	PreRefreshReturn     HookAction
    94  	PreRefreshError      error
    95  
    96  	PostRefreshCalled     bool
    97  	PostRefreshAddr       addrs.AbsResourceInstance
    98  	PostRefreshGen        states.Generation
    99  	PostRefreshPriorState cty.Value
   100  	PostRefreshNewState   cty.Value
   101  	PostRefreshReturn     HookAction
   102  	PostRefreshError      error
   103  
   104  	PreImportStateCalled bool
   105  	PreImportStateAddr   addrs.AbsResourceInstance
   106  	PreImportStateID     string
   107  	PreImportStateReturn HookAction
   108  	PreImportStateError  error
   109  
   110  	PostImportStateCalled    bool
   111  	PostImportStateAddr      addrs.AbsResourceInstance
   112  	PostImportStateNewStates []providers.ImportedResource
   113  	PostImportStateReturn    HookAction
   114  	PostImportStateError     error
   115  
   116  	PrePlanImportCalled bool
   117  	PrePlanImportAddr   addrs.AbsResourceInstance
   118  	PrePlanImportReturn HookAction
   119  	PrePlanImportError  error
   120  
   121  	PostPlanImportAddr   addrs.AbsResourceInstance
   122  	PostPlanImportCalled bool
   123  	PostPlanImportReturn HookAction
   124  	PostPlanImportError  error
   125  
   126  	PreApplyImportCalled bool
   127  	PreApplyImportAddr   addrs.AbsResourceInstance
   128  	PreApplyImportReturn HookAction
   129  	PreApplyImportError  error
   130  
   131  	PostApplyImportCalled bool
   132  	PostApplyImportAddr   addrs.AbsResourceInstance
   133  	PostApplyImportReturn HookAction
   134  	PostApplyImportError  error
   135  
   136  	StoppingCalled bool
   137  
   138  	PostStateUpdateCalled bool
   139  	PostStateUpdateState  *states.State
   140  	PostStateUpdateReturn HookAction
   141  	PostStateUpdateError  error
   142  }
   143  
   144  var _ Hook = (*MockHook)(nil)
   145  
   146  func (h *MockHook) PreApply(addr addrs.AbsResourceInstance, gen states.Generation, action plans.Action, priorState, plannedNewState cty.Value) (HookAction, error) {
   147  	h.Lock()
   148  	defer h.Unlock()
   149  
   150  	h.PreApplyCalled = true
   151  	h.PreApplyAddr = addr
   152  	h.PreApplyGen = gen
   153  	h.PreApplyAction = action
   154  	h.PreApplyPriorState = priorState
   155  	h.PreApplyPlannedState = plannedNewState
   156  	return h.PreApplyReturn, h.PreApplyError
   157  }
   158  
   159  func (h *MockHook) PostApply(addr addrs.AbsResourceInstance, gen states.Generation, newState cty.Value, err error) (HookAction, error) {
   160  	h.Lock()
   161  	defer h.Unlock()
   162  
   163  	h.PostApplyCalled = true
   164  	h.PostApplyAddr = addr
   165  	h.PostApplyGen = gen
   166  	h.PostApplyNewState = newState
   167  	h.PostApplyError = err
   168  
   169  	if h.PostApplyFn != nil {
   170  		return h.PostApplyFn(addr, gen, newState, err)
   171  	}
   172  
   173  	return h.PostApplyReturn, h.PostApplyReturnError
   174  }
   175  
   176  func (h *MockHook) PreDiff(addr addrs.AbsResourceInstance, gen states.Generation, priorState, proposedNewState cty.Value) (HookAction, error) {
   177  	h.Lock()
   178  	defer h.Unlock()
   179  
   180  	h.PreDiffCalled = true
   181  	h.PreDiffAddr = addr
   182  	h.PreDiffGen = gen
   183  	h.PreDiffPriorState = priorState
   184  	h.PreDiffProposedState = proposedNewState
   185  	return h.PreDiffReturn, h.PreDiffError
   186  }
   187  
   188  func (h *MockHook) PostDiff(addr addrs.AbsResourceInstance, gen states.Generation, action plans.Action, priorState, plannedNewState cty.Value) (HookAction, error) {
   189  	h.Lock()
   190  	defer h.Unlock()
   191  
   192  	h.PostDiffCalled = true
   193  	h.PostDiffAddr = addr
   194  	h.PostDiffGen = gen
   195  	h.PostDiffAction = action
   196  	h.PostDiffPriorState = priorState
   197  	h.PostDiffPlannedState = plannedNewState
   198  	return h.PostDiffReturn, h.PostDiffError
   199  }
   200  
   201  func (h *MockHook) PreProvisionInstance(addr addrs.AbsResourceInstance, state cty.Value) (HookAction, error) {
   202  	h.Lock()
   203  	defer h.Unlock()
   204  
   205  	h.PreProvisionInstanceCalled = true
   206  	h.PreProvisionInstanceAddr = addr
   207  	h.PreProvisionInstanceState = state
   208  	return h.PreProvisionInstanceReturn, h.PreProvisionInstanceError
   209  }
   210  
   211  func (h *MockHook) PostProvisionInstance(addr addrs.AbsResourceInstance, state cty.Value) (HookAction, error) {
   212  	h.Lock()
   213  	defer h.Unlock()
   214  
   215  	h.PostProvisionInstanceCalled = true
   216  	h.PostProvisionInstanceAddr = addr
   217  	h.PostProvisionInstanceState = state
   218  	return h.PostProvisionInstanceReturn, h.PostProvisionInstanceError
   219  }
   220  
   221  func (h *MockHook) PreProvisionInstanceStep(addr addrs.AbsResourceInstance, typeName string) (HookAction, error) {
   222  	h.Lock()
   223  	defer h.Unlock()
   224  
   225  	h.PreProvisionInstanceStepCalled = true
   226  	h.PreProvisionInstanceStepAddr = addr
   227  	h.PreProvisionInstanceStepProvisionerType = typeName
   228  	return h.PreProvisionInstanceStepReturn, h.PreProvisionInstanceStepError
   229  }
   230  
   231  func (h *MockHook) PostProvisionInstanceStep(addr addrs.AbsResourceInstance, typeName string, err error) (HookAction, error) {
   232  	h.Lock()
   233  	defer h.Unlock()
   234  
   235  	h.PostProvisionInstanceStepCalled = true
   236  	h.PostProvisionInstanceStepAddr = addr
   237  	h.PostProvisionInstanceStepProvisionerType = typeName
   238  	h.PostProvisionInstanceStepErrorArg = err
   239  	return h.PostProvisionInstanceStepReturn, h.PostProvisionInstanceStepError
   240  }
   241  
   242  func (h *MockHook) ProvisionOutput(addr addrs.AbsResourceInstance, typeName string, line string) {
   243  	h.Lock()
   244  	defer h.Unlock()
   245  
   246  	h.ProvisionOutputCalled = true
   247  	h.ProvisionOutputAddr = addr
   248  	h.ProvisionOutputProvisionerType = typeName
   249  	h.ProvisionOutputMessage = line
   250  }
   251  
   252  func (h *MockHook) PreRefresh(addr addrs.AbsResourceInstance, gen states.Generation, priorState cty.Value) (HookAction, error) {
   253  	h.Lock()
   254  	defer h.Unlock()
   255  
   256  	h.PreRefreshCalled = true
   257  	h.PreRefreshAddr = addr
   258  	h.PreRefreshGen = gen
   259  	h.PreRefreshPriorState = priorState
   260  	return h.PreRefreshReturn, h.PreRefreshError
   261  }
   262  
   263  func (h *MockHook) PostRefresh(addr addrs.AbsResourceInstance, gen states.Generation, priorState cty.Value, newState cty.Value) (HookAction, error) {
   264  	h.Lock()
   265  	defer h.Unlock()
   266  
   267  	h.PostRefreshCalled = true
   268  	h.PostRefreshAddr = addr
   269  	h.PostRefreshPriorState = priorState
   270  	h.PostRefreshNewState = newState
   271  	return h.PostRefreshReturn, h.PostRefreshError
   272  }
   273  
   274  func (h *MockHook) PreImportState(addr addrs.AbsResourceInstance, importID string) (HookAction, error) {
   275  	h.Lock()
   276  	defer h.Unlock()
   277  
   278  	h.PreImportStateCalled = true
   279  	h.PreImportStateAddr = addr
   280  	h.PreImportStateID = importID
   281  	return h.PreImportStateReturn, h.PreImportStateError
   282  }
   283  
   284  func (h *MockHook) PostImportState(addr addrs.AbsResourceInstance, imported []providers.ImportedResource) (HookAction, error) {
   285  	h.Lock()
   286  	defer h.Unlock()
   287  
   288  	h.PostImportStateCalled = true
   289  	h.PostImportStateAddr = addr
   290  	h.PostImportStateNewStates = imported
   291  	return h.PostImportStateReturn, h.PostImportStateError
   292  }
   293  
   294  func (h *MockHook) PrePlanImport(addr addrs.AbsResourceInstance, importID string) (HookAction, error) {
   295  	h.Lock()
   296  	defer h.Unlock()
   297  
   298  	h.PrePlanImportCalled = true
   299  	h.PrePlanImportAddr = addr
   300  	return h.PrePlanImportReturn, h.PrePlanImportError
   301  }
   302  
   303  func (h *MockHook) PostPlanImport(addr addrs.AbsResourceInstance, imported []providers.ImportedResource) (HookAction, error) {
   304  	h.Lock()
   305  	defer h.Unlock()
   306  
   307  	h.PostPlanImportCalled = true
   308  	h.PostPlanImportAddr = addr
   309  	return h.PostPlanImportReturn, h.PostPlanImportError
   310  }
   311  
   312  func (h *MockHook) PreApplyImport(addr addrs.AbsResourceInstance, importing plans.ImportingSrc) (HookAction, error) {
   313  	h.Lock()
   314  	defer h.Unlock()
   315  
   316  	h.PreApplyImportCalled = true
   317  	h.PreApplyImportAddr = addr
   318  	return h.PreApplyImportReturn, h.PreApplyImportError
   319  }
   320  
   321  func (h *MockHook) PostApplyImport(addr addrs.AbsResourceInstance, importing plans.ImportingSrc) (HookAction, error) {
   322  	h.Lock()
   323  	defer h.Unlock()
   324  
   325  	h.PostApplyImportCalled = true
   326  	h.PostApplyImportAddr = addr
   327  	return h.PostApplyImportReturn, h.PostApplyImportError
   328  }
   329  
   330  func (h *MockHook) Stopping() {
   331  	h.Lock()
   332  	defer h.Unlock()
   333  
   334  	h.StoppingCalled = true
   335  }
   336  
   337  func (h *MockHook) PostStateUpdate(new *states.State) (HookAction, error) {
   338  	h.Lock()
   339  	defer h.Unlock()
   340  
   341  	h.PostStateUpdateCalled = true
   342  	h.PostStateUpdateState = new
   343  	return h.PostStateUpdateReturn, h.PostStateUpdateError
   344  }