Implement platform management features
This commit is contained in:
@@ -3,6 +3,7 @@ package service
|
||||
import (
|
||||
"strings"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"browser.local/platform/domain"
|
||||
)
|
||||
@@ -103,6 +104,61 @@ func TestLifecycleProjectedStateUsesRunProcessFacts(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestLifecycleJobResultsPublishProcessStateEvents(t *testing.T) {
|
||||
svc, sessionToken := newLifecycleRunService(t)
|
||||
createLifecyclePlugin(t, svc)
|
||||
created, err := svc.CreateServerInstanceWorkflow(domain.ServerLifecycleCreate{ID: "server-state-events", PluginID: "server.scum", RunEndpointID: "run-local", Name: "State Events", IdempotencyKey: "state-events-create", ProfileKey: "local"})
|
||||
if err != nil {
|
||||
t.Fatalf("create lifecycle server: %v", err)
|
||||
}
|
||||
claimAndCompleteLifecycleJobForServer(t, svc, sessionToken, created.Instance.ID, domain.LifecycleCapabilityInstall, domain.JobStateSucceeded)
|
||||
ready, err := svc.GetServerInstance(created.Instance.ID)
|
||||
if err != nil {
|
||||
t.Fatalf("get ready server: %v", err)
|
||||
}
|
||||
if _, err := svc.StartServerInstance(domain.ServerLifecycleCommand{ServerInstanceID: ready.ID, ExpectedConfigVersion: ready.ConfigVersion, IdempotencyKey: "state-events-start"}); err != nil {
|
||||
t.Fatalf("dispatch start: %v", err)
|
||||
}
|
||||
claimAndCompleteLifecycleJobForServer(t, svc, sessionToken, ready.ID, domain.LifecycleCapabilityStart, domain.JobStateSucceeded)
|
||||
|
||||
subscription, err := svc.SubscribeLogEvents(ready.ID)
|
||||
if err != nil {
|
||||
t.Fatalf("subscribe state events: %v", err)
|
||||
}
|
||||
defer subscription.Close()
|
||||
running, err := svc.GetServerInstance(ready.ID)
|
||||
if err != nil {
|
||||
t.Fatalf("get running server: %v", err)
|
||||
}
|
||||
if _, err := svc.StopServerInstance(domain.ServerLifecycleCommand{ServerInstanceID: running.ID, ExpectedConfigVersion: running.ConfigVersion, IdempotencyKey: "state-events-stop"}); err != nil {
|
||||
t.Fatalf("dispatch stop: %v", err)
|
||||
}
|
||||
claimAndCompleteLifecycleJobForServer(t, svc, sessionToken, running.ID, domain.LifecycleCapabilityStop, domain.JobStateSucceeded)
|
||||
assertLogProcessStateEvent(t, subscription, domain.ServerInstanceStateStopped)
|
||||
|
||||
stopped, err := svc.GetServerInstance(running.ID)
|
||||
if err != nil {
|
||||
t.Fatalf("get stopped server: %v", err)
|
||||
}
|
||||
if _, err := svc.StartServerInstance(domain.ServerLifecycleCommand{ServerInstanceID: stopped.ID, ExpectedConfigVersion: stopped.ConfigVersion, IdempotencyKey: "state-events-restart"}); err != nil {
|
||||
t.Fatalf("dispatch restart: %v", err)
|
||||
}
|
||||
claimAndCompleteLifecycleJobForServer(t, svc, sessionToken, stopped.ID, domain.LifecycleCapabilityStart, domain.JobStateSucceeded)
|
||||
assertLogProcessStateEvent(t, subscription, domain.ServerInstanceStateRunning)
|
||||
}
|
||||
|
||||
func assertLogProcessStateEvent(t *testing.T, subscription LogEventSubscription, want domain.ServerInstanceState) {
|
||||
t.Helper()
|
||||
select {
|
||||
case event := <-subscription.Events:
|
||||
if event.Kind != LogEventSubscriptionEventProcessState || event.ProcessState != want {
|
||||
t.Fatalf("unexpected process state event: %+v", event)
|
||||
}
|
||||
case <-time.After(time.Second):
|
||||
t.Fatalf("expected process state event %q", want)
|
||||
}
|
||||
}
|
||||
|
||||
func TestCoreServiceCreatesTargetBoundDraftAndRequiresDedicatedRunRegistration(t *testing.T) {
|
||||
svc, _ := newLifecycleRunService(t)
|
||||
plugin := createLifecyclePlugin(t, svc)
|
||||
|
||||
Reference in New Issue
Block a user