blob: b745d0658a1e307f008b22c73d3f95cceeb52bbe [file]
// Copyright IBM Corp. 2014, 2026
// SPDX-License-Identifier: BUSL-1.1
package policy
import (
"context"
"sync"
"github.com/hashicorp/terraform/internal/policy/proto"
)
var _ Client = (*MockClient)(nil)
// MockClient implements the Client interface, but mocks out all the
// calls for testing purposes.
type MockClient struct {
mu sync.Mutex
// Setup method tracking
SetupCalled bool
SetupResponse *SetupResponse
SetupRequest SetupRequest
SetupFn func(context.Context, SetupRequest) SetupResponse
// Evaluate method tracking
EvaluateCalled bool
EvaluateResponse *EvaluationResponse
EvaluateRequest EvaluationRequest[*proto.PolicyEvaluateResourceRequest_ResourceMetadata]
EvaluateFn func(context.Context, EvaluationRequest[*proto.PolicyEvaluateResourceRequest_ResourceMetadata]) EvaluationResponse
// EvaluateProvider method tracking
EvaluateProviderCalled bool
EvaluateProviderResponse *EvaluationResponse
EvaluateProviderRequest EvaluationRequest[*proto.PolicyEvaluateProviderRequest_ProviderMetadata]
EvaluateProviderFn func(context.Context, EvaluationRequest[*proto.PolicyEvaluateProviderRequest_ProviderMetadata]) EvaluationResponse
// EvaluateModule method tracking
EvaluateModuleCalled bool
EvaluateModuleResponse *EvaluationResponse
EvaluateModuleRequest EvaluationRequest[*proto.PolicyEvaluateModuleRequest_ModuleMetadata]
EvaluateModuleFn func(context.Context, EvaluationRequest[*proto.PolicyEvaluateModuleRequest_ModuleMetadata]) EvaluationResponse
// Stop method tracking
StopCalled bool
StopFn func()
}
func (p *MockClient) beginWrite() func() {
p.mu.Lock()
return p.mu.Unlock
}
func (p *MockClient) Setup(ctx context.Context, req SetupRequest) (resp SetupResponse) {
defer p.beginWrite()()
p.SetupCalled = true
p.SetupRequest = req
if p.SetupFn != nil {
return p.SetupFn(ctx, req)
}
if p.SetupResponse != nil {
return *p.SetupResponse
}
return resp
}
func (p *MockClient) EvaluateResource(ctx context.Context, r EvaluationRequest[*proto.PolicyEvaluateResourceRequest_ResourceMetadata]) (resp EvaluationResponse) {
defer p.beginWrite()()
p.EvaluateCalled = true
p.EvaluateRequest = r
if p.EvaluateFn != nil {
return p.EvaluateFn(ctx, r)
}
if p.EvaluateResponse != nil {
return *p.EvaluateResponse
}
return resp
}
func (p *MockClient) EvaluateProvider(ctx context.Context, r EvaluationRequest[*proto.PolicyEvaluateProviderRequest_ProviderMetadata]) (resp EvaluationResponse) {
defer p.beginWrite()()
p.EvaluateProviderCalled = true
p.EvaluateProviderRequest = r
if p.EvaluateProviderFn != nil {
return p.EvaluateProviderFn(ctx, r)
}
if p.EvaluateProviderResponse != nil {
return *p.EvaluateProviderResponse
}
return resp
}
func (p *MockClient) EvaluateModule(ctx context.Context, r EvaluationRequest[*proto.PolicyEvaluateModuleRequest_ModuleMetadata]) (resp EvaluationResponse) {
defer p.beginWrite()()
p.EvaluateModuleCalled = true
p.EvaluateModuleRequest = r
if p.EvaluateModuleFn != nil {
return p.EvaluateModuleFn(ctx, r)
}
if p.EvaluateModuleResponse != nil {
return *p.EvaluateModuleResponse
}
return resp
}
func (p *MockClient) Stop() {
defer p.beginWrite()()
p.StopCalled = true
if p.StopFn != nil {
p.StopFn()
}
}