Jonas Schnelli
10 years ago
committed by
João Barbosa
1 changed files with 93 additions and 0 deletions
@ -0,0 +1,93 @@
@@ -0,0 +1,93 @@
|
||||
#!/usr/bin/env python2 |
||||
# Copyright (c) 2015 The Bitcoin Core developers |
||||
# Distributed under the MIT software license, see the accompanying |
||||
# file COPYING or http://www.opensource.org/licenses/mit-license.php. |
||||
|
||||
# |
||||
# Test ZMQ interface |
||||
# |
||||
|
||||
from test_framework.test_framework import BitcoinTestFramework |
||||
from test_framework.util import * |
||||
import zmq |
||||
import binascii |
||||
from test_framework.mininode import hash256 |
||||
|
||||
try: |
||||
import http.client as httplib |
||||
except ImportError: |
||||
import httplib |
||||
try: |
||||
import urllib.parse as urlparse |
||||
except ImportError: |
||||
import urlparse |
||||
|
||||
class ZMQTest (BitcoinTestFramework): |
||||
|
||||
port = 28332 |
||||
|
||||
def setup_nodes(self): |
||||
self.zmqContext = zmq.Context() |
||||
self.zmqSubSocket = self.zmqContext.socket(zmq.SUB) |
||||
self.zmqSubSocket.setsockopt(zmq.SUBSCRIBE, "hashblock") |
||||
self.zmqSubSocket.setsockopt(zmq.SUBSCRIBE, "hashtx") |
||||
self.zmqSubSocket.connect("tcp://127.0.0.1:%i" % self.port) |
||||
# Note: proxies are not used to connect to local nodes |
||||
# this is because the proxy to use is based on CService.GetNetwork(), which return NET_UNROUTABLE for localhost |
||||
return start_nodes(4, self.options.tmpdir, extra_args=[ |
||||
['-zmqpubhashtx=tcp://127.0.0.1:'+str(self.port), '-zmqpubhashblock=tcp://127.0.0.1:'+str(self.port)], |
||||
[], |
||||
[], |
||||
[] |
||||
]) |
||||
|
||||
def run_test(self): |
||||
self.sync_all() |
||||
|
||||
genhashes = self.nodes[0].generate(1); |
||||
self.sync_all() |
||||
|
||||
print "listen..." |
||||
msg = self.zmqSubSocket.recv_multipart() |
||||
topic = str(msg[0]) |
||||
body = msg[1] |
||||
|
||||
msg = self.zmqSubSocket.recv_multipart() |
||||
topic = str(msg[0]) |
||||
body = msg[1] |
||||
blkhash = binascii.hexlify(body) |
||||
|
||||
assert_equal(genhashes[0], blkhash) #blockhash from generate must be equal to the hash received over zmq |
||||
|
||||
n = 10 |
||||
genhashes = self.nodes[1].generate(n); |
||||
self.sync_all() |
||||
|
||||
zmqHashes = [] |
||||
for x in range(0,n*2): |
||||
msg = self.zmqSubSocket.recv_multipart() |
||||
topic = str(msg[0]) |
||||
body = msg[1] |
||||
if topic == "hashblock": |
||||
zmqHashes.append(binascii.hexlify(body)) |
||||
|
||||
for x in range(0,n): |
||||
assert_equal(genhashes[x], zmqHashes[x]) #blockhash from generate must be equal to the hash received over zmq |
||||
|
||||
#test tx from a second node |
||||
hashRPC = self.nodes[1].sendtoaddress(self.nodes[0].getnewaddress(), 1.0) |
||||
self.sync_all() |
||||
|
||||
#now we should receive a zmq msg because the tx was broadcastet |
||||
msg = self.zmqSubSocket.recv_multipart() |
||||
topic = str(msg[0]) |
||||
body = msg[1] |
||||
hashZMQ = "" |
||||
if topic == "hashtx": |
||||
hashZMQ = binascii.hexlify(body) |
||||
|
||||
assert_equal(hashRPC, hashZMQ) #blockhash from generate must be equal to the hash received over zmq |
||||
|
||||
|
||||
if __name__ == '__main__': |
||||
ZMQTest ().main () |
Loading…
Reference in new issue