Skip to content

Commit 53762f7

Browse files
authored
Merge pull request #2830 from opentensor/fix/roman/e2e-relared-with-start-call
Fix and improve e2e tests after `start call` new limit in subtensor
2 parents 3dbb002 + 0da5c80 commit 53762f7

18 files changed

+524
-239
lines changed

.circleci/config.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ jobs:
3939
python -m venv .venv
4040
. .venv/bin/activate
4141
python -m pip install --upgrade uv
42-
uv pip install ruff
42+
uv pip install ruff==0.11.5
4343
4444
- save_cache:
4545
name: Save cached ruff venv

.github/workflows/e2e-subtensor-tests.yaml

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ jobs:
4141
test_files=$(find tests/e2e_tests -name "test*.py" | jq -R -s -c 'split("\n") | map(select(. != ""))')
4242
# keep it here for future debug
4343
# test_files=$(find tests/e2e_tests -type f -name "test*.py" | grep -E 'test_(incentive|commit_weights|set_weights)\.py$' | jq -R -s -c 'split("\n") | map(select(. != ""))')
44-
echo "::set-output name=test-files::$test_files"
44+
echo "test-files=$test_files" >> "$GITHUB_OUTPUT"
4545
shell: bash
4646

4747
pull-docker-image:
@@ -101,5 +101,26 @@ jobs:
101101
- name: Load Docker Image
102102
run: docker load -i subtensor-localnet.tar
103103

104-
- name: Run tests
105-
run: uv run pytest ${{ matrix.test-file }} -s
104+
# - name: Run tests
105+
# run: uv run pytest ${{ matrix.test-file }} -s
106+
107+
- name: Run tests with retry
108+
run: |
109+
set +e
110+
for i in 1 2; do
111+
echo "🔁 Attempt $i: Running tests"
112+
uv run pytest ${{ matrix.test-file }} -s
113+
status=$?
114+
if [ $status -eq 0 ]; then
115+
echo "✅ Tests passed on attempt $i"
116+
break
117+
else
118+
echo "❌ Tests failed on attempt $i"
119+
if [ $i -eq 2 ]; then
120+
echo "Tests failed after 2 attempts"
121+
exit 1
122+
fi
123+
echo "Retrying..."
124+
sleep 5
125+
fi
126+
done

bittensor/core/async_subtensor.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -753,6 +753,7 @@ async def does_hotkey_exist(
753753
return_val = (
754754
False
755755
if result is None
756+
# not the default key (0x0)
756757
else result != "5C4hrfjw9DjXZTzV3MwzrrAr9P1MJhSrvWGWqi1eSuyUpnhM"
757758
)
758759
return return_val

bittensor/core/extrinsics/asyncex/start_call.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
from typing import TYPE_CHECKING
22

3-
from bittensor.utils import unlock_key
3+
from bittensor.utils import unlock_key, format_error_message
44
from bittensor.utils.btlogging import logging
55

66
if TYPE_CHECKING:
@@ -58,4 +58,4 @@ async def start_call_extrinsic(
5858
if await response.is_success:
5959
return True, "Success with `start_call` response."
6060

61-
return False, await response.error_message
61+
return False, format_error_message(await response.error_message)

bittensor/core/extrinsics/start_call.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
from typing import TYPE_CHECKING
22

3-
from bittensor.utils import unlock_key
3+
from bittensor.utils import unlock_key, format_error_message
44
from bittensor.utils.btlogging import logging
55

66
if TYPE_CHECKING:
@@ -59,4 +59,4 @@ def start_call_extrinsic(
5959
if response.is_success:
6060
return True, "Success with `start_call` response."
6161

62-
return False, response.error_message
62+
return False, format_error_message(response.error_message)

bittensor/core/subtensor.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -517,6 +517,7 @@ def does_hotkey_exist(self, hotkey_ss58: str, block: Optional[int] = None) -> bo
517517
return_val = (
518518
False
519519
if result is None
520+
# not the default key (0x0)
520521
else result != "5C4hrfjw9DjXZTzV3MwzrrAr9P1MJhSrvWGWqi1eSuyUpnhM"
521522
)
522523
return return_val

tests/e2e_tests/test_commit_reveal_v3.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
)
1414

1515

16-
@pytest.mark.parametrize("local_chain", [True], indirect=True)
16+
# @pytest.mark.parametrize("local_chain", [True], indirect=True)
1717
@pytest.mark.asyncio
1818
async def test_commit_and_reveal_weights_cr3(local_chain, subtensor, alice_wallet):
1919
"""
@@ -149,7 +149,7 @@ async def test_commit_and_reveal_weights_cr3(local_chain, subtensor, alice_walle
149149
)
150150

151151
# Ensure the expected drand round is well in the future
152-
assert expected_reveal_round >= latest_drand_round, (
152+
assert expected_reveal_round >= latest_drand_round + 1, (
153153
"Revealed drand pulse is older than the drand pulse right after setting weights"
154154
)
155155

tests/e2e_tests/test_commitment.py

Lines changed: 45 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -3,38 +3,47 @@
33

44
from bittensor import logging
55
from tests.e2e_tests.utils.chain_interactions import sudo_set_admin_utils
6+
from tests.e2e_tests.utils.e2e_test_utils import wait_to_start_call
67

78
logging.set_trace()
89

910

10-
def test_commitment(local_chain, subtensor, alice_wallet):
11+
def test_commitment(local_chain, subtensor, alice_wallet, dave_wallet):
12+
dave_subnet_netuid = 2
13+
assert subtensor.register_subnet(dave_wallet, True, True)
14+
assert subtensor.subnet_exists(dave_subnet_netuid), (
15+
"Subnet wasn't created successfully"
16+
)
17+
18+
assert wait_to_start_call(subtensor, dave_wallet, dave_subnet_netuid, 10)
19+
1120
with pytest.raises(SubstrateRequestException, match="AccountNotAllowedCommit"):
1221
subtensor.set_commitment(
1322
alice_wallet,
14-
netuid=1,
23+
netuid=dave_subnet_netuid,
1524
data="Hello World!",
1625
)
1726

1827
assert subtensor.burned_register(
1928
alice_wallet,
20-
netuid=1,
29+
netuid=dave_subnet_netuid,
2130
)
2231

2332
uid = subtensor.get_uid_for_hotkey_on_subnet(
2433
alice_wallet.hotkey.ss58_address,
25-
netuid=1,
34+
netuid=dave_subnet_netuid,
2635
)
2736

2837
assert uid is not None
2938

3039
assert "" == subtensor.get_commitment(
31-
netuid=1,
40+
netuid=dave_subnet_netuid,
3241
uid=uid,
3342
)
3443

3544
assert subtensor.set_commitment(
3645
alice_wallet,
37-
netuid=1,
46+
netuid=dave_subnet_netuid,
3847
data="Hello World!",
3948
)
4049

@@ -44,7 +53,7 @@ def test_commitment(local_chain, subtensor, alice_wallet):
4453
call_module="Commitments",
4554
call_function="set_max_space",
4655
call_params={
47-
"netuid": 1,
56+
"netuid": dave_subnet_netuid,
4857
"new_limit": len("Hello World!"),
4958
},
5059
)
@@ -57,51 +66,67 @@ def test_commitment(local_chain, subtensor, alice_wallet):
5766
):
5867
subtensor.set_commitment(
5968
alice_wallet,
60-
netuid=1,
69+
netuid=dave_subnet_netuid,
6170
data="Hello World!1",
6271
)
6372

6473
assert "Hello World!" == subtensor.get_commitment(
65-
netuid=1,
74+
netuid=dave_subnet_netuid,
6675
uid=uid,
6776
)
6877

6978
assert (
70-
subtensor.get_all_commitments(netuid=1)[alice_wallet.hotkey.ss58_address]
79+
subtensor.get_all_commitments(netuid=dave_subnet_netuid)[
80+
alice_wallet.hotkey.ss58_address
81+
]
7182
== "Hello World!"
7283
)
7384

7485

7586
@pytest.mark.asyncio
76-
async def test_commitment_async(local_chain, async_subtensor, alice_wallet):
87+
async def test_commitment_async(
88+
local_chain, async_subtensor, alice_wallet, dave_wallet
89+
):
90+
dave_subnet_netuid = 2
91+
assert await async_subtensor.register_subnet(dave_wallet)
92+
assert await async_subtensor.subnet_exists(dave_subnet_netuid), (
93+
"Subnet wasn't created successfully"
94+
)
95+
96+
await async_subtensor.wait_for_block(await async_subtensor.block + 20)
97+
status, message = await async_subtensor.start_call(
98+
dave_wallet, dave_subnet_netuid, True, True
99+
)
100+
assert status, message
101+
77102
async with async_subtensor as sub:
78103
with pytest.raises(SubstrateRequestException, match="AccountNotAllowedCommit"):
79104
await sub.set_commitment(
80105
alice_wallet,
81-
netuid=1,
106+
netuid=dave_subnet_netuid,
82107
data="Hello World!",
83108
)
84109

85110
assert await sub.burned_register(
86111
alice_wallet,
87-
netuid=1,
112+
netuid=dave_subnet_netuid,
88113
)
89114

90115
uid = await sub.get_uid_for_hotkey_on_subnet(
91116
alice_wallet.hotkey.ss58_address,
92-
netuid=1,
117+
netuid=dave_subnet_netuid,
93118
)
94119

95120
assert uid is not None
96121

97122
assert "" == await sub.get_commitment(
98-
netuid=1,
123+
netuid=dave_subnet_netuid,
99124
uid=uid,
100125
)
101126

102127
assert await sub.set_commitment(
103128
alice_wallet,
104-
netuid=1,
129+
netuid=dave_subnet_netuid,
105130
data="Hello World!",
106131
)
107132

@@ -111,7 +136,7 @@ async def test_commitment_async(local_chain, async_subtensor, alice_wallet):
111136
call_module="Commitments",
112137
call_function="set_max_space",
113138
call_params={
114-
"netuid": 1,
139+
"netuid": dave_subnet_netuid,
115140
"new_limit": len("Hello World!"),
116141
},
117142
)
@@ -124,15 +149,15 @@ async def test_commitment_async(local_chain, async_subtensor, alice_wallet):
124149
):
125150
await sub.set_commitment(
126151
alice_wallet,
127-
netuid=1,
152+
netuid=dave_subnet_netuid,
128153
data="Hello World!1",
129154
)
130155

131156
assert "Hello World!" == await sub.get_commitment(
132-
netuid=1,
157+
netuid=dave_subnet_netuid,
133158
uid=uid,
134159
)
135160

136-
assert (await sub.get_all_commitments(netuid=1))[
161+
assert (await sub.get_all_commitments(netuid=dave_subnet_netuid))[
137162
alice_wallet.hotkey.ss58_address
138163
] == "Hello World!"

0 commit comments

Comments
 (0)