diff options
Diffstat (limited to 'cts/lab/OCFIPraTest.py.in')
-rw-r--r-- | cts/lab/OCFIPraTest.py.in | 173 |
1 files changed, 173 insertions, 0 deletions
diff --git a/cts/lab/OCFIPraTest.py.in b/cts/lab/OCFIPraTest.py.in new file mode 100644 index 0000000..2cce304 --- /dev/null +++ b/cts/lab/OCFIPraTest.py.in @@ -0,0 +1,173 @@ +#!@PYTHON@ + +'''OCF IPaddr/IPaddr2 Resource Agent Test''' + +__copyright__ = """Original Author: Huang Zhen <zhenhltc@cn.ibm.com> +Copyright 2004 International Business Machines + +with later changes copyright 2005-2023 the Pacemaker project contributors. +The version control history for this file may have further details. +""" +__license__ = "GNU General Public License version 2 or later (GPLv2+) WITHOUT ANY WARRANTY" + +import os +import sys +import time +import random +import struct +import syslog + +from pacemaker import BuildOptions + + +def usage(): + print("usage: " + sys.argv[0] \ + + " [-2]"\ + + " [--ipbase|-i first-test-ip]"\ + + " [--ipnum|-n test-ip-num]"\ + + " [--help|-h]"\ + + " [--perform|-p op]"\ + + " [number-of-iterations]") + sys.exit(1) + + +def perform_op(ra, ip, op): + os.environ["OCF_RA_VERSION_MAJOR"] = "1" + os.environ["OCF_RA_VERSION_MINOR"] = "0" + os.environ["OCF_ROOT"] = BuildOptions.OCF_ROOT_DIR + os.environ["OCF_RESOURCE_INSTANCE"] = ip + os.environ["OCF_RESOURCE_TYPE"] = ra + os.environ["OCF_RESKEY_ip"] = ip + os.environ["HA_LOGFILE"] = "/dev/null" + os.environ["HA_LOGFACILITY"] = "local7" + path = BuildOptions.OCF_ROOT_DIR + "/resource.d/heartbeat/" + ra + return os.spawnvpe(os.P_WAIT, path, [ra, op], os.environ) + + +def audit(ra, iplist, ipstatus, summary): + passed = 1 + for ip in iplist: + ret = perform_op(ra, ip, "monitor") + if ret != ipstatus[ip]: + passed = 0 + log("audit: status of %s should be %d but it is %d\t [failure]" % + (ip,ipstatus[ip],ret)) + ipstatus[ip] = ret + summary["audit"]["called"] += 1; + if passed : + summary["audit"]["success"] += 1 + else : + summary["audit"]["failure"] += 1 + + +def log(towrite): + t = time.strftime("%Y/%m/%d_%H:%M:%S\t", time.localtime(time.time())) + logstr = t + " "+str(towrite) + syslog.syslog(logstr) + print(logstr) + +if __name__ == '__main__': + ra = "IPaddr" + ipbase = "127.0.0.10" + ipnum = 1 + itnum = 50 + perform = None + summary = { + "start":{"called":0,"success":0,"failure":0}, + "stop" :{"called":0,"success":0,"failure":0}, + "audit":{"called":0,"success":0,"failure":0} + } + syslog.openlog(sys.argv[0], 0, syslog.LOG_LOCAL7) + + # Process arguments... + skipthis = None + args = sys.argv[1:] + for i in range(0, len(args)) : + if skipthis : + skipthis = None + continue + elif args[i] == "-2" : + ra = "IPaddr2" + elif args[i] == "--ip" or args[i] == "-i" : + skipthis = 1 + ipbase = args[i+1] + elif args[i] == "--ipnum" or args[i] == "-n" : + skipthis = 1 + ipnum = int(args[i+1]) + elif args[i] == "--perform" or args[i] == "-p" : + skipthis = 1 + perform = args[i+1] + elif args[i] == "--help" or args[i] == "-h" : + usage() + else: + itnum = int(args[i]) + + log("Begin OCF IPaddr/IPaddr2 Test") + + # Generate the test ips + iplist = [] + ipstatus = {} + fields = ipbase.split('.') + for i in range(0, ipnum) : + ip = fields.join('.') + iplist.append(ip) + ipstatus[ip] = perform_op(ra,ip,"monitor") + fields[3] = str(int(fields[3])+1) + log("Test ip:" + str(iplist)) + + # If use ask perform an operation + if perform != None: + log("Perform opeartion %s"%perform) + for ip in iplist: + perform_op(ra, ip, perform) + log("Done") + sys.exit() + + log("RA Type:" + ra) + log("Test Count:" + str(itnum)) + + # Prepare Random + f = open("/dev/urandom", "r") + seed = struct.unpack("BBB", f.read(3)) + f.close() + #seed=(123,321,231) + rand = random.Random() + rand.seed(seed[0]) + log("Test Random Seed:" + str(seed)) + + # + # Begin Tests + + log(">>>>>>>>>>>>>>>>>>>>>>>>") + for i in range(0, itnum): + ip = rand.choice(iplist) + if ipstatus[ip] == 0: + op = "stop" + elif ipstatus[ip] == 7: + op = "start" + else : + op = rand.choice(["start","stop"]) + + ret = perform_op(ra, ip, op) + # update status + if op == "start" and ret == 0: + ipstatus[ip] = 0 + elif op == "stop" and ret == 0: + ipstatus[ip] = 7 + else : + ipstatus[ip] = 1 + result = "" + if ret == 0: + result = "success" + else : + result = "failure" + summary[op]["called"] += 1 + summary[op][result] += 1 + log( "%d:%s %s \t[%s]"%(i, op, ip, result)) + audit(ra, iplist, ipstatus, summary) + + log("<<<<<<<<<<<<<<<<<<<<<<<<") + log("start:\t" + str(summary["start"])) + log("stop: \t" + str(summary["stop"])) + log("audit:\t" + str(summary["audit"])) + |