1
1
#!/usr/bin/env python3
2
2
3
+ import json
3
4
import os
4
5
from pathlib import Path
6
+ from time import sleep
5
7
6
8
import requests
7
9
from test_base import TestBase
8
10
9
- from warnet.k8s import get_ingress_ip_or_host
11
+ from warnet.k8s import get_ingress_ip_or_host, wait_for_ingress_controller
10
12
11
13
12
14
class ServicesTest(TestBase):
@@ -31,16 +33,27 @@ def check_fork_observer(self):
31
33
self.log.info("Creating chain split")
32
34
self.warnet("bitcoin rpc john createwallet miner")
33
35
self.warnet("bitcoin rpc john -generate 1")
34
- # Port will be auto-forwarded by `warnet deploy`, routed through the enabled Caddy pod
36
+
37
+ self.log.info("Waiting for ingress controller")
38
+ wait_for_ingress_controller()
39
+
40
+ self.log.info("Waiting for ingress host")
41
+ ingress_ip = None
42
+ attempts = 100
43
+ while not ingress_ip:
44
+ ingress_ip = get_ingress_ip_or_host()
45
+ attempts -= 1
46
+ if attempts < 0:
47
+ raise Exception("Never got ingress host")
48
+ sleep(1)
49
+ # network id is 0xDEADBE in decimal
50
+ fo_data_uri = f"http://{ingress_ip}/fork-observer/api/14593470/data.json"
35
51
36
52
def call_fo_api():
37
53
# if on minikube remember to run `minikube tunnel` for this test to run
38
- ingress_ip = get_ingress_ip_or_host()
39
- fo_root = f"http://{ingress_ip}/fork-observer"
40
54
try:
41
- fo_res = requests.get(f"{fo_root}/api/networks.json")
42
- network_id = fo_res.json()["networks"][0]["id"]
43
- fo_data = requests.get(f"{fo_root}/api/{network_id}/data.json")
55
+ self.log.info(f"Getting: {fo_data_uri}")
56
+ fo_data = requests.get(fo_data_uri)
44
57
# fork observed!
45
58
return len(fo_data.json()["header_infos"]) == 2
46
59
except Exception as e:
@@ -51,6 +64,19 @@ def call_fo_api():
51
64
self.wait_for_predicate(call_fo_api)
52
65
self.log.info("Fork observed!")
53
66
67
+ self.log.info("Checking node description...")
68
+ fo_data = requests.get(fo_data_uri)
69
+ nodes = fo_data.json()["nodes"]
70
+ assert len(nodes) == 4
71
+ assert nodes[1]["name"] == "john"
72
+ assert nodes[1]["description"] == "john.default.svc:18444"
73
+
74
+ self.log.info("Checking reachable address is provided...")
75
+ self.warnet("bitcoin rpc george addnode john.default.svc:18444 onetry")
76
+ self.wait_for_predicate(
77
+ lambda: len(json.loads(self.warnet("bitcoin rpc george getpeerinfo"))) > 1
78
+ )
79
+
54
80
55
81
if __name__ == "__main__":
56
82
test = ServicesTest()
0 commit comments