diff --git a/.gitignore b/.gitignore index 25d1ca86d6..7515e5993b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,356 +1,354 @@ # # Copyright 2011-2023 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. # # Common conventions for files that should be ignored *~ *.bz2 *.diff *.orig *.patch *.rej *.sed *.swp *.tar.gz *.tgz \#* .\#* logs # libtool artifacts *.la *.lo .libs libltdl libtool libtool.m4 ltdl.m4 /m4/argz.m4 /m4/ltargz.m4 /m4/ltoptions.m4 /m4/ltsugar.m4 /m4/ltversion.m4 /m4/lt~obsolete.m4 # autotools artifacts .deps .dirstamp Makefile Makefile.in aclocal.m4 autoconf autoheader autom4te.cache/ automake /confdefs.h config.log config.status configure /conftest* # gettext artifacts /ABOUT-NLS /m4/codeset.m4 /m4/fcntl-o.m4 /m4/gettext.m4 /m4/glibc2.m4 /m4/glibc21.m4 /m4/iconv.m4 /m4/intdiv0.m4 /m4/intl.m4 /m4/intldir.m4 /m4/intlmacosx.m4 /m4/intmax.m4 /m4/inttypes-pri.m4 /m4/inttypes_h.m4 /m4/lcmessage.m4 /m4/lib-ld.m4 /m4/lib-link.m4 /m4/lib-prefix.m4 /m4/lock.m4 /m4/longlong.m4 /m4/nls.m4 /m4/po.m4 /m4/printf-posix.m4 /m4/progtest.m4 /m4/size_max.m4 /m4/stdint_h.m4 /m4/threadlib.m4 /m4/uintmax_t.m4 /m4/visibility.m4 /m4/wchar_t.m4 /m4/wint_t.m4 /m4/xsize.m4 /po/*.gmo /po/*.header /po/*.pot /po/*.sin /po/Makefile.in.in /po/Makevars.template /po/POTFILES /po/Rules-quot /po/stamp-po # configure targets /agents/ocf/ClusterMon /agents/ocf/Dummy /agents/ocf/HealthCPU /agents/ocf/HealthIOWait /agents/ocf/HealthSMART /agents/ocf/Stateful /agents/ocf/SysInfo /agents/ocf/attribute /agents/ocf/controld /agents/ocf/ifspeed /agents/ocf/ping /agents/ocf/remote /agents/stonith/fence_legacy /agents/stonith/fence_watchdog /cts/benchmark/clubench /cts/cluster_test /cts/cts /cts/cts-attrd /cts/cts-cli /cts/cts-exec /cts/cts-fencing /cts/cts-lab /cts/cts-regression /cts/cts-scheduler /cts/lab/CTS.py /cts/support/LSBDummy /cts/support/cts-support /cts/support/fence_dummy /cts/support/pacemaker-cts-dummyd /cts/support/pacemaker-cts-dummyd@.service /daemons/execd/pacemaker_remote /daemons/execd/pacemaker_remote.service /daemons/fenced/fence_legacy /daemons/fenced/fence_watchdog /daemons/pacemakerd/pacemaker.combined.upstart /daemons/pacemakerd/pacemaker.service /daemons/pacemakerd/pacemaker.upstart /doc/Doxyfile /etc/init.d/pacemaker /etc/logrotate.d/pacemaker /etc/sysconfig/pacemaker /include/config.h /include/config.h.in /include/crm_config.h /maint/bumplibs /python/pacemaker/buildoptions.py /python/setup.py /tools/cluster-clean /tools/cluster-helper /tools/cluster-init /tools/cibsecret /tools/crm_error /tools/crm_failcount /tools/crm_master /tools/crm_mon.service /tools/crm_mon.upstart /tools/crm_report /tools/crm_rule /tools/crm_standby /tools/pcmk_simtimes /tools/report.collector /tools/report.common /xml/rng-helper # Compiled targets and intermediary files *.o *.pc *.pyc /daemons/attrd/pacemaker-attrd /daemons/based/pacemaker-based /daemons/controld/pacemaker-controld /daemons/execd/cts-exec-helper /daemons/execd/pacemaker-execd /daemons/execd/pacemaker-remoted /daemons/fenced/cts-fence-helper /daemons/fenced/pacemaker-fenced /daemons/pacemakerd/pacemakerd /daemons/schedulerd/pacemaker-schedulerd /devel/scratch /lib/gnu/stdalign.h /tools/attrd_updater /tools/cibadmin /tools/crmadmin /tools/crm_attribute /tools/crm_diff /tools/crm_mon /tools/crm_node /tools/crm_resource /tools/crm_shadow /tools/crm_simulate /tools/crm_ticket /tools/crm_verify /tools/iso8601 /tools/stonith_admin # Generated XML schema files /xml/crm_mon.rng /xml/pacemaker*.rng /xml/versions.rng /xml/api/api-result*.rng # Working directories for make dist and make export /pacemaker-[a-f0-9][a-f0-9][a-f0-9][a-f0-9][a-f0-9][a-f0-9][a-f0-9] # Documentation build targets and intermediary files *.7 *.7.xml *.7.html *.8 *.8.xml *.8.html GPATH GRTAGS GTAGS TAGS /daemons/fenced/pacemaker-fenced.xml /daemons/schedulerd/pacemaker-schedulerd.xml /doc/.ABI-build /doc/HTML /doc/abi_dumps /doc/abi-check /doc/api/ /doc/compat_reports /doc/crm_fencing.html /doc/sphinx/*/_build /doc/sphinx/*/conf.py /doc/sphinx/*/generated /doc/sphinx/build-2.1.txt /doc/sphinx/shared/images/*.png # Test artifacts (from unit tests, regression tests, static analysis, etc.) *.coverity *.gcda *.gcno coverity-* pacemaker_*.info /coverage /cppcheck.out /cts/scheduler/*.ref /cts/scheduler/*.up /cts/scheduler/*.up.err /cts/scheduler/bug-rh-1097457.log /cts/scheduler/bug-rh-1097457.trs /cts/scheduler/shadow.* /cts/test-suite.log /lib/*/tests/*/*.log /lib/*/tests/*/*_test /lib/*/tests/*/*.trs /lib/common/tests/schemas/schemas /xml/test-*/*.up /xml/test-*/*.up.err -/xml/assets/*.rng -/xml/assets/diffview.js -/xml/assets/xmlcatalog /test/_test_file.c # Packaging artifacts *.rpm /pacemaker.spec /rpm/[A-LN-Z]* /rpm/build.counter /rpm/mock # Project maintainer artifacts /maint/gnulib /maint/mocked/based /maint/testcc_helper.cc /maint/testcc_*_h # Formerly built files (helps when jumping back and forth in checkout) /.ABI-build /Doxyfile /HTML /abi_dumps /abi-check /agents/ocf/o2cb /build.counter /compat_reports /compile /cts/.regression.failed.diff /attrd /cib /config.guess /config.sub /coverage.sh /crmd /cts/CTS.py /cts/CTSlab.py /cts/CTSvars.py /cts/HBDummy /cts/LSBDummy /cts/OCFIPraTest.py /cts/cts-coverage /cts/cts-log-watcher /cts/cts-support /cts/fence_dummy /cts/lab/CTSlab.py /cts/lab/CTSvars.py /cts/lab/OCFIPraTest.py /cts/lab/cluster_test /cts/lab/cts /cts/lab/cts-log-watcher /cts/lxc_autogen.sh /cts/pacemaker-cts-dummyd /cts/pacemaker-cts-dummyd@.service /daemons/based/cibmon /daemons/fenced/fence_legacy /daemons/fenced/fence_watchdog /daemons/pacemakerd/pacemaker /depcomp /doc/*.build /doc/*/en-US/Ap-*.xml /doc/*/en-US/Ch-*.xml /doc/*/publican.cfg /doc/*/publish /doc/*/tmp/** /doc/Clusters_from_Scratch.txt /doc/Pacemaker_Explained.txt /doc/acls.html /doc/publican-catalog* /doc/shared/en-US/*.xml /doc/shared/en-US/images/pcmk-*.png /doc/shared/en-US/images/Policy-Engine-*.png /extra/*/* /fencing /include/stamp-* /install-sh /lib/common/md5.c /lib/common/tests/flags/pcmk__clear_flags_as /lib/common/tests/flags/pcmk__set_flags_as /lib/common/tests/flags/pcmk_all_flags_set /lib/common/tests/flags/pcmk_any_flags_set /lib/common/tests/operations/parse_op_key /lib/common/tests/strings/pcmk__btoa /lib/common/tests/strings/pcmk__parse_ll_range /lib/common/tests/strings/pcmk__scan_double /lib/common/tests/strings/pcmk__str_any_of /lib/common/tests/strings/pcmk__strcmp /lib/common/tests/strings/pcmk__char_in_any_str /lib/common/tests/utils/pcmk_str_is_infinity /lib/common/tests/utils/pcmk_str_is_minus_infinity /lib/gnu/libgnu.a /lib/pengine/tests/rules/ /lrmd /ltmain.sh /mcp /missing /mock /pacemaker-*.spec /pengine /py-compile /scratch /tools/cluster-init /test-driver +/xml/assets /xml/crm.dtd /xml/version-diff.sh ylwrap diff --git a/xml/Makefile.am b/xml/Makefile.am index 5d3b0f358a..321fa09f71 100644 --- a/xml/Makefile.am +++ b/xml/Makefile.am @@ -1,287 +1,286 @@ # # Copyright 2004-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/common.mk noarch_pkgconfig_DATA = $(builddir)/pacemaker-schemas.pc # Pacemaker has 3 schemas: the CIB schema, the API schema (for command-line # tool XML output), and a legacy schema for crm_mon --as-xml. # # See README.md for details on updating CIB schema files (API is similar) # The CIB and crm_mon schemas are installed directly in CRM_SCHEMA_DIRECTORY # for historical reasons, while the API schema is installed in a subdirectory. APIdir = $(CRM_SCHEMA_DIRECTORY)/api CIBdir = $(CRM_SCHEMA_DIRECTORY) MONdir = $(CRM_SCHEMA_DIRECTORY) basexsltdir = $(CRM_SCHEMA_DIRECTORY)/base dist_basexslt_DATA = $(srcdir)/base/access-render-2.xsl # Extract a sorted list of available numeric schema versions # from filenames like NAME-MAJOR[.MINOR][.MINOR-MINOR].rng numeric_versions = $(shell ls -1 $(1) \ | sed -n -e 's/^.*-\([0-9][0-9.]*\).rng$$/\1/p' \ | sort -u -t. -k 1,1n -k 2,2n -k 3,3n) # @COMPAT: pacemaker-next is deprecated since 2.1.5 version_pairs = $(join \ $(1),$(addprefix \ -,$(wordlist \ 2,$(words $(1)),$(1) \ ) next \ ) \ ) version_pairs_last = $(wordlist \ $(words \ $(wordlist \ 2,$(1),$(2) \ ) \ ),$(1),$(2) \ ) # NOTE: All files in API_request_base, CIB_cfg_base, API_base, and CIB_base # need to start with a unique prefix. These variables all get iterated over # and globbed, and two files starting with the same prefix will cause # problems. # Names of API schemas that form the choices for pacemaker-result content API_request_base = command-output \ crm_attribute \ crm_error \ crm_mon \ crm_node \ crm_resource \ crm_rule \ crm_shadow \ crm_simulate \ crm_ticket \ crmadmin \ digests \ iso8601 \ pacemakerd \ stonith_admin \ version # Names of CIB schemas that form the choices for cib/configuration content CIB_cfg_base = options \ nodes \ resources \ constraints \ fencing \ acls \ tags \ alerts # Names of all schemas (including top level and those included by others) API_base = $(API_request_base) \ any-element \ failure \ fence-event \ generic-list \ instruction \ item \ node-attrs \ node-history \ nodes \ ocf-ra \ options \ patchset \ resources \ status \ subprocess-output \ ticket CIB_base = cib \ $(CIB_cfg_base) \ status \ score \ rule \ nvset # Static schema files and transforms (only CIB has transforms) # # This is more complicated than it should be due to the need to support # VPATH builds and "make distcheck". We need the absolute paths for reliable # substitution back and forth, and relative paths for distributed files. API_abs_files = $(foreach base,$(API_base),$(wildcard $(abs_srcdir)/api/$(base)-*.rng)) CIB_abs_files = $(foreach base,$(CIB_base),$(wildcard $(abs_srcdir)/$(base).rng $(abs_srcdir)/$(base)-*.rng)) CIB_abs_xsl = $(abs_srcdir)/upgrade-1.3.xsl \ $(abs_srcdir)/upgrade-2.10.xsl \ $(wildcard $(abs_srcdir)/upgrade-*enter.xsl) \ $(wildcard $(abs_srcdir)/upgrade-*leave.xsl) MON_abs_files = $(abs_srcdir)/crm_mon.rng API_files = $(foreach base,$(API_base),$(wildcard $(srcdir)/api/$(base)-*.rng)) CIB_files = $(foreach base,$(CIB_base),$(wildcard $(srcdir)/$(base).rng $(srcdir)/$(base)-*.rng)) CIB_xsl = $(srcdir)/upgrade-1.3.xsl \ $(srcdir)/upgrade-2.10.xsl \ $(wildcard $(srcdir)/upgrade-*enter.xsl) \ $(wildcard $(srcdir)/upgrade-*leave.xsl) MON_files = $(srcdir)/crm_mon.rng # Sorted lists of all numeric schema versions API_numeric_versions = $(call numeric_versions,${API_files}) CIB_numeric_versions = $(call numeric_versions,${CIB_files}) MON_numeric_versions = $(call numeric_versions,$(wildcard $(srcdir)/api/crm_mon*.rng)) # The highest numeric schema version API_max ?= $(lastword $(API_numeric_versions)) CIB_max ?= $(lastword $(CIB_numeric_versions)) MON_max ?= $(lastword $(MON_numeric_versions)) # Sorted lists of all schema versions (including "next") # @COMPAT: pacemaker-next is deprecated since 2.1.5 API_versions = next $(API_numeric_versions) CIB_versions = next $(CIB_numeric_versions) # Build tree locations of static schema files and transforms (for VPATH builds) API_build_copies = $(foreach f,$(API_abs_files),$(subst $(abs_srcdir),$(abs_builddir),$(f))) CIB_build_copies = $(foreach f,$(CIB_abs_files) $(CIB_abs_xsl),$(subst $(abs_srcdir),$(abs_builddir),$(f))) MON_build_copies = $(foreach f,$(MON_abs_files),$(subst $(abs_srcdir),$(abs_builddir),$(f))) # Dynamically generated schema files API_generated = api/api-result.rng $(foreach base,$(API_versions),api/api-result-$(base).rng) CIB_generated = pacemaker.rng \ $(foreach base,$(CIB_versions),pacemaker-$(base).rng) \ versions.rng MON_generated = crm_mon.rng CIB_version_pairs = $(call version_pairs,${CIB_numeric_versions}) CIB_version_pairs_cnt = $(words ${CIB_version_pairs}) CIB_version_pairs_last = $(call version_pairs_last,${CIB_version_pairs_cnt},${CIB_version_pairs}) dist_API_DATA = $(API_files) dist_CIB_DATA = $(CIB_files) \ $(CIB_xsl) nodist_API_DATA = $(API_generated) nodist_CIB_DATA = $(CIB_generated) nodist_MON_DATA = $(MON_generated) EXTRA_DIST = README.md \ cibtr-2.rng \ context-of.xsl \ rng-helper \ ocf-meta2man.xsl \ regression.sh \ upgrade-2.10-roundtrip.xsl \ upgrade-detail.xsl \ xslt_cibtr-2.rng \ - assets \ test-2 \ test-2-enter \ test-2-leave \ test-2-roundtrip .PHONY: cib-versions cib-versions: @echo "Max: $(CIB_max)" @echo "Available: $(CIB_versions)" .PHONY: api-versions api-versions: @echo "Max: $(API_max)" @echo "Available: $(API_versions)" # Dynamically generated top-level API schema api/api-result.rng: api/api-result-$(API_max).rng $(AM_V_at)$(MKDIR_P) api # might not exist in VPATH build $(AM_V_SCHEMA)cp $(top_builddir)/xml/$< $@ api/api-result-%.rng: $(API_build_copies) rng-helper Makefile.am $(AM_V_SCHEMA)$(builddir)/rng-helper build_api_rng "$@" "$*" \ $(API_request_base) crm_mon.rng: api/crm_mon-$(MON_max).rng $(AM_V_at)echo '' > $@ $(AM_V_at)echo '> $@ $(AM_V_at)echo ' datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">' >> $@ $(AM_V_at)echo ' ' >> $@ $(AM_V_at)echo ' ' >> $@ $(AM_V_at)echo ' ' >> $@ $(AM_V_at)echo ' ' >> $@ $(AM_V_at)echo ' ' >> $@ $(AM_V_at)echo ' ' >> $@ $(AM_V_at)echo ' ' >> $@ $(AM_V_at)echo ' ' >> $@ $(AM_V_at)echo ' ' >> $@ $(AM_V_SCHEMA)echo '' >> $@ # Dynamically generated top-level CIB schema pacemaker.rng: pacemaker-$(CIB_max).rng $(AM_V_SCHEMA)cp $(top_builddir)/xml/$< $@ pacemaker-%.rng: $(CIB_build_copies) rng-helper Makefile.am $(AM_V_SCHEMA)$(builddir)/rng-helper build_cib_rng "$@" "$*" \ $(CIB_cfg_base) # Dynamically generated CIB schema listing all pacemaker versions # # @COMPAT none, pacemaker-0.6, pacemaker-0.7, pacemaker-1.1, and # transitional-0.6 are deprecated since 2.1.8, as is validate-with being # optional versions.rng: pacemaker-$(CIB_max).rng Makefile.am $(AM_V_at)echo '' > $@ $(AM_V_at)echo '' >> $@ $(AM_V_at)echo ' ' >> $@ $(AM_V_at)echo ' ' >> $@ $(AM_V_at)echo ' ' >> $@ $(AM_V_at)echo ' ' >> $@ $(AM_V_at)echo ' ' >> $@ $(AM_V_at)echo ' none' >> $@ $(AM_V_at)echo ' pacemaker-0.6' >> $@ $(AM_V_at)echo ' transitional-0.6' >> $@ $(AM_V_at)echo ' pacemaker-0.7' >> $@ $(AM_V_at)echo ' pacemaker-1.1' >> $@ $(AM_V_at)for rng in $(CIB_versions); do echo " pacemaker-$$rng" >> $@; done $(AM_V_at)echo ' ' >> $@ $(AM_V_at)echo ' ' >> $@ $(AM_V_at)echo ' ' >> $@ $(AM_V_at)echo ' ' >> $@ $(AM_V_at)echo ' ' >> $@ $(AM_V_at)echo ' ' >> $@ $(AM_V_at)echo ' ' >> $@ $(AM_V_at)echo ' ' >> $@ $(AM_V_SCHEMA)echo '' >> $@ .PHONY: diff diff: rng-helper @echo "# Comparing changes in + since $(CIB_max)" @$(builddir)/rng-helper diff ${CIB_version_pairs_last} .PHONY: fulldiff fulldiff: rng-helper @echo "# Comparing all changes across all the subsequent increments" @$(builddir)/rng-helper diff ${CIB_version_pairs} CLEANFILES = $(API_generated) \ $(CIB_generated) \ $(MON_generated) # Remove pacemaker schema files generated by *any* source version. This allows # "make -C xml clean" to have the desired effect when checking out an earlier # revision in a source tree. .PHONY: clean-local clean-local: if [ "x$(srcdir)" != "x$(builddir)" ]; then \ rm -f $(API_build_copies) $(CIB_build_copies) $(MON_build_copies); \ fi rm -f $(builddir)/pacemaker-[0-9]*.[0-9]*.rng # Enable ability to use $@ in prerequisite .SECONDEXPANSION: # For VPATH builds, copy the static schema files into the build tree $(API_build_copies) $(CIB_build_copies) $(MON_build_copies): $$(subst $(abs_builddir),$(srcdir),$$(@)) $(AM_V_GEN)if [ "x$(srcdir)" != "x$(builddir)" ]; then \ $(MKDIR_P) "$(dir $(@))"; \ cp "$(<)" "$(@)"; \ fi diff --git a/xml/assets/upgrade-2.10-htmldiff.xsl b/xml/assets/upgrade-2.10-htmldiff.xsl deleted file mode 100644 index 175bdb20c4..0000000000 --- a/xml/assets/upgrade-2.10-htmldiff.xsl +++ /dev/null @@ -1,358 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <xsl:text>upgrade-2.10 on-the-fly in-browser transformation</xsl:text> - - - - - - -

test

-

- Using upgrade-2.10 on-the-fly in-browser transformation - - [ - previous - and - next, or use arrows - ] - -

-

- Differences highlight view to be loaded here. -

-

Diagnostics

-

- Open JS console - (e.g. Ctrl + Shift + J, focusing JS + log combo) - - to check the actual messages from the in-browser transformation match the baseline: - -

-

- Expected diagnostic messages to be loaded here. -

-

Debugging

-

- These are raw data (beware, already chewed with the - view-source - transformation, hence not very suitable for copying) entering - the differential generating processs: -

-

- - original+ - original- - -
-

-          
-        
-

-

- - transformed+ - transformed- - -
-

-          
-        
-

-
-

- This generated page is based on the externally provided pacemaker XML - configuration file (CIB), @basename@, which is - the primary object of interest here. - But the rendered page wouldn't be possible without the actual - transformations and other auxiliary files that come with these notices: -
-

-

- - -
- -
diff --git a/xml/assets/view-source-library.xsl b/xml/assets/view-source-library.xsl deleted file mode 100644 index 8ac0dc2fa7..0000000000 --- a/xml/assets/view-source-library.xsl +++ /dev/null @@ -1,222 +0,0 @@ - - - - - - - http://www.w3.org/XML/1998/namespace - http://www.w3.org/2000/xmlns/ - http://www.w3.org/1999/xhtml - http://www.w3.org/2000/svg - http://www.w3.org/1998/Math/MathML - http://www.w3.org/1999/XSL/Transform - http://www.w3.org/1999/XSL/Format - http://www.w3.org/2005/SMIL21/Language - http://www.w3.org/1999/xlink - http://www.w3.org/2001/XMLSchema - http://www.w3.org/2001/XMLSchema-instance - http://www.w3.org/2001/xforms - http://www.w3.org/2001/XInclude - http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul - http://www.w3.org/1999/02/22-rdf-syntax-ns# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - : - - - - - - - - - - - - - - - - - highlight - - - - - - - - - - - - diff --git a/xml/assets/view-source-original.xsl b/xml/assets/view-source-original.xsl deleted file mode 100644 index 327e0d38bc..0000000000 --- a/xml/assets/view-source-original.xsl +++ /dev/null @@ -1,103 +0,0 @@ - - - - - - - - - - - - - - < - - - - - > - - - - </ - - > - - - - - - - < - - - - - /> - - - - - - - - - - - - - - - =" - - - - " - - - - - - - <? - - - - ?> - - - - - - - <!-- - - - - --> - - - - - - - - - - - - - diff --git a/xml/regression.sh b/xml/regression.sh index 7269779c47..5add49f822 100755 --- a/xml/regression.sh +++ b/xml/regression.sh @@ -1,782 +1,703 @@ #!/bin/sh # -# Copyright 2018-2020 the Pacemaker project contributors +# Copyright 2018-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. set -eu -test -d assets && test -d test-2 \ - || { echo 'Run me from source-tree-like location'; exit 1; } -# $1=reference (can be '-' for stdin), $2=investigated -# alt.: wdiff, colordiff, ... -DIFF=${DIFF:-diff} -DIFFOPTS=${DIFFOPTS--u} -DIFFPAGER=${DIFFPAGER:-less -LRX} -# $1=schema, $2=validated -# alt.: jing -i -RNGVALIDATOR=${RNGVALIDATOR:-xmllint --noout --relaxng} -# $1=stylesheet, $2=source -# alt.: Xalan, saxon, sabcmd/Sablotron (note: only validates reliably with -B) -_xalan_wrapper() { - { ${_XSLTPROCESSOR} "$2" "$1" 2>&1 >&3 \ - | sed -e '/^Source tree node.*$/d' \ - -e 's|^XSLT message: \(.*\) (Occurred.*)|\1|'; } 3>&- 3>&1 >&2 -} -# Sablotron doesn't translate '-' file specification to stdin -# and limits the length of the output message -_sabcmd_wrapper() { - _sabw_sheet=${1:?} - _sabw_source=${2:?} - test "${_sabw_sheet}" != - || _sabw_sheet=/dev/stdin - test "${_sabw_source}" != - || _sabw_source=/dev/stdin - { ${_XSLTPROCESSOR} "${_sabw_sheet}" "${_sabw_source}" 2>&1 >&3 \ - | sed -e '/^Warning \[code:89\]/d' \ - -e 's|^ xsl:message (\(.*\))$|\1|'; } 3>&- 3>&1 >&2 -} -# filtered out message: https://bugzilla.redhat.com/show_bug.cgi?id=1577367 -_saxon_wrapper() { - { ${_XSLTPROCESSOR} "-xsl:$1" "-s:$2" -versionmsg:off 2>&1 >&3 \ - | sed -e '/^Cannot find CatalogManager.properties$/d'; } 3>&- 3>&1 >&2 -} -XSLTPROCESSOR=${XSLTPROCESSOR:-xsltproc --nonet} -_XSLTPROCESSOR=${XSLTPROCESSOR} -case "${XSLTPROCESSOR}" in -[Xx]alan*|*/[Xx]alan*) XSLTPROCESSOR=_xalan_wrapper;; -sabcmd*|*/sabcmd*) XSLTPROCESSOR=_sabcmd_wrapper;; -saxon*|*/saxon*) XSLTPROCESSOR=_saxon_wrapper;; -esac -HTTPPORT=${HTTPPORT:-8000} # Python's default -WEBBROWSER=${WEBBROWSER:-firefox} - -tests= # test* names (should go first) here will become preselected default + +if [ ! -d "test-2" ]; then + echo "$0 must be run from the xml subdirectory of a source tree" + exit 1 +fi + +DIFF="diff -u" +DIFF_PAGER="less -LRX" +RNG_VALIDATOR="xmllint --noout --relaxng" +XSLT_PROCESSOR="xsltproc --nonet" + +# Default tests +tests="test2to3 test2to3enter test2to3leave test2to3roundtrip cts_scheduler" # # commons # emit_result() { - _er_howmany=${1:?} # how many errors (0/anything else incl. strings) - _er_subject=${2:?} - _er_prefix=${3-} - - test -z "${_er_prefix}" || _er_prefix="${_er_prefix}: " - - if test "${_er_howmany}" = 0; then - printf "%s%s finished OK\n" "${_er_prefix}" "${_er_subject}" - else - printf "%s%s encountered ${_er_howmany} errors\n" \ - "${_er_prefix}" "${_er_subject}" - fi + _er_howmany=${1:?} # how many errors (0/anything else incl. strings) + _er_subject=${2:?} + _er_prefix=${3-} + + if [ -n "$_er_prefix" ]; then + _er_prefix="${_er_prefix}: " + fi + + if [ "$_er_howmany" = "0" ]; then + printf "%s%s finished OK\n" "${_er_prefix}" "${_er_subject}" + else + printf "%s%s encountered ${_er_howmany} errors\n" \ + "${_er_prefix}" "${_er_subject}" + fi } emit_error() { - _ee_msg=${1:?} - printf "%s\n" "${_ee_msg}" >&2 + _ee_msg=${1:?} + printf "%s\n" "${_ee_msg}" >&2 } # returns 1 + floor of base 2 logaritm for _lo0r_i in 1...255, # or 0 for _lo0r_i = 0 log2_or_0_return() { - _lo0r_i=${1:?} - return $(((!(_lo0r_i >> 1) && _lo0r_i) * 1 \ + _lo0r_i=${1:?} + return $(((!(_lo0r_i >> 1) && _lo0r_i) * 1 \ + (!(_lo0r_i >> 2) && _lo0r_i & (1 << 1)) * 2 \ + (!(_lo0r_i >> 3) && _lo0r_i & (1 << 2)) * 3 \ + (!(_lo0r_i >> 4) && _lo0r_i & (1 << 3)) * 4 \ + (!(_lo0r_i >> 5) && _lo0r_i & (1 << 4)) * 5 \ + (!(_lo0r_i >> 6) && _lo0r_i & (1 << 5)) * 6 \ + (!(_lo0r_i >> 7) && _lo0r_i & (1 << 6)) * 7 \ + !!(_lo0r_i >> 7) * 7 )) } # rough addition of two base 2 logarithms log2_or_0_add() { - _lo0a_op1=${1:?} - _lo0a_op2=${2:?} - - if test ${_lo0a_op1} -gt ${_lo0a_op2}; then - return ${_lo0a_op1} - elif test ${_lo0a_op2} -gt ${_lo0a_op1}; then - return ${_lo0a_op2} - elif test ${_lo0a_op1} -gt 0; then - return $((_lo0a_op1 + 1)) - else - return ${_lo0a_op1} - fi + _lo0a_op1=${1:?} + _lo0a_op2=${2:?} + + if [ "$_lo0a_op1" -gt "$_lo0a_op2" ]; then + return ${_lo0a_op1} + elif [ "$_lo0a_op2" -gt "$_lo0a_op1" ]; then + return ${_lo0a_op2} + elif [ "$_lo0a_op1" -gt 0 ]; then + return $((_lo0a_op1 + 1)) + else + return ${_lo0a_op1} + fi } # # test phases # -# stdin: input file per line -test_browser() { - _tb_cleanref=0 - _tb_serverpid= - - while test $# -gt 0; do - case "$1" in - -r) _tb_cleanref=1;; - esac - shift - done - - if ! read _tb_first; then - return 1 - fi - cat >/dev/null 2>/dev/null # read out the rest - - test -f assets/diffview.js \ - || curl -SsLo assets/diffview.js \ - 'https://raw.githubusercontent.com/prettydiff/prettydiff/2.2.8/lib/diffview.js' - - { which python3 >/dev/null 2>/dev/null \ - && { python3 -m http.server "${HTTPPORT}" -b 127.0.0.1 \ - || emit_error "Python3 HTTP server fail"; return; } \ - || emit_error 'Cannot run Python-based HTTP server' ; } & - _tb_serverpid=$! - ${WEBBROWSER} "http://localhost:${HTTPPORT}/${_tb_first}" & - printf "When finished, just press Ctrl+C or kill %d, please\n" \ - "${_tb_serverpid}" - wait - - test "${_tb_cleanref}" -eq 0 || rm -f assets/diffview.js -} - # -r ... whether to remove referential files as well # stdin: input file per line test_cleaner() { - _tc_cleanref=0 - - while test $# -gt 0; do - case "$1" in - -r) _tc_cleanref=1;; - esac - shift - done - - while read _tc_origin; do - _tc_origin=${_tc_origin%.*} - rm -f "${_tc_origin}.up" "${_tc_origin}.up.err" - rm -f "$(dirname "${_tc_origin}")/.$(basename "${_tc_origin}").up" - test ${_tc_cleanref} -eq 0 \ - || rm -f "${_tc_origin}.ref" "${_tc_origin}.ref.err" - done -} - -# -a= ... action modifier to derive template name from (if any; enter/leave) -# -o= ... which conventional version to deem as the transform origin -test_selfcheck() { - _tsc_cleanref=0 - _tsc_ret=0 - _tsc_action= - _tsc_template= - _tsc_validator= - - while test $# -gt 0; do - case "$1" in - -r) _tsc_cleanref=1;; - -a=*) _tsc_action="${1#-a=}";; - -o=*) _tsc_template="${1#-o=}";; - esac - shift - done - _tsc_validator="${_tsc_template:?}" - _tsc_validator="cibtr-${_tsc_validator%%.*}.rng" - _tsc_action=${_tsc_action:+-${_tsc_action}} - _tsc_template="upgrade-${_tsc_template}${_tsc_action}.xsl" - - # alt. https://relaxng.org/relaxng.rng - _tsc_rng_relaxng=https://raw.githubusercontent.com/relaxng/relaxng.org/master/relaxng.rng - # alt. https://github.com/ndw/xslt-relax-ng/blob/master/1.0/xslt10.rnc - _tsc_rng_xslt=https://raw.githubusercontent.com/relaxng/jing-trang/master/eg/xslt.rng - - case "${RNGVALIDATOR}" in - *xmllint*) - test -f "assets/$(basename "${_tsc_rng_relaxng}")" \ - || curl -SsLo "assets/$(basename "${_tsc_rng_relaxng}")" \ - "${_tsc_rng_relaxng}" - test -f "assets/$(basename "${_tsc_rng_xslt}")" \ - || curl -SsLo "assets/$(basename "${_tsc_rng_xslt}")" \ - "${_tsc_rng_xslt}" - test -f assets/xmlcatalog || >assets/xmlcatalog cat <<-EOF - - - - -EOF - RNGVALIDATOR=\ -"eval env \"XML_CATALOG_FILES=/etc/xml/catalog $(pwd)/assets/xmlcatalog\" -${RNGVALIDATOR}" - # not needed - #_tsc_rng_relaxng="assets/$(basename "${_tsc_rng_relaxng}")" - #_tsc_rng_xslt="assets/$(basename "${_tsc_rng_xslt}")" - ;; - esac - - # check schema (sub-grammar) for custom transformation mapping alone; - if test -z "${_tsc_action}" \ - && ! ${RNGVALIDATOR} "${_tsc_rng_relaxng}" "${_tsc_validator}"; then - _tsc_ret=$((_tsc_ret + 1)) - fi - - # check the overall XSLT per the main grammar + said sub-grammar; - test -f "${_tsc_validator}" && _tsc_validator="xslt_${_tsc_validator}" \ - || _tsc_validator="${_tsc_rng_xslt}" - if ! ${RNGVALIDATOR} "${_tsc_validator}" "${_tsc_template}"; then - _tsc_ret=$((_tsc_ret + 1)) - fi - - test "${_tsc_cleanref}" -eq 0 \ - || rm -f assets/relaxng.rng assets/xslt.rng assets/xmlcatalog - - log2_or_0_return ${_tsc_ret} + _tc_cleanref=0 + + while [ $# -gt 0 ]; do + case "$1" in + -r) _tc_cleanref=1;; + esac + shift + done + + while read _tc_origin; do + _tc_origin=${_tc_origin%.*} + rm -f "${_tc_origin}.up" "${_tc_origin}.up.err" + rm -f "$(dirname "${_tc_origin}")/.$(basename "${_tc_origin}").up" + + if [ "$_tc_cleanref" -eq 1 ]; then + rm -f "${_tc_origin}.ref" "${_tc_origin}.ref.err" + fi + done } test_explanation() { - _tsc_template= + _tsc_template= + + while [ $# -gt 0 ]; do + case "$1" in + -o=*) _tsc_template="upgrade-${1#-o=}.xsl";; + esac + shift + done - while test $# -gt 0; do - case "$1" in - -o=*) _tsc_template="upgrade-${1#-o=}.xsl";; - esac - shift - done + ${XSLT_PROCESSOR} upgrade-detail.xsl "${_tsc_template}" +} - ${XSLTPROCESSOR} upgrade-detail.xsl "${_tsc_template}" +cleanup_module_error() { + # Work around a libxml2 bug. At least as of libxslt-1.1.41 and + # libxml2-2.10.4, if the stylesheet contains a user-defined top-level + # element (that is, one with a namespace other than the XSL namespace), + # libxslt tries to load the namespace URI as an XML module. If this fails, + # libxml2 logs a "module error: failed to open ..." message. + # + # This appears to be fixed in libxml2 v2.13 with commit ecb4c9fb. + sed "/module error/d" "$1" > "$1.new" + mv -- "$1.new" "$1" } # stdout: filename of the transformed file test_runner_upgrade() { - _tru_template=${1:?} - _tru_source=${2:?} # filename - _tru_mode=${3:?} # extra modes wrt. "referential" outcome, see below - - _tru_ref="${_tru_source%.*}.ref" - { test "$((_tru_mode & (1 << 0)))" -ne 0 \ - || test -f "${_tru_ref}.err"; } \ - && _tru_ref_err="${_tru_ref}.err" || _tru_ref_err=/dev/null - _tru_target="${_tru_source%.*}.up" - _tru_target_err="${_tru_target}.err" - - if test $((_tru_mode & (1 << 2))) -eq 0; then - ${XSLTPROCESSOR} "${_tru_template}" "${_tru_source}" \ - > "${_tru_target}" 2> "${_tru_target_err}" \ - || { _tru_ref=$?; echo "${_tru_target_err}" - return ${_tru_ref}; } - else - # when -B (deblanked outcomes handling) requested, we: - # - drop blanks from the source XML - # (effectively emulating pacemaker handling) - # - re-drop blanks from the XSLT outcome, - # which is compared with referential outcome - # processed with even greedier custom deblanking - # (extraneous inter-element whitespace like blank - # lines will not get removed otherwise, see lower) - xmllint --noblanks "${_tru_source}" \ - | ${XSLTPROCESSOR} "${_tru_template}" - \ - > "${_tru_target}" 2> "${_tru_target_err}" \ - || { _tru_ref=$?; echo "${_tru_target_err}" - return ${_tru_ref}; } - # reusing variable no longer needed - _tru_template="$(dirname "${_tru_target}")" - _tru_template="${_tru_template}/.$(basename "${_tru_target}")" - mv "${_tru_target}" "${_tru_template}" - ${XSLTPROCESSOR} - "${_tru_template}" > "${_tru_target}" <<-EOF - - - - - - - - - - - + _tru_template=${1:?} + _tru_source=${2:?} # filename + _tru_mode=${3:?} # extra modes wrt. "referential" outcome, see below + + _tru_ref="${_tru_source%.*}.ref" + + if [ "$((_tru_mode & (1 << 0)))" -ne 0 ] || [ -f "${_tru_ref}.err" ]; then + _tru_ref_err="${_tru_ref}.err" + else + _tru_ref_err=/dev/null + fi + + _tru_proc_rc=0 + _tru_diff_rc=0 + _tru_target="${_tru_source%.*}.up" + _tru_target_err="${_tru_target}.err" + + if [ "$((_tru_mode & (1 << 2)))" -eq 0 ]; then + ${XSLT_PROCESSOR} "${_tru_template}" "${_tru_source}" \ + > "${_tru_target}" 2> "${_tru_target_err}" \ + || _tru_proc_rc=$? + + cleanup_module_error "$_tru_target_err" + + if [ "$_tru_proc_rc" -ne 0 ]; then + echo "$_tru_target_err" + return "$_tru_proc_rc" + fi + else + # when -B (deblanked outcomes handling) requested, we: + # - drop blanks from the source XML + # (effectively emulating pacemaker handling) + # - re-drop blanks from the XSLT outcome, + # which is compared with referential outcome + # processed with even greedier custom deblanking + # (extraneous inter-element whitespace like blank + # lines will not get removed otherwise, see lower) + xmllint --noblanks "${_tru_source}" \ + | ${XSLT_PROCESSOR} "${_tru_template}" - \ + > "${_tru_target}" 2> "${_tru_target_err}" \ + || _tru_proc_rc=$? + + cleanup_module_error "$_tru_target_err" + + if [ "$_tru_proc_rc" -ne 0 ]; then + echo "$_tru_target_err" + return "$_tru_proc_rc" + fi + + # reusing variable no longer needed + _tru_template="$(dirname "${_tru_target}")" + _tru_template="${_tru_template}/.$(basename "${_tru_target}")" + mv "${_tru_target}" "${_tru_template}" + ${XSLT_PROCESSOR} - "${_tru_template}" > "${_tru_target}" < + + + + + + + + + + EOF - fi - - # only respond with the flags except for "-B", i.e., when both: - # - _tru_mode non-zero - # - "-B" in _tru_mode is zero (hence non-zero when flipped with XOR) - if test "$((_tru_mode * ((_tru_mode ^ (1 << 2)) & (1 << 2))))" -ne 0; then - if test $((_tru_mode & (1 << 0))) -ne 0; then - cp -a "${_tru_target}" "${_tru_ref}" - cp -a "${_tru_target_err}" "${_tru_ref_err}" - fi - if test $((_tru_mode & (1 << 1))) -ne 0; then - { "${DIFF}" ${DIFFOPTS} "${_tru_source}" "${_tru_ref}" \ - && printf '\n(files match)\n'; } | ${DIFFPAGER} >&2 - if test $? -ne 0; then - printf "\npager failure\n" >&2 - return 1 - fi - printf '\nIs comparison OK? ' >&2 - if read _tru_answer &2; return 1;; - esac - else - return 1 - fi - fi - elif test -f "${_tru_ref}" && test -e "${_tru_ref_err}"; then - { test "$((_tru_mode & (1 << 2)))" -eq 0 && cat "${_tru_ref}" \ - || ${XSLTPROCESSOR} - "${_tru_ref}" <<-EOF - - - - - - - - - - - + fi + + # only respond with the flags except for "-B", i.e., when both: + # - _tru_mode non-zero + # - "-B" in _tru_mode is zero (hence non-zero when flipped with XOR) + if [ "$((_tru_mode * ((_tru_mode ^ (1 << 2)) & (1 << 2))))" -ne 0 ]; then + if [ "$((_tru_mode & (1 << 0)))" -ne 0 ]; then + cp -a "${_tru_target}" "${_tru_ref}" + cp -a "${_tru_target_err}" "${_tru_ref_err}" + fi + if [ "$((_tru_mode & (1 << 1)))" -ne 0 ]; then + { ${DIFF} "${_tru_source}" "${_tru_ref}" \ + && printf '\n(files match)\n'; } | ${DIFF_PAGER} >&2 + if [ $? -ne 0 ]; then + printf "\npager failure\n" >&2 + return 1 + fi + printf '\nIs comparison OK? ' >&2 + if read _tru_answer &2; return 1;; + esac + else + return 1 + fi + fi + + elif [ -f "$_tru_ref" ] && [ -e "$_tru_ref_err" ]; then + if [ "$((_tru_mode & (1 << 2)))" -eq 0 ]; then + _output=$(cat "$_tru_ref") + else + _output=$($XSLT_PROCESSOR - "$_tru_ref" < + + + + + + + + + + EOF - } \ - | "${DIFF}" ${DIFFOPTS} - "${_tru_target}" >&2 \ - && "${DIFF}" ${DIFFOPTS} "${_tru_ref_err}" \ - "${_tru_target_err}" >&2 - if test $? -ne 0; then - emit_error "Outputs differ from referential ones" - echo "/dev/null" - return 1 - fi - else - emit_error "Referential file(s) missing: ${_tru_ref}" - echo "/dev/null" - return 1 - fi - - echo "${_tru_target}" +) + fi + + echo "$_output" | $DIFF - "$_tru_target" >&2 || _tru_diff_rc=$? + if [ "$_tru_diff_rc" -eq 0 ]; then + $DIFF "$_tru_ref_err" "$_tru_target_err" >&2 || _tru_diff_rc=$? + fi + if [ "$_tru_diff_rc" -ne 0 ]; then + emit_error "Outputs differ from referential ones" + echo "/dev/null" + return 1 + fi + else + emit_error "Referential file(s) missing: ${_tru_ref}" + echo "/dev/null" + return 1 + fi + + echo "${_tru_target}" } test_runner_validate() { - _trv_schema=${1:?} - _trv_target=${2:?} # filename + _trv_schema=${1:?} + _trv_target=${2:?} # filename - if ! ${RNGVALIDATOR} "${_trv_schema}" "${_trv_target}" \ - 2>/dev/null; then - ${RNGVALIDATOR} "${_trv_schema}" "${_trv_target}" - fi + if ! ${RNG_VALIDATOR} "${_trv_schema}" "${_trv_target}" \ + 2>/dev/null; then + ${RNG_VALIDATOR} "${_trv_schema}" "${_trv_target}" + fi } # -a= ... action modifier completing template name (e.g. 2.10-(enter|leave)) # -o= ... which conventional version to deem as the transform origin # -t= ... which conventional version to deem as the transform target # -B # -D # -G ... see usage # stdin: input file per line test_runner() { - _tr_mode=0 - _tr_ret=0 - _tr_action= - _tr_schema_o= - _tr_schema_t= - _tr_target= - _tr_template= - - while test $# -gt 0; do - case "$1" in - -a=*) _tr_action="${1#-a=}";; - -o=*) _tr_template="${1#-o=}" - _tr_schema_o="pacemaker-${1#-o=}.rng";; - -t=*) _tr_schema_t="pacemaker-${1#-t=}.rng";; - -G) _tr_mode=$((_tr_mode | (1 << 0)));; - -D) _tr_mode=$((_tr_mode | (1 << 1)));; - -B) _tr_mode=$((_tr_mode | (1 << 2)));; - esac - shift - done - _tr_template="upgrade-${_tr_action:-${_tr_template:?}}.xsl" - - if ! test -f "${_tr_schema_o:?}" || ! test -f "${_tr_schema_t:?}"; then - emit_error "Origin and/or target schema missing, rerun make" - return 1 - fi - - while read _tr_origin; do - printf '%-60s' "${_tr_origin}... " - - # pre-validate - if ! test_runner_validate "${_tr_schema_o}" "${_tr_origin}"; then - _tr_ret=$((_tr_ret + 1)); echo "E:pre-validate"; continue - fi - - # upgrade - if ! _tr_target=$(test_runner_upgrade "${_tr_template}" \ - "${_tr_origin}" "${_tr_mode}"); then - _tr_ret=$((_tr_ret + 1)); - test -n "${_tr_target}" || break - echo "E:upgrade" - test -s "${_tr_target}" \ - && { echo ---; cat "${_tr_target}" || :; echo ---; } - continue - fi - - # post-validate - if ! test_runner_validate "${_tr_schema_t}" "${_tr_target}"; then - _tr_ret=$((_tr_ret + 1)); echo "E:post-validate"; continue - fi - - echo "OK" - done - - log2_or_0_return ${_tr_ret} + _tr_mode=0 + _tr_ret=0 + _tr_action= + _tr_schema_o= + _tr_schema_t= + _tr_target= + _tr_template= + + while [ $# -gt 0 ]; do + case "$1" in + -a=*) _tr_action="${1#-a=}";; + -o=*) _tr_template="${1#-o=}" + _tr_schema_o="pacemaker-${1#-o=}.rng";; + -t=*) _tr_schema_t="pacemaker-${1#-t=}.rng";; + -G) _tr_mode=$((_tr_mode | (1 << 0)));; + -D) _tr_mode=$((_tr_mode | (1 << 1)));; + -B) _tr_mode=$((_tr_mode | (1 << 2)));; + esac + shift + done + _tr_template="upgrade-${_tr_action:-${_tr_template:?}}.xsl" + + if [ ! -f "${_tr_schema_o:?}" ] || [ ! -f "${_tr_schema_t:?}" ]; then + emit_error "Origin and/or target schema missing, rerun make" + return 1 + fi + + while read _tr_origin; do + printf '%-60s' "${_tr_origin}... " + + # pre-validate + if ! test_runner_validate "${_tr_schema_o}" "${_tr_origin}"; then + _tr_ret=$((_tr_ret + 1)); echo "E:pre-validate"; continue + fi + + # upgrade + if ! _tr_target=$(test_runner_upgrade "${_tr_template}" \ + "${_tr_origin}" "${_tr_mode}"); then + _tr_ret=$((_tr_ret + 1)); + if [ -z "$_tr_target" ]; then + break + fi + + echo "E:upgrade" + if [ -s "$_tr_target" ]; then + echo --- + cat "$_tr_target" || : + echo --- + fi + continue + fi + + # post-validate + if ! test_runner_validate "${_tr_schema_t}" "${_tr_target}"; then + _tr_ret=$((_tr_ret + 1)); echo "E:post-validate"; continue + fi + + echo "OK" + done + + log2_or_0_return ${_tr_ret} } # # particular test variations # -C -# -S # -X -# -W ... see usage # stdin: granular test specification(s) if any # test2to3() { - _t23_cleanopt= - _t23_pattern= - - while read _t23_spec; do - _t23_spec=${_t23_spec%.xml} - _t23_spec=${_t23_spec%\*} - _t23_pattern="${_t23_pattern} -name ${_t23_spec}*.xml -o" - done - test -z "${_t23_pattern}" || _t23_pattern="( ${_t23_pattern%-o} )" - case " $* " in *\ -r\ *) _t23_cleanopt=-r; esac - - find test-2 -name test-2 -o -type d -prune \ - -o -name '*.xml' ${_t23_pattern} -print | env LC_ALL=C sort \ - | { case " $* " in - *\ -C\ *) test_cleaner;; - *\ -S\ *) test_selfcheck -o=2.10 ${_t23_cleanopt};; - *\ -X\ *) test_explanation -o=2.10;; - *\ -W\ *) test_browser ${_t23_cleanopt};; - *) test_runner -o=2.10 -t=3.0 "$@" || return $?;; - esac; } + _t23_pattern= + + while read _t23_spec; do + _t23_spec=${_t23_spec%.xml} + _t23_spec=${_t23_spec%\*} + _t23_pattern="${_t23_pattern} -name ${_t23_spec}*.xml -o" + done + + if [ -n "$_t23_pattern" ]; then + _t23_pattern="( ${_t23_pattern%-o} )" + fi + + find test-2 -name test-2 -o -type d -prune \ + -o -name '*.xml' ${_t23_pattern} -print \ + | env LC_ALL=C sort \ + | { case " $* " in + *\ -C\ *) test_cleaner;; + *\ -X\ *) test_explanation -o=2.10;; + *) test_runner -o=2.10 -t=3.0 "$@" || return $?;; + esac; } } -tests="${tests} test2to3" test2to3enter() { - _t23e_cleanopt= - _t23e_pattern= - - while read _t23e_spec; do - _t23e_spec=${_t23e_spec%.xml} - _t23e_spec=${_t23e_spec%\*} - _t23e_pattern="${_t23e_pattern} -name ${_t23e_spec}*.xml -o" - done - test -z "${_t23e_pattern}" || _t23e_pattern="( ${_t23e_pattern%-o} )" - case " $* " in *\ -r\ *) _t23e_cleanopt=-r; esac - - find test-2-enter -name test-2-enter -o -type d -prune \ - -o -name '*.xml' ${_t23e_pattern} -print | env LC_ALL=C sort \ - | { case " $* " in - *\ -C\ *) test_cleaner;; - *\ -S\ *) test_selfcheck -a=enter -o=2.10 ${_t23e_cleanopt};; - *\ -W\ *) emit_result "not implemented" "option -W";; - *\ -X\ *) emit_result "not implemented" "option -X";; - *) test_runner -a=2.10-enter -o=2.10 -t=2.10 "$@" || return $?;; - esac; } + _t23e_pattern= + + while read _t23e_spec; do + _t23e_spec=${_t23e_spec%.xml} + _t23e_spec=${_t23e_spec%\*} + _t23e_pattern="${_t23e_pattern} -name ${_t23e_spec}*.xml -o" + done + + if [ -n "$_t23e_pattern" ]; then + _t23e_pattern="( ${_t23e_pattern%-o} )" + fi + + find test-2-enter -name test-2-enter -o -type d -prune \ + -o -name '*.xml' ${_t23e_pattern} -print \ + | env LC_ALL=C sort \ + | { case " $* " in + *\ -C\ *) test_cleaner;; + *\ -X\ *) emit_result "not implemented" "option -X";; + *) test_runner -a=2.10-enter -o=2.10 -t=2.10 "$@" || return $?;; + esac; } } -tests="${tests} test2to3enter" test2to3leave() { - _t23l_cleanopt= - _t23l_pattern= - - while read _t23l_spec; do - _t23l_spec=${_t23l_spec%.xml} - _t23l_spec=${_t23l_spec%\*} - _t23l_pattern="${_t23l_pattern} -name ${_t23l_spec}*.xml -o" - done - test -z "${_t23l_pattern}" || _t23l_pattern="( ${_t23l_pattern%-o} )" - case " $* " in *\ -r\ *) _t23l_cleanopt=-r; esac - - find test-2-leave -name test-2-leave -o -type d -prune \ - -o -name '*.xml' ${_t23l_pattern} -print | env LC_ALL=C sort \ - | { case " $* " in - *\ -C\ *) test_cleaner;; - *\ -S\ *) test_selfcheck -a=leave -o=2.10 ${_t23l_cleanopt};; - *\ -W\ *) emit_result "not implemented" "option -W";; - *\ -X\ *) emit_result "not implemented" "option -X";; - *) test_runner -a=2.10-leave -o=3.0 -t=3.0 "$@" || return $?;; - esac; } + _t23l_pattern= + + while read _t23l_spec; do + _t23l_spec=${_t23l_spec%.xml} + _t23l_spec=${_t23l_spec%\*} + _t23l_pattern="${_t23l_pattern} -name ${_t23l_spec}*.xml -o" + done + + if [ -n "$_t23l_pattern" ]; then + _t23l_pattern="( ${_t23l_pattern%-o} )" + fi + + find test-2-leave -name test-2-leave -o -type d -prune \ + -o -name '*.xml' ${_t23l_pattern} -print \ + | env LC_ALL=C sort \ + | { case " $* " in + *\ -C\ *) test_cleaner;; + *\ -X\ *) emit_result "not implemented" "option -X";; + *) test_runner -a=2.10-leave -o=3.0 -t=3.0 "$@" || return $?;; + esac; } } -tests="${tests} test2to3leave" test2to3roundtrip() { - _t23rt_cleanopt= - _t23rt_pattern= - - while read _t23tr_spec; do - _t23rt_spec=${_t23rt_spec%.xml} - _t23rt_spec=${_t23rt_spec%\*} - _t23rt_pattern="${_t23rt_pattern} -name ${_t23rt_spec}*.xml -o" - done - test -z "${_t23rt_pattern}" || _t23rt_pattern="( ${_t23rt_pattern%-o} )" - case " $* " in *\ -r\ *) _t23rt_cleanopt=-r; esac - - find test-2-roundtrip -name test-2-roundtrip -o -type d -prune \ - -o -name '*.xml' ${_t23rt_pattern} -print | env LC_ALL=C sort \ - | { case " $* " in - *\ -C\ *) test_cleaner;; - *\ -S\ *) test_selfcheck -a=roundtrip -o=2.10 ${_t23rt_cleanopt};; - *\ -W\ *) test_browser ${_t23rt_cleanopt};; - *\ -X\ *) emit_result "not implemented" "option -X";; - *) test_runner -a=2.10-roundtrip -o=2.10 -t=3.0 "$@" || return $?;; - esac; } + _t23rt_pattern= + + while read _t23tr_spec; do + _t23rt_spec=${_t23rt_spec%.xml} + _t23rt_spec=${_t23rt_spec%\*} + _t23rt_pattern="${_t23rt_pattern} -name ${_t23rt_spec}*.xml -o" + done + + if [ -n "$_t23rt_pattern" ]; then + _t23rt_pattern="( ${_t23rt_pattern%-o} )" + fi + + find test-2-roundtrip -name test-2-roundtrip -o -type d -prune \ + -o -name '*.xml' ${_t23rt_pattern} -print \ + | env LC_ALL=C sort \ + | { case " $* " in + *\ -C\ *) test_cleaner;; + *\ -X\ *) emit_result "not implemented" "option -X";; + *) test_runner -a=2.10-roundtrip -o=2.10 -t=3.0 "$@" \ + || return $?;; + esac; } } -tests="${tests} test2to3roundtrip" # -B # -D # -G ... see usage cts_scheduler() { - _tcp_mode=0 - _tcp_ret=0 - _tcp_validatewith= - _tcp_schema_o= - _tcp_schema_t= - _tcp_template= - - find ../cts/scheduler -name scheduler -o -type d -prune \ - -o -name '*.xml' -print | env LC_ALL=C sort \ - | { case " $* " in - *\ -C\ *) test_cleaner -r;; - *\ -S\ *) emit_result "not implemented" "option -S";; - *\ -W\ *) emit_result "not implemented" "option -W";; - *\ -X\ *) emit_result "not implemented" "option -X";; - *) - while test $# -gt 0; do - case "$1" in - -G) _tcp_mode=$((_tcp_mode | (1 << 0)));; - -D) _tcp_mode=$((_tcp_mode | (1 << 1)));; - -B) _tcp_mode=$((_tcp_mode | (1 << 2)));; - esac - shift - done - while read _tcp_origin; do - _tcp_validatewith=$(${XSLTPROCESSOR} - "${_tcp_origin}" <<-EOF - - - - - - - - - - - - - - - - - - - - - + _tcp_mode=0 + _tcp_ret=0 + _tcp_validatewith= + _tcp_schema_o= + _tcp_schema_t= + _tcp_template= + + find ../cts/scheduler/xml -name '*.xml' | env LC_ALL=C sort \ + | { case " $* " in + *\ -C\ *) test_cleaner -r;; + *\ -X\ *) emit_result "not implemented" "option -X";; + *) + while [ $# -gt 0 ]; do + case "$1" in + -G) _tcp_mode=$((_tcp_mode | (1 << 0)));; + -D) _tcp_mode=$((_tcp_mode | (1 << 1)));; + -B) _tcp_mode=$((_tcp_mode | (1 << 2)));; + esac + shift + done + while read _tcp_origin; do + _tcp_validatewith=$(${XSLT_PROCESSOR} - "${_tcp_origin}" < + + + + + + + + + + + + + + + + + + + + EOF ) - _tcp_schema_t=${_tcp_validatewith} - case "${_tcp_validatewith}" in - 1) _tcp_schema_o=1.3;; - 2) _tcp_schema_o=2.10;; - # only for gradual refinement as upgrade-2.10.xsl under - # active development, move to 3.x when schema v4 emerges - 3) _tcp_schema_o=2.10 - _tcp_schema_t=2;; - *) emit_error \ - "need to skip ${_tcp_origin} (schema: ${_tcp_validatewith})" - continue;; - esac - _tcp_template="upgrade-${_tcp_schema_o}.xsl" - _tcp_schema_t="pacemaker-$((_tcp_schema_t + 1)).0.rng" - test "${_tcp_schema_o%%.*}" = "${_tcp_validatewith}" \ - && _tcp_schema_o="pacemaker-${_tcp_schema_o}.rng" \ - || _tcp_schema_o="${_tcp_schema_t}" - - # pre-validate - if test "${_tcp_schema_o}" != "${_tcp_schema_t}" \ - && ! test_runner_validate "${_tcp_schema_o}" "${_tcp_origin}"; then - _tcp_ret=$((_tcp_ret + 1)); echo "E:pre-validate"; continue - fi - - # upgrade - test "$((_tcp_mode & (1 << 0)))" -ne 0 \ - || ln -fs "$(pwd)/${_tcp_origin}" "${_tcp_origin%.*}.ref" - if ! _tcp_target=$(test_runner_upgrade "${_tcp_template}" \ - "${_tcp_origin}" "${_tcp_mode}"); then - _tcp_ret=$((_tcp_ret + 1)); - test -n "${_tcp_target}" || break - echo "E:upgrade" - test -s "${_tcp_target}" \ - && { echo ---; cat "${_tcp_target}" || :; echo ---; } - continue - fi - test "$((_tcp_mode & (1 << 0)))" -ne 0 \ - || rm -f "${_tcp_origin%.*}.ref" - - # post-validate - if ! test_runner_validate "${_tcp_schema_t}" "${_tcp_target}"; then - _tcp_ret=$((_tcp_ret + 1)); echo "E:post-validate"; continue - fi - - test "$((_tcp_mode & (1 << 0)))" -eq 0 \ - || mv "${_tcp_target}" "${_tcp_origin}" - done; log2_or_0_return ${_tcp_ret};; - esac; } + _tcp_schema_t=${_tcp_validatewith} + case "${_tcp_validatewith}" in + 1) _tcp_schema_o=1.3;; + 2) _tcp_schema_o=2.10;; + # only for gradual refinement as upgrade-2.10.xsl under + # active development, move to 3.x when schema v4 emerges + 3) _tcp_schema_o=2.10 + _tcp_schema_t=2;; + *) emit_error \ + "need to skip ${_tcp_origin} (schema: ${_tcp_validatewith})" + continue;; + esac + _tcp_template="upgrade-${_tcp_schema_o}.xsl" + _tcp_schema_t="pacemaker-$((_tcp_schema_t + 1)).0.rng" + + if [ "${_tcp_schema_o%%.*}" = "${_tcp_validatewith}" ]; then + _tcp_schema_o="pacemaker-${_tcp_schema_o}.rng" + else + _tcp_schema_o="${_tcp_schema_t}" + fi + + # pre-validate + if [ "$_tcp_schema_o" != "$_tcp_schema_t" ] \ + && ! test_runner_validate "$_tcp_schema_o" "$_tcp_origin"; then + + _tcp_ret=$((_tcp_ret + 1)) + echo "E:pre-validate" + continue + fi + + # upgrade + if [ "$((_tcp_mode & (1 << 0)))" -eq 0 ]; then + ln -fs "$(pwd)/$_tcp_origin" "${_tcp_origin%.*}.ref" + fi + + if ! _tcp_target=$(test_runner_upgrade "${_tcp_template}" \ + "${_tcp_origin}" "${_tcp_mode}"); then + _tcp_ret=$((_tcp_ret + 1)); + + if [ -z "$_tcp_target" ]; then + break + fi + + echo "E:upgrade" + if [ -s "$_tcp_target" ]; then + echo --- + cat "$_tcp_target" || : + echo --- + fi + continue + fi + + if [ "$((_tcp_mode & (1 << 0)))" -eq 0 ]; then + rm -f "${_tcp_origin%.*}.ref" + fi + + # post-validate + if ! test_runner_validate "${_tcp_schema_t}" "${_tcp_target}"; then + _tcp_ret=$((_tcp_ret + 1)); echo "E:post-validate"; continue + fi + + if [ "$((_tcp_mode & (1 << 0)))" -ne 0 ]; then + mv "$_tcp_target" "$_tcp_origin" + fi + + done; log2_or_0_return ${_tcp_ret};; + esac; } } -tests="${tests} cts_scheduler" # # "framework" # # option-likes ... options to be passed down # argument-likes ... drives a test selection test_suite() { - _ts_pass= - _ts_select= - _ts_select_full= - _ts_test_specs= - _ts_global_ret=0 - _ts_ret=0 - - while test $# -gt 0; do - case "$1" in - -) printf '%s\n' 'waiting for tests specified at stdin...'; - while read _ts_spec; do _ts_select="${_ts_spec}@$1"; done;; - -*) _ts_pass="${_ts_pass} $1";; - *) _ts_select_full="${_ts_select_full}@$1" - _ts_select="${_ts_select}@${1%%/*}";; - esac - shift - done - _ts_select="${_ts_select}@" - _ts_select_full="${_ts_select_full}@" - - for _ts_test in ${tests}; do - - _ts_test_specs= - while true; do - case "${_ts_select}" in - *@${_ts_test}@*) - _ts_test_specs="${_ts_select%%@${_ts_test}@*}"\ + _ts_pass= + _ts_select= + _ts_select_full= + _ts_test_specs= + _ts_global_ret=0 + _ts_ret=0 + + while [ $# -gt 0 ]; do + case "$1" in + -) printf '%s\n' 'waiting for tests specified at stdin...'; + while read _ts_spec; do + _ts_select="${_ts_spec}@$1" + done;; + -*) _ts_pass="${_ts_pass} $1";; + *) _ts_select_full="${_ts_select_full}@$1" + _ts_select="${_ts_select}@${1%%/*}";; + esac + shift + done + _ts_select="${_ts_select}@" + _ts_select_full="${_ts_select_full}@" + + for _ts_test in ${tests}; do + + _ts_test_specs= + while true; do + case "${_ts_select}" in + *@${_ts_test}@*) + _ts_test_specs="${_ts_select%%@${_ts_test}@*}"\ "@${_ts_select#*@${_ts_test}@}" - if test "${_ts_test_specs}" = @; then - _ts_select= # nothing left - else - _ts_select="${_ts_test_specs}" - fi - continue - ;; - @) case "${_ts_test}" in test*) break;; esac # filter - ;; - esac - test -z "${_ts_test_specs}" || break - continue 2 # move on to matching with next local test - done - - _ts_test_specs= - while true; do - case "${_ts_select_full}" in - *@${_ts_test}/*) - _ts_test_full="${_ts_test}/${_ts_select_full#*@${_ts_test}/}" - _ts_test_full="${_ts_test_full%%@*}" - _ts_select_full="${_ts_select_full%%@${_ts_test_full}@*}"\ + if [ "$_ts_test_specs" = "@" ]; then + _ts_select= # nothing left + else + _ts_select="${_ts_test_specs}" + fi + continue + ;; + @) case "${_ts_test}" in test*) break;; esac # filter + ;; + esac + if [ -n "$_ts_test_specs" ]; then + break + fi + continue 2 # move on to matching with next local test + done + + _ts_test_specs= + while true; do + case "${_ts_select_full}" in + *@${_ts_test}/*) + _ts_test_full="${_ts_test}/${_ts_select_full#*@${_ts_test}/}" + _ts_test_full="${_ts_test_full%%@*}" + _ts_select_full="${_ts_select_full%%@${_ts_test_full}@*}"\ "@${_ts_select_full#*@${_ts_test_full}@}" - _ts_test_specs="${_ts_test_specs} ${_ts_test_full#*/}" - ;; - *) - break - ;; - esac - done - - for _ts_test_spec in ${_ts_test_specs}; do - printf '%s\n' "${_ts_test_spec}" - done | "${_ts_test}" ${_ts_pass} || _ts_ret=$? - - test ${_ts_ret} = 0 \ - && emit_result ${_ts_ret} "${_ts_test}" \ - || emit_result "at least 2^$((_ts_ret - 1))" "${_ts_test}" - log2_or_0_add ${_ts_global_ret} ${_ts_ret} - _ts_global_ret=$? - done - if test -n "${_ts_select#@}"; then - emit_error "Non-existing test(s):$(echo "${_ts_select}" \ - | tr '@' ' ')" - log2_or_0_add ${_ts_global_ret} 1 || _ts_global_ret=$? - fi - - return ${_ts_global_ret} + _ts_test_specs="${_ts_test_specs} ${_ts_test_full#*/}" + ;; + *) + break + ;; + esac + done + + for _ts_test_spec in ${_ts_test_specs}; do + printf '%s\n' "${_ts_test_spec}" + done | "${_ts_test}" ${_ts_pass} || _ts_ret=$? + + if [ "$_ts_ret" = 0 ]; then + emit_result "$_ts_ret" "$_ts_test" + else + emit_result "at least 2^$((_ts_ret - 1))" "$_ts_test" + fi + + log2_or_0_add ${_ts_global_ret} ${_ts_ret} + _ts_global_ret=$? + done + if [ -n "${_ts_select#@}" ]; then + emit_error "Non-existing test(s):$(echo "${_ts_select}" \ + | tr '@' ' ')" + log2_or_0_add ${_ts_global_ret} 1 || _ts_global_ret=$? + fi + + return ${_ts_global_ret} } # NOTE: big letters are dedicated for per-test-set behaviour, # small ones for generic/global behaviour usage() { - printf \ -'%s\n%s\n %s\n %s\n %s\n %s\n %s\n %s\n %s\n %s\n %s\n %s\n %s\n' \ - "usage: $0 [-{B,C,D,G,S,X}]* \\" \ + printf \ +'%s\n%s\n %s\n %s\n %s\n %s\n %s\n %s\n %s\n %s\n' \ + "usage: $0 [-{B,C,D,G,X}]* \\" \ " [-|{${tests## }}*]" \ - "- when no suites (arguments) provided, \"test*\" ones get used" \ - "- with '-' suite specification the actual ones grabbed on stdin" \ - "- use '-B' to run validate-only check suppressing blanks first" \ - "- use '-C' to only cleanup ephemeral byproducts" \ - "- use '-D' to review originals vs. \"referential\" outcomes" \ - "- use '-G' to generate \"referential\" outcomes" \ - "- use '-S' for template self-check (requires net access)" \ - "- use '-W' to run browser-based, on-the-fly diff'ing test drive" \ - "- use '-X' to show explanatory details about the upgrade" \ - "- some modes (e.g. -{S,W}) take also '-r' for cleanup afterwards" \ - "- test specification can be granular, e.g. 'test2to3/022'" - printf \ - '\n%s\n %s\n %s\n %s\n %s\n %s\n %s\n %s\n' \ - 'environment variables affecting the run + default/current values:' \ - "- DIFF (${DIFF}): tool to compute and show differences of 2 files" \ - "- DIFFOPTS (${DIFFOPTS}): options to the above tool" \ - "- DIFFPAGER (${DIFFPAGER}): possibly accompanying the above tool" \ - "- RNGVALIDATOR (${RNGVALIDATOR}): RelaxNG validator" \ - "- XSLTPROCESSOR (${_XSLTPROCESSOR}): XSLT 1.0 capable processor" \ - "- HTTPPORT (${HTTPPORT}): port used by test drive HTTP server run" \ - "- WEBBROWSER (${WEBBROWSER}): used for in-browser test drive" + "- when no suites (arguments) provided, \"test*\" ones get used" \ + "- with '-' suite specification the actual ones grabbed on stdin" \ + "- use '-B' to run validate-only check suppressing blanks first" \ + "- use '-C' to only cleanup ephemeral byproducts" \ + "- use '-D' to review originals vs. \"referential\" outcomes" \ + "- use '-G' to generate \"referential\" outcomes" \ + "- use '-X' to show explanatory details about the upgrade" \ + "- test specification can be granular, e.g. 'test2to3/022'" } main() { - _main_pass= - _main_bailout=0 - _main_ret=0 - - while test $# -gt 0; do - case "$1" in - -h) usage; exit;; - -C|-G|-S|-X) _main_bailout=1;; - esac - _main_pass="${_main_pass} $1" - shift - done - - test_suite ${_main_pass} || _main_ret=$? - test ${_main_bailout} -ne 0 \ - || test_suite -C ${_main_pass} >/dev/null || true - test ${_main_ret} = 0 && emit_result ${_main_ret} "Overall suite" \ - || emit_result "at least 2^$((_main_ret - 1))" "Overall suite" - - return ${_main_ret} + _main_pass= + _main_bailout=0 + _main_ret=0 + + while [ $# -gt 0 ]; do + case "$1" in + -h) usage; exit;; + -C|-G|-X) _main_bailout=1;; + esac + _main_pass="${_main_pass} $1" + shift + done + + test_suite ${_main_pass} || _main_ret=$? + + if [ "$_main_bailout" -eq 0 ]; then + test_suite -C $_main_pass >/dev/null || true + fi + + if [ "$_main_ret" = 0 ]; then + emit_result "$_main_ret" "Overall suite" + else + emit_result "at least 2^$((_main_ret - 1))" "Overall suite" + fi + + return ${_main_ret} } main "$@" diff --git a/xml/test-2-roundtrip/021-instance_atributes-rsc-nonbijective.xml b/xml/test-2-roundtrip/021-instance_atributes-rsc-nonbijective.xml index a5d25a5c34..6db752def0 100644 --- a/xml/test-2-roundtrip/021-instance_atributes-rsc-nonbijective.xml +++ b/xml/test-2-roundtrip/021-instance_atributes-rsc-nonbijective.xml @@ -1,39 +1,38 @@ - diff --git a/xml/test-2/010-rsc_colocation-dropped-for-noop-sa.ref b/xml/test-2/010-rsc_colocation-dropped-for-noop-sa.ref index a4a4a23897..b0cb656233 100644 --- a/xml/test-2/010-rsc_colocation-dropped-for-noop-sa.ref +++ b/xml/test-2/010-rsc_colocation-dropped-for-noop-sa.ref @@ -1,60 +1,60 @@ diff --git a/xml/test-2/010-rsc_colocation-dropped-for-noop-sa.xml b/xml/test-2/010-rsc_colocation-dropped-for-noop-sa.xml index 70bedfdad3..d38e1159b0 100644 --- a/xml/test-2/010-rsc_colocation-dropped-for-noop-sa.xml +++ b/xml/test-2/010-rsc_colocation-dropped-for-noop-sa.xml @@ -1,62 +1,61 @@ - diff --git a/xml/test-2/020-rsc-requires-inline.xml b/xml/test-2/020-rsc-requires-inline.xml index 630bb18bd7..66b1d0604c 100644 --- a/xml/test-2/020-rsc-requires-inline.xml +++ b/xml/test-2/020-rsc-requires-inline.xml @@ -1,45 +1,44 @@ - diff --git a/xml/test-2/021-rsc-requires-nvpair.xml b/xml/test-2/021-rsc-requires-nvpair.xml index 6f75c200e5..e2214efe40 100644 --- a/xml/test-2/021-rsc-requires-nvpair.xml +++ b/xml/test-2/021-rsc-requires-nvpair.xml @@ -1,48 +1,47 @@ - diff --git a/xml/test-2/022-rsc-requires-counterexamples.xml b/xml/test-2/022-rsc-requires-counterexamples.xml index ce9717b31d..c74e76cdd4 100644 --- a/xml/test-2/022-rsc-requires-counterexamples.xml +++ b/xml/test-2/022-rsc-requires-counterexamples.xml @@ -1,50 +1,49 @@ - diff --git a/xml/test-2/023-rsc-requires-no-override.xml b/xml/test-2/023-rsc-requires-no-override.xml index 8f3d765ef1..5de3efebf1 100644 --- a/xml/test-2/023-rsc-requires-no-override.xml +++ b/xml/test-2/023-rsc-requires-no-override.xml @@ -1,66 +1,65 @@ - diff --git a/xml/test-2/024-rsc-requires-no-selfclash.xml b/xml/test-2/024-rsc-requires-no-selfclash.xml index 096c61c2a6..f44737e2d4 100644 --- a/xml/test-2/024-rsc-requires-no-selfclash.xml +++ b/xml/test-2/024-rsc-requires-no-selfclash.xml @@ -1,141 +1,140 @@ - diff --git a/xml/test-2/030-clu-props-plain-rename.xml b/xml/test-2/030-clu-props-plain-rename.xml index f7a0a52d8a..8186117d20 100644 --- a/xml/test-2/030-clu-props-plain-rename.xml +++ b/xml/test-2/030-clu-props-plain-rename.xml @@ -1,26 +1,25 @@ - diff --git a/xml/test-2/031-clu-props-drop.xml b/xml/test-2/031-clu-props-drop.xml index 663569c398..9d33788a1c 100644 --- a/xml/test-2/031-clu-props-drop.xml +++ b/xml/test-2/031-clu-props-drop.xml @@ -1,21 +1,20 @@ - diff --git a/xml/test-2/032-clu-props-move.xml b/xml/test-2/032-clu-props-move.xml index 1f34d7b814..aff84ebafb 100644 --- a/xml/test-2/032-clu-props-move.xml +++ b/xml/test-2/032-clu-props-move.xml @@ -1,16 +1,15 @@ - diff --git a/xml/test-2/033-clu-props-move-merge.xml b/xml/test-2/033-clu-props-move-merge.xml index c34085b15e..a5d681906e 100644 --- a/xml/test-2/033-clu-props-move-merge.xml +++ b/xml/test-2/033-clu-props-move-merge.xml @@ -1,21 +1,20 @@ - diff --git a/xml/test-2/034-clu-props-move-redef.xml b/xml/test-2/034-clu-props-move-redef.xml index fcadf20a7a..7f65755a78 100644 --- a/xml/test-2/034-clu-props-move-redef.xml +++ b/xml/test-2/034-clu-props-move-redef.xml @@ -1,15 +1,14 @@ - diff --git a/xml/test-2/040-nodes-rename-type.xml b/xml/test-2/040-nodes-rename-type.xml index 939b768c8d..fe19d91b84 100644 --- a/xml/test-2/040-nodes-rename-type.xml +++ b/xml/test-2/040-nodes-rename-type.xml @@ -1,16 +1,15 @@ - diff --git a/xml/test-2/050-rsc-attrs-instance-plain-rename.xml b/xml/test-2/050-rsc-attrs-instance-plain-rename.xml index ccf2404130..02db4cd556 100644 --- a/xml/test-2/050-rsc-attrs-instance-plain-rename.xml +++ b/xml/test-2/050-rsc-attrs-instance-plain-rename.xml @@ -1,25 +1,24 @@ - diff --git a/xml/test-2/051-rsc-attrs-instance-pcmk_arg_map.xml b/xml/test-2/051-rsc-attrs-instance-pcmk_arg_map.xml index 75ad2a7485..01a2782db9 100644 --- a/xml/test-2/051-rsc-attrs-instance-pcmk_arg_map.xml +++ b/xml/test-2/051-rsc-attrs-instance-pcmk_arg_map.xml @@ -1,51 +1,50 @@ - diff --git a/xml/test-2/060-rsc-attrs-meta-isolation.xml b/xml/test-2/060-rsc-attrs-meta-isolation.xml index 9c7dcb9e88..3f49b2a442 100644 --- a/xml/test-2/060-rsc-attrs-meta-isolation.xml +++ b/xml/test-2/060-rsc-attrs-meta-isolation.xml @@ -1,27 +1,26 @@ - diff --git a/xml/test-2/061-rsc-attrs-meta-exchange.xml b/xml/test-2/061-rsc-attrs-meta-exchange.xml index cb0c0ebcb9..99ff8559b0 100644 --- a/xml/test-2/061-rsc-attrs-meta-exchange.xml +++ b/xml/test-2/061-rsc-attrs-meta-exchange.xml @@ -1,30 +1,29 @@ - diff --git a/xml/test-2/070-rsc-op-attrs-inst-requires-start.xml b/xml/test-2/070-rsc-op-attrs-inst-requires-start.xml index 2661f7d0a6..90a4735a5f 100644 --- a/xml/test-2/070-rsc-op-attrs-inst-requires-start.xml +++ b/xml/test-2/070-rsc-op-attrs-inst-requires-start.xml @@ -1,49 +1,48 @@ - diff --git a/xml/test-2/071-rsc-op-attrs-inst-requires-nonstart.xml b/xml/test-2/071-rsc-op-attrs-inst-requires-nonstart.xml index 4f364f469d..b6f87bfc2f 100644 --- a/xml/test-2/071-rsc-op-attrs-inst-requires-nonstart.xml +++ b/xml/test-2/071-rsc-op-attrs-inst-requires-nonstart.xml @@ -1,49 +1,48 @@ - diff --git a/xml/test-2/072-rsc-op-attrs-inst-requires-no-override.xml b/xml/test-2/072-rsc-op-attrs-inst-requires-no-override.xml index 8af4bf12f1..c7359424bc 100644 --- a/xml/test-2/072-rsc-op-attrs-inst-requires-no-override.xml +++ b/xml/test-2/072-rsc-op-attrs-inst-requires-no-override.xml @@ -1,61 +1,60 @@ - diff --git a/xml/test-2/073-rsc-op-attrs-inst-meta-meaning.xml b/xml/test-2/073-rsc-op-attrs-inst-meta-meaning.xml index 1a1f73f712..736d54669f 100644 --- a/xml/test-2/073-rsc-op-attrs-inst-meta-meaning.xml +++ b/xml/test-2/073-rsc-op-attrs-inst-meta-meaning.xml @@ -1,50 +1,49 @@ -