From 4c01385416de964873b84ef1e0e7438dc9017d10 Mon Sep 17 00:00:00 2001 From: Kieran Prasch Date: Fri, 19 Oct 2018 01:16:38 -0700 Subject: [PATCH] Tests deployment and agency components with layering in mind, (Includes UserEscrow) mirrors lower level tests with higher-level integration points --- .../eth/entities/actors/test_deployer.py | 45 +++-- .../eth/entities/actors/test_miner.py | 4 +- .../eth/entities/actors/test_policy_author.py | 4 +- .../agents/test_miner_escrow_agent.py | 55 +++--- .../agents/test_policy_manager_agent.py | 60 ++++--- .../eth/entities/agents/test_token_agent.py | 2 +- .../entities/agents/test_user_escrow_agent.py | 163 ++++++++++++------ .../test_interdeployer_integration.py | 6 +- .../deployers/test_miner_escrow_deployer.py | 4 +- .../deployers/test_policy_manager_deployer.py | 4 +- .../deployers/test_user_escrow_deployer.py | 19 +- tests/fixtures.py | 4 - 12 files changed, 222 insertions(+), 148 deletions(-) diff --git a/tests/blockchain/eth/entities/actors/test_deployer.py b/tests/blockchain/eth/entities/actors/test_deployer.py index 4cefe7297..688845748 100644 --- a/tests/blockchain/eth/entities/actors/test_deployer.py +++ b/tests/blockchain/eth/entities/actors/test_deployer.py @@ -1,25 +1,44 @@ import os +import random +import string + +import pytest +from web3.auto import w3 from nucypher.blockchain.eth.actors import Deployer -from nucypher.blockchain.eth.registry import InMemoryEthereumContractRegistry +from nucypher.blockchain.eth.constants import MIN_LOCKED_PERIODS, MIN_ALLOWED_LOCKED, MAX_MINTING_PERIODS, \ + MAX_ALLOWED_LOCKED -def test_rapid_deployment(): - memory_registry = InMemoryEthereumContractRegistry() - deployer = Deployer.from_blockchain(provider_uri='tester://pyevm', - registry=memory_registry, - - ) - +@pytest.mark.slow() +def test_rapid_deployment(testerchain): + deployer = Deployer(blockchain=testerchain) deployer_address, *all_yall = deployer.blockchain.interface.w3.eth.accounts - deployer.deployer_address = deployer_address + # The Big Three (+ Dispatchers) deployer.deploy_network_contracts(miner_secret=os.urandom(32), policy_secret=os.urandom(32)) + # User Escrow Proxy deployer.deploy_escrow_proxy(secret=os.urandom(32)) - data = [{'address': all_yall[1], 'amount': 100, 'periods': 100}, - {'address': all_yall[2], 'amount': 133432, 'periods': 1}, - {'address': all_yall[3], 'amount': 999, 'periods': 30}] - deployer.deploy_beneficiary_contracts(allocations=data) + + # Deploy User Escrow + total_allocations = 100 + + # Start with some hard-coded cases... + allocation_data = [{'address': all_yall[1], 'amount': MAX_ALLOWED_LOCKED, 'periods': MIN_LOCKED_PERIODS}, + {'address': all_yall[2], 'amount': MIN_ALLOWED_LOCKED, 'periods': MIN_LOCKED_PERIODS}, + {'address': all_yall[7], 'amount': MIN_ALLOWED_LOCKED*100, 'periods': MAX_MINTING_PERIODS*3}] + + # Pile on the rest + for _ in range(total_allocations - len(allocation_data)): + random_password = ''.join(random.SystemRandom().choice(string.ascii_uppercase+string.digits) for _ in range(16)) + acct = w3.eth.account.create(random_password) + beneficiary_address = acct.address + amount = random.randint(MIN_ALLOWED_LOCKED, MAX_ALLOWED_LOCKED) + duration = random.randint(MIN_LOCKED_PERIODS, MAX_MINTING_PERIODS*3) + random_allocation = {'address': beneficiary_address, 'amount': amount, 'periods': duration} + allocation_data.append((random_allocation)) + + deployer.deploy_beneficiary_contracts(allocations=allocation_data) diff --git a/tests/blockchain/eth/entities/actors/test_miner.py b/tests/blockchain/eth/entities/actors/test_miner.py index ba2359e74..cfbf4f3f5 100644 --- a/tests/blockchain/eth/entities/actors/test_miner.py +++ b/tests/blockchain/eth/entities/actors/test_miner.py @@ -12,7 +12,7 @@ def miner(testerchain, three_agents): token_agent, miner_agent, policy_agent = three_agents origin, *everybody_else = testerchain.interface.w3.eth.accounts token_airdrop(token_agent, origin=origin, addresses=everybody_else, amount=DEVELOPMENT_TOKEN_AIRDROP_AMOUNT) - miner = Miner(miner_agent=miner_agent, checksum_address=everybody_else[0], is_me=True) + miner = Miner(checksum_address=everybody_else[0], is_me=True) return miner @@ -27,7 +27,7 @@ def test_miner_locking_tokens(testerchain, three_agents, miner): expiration=expiration) # Verify that the escrow is "approved" to receive tokens - allowance = miner_agent.token_agent.contract.functions.allowance( + allowance = token_agent.contract.functions.allowance( miner.checksum_public_address, miner_agent.contract_address).call() assert 0 == allowance diff --git a/tests/blockchain/eth/entities/actors/test_policy_author.py b/tests/blockchain/eth/entities/actors/test_policy_author.py index d7537bbc9..7084a2449 100644 --- a/tests/blockchain/eth/entities/actors/test_policy_author.py +++ b/tests/blockchain/eth/entities/actors/test_policy_author.py @@ -9,12 +9,12 @@ def author(testerchain, three_agents): token_agent, miner_agent, policy_agent = three_agents token_agent.ether_airdrop(amount=100000 * constants.M) _origin, ursula, alice, *everybody_else = testerchain.interface.w3.eth.accounts - author = PolicyAuthor(checksum_address=alice, policy_agent=policy_agent) + author = PolicyAuthor(checksum_address=alice) return author def test_create_policy_author(testerchain, three_agents): token_agent, miner_agent, policy_agent = three_agents _origin, ursula, alice, *everybody_else = testerchain.interface.w3.eth.accounts - policy_author = PolicyAuthor(policy_agent=policy_agent, checksum_address=alice) + policy_author = PolicyAuthor(checksum_address=alice) assert policy_author.checksum_public_address == alice diff --git a/tests/blockchain/eth/entities/agents/test_miner_escrow_agent.py b/tests/blockchain/eth/entities/agents/test_miner_escrow_agent.py index 7de117b74..d665ded42 100644 --- a/tests/blockchain/eth/entities/agents/test_miner_escrow_agent.py +++ b/tests/blockchain/eth/entities/agents/test_miner_escrow_agent.py @@ -5,16 +5,11 @@ from nucypher.blockchain.eth.constants import MIN_ALLOWED_LOCKED, MAX_ALLOWED_LO MIN_LOCKED_PERIODS -@pytest.fixture(scope='module') -def agent(three_agents): - token_agent, miner_agent, policy_agent = three_agents - return miner_agent - - -def test_deposit_tokens(agent): - testerchain = agent.blockchain +def test_deposit_tokens(testerchain, three_agents): origin, someone, *everybody_else = testerchain.interface.w3.eth.accounts - token_agent = agent.token_agent + token_agent, miner_agent, policy_agent = three_agents + + agent = miner_agent _txhash = token_agent.transfer(amount=MIN_ALLOWED_LOCKED * 2, # Transfer target_address=someone, @@ -38,16 +33,20 @@ def test_deposit_tokens(agent): testerchain.time_travel(periods=1) assert agent.get_locked_tokens(node_address=someone) == MIN_ALLOWED_LOCKED - balance = agent.token_agent.get_balance(address=someone) + balance = token_agent.get_balance(address=someone) assert balance == MIN_ALLOWED_LOCKED -def test_get_miner_population(agent, blockchain_ursulas): +def test_get_miner_population(three_agents, blockchain_ursulas): + token_agent, miner_agent, policy_agent = three_agents + agent = miner_agent assert agent.get_miner_population() == len(blockchain_ursulas) + 1 @pytest.mark.slow() -def test_get_swarm(agent, blockchain_ursulas): +def test_get_swarm(three_agents, blockchain_ursulas): + token_agent, miner_agent, policy_agent = three_agents + agent = miner_agent swarm = agent.swarm() swarm_addresses = list(swarm) assert len(swarm_addresses) == len(blockchain_ursulas) + 1 @@ -62,13 +61,17 @@ def test_get_swarm(agent, blockchain_ursulas): pytest.fail() -def test_locked_tokens(agent, blockchain_ursulas): +def test_locked_tokens(three_agents, blockchain_ursulas): + token_agent, miner_agent, policy_agent = three_agents + agent = miner_agent ursula = blockchain_ursulas.pop() locked_amount = agent.get_locked_tokens(node_address=ursula.checksum_public_address) assert MAX_ALLOWED_LOCKED > locked_amount > MIN_ALLOWED_LOCKED -def test_get_all_stakes(agent, blockchain_ursulas): +def test_get_all_stakes(three_agents, blockchain_ursulas): + token_agent, miner_agent, policy_agent = three_agents + agent = miner_agent ursula = blockchain_ursulas.pop() all_stakes = list(agent.get_all_stakes(miner_address=ursula.checksum_public_address)) assert len(all_stakes) == 1 @@ -79,13 +82,15 @@ def test_get_all_stakes(agent, blockchain_ursulas): assert MAX_ALLOWED_LOCKED > value > MIN_ALLOWED_LOCKED -def get_stake_info(agent): +def get_stake_info(three_agents): assert False @pytest.mark.slow() @pytest.mark.usefixtures("blockchain_ursulas") -def test_sample_miners(agent): +def test_sample_miners(three_agents): + token_agent, miner_agent, policy_agent = three_agents + agent = miner_agent miners_population = agent.get_miner_population() with pytest.raises(MinerAgent.NotEnoughMiners): @@ -96,7 +101,9 @@ def test_sample_miners(agent): assert len(set(miners)) == 3 # ...unique addresses -def test_get_current_period(agent): +def test_get_current_period(three_agents): + token_agent, miner_agent, policy_agent = three_agents + agent = miner_agent testerchain = agent.blockchain start_period = agent.get_current_period() testerchain.time_travel(periods=1) @@ -104,7 +111,9 @@ def test_get_current_period(agent): assert end_period > start_period -def test_confirm_activity(agent): +def test_confirm_activity(three_agents): + token_agent, miner_agent, policy_agent = three_agents + agent = miner_agent testerchain = agent.blockchain origin, someone, *everybody_else = testerchain.interface.w3.eth.accounts txhash = agent.confirm_activity(node_address=someone) @@ -115,7 +124,9 @@ def test_confirm_activity(agent): @pytest.mark.skip('To be implemented') -def test_divide_stake(agent): +def test_divide_stake(three_agents): + token_agent, miner_agent, policy_agent = three_agents + agent = miner_agent testerchain = agent.blockchain origin, someone, *everybody_else = testerchain.interface.w3.eth.accounts token_agent = agent.token_agent @@ -150,10 +161,12 @@ def test_divide_stake(agent): stakes = list(agent.get_all_stakes(miner_address=someone)) assert len(stakes) == 2 -def test_collect_staking_reward(agent): + +def test_collect_staking_reward(three_agents): + token_agent, miner_agent, policy_agent = three_agents + agent = miner_agent testerchain = agent.blockchain origin, someone, *everybody_else = testerchain.interface.w3.eth.accounts - token_agent = agent.token_agent # Confirm Activity _txhash = agent.confirm_activity(node_address=someone) diff --git a/tests/blockchain/eth/entities/agents/test_policy_manager_agent.py b/tests/blockchain/eth/entities/agents/test_policy_manager_agent.py index ed5c2020d..97430876a 100644 --- a/tests/blockchain/eth/entities/agents/test_policy_manager_agent.py +++ b/tests/blockchain/eth/entities/agents/test_policy_manager_agent.py @@ -9,17 +9,13 @@ from nucypher.blockchain.eth.constants import MIN_ALLOWED_LOCKED, MIN_LOCKED_PER TestPolicyMetadata = collections.namedtuple('TestPolicyMetadata', 'policy_id author addresses') -@pytest.fixture(scope='module') -def agent(three_agents): - token_agent, miner_agent, policy_agent = three_agents - return policy_agent - - @pytest.fixture(scope='function') -def policy_meta(agent): - testerchain = agent.blockchain +@pytest.mark.usefixtures('blockchain_ursulas') +def policy_meta(testerchain, three_agents): + token_agent, miner_agent, policy_agent = three_agents origin, someone, *everybody_else = testerchain.interface.w3.eth.accounts - miner_agent = agent.miner_agent + agent = policy_agent + _policy_id = os.urandom(16) node_addresses = list(miner_agent.sample(quantity=3, duration=1)) _txhash = agent.create_policy(policy_id=_policy_id, @@ -34,10 +30,10 @@ def policy_meta(agent): @pytest.mark.slow() @pytest.mark.usefixtures('blockchain_ursulas') -def test_create_policy(agent): - testerchain = agent.blockchain +def test_create_policy(testerchain, three_agents): + token_agent, miner_agent, policy_agent = three_agents origin, someone, *everybody_else = testerchain.interface.w3.eth.accounts - miner_agent = agent.miner_agent + agent = policy_agent policy_id = os.urandom(16) node_addresses = list(miner_agent.sample(quantity=3, duration=1)) @@ -53,7 +49,11 @@ def test_create_policy(agent): assert receipt['logs'][0]['address'] == agent.contract_address -def test_fetch_policy_arrangements(agent, policy_meta): +@pytest.mark.usefixtures('blockchain_ursulas') +def test_fetch_policy_arrangements(three_agents, policy_meta): + token_agent, miner_agent, policy_agent = three_agents + agent = policy_agent + arrangements = list(agent.fetch_policy_arrangements(policy_id=policy_meta.policy_id)) assert arrangements assert len(arrangements) == len(policy_meta.addresses) @@ -61,7 +61,11 @@ def test_fetch_policy_arrangements(agent, policy_meta): assert list(record[0] for record in arrangements) == policy_meta.addresses -def test_revoke_arrangement(agent, policy_meta): +@pytest.mark.usefixtures('blockchain_ursulas') +def test_revoke_arrangement(three_agents, policy_meta): + token_agent, miner_agent, policy_agent = three_agents + agent = policy_agent + txhash = agent.revoke_arrangement(policy_id=policy_meta.policy_id, author_address=policy_meta.author, node_address=policy_meta.addresses[0]) @@ -71,7 +75,11 @@ def test_revoke_arrangement(agent, policy_meta): assert receipt['logs'][0]['address'] == agent.contract_address -def test_revoke_policy(agent, policy_meta): +@pytest.mark.usefixtures('blockchain_ursulas') +def test_revoke_policy(three_agents, policy_meta): + token_agent, miner_agent, policy_agent = three_agents + agent = policy_agent + txhash = agent.revoke_policy(policy_id=policy_meta.policy_id, author_address=policy_meta.author) testerchain = agent.blockchain receipt = testerchain.wait_for_receipt(txhash) @@ -79,9 +87,11 @@ def test_revoke_policy(agent, policy_meta): assert receipt['logs'][0]['address'] == agent.contract_address -def test_calculate_refund(agent, policy_meta): - testerchain = agent.blockchain - miner_agent = agent.miner_agent +@pytest.mark.usefixtures('blockchain_ursulas') +def test_calculate_refund(testerchain, three_agents, policy_meta): + token_agent, miner_agent, policy_agent = three_agents + agent = policy_agent + ursula = policy_meta.addresses[-1] testerchain.time_travel(hours=9) _txhash = miner_agent.confirm_activity(node_address=ursula) @@ -92,8 +102,10 @@ def test_calculate_refund(agent, policy_meta): @pytest.mark.usefixtures('blockchain_ursulas') -def test_collect_refund(agent, policy_meta): - testerchain = agent.blockchain +def test_collect_refund(testerchain, three_agents, policy_meta): + token_agent, miner_agent, policy_agent = three_agents + agent = policy_agent + testerchain.time_travel(hours=9) txhash = agent.collect_refund(policy_id=policy_meta.policy_id, author_address=policy_meta.author) testerchain = agent.blockchain @@ -102,10 +114,10 @@ def test_collect_refund(agent, policy_meta): assert receipt['logs'][0]['address'] == agent.contract_address -def test_collect_policy_reward(agent, policy_meta): - testerchain = agent.blockchain - miner_agent = agent.miner_agent - token_agent = agent.token_agent +@pytest.mark.usefixtures('blockchain_ursulas') +def test_collect_policy_reward(testerchain, three_agents, policy_meta): + token_agent, miner_agent, policy_agent = three_agents + agent = policy_agent ursula = policy_meta.addresses[-1] old_eth_balance = token_agent.blockchain.interface.w3.eth.getBalance(ursula) diff --git a/tests/blockchain/eth/entities/agents/test_token_agent.py b/tests/blockchain/eth/entities/agents/test_token_agent.py index 68f704851..fb79b3c94 100644 --- a/tests/blockchain/eth/entities/agents/test_token_agent.py +++ b/tests/blockchain/eth/entities/agents/test_token_agent.py @@ -34,7 +34,7 @@ def test_token_properties(agent): assert len(agent.contract_address) == 42 assert agent.contract.address == agent.contract_address assert agent.contract_name == NucypherTokenAgent.registry_contract_name - assert agent._upgradeable is False + assert not agent._proxy_name # not upgradeable def test_get_balance(agent): diff --git a/tests/blockchain/eth/entities/agents/test_user_escrow_agent.py b/tests/blockchain/eth/entities/agents/test_user_escrow_agent.py index c2c57c073..511514cec 100644 --- a/tests/blockchain/eth/entities/agents/test_user_escrow_agent.py +++ b/tests/blockchain/eth/entities/agents/test_user_escrow_agent.py @@ -1,92 +1,143 @@ import os +import maya import pytest from eth_utils import is_checksum_address from nucypher.blockchain.eth.agents import UserEscrowAgent -from nucypher.blockchain.eth.constants import MIN_ALLOWED_LOCKED, MIN_LOCKED_PERIODS +from nucypher.blockchain.eth.constants import MIN_ALLOWED_LOCKED, MIN_LOCKED_PERIODS, MAX_MINTING_PERIODS, \ + DISPATCHER_SECRET_LENGTH from nucypher.blockchain.eth.deployers import UserEscrowDeployer, UserEscrowProxyDeployer +from nucypher.blockchain.eth.registry import InMemoryAllocationRegistry + +TEST_ALLOCATION = MIN_ALLOWED_LOCKED*10 +registry = InMemoryAllocationRegistry() +@pytest.mark.usefixtures("three_agents") @pytest.fixture(scope='module') def agent(three_agents, testerchain): - deployer, someone, *everybody_else = testerchain.interface.w3.eth.accounts - token_agent, miner_agent, policy_agent = three_agents + deployer_address, beneficiary_address, *everybody_else = testerchain.interface.w3.eth.accounts - proxy_deployer = UserEscrowProxyDeployer(deployer_address=deployer, - policy_agent=policy_agent, - secret_hash=os.urandom(32)) + # Proxy + proxy_secret = os.urandom(DISPATCHER_SECRET_LENGTH) + proxy_deployer = UserEscrowProxyDeployer(deployer_address=deployer_address, + secret_hash=proxy_secret) assert proxy_deployer.arm() proxy_deployer.deploy() - escrow_deployer = UserEscrowDeployer(policy_agent=policy_agent, deployer_address=deployer) + # Escrow + escrow_deployer = UserEscrowDeployer(deployer_address=deployer_address, + allocation_registry=registry) assert escrow_deployer.arm() + _txhash = escrow_deployer.deploy() - _txhash = escrow_deployer.deploy(beneficiary_address=someone) - + escrow_deployer.initial_deposit(value=TEST_ALLOCATION, duration=MIN_LOCKED_PERIODS*10) + assert escrow_deployer.principal_contract.functions.getLockedTokens().call() == TEST_ALLOCATION + escrow_deployer.assign_beneficiary(beneficiary_address=beneficiary_address) + escrow_deployer.enroll_principal_contract() + assert escrow_deployer.principal_contract.functions.getLockedTokens().call() == TEST_ALLOCATION _agent = escrow_deployer.make_agent() - # user_escrow_agent = UserEscrowAgent(policy_agent=policy_agent, beneficiary=someone) - return _agent + + _direct_agent = UserEscrowAgent(blockchain=testerchain, + allocation_registry=registry, + beneficiary=beneficiary_address) + + assert _direct_agent == _agent + assert _direct_agent.contract.abi == _agent.contract.abi + assert _direct_agent.contract.address == _agent.contract.address + assert _agent.principal_contract.address == escrow_deployer.principal_contract.address + assert _agent.principal_contract.abi == escrow_deployer.principal_contract.abi + assert _direct_agent.contract.abi == escrow_deployer.principal_contract.abi + assert _direct_agent.contract.address == escrow_deployer.principal_contract.address + + yield _agent + testerchain.interface.registry.clear() -def test_user_escrow_agent_represents_beneficiary(agent): +def test_user_escrow_agent_represents_beneficiary(agent, three_agents): + token_agent, miner_agent, policy_agent = three_agents + + # Name assert agent.registry_contract_name == UserEscrowAgent.registry_contract_name - assert agent != agent.miner_agent, "UserEscrow Agent is connected to the MinerEscrow's contract" - assert agent.contract_address != agent.miner_agent.contract_address, "UserEscrow and MinerEscrow agents represent the same contract" + + # Not Equal to MinerAgent + assert agent != miner_agent, "UserEscrow Agent is connected to the MinerEscrow's contract" + assert agent.contract_address != miner_agent.contract_address, "UserEscrow and MinerEscrow agents represent the same contract" + + # Proxy Target Accuracy + assert agent.principal_contract.address == agent.proxy_contract.address + assert agent.principal_contract.abi != agent.proxy_contract.abi + + assert agent.principal_contract.address == agent.contract.address + assert agent.principal_contract.abi == agent.contract.abi -def test_read_beneficiary(agent): - beneficiary_address = agent.beneficiary - assert is_checksum_address(beneficiary_address) +def test_read_beneficiary(testerchain, agent): + deployer_address, beneficiary_address, *everybody_else = testerchain.interface.w3.eth.accounts + benficiary = agent.beneficiary + assert benficiary == beneficiary_address + assert is_checksum_address(benficiary) -def test_read_end_timestamp(agent): - end_timestamp = agent.end_timestamp - assert end_timestamp - - -def test_read_allocation(agent): +def test_read_allocation(agent, three_agents): + token_agent, miner_agent, policy_agent = three_agents + balance = token_agent.get_balance(address=agent.principal_contract.address) + assert balance == TEST_ALLOCATION allocation = agent.allocation - assert allocation > 0 < MIN_ALLOWED_LOCKED + assert allocation > 0 + assert allocation == TEST_ALLOCATION -def test_initial_deposit(agent): - testerchain = agent.blockchain - origin, someone, *everybody_else = testerchain.interface.w3.eth.accounts - token_agent = agent.token_agent - - _txhash = token_agent.transfer(amount=MIN_ALLOWED_LOCKED * 2, # Transfer - target_address=someone, - sender_address=origin) - - _txhash = token_agent.approve_transfer(amount=MIN_ALLOWED_LOCKED, # Approve - target_address=agent.contract_address, - sender_address=someone) - - # - # Deposit - # - txhash = agent.deposit_tokens(amount=MIN_ALLOWED_LOCKED, - lock_periods=MIN_LOCKED_PERIODS, - sender_address=someone) - - # Check the receipt for the contract address success code - receipt = testerchain.wait_for_receipt(txhash) - assert receipt['status'] == 1, "Transaction Rejected" - assert receipt['logs'][1]['address'] == agent.contract_address +def test_read_locked_tokens(agent, three_agents): + token_agent, miner_agent, policy_agent = three_agents + balance = token_agent.get_balance(address=agent.principal_contract.address) + assert balance == TEST_ALLOCATION + assert agent.principal_contract.functions.getLockedTokens().call() == TEST_ALLOCATION + assert agent.locked_tokens == TEST_ALLOCATION -def test_withdraw_tokens(agent): - assert False +@pytest.mark.usesfixtures("three_agents") +def test_read_timestamp(agent): + timestamp = agent.end_timestamp + end_locktime = maya.MayaDT(timestamp) + assert end_locktime.slang_time() + now = maya.now() + assert now < end_locktime, '{} is not in the future!'.format(end_locktime.slang_date()) -def test_withdraw_eth(agent): - assert False +@pytest.mark.usesfixtures("three_agents") +def test_deposit_as_miner(testerchain, agent, three_agents): + old_locked_value = agent.principal_contract.functions.lockedValue().call() + txhash = agent.deposit_as_miner(value=MIN_ALLOWED_LOCKED, periods=MIN_LOCKED_PERIODS) + assert txhash + new_locked_value = agent.principal_contract.functions.lockedValue().call() + assert new_locked_value > old_locked_value -def test_transfer_as_miner(agent): - assert False +@pytest.mark.usesfixtures("three_agents") +def test_withdraw_as_miner(agent, testerchain): + testerchain.time_travel(periods=1) + + txhash = agent.withdraw_as_miner(value=MIN_ALLOWED_LOCKED) + assert txhash -def test_withdraw_as_miner(agent): - assert False +def test_withdraw_eth(testerchain, agent, three_agents): + token_agent, __proxy_contract, policy_agent = three_agents + deployer_address, beneficiary_address, *everybody_else = testerchain.interface.w3.eth.accounts + old_balance = testerchain.interface.w3.eth.getBalance(account=beneficiary_address) + txhash = agent.withdraw_eth() + assert txhash + new_balance = testerchain.interface.w3.eth.getBalance(account=beneficiary_address) + assert new_balance > old_balance + + +def test_withdraw_tokens(testerchain, agent, three_agents): + token_agent, miner_agent, policy_agent = three_agents + deployer_address, beneficiary_address, *everybody_else = testerchain.interface.w3.eth.accounts + + old_balance = token_agent.get_balance(address=beneficiary_address) + agent.withdraw_tokens(value=agent.allocation) + new_balance = token_agent.get_balance(address=beneficiary_address) + assert new_balance > old_balance diff --git a/tests/blockchain/eth/entities/deployers/test_interdeployer_integration.py b/tests/blockchain/eth/entities/deployers/test_interdeployer_integration.py index 0b29e8573..6d167d1a9 100644 --- a/tests/blockchain/eth/entities/deployers/test_interdeployer_integration.py +++ b/tests/blockchain/eth/entities/deployers/test_interdeployer_integration.py @@ -47,7 +47,7 @@ def test_deploy_ethereum_contracts(testerchain): # miners_escrow_secret = os.urandom(DISPATCHER_SECRET_LENGTH) miner_escrow_deployer = MinerEscrowDeployer( - token_agent=token_agent, + blockchain=testerchain, deployer_address=origin, secret_hash=testerchain.interface.w3.sha3(miners_escrow_secret)) assert miner_escrow_deployer.deployer_address == origin @@ -64,7 +64,7 @@ def test_deploy_ethereum_contracts(testerchain): assert miner_escrow_deployer.is_deployed assert len(miner_escrow_deployer.contract_address) == 42 - miner_agent = MinerAgent(token_agent=token_agent) + miner_agent = MinerAgent(blockchain=testerchain) assert len(miner_agent.contract_address) == 42 assert miner_agent.contract_address == miner_escrow_deployer.contract_address @@ -78,7 +78,7 @@ def test_deploy_ethereum_contracts(testerchain): # policy_manager_secret = os.urandom(DISPATCHER_SECRET_LENGTH) policy_manager_deployer = PolicyManagerDeployer( - miner_agent=miner_agent, + blockchain=testerchain, deployer_address=origin, secret_hash=testerchain.interface.w3.sha3(policy_manager_secret)) assert policy_manager_deployer.deployer_address == origin diff --git a/tests/blockchain/eth/entities/deployers/test_miner_escrow_deployer.py b/tests/blockchain/eth/entities/deployers/test_miner_escrow_deployer.py index 7a4dd2964..810f253f2 100644 --- a/tests/blockchain/eth/entities/deployers/test_miner_escrow_deployer.py +++ b/tests/blockchain/eth/entities/deployers/test_miner_escrow_deployer.py @@ -13,11 +13,9 @@ def test_token_deployer_and_agent(testerchain): token_deployer = NucypherTokenDeployer(blockchain=testerchain, deployer_address=origin) token_deployer.arm() token_deployer.deploy() - token_agent = token_deployer.make_agent() secret_hash = os.urandom(32) deployer = MinerEscrowDeployer(blockchain=testerchain, - token_agent=token_agent, deployer_address=origin, secret_hash=secret_hash) @@ -41,7 +39,7 @@ def test_token_deployer_and_agent(testerchain): assert expected_token_supply == miner_agent.contract.functions.totalSupply().call() # Retrieve the token from the blockchain - same_miner_agent = MinerAgent(token_agent=token_agent) + same_miner_agent = MinerAgent() # Compare the contract address for equality assert miner_agent.contract_address == same_miner_agent.contract_address diff --git a/tests/blockchain/eth/entities/deployers/test_policy_manager_deployer.py b/tests/blockchain/eth/entities/deployers/test_policy_manager_deployer.py index b7c41ac33..ce86df7c9 100644 --- a/tests/blockchain/eth/entities/deployers/test_policy_manager_deployer.py +++ b/tests/blockchain/eth/entities/deployers/test_policy_manager_deployer.py @@ -16,7 +16,6 @@ def test_policy_manager_deployer(testerchain): miners_escrow_secret = os.urandom(DISPATCHER_SECRET_LENGTH) miner_escrow_deployer = MinerEscrowDeployer( - token_agent=token_agent, deployer_address=origin, secret_hash=testerchain.interface.w3.sha3(miners_escrow_secret)) miner_escrow_deployer.arm() @@ -26,7 +25,6 @@ def test_policy_manager_deployer(testerchain): policy_manager_secret = os.urandom(DISPATCHER_SECRET_LENGTH) deployer = PolicyManagerDeployer( - miner_agent=miner_agent, deployer_address=origin, secret_hash=testerchain.interface.w3.sha3(policy_manager_secret)) deployer.arm() @@ -42,7 +40,7 @@ def test_policy_manager_deployer(testerchain): policy_manager_contract = policy_agent.contract # Retrieve the token from the blockchain - some_policy_agent = PolicyAgent(miner_agent=miner_agent) + some_policy_agent = PolicyAgent() assert some_policy_agent.contract.address == policy_manager_contract.address # Compare the contract address for equality diff --git a/tests/blockchain/eth/entities/deployers/test_user_escrow_deployer.py b/tests/blockchain/eth/entities/deployers/test_user_escrow_deployer.py index 2fe9429f1..62f7f56d1 100644 --- a/tests/blockchain/eth/entities/deployers/test_user_escrow_deployer.py +++ b/tests/blockchain/eth/entities/deployers/test_user_escrow_deployer.py @@ -14,7 +14,6 @@ def user_escrow_proxy(three_agents): deployer, alice, bob, *all_yall = testerchain.interface.w3.eth.accounts escrow_proxy_deployer = UserEscrowProxyDeployer(deployer_address=deployer, - policy_agent=policy_agent, secret_hash=os.urandom(32)) assert escrow_proxy_deployer.arm() _escrow_proxy_deployments_txhashes = escrow_proxy_deployer.deploy() @@ -24,27 +23,16 @@ def user_escrow_proxy(three_agents): testerchain.sever_connection() -def test_user_escrow_proxy_deployer(): - pass - - +@pytest.mark.usesfixtures('three_agents') def test_user_escrow_deployer(three_agents, testerchain): - token_agent, miner_agent, policy_agent = three_agents deployer, alice, bob, *all_yall = testerchain.interface.w3.eth.accounts - # Depends on UserEscrowProxy Deployment (and thus Linker, too) - # with pytest.raises(testerchain.interface.registry.UnknownContract): - # deployer = UserEscrowDeployer(policy_agent=policy_agent, - # deployer_address=deployer) - escrow_proxy_deployer = UserEscrowProxyDeployer(deployer_address=deployer, - policy_agent=policy_agent, secret_hash=os.urandom(32)) assert escrow_proxy_deployer.arm() _escrow_proxy_deployments_txhashes = escrow_proxy_deployer.deploy() - deployer = UserEscrowDeployer(policy_agent=policy_agent, - deployer_address=deployer) + deployer = UserEscrowDeployer(deployer_address=deployer) assert deployer.arm() deployment_txhashes = deployer.deploy() @@ -61,8 +49,7 @@ def test_deploy_multiple(three_agents, testerchain): number_of_deployments = 100 for index in range(number_of_deployments): - deployer = UserEscrowDeployer(policy_agent=policy_agent, - deployer_address=deployer) + deployer = UserEscrowDeployer(deployer_address=deployer) assert deployer.arm() deployment_txhashes = deployer.deploy() diff --git a/tests/fixtures.py b/tests/fixtures.py index 72c089dd0..90902c369 100644 --- a/tests/fixtures.py +++ b/tests/fixtures.py @@ -116,7 +116,6 @@ def ursula_decentralized_test_config(three_agents): is_me=True, start_learning_now=False, abort_on_learning_error=True, - miner_agent=miner_agent, federated_only=False, network_middleware=MockRestMiddleware(), import_seed_registry=False, @@ -155,7 +154,6 @@ def alice_blockchain_test_config(blockchain_ursulas, three_agents): checksum_address=alice_address, passphrase=TEST_URSULA_INSECURE_DEVELOPMENT_PASSWORD, network_middleware=MockRestMiddleware(), - policy_agent=policy_agent, known_nodes=blockchain_ursulas, abort_on_learning_error=True, import_seed_registry=False, @@ -382,7 +380,6 @@ def three_agents(testerchain): miners_escrow_secret = os.urandom(DISPATCHER_SECRET_LENGTH) miner_escrow_deployer = MinerEscrowDeployer( - token_agent=token_agent, deployer_address=origin, secret_hash=testerchain.interface.w3.sha3(miners_escrow_secret)) miner_escrow_deployer.arm() @@ -392,7 +389,6 @@ def three_agents(testerchain): policy_manager_secret = os.urandom(DISPATCHER_SECRET_LENGTH) policy_manager_deployer = PolicyManagerDeployer( - miner_agent=miner_agent, deployer_address=origin, secret_hash=testerchain.interface.w3.sha3(policy_manager_secret)) policy_manager_deployer.arm()