github.com/swisspost/terratest@v0.0.0-20230214120104-7ec6de2e1ae0/test/terraform_aws_ssm_example_test.go (about)

     1  package test
     2  
     3  import (
     4  	"testing"
     5  	"time"
     6  
     7  	"github.com/gruntwork-io/terratest/modules/aws"
     8  	"github.com/gruntwork-io/terratest/modules/terraform"
     9  	"github.com/stretchr/testify/require"
    10  )
    11  
    12  func TestTerraformAwsSsmExample(t *testing.T) {
    13  	t.Parallel()
    14  	region := aws.GetRandomStableRegion(t, nil, nil)
    15  
    16  	// Some AWS regions are missing certain instance types, so pick an available type based on the region we picked
    17  	instanceType := aws.GetRecommendedInstanceType(t, region, []string{"t2.micro", "t3.micro"})
    18  
    19  	terraformOptions := terraform.WithDefaultRetryableErrors(t, &terraform.Options{
    20  		TerraformDir: "../examples/terraform-aws-ssm-example",
    21  		Vars: map[string]interface{}{
    22  			"region":        region,
    23  			"instance_type": instanceType,
    24  		},
    25  	})
    26  	defer terraform.Destroy(t, terraformOptions)
    27  
    28  	terraform.InitAndApply(t, terraformOptions)
    29  
    30  	instanceID := terraform.Output(t, terraformOptions, "instance_id")
    31  	timeout := 3 * time.Minute
    32  
    33  	aws.WaitForSsmInstance(t, region, instanceID, timeout)
    34  
    35  	result := aws.CheckSsmCommand(t, region, instanceID, "echo Hello, World", timeout)
    36  	require.Equal(t, result.Stdout, "Hello, World\n")
    37  	require.Equal(t, result.Stderr, "")
    38  	require.Equal(t, int64(0), result.ExitCode)
    39  
    40  	result, err := aws.CheckSsmCommandE(t, region, instanceID, "cat /wrong/file", timeout)
    41  	require.Error(t, err)
    42  	require.Equal(t, "Failed", err.Error())
    43  	require.Equal(t, "cat: /wrong/file: No such file or directory\nfailed to run commands: exit status 1", result.Stderr)
    44  	require.Equal(t, "", result.Stdout)
    45  	require.Equal(t, int64(1), result.ExitCode)
    46  }