package monitoring import ( "context" "testing" "time" ) func TestSimulationProviderLabelsEveryValueAndReconcilesKnowledgeCounts(t *testing.T) { now := time.Date(2026, 9, 8, 12, 0, 0, 0, time.UTC) provider := NewSimulationProvider(func() time.Time { return now }) overview, err := provider.Overview(context.Background()) if err != nil { t.Fatal(err) } if overview.Mode != "simulation" || !overview.Simulated || overview.ObservedAt != now || len(overview.Services) < 4 || len(overview.KnowledgeBases) != 1 { t.Fatalf("overview=%#v", overview) } if overview.Host.DiskTotalBytes <= 0 || overview.Host.DiskUsedBytes <= 0 || overview.Host.GPUState != "unknown" || overview.Host.GPUDetail != "未接入真实GPU监控" { t.Fatalf("host resources=%#v", overview.Host) } requiredServices := map[string]bool{"weknora": false, "mineru": false, "postgres": false, "redis": false, "oss": false, "embedding": false, "llm": false} for _, service := range overview.Services { if _, ok := requiredServices[service.Key]; ok { requiredServices[service.Key] = true } } for key, present := range requiredServices { if !present { t.Errorf("missing service status %q", key) } } kb := overview.KnowledgeBases[0] if kb.Imported != 5750 || kb.Completed != 4530 || kb.Pending != 450 || kb.Finalizing != 714 || kb.Processing != 50 || kb.Failed != 6 { t.Fatalf("kb=%#v", kb) } if kb.Completed+kb.Pending+kb.Finalizing+kb.Processing+kb.Failed+kb.Cancelled != kb.Imported { t.Fatalf("status counts do not reconcile: %#v", kb) } for _, service := range overview.Services { if !service.Simulated { t.Fatalf("unlabelled service=%#v", service) } } files, err := provider.ListFiles(context.Background(), kb.ID, "failed", 20, 0) if err != nil { t.Fatal(err) } if files.Total != 1 || len(files.Items) != 1 || files.Items[0].Status != "failed" || files.Items[0].Name[:len("[模拟]")] != "[模拟]" || !files.SampleOnly { t.Fatalf("files=%#v", files) } }