zsvo/pkg/packager/packager_test.go

67 lines
1.5 KiB
Go

package packager
import (
"os"
"path/filepath"
"testing"
"zsvo/pkg/recipe"
)
func TestPackageAndReadPkgInfo(t *testing.T) {
t.Parallel()
workDir := t.TempDir()
stagingDir := filepath.Join(workDir, "staging", "demo-1.0.0")
if err := os.MkdirAll(filepath.Join(stagingDir, "usr", "bin"), 0o755); err != nil {
t.Fatalf("MkdirAll() error = %v", err)
}
if err := os.WriteFile(filepath.Join(stagingDir, "usr", "bin", "demo"), []byte("demo\n"), 0o755); err != nil {
t.Fatalf("WriteFile() error = %v", err)
}
r := &recipe.Recipe{
Name: "demo",
Version: "1.0.0",
Deps: []string{"glibc", "zlib"},
}
p := NewPackager(workDir)
if err := p.Package(r); err != nil {
t.Fatalf("Package() error = %v", err)
}
archive := p.GetPackageFile(r)
info, err := p.ReadPkgInfo(archive)
if err != nil {
t.Fatalf("ReadPkgInfo() error = %v", err)
}
if len(info.Dependencies) != 2 || info.Dependencies[0] != "glibc" || info.Dependencies[1] != "zlib" {
t.Fatalf("dependencies mismatch: %#v", info.Dependencies)
}
if len(info.Files) != 1 || info.Files[0] != "usr/bin/demo" {
t.Fatalf("files mismatch: %#v", info.Files)
}
contents, err := p.ListPackageContents(archive)
if err != nil {
t.Fatalf("ListPackageContents() error = %v", err)
}
hasPkgInfo := false
hasBinary := false
for _, entry := range contents {
if entry == ".zsvo.yml" {
hasPkgInfo = true
}
if entry == "usr/bin/demo" {
hasBinary = true
}
}
if !hasPkgInfo || !hasBinary {
t.Fatalf("archive contents missing expected files: %#v", contents)
}
}