forked from petoju/terraform-provider-mysql
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathresource_ti_resource_group_test.go
127 lines (111 loc) · 3.77 KB
/
resource_ti_resource_group_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
package mysql
import (
"context"
"database/sql"
"errors"
"fmt"
"log"
"testing"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
"github.com/hashicorp/terraform-plugin-sdk/v2/terraform"
)
func TestTIDBResourceGroup_basic(t *testing.T) {
varName := "rg100"
varResourceUnits := 100
varNewResourceUnits := 1000
varQueryLimit := ""
varNewQueryLimit := "EXEC_ELAPSED='15s', ACTION=COOLDOWN, WATCH=SIMILAR DURATION='10m0s'"
varBurstable := true
varPriority := "low"
resourceName := "mysql_ti_resource_group.test"
resource.Test(t, resource.TestCase{
PreCheck: func() {
testAccPreCheck(t)
testAccPreCheckSkipNotTiDB(t)
testAccPreCheckSkipNotTiDBVersionMin(t, ResourceGroupTiDBMinVersion)
},
ProviderFactories: testAccProviderFactories,
CheckDestroy: testAccResourceGroupCheckDestroy(varName),
Steps: []resource.TestStep{
{
Config: testAccResourceGroupConfigBasic(varName, varResourceUnits, varQueryLimit),
Check: resource.ComposeTestCheckFunc(
testAccResourceGroupExists(varName),
resource.TestCheckResourceAttr(resourceName, "name", varName),
resource.TestCheckResourceAttr(resourceName, "query_limit", varQueryLimit),
),
},
{
Config: testAccResourceGroupConfigFull(varName, varNewResourceUnits, varNewQueryLimit, varBurstable, varPriority),
Check: resource.ComposeTestCheckFunc(
testAccResourceGroupExists(varName),
resource.TestCheckResourceAttr(resourceName, "name", varName),
resource.TestCheckResourceAttr(resourceName, "query_limit", varNewQueryLimit),
resource.TestCheckResourceAttr(resourceName, "burstable", fmt.Sprintf("%t", varBurstable)),
resource.TestCheckResourceAttr(resourceName, "priority", varPriority),
),
},
},
})
}
func testAccResourceGroupExists(varName string) resource.TestCheckFunc {
return func(s *terraform.State) error {
rg, err := getResourceGroup(varName)
if err != nil {
return err
}
if rg == nil {
return fmt.Errorf("resource group (%s) does not exist", varName)
}
return nil
}
}
func NewResourceGroup(name string) *ResourceGroup {
return &ResourceGroup{
Name: name,
ResourceUnits: 2000,
Priority: "medium",
Burstable: false,
QueryLimit: "EXEC_ELAPSED='15s', ACTION=COOLDOWN, WATCH=SIMILAR DURATION='10m0s'",
}
}
func getResourceGroup(name string) (*ResourceGroup, error) {
rg := NewResourceGroup(name)
ctx := context.Background()
db, err := connectToMySQL(ctx, testAccProvider.Meta().(*MySQLConfiguration))
if err != nil {
return nil, err
}
query := fmt.Sprintf(`SELECT NAME, RU_PER_SEC, LOWER(PRIORITY), BURSTABLE = 'YES' as BURSTABLE, IFNULL(QUERY_LIMIT, "") FROM information_schema.resource_groups WHERE NAME="%s";`, rg.Name)
log.Printf("[DEBUG] SQL: %s\n", query)
err = db.QueryRow(query).Scan(&rg.Name, &rg.ResourceUnits, &rg.Priority, &rg.Burstable, &rg.QueryLimit)
if err != nil && !errors.Is(err, sql.ErrNoRows) {
return nil, fmt.Errorf("error during get resource group (%s): %s", rg.Name, err)
}
return rg, nil
}
func testAccResourceGroupCheckDestroy(varName string) resource.TestCheckFunc {
return func(s *terraform.State) error {
return nil
}
}
func testAccResourceGroupConfigBasic(varName string, varResourceUnits int, varQueryLimit string) string {
return fmt.Sprintf(`
resource "mysql_ti_resource_group" "test" {
name = "%s"
resource_units = %d
query_limit = "%s"
}
`, varName, varResourceUnits, varQueryLimit)
}
func testAccResourceGroupConfigFull(varName string, varResourceUnits int, varQueryLimit string, varBurstable bool, varPriority string) string {
return fmt.Sprintf(`
resource "mysql_ti_resource_group" "test" {
name = "%s"
resource_units = %d
priority = "%s"
burstable = %t
query_limit = "%s"
}
`, varName, varResourceUnits, varPriority, varBurstable, varQueryLimit)
}