@oliphaunt/extension-pgtap-linux-arm64-gnu 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +6 -0
- package/THIRD_PARTY_NOTICES.md +20 -0
- package/extension-contract.json +31 -0
- package/package.json +49 -0
- package/runtime/share/licenses/pgtap/README.md +153 -0
- package/runtime/share/postgresql/extension/pgtap--0.90.0--0.91.0.sql +29 -0
- package/runtime/share/postgresql/extension/pgtap--0.91.0--0.92.0.sql +1650 -0
- package/runtime/share/postgresql/extension/pgtap--0.92.0--0.93.0.sql +679 -0
- package/runtime/share/postgresql/extension/pgtap--0.93.0--0.94.0.sql +193 -0
- package/runtime/share/postgresql/extension/pgtap--0.94.0--0.95.0.sql +639 -0
- package/runtime/share/postgresql/extension/pgtap--0.95.0--0.96.0.sql +415 -0
- package/runtime/share/postgresql/extension/pgtap--0.96.0--0.97.0.sql +375 -0
- package/runtime/share/postgresql/extension/pgtap--0.97.0--0.98.0.sql +441 -0
- package/runtime/share/postgresql/extension/pgtap--0.98.0--0.99.0.sql +209 -0
- package/runtime/share/postgresql/extension/pgtap--0.99.0--1.0.0.sql +737 -0
- package/runtime/share/postgresql/extension/pgtap--1.0.0--1.1.0.sql +186 -0
- package/runtime/share/postgresql/extension/pgtap--1.1.0--1.2.0.sql +889 -0
- package/runtime/share/postgresql/extension/pgtap--1.2.0--1.3.0.sql +495 -0
- package/runtime/share/postgresql/extension/pgtap--1.3.0--1.3.1.sql +229 -0
- package/runtime/share/postgresql/extension/pgtap--1.3.1--1.3.2.sql +34 -0
- package/runtime/share/postgresql/extension/pgtap--1.3.2--1.3.3.sql +42 -0
- package/runtime/share/postgresql/extension/pgtap--1.3.3--1.3.4.sql +89 -0
- package/runtime/share/postgresql/extension/pgtap--1.3.4--1.3.5.sql +1 -0
- package/runtime/share/postgresql/extension/pgtap--1.3.5.sql +11520 -0
- package/runtime/share/postgresql/extension/pgtap--unpackaged--0.91.0.sql +714 -0
- package/runtime/share/postgresql/extension/pgtap-core--1.3.5.sql +4390 -0
- package/runtime/share/postgresql/extension/pgtap-core.sql +4390 -0
- package/runtime/share/postgresql/extension/pgtap-schema--1.3.5.sql +6764 -0
- package/runtime/share/postgresql/extension/pgtap-schema.sql +6764 -0
- package/runtime/share/postgresql/extension/pgtap.control +6 -0
- package/runtime/share/postgresql/extension/pgtap.sql +11520 -0
- package/runtime/share/postgresql/extension/uninstall_pgtap.sql +1088 -0
- package/share/licenses/pgtap/README.md +153 -0
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
CREATE OR REPLACE FUNCTION pgtap_version()
|
|
2
|
+
RETURNS NUMERIC AS 'SELECT 0.94;'
|
|
3
|
+
LANGUAGE SQL IMMUTABLE;
|
|
4
|
+
|
|
5
|
+
CREATE OR REPLACE FUNCTION _get_func_privs(TEXT, TEXT)
|
|
6
|
+
RETURNS TEXT[] AS $$
|
|
7
|
+
BEGIN
|
|
8
|
+
IF pg_catalog.has_function_privilege($1, $2, 'EXECUTE') THEN
|
|
9
|
+
RETURN '{EXECUTE}';
|
|
10
|
+
ELSE
|
|
11
|
+
RETURN '{}';
|
|
12
|
+
END IF;
|
|
13
|
+
EXCEPTION
|
|
14
|
+
-- Not a valid func name.
|
|
15
|
+
WHEN undefined_function THEN RETURN '{undefined_function}';
|
|
16
|
+
-- Not a valid role.
|
|
17
|
+
WHEN undefined_object THEN RETURN '{undefined_role}';
|
|
18
|
+
END;
|
|
19
|
+
$$ LANGUAGE plpgsql;
|
|
20
|
+
|
|
21
|
+
CREATE OR REPLACE FUNCTION _fprivs_are ( TEXT, NAME, NAME[], TEXT )
|
|
22
|
+
RETURNS TEXT AS $$
|
|
23
|
+
DECLARE
|
|
24
|
+
grants TEXT[] := _get_func_privs($2, $1);
|
|
25
|
+
BEGIN
|
|
26
|
+
IF grants[1] = 'undefined_function' THEN
|
|
27
|
+
RETURN ok(FALSE, $4) || E'\n' || diag(
|
|
28
|
+
' Function ' || $1 || ' does not exist'
|
|
29
|
+
);
|
|
30
|
+
ELSIF grants[1] = 'undefined_role' THEN
|
|
31
|
+
RETURN ok(FALSE, $4) || E'\n' || diag(
|
|
32
|
+
' Role ' || quote_ident($2) || ' does not exist'
|
|
33
|
+
);
|
|
34
|
+
END IF;
|
|
35
|
+
RETURN _assets_are('privileges', grants, $3, $4);
|
|
36
|
+
END;
|
|
37
|
+
$$ LANGUAGE plpgsql;
|
|
38
|
+
|
|
39
|
+
-- has_table( schema, table )
|
|
40
|
+
CREATE OR REPLACE FUNCTION has_table ( NAME, NAME )
|
|
41
|
+
RETURNS TEXT AS $$
|
|
42
|
+
SELECT ok(
|
|
43
|
+
_rexists( 'r', $1, $2 ),
|
|
44
|
+
'Table ' || quote_ident($1) || '.' || quote_ident($2) || ' should exist'
|
|
45
|
+
);
|
|
46
|
+
$$ LANGUAGE SQL;
|
|
47
|
+
|
|
48
|
+
-- hasnt_table( schema, table )
|
|
49
|
+
CREATE OR REPLACE FUNCTION hasnt_table ( NAME, NAME )
|
|
50
|
+
RETURNS TEXT AS $$
|
|
51
|
+
SELECT ok(
|
|
52
|
+
NOT _rexists( 'r', $1, $2 ),
|
|
53
|
+
'Table ' || quote_ident($1) || '.' || quote_ident($2) || ' should not exist'
|
|
54
|
+
);
|
|
55
|
+
$$ LANGUAGE SQL;
|
|
56
|
+
|
|
57
|
+
-- has_foreign_table( schema, table )
|
|
58
|
+
CREATE OR REPLACE FUNCTION has_foreign_table ( NAME, NAME )
|
|
59
|
+
RETURNS TEXT AS $$
|
|
60
|
+
SELECT ok(
|
|
61
|
+
_rexists( 'f', $1, $2 ),
|
|
62
|
+
'Foreign table ' || quote_ident($1) || '.' || quote_ident($2) || ' should exist'
|
|
63
|
+
);
|
|
64
|
+
$$ LANGUAGE SQL;
|
|
65
|
+
|
|
66
|
+
-- hasnt_foreign_table( schema, table )
|
|
67
|
+
CREATE OR REPLACE FUNCTION hasnt_foreign_table ( NAME, NAME )
|
|
68
|
+
RETURNS TEXT AS $$
|
|
69
|
+
SELECT ok(
|
|
70
|
+
NOT _rexists( 'f', $1, $2 ),
|
|
71
|
+
'Foreign table ' || quote_ident($1) || '.' || quote_ident($2) || ' not should exist'
|
|
72
|
+
);
|
|
73
|
+
$$ LANGUAGE SQL;
|
|
74
|
+
|
|
75
|
+
CREATE OR REPLACE FUNCTION skip ( why text, how_many int )
|
|
76
|
+
RETURNS TEXT AS $$
|
|
77
|
+
DECLARE
|
|
78
|
+
output TEXT[];
|
|
79
|
+
BEGIN
|
|
80
|
+
output := '{}';
|
|
81
|
+
FOR i IN 1..how_many LOOP
|
|
82
|
+
output = array_append(
|
|
83
|
+
output,
|
|
84
|
+
ok( TRUE ) || ' ' || diag( 'SKIP' || COALESCE( ' ' || why, '') )
|
|
85
|
+
);
|
|
86
|
+
END LOOP;
|
|
87
|
+
RETURN array_to_string(output, E'\n');
|
|
88
|
+
END;
|
|
89
|
+
$$ LANGUAGE plpgsql;
|
|
90
|
+
|
|
91
|
+
CREATE OR REPLACE FUNCTION skip ( text )
|
|
92
|
+
RETURNS TEXT AS $$
|
|
93
|
+
SELECT ok( TRUE ) || ' ' || diag( 'SKIP' || COALESCE(' ' || $1, '') );
|
|
94
|
+
$$ LANGUAGE sql;
|
|
95
|
+
|
|
96
|
+
-- check_test( test_output, pass, name, description, diag, match_diag )
|
|
97
|
+
CREATE OR REPLACE FUNCTION check_test( TEXT, BOOLEAN, TEXT, TEXT, TEXT, BOOLEAN )
|
|
98
|
+
RETURNS SETOF TEXT AS $$
|
|
99
|
+
DECLARE
|
|
100
|
+
tnumb INTEGER;
|
|
101
|
+
aok BOOLEAN;
|
|
102
|
+
adescr TEXT;
|
|
103
|
+
res BOOLEAN;
|
|
104
|
+
descr TEXT;
|
|
105
|
+
adiag TEXT;
|
|
106
|
+
have ALIAS FOR $1;
|
|
107
|
+
eok ALIAS FOR $2;
|
|
108
|
+
name ALIAS FOR $3;
|
|
109
|
+
edescr ALIAS FOR $4;
|
|
110
|
+
ediag ALIAS FOR $5;
|
|
111
|
+
matchit ALIAS FOR $6;
|
|
112
|
+
BEGIN
|
|
113
|
+
-- What test was it that just ran?
|
|
114
|
+
tnumb := currval('__tresults___numb_seq');
|
|
115
|
+
|
|
116
|
+
-- Fetch the results.
|
|
117
|
+
EXECUTE 'SELECT aok, descr FROM __tresults__ WHERE numb = ' || tnumb
|
|
118
|
+
INTO aok, adescr;
|
|
119
|
+
|
|
120
|
+
-- Now delete those results.
|
|
121
|
+
EXECUTE 'DELETE FROM __tresults__ WHERE numb = ' || tnumb;
|
|
122
|
+
EXECUTE 'ALTER SEQUENCE __tresults___numb_seq RESTART WITH ' || tnumb;
|
|
123
|
+
|
|
124
|
+
-- Set up the description.
|
|
125
|
+
descr := coalesce( name || ' ', 'Test ' ) || 'should ';
|
|
126
|
+
|
|
127
|
+
-- So, did the test pass?
|
|
128
|
+
RETURN NEXT is(
|
|
129
|
+
aok,
|
|
130
|
+
eok,
|
|
131
|
+
descr || CASE eok WHEN true then 'pass' ELSE 'fail' END
|
|
132
|
+
);
|
|
133
|
+
|
|
134
|
+
-- Was the description as expected?
|
|
135
|
+
IF edescr IS NOT NULL THEN
|
|
136
|
+
RETURN NEXT is(
|
|
137
|
+
adescr,
|
|
138
|
+
edescr,
|
|
139
|
+
descr || 'have the proper description'
|
|
140
|
+
);
|
|
141
|
+
END IF;
|
|
142
|
+
|
|
143
|
+
-- Were the diagnostics as expected?
|
|
144
|
+
IF ediag IS NOT NULL THEN
|
|
145
|
+
-- Remove ok and the test number.
|
|
146
|
+
adiag := substring(
|
|
147
|
+
have
|
|
148
|
+
FROM CASE WHEN aok THEN 4 ELSE 9 END + char_length(tnumb::text)
|
|
149
|
+
);
|
|
150
|
+
|
|
151
|
+
-- Remove the description, if there is one.
|
|
152
|
+
IF adescr <> '' THEN
|
|
153
|
+
adiag := substring(
|
|
154
|
+
adiag FROM 1 + char_length( ' - ' || substr(diag( adescr ), 3) )
|
|
155
|
+
);
|
|
156
|
+
END IF;
|
|
157
|
+
|
|
158
|
+
IF NOT aok THEN
|
|
159
|
+
-- Remove failure message from ok().
|
|
160
|
+
adiag := substring(adiag FROM 1 + char_length(diag(
|
|
161
|
+
'Failed test ' || tnumb ||
|
|
162
|
+
CASE adescr WHEN '' THEN '' ELSE COALESCE(': "' || adescr || '"', '') END
|
|
163
|
+
)));
|
|
164
|
+
END IF;
|
|
165
|
+
|
|
166
|
+
IF ediag <> '' THEN
|
|
167
|
+
-- Remove the space before the diagnostics.
|
|
168
|
+
adiag := substring(adiag FROM 2);
|
|
169
|
+
END IF;
|
|
170
|
+
|
|
171
|
+
-- Remove the #s.
|
|
172
|
+
adiag := replace( substring(adiag from 3), E'\n# ', E'\n' );
|
|
173
|
+
|
|
174
|
+
-- Now compare the diagnostics.
|
|
175
|
+
IF matchit THEN
|
|
176
|
+
RETURN NEXT matches(
|
|
177
|
+
adiag,
|
|
178
|
+
ediag,
|
|
179
|
+
descr || 'have the proper diagnostics'
|
|
180
|
+
);
|
|
181
|
+
ELSE
|
|
182
|
+
RETURN NEXT is(
|
|
183
|
+
adiag,
|
|
184
|
+
ediag,
|
|
185
|
+
descr || 'have the proper diagnostics'
|
|
186
|
+
);
|
|
187
|
+
END IF;
|
|
188
|
+
END IF;
|
|
189
|
+
|
|
190
|
+
-- And we're done
|
|
191
|
+
RETURN;
|
|
192
|
+
END;
|
|
193
|
+
$$ LANGUAGE plpgsql;
|