1
0
mirror of https://github.com/samba-team/samba.git synced 2025-01-11 05:18:09 +03:00
samba-mirror/ctdb/tests
Martin Schwenke 4569c65288 ctdb-scripts: Add configuration variable CTDB_KILLTCP_USE_SS_KILL
This allows CTDB to be configured to use "ss -K" to reset TCP
connections on "releaseip".  This is only supported when the kernel is
configured with CONFIG_INET_DIAG_DESTROY enabled.

From the documentation:

   ss -K has been supported in ss since iproute 4.5 in March 2016 and
   in the Linux kernel since 4.4 in December 2015.  However, the
   required kernel configuration item CONFIG_INET_DIAG_DESTROY is
   disabled by default.  Although enabled in Debian kernels since
   ~2017 and in Ubuntu since at least 18.04,, this has only recently
   been enabled in distributions such as RHEL.  There seems to be no
   way, including running ss -K, to determine if this is supported, so
   use of this feature needs to be configurable.  When available, it
   should be the fastest, most reliable way of killing connections.

For RHEL and derivatives, this was enabled as follows:

* RHEL 8 via https://bugzilla.redhat.com/show_bug.cgi?id=2230213,
  arriving in version kernel-4.18.0-513.5.1.el8_9

* RHEL 9 via https://issues.redhat.com/browse/RHEL-212, arriving in
  kernel-5.14.0-360.el9

Enabling this option results in a small behaviour change because ss -K
always does a 2-way kill (i.e. it also sends a RST to the client).
Only a 1-way kill is done for SMB connections when ctdb_killtcp is
used - the reasons for this are shrouded in history and the 2-way kill
seems to work fine.

For the summary that is logged, when CTDB_KILLTCP_USE_SS_KILL is "yes"
or "try", always log the method used, even the fallback to
ctdb_killtcp.  However, when set to "no", maintain the existing
output.

The decision to use -K rather than --kill is because short options are
trivial to implement in test stubs.

Signed-off-by: Martin Schwenke <mschwenke@ddn.com>
Reviewed-by: Volker Lendecke <vl@samba.org>
Reviewed-by: Jerry Heyman <jheyman@ddn.com>

Autobuild-User(master): Martin Schwenke <martins@samba.org>
Autobuild-Date(master): Thu Nov  7 00:12:34 UTC 2024 on atb-devel-224
2024-11-07 00:12:34 +00:00
..
CLUSTER/complex ctdb: Do not use egrep 2023-07-19 09:01:33 +00:00
etc-ctdb/events/legacy ctdb-tests: Use local_daemons.sh in local_daemons.bash 2018-11-06 07:16:17 +01:00
INTEGRATION ctdb:tests: s/the the\b/the/ in comments 2024-11-06 10:57:34 +00:00
scripts ctdb-scripts: Remove unnecessary 06.nfs.script 2024-03-06 06:05:38 +00:00
src ctdb-tests: Add test code for ctdb_sys_have_ip() 2024-10-07 15:58:38 +00:00
UNIT ctdb-scripts: Add configuration variable CTDB_KILLTCP_USE_SS_KILL 2024-11-07 00:12:34 +00:00
local_daemons.sh ctdb-tests: Avoid ShellCheck warning SC2086 2023-07-05 11:18:37 +00:00
README ctdb:tests: Fix code spelling 2023-03-24 07:01:31 +00:00
run_cluster_tests.sh tests: Fix wrapper scripts to handle options and tests without breakage 2012-05-14 15:02:19 +10:00
run_tests.sh ctdb-tests: Avoid ShellCheck warning SC2086 2023-07-05 11:18:37 +00:00
test_check_tcp_ports.sh ctdb-scripts: CTDB_BASE must be set when including functions file 2015-09-15 08:56:21 +02:00
TODO For now, make tests/run_tests.sh runs the new test suite. Add 2009-01-12 15:47:12 +11:00

Introduction
------------

For a developer, the simplest way of running most tests on a local
machine from within the git repository is:

  make test

This runs all UNIT and INTEGRATION tests.

tests/run_tests.sh
------------------

This script can be used to manually run all tests or selected tests,
with a variety of options.  For usage, run:

  tests/run_tests.sh -h

If no tests are specified this runs all of the UNIT and INTEGRATION
tests.

By default:

* INTEGRATION tests are run against 3 local daemons

* When testing is complete, a summary showing a list is printed
  showing the tests run and their results

Tests can be selected in various ways:

* tests/run_tests.sh UNIT INTEGRATION

  runs all UNIT and INTEGRATION tests, and is like specifying no tests

* tests/run_tests.sh UNIT/tool

  runs all of the "tool" UNIT tests

* tests/run_tests.sh tests/UNIT/eventscripts/00.ctdb.setup.001.sh
  tests/run_tests.sh tests/INTEGRATION/simple/basics.001.listnodes.sh

  each runs a single specified test case

* tests/run_tests.sh UNIT/eventscripts UNIT/tool tests/UNIT/onnode/0001.sh

  runs a combination of UNIT test suites and a single UNIT test

Testing on a cluster
--------------------

INTEGRATION and CLUSTER tests can be run on a real or virtual cluster
using tests/run_cluster_tests.sh (or "tests/run_tests.sh -c").  The
test code needs to be available on all cluster nodes, as well as the
test client node.  The test client node needs to have a nodes file
where the onnode(1) command will find it.

If the all of the cluster nodes have the CTDB git tree in the same
location as on the test client then no special action is necessary.
The simplest way of doing this is to share the tree to cluster nodes
and test clients via NFS.

Alternatively, the tests can be installed on all nodes.  One technique
is to build a package containing the tests and install it on all
nodes.  CTDB developers do a lot of testing this way using the
provided sample packaging, which produces a ctdb-tests RPM package.

Finally, if the test code is installed in a different place on the
cluster nodes, then CTDB_TEST_REMOTE_DIR can be set on the test client
node to point to a directory that contains the test_wrap script on the
cluster nodes.

Running tests under valgrind
----------------------------

The easiest way of doing this is something like:

  VALGRIND="valgrind -q" tests/run_tests ...

This can be used to cause all invocations of the ctdb tool, test
programs and, with local daemons, the ctdbd daemons themselves to run
under valgrind.

How is the ctdb tool invoked?
-----------------------------

$CTDB determines how to invoke the ctdb client.  If not already set
and if $VALGRIND is set, this is set to "$VALGRIND ctdb".  If this is
not already set but $VALGRIND is not set, this is simply set to "ctdb"

Test and debugging variable options
-----------------------------------

       CTDB_TEST_MODE

	   Set this environment variable to enable test mode.

	   This enables daemons and tools to locate their socket and
	   PID file relative to CTDB_BASE.

	   When testing with multiple local daemons on a single
	   machine this does 3 extra things:

	   * Disables checks related to public IP addresses

	   * Speeds up the initial recovery during startup at the
	     expense of some consistency checking

	   * Disables real-time scheduling

       CTDB_DEBUG_HUNG_SCRIPT_LOGFILE=FILENAME
	   FILENAME specifies where log messages should go when
	   debugging hung eventscripts. This is a testing option. See
	   also CTDB_DEBUG_HUNG_SCRIPT.

	   No default. Messages go to stdout/stderr and are logged to
	   the same place as other CTDB log messages.

       CTDB_SYS_ETCDIR=DIRECTORY
	   DIRECTORY containing system configuration files. This is
	   used to provide alternate configuration when testing and
	   should not need to be changed from the default.

	   Default is /etc.

       CTDB_RUN_TIMEOUT_MONITOR=yes|no
	   Whether CTDB should simulate timing out monitor
	   events in local daemon tests.

	   Default is no.

       CTDB_TEST_SAMBA_VERSION=VERSION

	    VERSION is a 32-bit number containing the Samba major
	    version in the most significant 16 bits and the minor
	    version in the least significant 16 bits.  This can be
	    used to test CTDB's checking of incompatible versions
	    without installing an incompatible version.  This is
	    probably best set like this:

		export CTDB_TEST_SAMBA_VERSION=$(( (4 << 16) | 12 ))

       CTDB_VARDIR=DIRECTORY
	   DIRECTORY containing CTDB files that are modified at runtime.

	   Defaults to /usr/local/var/lib/ctdb.