github.com/darmach/terratest@v0.34.8-0.20210517103231-80931f95e3ff/modules/aws/rds_test.go (about)

     1  package aws
     2  
     3  import (
     4  	"fmt"
     5  	"testing"
     6  
     7  	"github.com/stretchr/testify/assert"
     8  )
     9  
    10  func TestGetRecommendedRdsInstanceTypeHappyPath(t *testing.T) {
    11  	type TestingScenerios struct {
    12  		name                  string
    13  		region                string
    14  		databaseEngine        string
    15  		databaseEngineVersion string
    16  		instanceTypes         []string
    17  		expected              string
    18  	}
    19  
    20  	testingScenerios := []TestingScenerios{
    21  		{
    22  			name:                  "US region, mysql, first offering available",
    23  			region:                "us-east-2",
    24  			databaseEngine:        "mysql",
    25  			databaseEngineVersion: "8.0.21",
    26  			instanceTypes:         []string{"db.t2.micro", "db.t3.micro"},
    27  			expected:              "db.t2.micro",
    28  		},
    29  		{
    30  			name:                  "EU region, postgres, 2nd offering available based on region",
    31  			region:                "eu-north-1",
    32  			databaseEngine:        "postgres",
    33  			databaseEngineVersion: "13.1",
    34  			instanceTypes:         []string{"db.t2.micro", "db.m5.large"},
    35  			expected:              "db.m5.large",
    36  		},
    37  		{
    38  			name:                  "US region, oracle-ee, 2nd offering available based on db type",
    39  			region:                "us-west-2",
    40  			databaseEngine:        "oracle-ee",
    41  			databaseEngineVersion: "19.0.0.0.ru-2021-01.rur-2021-01.r1",
    42  			instanceTypes:         []string{"db.m5d.xlarge", "db.m5.large"},
    43  			expected:              "db.m5.large",
    44  		},
    45  		{
    46  			name:                  "US region, oracle-ee, 2nd offering available based on db engine version",
    47  			region:                "us-west-2",
    48  			databaseEngine:        "oracle-ee",
    49  			databaseEngineVersion: "19.0.0.0.ru-2021-01.rur-2021-01.r1",
    50  			instanceTypes:         []string{"db.t3.micro", "db.t3.small"},
    51  			expected:              "db.t3.small",
    52  		},
    53  	}
    54  
    55  	for _, scenerio := range testingScenerios {
    56  		scenerio := scenerio
    57  
    58  		t.Run(scenerio.name, func(t *testing.T) {
    59  			t.Parallel()
    60  
    61  			actual, err := GetRecommendedRdsInstanceTypeE(t, scenerio.region, scenerio.databaseEngine, scenerio.databaseEngineVersion, scenerio.instanceTypes)
    62  			assert.NoError(t, err)
    63  			assert.Equal(t, scenerio.expected, actual)
    64  		})
    65  	}
    66  }
    67  
    68  func TestGetRecommendedRdsInstanceTypeErrors(t *testing.T) {
    69  	type TestingScenerios struct {
    70  		name                  string
    71  		region                string
    72  		databaseEngine        string
    73  		databaseEngineVersion string
    74  		instanceTypes         []string
    75  	}
    76  
    77  	testingScenerios := []TestingScenerios{
    78  		{
    79  			name:                  "All empty",
    80  			region:                "",
    81  			databaseEngine:        "",
    82  			databaseEngineVersion: "",
    83  			instanceTypes:         nil,
    84  		},
    85  		{
    86  			name:                  "No engine, version, or instance type",
    87  			region:                "us-east-2",
    88  			databaseEngine:        "",
    89  			databaseEngineVersion: "",
    90  			instanceTypes:         nil,
    91  		},
    92  		{
    93  			name:                  "No instance types or version",
    94  			region:                "us-east-2",
    95  			databaseEngine:        "mysql",
    96  			databaseEngineVersion: "",
    97  			instanceTypes:         nil,
    98  		},
    99  		{
   100  			name:                  "No engine version",
   101  			region:                "us-east-2",
   102  			databaseEngine:        "mysql",
   103  			databaseEngineVersion: "",
   104  			instanceTypes:         []string{"db.t3.small"},
   105  		},
   106  		{
   107  			name:                  "Invalid instance types",
   108  			region:                "us-east-2",
   109  			databaseEngine:        "mysql",
   110  			databaseEngineVersion: "8.0.21",
   111  			instanceTypes:         []string{"garbage"},
   112  		},
   113  		{
   114  			name:                  "Region has no instance type available",
   115  			region:                "eu-north-1",
   116  			databaseEngine:        "mysql",
   117  			databaseEngineVersion: "8.0.21",
   118  			instanceTypes:         []string{"db.t2.micro"},
   119  		},
   120  		{
   121  			name:                  "No instance type available for engine",
   122  			region:                "us-east-1",
   123  			databaseEngine:        "oracle-ee",
   124  			databaseEngineVersion: "19.0.0.0.ru-2021-01.rur-2021-01.r1",
   125  			instanceTypes:         []string{"db.r5d.large"},
   126  		},
   127  		{
   128  			name:                  "No instance type available for engine version",
   129  			region:                "us-east-1",
   130  			databaseEngine:        "oracle-ee",
   131  			databaseEngineVersion: "19.0.0.0.ru-2021-01.rur-2021-01.r1",
   132  			instanceTypes:         []string{"db.t3.micro"},
   133  		},
   134  	}
   135  
   136  	for _, scenerio := range testingScenerios {
   137  		scenerio := scenerio
   138  
   139  		t.Run(scenerio.name, func(t *testing.T) {
   140  			t.Parallel()
   141  
   142  			_, err := GetRecommendedRdsInstanceTypeE(t, scenerio.region, scenerio.databaseEngine, scenerio.databaseEngineVersion, scenerio.instanceTypes)
   143  			fmt.Println(err)
   144  			assert.EqualError(t, err, NoRdsInstanceTypeError{InstanceTypeOptions: scenerio.instanceTypes, DatabaseEngine: scenerio.databaseEngine, DatabaseEngineVersion: scenerio.databaseEngineVersion}.Error())
   145  		})
   146  	}
   147  }