feat: 自托管 AI Gateway 运维管理 SKILL
This commit is contained in:
@@ -0,0 +1,80 @@
|
||||
package skillbundle
|
||||
|
||||
import (
|
||||
"archive/zip"
|
||||
"bytes"
|
||||
"io"
|
||||
"slices"
|
||||
"strings"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestLoadMetadata(t *testing.T) {
|
||||
metadata, err := LoadMetadata()
|
||||
if err != nil {
|
||||
t.Fatalf("load metadata: %v", err)
|
||||
}
|
||||
if metadata.Name != Name || metadata.Version != "1.0.1" {
|
||||
t.Fatalf("unexpected metadata: %+v", metadata)
|
||||
}
|
||||
if !slices.Equal(metadata.Modules, []string{"model-runtime"}) {
|
||||
t.Fatalf("unexpected modules: %+v", metadata.Modules)
|
||||
}
|
||||
if FileName(metadata) != "ai-gateway-ops-management-v1.0.1.zip" {
|
||||
t.Fatalf("unexpected file name: %s", FileName(metadata))
|
||||
}
|
||||
}
|
||||
|
||||
func TestBuildArchiveContainsOperationsSkill(t *testing.T) {
|
||||
raw, err := BuildArchive()
|
||||
if err != nil {
|
||||
t.Fatalf("build archive: %v", err)
|
||||
}
|
||||
archive, err := zip.NewReader(bytes.NewReader(raw), int64(len(raw)))
|
||||
if err != nil {
|
||||
t.Fatalf("open archive: %v", err)
|
||||
}
|
||||
files := make(map[string]*zip.File, len(archive.File))
|
||||
for _, file := range archive.File {
|
||||
files[file.Name] = file
|
||||
if strings.HasPrefix(file.Name, "/") || strings.Contains(file.Name, "..") {
|
||||
t.Fatalf("unsafe archive path: %q", file.Name)
|
||||
}
|
||||
}
|
||||
expected := []string{
|
||||
"SKILL.md",
|
||||
"agents/openai.yaml",
|
||||
"skill.json",
|
||||
"references/api-discovery-and-safety.md",
|
||||
"references/model-providers-and-base-models.md",
|
||||
"references/model-pricing-and-policies.md",
|
||||
"references/model-platforms-and-bindings.md",
|
||||
"references/model-universal-platforms.md",
|
||||
"references/model-acceptance-runbook.md",
|
||||
}
|
||||
for _, name := range expected {
|
||||
if files[name] == nil {
|
||||
t.Fatalf("archive missing %q; files=%v", name, archiveFileNames(archive.File))
|
||||
}
|
||||
}
|
||||
skillFile, err := files["SKILL.md"].Open()
|
||||
if err != nil {
|
||||
t.Fatalf("open SKILL.md: %v", err)
|
||||
}
|
||||
defer skillFile.Close()
|
||||
skillContent, err := io.ReadAll(skillFile)
|
||||
if err != nil {
|
||||
t.Fatalf("read SKILL.md: %v", err)
|
||||
}
|
||||
if !strings.Contains(string(skillContent), "name: "+Name) {
|
||||
t.Fatalf("SKILL.md frontmatter has unexpected name")
|
||||
}
|
||||
}
|
||||
|
||||
func archiveFileNames(files []*zip.File) []string {
|
||||
names := make([]string, 0, len(files))
|
||||
for _, file := range files {
|
||||
names = append(names, file.Name)
|
||||
}
|
||||
return names
|
||||
}
|
||||
Reference in New Issue
Block a user