Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fixes a bug and added test sweeper for Appstream Fleets and Stacks #21125

Merged
merged 5 commits into from
Oct 5, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions .changelog/21125.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
```release-note:bug
resource/aws_appstream_fleet: More error validation in waiter
```

```release-note:bug
resource/aws_appstream_stack: More error validation in waiter
```
2 changes: 1 addition & 1 deletion aws/internal/service/appstream/lister/list.go
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
//go:generate go run ../../../generators/listpages/main.go -function=DescribeImageBuilders github.com/aws/aws-sdk-go/service/appstream
//go:generate go run ../../../generators/listpages/main.go -function=DescribeFleets,DescribeImageBuilders,DescribeStacks github.com/aws/aws-sdk-go/service/appstream

package lister
44 changes: 43 additions & 1 deletion aws/internal/service/appstream/lister/list_pages_gen.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

30 changes: 30 additions & 0 deletions aws/internal/service/appstream/waiter/waiter.go
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,16 @@ func StackStateDeleted(ctx context.Context, conn *appstream.AppStream, name stri
outputRaw, err := stateConf.WaitForStateContext(ctx)

if output, ok := outputRaw.(*appstream.Stack); ok {
if errors := output.StackErrors; len(errors) > 0 {
var errs *multierror.Error

for _, err := range errors {
errs = multierror.Append(errs, fmt.Errorf("%s: %s", aws.StringValue(err.ErrorCode), aws.StringValue(err.ErrorMessage)))
}

tfresource.SetLastError(err, errs.ErrorOrNil())
}

return output, err
}

Expand All @@ -54,6 +64,16 @@ func FleetStateRunning(ctx context.Context, conn *appstream.AppStream, name stri
outputRaw, err := stateConf.WaitForStateContext(ctx)

if output, ok := outputRaw.(*appstream.Fleet); ok {
if errors := output.FleetErrors; len(errors) > 0 {
var errs *multierror.Error

for _, err := range errors {
errs = multierror.Append(errs, fmt.Errorf("%s: %s", aws.StringValue(err.ErrorCode), aws.StringValue(err.ErrorMessage)))
}

tfresource.SetLastError(err, errs.ErrorOrNil())
}

return output, err
}

Expand All @@ -72,6 +92,16 @@ func FleetStateStopped(ctx context.Context, conn *appstream.AppStream, name stri
outputRaw, err := stateConf.WaitForStateContext(ctx)

if output, ok := outputRaw.(*appstream.Fleet); ok {
if errors := output.FleetErrors; len(errors) > 0 {
var errs *multierror.Error

for _, err := range errors {
errs = multierror.Append(errs, fmt.Errorf("%s: %s", aws.StringValue(err.ErrorCode), aws.StringValue(err.ErrorMessage)))
}

tfresource.SetLastError(err, errs.ErrorOrNil())
}

return output, err
}

Expand Down
63 changes: 63 additions & 0 deletions aws/resource_aws_appstream_fleet_test.go
Original file line number Diff line number Diff line change
@@ -1,19 +1,82 @@
package aws

import (
"context"
"fmt"
"log"
"testing"

"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/service/appstream"
"github.com/hashicorp/aws-sdk-go-base/tfawserr"
"github.com/hashicorp/go-multierror"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/acctest"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
"github.com/hashicorp/terraform-plugin-sdk/v2/terraform"
"github.com/terraform-providers/terraform-provider-aws/aws/internal/service/appstream/lister"
)

func init() {
RegisterServiceErrorCheckFunc(appstream.EndpointsID, testAccErrorCheckSkipAppStream)
resource.AddTestSweepers("aws_appstream_fleet", &resource.Sweeper{
Name: "aws_appstream_fleet",
F: testSweepAppStreamFleet,
Dependencies: []string{
"aws_vpc",
"aws_subnet",
},
})
}

func testSweepAppStreamFleet(region string) error {
client, err := sharedClientForRegion(region)

if err != nil {
return fmt.Errorf("error getting client: %w", err)
}

conn := client.(*AWSClient).appstreamconn
sweepResources := make([]*testSweepResource, 0)
var errs *multierror.Error

input := &appstream.DescribeFleetsInput{}

err = lister.DescribeFleetsPagesWithContext(context.TODO(), conn, input, func(page *appstream.DescribeFleetsOutput, lastPage bool) bool {
if page == nil {
return !lastPage
}

for _, fleet := range page.Fleets {
if fleet == nil {
continue
}

id := aws.StringValue(fleet.Name)

r := resourceAwsAppStreamImageBuilder()
d := r.Data(nil)
d.SetId(id)

sweepResources = append(sweepResources, NewTestSweepResource(r, d, client))
}

return !lastPage
})

if err != nil {
errs = multierror.Append(errs, fmt.Errorf("error listing AppStream Fleets: %w", err))
}

if err = testSweepResourceOrchestrator(sweepResources); err != nil {
errs = multierror.Append(errs, fmt.Errorf("error sweeping AppStream Fleets for %s: %w", region, err))
}

if testSweepSkipSweepError(err) {
log.Printf("[WARN] Skipping AppStream Fleets sweep for %s: %s", region, err)
return nil // In case we have completed some pages, but had errors
}

return errs.ErrorOrNil()
}

// testAccErrorCheckSkipAppStream skips AppStream tests that have error messages indicating unsupported features
Expand Down
62 changes: 62 additions & 0 deletions aws/resource_aws_appstream_stack_test.go
Original file line number Diff line number Diff line change
@@ -1,17 +1,79 @@
package aws

import (
"context"
"fmt"
"log"
"testing"

"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/service/appstream"
"github.com/hashicorp/aws-sdk-go-base/tfawserr"
"github.com/hashicorp/go-multierror"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/acctest"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
"github.com/hashicorp/terraform-plugin-sdk/v2/terraform"
"github.com/terraform-providers/terraform-provider-aws/aws/internal/service/appstream/lister"
)

func init() {
resource.AddTestSweepers("aws_appstream_stack", &resource.Sweeper{
Name: "aws_appstream_stack",
F: testSweepAppStreamStack,
})
}

func testSweepAppStreamStack(region string) error {
client, err := sharedClientForRegion(region)

if err != nil {
return fmt.Errorf("error getting client: %w", err)
}

conn := client.(*AWSClient).appstreamconn
sweepResources := make([]*testSweepResource, 0)
var errs *multierror.Error

input := &appstream.DescribeStacksInput{}

err = lister.DescribeStacksPagesWithContext(context.TODO(), conn, input, func(page *appstream.DescribeStacksOutput, lastPage bool) bool {
if page == nil {
return !lastPage
}

for _, stack := range page.Stacks {
if stack == nil {
continue
}

id := aws.StringValue(stack.Name)

r := resourceAwsAppStreamImageBuilder()
d := r.Data(nil)
d.SetId(id)

sweepResources = append(sweepResources, NewTestSweepResource(r, d, client))
}

return !lastPage
})

if err != nil {
errs = multierror.Append(errs, fmt.Errorf("error listing AppStream Stacks: %w", err))
}

if err = testSweepResourceOrchestrator(sweepResources); err != nil {
errs = multierror.Append(errs, fmt.Errorf("error sweeping AppStream Stacks for %s: %w", region, err))
}

if testSweepSkipSweepError(err) {
log.Printf("[WARN] Skipping AppStream Stacks sweep for %s: %s", region, err)
return nil // In case we have completed some pages, but had errors
}

return errs.ErrorOrNil()
}

func TestAccAwsAppStreamStack_basic(t *testing.T) {
var stackOutput appstream.Stack
resourceName := "aws_appstream_stack.test"
Expand Down