diff --git a/python/erc20_demurrage_token/unittest/__init__.py b/python/erc20_demurrage_token/unittest/__init__.py new file mode 100644 index 0000000..9b5ed21 --- /dev/null +++ b/python/erc20_demurrage_token/unittest/__init__.py @@ -0,0 +1 @@ +from .base import * diff --git a/python/tests/base.py b/python/erc20_demurrage_token/unittest/base.py similarity index 74% rename from python/tests/base.py rename to python/erc20_demurrage_token/unittest/base.py index 2d39353..39aafe8 100644 --- a/python/tests/base.py +++ b/python/erc20_demurrage_token/unittest/base.py @@ -12,6 +12,7 @@ from chainlib.eth.block import ( block_by_number, ) from chainlib.eth.nonce import RPCNonceOracle +from chainlib.eth.constant import ZERO_ADDRESS # local imports from erc20_demurrage_token import ( @@ -29,64 +30,93 @@ TAX_LEVEL = int(10000 * 2) # 2% PERIOD = 10 -class TestDemurrage(EthTesterCase): - - def setUp(self): - super(TestDemurrage, self).setUp() +class TestTokenDeploy: + def __init__(self, rpc, token_symbol='FOO', token_name='Foo Token', sink_address=ZERO_ADDRESS, supply=10**12): self.tax_level = TAX_LEVEL self.period_seconds = PERIOD * 60 - nonce_oracle = RPCNonceOracle(self.accounts[0], self.rpc) self.settings = DemurrageTokenSettings() - self.settings.name = 'Foo Token' - self.settings.symbol = 'FOO' + self.settings.name = token_name + self.settings.symbol = token_symbol self.settings.decimals = 6 self.settings.demurrage_level = TAX_LEVEL * (10 ** 32) self.settings.period_minutes = PERIOD - self.settings.sink_address = self.accounts[9] + self.settings.sink_address = sink_address self.sink_address = self.settings.sink_address o = block_latest() - self.start_block = self.rpc.do(o) + self.start_block = rpc.do(o) o = block_by_number(self.start_block, include_tx=False) - r = self.rpc.do(o) + r = rpc.do(o) try: self.start_time = int(r['timestamp'], 16) except TypeError: self.start_time = int(r['timestamp']) - self.default_supply = 10 ** 12 + self.default_supply = supply self.default_supply_cap = int(self.default_supply * 10) - def deploy(self, interface, mode): + def deploy(self, rpc, deployer_address, interface, mode, supply_cap=10**12): tx_hash = None o = None + logg.debug('mode {} {}'.format(mode, self.settings)) + self.mode = mode if mode == 'MultiNocap': - (tx_hash, o) = interface.constructor(self.accounts[0], self.settings, redistribute=True, cap=0) + (tx_hash, o) = interface.constructor(deployer_address, self.settings, redistribute=True, cap=0) elif mode == 'SingleNocap': - (tx_hash, o) = interface.constructor(self.accounts[0], self.settings, redistribute=False, cap=0) + (tx_hash, o) = interface.constructor(deployer_address, self.settings, redistribute=False, cap=0) elif mode == 'MultiCap': - (tx_hash, o) = interface.constructor(self.accounts[0], self.settings, redistribute=True, cap=self.default_supply_cap) + (tx_hash, o) = interface.constructor(deployer_address, self.settings, redistribute=True, cap=supply_cap) elif mode == 'SingleCap': - (tx_hash, o) = interface.constructor(self.accounts[0], self.settings, redistribute=False, cap=self.default_supply_cap) + (tx_hash, o) = interface.constructor(deployer_address, self.settings, redistribute=False, cap=supply_cap) else: - raise ValueError('Invalid mode "{}", valid are {}'.format(self.mode, DemurrageToken.valid_modes)) + raise ValueError('Invalid mode "{}", valid are {}'.format(mode, DemurrageToken.valid_modes)) - r = self.rpc.do(o) + r = rpc.do(o) o = receipt(tx_hash) - r = self.rpc.do(o) - self.assertEqual(r['status'], 1) + r = rpc.do(o) + assert r['status'] == 1 self.start_block = r['block_number'] self.address = r['contract_address'] o = block_by_number(r['block_number']) - r = self.rpc.do(o) + r = rpc.do(o) self.start_time = r['timestamp'] + return self.address + + +class TestDemurrage(EthTesterCase): + + def setUp(self): + super(TestDemurrage, self).setUp() +# token_deploy = TestTokenDeploy() +# self.settings = token_deploy.settings +# self.sink_address = token_deploy.sink_address +# self.start_block = token_deploy.start_block +# self.start_time = token_deploy.start_time +# self.default_supply = self.default_supply +# self.default_supply_cap = self.default_supply_cap + self.deployer = TestTokenDeploy(self.rpc) + self.default_supply = self.deployer.default_supply + self.default_supply_cap = self.deployer.default_supply_cap + self.start_block = None + self.address = None + self.start_time = None + + + def deploy(self, interface, mode): + self.address = self.deployer.deploy(self.rpc, self.accounts[0], interface, mode, supply_cap=self.default_supply_cap) + self.start_block = self.deployer.start_block + self.start_time = self.deployer.start_time + self.tax_level = self.deployer.tax_level + self.period_seconds = self.deployer.period_seconds + self.sink_address = self.deployer.sink_address + logg.debug('contract address {} start block {} start time {}'.format(self.address, self.start_block, self.start_time)) diff --git a/python/run_tests.sh b/python/run_tests.sh index 9bea348..581a59b 100644 --- a/python/run_tests.sh +++ b/python/run_tests.sh @@ -1,5 +1,6 @@ #!/bin/bash +set -x set -e export PYTHONPATH=. @@ -31,3 +32,4 @@ done #done set +e +set +x diff --git a/python/tests/test_amounts.py b/python/tests/test_amounts.py index 9b1a1a5..bec18f5 100644 --- a/python/tests/test_amounts.py +++ b/python/tests/test_amounts.py @@ -13,7 +13,7 @@ from chainlib.eth.tx import receipt from erc20_demurrage_token import DemurrageToken # test imports -from tests.base import TestDemurrageDefault +from erc20_demurrage_token.unittest.base import TestDemurrageDefault logging.basicConfig(level=logging.DEBUG) logg = logging.getLogger() diff --git a/python/tests/test_basic.py b/python/tests/test_basic.py index 5476d38..35ca947 100644 --- a/python/tests/test_basic.py +++ b/python/tests/test_basic.py @@ -18,7 +18,7 @@ from chainlib.eth.block import ( from erc20_demurrage_token import DemurrageToken # test imports -from tests.base import TestDemurrageDefault +from erc20_demurrage_token.unittest.base import TestDemurrageDefault logging.basicConfig(level=logging.DEBUG) logg = logging.getLogger() diff --git a/python/tests/test_cap.py b/python/tests/test_cap.py index 745479b..4f6962a 100644 --- a/python/tests/test_cap.py +++ b/python/tests/test_cap.py @@ -18,7 +18,7 @@ from hexathon import ( from erc20_demurrage_token import DemurrageToken # test imports -from tests.base import TestDemurrageCap +from erc20_demurrage_token.unittest.base import TestDemurrageCap logging.basicConfig(level=logging.DEBUG) logg = logging.getLogger() diff --git a/python/tests/test_demurrage_ext.py b/python/tests/test_demurrage_ext.py index 2525f59..b73ab49 100644 --- a/python/tests/test_demurrage_ext.py +++ b/python/tests/test_demurrage_ext.py @@ -10,7 +10,7 @@ from erc20_demurrage_token import DemurrageToken from erc20_demurrage_token.demurrage import DemurrageCalculator # test imports -from tests.base import TestDemurrage +from erc20_demurrage_token.unittest.base import TestDemurrage class TestEmulate(TestDemurrage): diff --git a/python/tests/test_growth.py b/python/tests/test_growth.py index 43be79f..9412e90 100644 --- a/python/tests/test_growth.py +++ b/python/tests/test_growth.py @@ -18,7 +18,7 @@ from chainlib.eth.block import ( from erc20_demurrage_token import DemurrageToken # test imports -from tests.base import TestDemurrageDefault +from erc20_demurrage_token.unittest.base import TestDemurrageDefault logging.basicConfig(level=logging.DEBUG) logg = logging.getLogger() diff --git a/python/tests/test_period.py b/python/tests/test_period.py index cf08b8b..7fb3898 100644 --- a/python/tests/test_period.py +++ b/python/tests/test_period.py @@ -13,7 +13,7 @@ from chainlib.eth.tx import receipt from erc20_demurrage_token import DemurrageToken # test imports -from tests.base import TestDemurrageDefault +from erc20_demurrage_token.unittest.base import TestDemurrageDefault logging.basicConfig(level=logging.DEBUG) logg = logging.getLogger() diff --git a/python/tests/test_redistribution.py b/python/tests/test_redistribution.py index 607e832..4bc6d16 100644 --- a/python/tests/test_redistribution.py +++ b/python/tests/test_redistribution.py @@ -22,7 +22,7 @@ from hexathon import ( from erc20_demurrage_token import DemurrageToken # test imports -from tests.base import TestDemurrageDefault +from erc20_demurrage_token.unittest.base import TestDemurrageDefault logging.basicConfig(level=logging.DEBUG) logg = logging.getLogger() diff --git a/python/tests/test_redistribution_unit.py b/python/tests/test_redistribution_unit.py index e88643a..8a2694d 100644 --- a/python/tests/test_redistribution_unit.py +++ b/python/tests/test_redistribution_unit.py @@ -21,7 +21,7 @@ from hexathon import ( from erc20_demurrage_token import DemurrageToken # test imports -from tests.base import TestDemurrageUnit +from erc20_demurrage_token.unittest.base import TestDemurrageUnit logging.basicConfig(level=logging.DEBUG) logg = logging.getLogger() diff --git a/python/tests/test_remainder.py b/python/tests/test_remainder.py index 33a1b47..2155520 100644 --- a/python/tests/test_remainder.py +++ b/python/tests/test_remainder.py @@ -16,7 +16,7 @@ import eth_tester from erc20_demurrage_token import DemurrageToken # test imports -from tests.base import TestDemurrageDefault +from erc20_demurrage_token.unittest.base import TestDemurrageDefault logging.basicConfig(level=logging.DEBUG) logg = logging.getLogger() diff --git a/python/tests/test_single.py b/python/tests/test_single.py index 9636e2f..b1250e4 100644 --- a/python/tests/test_single.py +++ b/python/tests/test_single.py @@ -18,7 +18,7 @@ from hexathon import ( from erc20_demurrage_token import DemurrageToken # test imports -from tests.base import TestDemurrageSingle +from erc20_demurrage_token.unittest.base import TestDemurrageSingle logging.basicConfig(level=logging.DEBUG) logg = logging.getLogger()