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 }