class TestAsServer(unittest.TestCase): """ Parent class for testing the server-side of Tribler """ def setUp(self): """ unittest test setup code """ self.setUpPreSession() self.session = Session(self.config) self.hisport = self.session.get_listen_port() self.setUpPostSession() def setUpPreSession(self): """ Should set self.config_path and self.config """ self.config_path = tempfile.mkdtemp() self.config = SessionStartupConfig() self.config.set_state_dir(self.config_path) self.config.set_listen_port(random.randint(10000, 60000)) self.config.set_buddycast(False) self.config.set_start_recommender(False) self.config.set_torrent_checking(False) self.config.set_superpeer(False) self.config.set_dialback(False) self.config.set_social_networking(False) self.config.set_remote_query(False) self.config.set_internal_tracker(False) self.config.set_bartercast(False) self.config.set_multicast_local_peer_discovery(False) # Assume all test scripts are run from Tribler/Test self.config.set_install_dir(os.path.abspath(os.path.join('..','..'))) self.my_keypair = EC.gen_params(EC.NID_sect233k1) self.my_keypair.gen_key() def setUpPostSession(self): """ Should set self.his_keypair """ keypair_filename = os.path.join(self.config_path,'ec.pem') self.his_keypair = EC.load_key(keypair_filename) def tearDown(self): """ unittest test tear down code """ if self.session is not None: self.session.shutdown() print >>sys.stderr,time.asctime(),'-', "test_as_server: sleeping after session shutdown" time.sleep(2) try: shutil.rmtree(self.config_path) except: # Not fatal if something goes wrong here, and Win32 often gives # spurious Permission Denied errors. print_exc()
class TestAsServer(unittest.TestCase): """ Parent class for testing the server-side of Tribler """ def setUp(self): """ unittest test setup code """ self.setUpPreSession() self.session = Session(self.config) self.hisport = self.session.get_listen_port() self.setUpPostSession() def setUpPreSession(self): """ Should set self.config_path and self.config """ self.config_path = tempfile.mkdtemp() self.config = SessionStartupConfig() self.config.set_state_dir(self.config_path) self.config.set_listen_port(random.randint(10000, 60000)) self.config.set_buddycast(False) self.config.set_start_recommender(False) self.config.set_torrent_checking(False) self.config.set_superpeer(False) self.config.set_dialback(False) self.config.set_social_networking(False) self.config.set_remote_query(False) self.config.set_internal_tracker(False) self.config.set_bartercast(False) self.config.set_multicast_local_peer_discovery(False) # Assume all test scripts are run from Tribler/Test self.config.set_install_dir(os.path.abspath(os.path.join('..','..'))) self.my_keypair = EC.gen_params(EC.NID_sect233k1) self.my_keypair.gen_key() def setUpPostSession(self): """ Should set self.his_keypair """ keypair_filename = os.path.join(self.config_path,'ec.pem') self.his_keypair = EC.load_key(keypair_filename) def tearDown(self): """ unittest test tear down code """ if self.session is not None: self.session.shutdown() print >>sys.stderr,"test_as_server: sleeping after session shutdown" time.sleep(2) try: shutil.rmtree(self.config_path) except: # Not fatal if something goes wrong here, and Win32 often gives # spurious Permission Denied errors. print_exc()
class TestChannelCast(TestAsServer): """ Testing ChannelCast message """ def setUp(self): """ override TestAsServer """ # From TestAsServer.setUp(self): ignore singleton on self.setUpPreSession() self.session = Session(self.config, ignore_singleton=True) self.hisport = self.session.get_listen_port() self.setUpPostSession() # New code self.channelcastdb = ChannelCastDBHandler.getInstance() self.channelcastdb.registerSession(self.session) self.votecastdb = VoteCastDBHandler.getInstance() self.votecastdb.registerSession(self.session) def setUpPreSession(self): """ override TestAsServer """ TestAsServer.setUpPreSession(self) # BuddyCast self.config.set_buddycast(True) self.config.set_start_recommender(True) fd, self.superpeerfilename = tempfile.mkstemp() os.write(fd, '') os.close(fd) self.config.set_superpeer_file(self.superpeerfilename) def setUpPostSession(self): """ override TestAsServer """ TestAsServer.setUpPostSession(self) self.mypermid = str(self.my_keypair.pub().get_der()) self.hispermid = str(self.his_keypair.pub().get_der()) self.myhash = sha(self.mypermid).digest() def tearDown(self): """ override TestAsServer """ TestAsServer.tearDown(self) try: os.remove(self.superpeerfilename) except: print_exc() def test_channel_subscription(self): self.votecastdb.unsubscribe(bin2str(self.mypermid)) self.assertEqual( self.votecastdb.getVote(bin2str(self.mypermid), bin2str(self.hispermid)), None) print >> sys.stderr, self.votecastdb.getAll() self.votecastdb.spam(bin2str(self.mypermid)) self.assertEqual( self.votecastdb.getVote(bin2str(self.mypermid), bin2str(self.hispermid)), -1) print >> sys.stderr, self.votecastdb.getAll() self.votecastdb.subscribe(bin2str(self.mypermid)) self.assertEqual( self.votecastdb.getVote(bin2str(self.mypermid), bin2str(self.hispermid)), 2) print >> sys.stderr, self.votecastdb.getAll() self.votecastdb.unsubscribe(bin2str(self.mypermid)) self.assertEqual( self.votecastdb.getVote(bin2str(self.mypermid), bin2str(self.hispermid)), 0) print >> sys.stderr, self.votecastdb.getAll() self.votecastdb.spam(bin2str(self.mypermid)) self.assertEqual( self.votecastdb.getVote(bin2str(self.mypermid), bin2str(self.hispermid)), -1) print >> sys.stderr, self.votecastdb.getAll() def check_chquery_reply(self, data): d = bdecode(data) self.assert_(type(d) == DictType) self.assert_(d.has_key('a')) self.assert_(d.has_key('id')) id = d['id'] self.assert_(type(id) == StringType) def test_channelcast(self): torrent_data = { 'announce': "http://localhost", 'info': { 'name': 'Hello 123', 'files': [{ 'length': 100, 'path': ['license.txt'] }] } } infohash = bin2str(sha(bencode(torrent_data['info'])).digest()) self.channelcastdb.addOwnTorrent(infohash, torrent_data) s = OLConnection(self.my_keypair, 'localhost', self.hisport) chcast = ChannelCastCore(None, s, self.session, None, log='', dnsindb=None) # Good message chdata = chcast.createChannelCastMessage() if chdata is None or len(chdata) == 0: print "test: no subscriptions for us.. hence do not send" else: msg = CHANNELCAST + bencode(chdata) print "test: channelcast msg created", repr(chdata) s.send(msg) time.sleep(3) # Bad message if chdata is None or len(chdata) == 0: pass else: pub_id, pub_name, infohash, torrenthash, name, timestamp, signature = chdata[ 0] chdata = [(pub_id, pub_name, infohash, torrenthash, name, 12343, signature)] msg = CHANNELCAST + bencode(chdata) print "test: channelcast msg created", repr(chdata) s.send(msg) time.sleep(20) # the other side should have closed the connection, as it is invalid message s.close() def test_channel_query(self): s = OLConnection(self.my_keypair, 'localhost', self.hisport) msg = CHANNEL_QUERY + bencode({'q': 'k:dutiet', 'id': 'a' * 20}) s.send(msg) resp = s.recv() if len(resp) > 0: print >> sys.stderr, "test: good CH_QUERY: got", getMessageName( resp[0]) self.assert_(resp[0] == CHANNEL_QUERY_REPLY) self.check_chquery_reply(resp[1:]) time.sleep(10) # the other side should not have closed the connection, as # this is all valid, so this should not throw an exception: #s.send('bla') s.close() def test_channel_update(self): s = OLConnection(self.my_keypair, 'localhost', self.hisport) msg = CHANNEL_QUERY + bencode({ 'q': 'p:345fsdf34fe345ed344g5', 'id': 'a' * 20 }) s.send(msg) resp = s.recv() if len(resp) > 0: print >> sys.stderr, "test: good CH_QUERY: got", getMessageName( resp[0]) self.assert_(resp[0] == CHANNEL_QUERY_REPLY) self.check_chquery_reply(resp[1:]) time.sleep(10) # the other side should not have closed the connection, as # this is all valid, so this should not throw an exception: s.send('bla') s.close() def test_votecast(self): self.votecastdb.subscribe('nitin') s = OLConnection(self.my_keypair, 'localhost', self.hisport) votecast = VoteCastCore(None, s, self.session, None, log='', dnsindb=None) data = votecast.createVoteCastMessage() if data is None and len(data) == 0: print >> sys.stderr, "test: no votes" else: msg = VOTECAST + bencode(data) s.send(msg) s.close()
class TestChannelCast(TestAsServer): """ Testing ChannelCast message """ def setUp(self): """ override TestAsServer """ # From TestAsServer.setUp(self): ignore singleton on self.setUpPreSession() self.session = Session(self.config,ignore_singleton=True) self.hisport = self.session.get_listen_port() self.setUpPostSession() # New code self.channelcastdb = ChannelCastDBHandler.getInstance() self.channelcastdb.registerSession(self.session) self.votecastdb = VoteCastDBHandler.getInstance() self.votecastdb.registerSession(self.session) def setUpPreSession(self): """ override TestAsServer """ TestAsServer.setUpPreSession(self) # BuddyCast self.config.set_buddycast(True) self.config.set_start_recommender(True) fd,self.superpeerfilename = tempfile.mkstemp() os.write(fd,'') os.close(fd) self.config.set_superpeer_file(self.superpeerfilename) def setUpPostSession(self): """ override TestAsServer """ TestAsServer.setUpPostSession(self) self.mypermid = str(self.my_keypair.pub().get_der()) self.hispermid = str(self.his_keypair.pub().get_der()) self.myhash = sha(self.mypermid).digest() def tearDown(self): """ override TestAsServer """ TestAsServer.tearDown(self) try: os.remove(self.superpeerfilename) except: print_exc() def test_channel_subscription(self): self.votecastdb.unsubscribe(bin2str(self.mypermid)) self.assertEqual(self.votecastdb.getVote(bin2str(self.mypermid),bin2str(self.hispermid)),None) print >> sys.stderr, self.votecastdb.getAll() self.votecastdb.spam(bin2str(self.mypermid)) self.assertEqual(self.votecastdb.getVote(bin2str(self.mypermid),bin2str(self.hispermid)),-1) print >> sys.stderr, self.votecastdb.getAll() self.votecastdb.subscribe(bin2str(self.mypermid)) self.assertEqual(self.votecastdb.getVote(bin2str(self.mypermid),bin2str(self.hispermid)),2) print >> sys.stderr, self.votecastdb.getAll() self.votecastdb.unsubscribe(bin2str(self.mypermid)) self.assertEqual(self.votecastdb.getVote(bin2str(self.mypermid),bin2str(self.hispermid)),0) print >> sys.stderr, self.votecastdb.getAll() self.votecastdb.spam(bin2str(self.mypermid)) self.assertEqual(self.votecastdb.getVote(bin2str(self.mypermid),bin2str(self.hispermid)),-1) print >> sys.stderr, self.votecastdb.getAll() def check_chquery_reply(self,data): d = bdecode(data) self.assert_(type(d) == DictType) self.assert_(d.has_key('a')) self.assert_(d.has_key('id')) id = d['id'] self.assert_(type(id) == StringType) def test_channelcast(self): torrent_data = {'announce':"http://localhost", 'info':{'name':'Hello 123', 'files':[{'length':100, 'path':['license.txt']}]}} infohash = bin2str(sha(bencode(torrent_data['info'])).digest()) self.channelcastdb.addOwnTorrent(infohash,torrent_data) s = OLConnection(self.my_keypair,'localhost',self.hisport) chcast = ChannelCastCore(None, s, self.session, None, log = '', dnsindb = None) # Good message chdata = chcast.createChannelCastMessage() if chdata is None or len(chdata) ==0: print "test: no subscriptions for us.. hence do not send" else: msg = CHANNELCAST + bencode(chdata) print "test: channelcast msg created", repr(chdata) s.send(msg) time.sleep(3) # Bad message if chdata is None or len(chdata)==0: pass else: pub_id, pub_name, infohash, torrenthash, name, timestamp, signature = chdata[0] chdata = [(pub_id, pub_name, infohash, torrenthash, name, 12343, signature)] msg = CHANNELCAST + bencode(chdata) print "test: channelcast msg created", repr(chdata) s.send(msg) time.sleep(20) # the other side should have closed the connection, as it is invalid message s.close() def test_channel_query(self): s = OLConnection(self.my_keypair,'localhost',self.hisport) msg = CHANNEL_QUERY+bencode({'q':'k:dutiet', 'id': 'a' * 20}) s.send(msg) resp = s.recv() if len(resp) > 0: print >>sys.stderr,"test: good CH_QUERY: got",getMessageName(resp[0]) self.assert_(resp[0] == CHANNEL_QUERY_REPLY) self.check_chquery_reply(resp[1:]) time.sleep(10) # the other side should not have closed the connection, as # this is all valid, so this should not throw an exception: #s.send('bla') s.close() def test_channel_update(self): s = OLConnection(self.my_keypair,'localhost',self.hisport) msg = CHANNEL_QUERY+bencode({'q':'p:345fsdf34fe345ed344g5', 'id': 'a' * 20}) s.send(msg) resp = s.recv() if len(resp) > 0: print >>sys.stderr,"test: good CH_QUERY: got",getMessageName(resp[0]) self.assert_(resp[0] == CHANNEL_QUERY_REPLY) self.check_chquery_reply(resp[1:]) time.sleep(10) # the other side should not have closed the connection, as # this is all valid, so this should not throw an exception: s.send('bla') s.close() def test_votecast(self): self.votecastdb.subscribe('nitin') s = OLConnection(self.my_keypair,'localhost',self.hisport) votecast = VoteCastCore(None, s, self.session, None, log = '', dnsindb = None) data = votecast.createVoteCastMessage() if data is None and len(data)==0: print >>sys.stderr, "test: no votes" else: msg = VOTECAST + bencode(data) s.send(msg) s.close()