//go:build integration package integration import ( "testing" ec2spotinstance "github.com/mulgadc/spinifex/spinifex/domains/ec2/spotinstance" "github.com/stretchr/testify/require" ) // StartSpotDaemonLite subscribes a real ec2spotinstance.SpotInstanceServiceImpl — // the same production code a live daemon runs (daemon/daemon_handlers_spotinstance.go) — to // the ec2.PutSpotInstanceRequests/DescribeSpotInstanceRequests/CancelSpotInstanceRequests // subjects the gateway's NATSSpotInstanceService client calls, so RequestSpotInstances / // DescribeSpotInstanceRequests / CancelSpotInstanceRequests exercise genuine daemon-side // persistence instead of a StubSubject canned reply. // // CloseForInstance is never NATS-routed: a live daemon calls it in-process from its teardown // cleaner (spinifex/daemon/vm_adapters.go instanceCleanerAdapter.RemoveFromSpotRequest), which // needs a real vm.Manager and is out of scope for this tier, matching DaemonLite's own // carve-out for instance lifecycle. The returned service exposes CloseForInstance directly so // a test can invoke it the same way the teardown cleaner would, without standing up VM // lifecycle machinery. func StartSpotDaemonLite(t *testing.T, gw *Gateway) *ec2spotinstance.SpotInstanceServiceImpl { t.Helper() svc, err := ec2spotinstance.NewSpotInstanceServiceImplWithNATS(t.Context(), nil, gw.NATSConn) require.NoError(t, err, "construct spot instance service") subscribeServiceMethods(t, gw.NATSConn, "ec2", svc) return svc }