From 77345826f50c53df5fb872263cc3155d6a104e1f Mon Sep 17 00:00:00 2001 From: gv-timur Date: Tue, 23 Jan 2024 16:12:34 +0300 Subject: [PATCH] feature: get executor from test resource folder (#402) * feature: get executor from test resource folder Signed-off-by: Timur Guskov * feature: get executor from custom path Signed-off-by: Timur Guskov * feature: added test Signed-off-by: Timur Guskov --------- Signed-off-by: Timur Guskov Co-authored-by: Timur Guskov --- .../jp/co/soramitsu/iroha2/GenesisTest.kt | 18 ++++++++++++++++++ .../soramitsu/iroha2/testengine/IrohaConfig.kt | 1 + .../iroha2/testengine/IrohaContainer.kt | 11 +++++++++-- .../iroha2/testengine/IrohaRunnerExtension.kt | 3 +++ .../soramitsu/iroha2/testengine/WithIroha.kt | 1 + 5 files changed, 32 insertions(+), 2 deletions(-) diff --git a/modules/client/src/test/kotlin/jp/co/soramitsu/iroha2/GenesisTest.kt b/modules/client/src/test/kotlin/jp/co/soramitsu/iroha2/GenesisTest.kt index f019cedb5..39f8a47c7 100644 --- a/modules/client/src/test/kotlin/jp/co/soramitsu/iroha2/GenesisTest.kt +++ b/modules/client/src/test/kotlin/jp/co/soramitsu/iroha2/GenesisTest.kt @@ -1,14 +1,19 @@ package jp.co.soramitsu.iroha2 import jp.co.soramitsu.iroha2.client.Iroha2Client +import jp.co.soramitsu.iroha2.generated.AssetDefinitionId +import jp.co.soramitsu.iroha2.generated.AssetValueType import jp.co.soramitsu.iroha2.query.QueryBuilder import jp.co.soramitsu.iroha2.testengine.ALICE_ACCOUNT_ID import jp.co.soramitsu.iroha2.testengine.BOB_ACCOUNT_ID +import jp.co.soramitsu.iroha2.testengine.DEFAULT_DOMAIN_ID +import jp.co.soramitsu.iroha2.testengine.DefaultGenesis import jp.co.soramitsu.iroha2.testengine.IrohaContainer import jp.co.soramitsu.iroha2.testengine.IrohaTest import jp.co.soramitsu.iroha2.testengine.WithIroha import kotlinx.coroutines.runBlocking import org.junit.jupiter.api.Test +import kotlin.test.assertEquals class GenesisTest : IrohaTest() { companion object { @@ -36,6 +41,19 @@ class GenesisTest : IrohaTest() { client.checkAliceAndBobExists() } + @Test + @WithIroha([DefaultGenesis::class], executorSource = "src/test/resources/executor.wasm") + fun `custom executor path`(): Unit = runBlocking { + val definitionId = AssetDefinitionId("XSTUSD".asName(), DEFAULT_DOMAIN_ID) + client.tx { registerAssetDefinition(definitionId, AssetValueType.Quantity()) } + + QueryBuilder.findAssetDefinitionById(definitionId) + .account(super.account) + .buildSigned(super.keyPair) + .let { query -> client.sendQuery(query) } + .also { assetDefinition -> assertEquals(assetDefinition.id, definitionId) } + } + private suspend fun Iroha2Client.checkAliceAndBobExists() { QueryBuilder.findAllAccounts() .account(ALICE_ACCOUNT_ID) diff --git a/modules/test-tools/src/main/kotlin/jp/co/soramitsu/iroha2/testengine/IrohaConfig.kt b/modules/test-tools/src/main/kotlin/jp/co/soramitsu/iroha2/testengine/IrohaConfig.kt index d367c1af4..fe8848dc1 100644 --- a/modules/test-tools/src/main/kotlin/jp/co/soramitsu/iroha2/testengine/IrohaConfig.kt +++ b/modules/test-tools/src/main/kotlin/jp/co/soramitsu/iroha2/testengine/IrohaConfig.kt @@ -43,6 +43,7 @@ class IrohaConfig( var submitGenesis: Boolean = true, var envs: Map = emptyMap(), var fetchSize: Int = 10, + var executorPath: String? = null, ) { companion object { const val P2P_PORT_IDX = 0 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 2be680215..754e695e5 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 @@ -16,6 +16,7 @@ import java.time.Duration import java.util.UUID.randomUUID import kotlin.io.path.Path import kotlin.io.path.absolute +import kotlin.io.path.readBytes /** * Docker container for Iroha @@ -72,8 +73,14 @@ open class IrohaContainer : GenericContainer { config.genesis?.writeToFile(genesisFileLocation) config.genesisPath?.also { path -> Files.copy(Path(path).toAbsolutePath(), genesisFileLocation) } - getResource(DEFAULT_EXECUTOR_FILE_NAME).readBytes().let { content -> - executorFileLocation.toFile().writeBytes(content) + if (config.executorPath != null) { + Path(config.executorPath!!).toAbsolutePath().readBytes().let { content -> + executorFileLocation.toFile().writeBytes(content) + } + } else { + getResource(DEFAULT_EXECUTOR_FILE_NAME).readBytes().let { content -> + executorFileLocation.toFile().writeBytes(content) + } } getResource(DEFAULT_CONFIG_FILE_NAME).readBytes().let { content -> configFileLocation.toFile().writeBytes(content) 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 f3e28fa89..2a0e41a69 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 @@ -246,6 +246,9 @@ class IrohaRunnerExtension : InvocationInterceptor, BeforeEachCallback { } // only first peer should have --submit-genesis in peer start command this.submitGenesis = n == 0 + if (withIroha.executorSource.isNotEmpty()) { + this.executorPath = withIroha.executorSource + } } container.start() containers.add(container) diff --git a/modules/test-tools/src/main/kotlin/jp/co/soramitsu/iroha2/testengine/WithIroha.kt b/modules/test-tools/src/main/kotlin/jp/co/soramitsu/iroha2/testengine/WithIroha.kt index 159b1e03c..7b488f255 100644 --- a/modules/test-tools/src/main/kotlin/jp/co/soramitsu/iroha2/testengine/WithIroha.kt +++ b/modules/test-tools/src/main/kotlin/jp/co/soramitsu/iroha2/testengine/WithIroha.kt @@ -23,6 +23,7 @@ annotation class WithIroha( val source: String = "", val amount: Int = 1, val fetchSize: Int = 10, + val executorSource: String = "", ) @MustBeDocumented