79 lines
1.8 KiB
Go
79 lines
1.8 KiB
Go
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("重复版本没有被拒绝")
|
|
}
|
|
}
|