24
24
PG_TRGM_EXTENSION_STATEMENT = "SELECT word_similarity('word', 'two words');"
25
25
PLPYTHON3U_EXTENSION_STATEMENT = 'CREATE FUNCTION plpython_test() RETURNS varchar[] AS $$ return "hello" $$ LANGUAGE plpython3u;'
26
26
UNACCENT_EXTENSION_STATEMENT = "SELECT ts_lexize('unaccent','Hôtel');"
27
+ BLOOM_EXTENSION_STATEMENT = (
28
+ "CREATE TABLE tbloom_test (i int);CREATE INDEX btreeidx ON tbloom_test USING bloom (i);"
29
+ )
30
+ BTREEGIN_EXTENSION_STATEMENT = "CREATE TABLE btree_gin_test (a int4);CREATE INDEX btreeginidx ON btree_gin_test USING GIN (a);"
31
+ BTREEGIST_EXTENSION_STATEMENT = "CREATE TABLE btree_gist_test (a int4);CREATE INDEX btreegistidx ON btree_gist_test USING GIST (a);"
32
+ CUBE_EXTENSION_STATEMENT = "SELECT cube_inter('(0,-1),(1,1)', '(-2),(2)');"
33
+ DICTINT_EXTENSION_STATEMENT = "SELECT ts_lexize('intdict', '12345678');"
34
+ DICTXSYN_EXTENSION_STATEMENT = "SELECT ts_lexize('xsyn', 'word');"
35
+ EARTHDISTANCE_EXTENSION_STATEMENT = "SELECT earth_distance(ll_to_earth(-81.3927381, 30.2918842),ll_to_earth(-87.6473133, 41.8853881));"
36
+ FUZZYSTRMATCH_EXTENSION_STATEMENT = "SELECT soundex('hello world!');"
37
+ INTARRAY_EXTENSION_STATEMENT = "CREATE TABLE intarray_test (mid INT PRIMARY KEY, sections INT[]);SELECT intarray_test.mid FROM intarray_test WHERE intarray_test.sections @> '{1,2}';"
38
+ ISN_EXTENSION_STATEMENT = "SELECT isbn('978-0-393-04002-9');"
39
+ LO_EXTENSION_STATEMENT = "CREATE TABLE lo_test (value lo);"
40
+ LTREE_EXTENSION_STATEMENT = "CREATE TABLE ltree_test (path ltree);"
41
+ OLD_SNAPSHOT_EXTENSION_STATEMENT = "SELECT * from pg_old_snapshot_time_mapping();"
42
+ PG_FREESPACEMAP_EXTENSION_STATEMENT = (
43
+ "CREATE TABLE pg_freespacemap_test (i int);SELECT * FROM pg_freespace('pg_freespacemap_test');"
44
+ )
45
+ PGROWLOCKS_EXTENSION_STATEMENT = (
46
+ "CREATE TABLE pgrowlocks_test (i int);SELECT * FROM pgrowlocks('pgrowlocks_test');"
47
+ )
48
+ PGSTATTUPLE_EXTENSION_STATEMENT = "SELECT * FROM pgstattuple('pg_catalog.pg_proc');"
49
+ PG_VISIBILITY_EXTENSION_STATEMENT = "CREATE TABLE pg_visibility_test (i int);SELECT * FROM pg_visibility('pg_visibility_test'::regclass);"
50
+ SEG_EXTENSION_STATEMENT = "SELECT '10(+-)1'::seg as seg;"
51
+ TABLEFUNC_EXTENSION_STATEMENT = "SELECT * FROM normal_rand(1000, 5, 3);"
52
+ TCN_EXTENSION_STATEMENT = "CREATE TABLE tcn_test (i int);CREATE TRIGGER tcn_test_idx AFTER INSERT OR UPDATE OR DELETE ON tcn_test FOR EACH ROW EXECUTE FUNCTION TRIGGERED_CHANGE_NOTIFICATION();"
53
+ TSM_SYSTEM_ROWS_EXTENSION_STATEMENT = "CREATE TABLE tsm_system_rows_test (i int);SELECT * FROM tsm_system_rows_test TABLESAMPLE SYSTEM_ROWS(100);"
54
+ TSM_SYSTEM_TIME_EXTENSION_STATEMENT = "CREATE TABLE tsm_system_time_test (i int);SELECT * FROM tsm_system_time_test TABLESAMPLE SYSTEM_TIME(1000);"
55
+ UUID_OSSP_EXTENSION_STATEMENT = "SELECT uuid_nil();"
27
56
28
57
29
58
@pytest .mark .abort_on_fail
@@ -40,72 +69,72 @@ async def test_plugins(ops_test: OpsTest) -> None:
40
69
)
41
70
await ops_test .model .wait_for_idle (apps = [DATABASE_APP_NAME ], status = "active" , timeout = 1000 )
42
71
72
+ sql_tests = {
73
+ "plugin_citext_enable" : CITEXT_EXTENSION_STATEMENT ,
74
+ "plugin_debversion_enable" : DEBVERSION_EXTENSION_STATEMENT ,
75
+ "plugin_hstore_enable" : HSTORE_EXTENSION_STATEMENT ,
76
+ "plugin_pg_trgm_enable" : PG_TRGM_EXTENSION_STATEMENT ,
77
+ "plugin_plpython3u_enable" : PLPYTHON3U_EXTENSION_STATEMENT ,
78
+ "plugin_unaccent_enable" : UNACCENT_EXTENSION_STATEMENT ,
79
+ "plugin_bloom_enable" : BLOOM_EXTENSION_STATEMENT ,
80
+ "plugin_btree_gin_enable" : BTREEGIN_EXTENSION_STATEMENT ,
81
+ "plugin_btree_gist_enable" : BTREEGIST_EXTENSION_STATEMENT ,
82
+ "plugin_cube_enable" : CUBE_EXTENSION_STATEMENT ,
83
+ "plugin_dict_int_enable" : DICTINT_EXTENSION_STATEMENT ,
84
+ "plugin_dict_xsyn_enable" : DICTXSYN_EXTENSION_STATEMENT ,
85
+ "plugin_earthdistance_enable" : EARTHDISTANCE_EXTENSION_STATEMENT ,
86
+ "plugin_fuzzystrmatch_enable" : FUZZYSTRMATCH_EXTENSION_STATEMENT ,
87
+ "plugin_intarray_enable" : INTARRAY_EXTENSION_STATEMENT ,
88
+ "plugin_isn_enable" : ISN_EXTENSION_STATEMENT ,
89
+ "plugin_lo_enable" : LO_EXTENSION_STATEMENT ,
90
+ "plugin_ltree_enable" : LTREE_EXTENSION_STATEMENT ,
91
+ "plugin_old_snapshot_enable" : OLD_SNAPSHOT_EXTENSION_STATEMENT ,
92
+ "plugin_pg_freespacemap_enable" : PG_FREESPACEMAP_EXTENSION_STATEMENT ,
93
+ "plugin_pgrowlocks_enable" : PGROWLOCKS_EXTENSION_STATEMENT ,
94
+ "plugin_pgstattuple_enable" : PGSTATTUPLE_EXTENSION_STATEMENT ,
95
+ "plugin_pg_visibility_enable" : PG_VISIBILITY_EXTENSION_STATEMENT ,
96
+ "plugin_seg_enable" : SEG_EXTENSION_STATEMENT ,
97
+ "plugin_tablefunc_enable" : TABLEFUNC_EXTENSION_STATEMENT ,
98
+ "plugin_tcn_enable" : TCN_EXTENSION_STATEMENT ,
99
+ "plugin_tsm_system_rows_enable" : TSM_SYSTEM_ROWS_EXTENSION_STATEMENT ,
100
+ "plugin_tsm_system_time_enable" : TSM_SYSTEM_TIME_EXTENSION_STATEMENT ,
101
+ "plugin_uuid_ossp_enable" : UUID_OSSP_EXTENSION_STATEMENT ,
102
+ }
103
+
104
+ def enable_disable_config (enabled : False ):
105
+ config = {}
106
+ for plugin in sql_tests .keys ():
107
+ config [plugin ] = f"{ enabled } "
108
+ return config
109
+
43
110
# Check that the available plugins are disabled.
44
111
primary = await get_primary (ops_test , f"{ DATABASE_APP_NAME } /0" )
45
112
password = await get_password (ops_test , primary )
46
113
address = get_unit_address (ops_test , primary )
114
+
115
+ config = enable_disable_config (False )
116
+ await ops_test .model .applications [DATABASE_APP_NAME ].set_config (config )
117
+ await ops_test .model .wait_for_idle (apps = [DATABASE_APP_NAME ], status = "active" )
118
+
47
119
logger .info ("checking that the plugins are disabled" )
48
120
with db_connect (host = address , password = password ) as connection :
49
121
connection .autocommit = True
50
-
51
- # Test citext extension disabled.
52
- with pytest .raises (psycopg2 .Error ):
53
- connection .cursor ().execute (CITEXT_EXTENSION_STATEMENT )
54
-
55
- # Test debversion extension disabled.
56
- with pytest .raises (psycopg2 .Error ):
57
- connection .cursor ().execute (DEBVERSION_EXTENSION_STATEMENT )
58
-
59
- # Test hstore extension disabled.
60
- with pytest .raises (psycopg2 .Error ):
61
- connection .cursor ().execute (HSTORE_EXTENSION_STATEMENT )
62
-
63
- # Test pg_trgm extension disabled.
64
- with pytest .raises (psycopg2 .Error ):
65
- connection .cursor ().execute (PG_TRGM_EXTENSION_STATEMENT )
66
-
67
- # Test PL/Python extension disabled.
68
- with pytest .raises (psycopg2 .Error ):
69
- connection .cursor ().execute (PLPYTHON3U_EXTENSION_STATEMENT )
70
-
71
- # Test unaccent extension disabled.
72
- with pytest .raises (psycopg2 .Error ):
73
- connection .cursor ().execute (UNACCENT_EXTENSION_STATEMENT )
122
+ for query in sql_tests .values ():
123
+ with pytest .raises (psycopg2 .Error ):
124
+ connection .cursor ().execute (query )
74
125
connection .close ()
75
126
76
127
# Enable the plugins.
77
128
logger .info ("enabling the plugins" )
78
- config = {
79
- "plugin_citext_enable" : "True" ,
80
- "plugin_debversion_enable" : "True" ,
81
- "plugin_hstore_enable" : "True" ,
82
- "plugin_pg_trgm_enable" : "True" ,
83
- "plugin_plpython3u_enable" : "True" ,
84
- "plugin_unaccent_enable" : "True" ,
85
- }
129
+
130
+ config = enable_disable_config (True )
86
131
await ops_test .model .applications [DATABASE_APP_NAME ].set_config (config )
87
132
await ops_test .model .wait_for_idle (apps = [DATABASE_APP_NAME ], status = "active" )
88
133
89
134
# Check that the available plugins are enabled.
90
135
logger .info ("checking that the plugins are enabled" )
91
136
with db_connect (host = address , password = password ) as connection :
92
137
connection .autocommit = True
93
-
94
- # Test citext extension enabled.
95
- connection .cursor ().execute (CITEXT_EXTENSION_STATEMENT )
96
-
97
- # Test debversion extension enabled.
98
- connection .cursor ().execute (DEBVERSION_EXTENSION_STATEMENT )
99
-
100
- # Test hstore extension enabled.
101
- connection .cursor ().execute (HSTORE_EXTENSION_STATEMENT )
102
-
103
- # Test pg_trgm extension enabled.
104
- connection .cursor ().execute (PG_TRGM_EXTENSION_STATEMENT )
105
-
106
- # Test PL/Python extension enabled.
107
- connection .cursor ().execute (PLPYTHON3U_EXTENSION_STATEMENT )
108
-
109
- # Test unaccent extension enabled.
110
- connection .cursor ().execute (UNACCENT_EXTENSION_STATEMENT )
138
+ for query in sql_tests .values ():
139
+ connection .cursor ().execute (query )
111
140
connection .close ()
0 commit comments