Provisioning: Refactor to combine validation and test endpoint logic (#111965)
Provisioning: Refactor test endpoint
This commit is contained in:
@@ -23,14 +23,16 @@ type StatusPatcher interface {
|
||||
type HealthChecker struct {
|
||||
statusPatcher StatusPatcher
|
||||
healthMetrics healthMetrics
|
||||
tester repository.SimpleRepositoryTester
|
||||
}
|
||||
|
||||
// NewHealthChecker creates a new health checker
|
||||
func NewHealthChecker(statusPatcher StatusPatcher, registry prometheus.Registerer) *HealthChecker {
|
||||
func NewHealthChecker(statusPatcher StatusPatcher, registry prometheus.Registerer, tester repository.SimpleRepositoryTester) *HealthChecker {
|
||||
healthMetrics := registerHealthMetrics(registry)
|
||||
return &HealthChecker{
|
||||
statusPatcher: statusPatcher,
|
||||
healthMetrics: healthMetrics,
|
||||
tester: tester,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -176,7 +178,7 @@ func (hc *HealthChecker) refreshHealth(ctx context.Context, repo repository.Repo
|
||||
hc.healthMetrics.RecordHealthCheck(outcome, time.Since(start).Seconds())
|
||||
}()
|
||||
|
||||
res, err := repository.TestRepository(ctx, repo)
|
||||
res, err := hc.tester.TestRepository(ctx, repo)
|
||||
if err != nil {
|
||||
outcome = utils.ErrorOutcome
|
||||
logger.Error("failed to test repository", "error", err)
|
||||
|
||||
@@ -13,13 +13,15 @@ import (
|
||||
"k8s.io/apimachinery/pkg/util/validation/field"
|
||||
|
||||
provisioning "github.com/grafana/grafana/apps/provisioning/pkg/apis/provisioning/v0alpha1"
|
||||
repository "github.com/grafana/grafana/apps/provisioning/pkg/repository"
|
||||
"github.com/grafana/grafana/pkg/registry/apis/provisioning/controller/mocks"
|
||||
)
|
||||
|
||||
func TestNewHealthChecker(t *testing.T) {
|
||||
mockPatcher := mocks.NewStatusPatcher(t)
|
||||
|
||||
hc := NewHealthChecker(mockPatcher, prometheus.NewPedanticRegistry())
|
||||
validator := repository.NewValidator(30*time.Second, []provisioning.SyncTargetType{provisioning.SyncTargetTypeFolder, provisioning.SyncTargetTypeInstance}, true)
|
||||
hc := NewHealthChecker(mockPatcher, prometheus.NewPedanticRegistry(), repository.NewSimpleRepositoryTester(validator))
|
||||
|
||||
assert.NotNil(t, hc)
|
||||
assert.Equal(t, mockPatcher, hc.statusPatcher)
|
||||
@@ -136,7 +138,8 @@ func TestShouldCheckHealth(t *testing.T) {
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
mockPatcher := mocks.NewStatusPatcher(t)
|
||||
hc := NewHealthChecker(mockPatcher, prometheus.NewPedanticRegistry())
|
||||
validator := repository.NewValidator(30*time.Second, []provisioning.SyncTargetType{provisioning.SyncTargetTypeFolder, provisioning.SyncTargetTypeInstance}, true)
|
||||
hc := NewHealthChecker(mockPatcher, prometheus.NewPedanticRegistry(), repository.NewSimpleRepositoryTester(validator))
|
||||
|
||||
result := hc.ShouldCheckHealth(tt.repo)
|
||||
assert.Equal(t, tt.expected, result)
|
||||
@@ -223,7 +226,8 @@ func TestHasRecentFailure(t *testing.T) {
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
mockPatcher := mocks.NewStatusPatcher(t)
|
||||
hc := NewHealthChecker(mockPatcher, prometheus.NewPedanticRegistry())
|
||||
validator := repository.NewValidator(30*time.Second, []provisioning.SyncTargetType{provisioning.SyncTargetTypeFolder, provisioning.SyncTargetTypeInstance}, true)
|
||||
hc := NewHealthChecker(mockPatcher, prometheus.NewPedanticRegistry(), repository.NewSimpleRepositoryTester(validator))
|
||||
|
||||
result := hc.HasRecentFailure(tt.healthStatus, tt.failureType)
|
||||
assert.Equal(t, tt.expected, result)
|
||||
@@ -265,7 +269,8 @@ func TestRecordFailure(t *testing.T) {
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
mockPatcher := mocks.NewStatusPatcher(t)
|
||||
hc := NewHealthChecker(mockPatcher, prometheus.NewPedanticRegistry())
|
||||
validator := repository.NewValidator(30*time.Second, []provisioning.SyncTargetType{provisioning.SyncTargetTypeFolder, provisioning.SyncTargetTypeInstance}, true)
|
||||
hc := NewHealthChecker(mockPatcher, prometheus.NewPedanticRegistry(), repository.NewSimpleRepositoryTester(validator))
|
||||
|
||||
repo := &provisioning.Repository{
|
||||
Status: provisioning.RepositoryStatus{
|
||||
@@ -310,7 +315,8 @@ func TestRecordFailure(t *testing.T) {
|
||||
|
||||
func TestRecordFailureFunction(t *testing.T) {
|
||||
mockPatcher := mocks.NewStatusPatcher(t)
|
||||
hc := NewHealthChecker(mockPatcher, prometheus.NewPedanticRegistry())
|
||||
validator := repository.NewValidator(30*time.Second, []provisioning.SyncTargetType{provisioning.SyncTargetTypeFolder, provisioning.SyncTargetTypeInstance}, true)
|
||||
hc := NewHealthChecker(mockPatcher, prometheus.NewPedanticRegistry(), repository.NewSimpleRepositoryTester(validator))
|
||||
|
||||
testErr := errors.New("test error")
|
||||
result := hc.recordFailure(provisioning.HealthFailureHook, testErr)
|
||||
@@ -447,7 +453,8 @@ func TestRefreshHealth(t *testing.T) {
|
||||
testError: tt.testError,
|
||||
}
|
||||
|
||||
hc := NewHealthChecker(mockPatcher, prometheus.NewPedanticRegistry())
|
||||
validator := repository.NewValidator(30*time.Second, []provisioning.SyncTargetType{provisioning.SyncTargetTypeFolder, provisioning.SyncTargetTypeInstance}, true)
|
||||
hc := NewHealthChecker(mockPatcher, prometheus.NewPedanticRegistry(), repository.NewSimpleRepositoryTester(validator))
|
||||
|
||||
if tt.expectPatch {
|
||||
if tt.patchError != nil {
|
||||
@@ -557,7 +564,8 @@ func TestHasHealthStatusChanged(t *testing.T) {
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
mockPatcher := mocks.NewStatusPatcher(t)
|
||||
hc := NewHealthChecker(mockPatcher, prometheus.NewPedanticRegistry())
|
||||
validator := repository.NewValidator(30*time.Second, []provisioning.SyncTargetType{provisioning.SyncTargetTypeFolder, provisioning.SyncTargetTypeInstance}, true)
|
||||
hc := NewHealthChecker(mockPatcher, prometheus.NewPedanticRegistry(), repository.NewSimpleRepositoryTester(validator))
|
||||
|
||||
result := hc.hasHealthStatusChanged(tt.old, tt.new)
|
||||
assert.Equal(t, tt.expected, result)
|
||||
|
||||
Reference in New Issue
Block a user