]> granicus.if.org Git - postgresql/commitdiff
Move test modules from contrib to src/test/modules
authorAlvaro Herrera <alvherre@alvh.no-ip.org>
Sun, 30 Nov 2014 02:55:00 +0000 (23:55 -0300)
committerAlvaro Herrera <alvherre@alvh.no-ip.org>
Sun, 30 Nov 2014 02:55:00 +0000 (23:55 -0300)
This is advance preparation for introducing even more test modules; the
easy solution is to add them to contrib, but that's bloated enough that
it seems a good time to think of something different.

Moved modules are dummy_seclabel, test_shm_mq, test_parser and
worker_spi.

(test_decoding was also a candidate, but there was too much opposition
to moving that one.  We can always reconsider later.)

38 files changed:
contrib/Makefile
doc/src/sgml/contrib.sgml
doc/src/sgml/dummy-seclabel.sgml [deleted file]
doc/src/sgml/ref/security_label.sgml
doc/src/sgml/release-9.1.sgml
doc/src/sgml/release-9.4.sgml
doc/src/sgml/test-parser.sgml [deleted file]
doc/src/sgml/test-shm-mq.sgml [deleted file]
src/test/Makefile
src/test/modules/Makefile [new file with mode: 0644]
src/test/modules/dummy_seclabel/Makefile [moved from contrib/dummy_seclabel/Makefile with 73% similarity]
src/test/modules/dummy_seclabel/README [new file with mode: 0644]
src/test/modules/dummy_seclabel/dummy_seclabel.c [moved from contrib/dummy_seclabel/dummy_seclabel.c with 100% similarity]
src/test/modules/test_parser/.gitignore [moved from contrib/test_parser/.gitignore with 100% similarity]
src/test/modules/test_parser/Makefile [moved from contrib/test_parser/Makefile with 80% similarity]
src/test/modules/test_parser/README [new file with mode: 0644]
src/test/modules/test_parser/expected/test_parser.out [moved from contrib/test_parser/expected/test_parser.out with 100% similarity]
src/test/modules/test_parser/sql/test_parser.sql [moved from contrib/test_parser/sql/test_parser.sql with 100% similarity]
src/test/modules/test_parser/test_parser--1.0.sql [moved from contrib/test_parser/test_parser--1.0.sql with 93% similarity]
src/test/modules/test_parser/test_parser--unpackaged--1.0.sql [moved from contrib/test_parser/test_parser--unpackaged--1.0.sql with 88% similarity]
src/test/modules/test_parser/test_parser.c [moved from contrib/test_parser/test_parser.c with 98% similarity]
src/test/modules/test_parser/test_parser.control [moved from contrib/test_parser/test_parser.control with 100% similarity]
src/test/modules/test_shm_mq/.gitignore [moved from contrib/test_shm_mq/.gitignore with 100% similarity]
src/test/modules/test_shm_mq/Makefile [moved from contrib/test_shm_mq/Makefile with 79% similarity]
src/test/modules/test_shm_mq/README [new file with mode: 0644]
src/test/modules/test_shm_mq/expected/test_shm_mq.out [moved from contrib/test_shm_mq/expected/test_shm_mq.out with 100% similarity]
src/test/modules/test_shm_mq/setup.c [moved from contrib/test_shm_mq/setup.c with 98% similarity]
src/test/modules/test_shm_mq/sql/test_shm_mq.sql [moved from contrib/test_shm_mq/sql/test_shm_mq.sql with 100% similarity]
src/test/modules/test_shm_mq/test.c [moved from contrib/test_shm_mq/test.c with 98% similarity]
src/test/modules/test_shm_mq/test_shm_mq--1.0.sql [moved from contrib/test_shm_mq/test_shm_mq--1.0.sql with 92% similarity]
src/test/modules/test_shm_mq/test_shm_mq.control [moved from contrib/test_shm_mq/test_shm_mq.control with 100% similarity]
src/test/modules/test_shm_mq/test_shm_mq.h [moved from contrib/test_shm_mq/test_shm_mq.h with 96% similarity]
src/test/modules/test_shm_mq/worker.c [moved from contrib/test_shm_mq/worker.c with 98% similarity]
src/test/modules/worker_spi/Makefile [moved from contrib/worker_spi/Makefile with 75% similarity]
src/test/modules/worker_spi/worker_spi--1.0.sql [moved from contrib/worker_spi/worker_spi--1.0.sql with 82% similarity]
src/test/modules/worker_spi/worker_spi.c [moved from contrib/worker_spi/worker_spi.c with 99% similarity]
src/test/modules/worker_spi/worker_spi.control [moved from contrib/worker_spi/worker_spi.control with 100% similarity]
src/test/regress/GNUmakefile

index b37d0dd2c318f722628caef69c510b2ef99d9044..195d4472c573ae233b271c4df7e8a7922b925f2e 100644 (file)
@@ -16,7 +16,6 @@ SUBDIRS = \
                dblink          \
                dict_int        \
                dict_xsyn       \
-               dummy_seclabel  \
                earthdistance   \
                file_fdw        \
                fuzzystrmatch   \
@@ -51,12 +50,9 @@ SUBDIRS = \
                tablefunc       \
                tcn             \
                test_decoding   \
-               test_parser     \
-               test_shm_mq     \
                tsearch2        \
                unaccent        \
-               vacuumlo        \
-               worker_spi
+               vacuumlo
 
 ifeq ($(with_openssl),yes)
 SUBDIRS += sslinfo
index ec68f10b65c8c32e08295fbc038e21e387c87063..a698d0fb2f89a14a23e0d426a6c784f5ebdd677c 100644 (file)
@@ -113,7 +113,6 @@ CREATE EXTENSION <replaceable>module_name</> FROM unpackaged;
  &dblink;
  &dict-int;
  &dict-xsyn;
- &dummy-seclabel;
  &earthdistance;
  &file-fdw;
  &fuzzystrmatch;
@@ -141,8 +140,6 @@ CREATE EXTENSION <replaceable>module_name</> FROM unpackaged;
  &tablefunc;
  &tcn;
  &test-decoding;
- &test-parser;
- &test-shm-mq;
  &tsearch2;
  &unaccent;
  &uuid-ossp;
diff --git a/doc/src/sgml/dummy-seclabel.sgml b/doc/src/sgml/dummy-seclabel.sgml
deleted file mode 100644 (file)
index d064705..0000000
+++ /dev/null
@@ -1,74 +0,0 @@
-<!-- doc/src/sgml/dummy-seclabel.sgml -->
-
-<sect1 id="dummy-seclabel" xreflabel="dummy_seclabel">
- <title>dummy_seclabel</title>
-
- <indexterm zone="dummy-seclabel">
-  <primary>dummy_seclabel</primary>
- </indexterm>
-
- <para>
-  The <filename>dummy_seclabel</> module exists only to support regression
-  testing of the <command>SECURITY LABEL</> statement.  It is not intended
-  to be used in production.
- </para>
-
- <sect2>
-  <title>Rationale</title>
-
-  <para>
-   The <command>SECURITY LABEL</> statement allows the user to assign security
-   labels to database objects; however, security labels can only be assigned
-   when specifically allowed by a loadable module, so this module is provided
-   to allow proper regression testing.
-  </para>
-
-  <para>
-   Security label providers intended to be used in production will typically be
-   dependent on a platform-specific feature such as
-   <productname>SE-Linux</productname>.  This module is platform-independent,
-   and therefore better-suited to regression testing.
-  </para>
- </sect2>
-
- <sect2>
-  <title>Usage</title>
-
-  <para>
-   Here's a simple example of usage:
-  </para>
-
-<programlisting>
-# postgresql.conf
-shared_preload_libraries = 'dummy_seclabel'
-</programlisting>
-
-<programlisting>
-postgres=# CREATE TABLE t (a int, b text);
-CREATE TABLE
-postgres=# SECURITY LABEL ON TABLE t IS 'classified';
-SECURITY LABEL
-</programlisting>
-
-  <para>
-   The <filename>dummy_seclabel</> module provides only four hardcoded
-   labels: <literal>unclassified</>, <literal>classified</>,
-   <literal>secret</>, and <literal>top secret</>.
-   It does not allow any other strings as security labels.
-  </para>
-  <para>
-   These labels are not used to enforce access controls.  They are only used
-   to check whether the <command>SECURITY LABEL</> statement works as expected,
-   or not.
-  </para>
- </sect2>
-
- <sect2>
-  <title>Author</title>
-
-  <para>
-   KaiGai Kohei <email>kaigai@ak.jp.nec.com</email>
-  </para>
- </sect2>
-
-</sect1>
index 6e2bd25240b728d8aa8a1b21382f2a802c287451..998fe3b7c03dadfd7867eda946e044108957d987 100644 (file)
@@ -207,7 +207,7 @@ SECURITY LABEL FOR selinux ON TABLE mytable IS 'system_u:object_r:sepgsql_table_
   <title>See Also</title>
   <simplelist type="inline">
    <member><xref linkend="sepgsql"></member>
-   <member><xref linkend="dummy-seclabel"></member>
+   <member><filename>src/test/modules/dummy_seclabel</filename></member>
   </simplelist>
  </refsect1>
 </refentry>
index 4f86b64e8463b1c1b88221a43b2c4e45acc0349c..79a8b078bcf316531001ad067bb0d6c7061ca633 100644 (file)
@@ -8062,7 +8062,7 @@ SELECT * FROM places ORDER BY location <-> point '(101,456)' LIMIT 10;
 
       <listitem>
        <para>
-        Add <link linkend="dummy-seclabel"><filename>dummy_seclabel</></link>
+        Add <filename>dummy_seclabel</>
         contrib module (KaiGai Kohei)
        </para>
 
index 9bbf95304388fc9b6962947cf68c5a5e570859e1..b2bcecd6e6bebb64132059f8bbba8fba661cdf82 100644 (file)
        </para>
 
        <para>
-        This feature is illustrated in <xref linkend="test-shm-mq">.
+        This feature is illustrated in <filename>contrib/test_shm_mq</filename>.
        </para>
       </listitem>
 
diff --git a/doc/src/sgml/test-parser.sgml b/doc/src/sgml/test-parser.sgml
deleted file mode 100644 (file)
index 28b1e91..0000000
+++ /dev/null
@@ -1,90 +0,0 @@
-<!-- doc/src/sgml/test-parser.sgml -->
-
-<sect1 id="test-parser" xreflabel="test_parser">
- <title>test_parser</title>
-
- <indexterm zone="test-parser">
-  <primary>test_parser</primary>
- </indexterm>
-
- <para>
-  <filename>test_parser</> is an example of a custom parser for full-text
-  search.  It doesn't do anything especially useful, but can serve as
-  a starting point for developing your own parser.
- </para>
-
- <para>
-  <filename>test_parser</> recognizes words separated by white space,
-  and returns just two token types:
-
-<programlisting>
-mydb=# SELECT * FROM ts_token_type('testparser');
- tokid | alias |  description
--------+-------+---------------
-     3 | word  | Word
-    12 | blank | Space symbols
-(2 rows)
-</programlisting>
-
-  These token numbers have been chosen to be compatible with the default
-  parser's numbering.  This allows us to use its <function>headline()</>
-  function, thus keeping the example simple.
- </para>
-
- <sect2>
-  <title>Usage</title>
-
-  <para>
-   Installing the <literal>test_parser</> extension creates a text search
-   parser <literal>testparser</>.  It has no user-configurable parameters.
-  </para>
-
-  <para>
-   You can test the parser with, for example,
-
-<programlisting>
-mydb=# SELECT * FROM ts_parse('testparser', 'That''s my first own parser');
- tokid | token
--------+--------
-     3 | That's
-    12 |
-     3 | my
-    12 |
-     3 | first
-    12 |
-     3 | own
-    12 |
-     3 | parser
-</programlisting>
-  </para>
-
-  <para>
-   Real-world use requires setting up a text search configuration
-   that uses the parser.  For example,
-
-<programlisting>
-mydb=# CREATE TEXT SEARCH CONFIGURATION testcfg ( PARSER = testparser );
-CREATE TEXT SEARCH CONFIGURATION
-
-mydb=# ALTER TEXT SEARCH CONFIGURATION testcfg
-mydb-#   ADD MAPPING FOR word WITH english_stem;
-ALTER TEXT SEARCH CONFIGURATION
-
-mydb=#  SELECT to_tsvector('testcfg', 'That''s my first own parser');
-          to_tsvector
--------------------------------
- 'that':1 'first':3 'parser':5
-(1 row)
-
-mydb=# SELECT ts_headline('testcfg', 'Supernovae stars are the brightest phenomena in galaxies',
-mydb(#                    to_tsquery('testcfg', 'star'));
-                           ts_headline
------------------------------------------------------------------
- Supernovae &lt;b&gt;stars&lt;/b&gt; are the brightest phenomena in galaxies
-(1 row)
-</programlisting>
-  </para>
-
- </sect2>
-
-</sect1>
diff --git a/doc/src/sgml/test-shm-mq.sgml b/doc/src/sgml/test-shm-mq.sgml
deleted file mode 100644 (file)
index dd431d0..0000000
+++ /dev/null
@@ -1,71 +0,0 @@
-<!-- doc/src/sgml/test-shm-mq.sgml -->
-
-<sect1 id="test-shm-mq" xreflabel="test_shm_mq">
- <title>test_shm_mq</title>
-
- <indexterm zone="test-shm-mq">
-  <primary>test_shm_mq</primary>
- </indexterm>
-
- <para>
-  <filename>test_shm_mq</> is an example of how to use dynamic shared memory
-  and the shared memory message queue facilities to coordinate a user backend
-  with the efforts of one or more background workers.  It is not intended to
-  do anything useful on its own; rather, it is a demonstration of how these
-  facilities can be used, and a unit test of those facilities.
- </para>
-
- <para>
-  The function is this extension send the same message repeatedly through
-  a loop of processes.  The message payload, the size of the message queue
-  through which it is sent, and the number of processes in the loop are
-  configurable.  At the end, the message may be verified to ensure that it
-  has not been corrupted in transmission.
- </para>
-
- <sect2>
-  <title>Functions</title>
-
-<synopsis>
-test_shm_mq(queue_size int8, message text,
-            repeat_count int4 default 1, num_workers int4 default 1)
-    RETURNS void
-</synopsis>
-
-  <para>
-   This function sends and receives messages synchronously.  The user
-   backend sends the provided message to the first background worker using
-   a message queue of the given size.  The first background worker sends
-   the message to the second background worker, if the number of workers
-   is greater than one, and so forth.  Eventually, the last background
-   worker sends the message back to the user backend.  If the repeat count
-   is greater than one, the user backend then sends the message back to
-   the first worker.  Once the message has been sent and received by all
-   the coordinating processes a number of times equal to the repeat count,
-   the user backend verifies that the message finally received matches the
-   one originally sent and throws an error if not.
-  </para>
-
-<synopsis>
-test_shm_mq_pipelined(queue_size int8, message text,
-                      repeat_count int4 default 1, num_workers int4 default 1,
-                      verify bool default true)
-    RETURNS void
-</synopsis>
-
-  <para>
-   This function sends the same message multiple times, as specified by the
-   repeat count, to the first background worker using a queue of the given
-   size.  These messages are then forwarded to each background worker in
-   turn, in each case using a queue of the given size.  Finally, the last
-   background worker sends the messages back to the user backend.  The user
-   backend uses non-blocking sends and receives, so that it may begin receiving
-   copies of the message before it has finished sending all copies of the
-   message.  The <literal>verify</> argument controls whether or not the
-   received copies are checked against the message that was sent.  (This
-   takes nontrivial time so it may be useful to disable it for benchmarking
-   purposes.)
-  </para>
-
- </sect2>
-</sect1>
index 0fd7eabf08f1978a04a5aac2d7c280b7494a9360..9238860febd9f264674aed34dd31b5b41365ee88 100644 (file)
@@ -12,6 +12,14 @@ subdir = src/test
 top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
-SUBDIRS = regress isolation
+SUBDIRS = regress isolation modules
 
-$(recurse)
+# We want to recurse to all subdirs for all standard targets, except that
+# installcheck and install should not recurse into the subdirectory "modules".
+
+recurse_alldirs_targets := $(filter-out installcheck install, $(standard_targets))
+installable_dirs := $(filter-out modules, $(SUBDIRS))
+
+$(call recurse,$(recurse_alldirs_targets))
+$(call recurse,installcheck, $(installable_dirs))
+$(call recurse,install, $(installable_dirs))
diff --git a/src/test/modules/Makefile b/src/test/modules/Makefile
new file mode 100644 (file)
index 0000000..9d5aa97
--- /dev/null
@@ -0,0 +1,13 @@
+# src/test/modules/Makefile
+
+subdir = src/test/modules
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+SUBDIRS = \
+                 worker_spi \
+                 dummy_seclabel \
+                 test_shm_mq \
+                 test_parser
+
+$(recurse)
similarity index 73%
rename from contrib/dummy_seclabel/Makefile
rename to src/test/modules/dummy_seclabel/Makefile
index e69aa1ff6c44a73e002366f1f0db779672f3c99d..909ac9ace72d641458b5cf6b168ea00c30cdc7e7 100644 (file)
@@ -1,4 +1,4 @@
-# contrib/dummy_seclabel/Makefile
+# src/test/modules/dummy_seclabel/Makefile
 
 MODULES = dummy_seclabel
 PGFILEDESC = "dummy_seclabel - regression testing of the SECURITY LABEL statement"
@@ -8,8 +8,8 @@ PG_CONFIG = pg_config
 PGXS := $(shell $(PG_CONFIG) --pgxs)
 include $(PGXS)
 else
-subdir = contrib/dummy_seclabel
-top_builddir = ../..
+subdir = src/test/modules/dummy_seclabel
+top_builddir = ../../../..
 include $(top_builddir)/src/Makefile.global
 include $(top_srcdir)/contrib/contrib-global.mk
 endif
diff --git a/src/test/modules/dummy_seclabel/README b/src/test/modules/dummy_seclabel/README
new file mode 100644 (file)
index 0000000..75320aa
--- /dev/null
@@ -0,0 +1,43 @@
+The dummy_seclabel module exists only to support regression
+testing of the SECURITY LABEL statement.  It is not intended
+to be used in production.
+
+Rationale
+=========
+
+The SECURITY LABEL statement allows the user to assign security
+labels to database objects; however, security labels can only be assigned
+when specifically allowed by a loadable module, so this module is provided
+to allow proper regression testing.
+
+Security label providers intended to be used in production will typically be
+dependent on a platform-specific feature such as
+SE-Linux.  This module is platform-independent,
+and therefore better-suited to regression testing.
+
+Usage
+=====
+
+Here's a simple example of usage:
+
+# postgresql.conf
+shared_preload_libraries = 'dummy_seclabel'
+
+postgres=# CREATE TABLE t (a int, b text);
+CREATE TABLE
+postgres=# SECURITY LABEL ON TABLE t IS 'classified';
+SECURITY LABEL
+
+The dummy_seclabel module provides only four hardcoded
+labels: unclassified, classified,
+secret, and top secret.
+It does not allow any other strings as security labels.
+
+These labels are not used to enforce access controls.  They are only used
+to check whether the SECURITY LABEL statement works as expected,
+or not.
+
+Author
+======
+
+KaiGai Kohei <kaigai@ak.jp.nec.com>
similarity index 80%
rename from contrib/test_parser/Makefile
rename to src/test/modules/test_parser/Makefile
index 7e068abd3e6a417aa2fcc21ea73defbd4527a8f0..0c755aac73ba2f6b1cc2db7bf5ac9c26a6c81755 100644 (file)
@@ -1,4 +1,4 @@
-# contrib/test_parser/Makefile
+# src/test/modules/test_parser/Makefile
 
 MODULE_big = test_parser
 OBJS = test_parser.o $(WIN32RES)
@@ -14,8 +14,8 @@ PG_CONFIG = pg_config
 PGXS := $(shell $(PG_CONFIG) --pgxs)
 include $(PGXS)
 else
-subdir = contrib/test_parser
-top_builddir = ../..
+subdir = src/test/modules/test_parser
+top_builddir = ../../../..
 include $(top_builddir)/src/Makefile.global
 include $(top_srcdir)/contrib/contrib-global.mk
 endif
diff --git a/src/test/modules/test_parser/README b/src/test/modules/test_parser/README
new file mode 100644 (file)
index 0000000..0a11ec8
--- /dev/null
@@ -0,0 +1,61 @@
+test_parser is an example of a custom parser for full-text
+search.  It doesn't do anything especially useful, but can serve as
+a starting point for developing your own parser.
+
+test_parser recognizes words separated by white space,
+and returns just two token types:
+
+mydb=# SELECT * FROM ts_token_type('testparser');
+ tokid | alias |  description
+-------+-------+---------------
+     3 | word  | Word
+    12 | blank | Space symbols
+(2 rows)
+
+These token numbers have been chosen to be compatible with the default
+parser's numbering.  This allows us to use its headline()
+function, thus keeping the example simple.
+
+Usage
+=====
+
+Installing the test_parser extension creates a text search
+parser testparser.  It has no user-configurable parameters.
+
+You can test the parser with, for example,
+
+mydb=# SELECT * FROM ts_parse('testparser', 'That''s my first own parser');
+ tokid | token
+-------+--------
+     3 | That's
+    12 |
+     3 | my
+    12 |
+     3 | first
+    12 |
+     3 | own
+    12 |
+     3 | parser
+
+Real-world use requires setting up a text search configuration
+that uses the parser.  For example,
+
+mydb=# CREATE TEXT SEARCH CONFIGURATION testcfg ( PARSER = testparser );
+CREATE TEXT SEARCH CONFIGURATION
+
+mydb=# ALTER TEXT SEARCH CONFIGURATION testcfg
+mydb-#   ADD MAPPING FOR word WITH english_stem;
+ALTER TEXT SEARCH CONFIGURATION
+
+mydb=#  SELECT to_tsvector('testcfg', 'That''s my first own parser');
+          to_tsvector
+-------------------------------
+ 'that':1 'first':3 'parser':5
+(1 row)
+
+mydb=# SELECT ts_headline('testcfg', 'Supernovae stars are the brightest phenomena in galaxies',
+mydb(#                    to_tsquery('testcfg', 'star'));
+                           ts_headline
+-----------------------------------------------------------------
+ Supernovae <b>stars</b> are the brightest phenomena in galaxies
+(1 row)
similarity index 93%
rename from contrib/test_parser/test_parser--1.0.sql
rename to src/test/modules/test_parser/test_parser--1.0.sql
index 06c94d353be27246d81b9e18d4c03c03233c5137..56bb2442c3d524354ae9031793199369636dfd88 100644 (file)
@@ -1,4 +1,4 @@
-/* contrib/test_parser/test_parser--1.0.sql */
+/* src/test/modules/test_parser/test_parser--1.0.sql */
 
 -- complain if script is sourced in psql, rather than via CREATE EXTENSION
 \echo Use "CREATE EXTENSION test_parser" to load this file. \quit
similarity index 88%
rename from contrib/test_parser/test_parser--unpackaged--1.0.sql
rename to src/test/modules/test_parser/test_parser--unpackaged--1.0.sql
index 62458bd2c6878bc37911a3dbbd9bf8d5f2673a9d..9ebc4b3fbeedb23d3c4b31a6c0837f9757d0e40f 100644 (file)
@@ -1,4 +1,4 @@
-/* contrib/test_parser/test_parser--unpackaged--1.0.sql */
+/* src/test/modules/test_parser/test_parser--unpackaged--1.0.sql */
 
 -- complain if script is sourced in psql, rather than via CREATE EXTENSION
 \echo Use "CREATE EXTENSION test_parser FROM unpackaged" to load this file. \quit
similarity index 98%
rename from contrib/test_parser/test_parser.c
rename to src/test/modules/test_parser/test_parser.c
index cbf77966ae57a1528399a6e56b735d76fae6ccc5..68c0a93e3cd4f94aa5c6739eb641238fa177953e 100644 (file)
@@ -6,7 +6,7 @@
  * Copyright (c) 2007-2014, PostgreSQL Global Development Group
  *
  * IDENTIFICATION
- *       contrib/test_parser/test_parser.c
+ *       src/test/modules/test_parser/test_parser.c
  *
  *-------------------------------------------------------------------------
  */
similarity index 79%
rename from contrib/test_shm_mq/Makefile
rename to src/test/modules/test_shm_mq/Makefile
index e3c405442c5391698b788b053fddb70416f1174e..11c4e3572022b65fa19c5614228fd34372b50fee 100644 (file)
@@ -1,4 +1,4 @@
-# contrib/test_shm_mq/Makefile
+# src/test/modules/test_shm_mq/Makefile
 
 MODULE_big = test_shm_mq
 OBJS = test.o setup.o worker.o $(WIN32RES)
@@ -14,8 +14,8 @@ PG_CONFIG = pg_config
 PGXS := $(shell $(PG_CONFIG) --pgxs)
 include $(PGXS)
 else
-subdir = contrib/test_shm_mq
-top_builddir = ../..
+subdir = src/test/modules/test_shm_mq
+top_builddir = ../../../..
 include $(top_builddir)/src/Makefile.global
 include $(top_srcdir)/contrib/contrib-global.mk
 endif
diff --git a/src/test/modules/test_shm_mq/README b/src/test/modules/test_shm_mq/README
new file mode 100644 (file)
index 0000000..641407b
--- /dev/null
@@ -0,0 +1,49 @@
+test_shm_mq is an example of how to use dynamic shared memory
+and the shared memory message queue facilities to coordinate a user backend
+with the efforts of one or more background workers.  It is not intended to
+do anything useful on its own; rather, it is a demonstration of how these
+facilities can be used, and a unit test of those facilities.
+
+The function is this extension send the same message repeatedly through
+a loop of processes.  The message payload, the size of the message queue
+through which it is sent, and the number of processes in the loop are
+configurable.  At the end, the message may be verified to ensure that it
+has not been corrupted in transmission.
+
+Functions
+=========
+
+
+test_shm_mq(queue_size int8, message text,
+            repeat_count int4 default 1, num_workers int4 default 1)
+    RETURNS void
+
+This function sends and receives messages synchronously.  The user
+backend sends the provided message to the first background worker using
+a message queue of the given size.  The first background worker sends
+the message to the second background worker, if the number of workers
+is greater than one, and so forth.  Eventually, the last background
+worker sends the message back to the user backend.  If the repeat count
+is greater than one, the user backend then sends the message back to
+the first worker.  Once the message has been sent and received by all
+the coordinating processes a number of times equal to the repeat count,
+the user backend verifies that the message finally received matches the
+one originally sent and throws an error if not.
+
+
+test_shm_mq_pipelined(queue_size int8, message text,
+                      repeat_count int4 default 1, num_workers int4 default 1,
+                      verify bool default true)
+    RETURNS void
+
+This function sends the same message multiple times, as specified by the
+repeat count, to the first background worker using a queue of the given
+size.  These messages are then forwarded to each background worker in
+turn, in each case using a queue of the given size.  Finally, the last
+background worker sends the messages back to the user backend.  The user
+backend uses non-blocking sends and receives, so that it may begin receiving
+copies of the message before it has finished sending all copies of the
+message.  The 'verify' argument controls whether or not the
+received copies are checked against the message that was sent.  (This
+takes nontrivial time so it may be useful to disable it for benchmarking
+purposes.)
similarity index 98%
rename from contrib/test_shm_mq/setup.c
rename to src/test/modules/test_shm_mq/setup.c
index 572cf8898f15a9a29395c6d6b01090a67304b713..b049cff2d05e66a7ec941791491b263d17a0c0f9 100644 (file)
@@ -5,10 +5,10 @@
  *             number of background workers for shared memory message queue
  *             testing.
  *
- * Copyright (C) 2013, PostgreSQL Global Development Group
+ * Copyright (C) 2013-2014, PostgreSQL Global Development Group
  *
  * IDENTIFICATION
- *             contrib/test_shm_mq/setup.c
+ *             src/test/modules/test_shm_mq/setup.c
  *
  * -------------------------------------------------------------------------
  */
similarity index 98%
rename from contrib/test_shm_mq/test.c
rename to src/test/modules/test_shm_mq/test.c
index 95d620f7569ce56157d35da986f08066a25a2437..6428fcf51c4bb37bcda59f8ed41146c761e63d04 100644 (file)
@@ -3,10 +3,10 @@
  * test.c
  *             Test harness code for shared memory message queues.
  *
- * Copyright (C) 2013, PostgreSQL Global Development Group
+ * Copyright (C) 2013-2014, PostgreSQL Global Development Group
  *
  * IDENTIFICATION
- *             contrib/test_shm_mq/test.c
+ *             src/test/modules/test_shm_mq/test.c
  *
  * -------------------------------------------------------------------------
  */
similarity index 92%
rename from contrib/test_shm_mq/test_shm_mq--1.0.sql
rename to src/test/modules/test_shm_mq/test_shm_mq--1.0.sql
index 54b225e2ae04cae645403acc12ca0ab842febf77..56db05d93df244a6047b55e36778162c7722d4b6 100644 (file)
@@ -1,4 +1,4 @@
-/* contrib/test_shm_mq/test_shm_mq--1.0.sql */
+/* src/test/modules/test_shm_mq/test_shm_mq--1.0.sql */
 
 -- complain if script is sourced in psql, rather than via CREATE EXTENSION
 \echo Use "CREATE EXTENSION test_shm_mq" to load this file. \quit
similarity index 96%
rename from contrib/test_shm_mq/test_shm_mq.h
rename to src/test/modules/test_shm_mq/test_shm_mq.h
index 04a7931fa948c6b981dab415833c22d160c6149b..144345b611bf1488481ed1d094f75c522d3efb98 100644 (file)
@@ -6,7 +6,7 @@
  * Copyright (C) 2013, PostgreSQL Global Development Group
  *
  * IDENTIFICATION
- *             contrib/test_shm_mq/test_shm_mq.h
+ *             src/test/modules/test_shm_mq/test_shm_mq.h
  *
  * -------------------------------------------------------------------------
  */
similarity index 98%
rename from contrib/test_shm_mq/worker.c
rename to src/test/modules/test_shm_mq/worker.c
index 0d66c92ddb14a7e023d686b349b8bf8ed4c544c1..dec058b55ea400dc33e2d91a10e20b86e7d5f462 100644 (file)
@@ -9,10 +9,10 @@
  *             but it should be possible to use much of the control logic just
  *             as presented here.
  *
- * Copyright (C) 2013, PostgreSQL Global Development Group
+ * Copyright (C) 2013-2014, PostgreSQL Global Development Group
  *
  * IDENTIFICATION
- *             contrib/test_shm_mq/worker.c
+ *             src/test/modules/test_shm_mq/worker.c
  *
  * -------------------------------------------------------------------------
  */
similarity index 75%
rename from contrib/worker_spi/Makefile
rename to src/test/modules/worker_spi/Makefile
index 5cce4d1ef9e68c20e64ed118c11edd95d523f5b7..7cdb33c9dfcee3577cd9f7eb0f8578057655f401 100644 (file)
@@ -1,4 +1,4 @@
-# contrib/worker_spi/Makefile
+# src/test/modules/worker_spi/Makefile
 
 MODULES = worker_spi
 
@@ -11,8 +11,8 @@ PG_CONFIG = pg_config
 PGXS := $(shell $(PG_CONFIG) --pgxs)
 include $(PGXS)
 else
-subdir = contrib/worker_spi
-top_builddir = ../..
+subdir = src/test/modules/worker_spi
+top_builddir = ../../../..
 include $(top_builddir)/src/Makefile.global
 include $(top_srcdir)/contrib/contrib-global.mk
 endif
similarity index 82%
rename from contrib/worker_spi/worker_spi--1.0.sql
rename to src/test/modules/worker_spi/worker_spi--1.0.sql
index 09b7799f2c9ed275f0e81ec0675f2aaa906a1839..e9d5b07373a8bdaeaab083758b693e7b93792c08 100644 (file)
@@ -1,4 +1,4 @@
-/* contrib/worker_spi/worker_spi--1.0.sql */
+/* src/test/modules/worker_spi/worker_spi--1.0.sql */
 
 -- complain if script is sourced in psql, rather than via CREATE EXTENSION
 \echo Use "CREATE EXTENSION worker_spi" to load this file. \quit
similarity index 99%
rename from contrib/worker_spi/worker_spi.c
rename to src/test/modules/worker_spi/worker_spi.c
index 328c722c35932f4d55a6d72fa950ead6359fe8b0..ac0f59c9886f1fdd5524a32bfb744cd116e3e602 100644 (file)
  * "delta" type.  Delta rows will be deleted by this worker and their values
  * aggregated into the total.
  *
- * Copyright (C) 2013, PostgreSQL Global Development Group
+ * Copyright (C) 2013-2014, PostgreSQL Global Development Group
  *
  * IDENTIFICATION
- *             contrib/worker_spi/worker_spi.c
+ *             src/test/modules/worker_spi/worker_spi.c
  *
  * -------------------------------------------------------------------------
  */
index b40b37c0b7420c9112a99ea19d41499a1e320a76..77fe8b620d46e657a5bf54655e0d611a6cab6143 100644 (file)
@@ -101,7 +101,7 @@ installdirs-tests: installdirs
        $(MKDIR_P)  $(patsubst $(srcdir)/%/,'$(DESTDIR)$(pkglibdir)/regress/%',$(sort $(dir $(regress_data_files))))
 
 
-# Get some extra C modules from contrib/spi and contrib/dummy_seclabel...
+# Get some extra C modules from contrib/spi and src/test/modules/dummy_seclabel...
 
 all: refint$(DLSUFFIX) autoinc$(DLSUFFIX) dummy_seclabel$(DLSUFFIX)
 
@@ -111,22 +111,22 @@ refint$(DLSUFFIX): $(top_builddir)/contrib/spi/refint$(DLSUFFIX)
 autoinc$(DLSUFFIX): $(top_builddir)/contrib/spi/autoinc$(DLSUFFIX)
        cp $< $@
 
-dummy_seclabel$(DLSUFFIX): $(top_builddir)/contrib/dummy_seclabel/dummy_seclabel$(DLSUFFIX)
+dummy_seclabel$(DLSUFFIX): $(top_builddir)/src/test/modules/dummy_seclabel/dummy_seclabel$(DLSUFFIX)
        cp $< $@
 
 $(top_builddir)/contrib/spi/refint$(DLSUFFIX): | submake-contrib-spi ;
 
 $(top_builddir)/contrib/spi/autoinc$(DLSUFFIX): | submake-contrib-spi ;
 
-$(top_builddir)/contrib/dummy_seclabel/dummy_seclabel$(DLSUFFIX): | submake-contrib-dummy_seclabel ;
+$(top_builddir)/src/test/modules/dummy_seclabel/dummy_seclabel$(DLSUFFIX): | submake-dummy_seclabel ;
 
 submake-contrib-spi:
        $(MAKE) -C $(top_builddir)/contrib/spi
 
-submake-contrib-dummy_seclabel:
-       $(MAKE) -C $(top_builddir)/contrib/dummy_seclabel
+submake-dummy_seclabel:
+       $(MAKE) -C $(top_builddir)/src/test/modules/dummy_seclabel
 
-.PHONY: submake-contrib-spi submake-contrib-dummy_seclabel
+.PHONY: submake-contrib-spi submake-dummy_seclabel
 
 # Tablespace setup