feat: 测试交付 Q1 混沌压测骨架与 Q4 镜像骨架

This commit is contained in:
Nixevol
2026-09-30 06:59:44 +08:00
parent 0e068c6ade
commit 8dde564517
21 changed files with 1268 additions and 16 deletions
+89
View File
@@ -0,0 +1,89 @@
package report
import (
"bytes"
"encoding/json"
"os"
"path/filepath"
"strings"
"testing"
)
func TestNormalizeFillsMissingAsUntested(t *testing.T) {
t.Parallel()
items, err := Normalize(Results{Items: []Item{
{ID: "F01", Status: StatusPass, Note: "ok"},
{ID: "f08", Status: "失败", Note: "flaky"},
}})
if err != nil {
t.Fatal(err)
}
if len(items) != 23 {
t.Fatalf("len=%d", len(items))
}
if items[0].Status != StatusPass || items[0].Note != "ok" {
t.Fatalf("F01=%+v", items[0])
}
if items[7].Status != StatusFail {
t.Fatalf("F08=%+v", items[7])
}
if items[22].Status != StatusUntested {
t.Fatalf("F23=%+v", items[22])
}
}
func TestWriteMarkdownSample(t *testing.T) {
t.Parallel()
path := filepath.Join("testdata", "sample_results.json")
r, err := LoadResults(path)
if err != nil {
t.Fatal(err)
}
items, err := Normalize(r)
if err != nil {
t.Fatal(err)
}
var buf bytes.Buffer
if err := WriteMarkdown(&buf, items); err != nil {
t.Fatal(err)
}
out := buf.String()
for _, id := range []string{"F01", "F12", "F23"} {
if !strings.Contains(out, id) {
t.Fatalf("missing %s in:\n%s", id, out)
}
}
if !strings.Contains(out, "未测") {
t.Fatalf("expected 未测:\n%s", out)
}
if !strings.Contains(out, "通过 0,失败 0,未测 23") {
t.Fatalf("summary mismatch:\n%s", out)
}
}
func TestEmptyResultsRoundTrip(t *testing.T) {
t.Parallel()
dir := t.TempDir()
path := filepath.Join(dir, "empty.json")
raw, err := json.MarshalIndent(EmptyResults(), "", " ")
if err != nil {
t.Fatal(err)
}
if writeErr := os.WriteFile(path, raw, 0o644); writeErr != nil {
t.Fatal(writeErr)
}
r, err := LoadResults(path)
if err != nil {
t.Fatal(err)
}
if len(r.Items) != 23 {
t.Fatalf("items=%d", len(r.Items))
}
}
func TestParseStatusRejectsUnknown(t *testing.T) {
t.Parallel()
if _, err := Normalize(Results{Items: []Item{{ID: "F01", Status: "maybe"}}}); err == nil {
t.Fatal("expected error")
}
}