|
6 | 6 | "reflect"
|
7 | 7 | "regexp"
|
8 | 8 | "testing"
|
| 9 | + "time" |
9 | 10 |
|
10 | 11 | "github.com/aws/aws-sdk-go/aws"
|
11 | 12 | "github.com/aws/aws-sdk-go/aws/awserr"
|
@@ -128,6 +129,26 @@ func TestAccAWSEMRCluster_additionalInfo(t *testing.T) {
|
128 | 129 | })
|
129 | 130 | }
|
130 | 131 |
|
| 132 | +func TestAccAWSEMRCluster_disappears(t *testing.T) { |
| 133 | + var cluster emr.Cluster |
| 134 | + r := acctest.RandInt() |
| 135 | + resource.ParallelTest(t, resource.TestCase{ |
| 136 | + PreCheck: func() { testAccPreCheck(t) }, |
| 137 | + Providers: testAccProviders, |
| 138 | + CheckDestroy: testAccCheckAWSEmrDestroy, |
| 139 | + Steps: []resource.TestStep{ |
| 140 | + { |
| 141 | + Config: testAccAWSEmrClusterConfig(r), |
| 142 | + Check: resource.ComposeTestCheckFunc( |
| 143 | + testAccCheckAWSEmrClusterExists("aws_emr_cluster.tf-test-cluster", &cluster), |
| 144 | + testAccCheckAWSEmrClusterDisappears(&cluster), |
| 145 | + ), |
| 146 | + ExpectNonEmptyPlan: true, |
| 147 | + }, |
| 148 | + }, |
| 149 | + }) |
| 150 | +} |
| 151 | + |
131 | 152 | func TestAccAWSEMRCluster_configurationsJson(t *testing.T) {
|
132 | 153 | var cluster emr.Cluster
|
133 | 154 | r := acctest.RandInt()
|
@@ -1471,6 +1492,64 @@ func testAccCheckAWSEmrClusterExists(n string, v *emr.Cluster) resource.TestChec
|
1471 | 1492 | }
|
1472 | 1493 | }
|
1473 | 1494 |
|
| 1495 | +func testAccCheckAWSEmrClusterDisappears(cluster *emr.Cluster) resource.TestCheckFunc { |
| 1496 | + return func(s *terraform.State) error { |
| 1497 | + conn := testAccProvider.Meta().(*AWSClient).emrconn |
| 1498 | + id := aws.StringValue(cluster.Id) |
| 1499 | + |
| 1500 | + terminateJobFlowsInput := &emr.TerminateJobFlowsInput{ |
| 1501 | + JobFlowIds: []*string{cluster.Id}, |
| 1502 | + } |
| 1503 | + |
| 1504 | + _, err := conn.TerminateJobFlows(terminateJobFlowsInput) |
| 1505 | + |
| 1506 | + if err != nil { |
| 1507 | + return err |
| 1508 | + } |
| 1509 | + |
| 1510 | + input := &emr.ListInstancesInput{ |
| 1511 | + ClusterId: cluster.Id, |
| 1512 | + } |
| 1513 | + var output *emr.ListInstancesOutput |
| 1514 | + var instanceCount int |
| 1515 | + |
| 1516 | + err = resource.Retry(20*time.Minute, func() *resource.RetryError { |
| 1517 | + var err error |
| 1518 | + output, err = conn.ListInstances(input) |
| 1519 | + |
| 1520 | + if err != nil { |
| 1521 | + return resource.NonRetryableError(err) |
| 1522 | + } |
| 1523 | + |
| 1524 | + instanceCount = countEMRRemainingInstances(output, id) |
| 1525 | + |
| 1526 | + if instanceCount != 0 { |
| 1527 | + return resource.RetryableError(fmt.Errorf("EMR Cluster (%s) has (%d) Instances remaining", id, instanceCount)) |
| 1528 | + } |
| 1529 | + |
| 1530 | + return nil |
| 1531 | + }) |
| 1532 | + |
| 1533 | + if isResourceTimeoutError(err) { |
| 1534 | + output, err = conn.ListInstances(input) |
| 1535 | + |
| 1536 | + if err == nil { |
| 1537 | + instanceCount = countEMRRemainingInstances(output, id) |
| 1538 | + } |
| 1539 | + } |
| 1540 | + |
| 1541 | + if instanceCount != 0 { |
| 1542 | + return fmt.Errorf("EMR Cluster (%s) has (%d) Instances remaining", id, instanceCount) |
| 1543 | + } |
| 1544 | + |
| 1545 | + if err != nil { |
| 1546 | + return fmt.Errorf("error waiting for EMR Cluster (%s) Instances to drain: %s", id, err) |
| 1547 | + } |
| 1548 | + |
| 1549 | + return nil |
| 1550 | + } |
| 1551 | +} |
| 1552 | + |
1474 | 1553 | func testAccCheckAWSEmrClusterNotRecreated(i, j *emr.Cluster) resource.TestCheckFunc {
|
1475 | 1554 | return func(s *terraform.State) error {
|
1476 | 1555 | if aws.StringValue(i.Id) != aws.StringValue(j.Id) {
|
|
0 commit comments