From 1b75adb24526c56778e83e8c5feab23be01fd6db Mon Sep 17 00:00:00 2001 From: winebarrel Date: Wed, 19 Feb 2020 17:49:10 +0900 Subject: [PATCH] Add mysql_tables data source test --- mysql/data_source_tables_test.go | 79 ++++++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 mysql/data_source_tables_test.go diff --git a/mysql/data_source_tables_test.go b/mysql/data_source_tables_test.go new file mode 100644 index 000000000..02f1f97fe --- /dev/null +++ b/mysql/data_source_tables_test.go @@ -0,0 +1,79 @@ +package mysql + +import ( + "fmt" + "strconv" + "testing" + + "github.com/hashicorp/terraform-plugin-sdk/helper/resource" + "github.com/hashicorp/terraform-plugin-sdk/terraform" +) + +func TestAccDataSourceTables(t *testing.T) { + resource.Test(t, resource.TestCase{ + PreCheck: func() { testAccPreCheck(t) }, + Providers: testAccProviders, + Steps: []resource.TestStep{ + { + Config: testAccTablesConfig_basic("mysql", "%"), + Check: resource.ComposeTestCheckFunc( + resource.TestCheckResourceAttr("data.mysql_tables.test", "database", "mysql"), + resource.TestCheckResourceAttr("data.mysql_tables.test", "pattern", "%"), + testAccTablesCount("data.mysql_tables.test", "tables.#", func(rn string, table_count int) error { + if table_count < 1 { + return fmt.Errorf("%s: tables not found", rn) + } + + return nil + }), + ), + }, + { + Config: testAccTablesConfig_basic("mysql", "__table_does_not_exist__"), + Check: resource.ComposeTestCheckFunc( + resource.TestCheckResourceAttr("data.mysql_tables.test", "database", "mysql"), + resource.TestCheckResourceAttr("data.mysql_tables.test", "pattern", "__table_does_not_exist__"), + testAccTablesCount("data.mysql_tables.test", "tables.#", func(rn string, table_count int) error { + if table_count > 0 { + return fmt.Errorf("%s: unexpected table found", rn) + } + + return nil + }), + ), + }, + }, + }) +} + +func testAccTablesCount(rn string, key string, check func(string, int) error) resource.TestCheckFunc { + return func(s *terraform.State) error { + rs, ok := s.RootModule().Resources[rn] + + if !ok { + return fmt.Errorf("resource not found: %s", rn) + } + + value, ok := rs.Primary.Attributes[key] + + if !ok { + return fmt.Errorf("%s: attribute '%s' not found", rn, key) + } + + table_count, err := strconv.Atoi(value) + + if err != nil { + return err + } + + return check(rn, table_count) + } +} + +func testAccTablesConfig_basic(database string, pattern string) string { + return fmt.Sprintf(` +data "mysql_tables" "test" { + database = "%s" + pattern = "%s" +}`, database, pattern) +}