Files
spinifex/tests/integration/spot_daemon_lite.go
T
joshsiv-mulga d8ab4017ad refactor: move standalone EC2 resource packages to the EC2 domain
Move handlers/ec2/{account,key,launchtemplate,placementgroup,
spotinstance,volumestate} to domains/ec2/<resource>. Each package is
named after its directory and callers import it as ec2<resource>;
volumestate already carried its directory name.
2026-10-07 09:15:14 +10:00

35 lines
1.5 KiB
Go

//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
}