mirror of https://github.com/nucypher/nucypher.git
Tests deployment and agency components with layering in mind, (Includes UserEscrow) mirrors lower level tests with higher-level integration points
parent
ac2e6622ac
commit
4c01385416
|
@ -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)
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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):
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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()
|
||||
|
||||
|
|
|
@ -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()
|
||||
|
|
Loading…
Reference in New Issue