From d741c705cd5072c8d7fd7a236aca532b54c60255 Mon Sep 17 00:00:00 2001 From: Jack Date: Sat, 1 Oct 2016 01:09:27 -0400 Subject: [PATCH] add some tests, don't use lighthouse for cost ests --- lbrynet/conf.py | 10 ++++---- lbrynet/core/BlobAvailability.py | 33 +++++++++++++++++++++++++- lbrynet/lbrynet_daemon/Daemon.py | 7 +----- lbrynet/lbrynet_daemon/Downloader.py | 3 +-- tests/unit/core/test_Strategy.py | 35 ++++++++++++++++++++++++++++ 5 files changed, 73 insertions(+), 15 deletions(-) create mode 100644 tests/unit/core/test_Strategy.py diff --git a/lbrynet/conf.py b/lbrynet/conf.py index bd9808e12..f9a413549 100644 --- a/lbrynet/conf.py +++ b/lbrynet/conf.py @@ -28,12 +28,10 @@ KNOWN_DHT_NODES = [('104.236.42.182', 4000), POINTTRADER_SERVER = 'http://ec2-54-187-192-68.us-west-2.compute.amazonaws.com:2424' #POINTTRADER_SERVER = 'http://127.0.0.1:2424' -if IS_DEVELOPMENT_VERSION: - SEARCH_SERVERS = ["http://107.170.207.64:50005"] -else: - SEARCH_SERVERS = ["http://lighthouse1.lbry.io:50005", - "http://lighthouse2.lbry.io:50005", - "http://lighthouse3.lbry.io:50005"] + +SEARCH_SERVERS = ["http://lighthouse1.lbry.io:50005", + "http://lighthouse2.lbry.io:50005", + "http://lighthouse3.lbry.io:50005"] REFLECTOR_SERVERS = [("reflector.lbry.io", 5566)] diff --git a/lbrynet/core/BlobAvailability.py b/lbrynet/core/BlobAvailability.py index 80ef8e273..9cbbb3ec6 100644 --- a/lbrynet/core/BlobAvailability.py +++ b/lbrynet/core/BlobAvailability.py @@ -67,6 +67,7 @@ class BlobAvailabilityTracker(object): encoded = hash.encode('hex') dl.append(self._update_peers_for_blob(encoded)) return defer.DeferredList(dl) + d = _get_most_popular() d.addCallback(lambda _: self._get_mean_peers()) @@ -76,6 +77,7 @@ class BlobAvailabilityTracker(object): for hash in blobs: dl.append(self._update_peers_for_blob(hash)) return defer.DeferredList(dl) + d = self._blob_manager.get_all_verified_blobs() d.addCallback(_get_peers) d.addCallback(lambda _: self._get_mean_peers()) @@ -83,4 +85,33 @@ class BlobAvailabilityTracker(object): def _get_mean_peers(self): num_peers = [len(self.availability[blob]) for blob in self.availability] mean = float(sum(num_peers)) / float(max(1, len(num_peers))) - self.last_mean_availability = mean \ No newline at end of file + self.last_mean_availability = mean + + +class DummyBlobAvailabilityTracker(object): + """ + Class to track peer counts for known blobs, and to discover new popular blobs + + Attributes: + availability (dict): dictionary of peers for known blobs + """ + + def __init__(self): + self.availability = { + '91dc64cf1ff42e20d627b033ad5e4c3a4a96856ed8a6e3fb4cd5fa1cfba4bf72eefd325f579db92f45f4355550ace8e7': ['1.2.3.4'], + 'b2e48bb4c88cf46b76adf0d47a72389fae0cd1f19ed27dc509138c99509a25423a4cef788d571dca7988e1dca69e6fa0': ['1.2.3.4', '1.2.3.4'], + '6af95cd062b4a179576997ef1054c9d2120f8592eea045e9667bea411d520262cd5a47b137eabb7a7871f5f8a79c92dd': ['1.2.3.4', '1.2.3.4', '1.2.3.4'], + '6d8017aba362e5c5d0046625a039513419810a0397d728318c328a5cc5d96efb589fbca0728e54fe5adbf87e9545ee07': ['1.2.3.4', '1.2.3.4', '1.2.3.4', '1.2.3.4'], + '5a450b416275da4bdff604ee7b58eaedc7913c5005b7184fc3bc5ef0b1add00613587f54217c91097fc039ed9eace9dd': ['1.2.3.4', '1.2.3.4', '1.2.3.4', '1.2.3.4', '1.2.3.4'], + 'd7c82e6cac093b3f16107d2ae2b2c75424f1fcad2c7fbdbe66e4a13c0b6bd27b67b3a29c403b82279ab0f7c1c48d6787': ['1.2.3.4', '1.2.3.4', '1.2.3.4', '1.2.3.4', '1.2.3.4', '1.2.3.4'], + '9dbda74a472a2e5861a5d18197aeba0f5de67c67e401124c243d2f0f41edf01d7a26aeb0b5fc9bf47f6361e0f0968e2c': ['1.2.3.4', '1.2.3.4', '1.2.3.4', '1.2.3.4', '1.2.3.4', '1.2.3.4', '1.2.3.4'], + '8c70d5e2f5c3a6085006198e5192d157a125d92e7378794472007a61947992768926513fc10924785bdb1761df3c37e6': ['1.2.3.4', '1.2.3.4', '1.2.3.4', '1.2.3.4', '1.2.3.4', '1.2.3.4', '1.2.3.4', '1.2.3.4'], + 'f99d24cd50d4bfd77c2598bfbeeb8415bf0feef21200bdf0b8fbbde7751a77b7a2c68e09c25465a2f40fba8eecb0b4e0': ['1.2.3.4', '1.2.3.4', '1.2.3.4', '1.2.3.4', '1.2.3.4', '1.2.3.4', '1.2.3.4', '1.2.3.4', '1.2.3.4'], + 'c84aa1fd8f5009f7c4e71e444e40d95610abc1480834f835eefb267287aeb10025880a3ce22580db8c6d92efb5bc0c9c': ['1.2.3.4', '1.2.3.4', '1.2.3.4', '1.2.3.4', '1.2.3.4', '1.2.3.4', '1.2.3.4', '1.2.3.4', '1.2.3.4', '1.2.3.4'], + } + self._get_mean_peers() + + def _get_mean_peers(self): + num_peers = [len(self.availability[blob]) for blob in self.availability] + mean = float(sum(num_peers)) / float(max(1, len(num_peers))) + self.last_mean_availability = mean diff --git a/lbrynet/lbrynet_daemon/Daemon.py b/lbrynet/lbrynet_daemon/Daemon.py index 40584864c..a8afe3b01 100644 --- a/lbrynet/lbrynet_daemon/Daemon.py +++ b/lbrynet/lbrynet_daemon/Daemon.py @@ -1887,13 +1887,8 @@ class Daemon(jsonrpc.JSONRPC): """ name = p['name'] - force = p.get('force', False) - if force: - d = self._get_est_cost(name) - else: - d = self._search(name) - d.addCallback(lambda r: [i['cost'] for i in r][0]) + d = self._get_est_cost(name) d.addCallback(lambda r: self._render_response(r, OK_CODE)) return d diff --git a/lbrynet/lbrynet_daemon/Downloader.py b/lbrynet/lbrynet_daemon/Downloader.py index 6e851571e..f4056bc9e 100644 --- a/lbrynet/lbrynet_daemon/Downloader.py +++ b/lbrynet/lbrynet_daemon/Downloader.py @@ -47,7 +47,6 @@ class GetStream(object): self.description = None self.fee = None self.data_rate = data_rate - self.name = None self.file_name = file_name self.session = session self.exchange_rate_manager = exchange_rate_manager @@ -147,7 +146,7 @@ class GetStream(object): return self.finished def _start_download(self, downloader): - log.info('Starting download for %s', self.name) + log.info('Starting download for %s', self.resolved_name) self.downloader = downloader self.download_path = os.path.join(downloader.download_directory, downloader.file_name) diff --git a/tests/unit/core/test_Strategy.py b/tests/unit/core/test_Strategy.py new file mode 100644 index 000000000..4f52c1754 --- /dev/null +++ b/tests/unit/core/test_Strategy.py @@ -0,0 +1,35 @@ +from twisted.trial import unittest +from lbrynet.core.Strategy import BasicAvailabilityWeightedStrategy +from lbrynet.core.BlobAvailability import DummyBlobAvailabilityTracker + + +class StrategyTests(unittest.TestCase): + def test_first_offer_is_zero_and_second_isnt(self): + strategy = BasicAvailabilityWeightedStrategy(DummyBlobAvailabilityTracker()) + peer = "1.1.1.1" + blobs = strategy.model.blob_tracker.availability.keys() + offer1 = strategy.make_offer(peer, blobs) + offer2 = strategy.make_offer(peer, blobs) + self.assertEquals(offer1.rate, 0.0) + self.assertNotEqual(offer2.rate, 0.0) + + def test_accept_zero_for_first_offer_and_reject_after(self): + host_strategy = BasicAvailabilityWeightedStrategy(DummyBlobAvailabilityTracker()) + client = "1.1.1.1" + host = "1.1.1.2" + blobs = host_strategy.model.blob_tracker.availability.keys() + client_strategy = BasicAvailabilityWeightedStrategy(DummyBlobAvailabilityTracker()) + client_offer1 = client_strategy.make_offer(host, blobs) + client_strategy = BasicAvailabilityWeightedStrategy(DummyBlobAvailabilityTracker()) + client_offer2 = client_strategy.make_offer(host, blobs) + + host_response1 = host_strategy.respond_to_offer(client_offer1, client, blobs) + host_response2 = host_strategy.respond_to_offer(client_offer2, client, blobs) + + self.assertEquals(host_response2.too_low, False) + self.assertEquals(host_response1.accepted, True) + self.assertEquals(host_response1.rate, 0.0) + + self.assertEquals(host_response2.too_low, True) + self.assertEquals(host_response2.accepted, False) + self.assertEquals(host_response2.rate, 0.0) \ No newline at end of file