Files
ITWorx Pulse release export bd774932d5
Public source validation / validate (push) Failing after 3m8s
Publish ITWorx Pulse source
2026-09-03 02:09:19 +02:00

51 lines
2.2 KiB
Go

package unraid
import (
"context"
"net/http"
"net/http/httptest"
"testing"
"time"
"github.com/itworx/pulse/internal/pool"
)
func TestPoolSourceUsesOnlyExplicitFilesystemAggregates(t *testing.T) {
server := httptest.NewTLSServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
_, _ = w.Write([]byte(`{"data":{"array":{"state":"STARTED","parities":[],"disks":[],"caches":[{"id":"cache-id","name":"cache","type":"CACHE","size":"1000","status":"DISK_OK","fsSize":"900","fsUsed":"300","fsFree":"600","fsType":"zfs"},{"id":"cache-member","name":"cache2","type":"CACHE","size":"1000","status":"DISK_OK","fsSize":null,"fsUsed":null,"fsFree":null,"fsType":null},{"id":"ssd-id","name":"ssd","type":"CACHE","size":"2000","status":"DISK_OK","fsSize":"1800","fsUsed":"1200","fsFree":"600","fsType":"zfs"}]}}}`))
}))
defer server.Close()
client, err := New(server.URL, "test-key", server.Client())
if err != nil {
t.Fatal(err)
}
now := time.Date(2026, 8, 10, 10, 0, 0, 0, time.UTC)
snapshot, err := (PoolSource{Client: client, Now: func() time.Time { return now }}).Snapshot(context.Background())
if err != nil {
t.Fatal(err)
}
if len(snapshot.Pools) != 2 || snapshot.Pools[0].Name != "cache" || snapshot.Pools[1].Name != "ssd" {
t.Fatalf("pools = %+v", snapshot.Pools)
}
if snapshot.Pools[0].UsableBytes != 900*1024 || snapshot.Pools[0].UsedBytes != 300*1024 || snapshot.Pools[0].State != pool.StateHealthy {
t.Fatalf("pool aggregate = %+v", snapshot.Pools[0])
}
if snapshot.Pools[0].Capabilities.Capacity != pool.CapabilityAvailable || snapshot.Pools[0].Capabilities.Members != pool.CapabilityUnsupported {
t.Fatalf("capabilities = %+v", snapshot.Pools[0].Capabilities)
}
}
func TestPoolSourceRejectsInvalidExplicitAggregate(t *testing.T) {
server := httptest.NewTLSServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
_, _ = w.Write([]byte(`{"data":{"array":{"caches":[{"id":"cache","name":"cache","status":"DISK_OK","fsSize":"100","fsUsed":"101","fsType":"zfs"}]}}}`))
}))
defer server.Close()
client, err := New(server.URL, "test-key", server.Client())
if err != nil {
t.Fatal(err)
}
if _, err := (PoolSource{Client: client}).Snapshot(context.Background()); err == nil {
t.Fatal("expected invalid pool usage rejection")
}
}