114 lines
3 KiB
Go
114 lines
3 KiB
Go
package ceph
|
|
|
|
import (
|
|
"testing"
|
|
)
|
|
|
|
func TestParseStatus(t *testing.T) {
|
|
data := []byte(`{
|
|
"fsid":"fsid-123",
|
|
"health":{
|
|
"status":"HEALTH_WARN",
|
|
"checks":{
|
|
"OSD_DOWN":{
|
|
"severity":"HEALTH_WARN",
|
|
"summary":{"message":"1 osd down"},
|
|
"detail":[{"message":"osd.1 is down"}]
|
|
}
|
|
}
|
|
},
|
|
"monmap":{"epoch":7,"mons":[{"name":"a","rank":0,"addr":"10.0.0.1"}]},
|
|
"mgrmap":{"available":true,"active_name":"mgr-a","standbys":[{"name":"mgr-b"}]},
|
|
"osdmap":{"epoch":3,"num_osds":3,"num_up_osds":2,"num_in_osds":1},
|
|
"pgmap":{
|
|
"num_pgs":64,
|
|
"bytes_total":1000,
|
|
"bytes_used":250,
|
|
"bytes_avail":750,
|
|
"data_bytes":200,
|
|
"degraded_ratio":0.1,
|
|
"misplaced_ratio":0.2,
|
|
"read_bytes_sec":1,
|
|
"write_bytes_sec":2,
|
|
"read_op_per_sec":3,
|
|
"write_op_per_sec":4
|
|
}
|
|
}`)
|
|
|
|
status, err := parseStatus(data)
|
|
if err != nil {
|
|
t.Fatalf("parseStatus returned error: %v", err)
|
|
}
|
|
|
|
if status.FSID != "fsid-123" {
|
|
t.Fatalf("expected FSID fsid-123, got %q", status.FSID)
|
|
}
|
|
if status.Health.Status != "HEALTH_WARN" {
|
|
t.Fatalf("expected HEALTH_WARN, got %q", status.Health.Status)
|
|
}
|
|
check, ok := status.Health.Checks["OSD_DOWN"]
|
|
if !ok || check.Severity != "HEALTH_WARN" || check.Message != "1 osd down" || len(check.Detail) != 1 {
|
|
t.Fatalf("unexpected parsed health checks: %+v", status.Health.Checks)
|
|
}
|
|
|
|
if status.MonMap.NumMons != 1 || len(status.MonMap.Monitors) != 1 {
|
|
t.Fatalf("expected 1 monitor, got %+v", status.MonMap)
|
|
}
|
|
if status.OSDMap.NumOSDs != 3 || status.OSDMap.NumUp != 2 || status.OSDMap.NumIn != 1 {
|
|
t.Fatalf("unexpected OSD map: %+v", status.OSDMap)
|
|
}
|
|
if status.OSDMap.NumDown != 1 || status.OSDMap.NumOut != 2 {
|
|
t.Fatalf("expected computed down/out counts, got %+v", status.OSDMap)
|
|
}
|
|
|
|
if status.PGMap.UsagePercent != 25.0 {
|
|
t.Fatalf("expected usage percent 25.0, got %v", status.PGMap.UsagePercent)
|
|
}
|
|
|
|
if len(status.Services) != 3 {
|
|
t.Fatalf("expected 3 service summaries, got %d", len(status.Services))
|
|
}
|
|
}
|
|
|
|
func TestParseStatusInvalidJSON(t *testing.T) {
|
|
_, err := parseStatus([]byte(`{not-json}`))
|
|
if err == nil {
|
|
t.Fatalf("expected error for invalid JSON")
|
|
}
|
|
}
|
|
|
|
func TestParseDF(t *testing.T) {
|
|
data := []byte(`{
|
|
"stats":{"total_bytes":1000,"total_used_bytes":123,"percent_used":0.1234},
|
|
"pools":[
|
|
{"id":1,"name":"pool-a","stats":{"bytes_used":10,"max_avail":90,"objects":7,"percent_used":0.2}}
|
|
]
|
|
}`)
|
|
|
|
pools, usagePercent, err := parseDF(data)
|
|
if err != nil {
|
|
t.Fatalf("parseDF returned error: %v", err)
|
|
}
|
|
if usagePercent != 12.34 {
|
|
t.Fatalf("expected percent_used 12.34, got %v", usagePercent)
|
|
}
|
|
if len(pools) != 1 || pools[0].Name != "pool-a" || pools[0].PercentUsed != 20.0 {
|
|
t.Fatalf("unexpected pools parsed: %+v", pools)
|
|
}
|
|
}
|
|
|
|
func TestParseDFInvalidJSON(t *testing.T) {
|
|
_, _, err := parseDF([]byte(`{not-json}`))
|
|
if err == nil {
|
|
t.Fatalf("expected error for invalid JSON")
|
|
}
|
|
}
|
|
|
|
func TestBoolToInt(t *testing.T) {
|
|
if boolToInt(true) != 1 {
|
|
t.Fatalf("expected boolToInt(true)=1")
|
|
}
|
|
if boolToInt(false) != 0 {
|
|
t.Fatalf("expected boolToInt(false)=0")
|
|
}
|
|
}
|