Skip to content

Commit a2644bc

Browse files
committed
Init event trigger tests
1 parent 9d17c5e commit a2644bc

File tree

1 file changed

+152
-0
lines changed

1 file changed

+152
-0
lines changed
Lines changed: 152 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,152 @@
1+
package postgresql
2+
3+
import (
4+
"database/sql"
5+
"fmt"
6+
"testing"
7+
8+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
9+
"github.com/hashicorp/terraform-plugin-sdk/v2/terraform"
10+
)
11+
12+
func TestAccPostgresqlEventTrigger_Basic(t *testing.T) {
13+
// Create the database outside of resource.Test
14+
// because we need to create test schemas.
15+
dbSuffix, teardown := setupTestDatabase(t, true, true)
16+
defer teardown()
17+
18+
schemas := []string{"test_schema1"}
19+
createTestSchemas(t, dbSuffix, schemas, "")
20+
21+
dbName, _ := getTestDBNames(dbSuffix)
22+
23+
testAccPostgresqlDataSourceTablesEventTriggerConfig := fmt.Sprintf(testAccPostgreSQLEventTriggerConfig, dbName, schemas[0])
24+
25+
resource.Test(t, resource.TestCase{
26+
PreCheck: func() { testAccPreCheck(t) },
27+
Providers: testAccProviders,
28+
CheckDestroy: testAccCheckPostgresqlEventTriggerDestroy,
29+
Steps: []resource.TestStep{
30+
{
31+
Config: testAccPostgresqlDataSourceTablesEventTriggerConfig,
32+
Check: resource.ComposeTestCheckFunc(
33+
testAccCheckPostgresqlEventTriggerExists("postgresql_event_trigger.event_trigger", dbName),
34+
),
35+
},
36+
},
37+
})
38+
}
39+
40+
func testAccCheckPostgresqlEventTriggerExists(n string, database string) resource.TestCheckFunc {
41+
return func(s *terraform.State) error {
42+
rs, ok := s.RootModule().Resources[n]
43+
if !ok {
44+
return fmt.Errorf("Resource not found: %s", n)
45+
}
46+
47+
if rs.Primary.ID == "" {
48+
return fmt.Errorf("No ID is set")
49+
}
50+
51+
client := testAccProvider.Meta().(*Client)
52+
txn, err := startTransaction(client, database)
53+
if err != nil {
54+
return err
55+
}
56+
defer deferredRollback(txn)
57+
58+
exists, err := checkEventTriggerExists(txn, rs.Primary.ID)
59+
60+
if err != nil {
61+
return fmt.Errorf("Error checking event trigger %s", err)
62+
}
63+
64+
if !exists {
65+
return fmt.Errorf("Event trigger not found")
66+
}
67+
68+
return nil
69+
}
70+
}
71+
72+
func testAccCheckPostgresqlEventTriggerDestroy(s *terraform.State) error {
73+
client := testAccProvider.Meta().(*Client)
74+
75+
for _, rs := range s.RootModule().Resources {
76+
if rs.Type != "postgresql_event_trigger" {
77+
continue
78+
}
79+
80+
var database string
81+
for k, v := range rs.Primary.Attributes {
82+
if k == "database" {
83+
database = v
84+
}
85+
}
86+
87+
txn, err := startTransaction(client, database)
88+
if err != nil {
89+
return err
90+
}
91+
defer deferredRollback(txn)
92+
93+
exists, err := checkEventTriggerExists(txn, rs.Primary.ID)
94+
95+
if err != nil {
96+
return fmt.Errorf("Error checking event trigger %s", err)
97+
}
98+
99+
if exists {
100+
return fmt.Errorf("Event trigger still exists after destroy")
101+
}
102+
}
103+
104+
return nil
105+
}
106+
107+
func checkEventTriggerExists(txn *sql.Tx, signature string) (bool, error) {
108+
var _rez string
109+
err := txn.QueryRow("SELECT oid FROM pg_catalog.pg_event_trigger WHERE evtname=$1", signature).Scan(&_rez)
110+
switch {
111+
case err == sql.ErrNoRows:
112+
return false, nil
113+
case err != nil:
114+
return false, fmt.Errorf("Error reading info about event trigger: %s", err)
115+
}
116+
117+
return true, nil
118+
}
119+
120+
var testAccPostgreSQLEventTriggerConfig = `
121+
resource "postgresql_function" "function" {
122+
name = "test_function"
123+
database = "%[1]s"
124+
schema = "%[2]s"
125+
126+
returns = "event_trigger"
127+
language = "plpgsql"
128+
body = <<-EOF
129+
BEGIN
130+
RAISE EXCEPTION 'command % is disabled', tg_tag;
131+
END;
132+
EOF
133+
}
134+
135+
resource "postgresql_event_trigger" "event_trigger" {
136+
name = "event_trigger_test"
137+
database = "%[1]s"
138+
schema = "%[2]s"
139+
function = postgresql_function.function.name
140+
on = "ddl_command_end"
141+
owner = "postgres"
142+
enabled = "enable"
143+
144+
filter {
145+
variable = "TAG"
146+
values = [
147+
"CREATE TABLE",
148+
"ALTER TABLE",
149+
]
150+
}
151+
}
152+
`

0 commit comments

Comments
 (0)