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