112 lines
3.3 KiB
Go
112 lines
3.3 KiB
Go
package service
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
"testing"
|
|
|
|
persistencemock "github.com/ocdp/cluster-service/internal/adapter/output/persistence/mock"
|
|
"github.com/ocdp/cluster-service/internal/domain/entity"
|
|
"github.com/ocdp/cluster-service/internal/domain/repository"
|
|
)
|
|
|
|
func TestDeleteInstanceIgnoresMissingRelease(t *testing.T) {
|
|
ctx := context.Background()
|
|
instanceRepo := persistencemock.NewInstanceRepositoryMock()
|
|
|
|
instance := &entity.Instance{
|
|
ID: "inst-1",
|
|
ClusterID: "cluster-1",
|
|
Name: "demo",
|
|
Namespace: "default",
|
|
}
|
|
if err := instanceRepo.Create(ctx, instance); err != nil {
|
|
t.Fatalf("failed to seed instance: %v", err)
|
|
}
|
|
|
|
cluster := &entity.Cluster{ID: "cluster-1", Name: "cluster", Host: "https://example.com"}
|
|
clusterRepo := &stubClusterRepo{cluster: cluster}
|
|
|
|
svc := NewInstanceService(
|
|
instanceRepo,
|
|
clusterRepo,
|
|
nil,
|
|
&stubHelmClient{uninstallErr: entity.ErrInstanceNotFound},
|
|
nil,
|
|
nil,
|
|
)
|
|
|
|
if err := svc.DeleteInstance(ctx, instance.ID); err != nil {
|
|
t.Fatalf("DeleteInstance returned error: %v", err)
|
|
}
|
|
|
|
if _, err := instanceRepo.GetByID(ctx, instance.ID); !errors.Is(err, entity.ErrInstanceNotFound) {
|
|
t.Fatalf("expected instance removed, got err=%v", err)
|
|
}
|
|
}
|
|
|
|
type stubClusterRepo struct {
|
|
cluster *entity.Cluster
|
|
}
|
|
|
|
func (s *stubClusterRepo) Create(ctx context.Context, cluster *entity.Cluster) error {
|
|
s.cluster = cluster
|
|
return nil
|
|
}
|
|
|
|
func (s *stubClusterRepo) GetByID(ctx context.Context, id string) (*entity.Cluster, error) {
|
|
if s.cluster != nil && s.cluster.ID == id {
|
|
return s.cluster, nil
|
|
}
|
|
return nil, entity.ErrClusterNotFound
|
|
}
|
|
|
|
func (*stubClusterRepo) GetByName(ctx context.Context, name string) (*entity.Cluster, error) {
|
|
return nil, entity.ErrClusterNotFound
|
|
}
|
|
|
|
func (*stubClusterRepo) Update(ctx context.Context, cluster *entity.Cluster) error { return nil }
|
|
|
|
func (*stubClusterRepo) Delete(ctx context.Context, id string) error { return nil }
|
|
|
|
func (*stubClusterRepo) List(ctx context.Context) ([]*entity.Cluster, error) { return nil, nil }
|
|
|
|
type stubHelmClient struct {
|
|
uninstallErr error
|
|
}
|
|
|
|
func (*stubHelmClient) Install(ctx context.Context, cluster *entity.Cluster, instance *entity.Instance) error {
|
|
return nil
|
|
}
|
|
|
|
func (*stubHelmClient) Upgrade(ctx context.Context, cluster *entity.Cluster, instance *entity.Instance) error {
|
|
return nil
|
|
}
|
|
|
|
func (s *stubHelmClient) Uninstall(ctx context.Context, cluster *entity.Cluster, releaseName, namespace string) error {
|
|
return s.uninstallErr
|
|
}
|
|
|
|
func (*stubHelmClient) Rollback(ctx context.Context, cluster *entity.Cluster, releaseName, namespace string, revision int) error {
|
|
return nil
|
|
}
|
|
|
|
func (*stubHelmClient) GetStatus(ctx context.Context, cluster *entity.Cluster, releaseName, namespace string) (*entity.Instance, error) {
|
|
return nil, nil
|
|
}
|
|
|
|
func (*stubHelmClient) GetHistory(ctx context.Context, cluster *entity.Cluster, releaseName, namespace string) ([]*entity.ReleaseHistory, error) {
|
|
return nil, nil
|
|
}
|
|
|
|
func (*stubHelmClient) List(ctx context.Context, cluster *entity.Cluster, namespace string) ([]*entity.Instance, error) {
|
|
return nil, nil
|
|
}
|
|
|
|
func (*stubHelmClient) GetValues(ctx context.Context, cluster *entity.Cluster, releaseName, namespace string) (map[string]interface{}, error) {
|
|
return nil, nil
|
|
}
|
|
|
|
var _ repository.ClusterRepository = (*stubClusterRepo)(nil)
|
|
var _ repository.HelmClient = (*stubHelmClient)(nil)
|