feat: backend native executor implement
This commit is contained in:
@@ -0,0 +1,88 @@
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user