From 4a0c08fdcf0776fe565d958547796f6a78f415f1 Mon Sep 17 00:00:00 2001 From: John Newbery Date: Wed, 7 Jun 2017 15:45:03 -0400 Subject: [PATCH 1/5] [tests] update zmq test to use correct config.ini file --- test/functional/zmq_test.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/functional/zmq_test.py b/test/functional/zmq_test.py index ce39cfefd..ca89e200e 100755 --- a/test/functional/zmq_test.py +++ b/test/functional/zmq_test.py @@ -28,7 +28,7 @@ class ZMQTest (BitcoinTestFramework): # Check that bitcoin has been built with ZMQ enabled config = configparser.ConfigParser() if not self.options.configfile: - self.options.configfile = os.path.dirname(__file__) + "/config.ini" + self.options.configfile = os.path.dirname(__file__) + "/../config.ini" config.read_file(open(self.options.configfile)) if not config["components"].getboolean("ENABLE_ZMQ"): From 5ebd5f9e1528e8c185e83981007dd6198c7f73dd Mon Sep 17 00:00:00 2001 From: John Newbery Date: Wed, 7 Jun 2017 16:14:20 -0400 Subject: [PATCH 2/5] [tests] tidy up zmq_test.py --- test/functional/test_runner.py | 2 +- test/functional/zmq_test.py | 49 ++++++++++++++++------------------ 2 files changed, 24 insertions(+), 27 deletions(-) diff --git a/test/functional/test_runner.py b/test/functional/test_runner.py index 4702f2d77..8ccb172d9 100755 --- a/test/functional/test_runner.py +++ b/test/functional/test_runner.py @@ -78,7 +78,7 @@ BASE_SCRIPTS= [ 'rawtransactions.py', 'reindex.py', # vv Tests less than 30s vv - "zmq_test.py", + 'zmq_test.py', 'mempool_resurrect_test.py', 'txn_doublespend.py --mineblock', 'txn_clone.py', diff --git a/test/functional/zmq_test.py b/test/functional/zmq_test.py index ca89e200e..fd7cbc05d 100755 --- a/test/functional/zmq_test.py +++ b/test/functional/zmq_test.py @@ -8,15 +8,15 @@ import os import struct from test_framework.test_framework import BitcoinTestFramework, SkipTest -from test_framework.util import * +from test_framework.util import (assert_equal, + bytes_to_hex_str, + ) class ZMQTest (BitcoinTestFramework): def __init__(self): super().__init__() - self.num_nodes = 4 - - port = 28332 + self.num_nodes = 2 def setup_nodes(self): # Try to import python3-zmq. Skip this test if the import fails. @@ -38,57 +38,55 @@ class ZMQTest (BitcoinTestFramework): self.zmqSubSocket = self.zmqContext.socket(zmq.SUB) self.zmqSubSocket.setsockopt(zmq.SUBSCRIBE, b"hashblock") self.zmqSubSocket.setsockopt(zmq.SUBSCRIBE, b"hashtx") - self.zmqSubSocket.connect("tcp://127.0.0.1:%i" % self.port) - self.nodes = self.start_nodes(self.num_nodes, self.options.tmpdir, extra_args=[ - ['-zmqpubhashtx=tcp://127.0.0.1:'+str(self.port), '-zmqpubhashblock=tcp://127.0.0.1:'+str(self.port)], - [], - [], - [] - ]) + ip_address = "tcp://127.0.0.1:28332" + self.zmqSubSocket.connect(ip_address) + extra_args = [['-zmqpubhashtx=%s' % ip_address, '-zmqpubhashblock=%s' % ip_address], []] + self.nodes = self.start_nodes(self.num_nodes, self.options.tmpdir, extra_args) def run_test(self): - self.sync_all() - genhashes = self.nodes[0].generate(1) self.sync_all() - self.log.info("listen...") + self.log.info("Wait for tx") msg = self.zmqSubSocket.recv_multipart() topic = msg[0] assert_equal(topic, b"hashtx") body = msg[1] msgSequence = struct.unpack(' Date: Wed, 7 Jun 2017 16:30:38 -0400 Subject: [PATCH 3/5] [tests] in zmq test, timeout if message not received --- test/functional/zmq_test.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/test/functional/zmq_test.py b/test/functional/zmq_test.py index fd7cbc05d..c1ffecc77 100755 --- a/test/functional/zmq_test.py +++ b/test/functional/zmq_test.py @@ -36,6 +36,7 @@ class ZMQTest (BitcoinTestFramework): self.zmqContext = zmq.Context() self.zmqSubSocket = self.zmqContext.socket(zmq.SUB) + self.zmqSubSocket.set(zmq.RCVTIMEO, 60000) self.zmqSubSocket.setsockopt(zmq.SUBSCRIBE, b"hashblock") self.zmqSubSocket.setsockopt(zmq.SUBSCRIBE, b"hashtx") ip_address = "tcp://127.0.0.1:28332" @@ -94,11 +95,10 @@ class ZMQTest (BitcoinTestFramework): msg = self.zmqSubSocket.recv_multipart() topic = msg[0] body = msg[1] - hashZMQ = "" - if topic == b"hashtx": - hashZMQ = bytes_to_hex_str(body) - msgSequence = struct.unpack(' Date: Wed, 7 Jun 2017 23:30:52 -0400 Subject: [PATCH 4/5] [tests] destroy zmq context in zmq_tests.py --- test/functional/zmq_test.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/test/functional/zmq_test.py b/test/functional/zmq_test.py index c1ffecc77..26c946d21 100755 --- a/test/functional/zmq_test.py +++ b/test/functional/zmq_test.py @@ -45,6 +45,14 @@ class ZMQTest (BitcoinTestFramework): self.nodes = self.start_nodes(self.num_nodes, self.options.tmpdir, extra_args) def run_test(self): + try: + self._zmq_test() + finally: + # Destroy the zmq context + self.log.debug("Destroying zmq context") + self.zmqContext.destroy(linger=None) + + def _zmq_test(self): genhashes = self.nodes[0].generate(1) self.sync_all() From 0a4912e46aecef6f04c6287508020ec60424ed24 Mon Sep 17 00:00:00 2001 From: John Newbery Date: Thu, 8 Jun 2017 09:33:52 -0400 Subject: [PATCH 5/5] [tests] timeout integration tests on travis after 20 minutes --- test/functional/test_runner.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/test/functional/test_runner.py b/test/functional/test_runner.py index 8ccb172d9..637902115 100755 --- a/test/functional/test_runner.py +++ b/test/functional/test_runner.py @@ -20,6 +20,7 @@ import datetime import os import time import shutil +import signal import sys import subprocess import tempfile @@ -389,6 +390,10 @@ class TestHandler: time.sleep(.5) for j in self.jobs: (name, time0, proc, log_out, log_err) = j + if os.getenv('TRAVIS') == 'true' and int(time.time() - time0) > 20 * 60: + # In travis, timeout individual tests after 20 minutes (to stop tests hanging and not + # providing useful output. + proc.send_signal(signal.SIGINT) if proc.poll() is not None: log_out.seek(0), log_err.seek(0) [stdout, stderr] = [l.read().decode('utf-8') for l in (log_out, log_err)]