111 lines
2.8 KiB
Go
111 lines
2.8 KiB
Go
package registry
|
|
|
|
import (
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
func TestProjectRegistryKeepsProjectsIsolated(t *testing.T) {
|
|
root := t.TempDir()
|
|
projects, err := NewProjectRegistry(root)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
_, ssl, err := projects.Ensure("ssl", "SSL", "证书项目")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
_, smail, err := projects.Ensure("smail", "Smail", "邮件项目")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if _, err := ssl.AddPackage(Package{
|
|
Name: "shared",
|
|
Version: "1.0.0",
|
|
Platform: "linux",
|
|
Architecture: "amd64",
|
|
Status: "published",
|
|
}, strings.NewReader("ssl")); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if _, err := smail.AddPackage(Package{
|
|
Name: "shared",
|
|
Version: "1.0.0",
|
|
Platform: "linux",
|
|
Architecture: "amd64",
|
|
Status: "published",
|
|
}, strings.NewReader("smail")); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
sslItem, ok := ssl.Latest("shared")
|
|
if !ok || sslItem.SHA256 == "" {
|
|
t.Fatal("SSL 项目未保存包")
|
|
}
|
|
smailItem, ok := smail.Latest("shared")
|
|
if !ok || smailItem.SHA256 == "" {
|
|
t.Fatal("Smail 项目未保存包")
|
|
}
|
|
if sslItem.SHA256 == smailItem.SHA256 {
|
|
t.Fatal("不同项目不应共享同一个包内容")
|
|
}
|
|
if len(projects.List()) != 2 {
|
|
t.Fatalf("项目数量错误:%d", len(projects.List()))
|
|
}
|
|
|
|
reloaded, err := NewProjectRegistry(root)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
store, ok := reloaded.Store("ssl")
|
|
if !ok {
|
|
t.Fatal("重载后找不到 SSL 项目")
|
|
}
|
|
if item, ok := store.Latest("shared"); !ok || item.SHA256 == "" {
|
|
t.Fatalf("项目包重载结果异常:%+v", item)
|
|
}
|
|
}
|
|
|
|
func TestValidateProjectID(t *testing.T) {
|
|
for _, value := range []string{"ssl", "Smail_2", "release.center"} {
|
|
if err := ValidateProjectID(value); err != nil {
|
|
t.Errorf("项目标识 %q 不应失败:%v", value, err)
|
|
}
|
|
}
|
|
for _, value := range []string{"", "../ssl", "项目", "a/b"} {
|
|
if err := ValidateProjectID(value); err == nil {
|
|
t.Errorf("项目标识 %q 应该失败", value)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestProjectRegistryUpdatePersistsStatus(t *testing.T) {
|
|
root := t.TempDir()
|
|
projects, err := NewProjectRegistry(root)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
created, err := projects.Create(Project{ID: "ssl", Name: "SSL", Description: "证书项目"})
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
updated, err := projects.Update("ssl", Project{
|
|
Name: "SSL 发布中心",
|
|
Description: "证书项目更新",
|
|
Status: "disabled",
|
|
})
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if updated.ID != created.ID || updated.Status != "disabled" || updated.Name != "SSL 发布中心" {
|
|
t.Fatalf("项目更新结果错误:%+v", updated)
|
|
}
|
|
loaded, err := NewProjectRegistry(root)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
persisted, ok := loaded.Get("ssl")
|
|
if !ok || persisted.Status != "disabled" || persisted.Description != "证书项目更新" {
|
|
t.Fatalf("项目更新未持久化:%+v %v", persisted, ok)
|
|
}
|
|
}
|