@@ -38,6 +38,7 @@ import (
38
38
apitaskstatus "github.com/aws/amazon-ecs-agent/agent/api/task/status"
39
39
"github.com/aws/amazon-ecs-agent/agent/config"
40
40
"github.com/aws/amazon-ecs-agent/agent/credentials"
41
+ mock_credentials "github.com/aws/amazon-ecs-agent/agent/credentials/mocks"
41
42
"github.com/aws/amazon-ecs-agent/agent/data"
42
43
mock_dockerapi "github.com/aws/amazon-ecs-agent/agent/dockerclient/dockerapi/mocks"
43
44
"github.com/aws/amazon-ecs-agent/agent/engine/dependencygraph"
@@ -1335,6 +1336,75 @@ func TestTaskWaitForExecutionCredentials(t *testing.T) {
1335
1336
}
1336
1337
}
1337
1338
1339
+ func TestCleanupTaskWithExecutionCredentials (t * testing.T ) {
1340
+ cfg := getTestConfig ()
1341
+ ctrl := gomock .NewController (t )
1342
+ mockTime := mock_ttime .NewMockTime (ctrl )
1343
+ mockState := mock_dockerstate .NewMockTaskEngineState (ctrl )
1344
+ mockClient := mock_dockerapi .NewMockDockerClient (ctrl )
1345
+ mockImageManager := mock_engine .NewMockImageManager (ctrl )
1346
+ mockCredentialsManager := mock_credentials .NewMockManager (ctrl )
1347
+ mockResource := mock_taskresource .NewMockTaskResource (ctrl )
1348
+ defer ctrl .Finish ()
1349
+
1350
+ ctx , cancel := context .WithCancel (context .TODO ())
1351
+ defer cancel ()
1352
+
1353
+ taskEngine := & DockerTaskEngine {
1354
+ ctx : ctx ,
1355
+ cfg : & cfg ,
1356
+ dataClient : data .NewNoopClient (),
1357
+ state : mockState ,
1358
+ client : mockClient ,
1359
+ imageManager : mockImageManager ,
1360
+ credentialsManager : mockCredentialsManager ,
1361
+ }
1362
+ mTask := & managedTask {
1363
+ ctx : ctx ,
1364
+ cancel : cancel ,
1365
+ Task : testdata .LoadTask ("sleep5" ),
1366
+ credentialsManager : mockCredentialsManager ,
1367
+ _time : mockTime ,
1368
+ engine : taskEngine ,
1369
+ acsMessages : make (chan acsTransition ),
1370
+ dockerMessages : make (chan dockerContainerChange ),
1371
+ resourceStateChangeEvent : make (chan resourceStateChange ),
1372
+ cfg : taskEngine .cfg ,
1373
+ }
1374
+
1375
+ mTask .Task .ResourcesMapUnsafe = make (map [string ][]taskresource.TaskResource )
1376
+ mTask .Task .SetExecutionRoleCredentialsID ("executionRoleCredentialsId" )
1377
+ mTask .AddResource ("mockResource" , mockResource )
1378
+ mTask .SetKnownStatus (apitaskstatus .TaskStopped )
1379
+ mTask .SetSentStatus (apitaskstatus .TaskStopped )
1380
+ container := mTask .Containers [0 ]
1381
+ dockerContainer := & apicontainer.DockerContainer {
1382
+ DockerName : "dockerContainer" ,
1383
+ }
1384
+
1385
+ // Expectations for triggering cleanup
1386
+ now := mTask .GetKnownStatusTime ()
1387
+ taskStoppedDuration := 1 * time .Minute
1388
+ mockTime .EXPECT ().Now ().Return (now ).AnyTimes ()
1389
+ cleanupTimeTrigger := make (chan time.Time )
1390
+ mockTime .EXPECT ().After (gomock .Any ()).Return (cleanupTimeTrigger )
1391
+ go func () {
1392
+ cleanupTimeTrigger <- now
1393
+ }()
1394
+
1395
+ // Expectations to verify the execution credentials get removed
1396
+ mockCredentialsManager .EXPECT ().RemoveCredentials ("executionRoleCredentialsId" )
1397
+
1398
+ // Expectations to verify that the task gets removed
1399
+ mockState .EXPECT ().ContainerMapByArn (mTask .Arn ).Return (map [string ]* apicontainer.DockerContainer {container .Name : dockerContainer }, true )
1400
+ mockClient .EXPECT ().RemoveContainer (gomock .Any (), dockerContainer .DockerName , gomock .Any ()).Return (nil )
1401
+ mockImageManager .EXPECT ().RemoveContainerReferenceFromImageState (container ).Return (nil )
1402
+ mockState .EXPECT ().RemoveTask (mTask .Task )
1403
+ mockResource .EXPECT ().Cleanup ()
1404
+ mockResource .EXPECT ().GetName ()
1405
+ mTask .cleanupTask (taskStoppedDuration )
1406
+ }
1407
+
1338
1408
func TestCleanupTaskWithInvalidInterval (t * testing.T ) {
1339
1409
ctrl := gomock .NewController (t )
1340
1410
mockTime := mock_ttime .NewMockTime (ctrl )
0 commit comments