github.com/vtorhonen/terraform@v0.9.0-beta2.0.20170307220345-5d894e4ffda7/builtin/providers/mysql/resource_user_test.go (about) 1 package mysql 2 3 import ( 4 "fmt" 5 "log" 6 "testing" 7 8 "github.com/hashicorp/terraform/helper/resource" 9 "github.com/hashicorp/terraform/terraform" 10 ) 11 12 func TestAccUser(t *testing.T) { 13 resource.Test(t, resource.TestCase{ 14 PreCheck: func() { testAccPreCheck(t) }, 15 Providers: testAccProviders, 16 CheckDestroy: testAccUserCheckDestroy, 17 Steps: []resource.TestStep{ 18 resource.TestStep{ 19 Config: testAccUserConfig_basic, 20 Check: resource.ComposeTestCheckFunc( 21 testAccUserExists("mysql_user.test"), 22 resource.TestCheckResourceAttr("mysql_user.test", "user", "jdoe"), 23 resource.TestCheckResourceAttr("mysql_user.test", "host", "example.com"), 24 resource.TestCheckResourceAttr("mysql_user.test", "password", "password"), 25 ), 26 }, 27 resource.TestStep{ 28 Config: testAccUserConfig_newPass, 29 Check: resource.ComposeTestCheckFunc( 30 testAccUserExists("mysql_user.test"), 31 resource.TestCheckResourceAttr("mysql_user.test", "user", "jdoe"), 32 resource.TestCheckResourceAttr("mysql_user.test", "host", "example.com"), 33 resource.TestCheckResourceAttr("mysql_user.test", "password", "password2"), 34 ), 35 }, 36 }, 37 }) 38 } 39 40 func testAccUserExists(rn string) resource.TestCheckFunc { 41 return func(s *terraform.State) error { 42 rs, ok := s.RootModule().Resources[rn] 43 if !ok { 44 return fmt.Errorf("resource not found: %s", rn) 45 } 46 47 if rs.Primary.ID == "" { 48 return fmt.Errorf("user id not set") 49 } 50 51 conn := testAccProvider.Meta().(*providerConfiguration).Conn 52 stmtSQL := fmt.Sprintf("SELECT count(*) from mysql.user where CONCAT(user, '@', host) = '%s'", rs.Primary.ID) 53 log.Println("Executing statement:", stmtSQL) 54 rows, _, err := conn.Query(stmtSQL) 55 if err != nil { 56 return fmt.Errorf("error reading user: %s", err) 57 } 58 if len(rows) != 1 { 59 return fmt.Errorf("expected 1 row reading user but got %d", len(rows)) 60 } 61 62 return nil 63 } 64 } 65 66 func testAccUserCheckDestroy(s *terraform.State) error { 67 conn := testAccProvider.Meta().(*providerConfiguration).Conn 68 69 for _, rs := range s.RootModule().Resources { 70 if rs.Type != "mysql_user" { 71 continue 72 } 73 74 stmtSQL := fmt.Sprintf("SELECT user from mysql.user where CONCAT(user, '@', host) = '%s'", rs.Primary.ID) 75 log.Println("Executing statement:", stmtSQL) 76 rows, _, err := conn.Query(stmtSQL) 77 if err != nil { 78 return fmt.Errorf("error issuing query: %s", err) 79 } 80 if len(rows) != 0 { 81 return fmt.Errorf("user still exists after destroy") 82 } 83 } 84 return nil 85 } 86 87 const testAccUserConfig_basic = ` 88 resource "mysql_user" "test" { 89 user = "jdoe" 90 host = "example.com" 91 password = "password" 92 } 93 ` 94 95 const testAccUserConfig_newPass = ` 96 resource "mysql_user" "test" { 97 user = "jdoe" 98 host = "example.com" 99 password = "password2" 100 } 101 `