78 lines
2.2 KiB
Go
78 lines
2.2 KiB
Go
package tasks
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
"testing"
|
|
|
|
"forgejo.digital-droplets.de/philschlo/proxui/platform/cluster"
|
|
"forgejo.digital-droplets.de/philschlo/proxui/platform/proxmox"
|
|
)
|
|
|
|
func TestClusterTaskClientResolverLoadsClusterAndAdaptsStatus(t *testing.T) {
|
|
repository := &stubClusterRepository{
|
|
cluster: cluster.Cluster{
|
|
ID: "cluster-1",
|
|
APIEndpoint: "https://pve.example.test:8006",
|
|
TLSFingerprint: "fingerprint",
|
|
TokenID: "root@pam!proxui",
|
|
TokenSecret: "secret-token",
|
|
},
|
|
found: true,
|
|
}
|
|
factoryClient := &stubPlatformTaskClient{
|
|
status: proxmox.TaskStatus{Status: "stopped", ExitStatus: "OK"},
|
|
}
|
|
resolver := NewClusterTaskClientResolver(repository, func(cluster cluster.Cluster) (PlatformProxmoxTaskClient, error) {
|
|
if cluster.ID != "cluster-1" {
|
|
t.Fatalf("cluster ID = %q, want cluster-1", cluster.ID)
|
|
}
|
|
return factoryClient, nil
|
|
})
|
|
|
|
client, err := resolver.ResolveTaskClient(context.Background(), "cluster-1")
|
|
if err != nil {
|
|
t.Fatalf("ResolveTaskClient() error = %v", err)
|
|
}
|
|
|
|
status, err := client.GetTaskStatus(context.Background(), "pve", "UPID:pve:1")
|
|
if err != nil {
|
|
t.Fatalf("GetTaskStatus() error = %v", err)
|
|
}
|
|
if status.Status != "stopped" || status.ExitStatus != "OK" {
|
|
t.Fatalf("status = %+v, want stopped/OK", status)
|
|
}
|
|
if repository.id != "cluster-1" {
|
|
t.Fatalf("repository id = %q, want cluster-1", repository.id)
|
|
}
|
|
}
|
|
|
|
func TestClusterTaskClientResolverReturnsClusterNotFound(t *testing.T) {
|
|
resolver := NewClusterTaskClientResolver(&stubClusterRepository{}, nil)
|
|
|
|
if _, err := resolver.ResolveTaskClient(context.Background(), "missing"); !errors.Is(err, ErrClusterNotFound) {
|
|
t.Fatalf("ResolveTaskClient() error = %v, want ErrClusterNotFound", err)
|
|
}
|
|
}
|
|
|
|
type stubClusterRepository struct {
|
|
id string
|
|
cluster cluster.Cluster
|
|
found bool
|
|
err error
|
|
}
|
|
|
|
func (s *stubClusterRepository) GetCluster(_ context.Context, id string) (cluster.Cluster, bool, error) {
|
|
s.id = id
|
|
return s.cluster, s.found, s.err
|
|
}
|
|
|
|
type stubPlatformTaskClient struct {
|
|
status proxmox.TaskStatus
|
|
err error
|
|
}
|
|
|
|
func (s *stubPlatformTaskClient) GetTaskStatus(context.Context, string, string) (proxmox.TaskStatus, error) {
|
|
return s.status, s.err
|
|
}
|