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) } }