You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

53 lines
1.7 KiB

package main
import (
"compress/gzip"
"os"
"path/filepath"
"testing"
"tera-clone/services/tera-api/internal/update"
)
func TestPackRecoveryCreatesVerifiableOfflinePackage(t *testing.T) {
base := t.TempDir()
keys := filepath.Join(base, "keys")
if err := keygen([]string{"--output-dir", keys, "--key-id", "test-key", "--product", "tera-core-x48-pro", "--profile", "fet3568j-c"}); err != nil {
t.Fatal(err)
}
rootfsPath := filepath.Join(base, "rootfs.img.gz")
file, err := os.OpenFile(rootfsPath, os.O_WRONLY|os.O_CREATE|os.O_EXCL, 0o600)
if err != nil {
t.Fatal(err)
}
compressed := gzip.NewWriter(file)
if _, err := compressed.Write([]byte("rootfs-image-fixture")); err != nil {
t.Fatal(err)
}
if err := compressed.Close(); err != nil {
t.Fatal(err)
}
if err := file.Close(); err != nil {
t.Fatal(err)
}
bootPath := filepath.Join(base, "boot.img")
if err := os.WriteFile(bootPath, []byte("signed-boot-fit-fixture"), 0o600); err != nil {
t.Fatal(err)
}
packagePath := filepath.Join(base, "release.tera-update")
if err := packRecovery([]string{
"--private-key", filepath.Join(keys, "test-key.private.json"), "--output", packagePath,
"--rootfs-payload", rootfsPath, "--rootfs-encoding", "gzip", "--boot-payload", bootPath,
"--package-id", "release-1", "--version", "1.1.0", "--minimum-current-version", "1.0.0",
}); err != nil {
t.Fatal(err)
}
manifest, signer, err := update.VerifyPackage(packagePath, keys, "tera-core-x48-pro", "fet3568j-c", "1.0.0")
if err != nil {
t.Fatal(err)
}
if signer != "test-key" || manifest.Apply.Capability != update.ApplyCapabilityRecoveryV1 || !manifest.Apply.RebootRequired || len(manifest.Payloads) != 2 {
t.Fatalf("manifest=%+v signer=%q", manifest, signer)
}
}