Files
ITWorx-Pulse-Public/internal/unraid/array_test.go
T
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

59 lines
2.4 KiB
Go

package unraid
import (
"context"
"net/http"
"net/http/httptest"
"testing"
"time"
)
func TestArrayAndDiskSourcesMapDocumentedStorageFields(t *testing.T) {
server := httptest.NewTLSServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
_, _ = w.Write([]byte(`{"data":{"array":{"state":"STARTED","parities":[{"id":"parity-1","name":"parity","type":"PARITY","size":"100","status":"DISK_OK"}],"disks":[{"id":"disk-1","name":"disk1","type":"DATA","size":"100","status":"DISK_OK","fsSize":"90","fsUsed":"45","fsFree":"45","fsType":"xfs","temp":31,"isSpinning":true}],"caches":[{"id":"cache-1","name":"cache","type":"CACHE","size":"50","status":"DISK_OK","fsSize":"50","fsUsed":"5","fsFree":"45","fsType":"btrfs","temp":29,"isSpinning":false}]}}}`))
}))
defer server.Close()
client, err := New(server.URL, "test-token", server.Client())
if err != nil {
t.Fatal(err)
}
now := time.Date(2026, 8, 10, 4, 0, 0, 0, time.UTC)
arraySnapshot, err := (ArraySource{Client: client, Now: func() time.Time { return now }}).Snapshot(context.Background())
if err != nil {
t.Fatal(err)
}
if arraySnapshot.State != "operational" || len(arraySnapshot.Members) != 2 || arraySnapshot.Members[0].CapacityBytes != 100*1024 || arraySnapshot.Members[0].State != "online" {
t.Fatalf("array snapshot = %+v", arraySnapshot)
}
diskSnapshot, err := (DiskSource{Client: client, Now: func() time.Time { return now }}).Snapshot(context.Background())
if err != nil {
t.Fatal(err)
}
if len(diskSnapshot.Disks) != 3 {
t.Fatalf("disks = %+v", diskSnapshot.Disks)
}
var found bool
for _, item := range diskSnapshot.Disks {
if item.ID == "disk-1" {
found = item.SizeBytes == 90*1024 && item.UsedBytes == 45*1024 && item.Temperature != nil && item.Spin != nil
}
}
if !found {
t.Fatalf("data disk lost usage, temperature, or spin state: %+v", diskSnapshot.Disks)
}
}
func TestArraySourceRejectsOversizedOrInvalidPayload(t *testing.T) {
server := httptest.NewTLSServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
_, _ = w.Write([]byte(`{"data":{"array":{"state":"STARTED","disks":[{"id":"disk-1","name":"disk1","type":"DATA","size":"not-a-number","status":"DISK_OK"}]}}}`))
}))
defer server.Close()
client, err := New(server.URL, "test-token", server.Client())
if err != nil {
t.Fatal(err)
}
if _, err := (ArraySource{Client: client}).Snapshot(context.Background()); err == nil {
t.Fatal("invalid capacity must not produce a partial snapshot")
}
}