mirror of
https://github.com/aljazceru/python-teos.git
synced 2025-12-17 14:14:22 +01:00
Finishes basic test
This commit is contained in:
@@ -16,6 +16,7 @@ tower_port = "1234"
|
|||||||
tower_sk = PrivateKey()
|
tower_sk = PrivateKey()
|
||||||
tower_id = Cryptographer.get_compressed_pk(tower_sk.public_key)
|
tower_id = Cryptographer.get_compressed_pk(tower_sk.public_key)
|
||||||
|
|
||||||
|
nodes = None, None
|
||||||
mocked_return = None
|
mocked_return = None
|
||||||
|
|
||||||
|
|
||||||
@@ -61,6 +62,15 @@ def add_appointment_service_unavailable():
|
|||||||
return response, rcode
|
return response, rcode
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture(scope="session", autouse=True)
|
||||||
|
def towers_dict():
|
||||||
|
os.environ["TOWERS_DATA_DIR"] = "/tmp/watchtower"
|
||||||
|
|
||||||
|
yield
|
||||||
|
|
||||||
|
shutil.rmtree(os.environ["TOWERS_DATA_DIR"])
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture(scope="session", autouse=True)
|
@pytest.fixture(scope="session", autouse=True)
|
||||||
def prng_seed():
|
def prng_seed():
|
||||||
random.seed(0)
|
random.seed(0)
|
||||||
@@ -72,7 +82,7 @@ def get_random_value_hex(nbytes):
|
|||||||
return prv_hex.zfill(2 * nbytes)
|
return prv_hex.zfill(2 * nbytes)
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture(scope="session")
|
@pytest.fixture(scope="session", autouse=True)
|
||||||
def tower_mock():
|
def tower_mock():
|
||||||
app = Flask(__name__)
|
app = Flask(__name__)
|
||||||
|
|
||||||
@@ -96,7 +106,6 @@ def tower_mock():
|
|||||||
|
|
||||||
@app.route("/add_appointment", methods=["POST"])
|
@app.route("/add_appointment", methods=["POST"])
|
||||||
def add_appointment():
|
def add_appointment():
|
||||||
|
|
||||||
if mocked_return == "success":
|
if mocked_return == "success":
|
||||||
appointment = Appointment.from_dict(request.get_json().get("appointment"))
|
appointment = Appointment.from_dict(request.get_json().get("appointment"))
|
||||||
user_id = Cryptographer.get_compressed_pk(
|
user_id = Cryptographer.get_compressed_pk(
|
||||||
@@ -120,7 +129,14 @@ def tower_mock():
|
|||||||
logging.getLogger("werkzeug").setLevel(logging.ERROR)
|
logging.getLogger("werkzeug").setLevel(logging.ERROR)
|
||||||
os.environ["WERKZEUG_RUN_MAIN"] = "true"
|
os.environ["WERKZEUG_RUN_MAIN"] = "true"
|
||||||
|
|
||||||
yield app
|
Thread(target=app.run, kwargs={"host": tower_netaddr, "port": tower_port}, daemon=True).start()
|
||||||
|
|
||||||
|
|
||||||
|
# nodes_factory is set as a function fixture, so need to work around it to reuse it
|
||||||
|
@pytest.fixture(autouse=True)
|
||||||
|
def init_nodes(node_factory):
|
||||||
|
global nodes
|
||||||
|
nodes = node_factory.line_graph(2, opts=[{"may_fail": True, "allow_broken_log": True}, {"plugin": plugin_path}])
|
||||||
|
|
||||||
|
|
||||||
def test_helpme_starts(node_factory):
|
def test_helpme_starts(node_factory):
|
||||||
@@ -135,13 +151,9 @@ def test_helpme_starts(node_factory):
|
|||||||
l1.start()
|
l1.start()
|
||||||
|
|
||||||
|
|
||||||
def test_watchtower(node_factory, tower_mock):
|
def test_watchtower():
|
||||||
global mocked_return
|
global mocked_return
|
||||||
|
l1, l2 = nodes
|
||||||
l1, l2 = node_factory.line_graph(2, opts=[{"may_fail": True, "allow_broken_log": True}, {"plugin": plugin_path}])
|
|
||||||
|
|
||||||
# Start the tower mock in a different process
|
|
||||||
Thread(target=tower_mock.run, kwargs={"host": tower_netaddr, "port": tower_port}, daemon=True).start()
|
|
||||||
|
|
||||||
# Register a new tower
|
# Register a new tower
|
||||||
l2.rpc.registertower("{}@{}:{}".format(tower_id, tower_netaddr, tower_port))
|
l2.rpc.registertower("{}@{}:{}".format(tower_id, tower_netaddr, tower_port))
|
||||||
@@ -155,18 +167,17 @@ def test_watchtower(node_factory, tower_mock):
|
|||||||
|
|
||||||
# Force a new commitment
|
# Force a new commitment
|
||||||
mocked_return = "success"
|
mocked_return = "success"
|
||||||
l1.rpc.pay(l2.rpc.invoice(25000000, "lbl1", "desc1")["bolt11"])
|
l1.rpc.pay(l2.rpc.invoice(25000000, "lbl1", "desc")["bolt11"])
|
||||||
|
|
||||||
# Check that the tower got it (list is not empty anymore)
|
# Check that the tower got it (list is not empty anymore)
|
||||||
# FIXME: it would be great to check the ids, need to run as dev tho and its currently failing to compile
|
# FIXME: it would be great to check the ids, need to run as dev tho and its currently failing to compile
|
||||||
appointments = l2.rpc.gettowerinfo(tower_id).get("appointments")
|
appointments = l2.rpc.gettowerinfo(tower_id).get("appointments")
|
||||||
assert appointments
|
assert appointments
|
||||||
|
|
||||||
# Disconnect the tower and see how appointments get backed up
|
|
||||||
assert not l2.rpc.gettowerinfo(tower_id).get("pending_appointments")
|
assert not l2.rpc.gettowerinfo(tower_id).get("pending_appointments")
|
||||||
|
|
||||||
|
# Disconnect the tower and see how appointments get backed up
|
||||||
mocked_return = "service_unavailable"
|
mocked_return = "service_unavailable"
|
||||||
l1.rpc.pay(l2.rpc.invoice(25000000, "lbl2", "desc1")["bolt11"])
|
l1.rpc.pay(l2.rpc.invoice(25000000, "lbl2", "desc")["bolt11"])
|
||||||
pending_appointments = [
|
pending_appointments = [
|
||||||
data.get("appointment").get("locator") for data in l2.rpc.gettowerinfo(tower_id).get("pending_appointments")
|
data.get("appointment").get("locator") for data in l2.rpc.gettowerinfo(tower_id).get("pending_appointments")
|
||||||
]
|
]
|
||||||
@@ -174,11 +185,10 @@ def test_watchtower(node_factory, tower_mock):
|
|||||||
|
|
||||||
# The fail has triggered the retry strategy. By "turning it back on" we should get the pending appointments trough
|
# The fail has triggered the retry strategy. By "turning it back on" we should get the pending appointments trough
|
||||||
mocked_return = "success"
|
mocked_return = "success"
|
||||||
sleep(1)
|
|
||||||
assert not l2.rpc.gettowerinfo(tower_id).get("pending_appointments")
|
# Give it some time to switch
|
||||||
|
while l2.rpc.gettowerinfo(tower_id).get("pending_appointments"):
|
||||||
|
sleep(0.5)
|
||||||
|
|
||||||
|
# The previously pending appointment are now part of the sent appointments
|
||||||
assert set(pending_appointments).issubset(l2.rpc.gettowerinfo(tower_id).get("appointments").keys())
|
assert set(pending_appointments).issubset(l2.rpc.gettowerinfo(tower_id).get("appointments").keys())
|
||||||
|
|
||||||
# TODO: reduce max retries and force retry with retrytower
|
|
||||||
|
|
||||||
|
|
||||||
# TODO: Check rejections
|
|
||||||
|
|||||||
Reference in New Issue
Block a user