Skip to content

Commit 2d27c05

Browse files
voithcarver
authored andcommitted
added tests for ens to permit binary addresses
1 parent 5cd168f commit 2d27c05

File tree

5 files changed

+50
-16
lines changed

5 files changed

+50
-16
lines changed

ens/main.py

+5
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11

22
from eth_utils import (
3+
is_binary_address,
34
is_checksum_address,
45
to_checksum_address,
56
)
@@ -122,6 +123,8 @@ def setup_address(self, name, address=default, transact={}):
122123
address = None
123124
elif address is default:
124125
address = owner
126+
elif is_binary_address(address):
127+
address = to_checksum_address(address)
125128
elif not is_checksum_address(address):
126129
raise ValueError("You must supply the address in checksum format")
127130
if self.address(name) == address:
@@ -166,6 +169,8 @@ def setup_name(self, name, address=None, transact={}):
166169
address = self.owner(name)
167170
if not address:
168171
raise UnownedName("claim subdomain using setup_address() first")
172+
if is_binary_address(address):
173+
address = to_checksum_address(address)
169174
if not is_checksum_address(address):
170175
raise ValueError("You must supply the address in checksum format")
171176
self._assert_control(address, name)

tests/ens/conftest.py

+16
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@
55
from eth_tester import (
66
EthereumTester,
77
)
8+
from eth_utils import (
9+
to_bytes,
10+
)
811

912
from ens import ENS
1013
from ens.contract_data import (
@@ -28,6 +31,9 @@
2831
from web3.providers.eth_tester import (
2932
EthereumTesterProvider,
3033
)
34+
from web3.utils.toolz import (
35+
identity,
36+
)
3137

3238

3339
def bytes32(val):
@@ -222,3 +228,13 @@ def ens(ens_setup, mocker):
222228
mocker.patch('web3.middleware.stalecheck._isfresh', return_value=True)
223229
ens_setup.web3.eth.defaultAccount = ens_setup.web3.eth.coinbase
224230
return ens_setup
231+
232+
233+
@pytest.fixture(scope="module", params=[lambda x: to_bytes(hexstr=x), identity])
234+
def address_conversion_func(request):
235+
return request.param
236+
237+
238+
@pytest.fixture()
239+
def TEST_ADDRESS(address_conversion_func):
240+
return address_conversion_func("0x000000000000000000000000000000000000dEaD")

tests/ens/test_get_registry.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,8 @@ def test_resolver_empty(ens):
2626
),
2727
],
2828
)
29-
def test_reverse_domain(address, expected_reverse):
29+
def test_reverse_domain(address, expected_reverse, address_conversion_func):
30+
address = address_conversion_func(address)
3031
assert ENS.reverse_domain(address) == expected_reverse
3132

3233

tests/ens/test_setup_address.py

+20-12
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,11 @@
44
patch,
55
)
66

7+
from eth_utils import (
8+
is_same_address,
9+
to_bytes,
10+
)
11+
712
from ens.constants import (
813
EMPTY_ADDR_HEX,
914
)
@@ -12,12 +17,11 @@
1217
)
1318
from web3 import Web3
1419

20+
1521
'''
1622
API at: https://github.com/carver/ens.py/issues/2
1723
'''
1824

19-
TEST_ADDRESS = "0x000000000000000000000000000000000000dEaD"
20-
2125

2226
@pytest.mark.parametrize(
2327
'name, full_name, namehash_hex',
@@ -66,23 +70,23 @@
6670
),
6771
],
6872
)
69-
def test_set_address(ens, name, full_name, namehash_hex):
73+
def test_set_address(ens, name, full_name, namehash_hex, TEST_ADDRESS):
7074
assert ens.address(name) is None
7175
owner = ens.owner('tester')
7276

7377
ens.setup_address(name, TEST_ADDRESS)
74-
assert ens.address(name) == TEST_ADDRESS
78+
assert is_same_address(ens.address(name), TEST_ADDRESS)
7579

7680
# check that .eth is only appended if guess_tld is True
7781
namehash = Web3.toBytes(hexstr=namehash_hex)
7882
normal_name = ens.nameprep(full_name)
7983
if ens.nameprep(name) == normal_name:
80-
assert ens.address(name, guess_tld=False) == TEST_ADDRESS
84+
assert is_same_address(ens.address(name, guess_tld=False), TEST_ADDRESS)
8185
else:
8286
assert ens.address(name, guess_tld=False) is None
8387

8488
# check that the correct namehash is set:
85-
assert ens.resolver(normal_name).addr(namehash) == TEST_ADDRESS
89+
assert is_same_address(ens.resolver(normal_name).addr(namehash), TEST_ADDRESS)
8690

8791
# check that the correct owner is set:
8892
assert ens.owner(name) == owner
@@ -98,12 +102,12 @@ def test_set_address(ens, name, full_name, namehash_hex):
98102
('unicÖde.tester.eth', 'unicöde.tester.eth'),
99103
],
100104
)
101-
def test_set_address_equivalence(ens, name, equivalent):
105+
def test_set_address_equivalence(ens, name, equivalent, TEST_ADDRESS):
102106
assert ens.address(name) is None
103107

104108
ens.setup_address(name, TEST_ADDRESS)
105-
assert ens.address(name) == TEST_ADDRESS
106-
assert ens.address(equivalent) == TEST_ADDRESS
109+
assert is_same_address(ens.address(name), TEST_ADDRESS)
110+
assert is_same_address(ens.address(equivalent), TEST_ADDRESS)
107111

108112
ens.setup_address(name, None)
109113
assert ens.address(name) is None
@@ -112,7 +116,11 @@ def test_set_address_equivalence(ens, name, equivalent):
112116
@pytest.mark.parametrize(
113117
'set_address',
114118
[
115-
TEST_ADDRESS,
119+
# since the test uses getTransactionCount,
120+
# using a same address converted to bytes and hex will error with same count,
121+
# use two different addresses of each type (hex, bytes)
122+
"0x000000000000000000000000000000000000dEaD",
123+
to_bytes(hexstr="0x5B2063246F2191f18F2675ceDB8b28102e957458"),
116124
EMPTY_ADDR_HEX,
117125
None,
118126
'',
@@ -129,7 +137,7 @@ def test_set_address_noop(ens, set_address):
129137
assert eth.getTransactionCount(owner) == starting_transactions
130138

131139

132-
def test_set_address_unauthorized(ens):
140+
def test_set_address_unauthorized(ens, TEST_ADDRESS):
133141
with pytest.raises(UnauthorizedError):
134142
ens.setup_address('eth', TEST_ADDRESS)
135143

@@ -156,7 +164,7 @@ def getowner(name):
156164
(addr, ['abcdefg', 'bcdefgh'], 'cdefghi.eth')
157165

158166

159-
def test_set_resolver_leave_default(ens):
167+
def test_set_resolver_leave_default(ens, TEST_ADDRESS):
160168
owner = ens.owner('tester')
161169
ens.setup_address('leave-default-resolver.tester.eth', TEST_ADDRESS)
162170
eth = ens.web3.eth

tests/ens/test_setup_name.py

+7-3
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,15 @@
88
)
99
from web3 import Web3
1010

11+
1112
'''
1213
API at: https://github.com/carver/ens.py/issues/2
1314
'''
1415

15-
TEST_ADDRESS = "0x000000000000000000000000000000000000dEaD"
16+
17+
@pytest.fixture()
18+
def TEST_ADDRESS(address_conversion_func):
19+
return address_conversion_func("0x000000000000000000000000000000000000dEaD")
1620

1721

1822
@pytest.mark.parametrize(
@@ -86,7 +90,7 @@ def test_setup_name(ens, name, normalized_name, namehash_hex):
8690
assert not ens.address(name)
8791

8892

89-
def test_cannot_set_name_on_mismatch_address(ens):
93+
def test_cannot_set_name_on_mismatch_address(ens, TEST_ADDRESS):
9094
ens.setup_address('mismatch-reverse.tester.eth', TEST_ADDRESS)
9195
with pytest.raises(AddressMismatch):
9296
ens.setup_name('mismatch-reverse.tester.eth', '0xBB9bc244D798123fDe783fCc1C72d3Bb8C189413')
@@ -121,7 +125,7 @@ def test_setup_name_unowned_exception(ens):
121125
ens.setup_name('unowned-name.tester.eth')
122126

123127

124-
def test_setup_name_unauthorized(ens):
128+
def test_setup_name_unauthorized(ens, TEST_ADDRESS):
125129
with pytest.raises(UnauthorizedError):
126130
ens.setup_name('root-owned-tld', TEST_ADDRESS)
127131

0 commit comments

Comments
 (0)