@@ -518,7 +518,7 @@ func TestStartCommandDockerFlagsEnvVar(t *testing.T) {
518518
519519 ctx := testContext (t )
520520 _ , stderr , err := runLstk (t , ctx , "" ,
521- env .Environ (testEnvWithHome (t . TempDir ( ), "" )).With (env .APIEndpoint , mockServer .URL ).With (env .DockerFlags , "-e SERVICES=s3,sqs" ),
521+ env .Environ (testEnvWithHome (tempHomeForDockerTest ( t ), "" )).With (env .APIEndpoint , mockServer .URL ).With (env .DockerFlags , "-e SERVICES=s3,sqs" ),
522522 "start" )
523523 require .NoError (t , err , "lstk start failed: %s" , stderr )
524524
@@ -549,7 +549,7 @@ docker_flags = "-e SERVICES=s3,sqs"
549549
550550 ctx := testContext (t )
551551 _ , stderr , err := runLstk (t , ctx , "" ,
552- env .Environ (testEnvWithHome (t . TempDir ( ), "" )).With (env .APIEndpoint , mockServer .URL ),
552+ env .Environ (testEnvWithHome (tempHomeForDockerTest ( t ), "" )).With (env .APIEndpoint , mockServer .URL ),
553553 "--config" , configFile , "start" )
554554 require .NoError (t , err , "lstk start failed: %s" , stderr )
555555
@@ -573,7 +573,7 @@ func TestStartCommandDockerFlagsVolumeMount(t *testing.T) {
573573 tmpDir := t .TempDir ()
574574 ctx := testContext (t )
575575 _ , stderr , err := runLstk (t , ctx , "" ,
576- env .Environ (testEnvWithHome (t . TempDir ( ), "" )).With (env .APIEndpoint , mockServer .URL ).With (env .DockerFlags , "-v " + tmpDir + ":/extra-mount" ),
576+ env .Environ (testEnvWithHome (tempHomeForDockerTest ( t ), "" )).With (env .APIEndpoint , mockServer .URL ).With (env .DockerFlags , "-v " + tmpDir + ":/extra-mount" ),
577577 "start" )
578578 require .NoError (t , err , "lstk start failed: %s" , stderr )
579579
@@ -605,7 +605,7 @@ docker_flags = "-e ENFORCE_IAM=1"
605605
606606 ctx := testContext (t )
607607 _ , stderr , err := runLstk (t , ctx , "" ,
608- env .Environ (testEnvWithHome (t . TempDir ( ), "" )).With (env .APIEndpoint , mockServer .URL ).With (env .DockerFlags , "-e SERVICES=s3" ),
608+ env .Environ (testEnvWithHome (tempHomeForDockerTest ( t ), "" )).With (env .APIEndpoint , mockServer .URL ).With (env .DockerFlags , "-e SERVICES=s3" ),
609609 "--config" , configFile , "start" )
610610 require .NoError (t , err , "lstk start failed: %s" , stderr )
611611
@@ -617,6 +617,21 @@ docker_flags = "-e ENFORCE_IAM=1"
617617}
618618
619619// hasBindTarget checks if any bind mount targets the given container path.
620+ // tempHomeForDockerTest creates a temp HOME dir and registers a Docker-based
621+ // cleanup to remove root-owned files the emulator writes to the volume dir
622+ // before Go's TempDir removal runs (LIFO order).
623+ func tempHomeForDockerTest (t * testing.T ) string {
624+ t .Helper ()
625+ tmpHome := t .TempDir ()
626+ t .Cleanup (func () {
627+ volumeDir := filepath .Join (tmpHome , ".cache" , "lstk" , "volume" )
628+ if _ , err := os .Stat (volumeDir ); err == nil {
629+ _ = exec .Command ("docker" , "run" , "--rm" , "-v" , volumeDir + ":/d" , "alpine" , "sh" , "-c" , "rm -rf /d/*" ).Run ()
630+ }
631+ })
632+ return tmpHome
633+ }
634+
620635func hasBindTarget (binds []string , containerPath string ) bool {
621636 for _ , b := range binds {
622637 parts := strings .Split (b , ":" )
0 commit comments