aboutsummaryrefslogtreecommitdiff
path: root/src/test
diff options
context:
space:
mode:
Diffstat (limited to 'src/test')
-rw-r--r--src/test/regress/expected/conversion.out7
-rw-r--r--src/test/regress/regress.c50
-rw-r--r--src/test/regress/sql/conversion.sql5
3 files changed, 62 insertions, 0 deletions
diff --git a/src/test/regress/expected/conversion.out b/src/test/regress/expected/conversion.out
index 442e7aff2b2..d785f92561e 100644
--- a/src/test/regress/expected/conversion.out
+++ b/src/test/regress/expected/conversion.out
@@ -5,6 +5,13 @@
\getenv libdir PG_LIBDIR
\getenv dlsuffix PG_DLSUFFIX
\set regresslib :libdir '/regress' :dlsuffix
+CREATE FUNCTION test_enc_setup() RETURNS void
+ AS :'regresslib', 'test_enc_setup'
+ LANGUAGE C STRICT;
+SELECT FROM test_enc_setup();
+--
+(1 row)
+
CREATE FUNCTION test_enc_conversion(bytea, name, name, bool, validlen OUT int, result OUT bytea)
AS :'regresslib', 'test_enc_conversion'
LANGUAGE C STRICT;
diff --git a/src/test/regress/regress.c b/src/test/regress/regress.c
index 5c7158f72b1..667d9835148 100644
--- a/src/test/regress/regress.c
+++ b/src/test/regress/regress.c
@@ -1018,6 +1018,56 @@ test_opclass_options_func(PG_FUNCTION_ARGS)
PG_RETURN_NULL();
}
+/* one-time tests for encoding infrastructure */
+PG_FUNCTION_INFO_V1(test_enc_setup);
+Datum
+test_enc_setup(PG_FUNCTION_ARGS)
+{
+ /* Test pg_encoding_set_invalid() */
+ for (int i = 0; i < _PG_LAST_ENCODING_; i++)
+ {
+ char buf[2],
+ bigbuf[16];
+ int len,
+ mblen,
+ valid;
+
+ if (pg_encoding_max_length(i) == 1)
+ continue;
+ pg_encoding_set_invalid(i, buf);
+ len = strnlen(buf, 2);
+ if (len != 2)
+ elog(WARNING,
+ "official invalid string for encoding \"%s\" has length %d",
+ pg_enc2name_tbl[i].name, len);
+ mblen = pg_encoding_mblen(i, buf);
+ if (mblen != 2)
+ elog(WARNING,
+ "official invalid string for encoding \"%s\" has mblen %d",
+ pg_enc2name_tbl[i].name, mblen);
+ valid = pg_encoding_verifymbstr(i, buf, len);
+ if (valid != 0)
+ elog(WARNING,
+ "official invalid string for encoding \"%s\" has valid prefix of length %d",
+ pg_enc2name_tbl[i].name, valid);
+ valid = pg_encoding_verifymbstr(i, buf, 1);
+ if (valid != 0)
+ elog(WARNING,
+ "first byte of official invalid string for encoding \"%s\" has valid prefix of length %d",
+ pg_enc2name_tbl[i].name, valid);
+ memset(bigbuf, ' ', sizeof(bigbuf));
+ bigbuf[0] = buf[0];
+ bigbuf[1] = buf[1];
+ valid = pg_encoding_verifymbstr(i, bigbuf, sizeof(bigbuf));
+ if (valid != 0)
+ elog(WARNING,
+ "trailing data changed official invalid string for encoding \"%s\" to have valid prefix of length %d",
+ pg_enc2name_tbl[i].name, valid);
+ }
+
+ PG_RETURN_VOID();
+}
+
/*
* Call an encoding conversion or verification function.
*
diff --git a/src/test/regress/sql/conversion.sql b/src/test/regress/sql/conversion.sql
index 9a65fca91fb..b567a1a5721 100644
--- a/src/test/regress/sql/conversion.sql
+++ b/src/test/regress/sql/conversion.sql
@@ -8,6 +8,11 @@
\set regresslib :libdir '/regress' :dlsuffix
+CREATE FUNCTION test_enc_setup() RETURNS void
+ AS :'regresslib', 'test_enc_setup'
+ LANGUAGE C STRICT;
+SELECT FROM test_enc_setup();
+
CREATE FUNCTION test_enc_conversion(bytea, name, name, bool, validlen OUT int, result OUT bytea)
AS :'regresslib', 'test_enc_conversion'
LANGUAGE C STRICT;