74 lines
1.9 KiB
Go
74 lines
1.9 KiB
Go
package image
|
|
|
|
import (
|
|
"crypto/sha256"
|
|
"encoding/hex"
|
|
"os"
|
|
"os/exec"
|
|
"path/filepath"
|
|
"testing"
|
|
)
|
|
|
|
func TestDownloadDecompressesXZFileURLs(t *testing.T) {
|
|
if _, err := exec.LookPath("xz"); err != nil {
|
|
t.Skip("xz not available")
|
|
}
|
|
dir := t.TempDir()
|
|
raw := filepath.Join(dir, "base.img")
|
|
if err := os.WriteFile(raw, []byte("metis-xz-test"), 0o644); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
compressed := raw + ".xz"
|
|
cmd := exec.Command("xz", "-zk", raw)
|
|
if out, err := cmd.CombinedOutput(); err != nil {
|
|
t.Fatalf("xz: %v: %s", err, string(out))
|
|
}
|
|
dest := filepath.Join(dir, "copy.img")
|
|
if err := Download("file://"+compressed, dest); err != nil {
|
|
t.Fatalf("Download: %v", err)
|
|
}
|
|
data, err := os.ReadFile(dest)
|
|
if err != nil {
|
|
t.Fatalf("ReadFile: %v", err)
|
|
}
|
|
if string(data) != "metis-xz-test" {
|
|
t.Fatalf("unexpected decompressed content: %q", string(data))
|
|
}
|
|
}
|
|
|
|
func TestDownloadAndVerifyUsesArchiveChecksumForXZ(t *testing.T) {
|
|
if _, err := exec.LookPath("xz"); err != nil {
|
|
t.Skip("xz not available")
|
|
}
|
|
dir := t.TempDir()
|
|
raw := filepath.Join(dir, "base.img")
|
|
if err := os.WriteFile(raw, []byte("metis-xz-test"), 0o644); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
compressed := raw + ".xz"
|
|
cmd := exec.Command("xz", "-zk", raw)
|
|
if out, err := cmd.CombinedOutput(); err != nil {
|
|
t.Fatalf("xz: %v: %s", err, string(out))
|
|
}
|
|
archiveBytes, err := os.ReadFile(compressed)
|
|
if err != nil {
|
|
t.Fatalf("ReadFile archive: %v", err)
|
|
}
|
|
archiveSum := sha256.Sum256(archiveBytes)
|
|
dest := filepath.Join(dir, "copy.img")
|
|
localPath, err := DownloadAndVerify("file://"+compressed, dest, "sha256:"+hex.EncodeToString(archiveSum[:]))
|
|
if err != nil {
|
|
t.Fatalf("DownloadAndVerify: %v", err)
|
|
}
|
|
if localPath != dest {
|
|
t.Fatalf("expected local path %s, got %s", dest, localPath)
|
|
}
|
|
data, err := os.ReadFile(dest)
|
|
if err != nil {
|
|
t.Fatalf("ReadFile dest: %v", err)
|
|
}
|
|
if string(data) != "metis-xz-test" {
|
|
t.Fatalf("unexpected decompressed content: %q", string(data))
|
|
}
|
|
}
|