def add_download_info_to_resource_list(resource_list): for resource in resource_list: assert 'file_id' in resource resource["online_owners_num"] = int( DownloadMedium.get_online_owners_num_of_res(resource['file_id'])) resource["online_owners_num"] = min(resource["total_owners_num"], resource["online_owners_num"])
def get(self): #user is uid user = get_current_user(self) if not user: user = self.get_argument( "user", None) # mock user since node client has no cookie try: uid = int(user) except: err = json.dumps({"err": 4, "what": "uid invalid"}) self.write(err) return file_hash = self.get_argument("file_hash", None) #default is public if not file_hash: err = json.dumps({"err": 5, "what": "file hash err"}) self.write(err) return res_header = ResourcesCache.get_resource_header(file_hash) online_owners = DownloadMedium.get_online_file_owner(uid, file_hash) ok = json.dumps({ "err": 0, "file_info": res_header, "owners": online_owners }) self.write(ok)
def get(self): resource_list = ResourcesCache.get_resources_overview() for file_hash in resource_list: resource_list[file_hash][ "online_owners_num"] = DownloadMedium.get_online_user_cnt( file_hash) resource_data = json.dumps({"err": 0, "resource_list": resource_list}) self.write(resource_data)
def test_download(): UserIPCache.update_my_ip(1,"1.1.1.1") UserIPCache.update_my_ip(2,"2.2.2.2") UserIPCache.update_my_ip(3,"2.2.2.2") UserIPCache.update_my_ip(4,"2.2.2.2") #2,3,4 are the same IP UserIPCache.update_my_ip(5,"2:2:2::2") UserIPCache.update_my_ip(6,"2:2:2::3") UserIPCache.update_my_ip(7,"5:2:2::3") UserIPCache.update_my_ip(8,"5:4:2::3") HttpServerInfoCache.update_ipv4_address(1,'192.168.1.101') HttpServerInfoCache.update_ipv4_address(2,'192.168.1.103') HttpServerInfoCache.update_ipv4_address(3,'192.168.1.104') HttpServerInfoCache.update_ipv4_address(4,'192.168.1.105') HttpServerInfoCache.update_ipv6_address(5,'2:2:2::2') HttpServerInfoCache.update_ipv6_address(6,'2:2:2::3') HttpServerInfoCache.update_ipv6_address(7,"5:2:2::3") #7,8 are the same IP HttpServerInfoCache.update_ipv6_address(8,"5:4:2::3") # user 2,3,4 uploaded the same file ResourcesCache.user_upload_resource(2,"user2","file_hash2","test2.txt",1023,1,"test",0,1,3,"user2 uploaded file") ResourcesCache.user_upload_resource(3,"user3","file_hash2","test2.txt",1023,1,"test",0,1,3,"user3 uploaded file") ResourcesCache.user_upload_resource(4,"user4","file_hash2","test2.txt",1023,1,"test",0,1,3,"user4 uploaded file") # user 3,4 uploaded the same file ResourcesCache.user_upload_resource(3,"user3","file_hash3","test4.txt",1023,1,"test",0,1,3,"user3 uploaded file") ResourcesCache.user_upload_resource(4,"user4","file_hash3","test4.txt",1023,1,"test",0,1,3,"user4 uploaded file") # user 5,6,7 uploaded the same file ResourcesCache.user_upload_resource(5,"user5","file_hash5","test5.txt",10123,1,"test",0,1,3,"user5 uploaded file") ResourcesCache.user_upload_resource(6,"user6","file_hash5","test5.txt",10123,1,"test",0,1,3,"user6 uploaded file") ResourcesCache.user_upload_resource(7,"user7","file_hash5","test5.txt",10123,1,"test",0,1,3,"user7 uploaded file") assert DownloadMedium.get_online_file_owner(1,"file_hash2") == [] assert DownloadMedium.get_online_file_owner(1,"file_hash5") == [] assert DownloadMedium.get_online_file_owner(1,"file_hash_not_exist") == [] assert DownloadMedium.get_online_file_owner(8,"file_hash_not_exist") == [] assert DownloadMedium.get_online_file_owner(8,"file_hash2") == [] assert DownloadMedium.get_online_file_owner(2,"file_hash3") == [{"uid": 3, "host": '192.168.1.104', "port":8884},{"uid": 4, "host": '192.168.1.105', "port":8884}] assert DownloadMedium.get_online_file_owner(8,"file_hash5") == [{"uid": 5, "host": '2:2:2::2', "port":8886},{"uid": 6, "host": '2:2:2::3', "port":8886},{"uid": 7, "host": "5:2:2::3", "port":8886}] #if __name__ == "__main__": # test_download()
def test_download_ipv6(self): client = redis.StrictRedis() client.flushdb() r = RedisProxy(redis_client=client) UserIPCache.set_cache(r) UserIPCache.reset() online_users = [] # user offline my_uid = 12345 ret = DownloadMedium.get_matched_online_owners(my_uid, online_users, False, True) self.assertEqual(ret, {'owners': [], 'download_type': DownloadMedium.download_type["None"]}) # user online but has no owners ip = "1.1.1.1" UserIPCache.update_my_ip(my_uid, ip) ret = DownloadMedium.get_matched_online_owners(my_uid, online_users, False, True) self.assertEqual(ret, {'owners': [], 'download_type': DownloadMedium.download_type["None"]}) # user just see himself online_users = [my_uid, ] v6_ip = "2001::1" port = 8885 HttpServerInfoCache.update_ipv6_address(my_uid, v6_ip, port) ret = DownloadMedium.get_matched_online_owners(my_uid, online_users, False, False) self.assertEqual(ret, {'owners': [{'host': v6_ip, 'uid': my_uid, 'port': port}], 'download_type': DownloadMedium.download_type["V6"]}) ret = DownloadMedium.get_matched_online_owners(my_uid, online_users, False, True) self.assertEqual(ret, {'owners': [], 'download_type': DownloadMedium.download_type["None"]}) his_uid = 54321 his_ip = '2.2.2.2' UserIPCache.update_my_ip(his_uid, his_ip) his_v6_ip = "2001::2" his_port = 8886 HttpServerInfoCache.update_ipv6_address(his_uid, his_v6_ip, his_port) online_users.append(his_uid) ret = DownloadMedium.get_matched_online_owners(my_uid, online_users, False, True) self.assertEqual(ret, {'owners': [{'host': his_v6_ip, 'uid': his_uid, 'port': his_port}], 'download_type': DownloadMedium.download_type["V6"]}) her_uid = 56789 her_ip = '3.3.3.3' UserIPCache.update_my_ip(her_uid, her_ip) her_v6_ip = "2001::3" her_port = 8885 HttpServerInfoCache.update_ipv6_address(her_uid, her_v6_ip, her_port) online_users.append(her_uid) ret = DownloadMedium.get_matched_online_owners(my_uid, online_users, False, True) self.assertEqual(ret, {'owners': [{'host': his_v6_ip, 'uid': his_uid, 'port': his_port}, {'host': her_v6_ip, 'uid': her_uid, 'port': her_port}, ], 'download_type': DownloadMedium.download_type["V6"]})
def test_download_ipv4_lan(self): client = redis.StrictRedis() client.flushdb() r = RedisProxy(redis_client=client) UserIPCache.set_cache(r) UserIPCache.reset() online_users = [] # user offline my_uid = 1234 ret = DownloadMedium.get_matched_online_owners(my_uid, online_users, False, True) self.assertEqual(ret, {'owners': [], 'download_type': DownloadMedium.download_type["None"]}) # user online but has no owners ip = "1.1.1.1" UserIPCache.update_my_ip(my_uid, ip) ret = DownloadMedium.get_matched_online_owners(my_uid, online_users, False, True) self.assertEqual(ret, {'owners': [], 'download_type': DownloadMedium.download_type["None"]}) # user just see himself online_users = [my_uid, ] lan_ip = "192.168.0.1" port = 8885 HttpServerInfoCache.update_ipv4_address(my_uid, lan_ip, port) ret = DownloadMedium.get_matched_online_owners(my_uid, online_users, False, False) self.assertEqual(ret, {'owners': [{'host': lan_ip, 'uid': my_uid, 'port': port}], 'download_type': DownloadMedium.download_type["V4_LAN"]}) ret = DownloadMedium.get_matched_online_owners(my_uid, online_users, False, True) self.assertEqual(ret, {'owners': [], 'download_type': DownloadMedium.download_type["None"]}) his_uid = 4321 UserIPCache.update_my_ip(his_uid, ip) his_lan_ip = "192.168.0.2" his_port = 8884 HttpServerInfoCache.update_ipv4_address(his_uid, his_lan_ip, his_port) online_users.append(his_uid) ret = DownloadMedium.get_matched_online_owners(my_uid, online_users, False, True) self.assertEqual(ret, {'owners': [{'host': his_lan_ip, 'uid': his_uid, 'port': his_port}], 'download_type': DownloadMedium.download_type["V4_LAN"]}) her_uid = 5678 UserIPCache.update_my_ip(her_uid, ip) her_lan_ip = "192.168.0.1" her_port = 8885 HttpServerInfoCache.update_ipv4_address(her_uid, her_lan_ip, her_port) online_users.append(her_uid) ret = DownloadMedium.get_matched_online_owners(my_uid, online_users, False, True) self.assertEqual(ret, {'owners': [{'host': his_lan_ip, 'uid': his_uid, 'port': his_port}, {'host': her_lan_ip, 'uid': her_uid, 'port': her_port}, ], 'download_type': DownloadMedium.download_type["V4_LAN"]})
def add_download_info_to_resource_list(resource_list): for resource in resource_list: assert 'file_id' in resource resource["online_owners_num"] = int(DownloadMedium.get_online_owners_num_of_res(resource['file_id'])) resource["online_owners_num"] = min(resource["total_owners_num"], resource["online_owners_num"])