fix(test): harden migration container cleanup

- guard against a nil shared docker network after sync.Once initialization
- register best-effort cleanup for the v0.26.2 bootstrap container before assertions run
This commit is contained in:
boojack 2026-03-30 23:48:17 +08:00
parent 34c9f0c813
commit fb1bb67d41
2 changed files with 21 additions and 4 deletions

View File

@ -67,12 +67,23 @@ func getTestNetwork(ctx context.Context) (*testcontainers.DockerNetwork, error)
return testDockerNetwork.Load(), networkErr
}
func requireTestNetwork(ctx context.Context) (*testcontainers.DockerNetwork, error) {
nw, err := getTestNetwork(ctx)
if err != nil {
return nil, errors.Wrap(err, "failed to create test network")
}
if nw == nil {
return nil, errors.New("test network is unavailable")
}
return nw, nil
}
// GetMySQLDSN starts a MySQL container (if not already running) and creates a fresh database for this test.
func GetMySQLDSN(t *testing.T) string {
ctx := context.Background()
mysqlOnce.Do(func() {
nw, err := getTestNetwork(ctx)
nw, err := requireTestNetwork(ctx)
if err != nil {
t.Fatalf("failed to create test network: %v", err)
}
@ -172,7 +183,7 @@ func GetPostgresDSN(t *testing.T) string {
ctx := context.Background()
postgresOnce.Do(func() {
nw, err := getTestNetwork(ctx)
nw, err := requireTestNetwork(ctx)
if err != nil {
t.Fatalf("failed to create test network: %v", err)
}
@ -269,9 +280,9 @@ func StartMemosContainer(ctx context.Context, cfg MemosContainerConfig) (testcon
"MEMOS_MODE": "prod",
}
nw, err := getTestNetwork(ctx)
nw, err := requireTestNetwork(ctx)
if err != nil {
return nil, errors.Wrap(err, "failed to create test network")
return nil, err
}
var opts []testcontainers.ContainerCustomizer

View File

@ -31,6 +31,11 @@ func TestMigrationFromV0262PreservesLegacyData(t *testing.T) {
t.Logf("Starting Memos %s container for %s schema bootstrap...", cfg.Version, driver)
container, err := StartMemosContainer(ctx, cfg)
require.NoError(t, err, "failed to start v0.26.2 memos container")
t.Cleanup(func() {
if container != nil {
_ = container.Terminate(ctx)
}
})
legacyStore := NewTestingStoreWithDSN(ctx, t, driver, hostDSN)
require.Eventually(t, func() bool {
@ -44,6 +49,7 @@ func TestMigrationFromV0262PreservesLegacyData(t *testing.T) {
err = container.Terminate(ctx)
require.NoError(t, err, "failed to stop v0.26.2 memos container")
container = nil
db := openMigrationSQLDB(t, driver, hostDSN)
defer db.Close()