github.com/leeprovoost/terraform@v0.6.10-0.20160119085442-96f3f76118e7/builtin/providers/postgresql/resource_postgresql_database_test.go (about) 1 package postgresql 2 3 import ( 4 "database/sql" 5 "fmt" 6 "testing" 7 8 "github.com/hashicorp/terraform/helper/resource" 9 "github.com/hashicorp/terraform/terraform" 10 ) 11 12 func TestAccPostgresqlDatabase_Basic(t *testing.T) { 13 14 resource.Test(t, resource.TestCase{ 15 PreCheck: func() { testAccPreCheck(t) }, 16 Providers: testAccProviders, 17 CheckDestroy: testAccCheckPostgresqlDatabaseDestroy, 18 Steps: []resource.TestStep{ 19 resource.TestStep{ 20 Config: testAccPostgresqlDatabaseConfig, 21 Check: resource.ComposeTestCheckFunc( 22 testAccCheckPostgresqlDatabaseExists("postgresql_database.mydb", "myrole"), 23 resource.TestCheckResourceAttr( 24 "postgresql_database.mydb", "name", "mydb"), 25 resource.TestCheckResourceAttr( 26 "postgresql_database.mydb", "owner", "myrole"), 27 ), 28 }, 29 }, 30 }) 31 } 32 33 func TestAccPostgresqlDatabase_DefaultOwner(t *testing.T) { 34 35 resource.Test(t, resource.TestCase{ 36 PreCheck: func() { testAccPreCheck(t) }, 37 Providers: testAccProviders, 38 CheckDestroy: testAccCheckPostgresqlDatabaseDestroy, 39 Steps: []resource.TestStep{ 40 resource.TestStep{ 41 Config: testAccPostgresqlDatabaseConfig, 42 Check: resource.ComposeTestCheckFunc( 43 testAccCheckPostgresqlDatabaseExists("postgresql_database.mydb_default_owner", ""), 44 resource.TestCheckResourceAttr( 45 "postgresql_database.mydb_default_owner", "name", "mydb_default_owner"), 46 ), 47 }, 48 }, 49 }) 50 } 51 52 func testAccCheckPostgresqlDatabaseDestroy(s *terraform.State) error { 53 client := testAccProvider.Meta().(*Client) 54 55 for _, rs := range s.RootModule().Resources { 56 if rs.Type != "postgresql_database" { 57 continue 58 } 59 60 exists, err := checkDatabaseExists(client, rs.Primary.ID) 61 62 if err != nil { 63 return fmt.Errorf("Error checking db %s", err) 64 } 65 66 if exists { 67 return fmt.Errorf("Db still exists after destroy") 68 } 69 } 70 71 return nil 72 } 73 74 func testAccCheckPostgresqlDatabaseExists(n string, owner string) resource.TestCheckFunc { 75 return func(s *terraform.State) error { 76 rs, ok := s.RootModule().Resources[n] 77 if !ok { 78 return fmt.Errorf("Resource not found: %s", n) 79 } 80 81 if rs.Primary.ID == "" { 82 return fmt.Errorf("No ID is set") 83 } 84 85 actualOwner := rs.Primary.Attributes["owner"] 86 if actualOwner != owner { 87 return fmt.Errorf("Wrong owner for db expected %s got %s", owner, actualOwner) 88 } 89 90 client := testAccProvider.Meta().(*Client) 91 exists, err := checkDatabaseExists(client, rs.Primary.ID) 92 93 if err != nil { 94 return fmt.Errorf("Error checking db %s", err) 95 } 96 97 if !exists { 98 return fmt.Errorf("Db not found") 99 } 100 101 return nil 102 } 103 } 104 105 func checkDatabaseExists(client *Client, dbName string) (bool, error) { 106 conn, err := client.Connect() 107 if err != nil { 108 return false, err 109 } 110 defer conn.Close() 111 112 var _rez int 113 err = conn.QueryRow("SELECT 1 from pg_database d WHERE datname=$1", dbName).Scan(&_rez) 114 switch { 115 case err == sql.ErrNoRows: 116 return false, nil 117 case err != nil: 118 return false, fmt.Errorf("Error reading info about database: %s", err) 119 default: 120 return true, nil 121 } 122 } 123 124 var testAccPostgresqlDatabaseConfig = ` 125 resource "postgresql_role" "myrole" { 126 name = "myrole" 127 login = true 128 } 129 130 resource "postgresql_database" "mydb" { 131 name = "mydb" 132 owner = "${postgresql_role.myrole.name}" 133 } 134 135 resource "postgresql_database" "mydb2" { 136 name = "mydb2" 137 owner = "${postgresql_role.myrole.name}" 138 } 139 140 resource "postgresql_database" "mydb_default_owner" { 141 name = "mydb_default_owner" 142 } 143 144 `