Skip to content

Commit 3990a0e

Browse files
pinheadmzwillcl-ark
authored andcommitted
test: observe fork observer
1 parent 78a13ce commit 3990a0e

File tree

4 files changed

+102
-0
lines changed

4 files changed

+102
-0
lines changed

.github/workflows/test.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ jobs:
6161
- dag_connection_test.py
6262
- logging_test.py
6363
- rpc_test.py
64+
- services_test.py
6465
- scenarios_test.py
6566
steps:
6667
- uses: actions/checkout@v4

test/data/services/network.yaml

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
nodes:
2+
- name: john
3+
config: |
4+
dns=1
5+
debug=rpc
6+
rpcauth=forkobserver:1418183465eecbd407010cf60811c6a0$d4e5f0647a63429c218da1302d7f19fe627302aeb0a71a74de55346a25d8057c
7+
rpcwhitelist=forkobserver:getchaintips,getblockheader,getblockhash,getblock,getnetworkinfo
8+
rpcwhitelistdefault=0
9+
connect:
10+
- paul
11+
- name: paul
12+
config: |
13+
dns=1
14+
debug=rpc
15+
rpcauth=forkobserver:1418183465eecbd407010cf60811c6a0$d4e5f0647a63429c218da1302d7f19fe627302aeb0a71a74de55346a25d8057c
16+
rpcwhitelist=forkobserver:getchaintips,getblockheader,getblockhash,getblock,getnetworkinfo
17+
rpcwhitelistdefault=0
18+
- name: george
19+
config: |
20+
dns=1
21+
debug=rpc
22+
rpcauth=forkobserver:1418183465eecbd407010cf60811c6a0$d4e5f0647a63429c218da1302d7f19fe627302aeb0a71a74de55346a25d8057c
23+
rpcwhitelist=forkobserver:getchaintips,getblockheader,getblockhash,getblock,getnetworkinfo
24+
rpcwhitelistdefault=0
25+
connect:
26+
- ringo
27+
- name: ringo
28+
config: |
29+
dns=1
30+
debug=rpc
31+
rpcauth=forkobserver:1418183465eecbd407010cf60811c6a0$d4e5f0647a63429c218da1302d7f19fe627302aeb0a71a74de55346a25d8057c
32+
rpcwhitelist=forkobserver:getchaintips,getblockheader,getblockhash,getblock,getnetworkinfo
33+
rpcwhitelistdefault=0
34+
fork_observer:
35+
enabled: true

test/data/services/node-defaults.yaml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
image:
2+
repository: bitcoindevproject/bitcoin
3+
pullPolicy: IfNotPresent
4+
tag: "27.0"

test/services_test.py

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
#!/usr/bin/env python3
2+
3+
import os
4+
from pathlib import Path
5+
from subprocess import PIPE, Popen
6+
7+
import requests
8+
from test_base import TestBase
9+
10+
11+
class ServicesTest(TestBase):
12+
def __init__(self):
13+
super().__init__()
14+
self.network_dir = Path(os.path.dirname(__file__)) / "data" / "services"
15+
16+
def run_test(self):
17+
try:
18+
self.setup_network()
19+
self.check_fork_observer()
20+
finally:
21+
self.stop_server()
22+
23+
def setup_network(self):
24+
self.log.info("Setting up network")
25+
self.log.info(self.warnet(f"deploy {self.network_dir}"))
26+
self.wait_for_all_tanks_status(target="running")
27+
self.wait_for_all_edges()
28+
29+
def check_fork_observer(self):
30+
self.log.info("Creating chain split")
31+
self.warnet("bitcoin rpc john createwallet miner")
32+
self.warnet("bitcoin rpc john -generate 1")
33+
self.log.info("Forwarding port 2323...")
34+
# Stays alive in background
35+
self.fo_port_fwd_process = Popen(
36+
["kubectl", "port-forward", "fork-observer", "2323"],
37+
stdout=PIPE,
38+
stderr=PIPE,
39+
bufsize=1,
40+
universal_newlines=True,
41+
)
42+
43+
def call_fo_api():
44+
try:
45+
fo_res = requests.get("http://localhost:2323/api/networks.json")
46+
network_id = fo_res.json()["networks"][0]["id"]
47+
fo_data = requests.get(f"http://localhost:2323/api/{network_id}/data.json")
48+
# fork observed!
49+
return len(fo_data.json()["header_infos"]) == 2
50+
except Exception as e:
51+
self.log.info(f"Fork Observer API error: {e}")
52+
self.log.info("No Fork observed yet")
53+
return False
54+
55+
self.wait_for_predicate(call_fo_api)
56+
self.log.info("Fork observed!")
57+
self.fo_port_fwd_process.terminate()
58+
59+
60+
if __name__ == "__main__":
61+
test = ServicesTest()
62+
test.run_test()

0 commit comments

Comments
 (0)