mirror of https://github.com/nucypher/nucypher.git
Add tests for Registrar and the utility functions
parent
a60032a097
commit
c490445f8b
|
@ -0,0 +1,83 @@
|
||||||
|
import json
|
||||||
|
import pytest
|
||||||
|
|
||||||
|
from nkms.blockchain.eth.interfaces import (
|
||||||
|
Registrar, _write_registrar_file, _read_registrar_file
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def test_registrar_read_write(tempfile_path):
|
||||||
|
# Test that the file is initally empty and returns an empty dict.
|
||||||
|
should_be_empty = _read_registrar_data(tempfile_path)
|
||||||
|
assert should_be_empty == {}
|
||||||
|
|
||||||
|
# Test that data can be written and read
|
||||||
|
test_data = {'test': 'foobar'}
|
||||||
|
_write_registrar_file(test_data, tempfile_path)
|
||||||
|
out_data = _read_registrar_file(tempfile_path)
|
||||||
|
assert test_data == out_data
|
||||||
|
|
||||||
|
# Test overwrite
|
||||||
|
new_test_data = {'new_test': 'foobar'}
|
||||||
|
_write_registrar_file(new_test_data, tempfile_path)
|
||||||
|
out_data = _read_registrar_file(tempfile_path)
|
||||||
|
assert out_data != test_data and new_test_data == out_data
|
||||||
|
|
||||||
|
|
||||||
|
def test_registrar_object(tempfile_path):
|
||||||
|
# Tests everything is as it should be when initially created
|
||||||
|
test_registrar = Registrar(registrar_filepath=tempfile_path)
|
||||||
|
assert test_registrar._chain_name == 'tester'
|
||||||
|
|
||||||
|
should_be_empty = _read_registrar_file(tempfile_path)
|
||||||
|
assert should_be_empty == {}
|
||||||
|
|
||||||
|
should_also_be_empty = Registrar.get_chains(tempfile_path)
|
||||||
|
assert should_also_be_empty = {}
|
||||||
|
|
||||||
|
# Test contract enrollment and get_chain_data
|
||||||
|
test_name = 'test_contract'
|
||||||
|
test_addr = '0xDEADBEEF'
|
||||||
|
test_abi = ['fake', 'data']
|
||||||
|
test_registrar.enroll(test_name, test_addr, test_abi)
|
||||||
|
|
||||||
|
chain_data = test_registrar.get_chain_data()
|
||||||
|
assert test_name in chain_data
|
||||||
|
assert chain_data[test_name]['addr'] == test_addr
|
||||||
|
assert chain_data[test_name]['abi'] == test_abi
|
||||||
|
|
||||||
|
# Test get_contract_data via identifier
|
||||||
|
contract_by_name = test_registrar.get_contract_data(test_name)
|
||||||
|
assert contract_by_name['addr'] == test_addr
|
||||||
|
assert contract_by_name['abi'] == test_abi
|
||||||
|
|
||||||
|
contract_by_addr = test_registrar.get_contract_data(test_addr)
|
||||||
|
assert contract_by_addr['addr'] == test_addr
|
||||||
|
assert contract_by_addr['abi'] == test_abi
|
||||||
|
|
||||||
|
assert contract_by_name == contract_by_addr
|
||||||
|
|
||||||
|
# Test enroll with same contract name updates contract data
|
||||||
|
new_test_addr = '0xBEEFDEAD'
|
||||||
|
test_registrar.enroll(test_name, new_test_addr, test_abi)
|
||||||
|
|
||||||
|
test_contract = test_registrar.get_contract_data(test_name)
|
||||||
|
assert test_contract['addr'] == new_test_addr
|
||||||
|
assert test_contract['abi'] == test_abi
|
||||||
|
|
||||||
|
# Test new chain via new registrar object
|
||||||
|
new_chain_name = 'not_tester'
|
||||||
|
new_chain_registrar = Registrar(chain_name=new_chain_name, registrar_filepath=tempfile_path)
|
||||||
|
chains = Registrar.get_chains(tempfile_path)
|
||||||
|
assert new_chain_name not in chains # Not written yet, shouldn't be there
|
||||||
|
|
||||||
|
with pytest.raises(KeyError):
|
||||||
|
new_chain_registrar.get_chain_data()
|
||||||
|
|
||||||
|
new_chain_registrar.enroll(test_name, test_addr, test_abi)
|
||||||
|
updated_chains = Registrar.get_chains(tempfile_path)
|
||||||
|
assert new_chain_name in chains and 'tester' in chains
|
||||||
|
|
||||||
|
# Test NoKnownContract error
|
||||||
|
with pytest.raises(Registrar.NoKnownContract):
|
||||||
|
test_registrar.get_contract_data('This should not exist')
|
Loading…
Reference in New Issue