feat: backend executor implement

This commit is contained in:
2026-08-16 17:12:06 +08:00
parent 390e0565d3
commit 7755da72e7
31 changed files with 2762 additions and 184 deletions
+33
View File
@@ -84,6 +84,29 @@ func TestServerAcceptsDirectNativeJARThroughUnixSocket(t *testing.T) {
}
}
func TestServerAcceptsContainerImageThroughUnixSocket(t *testing.T) {
socketPath := shortSocketPath(t)
updater := &fakeUpdater{record: transaction.Transaction{ID: "transaction-container-01", State: transaction.StateCommitted}}
server, err := New(socketPath, updater, slog.New(slog.NewTextHandler(io.Discard, nil)))
if err != nil {
t.Fatalf("create daemon server: %v", err)
}
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
serveResult := make(chan error, 1)
go func() { serveResult <- server.Serve(ctx) }()
waitForSocket(t, socketPath, serveResult)
imageReference := "harbor.ymswell.asia/ymswell/glory-ymswell:20260813-184902-a37bf50d-v1.1.8.1"
response, err := daemonclient.UpdateContainerImage(context.Background(), socketPath, "backend", imageReference, nil)
if err != nil {
t.Fatalf("submit container backend image: %v", err)
}
if response.TransactionID != updater.record.ID || updater.file != imageReference || updater.inputType != daemonapi.InputTypeContainerImage {
t.Fatalf("unexpected container update dispatch: response=%+v image=%s inputType=%s", response, updater.file, updater.inputType)
}
}
func TestServerReturnsTransactionFailure(t *testing.T) {
socketPath := shortSocketPath(t)
updater := &fakeUpdater{
@@ -194,6 +217,16 @@ func (u *fakeUpdater) UpdateNativeJAR(_ context.Context, file string, report bac
return u.record, u.err
}
func (u *fakeUpdater) UpdateContainerImage(_ context.Context, imageReference string, report backendupdate.ProgressReporter) (transaction.Transaction, error) {
u.file = imageReference
u.inputType = daemonapi.InputTypeContainerImage
u.operation = daemonapi.OperationUpdate
if report != nil {
report(backendupdate.Progress{TransactionID: u.record.ID, State: transaction.StateStarting, Message: "test update progress"})
}
return u.record, u.err
}
func (u *fakeUpdater) Restart(_ context.Context, report backendupdate.ProgressReporter) (transaction.Transaction, error) {
u.operation = daemonapi.OperationRestart
if report != nil {