You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
mosquitto/test/broker/ntest.py

162 lines
4.3 KiB
Python

#!/usr/bin/env python3
import mosq_test_helper
import mosq_test
import os
import ptest
import threading
import importlib
import time
tests = [
'01-connect-bad-packet',
'01-connect-disconnect-v5',
'01-connect-duplicate',
'01-connect-invalid-id-0',
'01-connect-invalid-id-missing',
'01-connect-invalid-id-utf8',
'01-connect-invalid-protonum',
'01-connect-invalid-reserved',
'01-connect-success',
'01-connect-uname-invalid-utf8',
'01-connect-uname-no-flag',
'01-connect-uname-pwd-no-flag',
'02-shared-qos0-v5',
'02-subhier-crash',
'02-subpub-b2c-topic-alias',
'02-subpub-qos0-long-topic',
'02-subpub-qos0-retain-as-publish',
'02-subpub-qos0-send-retain',
'02-subpub-qos0-subscription-id',
'02-subpub-qos0-topic-alias-unknown',
'02-subpub-qos0-topic-alias',
'02-subpub-qos0',
'02-subpub-qos1-bad-pubcomp',
'02-subpub-qos1-bad-pubrec',
'02-subpub-qos1-message-expiry-retain',
'02-subpub-qos1-message-expiry-will',
'02-subpub-qos1-message-expiry',
'02-subpub-qos1-nolocal',
'02-subpub-qos1',
'02-subpub-qos2-1322',
'02-subpub-qos2-bad-puback-1',
'02-subpub-qos2-bad-puback-2',
'02-subpub-qos2-bad-pubcomp',
'02-subpub-qos2-pubrec-error',
'02-subpub-qos2-receive-maximum-1',
'02-subpub-qos2-receive-maximum-2',
'02-subpub-qos2',
'02-subscribe-dollar-v5',
'02-subscribe-invalid-utf8',
'02-subscribe-long-topic',
'02-subscribe-persistence-flipflop',
'02-subscribe-qos0',
'02-subscribe-qos1',
'02-subscribe-qos2',
'02-unsubscribe-invalid-no-topic',
'02-unsubscribe-qos0',
'02-unsubscribe-qos1',
'02-unsubscribe-qos2-multiple',
'02-unsubscribe-qos2',
##'03-pattern-matching',
'03-publish-b2c-disconnect-qos1',
'03-publish-b2c-disconnect-qos2',
'03-publish-b2c-qos1-len',
'03-publish-b2c-qos2-len',
'03-publish-c2b-disconnect-qos2',
'03-publish-c2b-qos2-len',
'03-publish-dollar-v5',
'03-publish-dollar',
'03-publish-invalid-utf8',
'03-publish-long-topic',
'03-publish-qos1-no-subscribers-v5',
'03-publish-qos1',
'03-publish-qos2',
'04-retain-qos0-clear',
'04-retain-qos0-fresh',
'04-retain-qos0-repeated',
'04-retain-qos0',
'04-retain-qos1-qos0',
'05-clean-session-qos1',
'05-session-expiry-v5',
'06-bridge-no-local',
'07-will-delay',
'07-will-delay-reconnect',
'07-will-delay-recover',
'07-will-delay-session-expiry',
'07-will-delay-session-expiry2',
'07-will-disconnect-with-will',
'07-will-invalid-utf8',
'07-will-no-flag',
'07-will-null',
'07-will-null-topic',
'07-will-properties',
'07-will-qos0',
'07-will-reconnect-1273',
'07-will-takeover',
'09-auth-bad-method',
'09-extended-auth-unsupported',
'12-prop-assigned-client-identifier',
'12-prop-maximum-packet-size-connect',
'12-prop-maximum-packet-size-publish',
'12-prop-maximum-packet-size-publish-qos1',
'12-prop-maximum-packet-size-publish-qos2',
'12-prop-response-topic',
'12-prop-response-topic-correlation-data',
'12-prop-session-expiry-invalid',
'12-prop-subpub-content-type',
'12-prop-subpub-payload-format',
'12-prop-topic-alias-invalid',
'13-malformed-subscribe-v5',
'13-malformed-unsubscribe-v5',
]
def single_test(name):
start_time = time.time()
try:
mod = importlib.import_module(name)
except ModuleNotFoundError:
print("------ : \033[31m%s\033[0m test not found" % (name))
return 1
rc = mod.all_tests()
runtime = time.time() - start_time
if rc:
print("%0.3fs : \033[31m%s\033[0m" % (runtime, name))
else:
print("%0.3fs : \033[32m%s\033[0m" % (runtime, name))
return rc
port = mosq_test.get_port()
broker = mosq_test.start_broker(filename=os.path.basename(__file__), port=port, collect_output=False)
rc = 0
try:
# FIXME - use Queue instead to limit max threads
threads = []
for test in tests:
t = threading.Thread(target=single_test, args=(test,), name=test)
threads.append(t)
t.start()
# FIXME - return code
for t in threads:
t.join()
finally:
broker.terminate()
broker.wait()
(stdo, stde) = broker.communicate()
if rc:
print(stde.decode('utf-8'))