Add unit tests for KubernetesCluster, Tenant, ServiceInstance, and RegisterClusterHandler
- Implement tests for KubernetesCluster including registration, connectivity status, and error handling. - Create tests for Tenant creation, member management, and status changes. - Add tests for ServiceInstance provisioning and state management. - Introduce RegisterClusterHandler tests to validate registration requests and error scenarios. - Set up project files for new test projects with necessary dependencies.
This commit is contained in:
@@ -0,0 +1,53 @@
|
||||
using EntKube.Clusters.Domain;
|
||||
using EntKube.SharedKernel.Domain;
|
||||
|
||||
namespace EntKube.Clusters.Features.RegisterCluster;
|
||||
|
||||
/// <summary>
|
||||
/// Handles the registration of a new Kubernetes cluster into the platform.
|
||||
/// A tenant admin provides the cluster name, API server URL, and optionally
|
||||
/// a kubeconfig secret reference. We validate the input, create the cluster
|
||||
/// aggregate, and persist it. The cluster starts in Pending state until the
|
||||
/// background health-check service confirms connectivity.
|
||||
/// </summary>
|
||||
public class RegisterClusterHandler
|
||||
{
|
||||
private readonly IClusterRepository repository;
|
||||
|
||||
public RegisterClusterHandler(IClusterRepository repository)
|
||||
{
|
||||
this.repository = repository;
|
||||
}
|
||||
|
||||
public async Task<Result<Guid>> HandleAsync(RegisterClusterRequest request, CancellationToken ct = default)
|
||||
{
|
||||
// Validate that the caller provided the minimum required information.
|
||||
// Without a name and API URL, we cannot register a cluster.
|
||||
|
||||
if (string.IsNullOrWhiteSpace(request.Name))
|
||||
{
|
||||
return Result.Failure<Guid>("Cluster name is required.");
|
||||
}
|
||||
|
||||
if (string.IsNullOrWhiteSpace(request.ApiServerUrl))
|
||||
{
|
||||
return Result.Failure<Guid>("API server URL is required.");
|
||||
}
|
||||
|
||||
// Create the cluster aggregate using the domain factory method.
|
||||
// This encapsulates all the business rules for what a valid new cluster looks like.
|
||||
|
||||
KubernetesCluster cluster = KubernetesCluster.Register(
|
||||
request.Name,
|
||||
request.ApiServerUrl,
|
||||
request.KubeConfigSecret);
|
||||
|
||||
// Persist the new cluster so it can be picked up by the health-check background service.
|
||||
|
||||
await repository.AddAsync(cluster, ct);
|
||||
|
||||
return Result.Success(cluster.Id);
|
||||
}
|
||||
}
|
||||
|
||||
public record RegisterClusterRequest(string Name, string ApiServerUrl, string? KubeConfigSecret);
|
||||
Reference in New Issue
Block a user