1 # Written by Arno Bakker
2 # see LICENSE.txt for license information
4 # This test checks the new SecureOverlay class created in Fall 2006
6 # Note that we start a new Python interpreter for each test case.
7 # Also note we create 2 peers and thus two networking stacks. In principle,
8 # they should use two different SecureOverlay instances (not a singleton), but
9 # there may be some interference.
11 # To properly follow the test, enable debugging on BitTornado/SocketHandler,
12 # BitTornado/ServerPortHandler and BitTornado/Rawserver in addition to
13 # Tribler/Overlay/SecureOverlay
20 from threading import Event, Thread, currentThread
21 from socket import error as socketerror
22 from time import sleep
24 from traceback import print_exc
27 from BaseLib.Core.BitTornado.RawServer import RawServer
28 from BaseLib.Core.BitTornado.ServerPortHandler import MultiHandler
29 from BaseLib.Core.BitTornado.BT1.MessageID import GET_METADATA
31 from M2Crypto import EC
32 from BaseLib.Core.Overlay.SecureOverlay import SecureOverlay, OLPROTO_VER_CURRENT
33 import BaseLib.Core.CacheDB.sqlitecachedb as sqlitecachedb
34 from BaseLib.Core.CacheDB.SqliteCacheDBHandler import PeerDBHandler
35 from BaseLib.Core.Utilities.utilities import show_permid_short
39 class FakeUserCallbackHandler:
40 def notify(self, *args):
45 def __init__(self,lm,keypair,permid,listen_port):
47 self.keypair = keypair
49 self.listen_port = listen_port
50 self.uch = FakeUserCallbackHandler()
55 def get_listen_port(self):
56 return self.listen_port
58 # Thread must come as first parent class!
60 def __init__(self,testcase,port,secover):
64 self.testcase = testcase
66 self.doneflag = Event()
68 config['timeout_check_interval'] = 100000
69 config['timeout'] = 100000
70 config['ipv6_enabled'] = 0
71 config['minport'] = port
72 config['maxport'] = port+5
73 config['random_port'] = 0
75 config['ipv6_binds_v4'] = 0
76 config['max_message_length'] = 2 ** 23
77 config['torrent_collecting_dir'] = config['state_dir'] = config['install_dir'] = tempfile.mkdtemp()
78 config['peer_icon_path'] = 'icons'
80 self.rawserver = RawServer(self.doneflag,
81 config['timeout_check_interval'],
83 ipv6_enable = config['ipv6_enabled'],
84 failfunc = self.report_failure,
85 errorfunc = self.report_error)
88 self.listen_port = self.rawserver.find_and_bind(0,
89 config['minport'], config['maxport'], config['bind'],
91 ipv6_socket_style = config['ipv6_binds_v4'],
92 randomizer = config['random_port'])
93 print >> sys.stderr,"test: Got listen port", self.listen_port
95 except socketerror, e:
96 self.report_failure(str(e))
97 msg = "Couldn't not bind to listen port - " + str(e)
98 self.report_failure(msg)
101 self.multihandler = MultiHandler(self.rawserver, self.doneflag)
102 # Note: We don't want a singleton, we want
103 # two different instances for peer1 and peer2
104 self.secure_overlay = secover
106 self.my_keypair = EC.gen_params(EC.NID_sect233k1)
107 self.my_keypair.gen_key()
108 self.my_permid = str(self.my_keypair.pub().get_der())
111 self.session = FakeSession(self,self.my_keypair,self.my_permid,self.listen_port)
112 self.peer_db = PeerDBHandler.getInstance()
114 self.secure_overlay.register(self,config['max_message_length'])
115 print >>sys.stderr,"Peer: Setting",self.secure_overlay.get_handler(),"as handler at SocketHandler"
116 self.rawserver.sockethandler.set_handler(self.secure_overlay.get_handler())
117 self.secure_overlay.start_listening()
119 # Stupid rawserver goes into very long wait if there are no short
120 # term tasks. Emulate this
121 self.rawserver.add_task(self.dummy_task,0)
124 print >> sys.stderr,"test: MyServer: run called by",currentThread().getName()
125 self.multihandler.listen_forever()
127 def report_failure(self,msg):
128 self.testcase.assertRaises(Exception, self.report_failure)
130 def report_error(self,msg):
131 self.testcase.assertRaises(Exception, self.report_error)
133 def dummy_task(self):
134 self.rawserver.add_task(self.dummy_task,1)
136 def get_ext_ip(self):
141 self.rawserver.shutdown()
144 class TestSecureOverlay(unittest.TestCase):
147 self.config_path = tempfile.mkdtemp()
149 config['state_dir'] = self.config_path
150 config['install_dir'] = os.path.join('..','..')
151 config['torrent_collecting_dir'] = self.config_path
152 config['peer_icon_path'] = os.path.join(self.config_path,'peer_icons')
153 config['superpeer'] = False
154 sqlitecachedb.init(config, self.rawserver_fatalerrorfunc)
156 secover1 = SecureOverlay.getInstance()
157 secover1.resetSingleton()
158 secover2 = SecureOverlay.getInstance()
159 secover2.resetSingleton()
161 self.peer1 = Peer(self,1234,secover1)
162 self.peer2 = Peer(self,5678,secover2)
171 print >>sys.stderr,"test: setUp: peer1 permid is",show_permid_short(self.peer1.my_permid)
172 print >>sys.stderr,"test: setUp: peer2 permid is",show_permid_short(self.peer2.my_permid)
174 sleep(2) # let server threads start
177 print >> sys.stderr,"test: tearDown: waiting 10 secs"
179 if self.wanted and not self.got:
180 self.assert_(False,"callback was not called")
181 if self.wanted2 and not self.got2:
182 self.assert_(False,"other callback was not called")
183 self.peer1.shutdown()
184 self.peer2.shutdown()
187 shutil.rmtree(self.config_path)
189 # Not fatal if something goes wrong here, and Win32 often gives
190 # spurious Permission Denied errors.
195 # connect_dns() to an address that noone responds at
197 def singtest_connect_dns_to_dead_peer(self):
198 print >> sys.stderr,"test: test_connect_dns_to_dead_peer"
200 self.peer1.secure_overlay.connect_dns(("127.0.0.1", 22220),self.connect_dns_to_dead_peer_callback)
201 # Arno, 2009-04-23: was 2 secs, somehow the failed event comes in real slow now.
202 sleep(4) # let rawserver thread establish connection, which should fail
203 self.assert_(len(self.peer1.secure_overlay.iplport2oc) == 0)
205 def connect_dns_to_dead_peer_callback(self,exc,dns,permid,selver):
206 print >> sys.stderr,"test: connect_dns_to_dead_peer_callback"
207 self.assert_(exc is not None)
208 self.assert_(dns == ("127.0.0.1", 22220))
209 self.assert_(permid is None)
214 # connect_dns() to an address that peer2 responds
216 def singtest_connect_dns_to_live_peer(self):
217 print >> sys.stderr,"test: test_connect_dns_to_live_peer"
219 self.peer1.secure_overlay.connect_dns(("127.0.0.1", 5678),self.connect_dns_to_live_peer_callback)
220 sleep(2) # let rawserver thread establish connection, which should succeed
221 self.assert_(len(self.peer1.secure_overlay.iplport2oc) == 1)
222 self.assert_(self.peer1.secure_overlay.iplport2oc.has_key('127.0.0.1:5678'))
224 def connect_dns_to_live_peer_callback(self,exc,dns,permid,selver):
225 print >> sys.stderr,"test: connect_dns_to_live_peer_callback"
226 self.assert_(exc is None)
227 self.assert_(dns == ("127.0.0.1", 5678))
228 self.assert_(permid == self.peer2.my_permid)
233 # connect() to a fake permid
235 def singtest_connect_to_dead_peerA(self):
236 print >> sys.stderr,"test: test_connect_to_dead_peer"
239 self.peer1.secure_overlay.connect(hispermid,self.connect_to_dead_peerA_callback)
240 sleep(2) # let rawserver thread establish connection, which should fail
241 self.assert_(len(self.peer1.secure_overlay.iplport2oc) == 0)
243 def connect_to_dead_peerA_callback(self,exc,dns,permid,selver):
244 print >> sys.stderr,"test: connect_to_dead_peer_callback"
245 self.assert_(exc is not None)
246 self.assert_(permid == 'blabla')
250 # connect() to a real permid for which there is an address in the
251 # database that noone responds at
253 def singtest_connect_to_dead_peerB(self):
254 print >> sys.stderr,"test: test_connect_to_dead_peerB"
257 peer_db = PeerDBHandler.getInstance()
258 hispermid = self.peer2.my_permid
259 peer_db.addPeer(hispermid, {'ip':"127.0.0.1", 'port':22220})
261 self.peer1.secure_overlay.connect(hispermid,self.connect_to_dead_peerB_callback)
262 # Arno, 2009-04-23: was 2 secs, somehow the failed event comes in real slow now.
263 sleep(4) # let rawserver thread establish connection, which should fail
264 self.assert_(len(self.peer1.secure_overlay.iplport2oc) == 0)
266 def connect_to_dead_peerB_callback(self,exc,dns,permid,selver):
267 print >> sys.stderr,"test: connect_to_dead_peerB_callback",exc
268 self.assert_(exc is not None)
269 self.assert_(dns == ("127.0.0.1", 22220))
270 self.assert_(permid == self.peer2.my_permid)
275 # connect() to peer2 which responds
277 def singtest_connect_to_live_peer(self):
278 print >> sys.stderr,"test: test_connect_to_live_peer"
281 peer_db = PeerDBHandler.getInstance()
282 hispermid = self.peer2.my_permid
283 peer_db.addPeer(hispermid,{'ip':"127.0.0.1", 'port':5678})
285 self.peer1.secure_overlay.connect(hispermid,self.connect_to_live_peer_callback)
286 sleep(2) # let rawserver thread establish connection, which should succeed
287 self.assert_(len(self.peer1.secure_overlay.iplport2oc) == 1)
288 self.assert_(self.peer1.secure_overlay.iplport2oc.has_key('127.0.0.1:5678'))
290 def connect_to_live_peer_callback(self,exc,dns,permid,selver):
291 print >> sys.stderr,"test: connect_to_live_peer_callback",exc
292 self.assert_(exc is None)
293 self.assert_(dns == ("127.0.0.1", 5678))
294 self.assert_(permid == self.peer2.my_permid)
299 # connect() to peer2 which responds, and then connect again
301 def singtest_connect_twice_to_live_peer(self):
302 print >> sys.stderr,"test: test_connect_to_live_peer"
306 peer_db = PeerDBHandler.getInstance()
307 hispermid = self.peer2.my_permid
308 peer_db.addPeer(hispermid,{'ip':"127.0.0.1", 'port':5678})
310 self.peer1.secure_overlay.connect(hispermid,self.connect_to_live_peer_callback)
311 sleep(2) # let rawserver thread establish connection, which should succeed
312 self.assert_(len(self.peer1.secure_overlay.iplport2oc) == 1)
313 self.assert_(self.peer1.secure_overlay.iplport2oc.has_key('127.0.0.1:5678'))
314 self.peer1.secure_overlay.connect(hispermid,self.connect_to_live_peer_again_callback)
316 def connect_to_live_peer_again_callback(self,exc,dns,permid,selver):
317 print >> sys.stderr,"test: connect_to_live_peer_callback",exc
318 self.assert_(exc is None)
319 self.assert_(dns == ("127.0.0.1", 5678))
320 self.assert_(permid == self.peer2.my_permid)
325 # send() over a non-existing connection to peer2
327 def singtest_send_unopenedA(self):
328 print >> sys.stderr,"test: test_send_unopenedA"
330 hispermid = self.peer2.my_permid
331 self.peer1.secure_overlay.send(hispermid,'msg=bla',self.send_unopenedA_send_callback)
332 sleep(2) # let rawserver thread close connection, which should succeed
333 self.assert_(len(self.peer1.secure_overlay.iplport2oc) == 0)
335 def send_unopenedA_send_callback(self,exc,permid):
336 print >> sys.stderr,"test: send_unopenedA_send_callback",exc
337 self.assert_(exc is not None)
338 self.assert_(permid == self.peer2.my_permid)
343 # send() over a non-existing connection to peer2 whose address is in database
345 def singtest_send_unopenedB(self):
346 print >> sys.stderr,"test: test_send_unopenedB"
348 peer_db = PeerDBHandler.getInstance()
349 hispermid = self.peer2.my_permid
350 peer_db.addPeer(hispermid,{'ip':"127.0.0.1", 'port':5678})
351 self.peer1.secure_overlay.send(hispermid,'msg=bla',self.send_unopenedB_send_callback)
352 sleep(2) # let rawserver thread close connection, which should succeed
353 self.assert_(len(self.peer1.secure_overlay.iplport2oc) == 0)
355 def send_unopenedB_send_callback(self,exc,permid):
356 print >> sys.stderr,"test: send_unopenedB_send_callback",exc
357 self.assert_(exc is not None)
358 self.assert_(permid == self.peer2.my_permid)
363 # send() over a connection to peer2 that peer1 closed
365 def singtest_send_local_close(self):
366 print >> sys.stderr,"test: test_send_local_close"
369 self.peer1.secure_overlay.connect_dns(("127.0.0.1", 5678),self.connect_dns_to_live_peer_callback)
370 sleep(2) # let rawserver thread establish connection, which should succeed
371 self.assert_(len(self.peer1.secure_overlay.iplport2oc) == 1)
372 self.assert_(self.peer1.secure_overlay.iplport2oc.has_key('127.0.0.1:5678'))
374 hispermid = self.peer2.my_permid
375 self.peer1.secure_overlay.close(hispermid)
376 self.peer1.secure_overlay.send(hispermid,'msg=bla',self.send_local_close_send_callback)
377 sleep(2) # let rawserver thread close connection, which should succeed
378 self.assert_(len(self.peer1.secure_overlay.iplport2oc) == 0)
380 def send_local_close_send_callback(self,exc,permid):
381 print >> sys.stderr,"test: send_local_close_send_callback",exc
382 self.assert_(exc is not None)
383 self.assert_(permid == self.peer2.my_permid)
387 # send() over a connection to peer2 that peer2 closed
389 def singtest_send_remote_close(self):
390 print >> sys.stderr,"test: test_send_remote_close"
395 # register handler for connections
396 self.peer2.secure_overlay.register_conns_callback(self.send_remote_close_conns_callback)
398 self.peer1.secure_overlay.connect_dns(("127.0.0.1", 5678),self.connect_dns_to_live_peer_callback)
399 # let rawserver thread establish connection, which should succeed
400 # then let rawserver thread close connection, which should succeed
401 # net result is no connection to peer2
402 self.peer1.secure_overlay.send(self.peer2.my_permid,'msg=bla',self.send_remote_close_send_callback)
404 self.assert_(len(self.peer1.secure_overlay.iplport2oc) == 0)
406 def send_remote_close_conns_callback(self,exc,permid,selversion,locally_initiated,hisdns=None):
407 print >> sys.stderr,"test: send_remote_close_conns_callback",exc,show_permid_short(permid)
409 self.assert_(exc is None)
410 self.assert_(permid == self.peer1.my_permid)
411 self.assert_(selversion == OLPROTO_VER_CURRENT)
412 self.assert_(not locally_initiated)
416 hispermid = self.peer1.my_permid
417 self.peer2.secure_overlay.close(hispermid)
419 self.assert_(exc is not None)
420 self.assert_(permid == self.peer1.my_permid)
421 self.assert_(selversion == OLPROTO_VER_CURRENT)
422 self.assert_(not locally_initiated)
424 def send_remote_close_send_callback(self,exc,permid):
425 print >> sys.stderr,"test: send_remote_close_send_callback",exc
426 self.assert_(exc is not None)
427 self.assert_(permid == self.peer2.my_permid)
432 # send() over an open connection to peer2
434 def singtest_send_opened(self):
435 print >> sys.stderr,"test: test_send_opened"
438 peer_db = PeerDBHandler.getInstance()
439 hispermid = self.peer2.my_permid
440 peer_db.addPeer(hispermid,{'ip':"127.0.0.1", 'port':5678})
441 msg = GET_METADATA+'12345678901234567890'
442 self.peer1.secure_overlay.connect(hispermid,lambda e,d,p,s: self.send_opened_connect_callback(e,d,p,s,msg))
444 def send_opened_connect_callback(self,exc,dns,permid,selver,msg):
445 print >> sys.stderr,"test: send_opened_connect_callback"
446 self.assert_(exc is None)
447 self.assert_(dns == ("127.0.0.1", 5678))
448 self.assert_(permid == self.peer2.my_permid)
449 self.peer1.secure_overlay.send(permid,msg,self.send_opened_send_callback)
452 def send_opened_send_callback(self,exc,permid):
453 print >> sys.stderr,"test: send_opened_send_callback"
454 self.assert_(exc is None)
455 self.assert_(permid == self.peer2.my_permid)
460 # close() a non-existing to peer2
462 def singtest_close_unopened(self):
463 print >> sys.stderr,"test: test_close_unopened"
464 hispermid = self.peer2.my_permid
465 self.peer1.secure_overlay.close(hispermid)
466 sleep(2) # let rawserver thread close connection, which should succeed
467 self.assert_(len(self.peer1.secure_overlay.iplport2oc) == 0)
471 # close() an open connection to peer2
473 def singtest_close_opened(self):
474 print >> sys.stderr,"test: test_close_opened"
475 self.peer1.secure_overlay.connect_dns(("127.0.0.1", 5678),self.connect_dns_to_live_peer_callback)
476 sleep(2) # let rawserver thread establish connection, which should succeed
477 self.assert_(len(self.peer1.secure_overlay.iplport2oc) == 1)
478 self.assert_(self.peer1.secure_overlay.iplport2oc.has_key('127.0.0.1:5678'))
480 hispermid = self.peer2.my_permid
481 self.peer1.secure_overlay.close(hispermid)
482 sleep(2) # let rawserver thread close connection, which should succeed
483 self.assert_(len(self.peer1.secure_overlay.iplport2oc) == 0)
487 # Let peer2 register an receive callback and let peer1 send a message
489 def singtest_receive(self):
490 print >> sys.stderr,"test: test_receive"
493 # register handler for messages
494 self.peer2.secure_overlay.register_recv_callback(self.receive_msg_callback)
496 peer_db = PeerDBHandler.getInstance()
497 hispermid = self.peer2.my_permid
498 peer_db.addPeer(hispermid,{'ip':"127.0.0.1", 'port':5678})
499 msg = GET_METADATA+'12345678901234567890'
500 self.peer1.secure_overlay.connect(hispermid,lambda e,d,p,s: self.receive_connect_callback(e,d,p,s,msg))
502 def receive_connect_callback(self,exc,dns,permid,selver,msg):
503 print >> sys.stderr,"test: receive_connect_callback"
504 self.assert_(exc is None)
505 self.assert_(dns == ("127.0.0.1", 5678))
506 self.assert_(permid == self.peer2.my_permid)
507 self.peer1.secure_overlay.send(permid,msg,self.receive_send_callback)
508 print >> sys.stderr,"test: test_receive exiting"
510 def receive_send_callback(self,exc,permid):
511 print >> sys.stderr,"test: receive_send_callback"
512 self.assert_(exc is None)
513 self.assert_(permid == self.peer2.my_permid)
516 def receive_msg_callback(self,permid,selversion,message):
517 print >> sys.stderr,"test: testcase succesfully received message"
519 self.assert_(message[0] == GET_METADATA)
520 self.assert_(permid == self.peer1.my_permid)
521 self.assert_(selversion == OLPROTO_VER_CURRENT)
525 # Let peer2 register an connection callback and let peer1 send a message
526 # which implies setting up a connection
528 def singtest_got_conn_incoming(self):
529 print >> sys.stderr,"test: test_got_conn_incoming"
532 # register handler for messages
533 self.peer2.secure_overlay.register_recv_callback(self.receive_msg_callback)
534 # register handler for connections
535 self.peer2.secure_overlay.register_conns_callback(self.got_conn_incoming_conns_callback)
538 peer_db = PeerDBHandler.getInstance()
539 hispermid = self.peer2.my_permid
540 peer_db.addPeer(hispermid,{'ip':"127.0.0.1", 'port':5678})
541 msg = GET_METADATA+'12345678901234567890'
542 self.peer1.secure_overlay.connect(hispermid,lambda e,d,p,s:self.got_conn_incoming_connect_callback(e,d,p,s,msg))
545 def got_conn_incoming_connect_callback(self,exc,dns,permid,selver,msg):
546 print >> sys.stderr,"test: got_conn_incoming_connect_callback",exc
547 self.assert_(exc is None)
548 self.assert_(dns == ("127.0.0.1", 5678))
549 self.assert_(permid == self.peer2.my_permid)
550 self.peer1.secure_overlay.send(permid,msg,self.receive_send_callback)
551 print >> sys.stderr,"test: test_got_conn_incoming exiting"
553 def got_conn_incoming_conns_callback(self,exc,permid,selversion,locally_initiated,hisdns=None):
554 print >> sys.stderr,"test: got_conn_incoming_conns_callback",exc,show_permid_short(permid)
555 self.assert_(exc is None)
556 self.assert_(permid == self.peer1.my_permid)
557 self.assert_(selversion == OLPROTO_VER_CURRENT)
558 self.assert_(not locally_initiated)
563 # Let peer1 register an connection callback and let peer1 send a message
564 # which implies setting up a connection
566 def singtest_got_conn_outgoing(self):
567 print >> sys.stderr,"test: test_got_conn_outgoing"
570 # register handler for connections
571 self.peer1.secure_overlay.register_conns_callback(self.got_conn_outgoing_conns_callback)
573 peer_db = PeerDBHandler.getInstance()
574 hispermid = self.peer2.my_permid
575 peer_db.addPeer(hispermid,{'ip':"127.0.0.1", 'port':5678})
576 msg = GET_METADATA+'12345678901234567890'
577 self.peer1.secure_overlay.connect(hispermid,lambda e,d,p,s:self.got_conn_outgoing_connect_callback(e,d,p,s,msg))
580 def got_conn_outgoing_connect_callback(self,exc,dns,permid,selver,msg):
581 print >> sys.stderr,"test: got_conn_outgoing_connect_callback",exc
582 self.assert_(exc is None)
583 self.assert_(dns == ("127.0.0.1", 5678))
584 self.assert_(permid == self.peer2.my_permid)
587 def got_conn_outgoing_conns_callback(self,exc,permid,selversion,locally_initiated,hisdns=None):
588 print >> sys.stderr,"test: got_conn_outgoing_conns_callback",exc,show_permid_short(permid)
589 self.assert_(exc is None)
590 self.assert_(permid == self.peer2.my_permid)
591 self.assert_(selversion == OLPROTO_VER_CURRENT)
592 self.assert_(locally_initiated)
598 # Let peer2 register a connection callback and let peer1 close the connection
599 # after succesful setup.
601 def singtest_got_conn_local_close(self):
602 print >> sys.stderr,"test: test_got_conn_local_close"
607 # register handler for connections
608 self.peer2.secure_overlay.register_conns_callback(self.got_conn_local_close_conns_callback)
610 self.peer1.secure_overlay.connect_dns(("127.0.0.1", 5678),self.connect_dns_to_live_peer_callback)
611 sleep(2) # let rawserver thread establish connection, which should succeed
612 self.assert_(len(self.peer1.secure_overlay.iplport2oc) == 1)
613 self.assert_(self.peer1.secure_overlay.iplport2oc.has_key('127.0.0.1:5678'))
615 hispermid = self.peer2.my_permid
616 self.peer1.secure_overlay.close(hispermid)
617 sleep(2) # let rawserver thread close connection, which should succeed
618 self.assert_(len(self.peer1.secure_overlay.iplport2oc) == 0)
621 def got_conn_local_close_conns_callback(self,exc,permid,selversion,locally_initiated,hisdns=None):
622 print >> sys.stderr,"test: got_conn_local_close_conns_callback",exc,show_permid_short(permid)
624 self.assert_(exc is None)
625 self.assert_(permid == self.peer1.my_permid)
626 self.assert_(selversion == OLPROTO_VER_CURRENT)
627 self.assert_(not locally_initiated)
631 self.assert_(exc is not None)
632 self.assert_(permid == self.peer1.my_permid)
633 self.assert_(selversion == OLPROTO_VER_CURRENT)
634 self.assert_(not locally_initiated)
638 # Let peer2 register a connection callback and let peer2 close the connection
639 # after succesful setup.
641 def singtest_got_conn_remote_close(self):
642 print >> sys.stderr,"test: test_got_conn_remote_close"
647 # register handler for connections
648 self.peer2.secure_overlay.register_conns_callback(self.got_conn_remote_close_conns_callback)
650 self.peer1.secure_overlay.connect_dns(("127.0.0.1", 5678),self.connect_dns_to_live_peer_callback)
651 # let rawserver thread establish connection, which should succeed
652 # then let rawserver thread close connection, which should succeed
653 # net result is no connection to peer2
655 self.assert_(len(self.peer1.secure_overlay.iplport2oc) == 0)
657 def got_conn_remote_close_conns_callback(self,exc,permid,selversion,locally_initiated,hisdns=None):
658 print >> sys.stderr,"test: got_conn_remote_close_conns_callback",exc,show_permid_short(permid)
660 self.assert_(exc is None)
661 self.assert_(permid == self.peer1.my_permid)
662 self.assert_(selversion == OLPROTO_VER_CURRENT)
663 self.assert_(not locally_initiated)
667 hispermid = self.peer1.my_permid
668 self.peer2.secure_overlay.close(hispermid)
670 self.assert_(exc is not None)
671 self.assert_(permid == self.peer1.my_permid)
672 self.assert_(selversion == OLPROTO_VER_CURRENT)
673 self.assert_(not locally_initiated)
676 def rawserver_fatalerrorfunc(self,e):
677 """ Called by network thread """
679 print >>sys.stderr,"test_secure_overlay: RawServer fatal error func called",e
685 suite = unittest.TestSuite()
686 # We should run the tests in a separate Python interpreter to prevent
687 # problems with our singleton classes, e.g. PeerDB, etc.
688 if len(sys.argv) != 2:
689 print "Usage: python test_so.py <method name>"
691 suite.addTest(TestSecureOverlay(sys.argv[1]))
696 unittest.main(defaultTest='test_suite',argv=[sys.argv[0]])
698 if __name__ == "__main__":