def test_create_fail_invalid_abi(testnet): with pytest.raises( erc20tokensdk.SdkConfigurationError, match="invalid token contract abi: 'abi' is not a list"): erc20tokensdk.SDK(provider_endpoint_uri=testnet.provider_endpoint_uri, contract_address=testnet.address) with pytest.raises( erc20tokensdk.SdkConfigurationError, match="invalid token contract abi: 'abi' is not a list"): erc20tokensdk.SDK(provider_endpoint_uri=testnet.provider_endpoint_uri, contract_address=testnet.address, contract_abi={}) with pytest.raises( erc20tokensdk.SdkConfigurationError, match="invalid token contract abi: 'abi' is not a list"): erc20tokensdk.SDK(provider_endpoint_uri=testnet.provider_endpoint_uri, contract_address=testnet.address, contract_abi='bad') with pytest.raises( erc20tokensdk.SdkConfigurationError, match="invalid token contract abi: The elements of 'abi' " "are not all dictionaries"): erc20tokensdk.SDK(provider_endpoint_uri=testnet.provider_endpoint_uri, contract_address=testnet.address, contract_abi=['bad'])
def test_create_fail_empty_endpoint(): with pytest.raises( erc20tokensdk.SdkConfigurationError, match='either provider or provider endpoint must be provided'): erc20tokensdk.SDK() with pytest.raises( erc20tokensdk.SdkConfigurationError, match='either provider or provider endpoint must be provided'): erc20tokensdk.SDK(provider_endpoint_uri='')
def test_create_fail_keyfile(testnet): # file missing with pytest.raises( erc20tokensdk.SdkConfigurationError, match= "cannot load keyfile: \[Errno 2\] No such file or directory: 'missing.json'" ): erc20tokensdk.SDK(provider_endpoint_uri=testnet.provider_endpoint_uri, contract_address=testnet.address, contract_abi=testnet.contract_abi, keyfile='missing.json') # not json with open(TEST_KEYFILE, 'w+') as f: f.write('not json') with pytest.raises( erc20tokensdk.SdkConfigurationError, match="cannot load keyfile: No JSON object could be decoded"): erc20tokensdk.SDK(provider_endpoint_uri=testnet.provider_endpoint_uri, contract_address=testnet.address, contract_abi=testnet.contract_abi, keyfile=TEST_KEYFILE) # json, but invalid format with open(TEST_KEYFILE, 'w+') as f: f.write('[]') with pytest.raises(erc20tokensdk.SdkConfigurationError, match="cannot load keyfile: invalid keyfile format"): erc20tokensdk.SDK(provider_endpoint_uri=testnet.provider_endpoint_uri, contract_address=testnet.address, contract_abi=testnet.contract_abi, keyfile=TEST_KEYFILE) os.remove(TEST_KEYFILE) # good keyfile, wrong password erc20tokensdk.create_keyfile(testnet.private_key, TEST_PASSWORD, TEST_KEYFILE) with pytest.raises( erc20tokensdk.SdkConfigurationError, match='cannot load keyfile: MAC mismatch. Password incorrect?'): erc20tokensdk.SDK(provider_endpoint_uri=testnet.provider_endpoint_uri, contract_address=testnet.address, contract_abi=testnet.contract_abi, keyfile=TEST_KEYFILE, password='******') os.remove(TEST_KEYFILE)
def test_create_fail_invalid_contract_address(testnet): with pytest.raises( erc20tokensdk.SdkConfigurationError, match="invalid token contract address: '' is not an address"): erc20tokensdk.SDK(provider_endpoint_uri=testnet.provider_endpoint_uri) with pytest.raises( erc20tokensdk.SdkConfigurationError, match="invalid token contract address: '0xbad' is not an address"): erc20tokensdk.SDK(provider_endpoint_uri=testnet.provider_endpoint_uri, contract_address='0xbad') with pytest.raises( erc20tokensdk.SdkConfigurationError, match= "invalid token contract address: '0x4c6527c2BEB032D46cfe0648072cAb641cA0aA81' " "has an invalid EIP55 checksum"): erc20tokensdk.SDK( provider_endpoint_uri=testnet.provider_endpoint_uri, contract_address='0x4c6527c2BEB032D46cfe0648072cAb641cA0aA81')
def test_create_fail_bad_private_key(testnet): with pytest.raises( erc20tokensdk.SdkConfigurationError, match='cannot load private key: Unexpected private key format.' ' Must be length 32 byte string'): erc20tokensdk.SDK(provider_endpoint_uri=testnet.provider_endpoint_uri, contract_address=testnet.address, contract_abi=testnet.contract_abi, private_key='bad')
def test_create_with_gas_params(testnet): sdk = erc20tokensdk.SDK( provider_endpoint_uri=testnet.provider_endpoint_uri, contract_address=testnet.address, contract_abi=testnet.contract_abi, private_key=testnet.private_key, gas_price=10.1, gas_limit=10000) assert sdk assert sdk._tx_manager.gas_price == 10100000000 assert sdk._tx_manager.gas_limit == 10000
def test_create_with_private_key(testnet): sdk = erc20tokensdk.SDK( provider_endpoint_uri=testnet.provider_endpoint_uri, contract_address=testnet.address, contract_abi=testnet.contract_abi, private_key=testnet.private_key) assert sdk assert sdk.web3 assert sdk.token_contract assert sdk.private_key == testnet.private_key assert sdk.get_address() == testnet.address
def test_create_invalid_gas_params(testnet): with pytest.raises(erc20tokensdk.SdkConfigurationError, match='gas price must be either integer of float'): erc20tokensdk.SDK(provider_endpoint_uri=testnet.provider_endpoint_uri, contract_address=testnet.address, contract_abi=testnet.contract_abi, gas_price='bad') with pytest.raises(erc20tokensdk.SdkConfigurationError, match='gas price must be either integer of float'): erc20tokensdk.SDK(provider_endpoint_uri=testnet.provider_endpoint_uri, contract_address=testnet.address, contract_abi=testnet.contract_abi, gas_price='0x123') with pytest.raises(erc20tokensdk.SdkConfigurationError, match='gas limit must be integer'): erc20tokensdk.SDK(provider_endpoint_uri=testnet.provider_endpoint_uri, contract_address=testnet.address, contract_abi=testnet.contract_abi, gas_price=10, gas_limit='bad')
def test_sdk(testnet): sdk = erc20tokensdk.SDK( provider_endpoint_uri=testnet.provider_endpoint_uri, private_key=testnet.private_key, contract_address=testnet.contract_address, contract_abi=testnet.contract_abi) assert sdk assert sdk.web3 assert sdk.token_contract assert sdk.private_key == testnet.private_key assert sdk.get_address() == testnet.address assert sdk._tx_manager.gas_price == sdk.web3.eth.gasPrice return sdk
def test_create_with_keyfile(testnet): erc20tokensdk.create_keyfile(testnet.private_key, TEST_PASSWORD, TEST_KEYFILE) sdk = erc20tokensdk.SDK( provider_endpoint_uri=testnet.provider_endpoint_uri, contract_address=testnet.address, contract_abi=testnet.contract_abi, keyfile=TEST_KEYFILE, password=TEST_PASSWORD) assert sdk assert sdk.web3 assert sdk.token_contract assert sdk.private_key == testnet.private_key assert sdk.get_address() == testnet.address os.remove(TEST_KEYFILE)
def test_sdk_not_configured(testnet): sdk = erc20tokensdk.SDK( provider_endpoint_uri=testnet.provider_endpoint_uri, contract_address=testnet.address, contract_abi=testnet.contract_abi) with pytest.raises(erc20tokensdk.SdkNotConfiguredError, match='private key not configured'): sdk.get_address() with pytest.raises(erc20tokensdk.SdkNotConfiguredError, match='private key not configured'): sdk.get_ether_balance() with pytest.raises(erc20tokensdk.SdkNotConfiguredError, match='private key not configured'): sdk.get_token_balance() with pytest.raises(erc20tokensdk.SdkNotConfiguredError, match='private key not configured'): sdk.send_ether('address', 100) with pytest.raises(erc20tokensdk.SdkNotConfiguredError, match='private key not configured'): sdk.send_tokens('address', 100)
def test_create_fail_bad_endpoint(testnet): with pytest.raises(erc20tokensdk.SdkConfigurationError, match='cannot connect to provider endpoint'): erc20tokensdk.SDK(provider_endpoint_uri='bad', contract_address=testnet.address, contract_abi=testnet.contract_abi)