clonepack/internal/clone/apt/release_test.go
GnomeZworc 9e287e4e6a
add test for the wall app
Signed-off-by: GnomeZworc <nicolas.boufidjeline@g3e.fr>
2026-04-25 19:37:17 +02:00

126 lines
3.5 KiB
Go

package apt
import (
"strings"
"testing"
)
const plainRelease = `Origin: Debian
Suite: bookworm
Codename: bookworm
Components: main contrib
Architectures: amd64 arm64
SHA256:
abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890 12345 main/binary-amd64/Packages
0000111122223333000011112222333300001111222233330000111122223333 67890 main/binary-amd64/Packages.gz
`
const pgpArmoredRelease = `-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA512
Origin: Debian
Suite: bookworm
Codename: bookworm
Components: main contrib
Architectures: amd64
SHA256:
abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890 12345 main/binary-amd64/Packages
-----BEGIN PGP SIGNATURE-----
iQEzBAABCgAdFiEE2F...fake-signature...
-----END PGP SIGNATURE-----
`
func TestParseRelease_plain(t *testing.T) {
rf, err := ParseRelease([]byte(plainRelease))
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
if rf.Suite != "bookworm" {
t.Errorf("Suite: got %q, want bookworm", rf.Suite)
}
if rf.Codename != "bookworm" {
t.Errorf("Codename: got %q, want bookworm", rf.Codename)
}
if rf.Components != "main contrib" {
t.Errorf("Components: got %q, want %q", rf.Components, "main contrib")
}
if rf.Architectures != "amd64 arm64" {
t.Errorf("Architectures: got %q, want %q", rf.Architectures, "amd64 arm64")
}
}
func TestParseRelease_sha256entries(t *testing.T) {
rf, err := ParseRelease([]byte(plainRelease))
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
if len(rf.SHA256) != 2 {
t.Fatalf("SHA256 entries: got %d, want 2", len(rf.SHA256))
}
e := rf.SHA256[0]
if e.Hash != "abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890" {
t.Errorf("entry[0] Hash: got %q", e.Hash)
}
if e.Size != 12345 {
t.Errorf("entry[0] Size: got %d, want 12345", e.Size)
}
if e.Path != "main/binary-amd64/Packages" {
t.Errorf("entry[0] Path: got %q", e.Path)
}
}
func TestParseRelease_pgpArmored(t *testing.T) {
rf, err := ParseRelease([]byte(pgpArmoredRelease))
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
if rf.Suite != "bookworm" {
t.Errorf("Suite: got %q, want bookworm", rf.Suite)
}
if len(rf.SHA256) != 1 {
t.Errorf("SHA256 entries: got %d, want 1", len(rf.SHA256))
}
// PGP signature must not bleed into entries.
for _, e := range rf.SHA256 {
if strings.Contains(e.Path, "PGP") || strings.Contains(e.Hash, "PGP") {
t.Errorf("PGP artifact in entry: %+v", e)
}
}
}
func TestGenerateRelease_parseable(t *testing.T) {
entries := []ReleaseEntry{
{Hash: "aabbccdd", Size: 100, Path: "main/binary-amd64/Packages"},
{Hash: "eeff0011", Size: 200, Path: "main/binary-amd64/Packages.gz"},
}
data := GenerateRelease("bookworm", "bookworm", []string{"main", "contrib"}, []string{"amd64"}, entries)
rf, err := ParseRelease(data)
if err != nil {
t.Fatalf("ParseRelease on generated output: %v", err)
}
if rf.Suite != "bookworm" {
t.Errorf("Suite: got %q, want bookworm", rf.Suite)
}
if len(rf.SHA256) != 2 {
t.Fatalf("SHA256 entries: got %d, want 2", len(rf.SHA256))
}
if rf.SHA256[0].Size != 100 {
t.Errorf("entry[0] Size: got %d, want 100", rf.SHA256[0].Size)
}
if rf.SHA256[1].Path != "main/binary-amd64/Packages.gz" {
t.Errorf("entry[1] Path: got %q", rf.SHA256[1].Path)
}
}
func TestGenerateRelease_emptyEntries(t *testing.T) {
data := GenerateRelease("bookworm", "bookworm", []string{"main"}, []string{"amd64"}, nil)
rf, err := ParseRelease(data)
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
if len(rf.SHA256) != 0 {
t.Errorf("expected 0 SHA256 entries, got %d", len(rf.SHA256))
}
}