Support “network” field of compatible clients config bans (#774)
This commit is contained in:
@@ -13,6 +13,8 @@ data class CompatibleVersionsRules(
|
||||
data class CompatibleVersionsRule(
|
||||
@param:JsonProperty("client")
|
||||
val client: String,
|
||||
@param:JsonProperty("networks")
|
||||
val networks: List<String>?,
|
||||
@param:JsonProperty("blacklist")
|
||||
val blacklist: List<String>?,
|
||||
@param:JsonProperty("whitelist")
|
||||
|
||||
@@ -115,17 +115,21 @@ class VersionValidator(
|
||||
}
|
||||
val type = upstream.getLabels().first().getOrDefault("client_type", "unknown")
|
||||
val version = upstream.getLabels().first().getOrDefault("client_version", "unknown")
|
||||
val rule = versionsConfig.get()!!.rules.find { it.client == type }
|
||||
val chain = upstream.getChain()
|
||||
val rule = versionsConfig.get()!!.rules.find { rule ->
|
||||
rule.client == type &&
|
||||
(rule.networks.isNullOrEmpty() || rule.networks.any { chain.shortNames.contains(it) })
|
||||
}
|
||||
if (rule == null) {
|
||||
log.info("No rules for client type $type, skipping validation for upstream ${upstream.getId()}")
|
||||
log.info("No rules for client type $type on chain ${chain.chainCode}, skipping validation for upstream ${upstream.getId()}")
|
||||
return Mono.just(OK)
|
||||
}
|
||||
if (!rule.whitelist.isNullOrEmpty() && !rule.whitelist.contains(version)) {
|
||||
log.warn("Version $version is in not in defined whitelist for $type, please change client version for upstream ${upstream.getId()}")
|
||||
log.warn("Version $version is in not in defined whitelist for $type on chain ${chain.chainCode}, please change client version for upstream ${upstream.getId()}")
|
||||
return Mono.just(UNAVAILABLE)
|
||||
}
|
||||
if (!rule.blacklist.isNullOrEmpty() && rule.blacklist.contains(version)) {
|
||||
log.warn("Version $version is in defined blacklist for $type, please change client version for upstream ${upstream.getId()}")
|
||||
log.warn("Version $version is in defined blacklist for $type on chain ${chain.chainCode}, please change client version for upstream ${upstream.getId()}")
|
||||
return Mono.just(UNAVAILABLE)
|
||||
}
|
||||
return Mono.just(OK)
|
||||
|
||||
@@ -10,17 +10,17 @@ class CompatibleVersionsRulesTest {
|
||||
val raw = """
|
||||
rules:
|
||||
- client: "client1"
|
||||
blacklist:
|
||||
blacklist:
|
||||
- 1.0.0
|
||||
- 1.0.1
|
||||
whitelist:
|
||||
whitelist:
|
||||
- 1.0.2
|
||||
- 1.0.3
|
||||
- client: "client2"
|
||||
blacklist:
|
||||
blacklist:
|
||||
- 1.0.0
|
||||
- 1.0.1
|
||||
whitelist:
|
||||
whitelist:
|
||||
- 1.0.2
|
||||
- 1.0.3
|
||||
""".trimIndent()
|
||||
@@ -42,4 +42,44 @@ class CompatibleVersionsRulesTest {
|
||||
assertEquals("1.0.2", rules[1].whitelist!![0])
|
||||
assertEquals("1.0.3", rules[1].whitelist!![1])
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test parsing with networks`() {
|
||||
val raw = """
|
||||
rules:
|
||||
- client: "erigon"
|
||||
networks:
|
||||
- ethereum
|
||||
blacklist:
|
||||
- v2.40.0
|
||||
- 3.1.0
|
||||
- client: "reth"
|
||||
blacklist:
|
||||
- v1.4.0
|
||||
- v1.4.1
|
||||
- client: "reth"
|
||||
networks:
|
||||
- bsc
|
||||
blacklist:
|
||||
- "reth/v1.6.0-2a4968e/x86_64-unknown-linux-gnu"
|
||||
""".trimIndent()
|
||||
|
||||
val rules = Global.yamlMapper.readValue(raw, CompatibleVersionsRules::class.java)!!.rules
|
||||
assertEquals(3, rules.size)
|
||||
|
||||
// First rule: erigon with networks
|
||||
assertEquals("erigon", rules[0].client)
|
||||
assertEquals(listOf("ethereum"), rules[0].networks)
|
||||
assertEquals(listOf("v2.40.0", "3.1.0"), rules[0].blacklist)
|
||||
|
||||
// Second rule: reth without networks (applies to all)
|
||||
assertEquals("reth", rules[1].client)
|
||||
assertEquals(null, rules[1].networks)
|
||||
assertEquals(listOf("v1.4.0", "v1.4.1"), rules[1].blacklist)
|
||||
|
||||
// Third rule: reth with networks (bsc only)
|
||||
assertEquals("reth", rules[2].client)
|
||||
assertEquals(listOf("bsc"), rules[2].networks)
|
||||
assertEquals(listOf("reth/v1.6.0-2a4968e/x86_64-unknown-linux-gnu"), rules[2].blacklist)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user