diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-17 06:53:20 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-17 06:53:20 +0000 |
commit | e5a812082ae033afb1eed82c0f2df3d0f6bdc93f (patch) | |
tree | a6716c9275b4b413f6c9194798b34b91affb3cc7 /cts/lab/CTSlab.py.in | |
parent | Initial commit. (diff) | |
download | pacemaker-e5a812082ae033afb1eed82c0f2df3d0f6bdc93f.tar.xz pacemaker-e5a812082ae033afb1eed82c0f2df3d0f6bdc93f.zip |
Adding upstream version 2.1.6.upstream/2.1.6
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'cts/lab/CTSlab.py.in')
-rw-r--r-- | cts/lab/CTSlab.py.in | 135 |
1 files changed, 135 insertions, 0 deletions
diff --git a/cts/lab/CTSlab.py.in b/cts/lab/CTSlab.py.in new file mode 100644 index 0000000..bd990fd --- /dev/null +++ b/cts/lab/CTSlab.py.in @@ -0,0 +1,135 @@ +#!@PYTHON@ +""" Command-line interface to Pacemaker's Cluster Test Suite (CTS) +""" + +__copyright__ = "Copyright 2001-2023 the Pacemaker project contributors" +__license__ = "GNU General Public License version 2 or later (GPLv2+) WITHOUT ANY WARRANTY" + +import sys, signal, os + +pdir = os.path.dirname(sys.path[0]) +sys.path.insert(0, pdir) # So that things work from the source directory + +try: + from cts.CM_corosync import * + from cts.CTSaudits import AuditList + from cts.CTStests import TestList + from cts.CTSscenarios import * + + from pacemaker._cts.CTS import CtsLab + from pacemaker._cts.logging import LogFactory +except ImportError as e: + sys.stderr.write("abort: %s\n" % e) + sys.stderr.write("check your install and PYTHONPATH; couldn't find cts libraries in:\n%s\n" % + ' '.join(sys.path)) + sys.exit(1) + +# These are globals so they can be used by the signal handler. +scenario = None +LogFactory().add_stderr() + + +def sig_handler(signum, frame) : + LogFactory().log("Interrupted by signal %d"%signum) + if scenario: scenario.summarize() + if signum == 15 : + if scenario: scenario.TearDown() + sys.exit(1) + + +def plural_s(n, uppercase=False): + if n == 1: + return "" + elif uppercase: + return "S" + else: + return "s" + + +if __name__ == '__main__': + + Environment = CtsLab(sys.argv[1:]) + NumIter = Environment["iterations"] + Tests = [] + + # Set the signal handler + signal.signal(15, sig_handler) + signal.signal(10, sig_handler) + + # Create the Cluster Manager object + cm = None + if Environment["Stack"] == "corosync 2+": + cm = crm_corosync() + + else: + LogFactory().log("Unknown stack: "+Environment["stack"]) + sys.exit(1) + + if Environment["TruncateLog"]: + if Environment["OutputFile"] is None: + LogFactory().log("Ignoring truncate request because no output file specified") + else: + LogFactory().log("Truncating %s" % Environment["OutputFile"]) + with open(Environment["OutputFile"], "w") as outputfile: + outputfile.truncate(0) + + Audits = AuditList(cm) + + if Environment["ListTests"]: + Tests = TestList(cm, Audits) + LogFactory().log("Total %d tests"%len(Tests)) + for test in Tests : + LogFactory().log(str(test.name)); + sys.exit(0) + + elif len(Environment["tests"]) == 0: + Tests = TestList(cm, Audits) + + else: + Chosen = Environment["tests"] + for TestCase in Chosen: + match = None + + for test in TestList(cm, Audits): + if test.name == TestCase: + match = test + + if not match: + LogFactory().log("--choose: No applicable/valid tests chosen") + sys.exit(1) + else: + Tests.append(match) + + # Scenario selection + if Environment["scenario"] == "basic-sanity": + scenario = RandomTests(cm, [ BasicSanityCheck(Environment) ], Audits, Tests) + + elif Environment["scenario"] == "all-once": + NumIter = len(Tests) + scenario = AllOnce( + cm, [ BootCluster(Environment) ], Audits, Tests) + elif Environment["scenario"] == "sequence": + scenario = Sequence( + cm, [ BootCluster(Environment) ], Audits, Tests) + elif Environment["scenario"] == "boot": + scenario = Boot(cm, [ LeaveBooted(Environment)], Audits, []) + else: + scenario = RandomTests( + cm, [ BootCluster(Environment) ], Audits, Tests) + + LogFactory().log(">>>>>>>>>>>>>>>> BEGINNING " + repr(NumIter) + " TEST" + plural_s(NumIter, True) + " ") + LogFactory().log("Stack: %s (%s)" % (Environment["Stack"], Environment["Name"])) + LogFactory().log("Schema: %s" % Environment["Schema"]) + LogFactory().log("Scenario: %s" % scenario.__doc__) + LogFactory().log("CTS Exerciser: %s" % Environment["cts-exerciser"]) + LogFactory().log("CTS Logfile: %s" % Environment["OutputFile"]) + LogFactory().log("Random Seed: %s" % Environment["RandSeed"]) + LogFactory().log("Syslog variant: %s" % Environment["syslogd"].strip()) + LogFactory().log("System log files: %s" % Environment["LogFileName"]) + if Environment.has_key("IPBase"): + LogFactory().log("Base IP for resources: %s" % Environment["IPBase"]) + LogFactory().log("Cluster starts at boot: %d" % Environment["at-boot"]) + + Environment.dump() + rc = Environment.run(scenario, NumIter) + sys.exit(rc) |