package registry import ( "bytes" "io" "testing" ) func TestAddPackageAndReadBack(t *testing.T) { store, err := New(t.TempDir()) if err != nil { t.Fatal(err) } content := []byte("Scout 测试包") item, err := store.AddPackage(Package{ Name: "demo-core", Version: "1.2.0", Description: "测试包", }, bytes.NewReader(content)) if err != nil { t.Fatal(err) } if item.Size != int64(len(content)) { t.Fatalf("大小错误: %d", item.Size) } if item.SHA256 == "" { t.Fatal("没有生成 SHA-256") } latest, ok := store.Latest("demo-core") if !ok || latest.Version != "1.2.0" { t.Fatalf("最新版本错误: %+v", latest) } file, _, err := store.OpenPackage("demo-core", "1.2.0") if err != nil { t.Fatal(err) } defer file.Close() readBack, err := io.ReadAll(file) if err != nil { t.Fatal(err) } if !bytes.Equal(readBack, content) { t.Fatalf("文件内容错误: %q", readBack) } } func TestLatestUsesVersionOrder(t *testing.T) { store, err := New(t.TempDir()) if err != nil { t.Fatal(err) } for _, version := range []string{"1.9.0", "1.10.0", "2.0.0"} { if _, err := store.AddPackage(Package{Name: "demo", Version: version}, bytes.NewReader([]byte(version))); err != nil { t.Fatal(err) } } latest, ok := store.Latest("demo") if !ok || latest.Version != "2.0.0" { t.Fatalf("版本排序错误: %+v", latest) } if CompareVersions("1.10.0", "1.9.0") <= 0 { t.Fatal("版本比较错误") } } func TestDuplicateVersionIsRejected(t *testing.T) { store, err := New(t.TempDir()) if err != nil { t.Fatal(err) } input := Package{Name: "demo", Version: "1.0.0"} if _, err := store.AddPackage(input, bytes.NewReader([]byte("one"))); err != nil { t.Fatal(err) } if _, err := store.AddPackage(input, bytes.NewReader([]byte("two"))); err == nil { t.Fatal("重复版本没有被拒绝") } }