(ctx context.Context, input *ec2.TerminateInstancesInput, optFns ...func(*ec2.Options))
| 1111 | } |
| 1112 | |
| 1113 | func (c *concurrentTest) TerminateInstances(ctx context.Context, input *ec2.TerminateInstancesInput, optFns ...func(*ec2.Options)) (*ec2.TerminateInstancesOutput, error) { |
| 1114 | if input.DryRun != nil && *input.DryRun { |
| 1115 | return &ec2.TerminateInstancesOutput{}, nil |
| 1116 | } |
| 1117 | |
| 1118 | c.mutex.Lock() |
| 1119 | defer c.mutex.Unlock() |
| 1120 | |
| 1121 | for _, id := range input.InstanceIds { |
| 1122 | assert.Equal(c.t, c.surge, len(c.detached), "Number of detached instances") |
| 1123 | if c.detached[id] { |
| 1124 | assert.LessOrEqual(c.t, c.terminationRequestsLeft, c.surge, "Deleting detached instances last") |
| 1125 | } |
| 1126 | |
| 1127 | terminationRequestsLeft := c.terminationRequestsLeft |
| 1128 | c.terminationRequestsLeft-- |
| 1129 | switch terminationRequestsLeft { |
| 1130 | case 7, 2, 1: |
| 1131 | assert.Equal(c.t, terminationRequestsLeft, c.previousValidation, "previous validation") |
| 1132 | case 6, 4: |
| 1133 | assert.Equal(c.t, terminationRequestsLeft, c.previousValidation, "previous validation") |
| 1134 | c.mutex.Unlock() |
| 1135 | select { |
| 1136 | case <-c.terminationChan: |
| 1137 | case <-time.After(1 * time.Second): |
| 1138 | c.t.Error("timed out reading from terminationChan") |
| 1139 | } |
| 1140 | c.mutex.Lock() |
| 1141 | go c.delayThenWakeValidation() |
| 1142 | case 5, 3: |
| 1143 | assert.Equal(c.t, terminationRequestsLeft+1, c.previousValidation, "previous validation") |
| 1144 | } |
| 1145 | } |
| 1146 | return c.EC2API.TerminateInstances(ctx, input) |
| 1147 | } |
| 1148 | |
| 1149 | const postTerminationValidationDelay = 100 * time.Millisecond // NodeInterval plus some |
| 1150 |
nothing calls this directly
no test coverage detected