blob detector npe fix, other detectors fix 404 scenario (#776)

* blob detector npe fix, other detectors fix 404 scenario

* Fix flaky GenericRpcHeadTest scheduler
This commit is contained in:
EugeneDrpc
2026-01-20 11:55:38 +01:00
committed by GitHub
parent cd57300751
commit 01c51a6f06
5 changed files with 24 additions and 13 deletions

View File

@@ -55,12 +55,16 @@ class BeaconChainLowerBoundBlobDetector(
private fun parseHeadersResponse(data: ByteArray): ChainResponse {
val node = Global.objectMapper.readValue<JsonNode>(data)
if (node.get("code") != null && node.get("message") != null && node.get("code").textValue() == "404") {
return ChainResponse(null, ChainCallError(node.get("code").asInt(), node.get("message").asText(), node.get("message").asText()))
val codeNode = node.get("code")
val messageNode = node.get("message")
val is404 = codeNode != null && (codeNode.asInt() == 404 || codeNode.asText() == "404")
if (is404 && messageNode != null) {
return ChainResponse(null, ChainCallError(404, messageNode.asText(), messageNode.asText()))
}
if (node.get("data").toString() == "[]") {
val dataNode = node.get("data")
if (dataNode == null || dataNode.isNull || (dataNode.isArray && dataNode.size() == 0)) {
return ChainResponse(null, ChainCallError(404, notFoundError))
}
return ChainResponse(node.get("data").toString().toByteArray(), null)
return ChainResponse(dataNode.toString().toByteArray(), null)
}
}

View File

@@ -57,8 +57,11 @@ class BeaconChainLowerBoundBlockDetector(
private fun parseHeadersResponse(data: ByteArray): ChainResponse {
val node = Global.objectMapper.readValue<JsonNode>(data)
if (node.get("code") != null && node.get("message") != null && node.get("code").textValue() == "404") {
return ChainResponse(null, ChainCallError(node.get("code").asInt(), node.get("message").asText(), node.get("message").asText()))
val codeNode = node.get("code")
val messageNode = node.get("message")
val is404 = codeNode != null && (codeNode.asInt() == 404 || codeNode.asText() == "404")
if (is404 && messageNode != null) {
return ChainResponse(null, ChainCallError(404, messageNode.asText(), messageNode.asText()))
}
if (node.get("data")?.get("message")?.get("slot") != null) {
return ChainResponse(node.get("data").toString().toByteArray(), null)

View File

@@ -80,10 +80,12 @@ class BeaconChainLowerBoundEpochDetector(
private fun parseHeadersResponse(data: ByteArray): ChainResponse {
val node = Global.objectMapper.readValue<JsonNode>(data)
if (node.get("code") != null && node.get("message") != null && node.get("code").textValue() == "404") {
return ChainResponse(null, ChainCallError(node.get("code").asInt(), node.get("message").asText(), node.get("message").asText()))
val codeNode = node.get("code")
val messageNode = node.get("message")
val is404 = codeNode != null && (codeNode.asInt() == 404 || codeNode.asText() == "404")
if (is404 && messageNode != null) {
return ChainResponse(null, ChainCallError(404, messageNode.asText(), messageNode.asText()))
}
val jsonData = node.get("data")
if (jsonData != null) {
val str = jsonData.toString()

View File

@@ -54,10 +54,12 @@ class BeaconChainLowerBoundStateDetector(
private fun parseHeadersResponse(data: ByteArray): ChainResponse {
val node = Global.objectMapper.readValue<JsonNode>(data)
if (node.get("code") != null && node.get("message") != null && node.get("code").textValue() == "404") {
return ChainResponse(null, ChainCallError(node.get("code").asInt(), node.get("message").asText(), node.get("message").asText()))
val codeNode = node.get("code")
val messageNode = node.get("message")
val is404 = codeNode != null && (codeNode.asInt() == 404 || codeNode.asText() == "404")
if (is404 && messageNode != null) {
return ChainResponse(null, ChainCallError(404, messageNode.asText(), messageNode.asText()))
}
val jsonData = node.get("data")
if (jsonData != null) {
val str = jsonData.toString()

View File

@@ -133,7 +133,7 @@ class GenericRpcHeadTest {
"id",
BlockValidator.ALWAYS_VALID,
upstream,
Schedulers.boundedElastic(),
Schedulers.immediate(),
EthereumChainSpecific,
Duration.ofSeconds(5),
)