fixed bitcoin.p2p test and moved to /test
authorForrest Voight <forrest@forre.st>
Fri, 16 Mar 2012 19:15:41 +0000 (15:15 -0400)
committerForrest Voight <forrest@forre.st>
Fri, 16 Mar 2012 19:40:28 +0000 (15:40 -0400)
p2pool/bitcoin/p2p.py
p2pool/test/bitcoin/test_p2p.py [new file with mode: 0644]

index 9ac6e9e..b647728 100644 (file)
@@ -3,10 +3,12 @@ Implementation of Bitcoin's p2p protocol
 '''
 
 import random
+import sys
 import time
 
-from twisted.internet import defer, protocol, reactor, task
+from twisted.internet import protocol, task
 
+import p2pool
 from . import data as bitcoin_data
 from p2pool.util import deferral, p2protocol, pack, variable
 
@@ -143,7 +145,8 @@ class Protocol(p2protocol.Protocol):
             self.factory.gotConnection(None)
         if hasattr(self, 'pinger'):
             self.pinger.stop()
-        print 'Bitcoin connection lost. Reason:', reason.getErrorMessage()
+        if p2pool.DEBUG:
+            print >>sys.stderr, 'Bitcoin connection lost. Reason:', reason.getErrorMessage()
 
 class ClientFactory(protocol.ReconnectingClientFactory):
     protocol = Protocol
@@ -168,20 +171,3 @@ class ClientFactory(protocol.ReconnectingClientFactory):
     
     def getProtocol(self):
         return self.conn.get_not_none()
-
-if __name__ == '__main__':
-    from . import networks
-    factory = ClientFactory(networks.BitcoinMainnet)
-    reactor.connectTCP('127.0.0.1', 8333, factory)
-    
-    @repr
-    @apply
-    @defer.inlineCallbacks
-    def think():
-        try:
-            print (yield (yield factory.getProtocol()).get_block(0x000000000000003aaaf7638f9f9c0d0c60e8b0eb817dcdb55fd2b1964efc5175))
-        except defer.TimeoutError:
-            print "timeout"
-        reactor.stop()
-    
-    reactor.run()
diff --git a/p2pool/test/bitcoin/test_p2p.py b/p2pool/test/bitcoin/test_p2p.py
new file mode 100644 (file)
index 0000000..a564dad
--- /dev/null
@@ -0,0 +1,20 @@
+from twisted.internet import defer, reactor
+from twisted.trial import unittest
+
+from p2pool.bitcoin import data, networks, p2p
+from p2pool.util import deferral
+
+
+class Test(unittest.TestCase):
+    @defer.inlineCallbacks
+    def test_get_block(self):
+        factory = p2p.ClientFactory(networks.nets['bitcoin'])
+        c = reactor.connectTCP('127.0.0.1', 8333, factory)
+        try:
+            h = 0x000000000000046acff93b0e76cd10490551bf871ce9ac9fad62e67a07ff1d1e
+            block = yield deferral.retry()(defer.inlineCallbacks(lambda: defer.returnValue((yield (yield factory.getProtocol()).get_block(h)))))()
+            assert data.merkle_hash(map(data.hash256, map(data.tx_type.pack, block['txs']))) == block['header']['merkle_root']
+            assert data.hash256(data.block_header_type.pack(block['header'])) == h
+        finally:
+            factory.stopTrying()
+            c.disconnect()