Skip to content
Merged
Show file tree
Hide file tree
Changes from 6 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/check-pr.yml
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ jobs:

local-network:
name: Run Local Network tests
timeout-minutes: 10
timeout-minutes: 15
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
Expand Down
53 changes: 38 additions & 15 deletions build.sbt
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
import com.github.sbt.git.SbtGit.GitKeys.gitCurrentBranch

enablePlugins(UniversalDeployPlugin, GitVersioning, sbtdocker.DockerPlugin, VersionObject)
import scala.sys.process.{Process, ProcessLogger}

enablePlugins(UniversalDeployPlugin, GitVersioning, VersionObject)

git.useGitDescribe := true
git.baseVersion := "1.3.0"
git.baseVersion := "1.4.0"
git.uncommittedSignifier := Some("DIRTY")

inScope(Global)(
Expand Down Expand Up @@ -32,16 +34,32 @@ inScope(Global)(
name := "consensus-client"
maintainer := "Units Network Team"

// These overrides are needed so that there are no different versions of the same component on the classpath when the extension is installed
dependencyOverrides ++= Seq(
"org.playframework" %% "play-json" % "3.0.6",
"com.squareup.okhttp3" % "okhttp" % "4.12.0",
"com.squareup.okhttp3" % "logging-interceptor" % "4.12.0",
"com.squareup.okio" % "okio" % "3.6.0",
"com.squareup.okio" % "okio-jvm" % "3.16.4",
"org.reactivestreams" % "reactive-streams" % "1.0.4",
"org.jetbrains.kotlin" % "kotlin-stdlib" % "2.2.20",
"org.jetbrains.kotlin" % "kotlin-stdlib-jdk7" % "1.8.21",
"org.jetbrains.kotlin" % "kotlin-stdlib-jdk8" % "1.8.21"
)

libraryDependencies ++= {
val node = "1.5.12"
val node = "1.6.1"
val sttpVersion = "3.11.0"
Seq(
"com.wavesplatform" % "node-testkit" % node % Test,
"com.wavesplatform" % "node" % node % Provided,
"com.softwaremill.sttp.client3" %% "core" % sttpVersion,
"com.softwaremill.sttp.client3" %% "play-json" % sttpVersion,
"com.github.jwt-scala" %% "jwt-play-json" % "11.0.3",
"org.web3j" % "core" % "4.9.8"
("org.web3j" % "core" % "4.9.8").excludeAll(
ExclusionRule("org.slf4j", "slf4j-api"),
ExclusionRule("org.bouncycastle", "bcprov-jdk15on")
)
)
}

Expand Down Expand Up @@ -95,18 +113,23 @@ buildTarballsForDocker := {
)
}

inTask(docker)(
Seq(
imageNames := Seq(
ImageName(s"consensus-client:${gitCurrentBranch.value}"), // Integration tests
ImageName("consensus-client:local") // local-network
),
dockerfile := NativeDockerfile(baseDirectory.value / "docker" / "Dockerfile"),
buildOptions := BuildOptions(
pullBaseImage = BuildOptions.Pull.IfMissing
)
val docker = taskKey[Unit]("Build docker image for integration tests")
docker := {
val log = streams.value.log

val cwd = baseDirectory.value / "docker"

val cmd = Seq("docker", "build", "-t", "consensus-client:local", "-t", s"consensus-client:${gitCurrentBranch.value}", ".")
log.info(s"Running `${cmd.mkString(" ")}` from $cwd")

val processLogger = ProcessLogger(
(out: String) => log.info(out),
(err: String) => log.info(err) // Redirect STDERR to info
)
)

val exit = Process(cmd, cwd).!(processLogger)
if (exit != 0) sys.error(s"Docker build failed with exit code $exit")
}

docker := docker.dependsOn(LocalRootProject / buildTarballsForDocker).value

Expand Down
2 changes: 1 addition & 1 deletion consensus-client-it/build.sbt
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ import scala.util.control.NonFatal
description := "Consensus client integration tests"

libraryDependencies ++= Seq(
"org.testcontainers" % "testcontainers" % "2.0.1",
"org.testcontainers" % "testcontainers" % "2.0.3",
"org.web3j" % "core" % "4.9.8"
).map(_ % Test)

Expand Down
21 changes: 20 additions & 1 deletion local-network/restart.sh
Original file line number Diff line number Diff line change
Expand Up @@ -16,4 +16,23 @@ export COMPOSE_PROFILES="${COMPOSE_PROFILES:-}"
echo "Compose profiles are: ${COMPOSE_PROFILES}"

docker compose up -d
docker compose logs deploy tests -f

# HACK: This command hangs forever in a new Docker version: docker compose logs deploy tests -f
mapfile -t ids < <(docker compose ps -aq deploy tests)

if ((${#ids[@]} > 0)); then
pids=()

# Follow logs in background
for id in "${ids[@]}"; do
docker logs -f "$id" &
pids+=("$!")
done

# Wait for containers to exit
docker wait "${ids[@]}" >/dev/null

# Stop log followers
kill "${pids[@]}" 2>/dev/null || true
wait "${pids[@]}" 2>/dev/null || true
fi
2 changes: 1 addition & 1 deletion project/build.properties
Original file line number Diff line number Diff line change
@@ -1 +1 @@
sbt.version=1.11.2
sbt.version=1.12.3
1 change: 0 additions & 1 deletion project/plugins.sbt
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,5 @@ libraryDependencies ++= Seq(
Seq(
"com.github.sbt" % "sbt-native-packager" % "1.10.0",
"com.github.sbt" % "sbt-ci-release" % "1.5.12",
"se.marcuslonnberg" % "sbt-docker" % "1.10.0",
"org.scalameta" % "sbt-scalafmt" % "2.5.4"
).map(addSbtPlugin)
2 changes: 1 addition & 1 deletion src/test/scala/units/C2ETransfersTestSuite.scala
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ class C2ETransfersTestSuite extends BaseTestSuite {
"0x" -> "Invalid Ethereum address",
"000000000000000000000000000000000000000003" -> "Invalid Ethereum address",
"0x00000000000000000000000000000000000001" -> "Invalid Ethereum address",
"QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ" -> "Unrecognized character: q"
"QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ" -> "Unrecognized character: Q"
)
) { case (address, message) =>
transferFuncTest(address) should produce(message)
Expand Down
3 changes: 2 additions & 1 deletion src/test/scala/units/ExtensionDomain.scala
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ package units

import cats.syntax.either.*
import com.wavesplatform.account.{Address, KeyPair, PublicKey, SeedKeyPair}
import com.wavesplatform.api.common.{CommonAccountsApi, CommonAssetsApi, CommonBlocksApi, CommonTransactionsApi}
import com.wavesplatform.api.common.{CommonAccountsApi, CommonAssetsApi, CommonBlocksApi, CommonGeneratorsApi, CommonTransactionsApi}
import com.wavesplatform.api.http.requests.InvokeScriptRequest.FunctionCallPart
import com.wavesplatform.api.http.utils.UtilsEvaluator
import com.wavesplatform.block.Block.BlockId
Expand Down Expand Up @@ -119,6 +119,7 @@ class ExtensionDomain(
override def blocksApi: CommonBlocksApi = self.blocksApi
override def accountsApi: CommonAccountsApi = self.accountsApi
override def assetsApi: CommonAssetsApi = self.assetsApi
override def generatorsApi: CommonGeneratorsApi = self.generatorsApi

override def utxEvents: Observable[UtxEvent] = Observable.empty
}
Expand Down
3 changes: 2 additions & 1 deletion src/test/scala/units/TestSettings.scala
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package units
import com.typesafe.config.ConfigFactory
import com.wavesplatform.account.{Address, KeyPair, PrivateKey, SeedKeyPair}
import com.wavesplatform.db.WithState.AddrWithBalance
import com.wavesplatform.history.Domain
import com.wavesplatform.settings.WavesSettings
import com.wavesplatform.state.Height
import com.wavesplatform.test.{DomainPresets, NumericExt}
Expand All @@ -23,7 +24,7 @@ case class TestSettings(
def finalAdditionalBalances: List[AddrWithBalance] = additionalBalances ++
initialMiners.collect { case x if !additionalBalances.exists(_.address == x.address) => AddrWithBalance(x.address, x.wavesBalance) }

def walletSeed: Array[Byte] = wavesSettings.walletSettings.seed.getOrElse(throw new RuntimeException("No wallet seed")).arr
def walletSeed: Array[Byte] = Domain.DefaultWalletSeed

def withEnabledElMining: TestSettings = copy(wavesSettings =
wavesSettings.copy(config = ConfigFactory.parseString("units.defaults.mining-enable = true").withFallback(wavesSettings.config))
Expand Down