package model import ( "testing" "time" ) func TestNewSampleDefaultsLabels(t *testing.T) { at := time.Unix(1700000000, 0) s := NewSample(MetricCPUUsage, 42.5, at, nil) if s.Name != MetricCPUUsage || s.Value != 42.5 || s.Timestamp != 1700000000 { t.Fatalf("sample = %+v", s) } if s.Labels == nil { t.Fatalf("labels should not be nil after NewSample") } } func TestNewSampleKeepsProvidedLabels(t *testing.T) { at := time.Now() labels := map[string]string{LabelHostID: "h-001", "service": "web"} s := NewSample(MetricMemUsedPercent, 70, at, labels) if s.Labels[LabelHostID] != "h-001" || s.Labels["service"] != "web" { t.Fatalf("labels = %v", s.Labels) } } func TestMetricNameConstants(t *testing.T) { // 与架构设计 5.1.3 的 . 命名规范对齐。 want := map[string]string{ "cpu.usage": MetricCPUUsage, "mem.used_percent": MetricMemUsedPercent, "load.1m": MetricLoad1m, "disk.used_percent": MetricDiskUsedPercent, "disk.io.read_bytes": MetricDiskIOReadBytes, "disk.io.write_bytes": MetricDiskIOWriteBytes, "net.bytes_sent": MetricNetBytesSent, "net.bytes_recv": MetricNetBytesRecv, "net.pkt_drop": MetricNetPktDrop, "process.cpu": MetricProcessCPU, "process.mem": MetricProcessMem, "process.count": MetricProcessCount, } for name, constant := range want { if name != constant { t.Fatalf("metric name mismatch: %q != %q", name, constant) } } }