Public source validation / validate (push) Failing after 3m8s
59 lines
2.4 KiB
Go
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")
|
|
}
|
|
}
|