mosquitto/test/lib/ptest.py

115 lines
4.9 KiB
Python
Raw Normal View History

#!/usr/bin/env python3
import subprocess
import time
import sys
max_running = 10
tests = [
('./01-con-discon-success.py', 'c/01-con-discon-success.test'),
('./01-keepalive-pingreq.py', 'c/01-keepalive-pingreq.test'),
('./01-no-clean-session.py', 'c/01-no-clean-session.test'),
('./01-unpwd-set.py', 'c/01-unpwd-set.test'),
('./01-will-set.py', 'c/01-will-set.test'),
('./01-will-unpwd-set.py', 'c/01-will-unpwd-set.test'),
('./02-subscribe-qos0.py', 'c/02-subscribe-qos0.test'),
('./02-subscribe-qos1.py', 'c/02-subscribe-qos1.test'),
('./02-subscribe-qos2.py', 'c/02-subscribe-qos2.test'),
('./02-unsubscribe.py', 'c/02-unsubscribe.test'),
('./03-publish-b2c-qos1.py', 'c/03-publish-b2c-qos1.test'),
('./03-publish-b2c-qos2.py', 'c/03-publish-b2c-qos2.test'),
('./03-publish-c2b-qos1-disconnect.py', 'c/03-publish-c2b-qos1-disconnect.test'),
('./03-publish-c2b-qos2-disconnect.py', 'c/03-publish-c2b-qos2-disconnect.test'),
('./03-publish-c2b-qos2.py', 'c/03-publish-c2b-qos2.test'),
('./03-publish-qos0-no-payload.py', 'c/03-publish-qos0-no-payload.test'),
('./03-publish-qos0.py', 'c/03-publish-qos0.test'),
('./03-request-response.py', 'c/03-request-response.test'),
('./03-request-response-correlation.py', 'c/03-request-response-correlation.test'),
('./04-retain-qos0.py', 'c/04-retain-qos0.test'),
('./08-ssl-bad-cacert.py', 'c/08-ssl-bad-cacert.test'),
('./08-ssl-connect-cert-auth-enc.py', 'c/08-ssl-connect-cert-auth-enc.test'),
('./08-ssl-connect-cert-auth.py', 'c/08-ssl-connect-cert-auth.test'),
('./08-ssl-connect-no-auth.py', 'c/08-ssl-connect-no-auth.test'),
('./09-util-topic-tokenise.py', 'c/09-util-topic-tokenise.test'),
2018-11-09 22:36:08 +00:00
('./11-prop-send-payload-format.py', 'c/11-prop-send-payload-format.test'),
('./11-prop-send-content-type.py', 'c/11-prop-send-content-type.test'),
('./01-con-discon-success.py', 'cpp/01-con-discon-success.test'),
('./01-keepalive-pingreq.py', 'cpp/01-keepalive-pingreq.test'),
('./01-no-clean-session.py', 'cpp/01-no-clean-session.test'),
('./01-unpwd-set.py', 'cpp/01-unpwd-set.test'),
('./01-will-set.py', 'cpp/01-will-set.test'),
('./01-will-unpwd-set.py', 'cpp/01-will-unpwd-set.test'),
('./02-subscribe-qos0.py', 'cpp/02-subscribe-qos0.test'),
('./02-subscribe-qos1.py', 'cpp/02-subscribe-qos1.test'),
('./02-subscribe-qos2.py', 'cpp/02-subscribe-qos2.test'),
('./02-unsubscribe.py', 'cpp/02-unsubscribe.test'),
('./03-publish-b2c-qos1.py', 'cpp/03-publish-b2c-qos1.test'),
('./03-publish-b2c-qos2.py', 'cpp/03-publish-b2c-qos2.test'),
('./03-publish-c2b-qos1-disconnect.py', 'cpp/03-publish-c2b-qos1-disconnect.test'),
('./03-publish-c2b-qos2-disconnect.py', 'cpp/03-publish-c2b-qos2-disconnect.test'),
('./03-publish-c2b-qos2.py', 'cpp/03-publish-c2b-qos2.test'),
('./03-publish-qos0-no-payload.py', 'cpp/03-publish-qos0-no-payload.test'),
('./03-publish-qos0.py', 'cpp/03-publish-qos0.test'),
('./04-retain-qos0.py', 'cpp/04-retain-qos0.test'),
('./08-ssl-bad-cacert.py', 'cpp/08-ssl-bad-cacert.test'),
('./08-ssl-connect-cert-auth-enc.py', 'cpp/08-ssl-connect-cert-auth-enc.test'),
('./08-ssl-connect-cert-auth.py', 'cpp/08-ssl-connect-cert-auth.test'),
('./08-ssl-connect-no-auth.py', 'cpp/08-ssl-connect-no-auth.test'),
('./09-util-topic-tokenise.py', 'cpp/09-util-topic-tokenise.test'),
]
minport = 1888
ports = list(range(minport, minport+max_running+1))
def next_test(tests, ports):
if len(tests) == 0 or len(ports) == 0:
return
test = tests.pop()
port = ports.pop()
p = subprocess.Popen([test[0], test[1], str(port)])
p.mosq_port = port
return p
def run_tests(tests, ports):
passed = 0
failed = 0
failed_tests = []
running_tests = []
while len(tests) > 0 or len(running_tests) > 0:
if len(running_tests) <= max_running:
t = next_test(tests, ports)
if t is None:
time.sleep(0.1)
else:
running_tests.append(t)
for t in running_tests:
t.poll()
if t.returncode is not None:
running_tests.remove(t)
if isinstance(t.mosq_port, tuple):
for portret in t.mosq_port:
ports.append(portret)
else:
ports.append(t.mosq_port)
t.terminate()
t.wait()
#(stdo, stde) = t.communicate()
if t.returncode == 1:
print("\033[31m %s %s\033[0m" % (t.args[0], t.args[1]))
failed = failed + 1
else:
passed = passed + 1
print("\033[32m %s %s\033[0m" % (t.args[0], t.args[1]))
print("Passed: %d\nFailed: %d\nTotal: %d" % (passed, failed, passed+failed))
if failed > 0:
sys.exit(1)
run_tests(tests, ports)