9
9
"testing"
10
10
11
11
"github.com/aws/aws-sdk-go/aws"
12
+ "github.com/aws/aws-sdk-go/aws/awserr"
13
+ "github.com/aws/aws-sdk-go/aws/request"
12
14
"github.com/aws/aws-sdk-go/service/ecs"
13
15
"github.com/aws/copilot-cli/internal/pkg/aws/ecs/mocks"
14
16
"github.com/golang/mock/gomock"
@@ -540,7 +542,22 @@ func TestECS_RunTask(t *testing.T) {
540
542
taskFamilyName : "my-task" ,
541
543
startedBy : "task" ,
542
544
}
543
-
545
+ ecsTasks := []* ecs.Task {
546
+ {
547
+ TaskArn : aws .String ("task-1" ),
548
+ },
549
+ {
550
+ TaskArn : aws .String ("task-2" ),
551
+ },
552
+ {
553
+ TaskArn : aws .String ("task-3" ),
554
+ },
555
+ }
556
+ describeTasksInput := ecs.DescribeTasksInput {
557
+ Cluster : aws .String ("my-cluster" ),
558
+ Tasks : aws .StringSlice ([]string {"task-1" , "task-2" , "task-3" }),
559
+ Include : aws .StringSlice ([]string {ecs .TaskFieldTags }),
560
+ }
544
561
testCases := map [string ]struct {
545
562
input
546
563
@@ -566,43 +583,14 @@ func TestECS_RunTask(t *testing.T) {
566
583
},
567
584
},
568
585
PropagateTags : aws .String (ecs .PropagateTagsTaskDefinition ),
569
- }).
570
- Return (& ecs.RunTaskOutput {
571
- Tasks : []* ecs.Task {
572
- {
573
- TaskArn : aws .String ("task-1" ),
574
- },
575
- {
576
- TaskArn : aws .String ("task-2" ),
577
- },
578
- {
579
- TaskArn : aws .String ("task-3" ),
580
- },
581
- },
582
- }, nil )
583
- m .EXPECT ().WaitUntilTasksRunning (& ecs.DescribeTasksInput {
584
- Cluster : aws .String ("my-cluster" ),
585
- Tasks : aws .StringSlice ([]string {"task-1" , "task-2" , "task-3" }),
586
- }).Times (1 )
587
- m .EXPECT ().DescribeTasks (& ecs.DescribeTasksInput {
588
- Cluster : aws .String ("my-cluster" ),
589
- Tasks : aws .StringSlice ([]string {"task-1" , "task-2" , "task-3" }),
590
- Include : aws .StringSlice ([]string {ecs .TaskFieldTags }),
591
- }).Return (& ecs.DescribeTasksOutput {
592
- Tasks : []* ecs.Task {
593
- {
594
- TaskArn : aws .String ("task-1" ),
595
- },
596
- {
597
- TaskArn : aws .String ("task-2" ),
598
- },
599
- {
600
- TaskArn : aws .String ("task-3" ),
601
- },
602
- },
603
- }, nil ).Times (1 )
586
+ }).Return (& ecs.RunTaskOutput {
587
+ Tasks : ecsTasks ,
588
+ }, nil )
589
+ m .EXPECT ().WaitUntilTasksRunning (& describeTasksInput ).Times (1 )
590
+ m .EXPECT ().DescribeTasks (& describeTasksInput ).Return (& ecs.DescribeTasksOutput {
591
+ Tasks : ecsTasks ,
592
+ }, nil )
604
593
},
605
-
606
594
wantedTasks : []* Task {
607
595
{
608
596
TaskArn : aws .String ("task-1" ),
@@ -635,10 +623,82 @@ func TestECS_RunTask(t *testing.T) {
635
623
PropagateTags : aws .String (ecs .PropagateTagsTaskDefinition ),
636
624
}).
637
625
Return (& ecs.RunTaskOutput {}, errors .New ("error" ))
638
- m .EXPECT ().WaitUntilTasksRunning (gomock .Any ()).Times (0 )
639
626
},
640
627
wantedError : errors .New ("run task(s) my-task: error" ),
641
628
},
629
+ "failed to call WaitUntilTasksRunning" : {
630
+ input : runTaskInput ,
631
+
632
+ mockECSClient : func (m * mocks.Mockapi ) {
633
+ m .EXPECT ().RunTask (& ecs.RunTaskInput {
634
+ Cluster : aws .String ("my-cluster" ),
635
+ Count : aws .Int64 (3 ),
636
+ LaunchType : aws .String (ecs .LaunchTypeFargate ),
637
+ StartedBy : aws .String ("task" ),
638
+ TaskDefinition : aws .String ("my-task" ),
639
+ NetworkConfiguration : & ecs.NetworkConfiguration {
640
+ AwsvpcConfiguration : & ecs.AwsVpcConfiguration {
641
+ AssignPublicIp : aws .String (ecs .AssignPublicIpEnabled ),
642
+ Subnets : aws .StringSlice ([]string {"subnet-1" , "subnet-2" }),
643
+ SecurityGroups : aws .StringSlice ([]string {"sg-1" , "sg-2" }),
644
+ },
645
+ },
646
+ PropagateTags : aws .String (ecs .PropagateTagsTaskDefinition ),
647
+ }).
648
+ Return (& ecs.RunTaskOutput {
649
+ Tasks : ecsTasks ,
650
+ }, nil )
651
+ m .EXPECT ().WaitUntilTasksRunning (& describeTasksInput ).Return (errors .New ("some error" ))
652
+ },
653
+ wantedError : errors .New ("wait for tasks to be running: some error" ),
654
+ },
655
+ "task failed to start" : {
656
+ input : runTaskInput ,
657
+
658
+ mockECSClient : func (m * mocks.Mockapi ) {
659
+ m .EXPECT ().RunTask (& ecs.RunTaskInput {
660
+ Cluster : aws .String ("my-cluster" ),
661
+ Count : aws .Int64 (3 ),
662
+ LaunchType : aws .String (ecs .LaunchTypeFargate ),
663
+ StartedBy : aws .String ("task" ),
664
+ TaskDefinition : aws .String ("my-task" ),
665
+ NetworkConfiguration : & ecs.NetworkConfiguration {
666
+ AwsvpcConfiguration : & ecs.AwsVpcConfiguration {
667
+ AssignPublicIp : aws .String (ecs .AssignPublicIpEnabled ),
668
+ Subnets : aws .StringSlice ([]string {"subnet-1" , "subnet-2" }),
669
+ SecurityGroups : aws .StringSlice ([]string {"sg-1" , "sg-2" }),
670
+ },
671
+ },
672
+ PropagateTags : aws .String (ecs .PropagateTagsTaskDefinition ),
673
+ }).
674
+ Return (& ecs.RunTaskOutput {
675
+ Tasks : ecsTasks }, nil )
676
+ m .EXPECT ().WaitUntilTasksRunning (& describeTasksInput ).
677
+ Return (awserr .New (request .WaiterResourceNotReadyErrorCode , "some error" , errors .New ("some error" )))
678
+ m .EXPECT ().DescribeTasks (& describeTasksInput ).Return (& ecs.DescribeTasksOutput {
679
+ Tasks : []* ecs.Task {
680
+ {
681
+ TaskArn : aws .String ("task-1" ),
682
+ },
683
+ {
684
+ TaskArn : aws .String ("arn:aws:ecs:us-west-2:123456789:task/4082490ee6c245e09d2145010aa1ba8d" ),
685
+ StoppedReason : aws .String ("Task failed to start" ),
686
+ LastStatus : aws .String ("STOPPED" ),
687
+ Containers : []* ecs.Container {
688
+ {
689
+ Reason : aws .String ("CannotPullContainerError: inspect image has been retried 1 time(s)" ),
690
+ LastStatus : aws .String ("STOPPED" ),
691
+ },
692
+ },
693
+ },
694
+ {
695
+ TaskArn : aws .String ("task-3" ),
696
+ },
697
+ },
698
+ }, nil )
699
+ },
700
+ wantedError : errors .New ("task 4082490e: Task failed to start: CannotPullContainerError: inspect image has been retried 1 time(s)" ),
701
+ },
642
702
}
643
703
644
704
for name , tc := range testCases {
0 commit comments