diff --git a/src/test/modules/Makefile b/src/test/modules/Makefile
index 9d5aa97b4bad04466aacb986c30075f96f0d1cf3..4cb6af01f8fdc31ebdf6e92ddb22550bd2bbc371 100644
--- a/src/test/modules/Makefile
+++ b/src/test/modules/Makefile
@@ -10,4 +10,9 @@ SUBDIRS = \
 		  test_shm_mq \
 		  test_parser
 
+all: submake-errcodes
+
+submake-errcodes:
+	$(MAKE) -C $(top_builddir)/src/backend submake-errcodes
+
 $(recurse)
diff --git a/src/test/modules/dummy_seclabel/Makefile b/src/test/modules/dummy_seclabel/Makefile
index bddfa150dd513e41cdcd24cef800032217f05086..72049d43ba3752a4186da86aa3cf88ce776e94b5 100644
--- a/src/test/modules/dummy_seclabel/Makefile
+++ b/src/test/modules/dummy_seclabel/Makefile
@@ -3,6 +3,9 @@
 MODULES = dummy_seclabel
 PGFILEDESC = "dummy_seclabel - regression testing of the SECURITY LABEL statement"
 
+EXTENSION = dummy_seclabel
+DATA = dummy_seclabel--1.0.sql
+
 REGRESS = dummy_seclabel
 EXTRA_CLEAN = sql/dummy_seclabel.sql expected/dummy_seclabel.out
 
diff --git a/src/test/modules/dummy_seclabel/dummy_seclabel--1.0.sql b/src/test/modules/dummy_seclabel/dummy_seclabel--1.0.sql
new file mode 100644
index 0000000000000000000000000000000000000000..468a05d7b9b42bbd80f77b36f4879be2271823c0
--- /dev/null
+++ b/src/test/modules/dummy_seclabel/dummy_seclabel--1.0.sql
@@ -0,0 +1,9 @@
+/* src/test/modules/dummy_seclabel/dummy_seclabel--1.0.sql */
+
+-- complain if script is sourced in psql, rather than via CREATE EXTENSION
+\echo Use "CREATE EXTENSION dummy_seclabel" to load this file. \quit
+
+CREATE FUNCTION dummy_seclabel_dummy()
+   RETURNS pg_catalog.void
+       AS 'MODULE_PATHNAME' LANGUAGE C;
+
diff --git a/src/test/modules/dummy_seclabel/dummy_seclabel.c b/src/test/modules/dummy_seclabel/dummy_seclabel.c
index b5753cc908419d8d4b8156a91814b527ae112d7a..dae51da43bb8dc7c90341a819149c89fe88ce229 100644
--- a/src/test/modules/dummy_seclabel/dummy_seclabel.c
+++ b/src/test/modules/dummy_seclabel/dummy_seclabel.c
@@ -21,6 +21,8 @@ PG_MODULE_MAGIC;
 /* Entrypoint of the module */
 void		_PG_init(void);
 
+PG_FUNCTION_INFO_V1(dummy_seclabel_dummy);
+
 static void
 dummy_object_relabel(const ObjectAddress *object, const char *seclabel)
 {
@@ -48,3 +50,13 @@ _PG_init(void)
 {
 	register_label_provider("dummy", dummy_object_relabel);
 }
+
+/*
+ * This function is here just so that the extension is not completely empty
+ * and the dynamic library is loaded when CREATE EXTENSION runs.
+ */
+Datum
+dummy_seclabel_dummy(PG_FUNCTION_ARGS)
+{
+	PG_RETURN_VOID();
+}
diff --git a/src/test/modules/dummy_seclabel/dummy_seclabel.control b/src/test/modules/dummy_seclabel/dummy_seclabel.control
new file mode 100644
index 0000000000000000000000000000000000000000..8c3727285f83605deb9e25d732df76c4f9749e10
--- /dev/null
+++ b/src/test/modules/dummy_seclabel/dummy_seclabel.control
@@ -0,0 +1,4 @@
+comment = 'Test code for SECURITY LABEL feature'
+default_version = '1.0'
+module_pathname = '$libdir/dummy_seclabel'
+relocatable = true
diff --git a/src/test/modules/dummy_seclabel/expected/.gitignore b/src/test/modules/dummy_seclabel/expected/.gitignore
deleted file mode 100644
index 2dd246245b3f4a96ef7f0af5db28702c817269d2..0000000000000000000000000000000000000000
--- a/src/test/modules/dummy_seclabel/expected/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-/dummy_seclabel.out
diff --git a/src/test/modules/dummy_seclabel/output/dummy_seclabel.source b/src/test/modules/dummy_seclabel/expected/dummy_seclabel.out
similarity index 99%
rename from src/test/modules/dummy_seclabel/output/dummy_seclabel.source
rename to src/test/modules/dummy_seclabel/expected/dummy_seclabel.out
index 8275764cb9c194994ce5f18a6ad428492caf597f..a16558e8fd16f00e899807c044b5027d0673020a 100644
--- a/src/test/modules/dummy_seclabel/output/dummy_seclabel.source
+++ b/src/test/modules/dummy_seclabel/expected/dummy_seclabel.out
@@ -1,7 +1,7 @@
 --
 -- Test for facilities of security label
 --
-LOAD '@libdir@/dummy_seclabel@DLSUFFIX@';
+CREATE EXTENSION dummy_seclabel;
 -- initial setups
 SET client_min_messages TO 'warning';
 DROP ROLE IF EXISTS dummy_seclabel_user1;
diff --git a/src/test/modules/dummy_seclabel/sql/.gitignore b/src/test/modules/dummy_seclabel/sql/.gitignore
deleted file mode 100644
index ec54e63b4fd65c6a3e418f556d2af0316e81cedd..0000000000000000000000000000000000000000
--- a/src/test/modules/dummy_seclabel/sql/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-/dummy_seclabel.sql
diff --git a/src/test/modules/dummy_seclabel/input/dummy_seclabel.source b/src/test/modules/dummy_seclabel/sql/dummy_seclabel.sql
similarity index 98%
rename from src/test/modules/dummy_seclabel/input/dummy_seclabel.source
rename to src/test/modules/dummy_seclabel/sql/dummy_seclabel.sql
index d39ce88aee93a2f64071df5288077aaef8169a13..49777aae38ba5c185fdeefdc5d7a59c897f6542e 100644
--- a/src/test/modules/dummy_seclabel/input/dummy_seclabel.source
+++ b/src/test/modules/dummy_seclabel/sql/dummy_seclabel.sql
@@ -1,7 +1,7 @@
 --
 -- Test for facilities of security label
 --
-LOAD '@libdir@/dummy_seclabel@DLSUFFIX@';
+CREATE EXTENSION dummy_seclabel;
 
 -- initial setups
 SET client_min_messages TO 'warning';