def test_accept_zero_and_persist_if_accepted(self): host_strategy = BasicAvailabilityWeightedStrategy( DummyBlobAvailabilityTracker()) client_strategy = BasicAvailabilityWeightedStrategy( DummyBlobAvailabilityTracker()) client = "1.1.1.1" host = "1.1.1.2" blobs = host_strategy.price_model.blob_tracker.availability.keys() offer = client_strategy.make_offer(host, blobs) response1 = host_strategy.respond_to_offer(offer, client, blobs) client_strategy.update_accepted_offers(host, response1) offer = client_strategy.make_offer(host, blobs) response2 = host_strategy.respond_to_offer(offer, client, blobs) client_strategy.update_accepted_offers(host, response2) self.assertEquals(response1.is_too_low, False) self.assertEquals(response1.is_accepted, True) self.assertEquals(response1.rate, 0.0) self.assertEquals(response2.is_too_low, False) self.assertEquals(response2.is_accepted, True) self.assertEquals(response2.rate, 0.0)
def calculate_negotation_turns(client_base, host_base, host_is_generous=True, client_is_generous=True): blobs = [ 'b2e48bb4c88cf46b76adf0d47a72389fae0cd1f19ed27dc5' '09138c99509a25423a4cef788d571dca7988e1dca69e6fa0', 'd7c82e6cac093b3f16107d2ae2b2c75424f1fcad2c7fbdbe' '66e4a13c0b6bd27b67b3a29c403b82279ab0f7c1c48d6787', '5a450b416275da4bdff604ee7b58eaedc7913c5005b7184f' 'c3bc5ef0b1add00613587f54217c91097fc039ed9eace9dd', 'f99d24cd50d4bfd77c2598bfbeeb8415bf0feef21200bdf0' 'b8fbbde7751a77b7a2c68e09c25465a2f40fba8eecb0b4e0', '9dbda74a472a2e5861a5d18197aeba0f5de67c67e401124c' '243d2f0f41edf01d7a26aeb0b5fc9bf47f6361e0f0968e2c', '91dc64cf1ff42e20d627b033ad5e4c3a4a96856ed8a6e3fb' '4cd5fa1cfba4bf72eefd325f579db92f45f4355550ace8e7', '6d8017aba362e5c5d0046625a039513419810a0397d72831' '8c328a5cc5d96efb589fbca0728e54fe5adbf87e9545ee07', '6af95cd062b4a179576997ef1054c9d2120f8592eea045e9' '667bea411d520262cd5a47b137eabb7a7871f5f8a79c92dd', '8c70d5e2f5c3a6085006198e5192d157a125d92e73787944' '72007a61947992768926513fc10924785bdb1761df3c37e6', 'c84aa1fd8f5009f7c4e71e444e40d95610abc1480834f835' 'eefb267287aeb10025880a3ce22580db8c6d92efb5bc0c9c' ] host = mock.Mock() host.host = "1.2.3.4" client = mock.Mock() client.host = "1.2.3.5" client_base_prm = BasePaymentRateManager(client_base) client_prm = NegotiatedPaymentRateManager(client_base_prm, DummyBlobAvailabilityTracker(), generous=client_is_generous) host_base_prm = BasePaymentRateManager(host_base) host_prm = NegotiatedPaymentRateManager(host_base_prm, DummyBlobAvailabilityTracker(), generous=host_is_generous) blobs_to_query = get_random_sample(blobs) accepted = False turns = 0 while not accepted: rate = client_prm.get_rate_blob_data(host, blobs_to_query) offer = Offer(rate) accepted = host_prm.accept_rate_blob_data(client, blobs_to_query, offer) turns += 1 return turns
def get_test_daemon(data_rate=None, generous=True, with_fee=False): if data_rate is None: data_rate = conf.ADJUSTABLE_SETTINGS['data_rate'][1] rates = { 'BTCLBC': { 'spot': 3.0, 'ts': util.DEFAULT_ISO_TIME + 1 }, 'USDBTC': { 'spot': 2.0, 'ts': util.DEFAULT_ISO_TIME + 2 } } daemon = LBRYDaemon(None) daemon.session = mock.Mock(spec=Session.Session) daemon.session.wallet = mock.Mock(spec=Wallet.LBRYumWallet) market_feeds = [BTCLBCFeed(), USDBTCFeed()] daemon.exchange_rate_manager = DummyExchangeRateManager( market_feeds, rates) base_prm = PaymentRateManager.BasePaymentRateManager(rate=data_rate) prm = PaymentRateManager.NegotiatedPaymentRateManager( base_prm, DummyBlobAvailabilityTracker(), generous=generous) daemon.session.payment_rate_manager = prm metadata = { "author": "fake author", "language": "en", "content_type": "fake/format", "description": "fake description", "license": "fake license", "license_url": "fake license url", "nsfw": False, "sources": { "lbry_sd_hash": 'd2b8b6e907dde95245fe6d144d16c2fdd60c4e0c6463ec98' 'b85642d06d8e9414e8fcfdcb7cb13532ec5454fb8fe7f280' }, "thumbnail": "fake thumbnail", "title": "fake title", "ver": "0.0.3" } if with_fee: metadata.update({ "fee": { "USD": { "address": "bQ6BGboPV2SpTMEP7wLNiAcnsZiH8ye6eA", "amount": 0.75 } } }) daemon._resolve_name = lambda _: defer.succeed(metadata) migrated = smart_decode(json.dumps(metadata)) daemon.session.wallet.resolve = lambda *_: defer.succeed( {"test": { 'claim': { 'value': migrated.claim_dict } }}) return daemon
def setUp(self): mock_conf_settings(self) self.blob_manager = mock.Mock() self.payment_rate_manager = NegotiatedPaymentRateManager( BasePaymentRateManager(0.001), DummyBlobAvailabilityTracker()) self.handler = BlobRequestHandler.BlobRequestHandler( self.blob_manager, None, self.payment_rate_manager, None)
def test_first_offer_is_zero_and_second_is_not_if_offer_not_accepted(self): strategy = BasicAvailabilityWeightedStrategy( DummyBlobAvailabilityTracker()) peer = "1.1.1.1" blobs = strategy.price_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)