summaryrefslogtreecommitdiffstats
path: root/lib/common/tests/schemas/Makefile.am
diff options
context:
space:
mode:
Diffstat (limited to 'lib/common/tests/schemas/Makefile.am')
-rw-r--r--lib/common/tests/schemas/Makefile.am88
1 files changed, 88 insertions, 0 deletions
diff --git a/lib/common/tests/schemas/Makefile.am b/lib/common/tests/schemas/Makefile.am
new file mode 100644
index 0000000..ba0f805
--- /dev/null
+++ b/lib/common/tests/schemas/Makefile.am
@@ -0,0 +1,88 @@
+#
+# Copyright 2023-2024 the Pacemaker project contributors
+#
+# The version control history for this file may have further details.
+#
+# This source code is licensed under the GNU General Public License version 2
+# or later (GPLv2+) WITHOUT ANY WARRANTY.
+#
+
+include $(top_srcdir)/mk/tap.mk
+include $(top_srcdir)/mk/unittest.mk
+
+CFLAGS += -DPCMK__TEST_SCHEMA_DIR='"$(abs_builddir)/schemas"'
+
+# Add "_test" to the end of all test program names to simplify .gitignore.
+
+# These tests share a schema subdirectory
+SHARED_SCHEMA_TESTS = pcmk__cmp_schemas_by_name_test \
+ crm_schema_init_test \
+ pcmk__build_schema_xml_node_test \
+ pcmk__get_schema_test \
+ pcmk__schema_files_later_than_test
+
+# This test has its own schema directory
+FIND_X_0_SCHEMA_TEST = pcmk__find_x_0_schema_test
+
+check_PROGRAMS = $(SHARED_SCHEMA_TESTS) $(FIND_X_0_SCHEMA_TEST)
+
+TESTS = $(check_PROGRAMS)
+
+$(SHARED_SCHEMA_TESTS): setup-schema-dir
+
+$(FIND_X_0_SCHEMA_TEST): setup-find_x_0-schema-dir
+
+# Set up a temporary schemas/ directory containing only some of the full set of
+# pacemaker schema files. This lets us know exactly how many schemas are present,
+# allowing us to write tests without having to make changes when new schemas are
+# added.
+#
+# This directory contains the following:
+#
+# * pacemaker-next.rng - Used to verify that this sorts before all versions
+# * upgrade-*.xsl - Required by various schema versions
+# * pacemaker-[0-9]*.rng - We're only pulling in 15 schemas, which is enough
+# to get everything through pacemaker-3.0.rng. This
+# includes 2.10, needed so we can check that versions
+# are compared as numbers instead of strings.
+# * other RNG files - This catches everything except the pacemaker-*rng
+# files. These files are included by the top-level
+# pacemaker-*rng files, so we need them for tests.
+# This will glob more than we need, but the extra ones
+# won't get in the way.
+
+LINK_FILES = $(abs_top_builddir)/xml/pacemaker-next.rng \
+ $(abs_top_builddir)/xml/upgrade-*.xsl
+ROOT_RNGS = $(shell ls -1v $(abs_top_builddir)/xml/pacemaker-[0-9]*.rng | head -15)
+INCLUDED_RNGS = $(shell ls -1 $(top_srcdir)/xml/*.rng | grep -v pacemaker-[0-9])
+
+# Most tests share a common, read-only schema directory
+.PHONY: setup-schema-dir
+setup-schema-dir:
+ $(MKDIR_P) schemas
+ ( cd schemas ; \
+ ln -sf $(LINK_FILES) . ; \
+ for f in $(ROOT_RNGS); do \
+ ln -sf $$f $$(basename $$f); \
+ done ; \
+ for f in $(INCLUDED_RNGS); do \
+ ln -sf ../$$f $$(basename $$f); \
+ done )
+
+# pcmk__find_x_0_schema_test moves schema files around, so it needs its
+# own directory, otherwise other tests run in parallel could fail.
+.PHONY: setup-find_x_0-schema-dir
+setup-find_x_0-schema-dir:
+ $(MKDIR_P) schemas/find_x_0
+ ( cd schemas/find_x_0 ; \
+ ln -sf $(LINK_FILES) . ; \
+ for f in $(ROOT_RNGS); do \
+ ln -sf $$f $$(basename $$f); \
+ done ; \
+ for f in $(INCLUDED_RNGS); do \
+ ln -sf ../$$f $$(basename $$f); \
+ done )
+
+.PHONY: clean-local
+clean-local:
+ -rm -rf schemas