From 724d482a22d180a8978a17e2e75f6337b2b10529 Mon Sep 17 00:00:00 2001 From: Andrey Kostiuchenko Date: Fri, 29 Mar 2024 17:17:12 +0500 Subject: [PATCH] docker image config (#406) --- .../soramitsu/iroha2/testengine/IrohaContainer.kt | 11 +++++++---- .../iroha2/testengine/IrohaRunnerExtension.kt | 13 ++++++------- .../jp/co/soramitsu/iroha2/testengine/IrohaTest.kt | 2 ++ 3 files changed, 15 insertions(+), 11 deletions(-) diff --git a/modules/test-tools/src/main/kotlin/jp/co/soramitsu/iroha2/testengine/IrohaContainer.kt b/modules/test-tools/src/main/kotlin/jp/co/soramitsu/iroha2/testengine/IrohaContainer.kt index 754e695e5..dcf724b0e 100644 --- a/modules/test-tools/src/main/kotlin/jp/co/soramitsu/iroha2/testengine/IrohaContainer.kt +++ b/modules/test-tools/src/main/kotlin/jp/co/soramitsu/iroha2/testengine/IrohaContainer.kt @@ -28,9 +28,7 @@ open class IrohaContainer : GenericContainer { constructor(config: IrohaConfig.() -> Unit = {}) : this(IrohaConfig().apply(config)) - constructor(config: IrohaConfig) : super( - DockerImageName.parse("${config.imageName}:${config.imageTag}"), - ) { + constructor(config: IrohaConfig) : super(config.getFullImageName()) { val publicKey = config.keyPair.public.bytes().toHex() val privateKey = config.keyPair.private.bytes().toHex() @@ -151,8 +149,13 @@ open class IrohaContainer : GenericContainer { private fun String.readStatusBlocks() = JSON_SERDE.readTree(this).get("blocks")?.doubleValue() companion object { + private fun IrohaConfig.getFullImageName() = when (this.imageTag.contains("sha256")) { + true -> "${this.imageName}@${this.imageTag}" + false -> "${this.imageName}:${this.imageTag}" + }.let { DockerImageName.parse(it) } + const val NETWORK_ALIAS = "iroha" - const val DEFAULT_IMAGE_TAG = "stable-2.0.0-pre-rc.20" + const val DEFAULT_IMAGE_TAG = "sha256:b71e3ac42aeace89483eeadcded35cc6f982d4d9b48c002dd425f8dbaf669374" const val DEFAULT_IMAGE_NAME = "hyperledger/iroha2" const val DEFAULT_EXECUTOR_FILE_NAME = "executor.wasm" const val DEFAULT_GENESIS_FILE_NAME = "genesis.json" diff --git a/modules/test-tools/src/main/kotlin/jp/co/soramitsu/iroha2/testengine/IrohaRunnerExtension.kt b/modules/test-tools/src/main/kotlin/jp/co/soramitsu/iroha2/testengine/IrohaRunnerExtension.kt index 2a0e41a69..5897bd431 100644 --- a/modules/test-tools/src/main/kotlin/jp/co/soramitsu/iroha2/testengine/IrohaRunnerExtension.kt +++ b/modules/test-tools/src/main/kotlin/jp/co/soramitsu/iroha2/testengine/IrohaRunnerExtension.kt @@ -26,7 +26,6 @@ import org.junit.jupiter.api.extension.BeforeEachCallback import org.junit.jupiter.api.extension.ExtensionContext import org.junit.jupiter.api.extension.InvocationInterceptor import org.junit.jupiter.api.extension.ReflectiveInvocationContext -import org.testcontainers.containers.Network import org.yaml.snakeyaml.Yaml import java.io.File import java.lang.reflect.Method @@ -85,13 +84,11 @@ class IrohaRunnerExtension : InvocationInterceptor, BeforeEachCallback { } private suspend fun WithIroha.init(extensionContext: ExtensionContext): List { - val testInstance = extensionContext.testInstance.get() - val network = testInstance.cast>().network - + val testInstance = extensionContext.testInstance.get().cast>() val utilizedResources = mutableListOf() // start containers - val containers = createContainers(this, network) + val containers = createContainers(this, testInstance) utilizedResources.addAll(containers) val properties = testInstance::class.memberProperties @@ -208,7 +205,7 @@ class IrohaRunnerExtension : InvocationInterceptor, BeforeEachCallback { private suspend fun createContainers( withIroha: WithIroha, - network: Network, + testInstance: IrohaTest<*>, ): List = coroutineScope { val keyPairs = mutableListOf() val portsList = mutableListOf>() @@ -228,7 +225,7 @@ class IrohaRunnerExtension : InvocationInterceptor, BeforeEachCallback { async { val p2pPort = portsList[n][IrohaConfig.P2P_PORT_IDX] val container = IrohaContainer { - this.networkToJoin = network + this.networkToJoin = testInstance.network when { withIroha.source.isNotEmpty() -> genesisPath = withIroha.source else -> genesis = withIroha.sources.map { it.createInstance() }.toSingle() @@ -239,6 +236,8 @@ class IrohaRunnerExtension : InvocationInterceptor, BeforeEachCallback { this.trustedPeers = peerIds this.ports = portsList[n] this.fetchSize = withIroha.fetchSize + this.imageName = testInstance.imageName + this.imageTag = testInstance.imageTag this.envs = withIroha.configs.associate { config -> config.split(IROHA_CONFIG_DELIMITER).let { it.first() to it.last() diff --git a/modules/test-tools/src/main/kotlin/jp/co/soramitsu/iroha2/testengine/IrohaTest.kt b/modules/test-tools/src/main/kotlin/jp/co/soramitsu/iroha2/testengine/IrohaTest.kt index ade999c60..6f6403a67 100644 --- a/modules/test-tools/src/main/kotlin/jp/co/soramitsu/iroha2/testengine/IrohaTest.kt +++ b/modules/test-tools/src/main/kotlin/jp/co/soramitsu/iroha2/testengine/IrohaTest.kt @@ -21,6 +21,8 @@ import java.time.Duration abstract class IrohaTest( val txTimeout: Duration = Duration.ofSeconds(30), val network: Network = Network.newNetwork(), + val imageName: String = IrohaContainer.DEFAULT_IMAGE_NAME, + val imageTag: String = IrohaContainer.DEFAULT_IMAGE_TAG, ) { lateinit var client: T lateinit var containers: List