github.com/terramate-io/tf@v0.0.0-20230830114523-fce866b4dfcd/legacy/terraform/provisioner_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 "github.com/terramate-io/tf/provisioners" 10 ) 11 12 var _ provisioners.Interface = (*MockProvisioner)(nil) 13 14 // MockProvisioner implements provisioners.Interface but mocks out all the 15 // calls for testing purposes. 16 type MockProvisioner struct { 17 sync.Mutex 18 // Anything you want, in case you need to store extra data with the mock. 19 Meta interface{} 20 21 GetSchemaCalled bool 22 GetSchemaResponse provisioners.GetSchemaResponse 23 24 ValidateProvisionerConfigCalled bool 25 ValidateProvisionerConfigRequest provisioners.ValidateProvisionerConfigRequest 26 ValidateProvisionerConfigResponse provisioners.ValidateProvisionerConfigResponse 27 ValidateProvisionerConfigFn func(provisioners.ValidateProvisionerConfigRequest) provisioners.ValidateProvisionerConfigResponse 28 29 ProvisionResourceCalled bool 30 ProvisionResourceRequest provisioners.ProvisionResourceRequest 31 ProvisionResourceResponse provisioners.ProvisionResourceResponse 32 ProvisionResourceFn func(provisioners.ProvisionResourceRequest) provisioners.ProvisionResourceResponse 33 34 StopCalled bool 35 StopResponse error 36 StopFn func() error 37 38 CloseCalled bool 39 CloseResponse error 40 CloseFn func() error 41 } 42 43 func (p *MockProvisioner) GetSchema() provisioners.GetSchemaResponse { 44 p.Lock() 45 defer p.Unlock() 46 47 p.GetSchemaCalled = true 48 return p.getSchema() 49 } 50 51 // getSchema is the implementation of GetSchema, which can be called from other 52 // methods on MockProvisioner that may already be holding the lock. 53 func (p *MockProvisioner) getSchema() provisioners.GetSchemaResponse { 54 return p.GetSchemaResponse 55 } 56 57 func (p *MockProvisioner) ValidateProvisionerConfig(r provisioners.ValidateProvisionerConfigRequest) provisioners.ValidateProvisionerConfigResponse { 58 p.Lock() 59 defer p.Unlock() 60 61 p.ValidateProvisionerConfigCalled = true 62 p.ValidateProvisionerConfigRequest = r 63 if p.ValidateProvisionerConfigFn != nil { 64 return p.ValidateProvisionerConfigFn(r) 65 } 66 return p.ValidateProvisionerConfigResponse 67 } 68 69 func (p *MockProvisioner) ProvisionResource(r provisioners.ProvisionResourceRequest) provisioners.ProvisionResourceResponse { 70 p.Lock() 71 defer p.Unlock() 72 73 p.ProvisionResourceCalled = true 74 p.ProvisionResourceRequest = r 75 if p.ProvisionResourceFn != nil { 76 fn := p.ProvisionResourceFn 77 return fn(r) 78 } 79 80 return p.ProvisionResourceResponse 81 } 82 83 func (p *MockProvisioner) Stop() error { 84 // We intentionally don't lock in this one because the whole point of this 85 // method is to be called concurrently with another operation that can 86 // be cancelled. The provisioner itself is responsible for handling 87 // any concurrency concerns in this case. 88 89 p.StopCalled = true 90 if p.StopFn != nil { 91 return p.StopFn() 92 } 93 94 return p.StopResponse 95 } 96 97 func (p *MockProvisioner) Close() error { 98 p.Lock() 99 defer p.Unlock() 100 101 p.CloseCalled = true 102 if p.CloseFn != nil { 103 return p.CloseFn() 104 } 105 106 return p.CloseResponse 107 }