Files
yms-daemon/internal/updatepackage/direct_native_test.go
T

89 lines
2.7 KiB
Go

package updatepackage
import (
"archive/zip"
"bytes"
"os"
"path/filepath"
"strings"
"testing"
)
func TestOpenAndCopyDirectNativeJAR(t *testing.T) {
jarPath := writeDirectNativeJAR(t, "glory-soft-yms.jar", []byte("backend classes"))
jar, err := OpenDirectNativeJAR(jarPath)
if err != nil {
t.Fatalf("open direct native backend JAR: %v", err)
}
if jar.FileName != "glory-soft-yms.jar" || jar.SHA256 == "" || jar.Identity.Size <= 0 {
t.Fatalf("unexpected direct native backend JAR metadata: %+v", jar)
}
destination := filepath.Join(t.TempDir(), "transaction", "backend.jar")
if err := jar.CopyArtifact(destination); err != nil {
t.Fatalf("copy direct native backend JAR: %v", err)
}
expected, err := os.ReadFile(jarPath)
if err != nil {
t.Fatalf("read source JAR: %v", err)
}
actual, err := os.ReadFile(destination)
if err != nil || !bytes.Equal(actual, expected) {
t.Fatalf("unexpected copied JAR: err=%v", err)
}
}
func TestOpenDirectNativeJARRejectsInvalidArchive(t *testing.T) {
path := filepath.Join(t.TempDir(), "glory-soft-yms.jar")
if err := os.WriteFile(path, []byte("not a JAR"), 0o600); err != nil {
t.Fatalf("write invalid JAR: %v", err)
}
if _, err := OpenDirectNativeJAR(path); err == nil {
t.Fatal("expected invalid direct JAR rejection")
}
}
func TestCopyDirectNativeJARRejectsChangedSource(t *testing.T) {
jarPath := writeDirectNativeJAR(t, "glory-soft-yms.jar", []byte("first"))
jar, err := OpenDirectNativeJAR(jarPath)
if err != nil {
t.Fatalf("open direct native backend JAR: %v", err)
}
replacement := writeDirectNativeJAR(t, "replacement.jar", []byte("second"))
content, err := os.ReadFile(replacement)
if err != nil {
t.Fatalf("read replacement JAR: %v", err)
}
if err := os.WriteFile(jarPath, content, 0o600); err != nil {
t.Fatalf("replace source JAR: %v", err)
}
err = jar.CopyArtifact(filepath.Join(t.TempDir(), "backend.jar"))
if err == nil || !strings.Contains(err.Error(), "changed") {
t.Fatalf("expected changed source rejection, got %v", err)
}
}
func writeDirectNativeJAR(t *testing.T, fileName string, content []byte) string {
t.Helper()
jarPath := filepath.Join(t.TempDir(), fileName)
file, err := os.Create(jarPath)
if err != nil {
t.Fatalf("create direct JAR: %v", err)
}
writer := zip.NewWriter(file)
entry, err := writer.Create("BOOT-INF/classes/application.properties")
if err != nil {
t.Fatalf("create direct JAR entry: %v", err)
}
if _, err := entry.Write(content); err != nil {
t.Fatalf("write direct JAR entry: %v", err)
}
if err := writer.Close(); err != nil {
t.Fatalf("close direct JAR writer: %v", err)
}
if err := file.Close(); err != nil {
t.Fatalf("close direct JAR: %v", err)
}
return jarPath
}