Jonas Schnelli
10 years ago
committed by
João Barbosa
1 changed files with 93 additions and 0 deletions
@ -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