Commit c2789884 authored by Victor Colombo's avatar Victor Colombo

Refactor code to new support wait and request calls

parent def16fbf
...@@ -77,9 +77,17 @@ def run(args): ...@@ -77,9 +77,17 @@ def run(args):
print("Waiting for the first finalized epoch") print("Waiting for the first finalized epoch")
first_cl_client = all_cl_client_contexts[0] first_cl_client = all_cl_client_contexts[0]
first_cl_client_id = first_cl_client.beacon_service_id first_cl_client_id = first_cl_client.beacon_service_id
define_fact(service_id = first_cl_client_id, fact_name = FIRST_NODE_FINALIZATION_FACT, fact_recipe = struct(method= "GET", endpoint = "/eth/v1/beacon/states/head/finality_checkpoints", content_type = "application/json", port_id = HTTP_PORT_ID_FOR_FACT, field_extractor = ".data.finalized.epoch")) epoch_recipe = struct(
finalized_epoch = wait(service_id = first_cl_client_id, fact_name = FIRST_NODE_FINALIZATION_FACT) service_id = first_cl_client_id,
# TODO make an assertion on the finalized_epoch > 0 method= "GET",
endpoint = "/eth/v1/beacon/states/head/finality_checkpoints",
content_type = "application/json",
port_id = HTTP_PORT_ID_FOR_FACT,
extract = {
"finalized_epoch": ".data.finalized.epoch"
}
)
wait(epoch_recipe, "finalized_epoch", ">", 0)
print("First finalized epoch occurred successfully") print("First finalized epoch occurred successfully")
......
# this is a dictionary as this will get serialzed to JSON
def wait(service_id, port_id):
recipe = struct(
service_id = service_id,
method= "GET",
endpoint = "/eth/v1/node/health",
content_type = "application/json",
port_id = HTTP_PORT_ID
)
return wait(recipe, "code", "IN", [200, 206, 503])
\ No newline at end of file
...@@ -99,8 +99,14 @@ def launch( ...@@ -99,8 +99,14 @@ def launch(
beacon_service = add_service(beacon_node_service_id, beacon_config) beacon_service = add_service(beacon_node_service_id, beacon_config)
# TODO check whether its 200, 206 or 503 like golang # TODO check whether its 200, 206 or 503 like golang
define_fact(service_id = beacon_node_service_id, fact_name = BEACON_HEALTH_FACT_NAME, fact_recipe = struct(method= "GET", endpoint = "/eth/v1/node/health", content_type = "application/json", port_id = BEACON_HTTP_PORT_ID)) health_recipe = struct(
wait(service_id = beacon_node_service_id, fact_name = BEACON_HEALTH_FACT_NAME) service_id = beacon_node_service_id,
method= "GET",
endpoint = "/eth/v1/node/health",
content_type = "application/json",
port_id = BEACON_HTTP_PORT_ID,
)
wait(health_recipe, "code", "IN", [200, 206, 503])
beacon_http_port = beacon_service.ports[BEACON_HTTP_PORT_ID] beacon_http_port = beacon_service.ports[BEACON_HTTP_PORT_ID]
...@@ -120,8 +126,17 @@ def launch( ...@@ -120,8 +126,17 @@ def launch(
validator_service = add_service(validator_node_service_id, validator_config) validator_service = add_service(validator_node_service_id, validator_config)
# TODO(old) add validator availability using the validator API: https://ethereum.github.io/beacon-APIs/?urls.primaryName=v1#/ValidatorRequiredApi | from eth2-merge-kurtosis-module # TODO(old) add validator availability using the validator API: https://ethereum.github.io/beacon-APIs/?urls.primaryName=v1#/ValidatorRequiredApi | from eth2-merge-kurtosis-module
define_fact(service_id = beacon_node_service_id, fact_name = BEACON_ENR_FACT_NAME, fact_recipe = struct(method= "GET", endpoint = "/eth/v1/node/identity", field_extractor = ".data.enr", content_type = "application/json", port_id = BEACON_HTTP_PORT_ID)) beacon_node_identity_recipe = struct(
beacon_node_enr = wait(service_id = beacon_node_service_id, fact_name = BEACON_ENR_FACT_NAME) service_id = beacon_node_service_id,
method= "GET",
endpoint = "/eth/v1/node/identity",
content_type = "application/json",
port_id = BEACON_HTTP_PORT_ID,
extract = {
"enr": ".data.enr"
}
)
beacon_node_enr = request(beacon_node_identity_recipe)["extract.enr"]
beacon_metrics_port = beacon_service.ports[BEACON_METRICS_PORT_ID] beacon_metrics_port = beacon_service.ports[BEACON_METRICS_PORT_ID]
beacon_metrics_url = "{0}:{1}".format(beacon_service.ip_address, beacon_metrics_port.number) beacon_metrics_url = "{0}:{1}".format(beacon_service.ip_address, beacon_metrics_port.number)
......
...@@ -3,6 +3,7 @@ parse_input = import_module("github.com/kurtosis-tech/eth2-package/src/package_i ...@@ -3,6 +3,7 @@ parse_input = import_module("github.com/kurtosis-tech/eth2-package/src/package_i
cl_client_context = import_module("github.com/kurtosis-tech/eth2-package/src/participant_network/cl/cl_client_context.star") cl_client_context = import_module("github.com/kurtosis-tech/eth2-package/src/participant_network/cl/cl_client_context.star")
cl_node_metrics = import_module("github.com/kurtosis-tech/eth2-package/src/participant_network/cl/cl_node_metrics_info.star") cl_node_metrics = import_module("github.com/kurtosis-tech/eth2-package/src/participant_network/cl/cl_node_metrics_info.star")
mev_boost_context_module = import_module("github.com/kurtosis-tech/eth2-package/src/participant_network/mev_boost/mev_boost_context.star") mev_boost_context_module = import_module("github.com/kurtosis-tech/eth2-package/src/participant_network/mev_boost/mev_boost_context.star")
cl_node_health_checker = import_module("github.com/kurtosis-tech/eth2-package/src/participant_network/cl/cl_node_health_checker.star")
package_io = import_module("github.com/kurtosis-tech/eth2-package/src/package_io/constants.star") package_io = import_module("github.com/kurtosis-tech/eth2-package/src/package_io/constants.star")
...@@ -85,9 +86,7 @@ def launch( ...@@ -85,9 +86,7 @@ def launch(
beacon_http_port = beacon_service.ports[HTTP_PORT_ID] beacon_http_port = beacon_service.ports[HTTP_PORT_ID]
# TODO check whether its 200, 206 or 503 like golang cl_node_health_checker.wait(beacon_node_service_id, HTTP_PORT_ID)
define_fact(service_id = beacon_node_service_id, fact_name = BEACON_HEALTH_FACT_NAME, fact_recipe = struct(method= "GET", endpoint = "/eth/v1/node/health", content_type = "application/json", port_id = HTTP_PORT_ID))
wait(service_id = beacon_node_service_id, fact_name = BEACON_HEALTH_FACT_NAME)
# Launch validator node # Launch validator node
...@@ -108,8 +107,17 @@ def launch( ...@@ -108,8 +107,17 @@ def launch(
# TODO(old) add validator availability using the validator API: https://ethereum.github.io/beacon-APIs/?urls.primaryName=v1#/ValidatorRequiredApi | from eth2-merge-kurtosis-module # TODO(old) add validator availability using the validator API: https://ethereum.github.io/beacon-APIs/?urls.primaryName=v1#/ValidatorRequiredApi | from eth2-merge-kurtosis-module
define_fact(service_id = beacon_node_service_id, fact_name = BEACON_ENR_FACT_NAME, fact_recipe = struct(method= "GET", endpoint = "/eth/v1/node/identity", field_extractor = ".data.enr", content_type = "application/json", port_id = HTTP_PORT_ID)) beacon_node_identity_recipe = struct(
beacon_node_enr = wait(service_id = beacon_node_service_id, fact_name = BEACON_ENR_FACT_NAME) service_id = beacon_node_service_id,
method= "GET",
endpoint = "/eth/v1/node/identity",
content_type = "application/json",
port_id = HTTP_PORT_ID
extract = {
"enr": ".data.enr"
}
)
beacon_node_enr = request(beacon_node_identity_recipe)["extract.enr"]
beacon_metrics_port = beacon_service.ports[METRICS_PORT_ID] beacon_metrics_port = beacon_service.ports[METRICS_PORT_ID]
beacon_metrics_url = "{0}:{1}".format(beacon_service.ip_address, beacon_metrics_port.number) beacon_metrics_url = "{0}:{1}".format(beacon_service.ip_address, beacon_metrics_port.number)
......
...@@ -2,6 +2,7 @@ shared_utils = import_module("github.com/kurtosis-tech/eth2-package/src/shared_u ...@@ -2,6 +2,7 @@ shared_utils = import_module("github.com/kurtosis-tech/eth2-package/src/shared_u
parse_input = import_module("github.com/kurtosis-tech/eth2-package/src/package_io/parse_input.star") parse_input = import_module("github.com/kurtosis-tech/eth2-package/src/package_io/parse_input.star")
cl_client_context = import_module("github.com/kurtosis-tech/eth2-package/src/participant_network/cl/cl_client_context.star") cl_client_context = import_module("github.com/kurtosis-tech/eth2-package/src/participant_network/cl/cl_client_context.star")
cl_node_metrics = import_module("github.com/kurtosis-tech/eth2-package/src/participant_network/cl/cl_node_metrics_info.star") cl_node_metrics = import_module("github.com/kurtosis-tech/eth2-package/src/participant_network/cl/cl_node_metrics_info.star")
cl_node_health_checker = import_module("github.com/kurtosis-tech/eth2-package/src/participant_network/cl/cl_node_health_checker.star")
package_io = import_module("github.com/kurtosis-tech/eth2-package/src/package_io/constants.star") package_io = import_module("github.com/kurtosis-tech/eth2-package/src/package_io/constants.star")
...@@ -82,12 +83,19 @@ def launch( ...@@ -82,12 +83,19 @@ def launch(
nimbus_service = add_service(service_id, config) nimbus_service = add_service(service_id, config)
# TODO check whether its 200, 206 or 503 like golang cl_node_health_checker.wait(service_id, HTTP_PORT_ID)
define_fact(service_id = service_id, fact_name = HEALTH_FACT_NAME, fact_recipe = struct(method= "GET", endpoint = "/eth/v1/node/health", content_type = "application/json", port_id = HTTP_PORT_ID))
wait(service_id = service_id, fact_name = HEALTH_FACT_NAME) cl_node_identity_recipe = struct(
service_id = service_id,
define_fact(service_id = service_id, fact_name = ENR_FACT_NAME, fact_recipe = struct(method= "GET", endpoint = "/eth/v1/node/identity", field_extractor = ".data.enr", content_type = "application/json", port_id = HTTP_PORT_ID)) method= "GET",
node_enr = wait(service_id = service_id, fact_name = ENR_FACT_NAME) endpoint = "/eth/v1/node/identity",
content_type = "application/json",
port_id = HTTP_PORT_ID,
extract = {
"enr": ".data.enr"
}
)
node_enr = request(cl_node_identity_recipe)["extract.enr"]
metrics_port = nimbus_service.ports[METRICS_PORT_ID] metrics_port = nimbus_service.ports[METRICS_PORT_ID]
metrics_url = "{0}:{1}".format(nimbus_service.ip_address, metrics_port.number) metrics_url = "{0}:{1}".format(nimbus_service.ip_address, metrics_port.number)
......
...@@ -2,6 +2,7 @@ shared_utils = import_module("github.com/kurtosis-tech/eth2-package/src/shared_u ...@@ -2,6 +2,7 @@ shared_utils = import_module("github.com/kurtosis-tech/eth2-package/src/shared_u
parse_input = import_module("github.com/kurtosis-tech/eth2-package/src/package_io/parse_input.star") parse_input = import_module("github.com/kurtosis-tech/eth2-package/src/package_io/parse_input.star")
cl_client_context = import_module("github.com/kurtosis-tech/eth2-package/src/participant_network/cl/cl_client_context.star") cl_client_context = import_module("github.com/kurtosis-tech/eth2-package/src/participant_network/cl/cl_client_context.star")
cl_node_metrics = import_module("github.com/kurtosis-tech/eth2-package/src/participant_network/cl/cl_node_metrics_info.star") cl_node_metrics = import_module("github.com/kurtosis-tech/eth2-package/src/participant_network/cl/cl_node_metrics_info.star")
cl_node_health_checker = import_module("github.com/kurtosis-tech/eth2-package/src/participant_network/cl/cl_node_health_checker.star")
mev_boost_context_module = import_module("github.com/kurtosis-tech/eth2-package/src/participant_network/mev_boost/mev_boost_context.star") mev_boost_context_module = import_module("github.com/kurtosis-tech/eth2-package/src/participant_network/mev_boost/mev_boost_context.star")
package_io = import_module("github.com/kurtosis-tech/eth2-package/src/package_io/constants.star") package_io = import_module("github.com/kurtosis-tech/eth2-package/src/package_io/constants.star")
...@@ -105,9 +106,7 @@ def launch( ...@@ -105,9 +106,7 @@ def launch(
beacon_service = add_service(beacon_node_service_id, beacon_config) beacon_service = add_service(beacon_node_service_id, beacon_config)
# TODO check whether its 200, 206 or 503 like golang cl_node_health_checker.wait(beacon_node_service_id, HTTP_PORT_ID)
define_fact(service_id = beacon_node_service_id, fact_name = BEACON_HEALTH_FACT_NAME, fact_recipe = struct(method= "GET", endpoint = "/eth/v1/node/health", content_type = "application/json", port_id = HTTP_PORT_ID))
wait(service_id = beacon_node_service_id, fact_name = BEACON_HEALTH_FACT_NAME)
beacon_http_port = beacon_service.ports[HTTP_PORT_ID] beacon_http_port = beacon_service.ports[HTTP_PORT_ID]
...@@ -132,8 +131,17 @@ def launch( ...@@ -132,8 +131,17 @@ def launch(
validator_service = add_service(validator_node_service_id, validator_config) validator_service = add_service(validator_node_service_id, validator_config)
# TODO(old) add validator availability using the validator API: https://ethereum.github.io/beacon-APIs/?urls.primaryName=v1#/ValidatorRequiredApi | from eth2-merge-kurtosis-module # TODO(old) add validator availability using the validator API: https://ethereum.github.io/beacon-APIs/?urls.primaryName=v1#/ValidatorRequiredApi | from eth2-merge-kurtosis-module
define_fact(service_id = beacon_node_service_id, fact_name = BEACON_ENR_FACT_NAME, fact_recipe = struct(method= "GET", endpoint = "/eth/v1/node/identity", field_extractor = ".data.enr", content_type = "application/json", port_id = HTTP_PORT_ID)) beacon_node_identity_recipe = struct(
beacon_node_enr = wait(service_id = beacon_node_service_id, fact_name = BEACON_ENR_FACT_NAME) service_id = beacon_node_service_id,
method= "GET",
endpoint = "/eth/v1/node/identity",
content_type = "application/json",
port_id = HTTP_PORT_ID
extract = {
"enr": ".data.enr"
}
)
beacon_node_enr = request(beacon_node_identity_recipe)["extract.enr"]
beacon_metrics_port = beacon_service.ports[BEACON_MONITORING_PORT_ID] beacon_metrics_port = beacon_service.ports[BEACON_MONITORING_PORT_ID]
beacon_metrics_url = "{0}:{1}".format(beacon_service.ip_address, beacon_metrics_port.number) beacon_metrics_url = "{0}:{1}".format(beacon_service.ip_address, beacon_metrics_port.number)
......
...@@ -2,6 +2,7 @@ shared_utils = import_module("github.com/kurtosis-tech/eth2-package/src/shared_u ...@@ -2,6 +2,7 @@ shared_utils = import_module("github.com/kurtosis-tech/eth2-package/src/shared_u
parse_input = import_module("github.com/kurtosis-tech/eth2-package/src/package_io/parse_input.star") parse_input = import_module("github.com/kurtosis-tech/eth2-package/src/package_io/parse_input.star")
cl_client_context = import_module("github.com/kurtosis-tech/eth2-package/src/participant_network/cl/cl_client_context.star") cl_client_context = import_module("github.com/kurtosis-tech/eth2-package/src/participant_network/cl/cl_client_context.star")
cl_node_metrics = import_module("github.com/kurtosis-tech/eth2-package/src/participant_network/cl/cl_node_metrics_info.star") cl_node_metrics = import_module("github.com/kurtosis-tech/eth2-package/src/participant_network/cl/cl_node_metrics_info.star")
cl_node_health_checker = import_module("github.com/kurtosis-tech/eth2-package/src/participant_network/cl/cl_node_health_checker.star")
mev_boost_context_module = import_module("github.com/kurtosis-tech/eth2-package/src/participant_network/mev_boost/mev_boost_context.star") mev_boost_context_module = import_module("github.com/kurtosis-tech/eth2-package/src/participant_network/mev_boost/mev_boost_context.star")
package_io = import_module("github.com/kurtosis-tech/eth2-package/src/package_io/constants.star") package_io = import_module("github.com/kurtosis-tech/eth2-package/src/package_io/constants.star")
...@@ -91,12 +92,19 @@ def launch( ...@@ -91,12 +92,19 @@ def launch(
teku_service = add_service(service_id, config) teku_service = add_service(service_id, config)
# TODO check whether its 200, 206 or 503 like golang cl_node_health_checker.wait(service_id, HTTP_PORT_ID)
define_fact(service_id = service_id, fact_name = HEALTH_FACT_NAME, fact_recipe = struct(method= "GET", endpoint = "/eth/v1/node/health", content_type = "application/json", port_id = HTTP_PORT_ID))
wait(service_id = service_id, fact_name = HEALTH_FACT_NAME) node_identity_recipe = struct(
service_id = service_id,
define_fact(service_id = service_id, fact_name = ENR_FACT_NAME, fact_recipe = struct(method= "GET", endpoint = "/eth/v1/node/identity", field_extractor = ".data.enr", content_type = "application/json", port_id = HTTP_PORT_ID)) method= "GET",
node_enr = wait(service_id = service_id, fact_name = ENR_FACT_NAME) endpoint = "/eth/v1/node/identity",
content_type = "application/json",
port_id = BEACON_HTTP_PORT_ID,
extract = {
"enr": ".data.enr"
}
)
node_enr = request(beacon_node_identity_recipe)["extract.enr"]
teku_metrics_port = teku_service.ports[METRICS_PORT_ID] teku_metrics_port = teku_service.ports[METRICS_PORT_ID]
......
...@@ -62,13 +62,23 @@ def launch( ...@@ -62,13 +62,23 @@ def launch(
service = add_service(service_id, config) service = add_service(service_id, config)
define_fact(service_id = service_id, fact_name = ENODE_FACT_NAME, fact_recipe = struct(method= "POST", endpoint = "", field_extractor = ".result.enode", body = '{"method":"admin_nodeInfo","params":[],"id":1,"jsonrpc":"2.0"}', content_type = "application/json", port_id = RPC_PORT_ID)) result_recipe = struct(
enode = wait(service_id = service_id, fact_name = ENODE_FACT_NAME) service_id = service_id,
method= "POST",
endpoint = "",
body = '{"method":"admin_nodeInfo","params":[],"id":1,"jsonrpc":"2.0"}',
content_type = "application/json",
port_id = RPC_PORT_ID,
extract = {
"enode": ".result.enode",
}
)
response = request(service_id = service_id, fact_name = ENR_FACT_NAME)
return el_client_context.new_el_client_context( return el_client_context.new_el_client_context(
"besu", "besu",
"", # besu has no ENR "", # besu has no ENR
enode, response["extract.enode"],
service.ip_address, service.ip_address,
RPC_PORT_NUM, RPC_PORT_NUM,
WS_PORT_NUM, WS_PORT_NUM,
......
...@@ -60,16 +60,24 @@ def launch( ...@@ -60,16 +60,24 @@ def launch(
service = add_service(service_id, config) service = add_service(service_id, config)
define_fact(service_id = service_id, fact_name = ENR_FACT_NAME, fact_recipe = struct(method= "POST", endpoint = "", field_extractor = ".result.enr", body = '{"method":"admin_nodeInfo","params":[],"id":1,"jsonrpc":"2.0"}', content_type = "application/json", port_id = RPC_PORT_ID)) result_recipe = struct(
enr = wait(service_id = service_id, fact_name = ENR_FACT_NAME) service_id = service_id,
method= "POST",
define_fact(service_id = service_id, fact_name = ENODE_FACT_NAME, fact_recipe = struct(method= "POST", endpoint = "", field_extractor = ".result.enode", body = '{"method":"admin_nodeInfo","params":[],"id":1,"jsonrpc":"2.0"}', content_type = "application/json", port_id = RPC_PORT_ID)) endpoint = "",
enode = wait(service_id = service_id, fact_name = ENODE_FACT_NAME) body = '{"method":"admin_nodeInfo","params":[],"id":1,"jsonrpc":"2.0"}',
content_type = "application/json",
port_id = RPC_PORT_ID,
extract = {
"enr": ".result.enr",
"enode": ".result.enode",
}
)
response = request(service_id = service_id, fact_name = ENR_FACT_NAME)
return el_client_context.new_el_client_context( return el_client_context.new_el_client_context(
"erigon", "erigon",
enr, response["extract.enr"],
enode, response["extract.enode"],
service.ip_address, service.ip_address,
RPC_PORT_NUM, RPC_PORT_NUM,
WS_PORT_NUM, WS_PORT_NUM,
......
...@@ -73,16 +73,25 @@ def launch( ...@@ -73,16 +73,25 @@ def launch(
service = add_service(service_id, config) service = add_service(service_id, config)
define_fact(service_id = service_id, fact_name = ENR_FACT_NAME, fact_recipe = struct(method= "POST", endpoint = "", field_extractor = ".result.enr", body = '{"method":"admin_nodeInfo","params":[],"id":1,"jsonrpc":"2.0"}', content_type = "application/json", port_id = RPC_PORT_ID)) result_recipe = struct(
enr = wait(service_id = service_id, fact_name = ENR_FACT_NAME) service_id = service_id,
method= "POST",
endpoint = "",
body = '{"method":"admin_nodeInfo","params":[],"id":1,"jsonrpc":"2.0"}',
content_type = "application/json",
port_id = RPC_PORT_ID,
extract = {
"enr": ".result.enr",
"enode": ".result.enode",
}
)
response = request(service_id = service_id, fact_name = ENR_FACT_NAME)
define_fact(service_id = service_id, fact_name = ENODE_FACT_NAME, fact_recipe = struct(method= "POST", endpoint = "", field_extractor = ".result.enode", body = '{"method":"admin_nodeInfo","params":[],"id":1,"jsonrpc":"2.0"}', content_type = "application/json", port_id = RPC_PORT_ID))
enode = wait(service_id = service_id, fact_name = ENODE_FACT_NAME)
return el_client_context.new_el_client_context( return el_client_context.new_el_client_context(
"geth", "geth",
enr, response["extract.enr"],
enode, response["extract.enode"],
service.ip_address, service.ip_address,
RPC_PORT_NUM, RPC_PORT_NUM,
WS_PORT_NUM, WS_PORT_NUM,
......
...@@ -57,14 +57,24 @@ def launch( ...@@ -57,14 +57,24 @@ def launch(
service = add_service(service_id, config) service = add_service(service_id, config)
define_fact(service_id = service_id, fact_name = ENODE_FACT_NAME, fact_recipe = struct(method= "POST", endpoint = "", field_extractor = ".result.enode", body = '{"method":"admin_nodeInfo","params":[],"id":1,"jsonrpc":"2.0"}', content_type = "application/json", port_id = RPC_PORT_ID)) result_recipe = struct(
enode = wait(service_id = service_id, fact_name = ENODE_FACT_NAME) service_id = service_id,
method= "POST",
endpoint = "",
body = '{"method":"admin_nodeInfo","params":[],"id":1,"jsonrpc":"2.0"}',
content_type = "application/json",
port_id = RPC_PORT_ID,
extract = {
"enode": ".result.enode",
}
)
response = request(result_recipe)
return el_client_context.new_el_client_context( return el_client_context.new_el_client_context(
"nethermind", "nethermind",
"", # nethermind has no ENR in the eth2-merge-kurtosis-module either "", # nethermind has no ENR in the eth2-merge-kurtosis-module either
# Nethermind node info endpoint doesn't return ENR field https://docs.nethermind.io/nethermind/ethereum-client/json-rpc/admin # Nethermind node info endpoint doesn't return ENR field https://docs.nethermind.io/nethermind/ethereum-client/json-rpc/admin
enode, response["extract.enode"],
service.ip_address, service.ip_address,
RPC_PORT_NUM, RPC_PORT_NUM,
WS_PORT_NUM, WS_PORT_NUM,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment