4 from traceback import print_exc
6 from binascii import unhexlify
7 from shutil import copy as copyFile, move
10 from BaseLib.Core.CacheDB.sqlitecachedb import SQLiteCacheDB, DEFAULT_BUSY_TIMEOUT,CURRENT_MAIN_DB_VERSION
11 from bak_tribler_sdb import *
13 CREATE_SQL_FILE = os.path.join('..',"schema_sdb_v"+str(CURRENT_MAIN_DB_VERSION)+".sql")
15 import BaseLib.Core.CacheDB.sqlitecachedb
16 print >>sys.stderr,"TEST: ENABLE DBUPGRADE HACK"
17 BaseLib.Core.CacheDB.sqlitecachedb.TEST_SQLITECACHEDB_UPGRADE = True
20 from BaseLib.Core.TorrentDef import TorrentDef
21 from BaseLib.Core.CacheDB.sqlitecachedb import SQLiteCacheDB, bin2str, str2bin
22 from BaseLib.Core.CacheDB.SqliteCacheDBHandler import TorrentDBHandler, MyPreferenceDBHandler, MyDBHandler, BasicDBHandler, PeerDBHandler, PreferenceDBHandler, SuperPeerDBHandler, FriendDBHandler, PopularityDBHandler
23 from BaseLib.Category.Category import Category
24 from bak_tribler_sdb import *
26 S_TORRENT_PATH_BACKUP = os.path.join(FILES_DIR, 'bak_single.torrent')
27 S_TORRENT_PATH = os.path.join(FILES_DIR, 'single.torrent')
29 M_TORRENT_PATH_BACKUP = os.path.join(FILES_DIR, 'bak_multiple.torrent')
30 M_TORRENT_PATH = os.path.join(FILES_DIR, 'multiple.torrent')
33 SHOW_NOT_TESTED_FUNCTIONS = False # Enable this to show the functions not tested yet
36 init_bak_tribler_sdb()
38 SQLiteCacheDB.getInstance().initDB(TRIBLER_DB_PATH, busytimeout=BUSYTIMEOUT)
39 TorrentDBHandler.getInstance().register(Category.getInstance('..'),'.')
42 def getFuncs2Test(calss_name):
43 return filter(lambda s:s != 'lock' and not s.startswith('__') and s not in dir(BasicDBHandler), dir(calss_name))
45 SQLiteCacheDB.DEBUG = False
48 class TestSqliteBasicDBHandler(unittest.TestCase):
51 db_path = TRIBLER_DB_PATH
52 self.sqlitedb = SQLiteCacheDB.getInstance()
53 self.sqlitedb.initDB(db_path, busytimeout=BUSYTIMEOUT)
56 SQLiteCacheDB.getInstance().close()
58 def singtest_size(self):
60 db = BasicDBHandler(self.sqlitedb,table_name)
62 assert size == 3995,size
64 def singtest_getOne(self):
66 db = BasicDBHandler(self.sqlitedb,table_name)
68 ip = db.getOne('ip', peer_id=1)
69 assert ip == '1.1.1.1', ip
71 pid = db.getOne('peer_id', ip='1.1.1.1')
74 name = db.getOne('name', ip='1.1.1.1', port=1)
75 assert name == 'Peer 1', name
77 name = db.getOne('name', ip='68.108.115.221', port=6882)
78 assert name == None, name
80 tid = db.getOne('peer_id', conj='OR', ip='1.1.1.1', name='Peer 1')
83 tid = db.getOne('peer_id', conj='OR', ip='1.1.1.1', name='asdfasfasfXXXXXXxx...')
86 tid = db.getOne('peer_id', conj='OR', ip='1.1.1.123', name='Peer 1')
89 lbt = db.getOne('last_buddycast', peer_id=1)
90 assert lbt == 1193379432, lbt
92 name, ip, lbt = db.getOne(('name','ip','last_buddycast'), peer_id=1)
93 assert name == 'Peer 1' and ip == '1.1.1.1' and lbt == 1193379432, (name, ip, lbt)
95 values = db.getOne('*', peer_id=1)
96 # 03/02/10 Boudewijn: In contrast to the content of the
97 # database, the similarity value is not 12.537961593122299 but
98 # 0 because it is reset as the database is upgraded.
99 results = (1, u'MFIwEAYHKoZIzj0CAQYFK4EEABoDPgAEAAA6SYI4NHxwQ8P7P8QXgWAP+v8SaMVzF5+fSUHdAMrs6NvL5Epe1nCNSdlBHIjNjEiC5iiwSFZhRLsr', u'Peer 1', u'1.1.1.1', 1, None, 2, 0, 0, 0, 1194966306, 1193379769, 1193379432, 1, 1, 0, 0, 0, 0, 0)
101 for i in range(len(values)):
102 assert values[i] == results[i], (i, values[i], results[i])
104 def singtest_getAll(self):
106 db = BasicDBHandler(self.sqlitedb,table_name)
108 ips = db.getAll('ip')
109 assert len(ips) == 3995, len(ips)
111 ips = db.getAll('distinct ip')
112 assert len(ips) == 256, len(ips)
114 ips = db.getAll('ip', "ip like '130.%'")
115 assert len(ips) == 16, len(ips)
117 ids = db.getAll('peer_id', 'thumbnail is NULL')
118 assert len(ids) == 3995, len(ids)
120 ips = db.getAll('ip', "ip like '88.%'", port=88, conj='or')
121 assert len(ips) == 16, len(ips)
123 ips = db.getAll('ip', "ip like '88.%'", port=88, order_by='ip')
124 assert len(ips) == 1, len(ips)
125 assert ips[0][0] == '88.88.88.88', ips[0]
127 names = db.getAll('name', "ip like '88.%'", order_by='ip', limit=4, offset=1)
128 assert len(names) == 4
129 assert names[2][0] == 'Peer 856', names
130 # select name from Peer where ip like '88.%' and port==7762 order by ip limit 4 offset 3
132 ips = db.getAll('count(distinct ip), port', group_by='port')
133 # select count(distinct ip), port from Peer group by port
134 for nip, port in ips:
136 assert nip == 2842, nip
140 class TestSqliteMyDBHandler(unittest.TestCase):
143 db_path = TRIBLER_DB_PATH
144 db = SQLiteCacheDB.getInstance()
145 db.openDB(db_path, busytimeout=BUSYTIMEOUT)
148 SQLiteCacheDB.getInstance().close()
150 def singtest_get(self):
151 db = MyDBHandler.getInstance()
152 value = db.get('version')
153 assert value == str(CURRENT_MAIN_DB_VERSION), value
155 def singtest_put(self):
156 db = MyDBHandler.getInstance()
160 assert value == new_ip, value
165 assert value == new_ip, (value, new_ip)
167 class TestSuperPeerDBHandler(unittest.TestCase):
170 db_path = TRIBLER_DB_PATH
171 db = SQLiteCacheDB.getInstance()
172 db.openDB(db_path, busytimeout=BUSYTIMEOUT)
173 self.sp1 = '0R0\x10\x06\x07*\x86H\xce=\x02\x01\x06\x05+\x81\x04\x00\x1a\x03>\x00\x04\x00\\\xdfXv\xffX\xf2\xfe\x96\xe1_]\xf5\x1b\xb4\x91\x91\xa5I\xf0nl\x81\xd2A\xfb\xb7u)\x01T\xa9*)r\x9b\x81s\xb7j\xd2\xecrSg$;\xc8"7s\xecSF\xd3\x0bgK\x1c'
174 self.sp2 = '0R0\x10\x06\x07*\x86H\xce=\x02\x01\x06\x05+\x81\x04\x00\x1a\x03>\x00\x04\x01\xdb\x80+O\xd9N7`\xfc\xd3\xdd\xf0 \xfdC^\xc9\xd7@\x97\xaa\x91r\x1c\xdeL\xf2n\x9f\x00U\xc1A\xf9Ae?\xd8t}_c\x08\xb3G\xf8g@N! \xa0\x90M\xfb\xca\xcfZ@'
177 s = SQLiteCacheDB.getInstance()
180 def _test_size(self):
181 db = SuperPeerDBHandler.getInstance()
183 assert size == 8, size
185 def _test_getSuperPeerList(self):
186 db = SuperPeerDBHandler.getInstance()
187 sps = db.getSuperPeers()
188 assert self.sp1 in sps
189 assert self.sp2 in sps
191 def singtest_setSuperPeer(self):
192 db = SuperPeerDBHandler.getInstance()
194 sps = db.getSuperPeers()
195 assert len(sps) == 8, len(sps)
197 db.peer_db_handler.addPeer(self.sp1, {'superpeer':0})
198 sps = db.getSuperPeers()
199 assert self.sp1 not in sps
200 assert len(sps) == 7, len(sps)
202 db.peer_db_handler.addPeer(self.sp1, {'superpeer':0})
203 sps = db.getSuperPeers()
204 assert self.sp1 not in sps
207 db.peer_db_handler.addPeer(self.sp1, {'superpeer':1})
208 sps = db.getSuperPeers()
209 assert self.sp1 in sps
212 db.peer_db_handler.addPeer(self.sp1, {'superpeer':1})
213 sps = db.getSuperPeers()
214 assert self.sp1 in sps
217 def singtest_addExternalSuperPeer(self):
218 fake_permid_x = 'fake_permid_x'+'0R0\x10\x06\x07*\x86H\xce=\x02\x01\x06\x05+\x81\x04\x00\x1a\x03>\x00\x04'
219 peer_x = {'permid':fake_permid_x, 'ip':'1.2.3.4', 'port':234, 'name':'fake peer x'}
220 db = SuperPeerDBHandler.getInstance()
221 db.addExternalSuperPeer(peer_x)
222 sps = db.getSuperPeers()
223 assert fake_permid_x in sps
224 assert len(sps) == 9, len(sps)
226 db.addExternalSuperPeer(peer_x)
227 sps = db.getSuperPeers()
228 assert fake_permid_x in sps
229 assert len(sps) == 9, len(sps)
231 db._db.deletePeer(fake_permid_x, force=True)
232 sps = db.getSuperPeers()
233 assert fake_permid_x not in sps
234 assert len(sps) == 8, len(sps)
236 db._db.deletePeer(fake_permid_x, force=True)
237 sps = db.getSuperPeers()
238 assert fake_permid_x not in sps
239 assert len(sps) == 8, len(sps)
241 class TestFriendDBHandler(unittest.TestCase):
244 db_path = TRIBLER_DB_PATH
245 db = SQLiteCacheDB.getInstance()
246 db.openDB(db_path, busytimeout=BUSYTIMEOUT)
247 self.sp1 = '0R0\x10\x06\x07*\x86H\xce=\x02\x01\x06\x05+\x81\x04\x00\x1a\x03>\x00\x04\x00\\\xdfXv\xffX\xf2\xfe\x96\xe1_]\xf5\x1b\xb4\x91\x91\xa5I\xf0nl\x81\xd2A\xfb\xb7u)\x01T\xa9*)r\x9b\x81s\xb7j\xd2\xecrSg$;\xc8"7s\xecSF\xd3\x0bgK\x1c'
248 self.sp2 = '0R0\x10\x06\x07*\x86H\xce=\x02\x01\x06\x05+\x81\x04\x00\x1a\x03>\x00\x04\x01\xdb\x80+O\xd9N7`\xfc\xd3\xdd\xf0 \xfdC^\xc9\xd7@\x97\xaa\x91r\x1c\xdeL\xf2n\x9f\x00U\xc1A\xf9Ae?\xd8t}_c\x08\xb3G\xf8g@N! \xa0\x90M\xfb\xca\xcfZ@'
249 self.fr1 = str2bin('MFIwEAYHKoZIzj0CAQYFK4EEABoDPgAEAL/l2IyVa6lc3KAqQyEnR++rIzi+AamnbzXHCxOFAFy67COiBhrC79PLzzUiURbHDx21QA4p8w3UDHLA')
252 SQLiteCacheDB.getInstance().close()
254 def singtest_size(self):
255 db = FriendDBHandler.getInstance()
257 assert size == 2, size
259 def singtest_getFriends(self):
260 db = FriendDBHandler.getInstance()
261 friends = db.getFriends()
262 assert self.sp1 not in friends
263 assert self.fr1 in friends
265 def singtest_setFriendState(self):
266 db = FriendDBHandler.getInstance()
267 db.setFriendState(self.sp1)
268 assert db.getFriendState(self.sp1)
269 sps = db.getFriends()
270 assert self.sp1 in sps
273 db.setFriendState(self.sp1)
274 assert db.getFriendState(self.sp1)
275 sps = db.getFriends()
276 assert self.sp1 in sps
279 db.deleteFriend(self.sp1)
280 assert not db.getFriendState(self.sp1)
281 sps = db.getFriends()
282 assert self.sp1 not in sps
285 db.deleteFriend(self.sp1)
286 assert not db.getFriendState(self.sp1)
287 sps = db.getFriends()
288 assert self.sp1 not in sps
291 def singtest_addExternalFriend(self):
292 fake_permid_x = 'fake_permid_x'+'0R0\x10\x00\x07*\x86H\xce=\x02\x01\x06\x05+\x81\x04\x00\x1a\x03>\x00\x04'
293 peer_x = {'permid':fake_permid_x, 'ip':'1.2.3.4', 'port':234, 'name':'fake peer x'}
294 db = FriendDBHandler.getInstance()
295 db.addExternalFriend(peer_x)
296 sps = db.getFriends()
297 assert fake_permid_x in sps
298 assert len(sps) == 3, len(sps)
300 db.addExternalFriend(peer_x)
301 sps = db.getFriends()
302 assert fake_permid_x in sps
303 assert len(sps) == 3, len(sps)
305 db._db.deletePeer(fake_permid_x, force=True)
306 sps = db.getFriends()
307 assert fake_permid_x not in sps
308 assert len(sps) == 2, len(sps)
310 db._db.deletePeer(fake_permid_x, force=True)
311 sps = db.getFriends()
312 assert fake_permid_x not in sps
313 assert len(sps) == 2, len(sps)
316 class TestSqlitePeerDBHandler(unittest.TestCase):
319 db_path = TRIBLER_DB_PATH
320 db = SQLiteCacheDB.getInstance()
321 db.openDB(db_path, busytimeout=BUSYTIMEOUT)
322 self.sp1 = '0R0\x10\x06\x07*\x86H\xce=\x02\x01\x06\x05+\x81\x04\x00\x1a\x03>\x00\x04\x00\\\xdfXv\xffX\xf2\xfe\x96\xe1_]\xf5\x1b\xb4\x91\x91\xa5I\xf0nl\x81\xd2A\xfb\xb7u)\x01T\xa9*)r\x9b\x81s\xb7j\xd2\xecrSg$;\xc8"7s\xecSF\xd3\x0bgK\x1c'
323 self.sp2 = '0R0\x10\x06\x07*\x86H\xce=\x02\x01\x06\x05+\x81\x04\x00\x1a\x03>\x00\x04\x01\xdb\x80+O\xd9N7`\xfc\xd3\xdd\xf0 \xfdC^\xc9\xd7@\x97\xaa\x91r\x1c\xdeL\xf2n\x9f\x00U\xc1A\xf9Ae?\xd8t}_c\x08\xb3G\xf8g@N! \xa0\x90M\xfb\xca\xcfZ@'
324 fake_permid_x = 'fake_permid_x'+'0R0\x10\x00\x07*\x86H\xce=\x02\x01\x06\x05+\x81\x04\x00\x1a\x03>\x00\x04'
325 hp = db.hasPeer(fake_permid_x)
329 SQLiteCacheDB.getInstance().close()
331 def singtest_getList(self):
332 db = PeerDBHandler.getInstance()
333 sp1 = db.getPeer(self.sp1)
334 sp2 = db.getPeer(self.sp2)
335 assert isinstance(sp1, dict)
336 assert isinstance(sp2, dict)
337 print >>sys.stderr,"singtest_GETLIST SP1",`sp1`
338 print >>sys.stderr,"singtest_GETLIST SP1",`sp2`
339 assert sp1['port'] == 628
340 assert sp2['port'] == 3287
342 def singtest_getPeerSim(self):
343 db = PeerDBHandler.getInstance()
344 permid_str = 'MFIwEAYHKoZIzj0CAQYFK4EEABoDPgAEACPJqLjmKeMNRwkCNKkPH51gjQ5e7u4s2vWv9I/AALXtpf+bFPtY8cyFv6OCzisYDo+brgqOxAtuNZwP'
345 permid = str2bin(permid_str)
346 sim = db.getPeerSim(permid)
347 # 03/02/10 Boudewijn: In contrast to the content of the
348 # database, the similarity value is not 5.82119645394964 but 0
349 # because it is reset as the database is upgraded.
352 permid_str = 'MFIwEAYHKoZIzj0CAQYFK4EEABoDPgAEAAB0XbUrw5b8CrTrMZST1SPyrzjgSzIE6ynALtlZASGAb+figVXRRGpKW6MSal3KnEm1/q0P3JPWrhCE'
353 permid = str2bin(permid_str)
354 sim = db.getPeerSim(permid)
357 def singtest_getPeerList(self):
358 db = PeerDBHandler.getInstance()
359 peerlist = db.getPeerList()
360 assert len(peerlist) == 3995
362 assert bin2str(peerlist[345]) == 'MFIwEAYHKoZIzj0CAQYFK4EEABoDPgAEACxVRvG/Gr19EAPJru2Z5gjctEzv973/PJCQIua2ATMP6euq+Kf4gYpdKbsB/PWqJnfY/wSKPHHfIByV'
364 def singtest_getPeers(self):
365 db = PeerDBHandler.getInstance()
366 peerlist = db.getPeerList()
369 peers = db.getPeers(pl, ['permid', 'peer_id', 'ip', 'port', 'name'])
370 #for p in peers: print p
371 assert peers[7]['name'] == 'Peer 7'
372 assert peers[8]['name'] == 'Peer 8'
373 assert peers[1]['ip'] == '1.1.1.1'
374 assert peers[3]['peer_id'] == 3
376 def singtest_addPeer(self):
377 db = PeerDBHandler.getInstance()
378 fake_permid_x = 'fake_permid_x'+'0R0\x10\x00\x07*\x86H\xce=\x02\x01\x06\x05+\x81\x04\x00\x1a\x03>\x00\x04'
379 peer_x = {'permid':fake_permid_x, 'ip':'1.2.3.4', 'port':234,
380 'name':'fake peer x', 'last_seen':12345}
382 db.addPeer(fake_permid_x, peer_x)
383 assert db.size() == oldsize+1, (db.size(), oldsize+1)
384 #db.addPeer(fake_permid_x, peer_x)
385 #assert db.size() == oldsize+1
386 p = db.getPeer(fake_permid_x)
387 assert p['ip'] == '1.2.3.4'
388 assert p['port'] == 234
389 assert p['name'] == 'fake peer x'
390 # dns = db.getPeer(fake_permid_x, ('ip','port'))
391 # assert dns[0] == '1.2.3.4'
392 # assert dns[1] == 234
393 # dns = db.getPeer(fake_permid_x+'abcd', ('ip','port'))
396 peer_x['ip'] = '4.3.2.1'
398 peer_x['last_seen'] = 1234567
399 db.addPeer(fake_permid_x, peer_x, update_dns=False)
400 p = db.getPeer(fake_permid_x)
401 assert p['ip'] == '1.2.3.4'
402 assert p['port'] == 234
403 assert p['last_seen'] == 1234567, p['last_seen']
405 peer_x['ip'] = '4.3.2.1'
407 peer_x['last_seen'] = 12345
408 db.addPeer(fake_permid_x, peer_x, update_dns=True)
409 p = db.getPeer(fake_permid_x)
410 assert p['ip'] == '4.3.2.1'
411 assert p['port'] == 432
412 assert p['last_seen'] == 12345
414 peer_x['ip'] = '1.2.3.1'
416 db.addPeer(fake_permid_x, peer_x, update_dns=False)
417 p = db.getPeer(fake_permid_x)
418 assert p['ip'] == '4.3.2.1'
419 assert p['port'] == 432
420 assert p['last_seen'] == 12345
422 peer_x['ip'] = '1.2.3.4'
424 peer_x['last_seen'] = 1234569
425 db.addPeer(fake_permid_x, peer_x, update_dns=True)
426 p = db.getPeer(fake_permid_x)
427 assert p['ip'] == '1.2.3.4'
428 assert p['port'] == 234
429 assert p['last_seen'] == 1234569
431 peer_x['ip'] = '1.2.3.5'
433 db.addPeer(fake_permid_x, peer_x, update_dns=True)
434 p = db.getPeer(fake_permid_x)
435 assert p['ip'] == '1.2.3.5'
436 assert p['port'] == 236
438 db._db.deletePeer(fake_permid_x, force=True)
439 p = db.getPeer(fake_permid_x)
441 assert db.size() == oldsize
443 def singtest_aa_hasPeer(self):
444 db = PeerDBHandler.getInstance()
445 assert db.hasPeer(self.sp1)
446 assert db.hasPeer(self.sp2)
447 fake_permid_x = 'fake_permid_x'+'0R0\x10\x00\x07*\x86H\xce=\x02\x01\x06\x05+\x81\x04\x00\x1a\x03>\x00\x04'
448 assert not db.hasPeer(fake_permid_x)
450 def singtest_findPeers(self):
451 db = PeerDBHandler.getInstance()
452 find_list = db.findPeers('ip', '88.88.88.88')
453 assert len(find_list) == 16
455 find_list = db.findPeers('ip', '1.2.3.4')
456 assert len(find_list) == 0
458 db = PeerDBHandler.getInstance()
459 find_list = db.findPeers('permid', self.sp1)
460 assert len(find_list) == 1 and find_list[0]['permid'] == self.sp1
461 #assert len(find_list) == 3 and 901 in find_list
463 def singtest_updatePeer(self):
464 db = PeerDBHandler.getInstance()
465 fake_permid_x = 'fake_permid_x'+'0R0\x10\x00\x07*\x86H\xce=\x02\x01\x06\x05+\x81\x04\x00\x1a\x03>\x00\x04'
466 peer_x = {'permid':fake_permid_x, 'ip':'1.2.3.4', 'port':234,
467 'name':'fake peer x', 'last_seen':12345}
469 db.addPeer(fake_permid_x, peer_x)
470 assert db.size() == oldsize+1, (db.size(), oldsize+1)
471 p = db.getPeer(fake_permid_x)
472 assert p['ip'] == '1.2.3.4'
473 assert p['port'] == 234
474 assert p['name'] == 'fake peer x'
476 db.updatePeer(fake_permid_x, ip='4.3.2.1')
477 db.updatePeer(fake_permid_x, port=432)
478 db.updatePeer(fake_permid_x, last_seen=1234567)
479 p = db.getPeer(fake_permid_x)
480 assert p['ip'] == '4.3.2.1'
481 assert p['port'] == 432
482 assert p['last_seen'] == 1234567
484 db._db.deletePeer(fake_permid_x, force=True)
485 p = db.getPeer(fake_permid_x)
487 assert db.size() == oldsize
489 def singtest_deletePeer(self):
490 db = PeerDBHandler.getInstance()
491 fake_permid_x = 'fake_permid_x'+'0R0\x10\x00\x07*\x86H\xce=\x02\x01\x06\x05+\x81\x04\x00\x1a\x03>\x00\x04'
492 peer_x = {'permid':fake_permid_x, 'ip':'1.2.3.4', 'port':234,
493 'name':'fake peer x', 'last_seen':12345, 'friend':1, 'superpeer':0}
495 p = db.getPeer(fake_permid_x)
498 db.addPeer(fake_permid_x, peer_x)
499 assert db.size() == oldsize+1, (db.size(), oldsize+1)
500 assert db.hasPeer(fake_permid_x)
501 p = db.getPeer(fake_permid_x)
504 db.deletePeer(fake_permid_x, force=False)
505 assert db.hasPeer(fake_permid_x)
507 db.deletePeer(fake_permid_x, force=True)
508 assert db.size() == oldsize
509 assert not db.hasPeer(fake_permid_x)
511 p = db.getPeer(fake_permid_x)
514 db.deletePeer(fake_permid_x, force=True)
515 assert db.size() == oldsize
517 p = db.getPeer(fake_permid_x)
520 db.deletePeer(fake_permid_x, force=True)
521 assert db.size() == oldsize
523 def singtest_updateTimes(self):
524 db = PeerDBHandler.getInstance()
525 fake_permid_x = 'fake_permid_x'+'0R0\x10\x00\x07*\x86H\xce=\x02\x01\x06\x05+\x81\x04\x00\x1a\x03>\x00\x04'
526 peer_x = {'permid':fake_permid_x, 'ip':'1.2.3.4', 'port':234,
527 'name':'fake peer x', 'last_seen':12345, 'connected_times':3}
529 p = db.getPeer(fake_permid_x)
532 db.addPeer(fake_permid_x, peer_x)
533 assert db.hasPeer(fake_permid_x)
534 assert db.size() == oldsize+1, (db.size(), oldsize+1)
536 db.updateTimes(fake_permid_x, 'connected_times')
537 sql = 'select connected_times from Peer where permid='+repr(bin2str(fake_permid_x))
538 ct = db._db.fetchone(sql)
541 db.updateTimes(fake_permid_x, 'buddycast_times')
542 sql = 'select buddycast_times from Peer where permid='+repr(bin2str(fake_permid_x))
543 ct = db._db.fetchone(sql)
546 db.updateTimes(fake_permid_x, 'buddycast_times', 3)
547 sql = 'select buddycast_times from Peer where permid='+repr(bin2str(fake_permid_x))
548 ct = db._db.fetchone(sql)
551 db.deletePeer(fake_permid_x, force=True)
552 assert not db.hasPeer(fake_permid_x)
554 def singtest_getPermIDByIP(self):
555 db = PeerDBHandler.getInstance()
556 fake_permid_x = 'fake_permid_x'+'0R0\x10\x00\x07*\x86H\xce=\x02\x01\x06\x05+\x81\x04\x00\x1a\x03>\x00\x04'
557 peer_x = {'permid':fake_permid_x, 'ip':'1.2.3.4', 'port':234,
558 'name':'fake peer x', 'last_seen':12345, 'connected_times':3}
560 p = db.getPeer(fake_permid_x)
563 db.addPeer(fake_permid_x, peer_x)
564 assert db.hasPeer(fake_permid_x)
565 assert db.size() == oldsize+1, (db.size(), oldsize+1)
567 permid = db.getPermIDByIP('1.2.3.4')
568 assert bin2str(permid) == bin2str(fake_permid_x)
570 db.deletePeer(fake_permid_x, force=True)
571 assert not db.hasPeer(fake_permid_x)
572 assert db.size() == oldsize
574 def singtest_loadPeers(self):
575 db = PeerDBHandler.getInstance()
576 peer_size = db.size()
577 res = db.getGUIPeers()
578 assert len(res) == 1477, len(res)
580 p = db.getPeer(data['permid'])
581 assert p['name'] == data['name']
582 assert 70 < len(data['permid']) < 90 # must be binary
584 class TestPreferenceDBHandler(unittest.TestCase):
587 db_path = TRIBLER_DB_PATH
588 db = SQLiteCacheDB.getInstance()
589 db.openDB(db_path, busytimeout=BUSYTIMEOUT)
592 SQLiteCacheDB.getInstance().close()
594 def singtest_getPrefList(self):
595 db = PreferenceDBHandler.getInstance()
596 fake_permid_x = 'fake_permid_x'+'0R0\x10\x00\x07*\x86H\xce=\x02\x01\x06\x05+\x81\x04\x00\x1a\x03>\x00\x04'
597 pl = db.getPrefList(fake_permid_x)
600 truth = {3127:235, 994:20, 19:1, 5:0}
602 permid[3127] = 'MFIwEAYHKoZIzj0CAQYFK4EEABoDPgAEAcPezgQ13k1MSOaUrCPisWRhYuNT7Tm+q5rUgHFvAWd9b+BcSut6TCniEgHYHDnQ6TH/vxQBqtY8Loag'
603 permid[994] = 'MFIwEAYHKoZIzj0CAQYFK4EEABoDPgAEAJUNmwvDaigRaM4cj7cE2O7lessqnnFEQsan7df9AZS8xeNmVsP/XXVrEt4t7e2TNicYmjn34st/sx2P'
604 permid[19] = 'MFIwEAYHKoZIzj0CAQYFK4EEABoDPgAEAAJv2YLuIWa4QEdOEs4CPRxQZDwZphKd/xK/tgbcALG198nNdT10znJ2sZYl+OJIvj7YfYp75PrrnWNX'
605 permid[5] = 'MFIwEAYHKoZIzj0CAQYFK4EEABoDPgAEAAB0XbUrw5b8CrTrMZST1SPyrzjgSzIE6ynALtlZASGAb+figVXRRGpKW6MSal3KnEm1/q0P3JPWrhCE'
608 pl = db.getPrefList(str2bin(permid[pid]))
609 assert len(pl) == truth[pid], [pid, len(pl)]
611 def singtest_addPreference(self):
612 db = PeerDBHandler.getInstance()
613 fake_permid_x = 'fake_permid_x'+'0R0\x10\x00\x07*\x86H\xce=\x02\x01\x06\x05+\x81\x04\x00\x1a\x03>\x00\x04'
614 peer_x = {'permid':fake_permid_x, 'ip':'1.2.3.4', 'port':234,
615 'name':'fake peer x', 'last_seen':12345, 'connected_times':3}
617 oldinfohash_size = db._db.size('Torrent')
618 p = db.getPeer(fake_permid_x)
621 db.addPeer(fake_permid_x, peer_x)
622 assert db.hasPeer(fake_permid_x)
623 assert db.size() == oldsize+1, (db.size(), oldsize+1)
625 # fake_infoahsh = 'fake_infohash_1'+'0R0\x10\x00\x07*\x86H\xce=\x02'
626 # fake_infoahsh2 = 'fake_infohash_2'+'0R0\x10\x00\x07*\x86H\xce=\x02'
627 # 02/02/10 Boudewijn: infohashes must be 20 bytes long
628 fake_infoahsh = 'fake_infohash_1'+'0R0\x10\x00'
629 fake_infoahsh2 = 'fake_infohash_2'+'0R0\x10\x00'
630 prefdb = PreferenceDBHandler.getInstance()
631 oldpref_size = prefdb.size()
632 prefdb.addPreference(fake_permid_x, fake_infoahsh)
633 prefdb.addPreference(fake_permid_x, fake_infoahsh2)
634 assert prefdb.size() == oldpref_size + 2
635 assert oldinfohash_size + 2 == db._db.size('Torrent'), (oldinfohash_size + 2, db._db.size('Torrent'))
637 pl = prefdb.getPrefList(fake_permid_x, return_infohash=True)
639 assert fake_infoahsh in pl
640 assert fake_infoahsh2 in pl
642 pl = prefdb.getPrefList(fake_permid_x, return_infohash=True)
643 assert len(pl) == 2, pl
644 assert fake_infoahsh in pl
645 assert fake_infoahsh2 in pl
646 prefdb._deletePeer(fake_permid_x)
647 pl = prefdb.getPrefList(fake_permid_x)
649 assert prefdb.size() == oldpref_size, (prefdb.size(), oldpref_size)
651 db.deletePeer(fake_permid_x, force=True)
652 assert not db.hasPeer(fake_permid_x)
653 assert db.size() == oldsize
656 db.addPeer(fake_permid_x, peer_x)
657 assert db.hasPeer(fake_permid_x)
658 assert db.size() == oldsize+1
660 prefdb.addPreference(fake_permid_x, fake_infoahsh)
661 prefdb.addPreference(fake_permid_x, fake_infoahsh2)
662 assert prefdb.size() == oldpref_size + 2
663 assert oldinfohash_size + 2 == db._db.size('Torrent')
665 pl = prefdb.getPrefList(fake_permid_x, return_infohash=True)
667 assert fake_infoahsh in pl
668 assert fake_infoahsh2 in pl
670 db.deletePeer(fake_permid_x, force=True)
671 assert not db.hasPeer(fake_permid_x)
672 assert db.size() == oldsize
673 pl = prefdb.getPrefList(fake_permid_x)
675 assert prefdb.size() == oldpref_size, (prefdb.size(), oldpref_size)
677 db._db.deleteInfohash(fake_infoahsh)
678 db._db.deleteInfohash(fake_infoahsh2)
679 tid = db._db.getTorrentID(fake_infoahsh)
681 tid = db._db.getTorrentID(fake_infoahsh2)
683 assert oldinfohash_size == db._db.size('Torrent'), [oldinfohash_size, db._db.size('Torrent')]
685 def singtest_addPeerPreferences(self):
686 db = PeerDBHandler.getInstance()
687 fake_permid_x = 'fake_permid_x'+'0R0\x10\x00\x07*\x86H\xce=\x02\x01\x06\x05+\x81\x04\x00\x1a\x03>\x00\x04'
688 peer_x = {'permid':fake_permid_x, 'ip':'1.2.3.4', 'port':234,
689 'name':'fake peer x', 'last_seen':12345, 'connected_times':3}
691 oldinfohash_size = db._db.size('Torrent')
692 p = db.getPeer(fake_permid_x)
695 db.addPeer(fake_permid_x, peer_x)
696 assert db.hasPeer(fake_permid_x)
697 assert db.size() == oldsize+1, (db.size(), oldsize+1)
699 # fake_infoahsh = 'fake_infohash_1'+'0R0\x10\x00\x07*\x86H\xce=\x02'
700 # fake_infoahsh2 = 'fake_infohash_2'+'0R0\x10\x00\x07*\x86H\xce=\x02'
701 # 02/02/10 Boudewijn: infohashes must be 20 bytes long
702 fake_infoahsh = 'fake_infohash_1'+'0R0\x10\x00'
703 fake_infoahsh2 = 'fake_infohash_2'+'0R0\x10\x00'
704 fi = [fake_infoahsh,fake_infoahsh2]
705 prefdb = PreferenceDBHandler.getInstance()
706 oldpref_size = prefdb.size()
707 prefdb.addPreferences(fake_permid_x, fi)
708 assert prefdb.size() == oldpref_size + 2, [prefdb.size(), oldpref_size]
709 assert oldinfohash_size + 2 == db._db.size('Torrent')
711 pl = prefdb.getPrefList(fake_permid_x, return_infohash=True)
713 assert fake_infoahsh in pl, (fake_infoahsh, pl)
714 assert fake_infoahsh2 in pl, (fake_infoahsh2, pl)
716 pl = prefdb.getPrefList(fake_permid_x, return_infohash=True)
717 assert len(pl) == 2, pl
718 assert fake_infoahsh in pl
719 assert fake_infoahsh2 in pl
720 prefdb._deletePeer(fake_permid_x)
721 pl = prefdb.getPrefList(fake_permid_x, return_infohash=True)
723 assert prefdb.size() == oldpref_size, (prefdb.size(), oldpref_size)
725 db.deletePeer(fake_permid_x, force=True)
726 assert not db.hasPeer(fake_permid_x)
727 assert db.size() == oldsize
730 db.addPeer(fake_permid_x, peer_x)
731 assert db.hasPeer(fake_permid_x)
732 assert db.size() == oldsize+1
734 prefdb.addPreferences(fake_permid_x, fi)
735 assert prefdb.size() == oldpref_size + 2
736 assert oldinfohash_size + 2 == db._db.size('Torrent')
738 pl = prefdb.getPrefList(fake_permid_x, return_infohash=True)
740 assert fake_infoahsh in pl
741 assert fake_infoahsh2 in pl
743 db.deletePeer(fake_permid_x, force=True)
744 assert not db.hasPeer(fake_permid_x)
745 assert db.size() == oldsize
746 pl = prefdb.getPrefList(fake_permid_x)
748 assert prefdb.size() == oldpref_size, (prefdb.size(), oldpref_size)
750 db._db.deleteInfohash(fake_infoahsh)
751 db._db.deleteInfohash(fake_infoahsh2)
752 tid = db._db.getTorrentID(fake_infoahsh)
754 tid = db._db.getTorrentID(fake_infoahsh2)
756 assert oldinfohash_size == db._db.size('Torrent'), [oldinfohash_size, db._db.size('Torrent')]
758 ###--------------------------------------------------------------------------------------------------------------------------
759 class TestPopularityDBHandler(unittest.TestCase):
762 db_path = TRIBLER_DB_PATH
763 db = SQLiteCacheDB.getInstance()
764 db.openDB(db_path, busytimeout=BUSYTIMEOUT)
767 SQLiteCacheDB.getInstance().close()
769 def singtest_addPopularity(self):
770 print "Testing addPopularity module...\n"
771 pop_db = PopularityDBHandler.getInstance()
773 #torrent_id, peer_id, recv_time, calc_age=sys.maxint, num_seeders=-1, num_leechers=-1, num_sources=-1
774 oldpop_size = pop_db.size()
775 pop_db.addPopularity(2,1,1241787491,78,25,456,5)
776 pop_db.addPopularity(2,1,1241787490,7028,2,45,15)
777 pop_db.addPopularity(50000,1,1241787495,78,25,4546456,5)
778 assert pop_db.size() == oldpop_size + 3
779 ###--------------------------------------------------------------------------------------------------------------------------
781 def singtest_storePeerPopularity(self):
782 print "Testing storePeerPopularity module...\n"
784 pop_db = PopularityDBHandler.getInstance()
785 oldpop_size = pop_db.size()
786 #(torrent_id, recv_time, calc_age, num_seeders, num_leechers, num_sources)
787 tList=[(10,123456,1000,5,18,8),
788 (11,123457,1001,52,28,5),
789 (12,123458,1002,53,38,8),
790 (12,123459,1003,55,58,9),
791 (12,123451,1004,57,68,12),
792 (12,1234,100,57,68,12)]
794 pop_db.storePeerPopularity(100, tList)
796 pop_db.addPopularity(12,1,895,78,25,4546456,5)
797 pop_db.addPopularity(12,18,300000,78,25,4546456,5)
798 pop_db.addPopularity(12,1,1895,8,25,4546456,5)
799 pop_db.addPopularity(13,18,200,8978,25,4546456,5)
800 pop_db.addPopularity(50000,1,85554544,78,25,4546456,5)
802 #assert pop_db.size() == oldpop_size + 5
804 ###--------------------------------------------------------------------------------------------------------------------------
805 def singtest_countTorrentPopularityRec(self):
806 print "Testing countTorrentPopularity module...\n"
808 pop_db = PopularityDBHandler.getInstance()
810 tList=[(10,123456,1000,5,18,8),
811 (10,123457,1001,52,28,5),
812 (12,123458,2002,53,38,8),
813 (12,123459,1003,55,58,9),
814 (12,123451,4004,57,68,12),
815 (17,123451,1004,57,68,12),
816 (19,123451,1004,57,68,12)]
818 pop_db.storePeerPopularity(100, tList)
820 result = pop_db.countTorrentPopularityRec(10, int(time()))
821 print "(num_records, oldest_record) = ( %d, %d)" % (result[0], result[1])
823 ###--------------------------------------------------------------------------------------------------------------------------
824 def singtest_countTorrentPeerPopularityRec(self):
825 print "Testing countTorrentPeerPopularity module...\n"
827 pop_db = PopularityDBHandler.getInstance()
829 tList=[(10,123456,1000,5,18,8),
830 (10,123457,1001,52,28,5),
831 (12,123458,1002,53,38,8),
832 (12,123459,6003,55,58,9),
833 (12,123451,3004,57,68,12),
834 (17,123451,1004,57,68,12),
835 (19,123451,1004,57,68,12)]
837 pop_db.storePeerPopularity(100, tList)
838 result = pop_db.countTorrentPeerPopularityRec(12, 100, int(time()))
839 print "(num_records, oldest_record) = ( %d, %d)" % (result[0], result[1])
841 pop_db.addPopularity(2,1,85554544,78,25,4546456,5)
842 pop_db.addPopularity(1,1,855545442,78,25,4546456,5)
843 pop_db.addPopularity(1,1,85554523,78,25,4546456,5)
844 pop_db.addPopularity(50000,1,85554544,78,25,4546456,5)
845 result = pop_db.countTorrentPeerPopularityRec(1, 1, int(time()))
846 print "(num_records, oldest_record) = ( %d, %d)" % (result[0], result[1])
848 ###--------------------------------------------------------------------------------------------------------------------------
849 def singtest_deleteOldTorrentRecords(self):
850 print "Testing deleteOldTorrentRecords module...\n"
852 pop_db = PopularityDBHandler.getInstance()
854 tList=[(10,123456,1000,5,18,8),
855 (10,123457,1001,52,28,5),
856 (12,123458,1002,53,38,8),
857 (12,123459,1003,55,58,9),
858 (12,123451,1004,57,68,12),
859 (17,123451,1004,57,68,12),
860 (19,123451,1004,57,68,12)]
861 pop_db.storePeerPopularity(100, tList)
863 pop_db.addPopularity(2,1,85554544,78,25,4546456,5)
864 pop_db.addPopularity(1,1,855545442,788,25,4546456,5)
865 pop_db.addPopularity(1,1,85554523,78,25,4546456,5)
866 pop_db.addPopularity(50000,1,85554544,78,25,4546456,5)
868 result = pop_db.countTorrentPopularityRec(1, int(time()))
869 print "Before delete: (num_records, oldest_record) = ( %d, %d)" % (result[0], result[1])
871 pop_db.deleteOldTorrentRecords(1,1,int(time()))
873 result = pop_db.countTorrentPopularityRec(1, int(time()))
874 print "After delete: (num_records, oldest_record) = ( %d, %d)" % (result[0], result[1])
876 ###--------------------------------------------------------------------------------------------------------------------------
877 def singtest_deleteOldTorrentPeerRecords(self):
878 print "Testing deleteOldTorrentRecords module...\n"
880 pop_db = PopularityDBHandler.getInstance()
882 tList=[(10,123456,1000,5,18,8),
883 (10,123457,1001,52,28,5),
884 (12,123458,1002,53,38,8),
885 (12,123459,1003,55,58,9),
886 (12,123451,1004,57,68,12),
887 (17,123451,1004,57,68,12),
888 (19,123451,1004,57,68,12)]
889 pop_db.storePeerPopularity(100, tList)
891 pop_db.addPopularity(12,1,85554544,78,25,4546456,5)
892 pop_db.addPopularity(12,13,855545442,78,25,4546456,5)
893 pop_db.addPopularity(1,1,85554523,78,25,4546456,5)
894 pop_db.addPopularity(50000,1,85554544,78,25,4546456,5)
896 result = pop_db.countTorrentPeerPopularityRec(12,100, int(time()))
897 print "Before delete: (num_records, oldest_record) = ( %d, %d)" % (result[0], result[1])
899 pop_db.deleteOldTorrentPeerRecords(12,100,4, int(time()))
901 result = pop_db.countTorrentPeerPopularityRec(12,100, int(time()))
902 print "After delete: (num_records, oldest_record) = ( %d, %d)" % (result[0], result[1])
904 ##--------------------------------------------------------------------------------------------------------------------------
905 def singtest_getPopularityList(self):
906 print "Testing getPopularityList module...\n"
908 pop_db = PopularityDBHandler.getInstance()
910 tList=[(10,123456,1000,5,18,8),
911 (10,123457,1001,52,28,5),
912 (12,123458,1002,53,38,8),
913 (12,123459,1003,55,58,9),
914 (12,1619999,1004,57,68,12),
915 (17,123460,1004,57,68,12),
916 (19,123451,1004,57,68,12)]
918 pop_db.storePeerPopularity(100, tList)
919 pop_db.addPopularity(12,1,1194958935,78,25,2194958935,5)
920 pop_db.addPopularity(12,13,855545442,78,25,4546456,5)
921 pop_db.addPopularity(1,1,85554523,78,25,4546456,5)
922 pop_db.addPopularity(50000,1,85554544,78,25,4546456,5)
924 print pop_db.getPopularityList(peer_id=100)
925 print pop_db.getPopularityList(peer_id=100, torrent_id=12)
926 print pop_db.getPopularityList(torrent_id=12)
927 print pop_db.getPopularityList(recv_time_lbound=123457)
928 print pop_db.getPopularityList(peer_id=100, torrent_id=12, recv_time_ubound=123458,recv_time_lbound=123457)
929 print pop_db.getPopularityList()
931 def singtest_calculateSwarmSize(self):
932 print "Testing calculate swarm size module...\n"
933 pop_db = PopularityDBHandler.getInstance()
934 self.singtest_getPopularityList()
935 #tempList =[2726, 2059, 899999, 42918, 4269, 4065]
936 tempList =[12,17, 4847, 4816, 4783, 2627]
937 print "swarm size:\n"
938 print pop_db.calculateSwarmSize(tempList, "TorrentIds")
940 ##--------------------------------------------------------------------------------------------------------------------------
941 class TestTorrentDBHandler(unittest.TestCase):
944 db_path = TRIBLER_DB_PATH
945 db = SQLiteCacheDB.getInstance()
946 db.openDB(db_path, busytimeout=BUSYTIMEOUT)
949 SQLiteCacheDB.getInstance().close()
951 def singtested_functions(self):
952 if SHOW_NOT_TESTED_FUNCTIONS:
953 all_funcs = getFuncs2Test(TorrentDBHandler)
959 "getNumberTorrents", "_getCategoryID",
963 "_addTorrentToDB", "_addTorrentTracker",
967 "updateTorrentRelevance",
968 "deleteTorrent", "_deleteTorrent", "eraseTorrentFile",
969 "getNumberCollectedTorrents",
974 for func in all_funcs:
975 if func not in tested_funcs:
976 print "TestTorrentDBHandler: not test", func
978 # def singtest_misc(self):
979 # db = TorrentDBHandler.getInstance()
981 def _test_hasTorrent(self):
982 infohash_str = 'AA8cTG7ZuPsyblbRE7CyxsrKUCg='
983 infohash = str2bin(infohash_str)
984 db = TorrentDBHandler.getInstance()
985 assert db.hasTorrent(infohash) == True
986 assert db.hasMetaData(infohash) == True
987 fake_infoahsh = 'fake_infohash_1'+'0R0\x10\x00\x07*\x86H\xce=\x02'
988 assert db.hasTorrent(fake_infoahsh) == False
989 assert db.hasMetaData(fake_infoahsh) == False
991 def singtest_count(self):
992 db = TorrentDBHandler.getInstance()
994 num = db.getNumberTorrents()
997 def singtest_loadTorrents(self):
998 db = TorrentDBHandler.getInstance()
999 torrent_size = db._db.size('CollectedTorrent')
1000 db2 = MyPreferenceDBHandler.getInstance()
1001 mypref_size = db2.size()
1002 res = db.getTorrents()
1003 ### assert len(res) == torrent_size - mypref_size, (len(res), torrent_size - mypref_size)
1004 res = db.getTorrents()
1005 len(res) == torrent_size
1008 assert data['category'][0] in db.category_table.keys(), data['category']
1009 assert data['status'] in db.status_table.keys(), data['status']
1010 assert data['source'] in db.src_table.keys(), data['source']
1011 assert len(data['infohash']) == 20
1013 def singtest_add_update_delete_Torrent(self):
1015 self.updateTorrent()
1016 self.deleteTorrent()
1018 def addTorrent(self):
1019 copyFile(S_TORRENT_PATH_BACKUP, S_TORRENT_PATH)
1020 copyFile(M_TORRENT_PATH_BACKUP, M_TORRENT_PATH)
1022 db = TorrentDBHandler.getInstance()
1024 old_size = db.size()
1025 old_src_size = db._db.size('TorrentSource')
1026 old_tracker_size = db._db.size('TorrentTracker')
1028 s_infohash = unhexlify('44865489ac16e2f34ea0cd3043cfd970cc24ec09')
1029 m_infohash = unhexlify('ed81da94d21ad1b305133f2726cdaec5a57fed98')
1031 sid = db._db.getTorrentID(s_infohash)
1032 mid = db._db.getTorrentID(m_infohash)
1034 single_torrent_file_path = os.path.join(FILES_DIR, 'single.torrent')
1035 multiple_torrent_file_path = os.path.join(FILES_DIR, 'multiple.torrent')
1037 single_tdef = TorrentDef.load(single_torrent_file_path)
1038 assert s_infohash == single_tdef.get_infohash()
1039 src = 'http://www.rss.com/torrent.xml'
1040 multiple_tdef = TorrentDef.load(multiple_torrent_file_path)
1041 assert m_infohash == multiple_tdef.get_infohash()
1043 db.addExternalTorrent(single_tdef, extra_info={'filename':single_torrent_file_path})
1044 db.addExternalTorrent(multiple_tdef, source=src, extra_info={'filename':multiple_torrent_file_path})
1046 single_torrent_id = db._db.getTorrentID(s_infohash)
1047 multiple_torrent_id = db._db.getTorrentID(m_infohash)
1049 assert db.getInfohash(single_torrent_id) == s_infohash
1051 single_name = 'Tribler_4.1.7_src.zip'
1052 multiple_name = 'Tribler_4.1.7_src'
1054 assert db.size() == old_size + 2, old_size - db.size()
1055 assert old_src_size + 1 == db._db.size('TorrentSource')
1056 assert old_tracker_size + 2 == db._db.size('TorrentTracker'), db._db.size('TorrentTracker')-old_tracker_size
1058 sname = db.getOne('name', torrent_id=single_torrent_id)
1059 assert sname == single_name, (sname,single_name)
1060 mname = db.getOne('name', torrent_id=multiple_torrent_id)
1061 assert mname == multiple_name, (mname,multiple_name)
1063 s_size = db.getOne('length', torrent_id=single_torrent_id)
1064 assert s_size == 1583233, s_size
1065 m_size = db.getOne('length', torrent_id=multiple_torrent_id)
1066 assert m_size == 5358560, m_size
1068 cat = db.getOne('category_id', torrent_id=multiple_torrent_id)
1069 assert cat == 8, cat # other
1070 sid = db._db.getOne('TorrentSource', 'source_id', name=src)
1072 m_sid = db.getOne('source_id', torrent_id=multiple_torrent_id)
1074 s_sid = db.getOne('source_id', torrent_id=single_torrent_id)
1076 s_status = db.getOne('status_id', torrent_id=single_torrent_id)
1077 assert s_status == 0
1079 m_comment = db.getOne('comment', torrent_id=multiple_torrent_id)
1080 comments = 'www.tribler.org'
1081 assert m_comment.find(comments)>-1
1082 comments = 'something not inside'
1083 assert m_comment.find(comments)==-1
1085 m_trackers = db.getTracker(m_infohash, 0) #db._db.getAll('TorrentTracker', 'tracker', 'torrent_id=%d'%multiple_torrent_id)
1086 assert len(m_trackers) == 1
1087 assert ('http://tpb.tracker.thepiratebay.org/announce',1) in m_trackers, m_trackers
1089 s_torrent = db.getTorrent(s_infohash)
1090 m_torrent = db.getTorrent(m_infohash)
1091 assert s_torrent['name'] == 'Tribler_4.1.7_src.zip', s_torrent['name']
1092 assert m_torrent['name'] == 'Tribler_4.1.7_src', m_torrent['name']
1093 assert m_torrent['last_check_time'] == 0
1094 assert len(s_torrent) == 16
1095 assert len(m_torrent) == 16
1097 def updateTorrent(self):
1098 db = TorrentDBHandler.getInstance()
1100 s_infohash = unhexlify('44865489ac16e2f34ea0cd3043cfd970cc24ec09')
1101 m_infohash = unhexlify('ed81da94d21ad1b305133f2726cdaec5a57fed98')
1103 db.updateTorrent(m_infohash, relevance=3.1415926, category=['Videoclips'],
1104 status='good', progress=23.5, seeder=123, leecher=321,
1105 last_check_time=1234567, ignore_number=1, retry_number=2,
1106 other_key1='abcd', other_key2=123)
1107 multiple_torrent_id = db._db.getTorrentID(m_infohash)
1108 res_r = db.getOne('relevance', torrent_id=multiple_torrent_id)
1109 ### assert 3.1415926 == res_r
1110 db.updateTorrentRelevance(m_infohash, 1.41421)
1111 res_r = db.getOne('relevance', torrent_id=multiple_torrent_id)
1112 ### assert 1.41421 == res_r
1113 cid = db.getOne('category_id', torrent_id=multiple_torrent_id)
1114 ### assert cid == 2, cid
1115 sid = db.getOne('status_id', torrent_id=multiple_torrent_id)
1117 p = db.mypref_db.getOne('progress', torrent_id=multiple_torrent_id)
1119 seeder = db.getOne('num_seeders', torrent_id=multiple_torrent_id)
1120 assert seeder == 123
1121 leecher = db.getOne('num_leechers', torrent_id=multiple_torrent_id)
1122 assert leecher == 321
1123 last_check_time = db._db.getOne('TorrentTracker', 'last_check', announce_tier=1, torrent_id=multiple_torrent_id)
1124 assert last_check_time == 1234567, last_check_time
1125 ignore_number = db._db.getOne('TorrentTracker', 'ignored_times', announce_tier=1, torrent_id=multiple_torrent_id)
1126 assert ignore_number == 1
1127 retry_number = db._db.getOne('TorrentTracker', 'retried_times', announce_tier=1, torrent_id=multiple_torrent_id)
1128 assert retry_number == 2
1130 def deleteTorrent(self):
1131 db = TorrentDBHandler.getInstance()
1132 db.torrent_dir = FILES_DIR
1133 s_infohash = unhexlify('44865489ac16e2f34ea0cd3043cfd970cc24ec09')
1134 m_infohash = unhexlify('ed81da94d21ad1b305133f2726cdaec5a57fed98')
1136 assert db.deleteTorrent(s_infohash, delete_file=True)
1137 assert db.deleteTorrent(m_infohash)
1139 assert not db.hasTorrent(s_infohash)
1140 assert not db.hasTorrent(m_infohash)
1141 assert not os.path.isfile(S_TORRENT_PATH)
1142 m_trackers = db.getTracker(m_infohash, 0)
1143 assert len(m_trackers) == 0
1145 # fake_infoahsh = 'fake_infohash_1'+'0R0\x10\x00\x07*\x86H\xce=\x02'
1146 # 02/02/10 Boudewijn: infohashes must be 20 bytes long
1147 fake_infoahsh = 'fake_infohash_1'+'0R0\x10\x00'
1148 assert not db.deleteTorrent(fake_infoahsh)
1150 my_infohash_str_126 = 'ByJho7yj9mWY1ORWgCZykLbU1Xc='
1151 my_infohash = str2bin(my_infohash_str_126)
1152 assert not db.deleteTorrent(my_infohash)
1154 def singtest_getCollectedTorrentHashes(self):
1155 db = TorrentDBHandler.getInstance()
1156 res = db.getNumberCollectedTorrents()
1157 assert res == 4848, res
1159 def singtest_freeSpace(self):
1160 db = TorrentDBHandler.getInstance()
1161 old_res = db.getNumberCollectedTorrents()
1163 res = db.getNumberCollectedTorrents()
1164 assert old_res - res == 20
1168 class TestMyPreferenceDBHandler(unittest.TestCase):
1171 db_path = TRIBLER_DB_PATH
1172 db = SQLiteCacheDB.getInstance()
1173 db.openDB(db_path, busytimeout=BUSYTIMEOUT)
1174 mypref_db = MyPreferenceDBHandler.getInstance()
1175 mypref_db.loadData()
1178 SQLiteCacheDB.getInstance().close()
1180 def singtest_getPrefList(self):
1181 db = MyPreferenceDBHandler.getInstance()
1182 pl = db.getMyPrefListInfohash()
1183 assert len(pl) == 12
1185 def singtest_getCreationTime(self):
1186 db = MyPreferenceDBHandler.getInstance()
1187 infohash_str_126 = 'ByJho7yj9mWY1ORWgCZykLbU1Xc='
1188 infohash = str2bin(infohash_str_126)
1189 ct = db.getCreationTime(infohash)
1190 assert ct == 1194966300, ct
1192 def singtest_getRecentLivePrefList(self):
1193 db = MyPreferenceDBHandler.getInstance()
1194 pl = db.getRecentLivePrefList()
1195 assert len(pl) == 11, (len(pl), pl)
1196 infohash_str_126 = 'ByJho7yj9mWY1ORWgCZykLbU1Xc='
1197 assert bin2str(pl[0]) == infohash_str_126
1198 infohash_str_1279 = 'R+grUhp884MnFkt6NuLnnauZFsc='
1199 assert bin2str(pl[1]) == infohash_str_1279
1201 pl = db.getRecentLivePrefList(8)
1202 assert len(pl) == 8, (len(pl), pl)
1203 assert bin2str(pl[0]) == infohash_str_126
1204 assert bin2str(pl[1]) == infohash_str_1279
1206 def singtest_hasMyPreference(self):
1207 infohash_str_126 = 'ByJho7yj9mWY1ORWgCZykLbU1Xc='
1208 infohash_str_1279 = 'R+grUhp884MnFkt6NuLnnauZFsc='
1209 db = MyPreferenceDBHandler.getInstance()
1210 assert db.hasMyPreference(str2bin(infohash_str_126))
1211 assert db.hasMyPreference(str2bin(infohash_str_1279))
1212 # fake_infoahsh = 'fake_infohash_1'+'0R0\x10\x00\x07*\x86H\xce=\x02'
1213 # 02/02/10 Boudewijn: infohashes must be 20 bytes long
1214 fake_infoahsh = 'fake_infohash_1'+'0R0\x10\x00'
1215 assert not db.hasMyPreference(fake_infoahsh)
1217 def singtest_addMyPreference_deletePreference(self):
1218 db = MyPreferenceDBHandler.getInstance()
1219 p = db.getOne(('torrent_id', 'destination_path', 'progress', 'creation_time'), torrent_id=126)
1221 infohash = db._db.getInfohash(torrent_id)
1224 creation_time = p[3]
1225 db.deletePreference(infohash)
1226 pl = db.getMyPrefListInfohash()
1227 assert len(pl) == 11
1228 assert infohash not in pl
1230 data = {'destination_path':destpath}
1231 db.addMyPreference(infohash, data)
1232 p2 = db.getOne(('torrent_id', 'destination_path', 'progress', 'creation_time'), torrent_id=126)
1233 assert p2[0] == p[0] and p2[1] == p[1] and p2[2] == 0 and time()-p2[3] < 10 , p2
1235 db.deletePreference(infohash)
1236 pl = db.getMyPrefListInfohash()
1237 assert len(pl) == 11
1238 assert infohash not in pl
1240 data = {'destination_path':destpath, 'progress':progress, 'creation_time':creation_time}
1241 db.addMyPreference(infohash, data)
1242 p3 = db.getOne(('torrent_id', 'destination_path', 'progress', 'creation_time'), torrent_id=126)
1245 def singtest_updateProgress(self):
1246 infohash_str_126 = 'ByJho7yj9mWY1ORWgCZykLbU1Xc='
1247 infohash = str2bin(infohash_str_126)
1248 db = MyPreferenceDBHandler.getInstance()
1249 assert db.hasMyPreference(infohash)
1250 torrent_id = db._db.getTorrentID(infohash)
1251 db.updateProgress(infohash, 3.14)
1252 p = db.getOne('progress', torrent_id=torrent_id)
1255 def singtest_getMyPrefListInfohash(self):
1256 db = MyPreferenceDBHandler.getInstance()
1257 preflist = db.getMyPrefListInfohash()
1260 assert len(preflist) == 12
1262 def singtest_getMyPrefStats(self):
1263 db = MyPreferenceDBHandler.getInstance()
1264 res = db.getMyPrefStats()
1268 assert len(data) == 3
1271 suite = unittest.TestSuite()
1272 # We should run the tests in a separate Python interpreter to prevent
1273 # problems with our singleton classes, e.g. PeerDB, etc.
1274 if len(sys.argv) != 3:
1275 print "Usage: python test_so.py <class name> <method name>"
1277 for class_ in unittest.TestCase.__subclasses__():
1278 if class_.__name__ == sys.argv[1]:
1280 suite.addTest(class_(sys.argv[2]))
1284 unittest.main(defaultTest='test_suite',argv=[sys.argv[0]])
1286 if __name__ == "__main__":