mirror of
https://github.com/digital-asset/daml.git
synced 2024-09-20 01:07:18 +03:00
Port Ledger API Test Tool to Scala 2.13 (#8875)
* Port Ledger API Test Tool to Scala 2.13 And with that we’re finally at //... building on Scala 2.13. changelog_begin changelog_end * Fix build on 2.12 changelog_begin changelog_end * Fix kvutils export on 2.13 changelog_begin changelog_end
This commit is contained in:
parent
efe0f4a096
commit
182eb825c8
10
ci/build.yml
10
ci/build.yml
@ -175,14 +175,8 @@ jobs:
|
||||
- bash: |
|
||||
set -euo pipefail
|
||||
eval "$(./dev-env/bin/dade-assist)"
|
||||
bazel build --config scala_2_13 -- \
|
||||
//... \
|
||||
-//ledger/ledger-api-test-tool/... \
|
||||
-//runtime-components/non-repudiation-postgresql:test
|
||||
bazel test --config scala_2_13 -- \
|
||||
//... \
|
||||
-//ledger/ledger-api-test-tool/... \
|
||||
-//runtime-components/non-repudiation-postgresql:test
|
||||
bazel build --config scala_2_13 //...
|
||||
bazel test --config scala_2_13 //...
|
||||
displayName: 'Build'
|
||||
- template: tell-slack-failed.yml
|
||||
parameters:
|
||||
|
@ -24,6 +24,7 @@ load(
|
||||
"da_scala_binary",
|
||||
"da_scala_library",
|
||||
"da_scala_test_suite",
|
||||
"silencer_plugin",
|
||||
)
|
||||
load(
|
||||
":conformance.bzl",
|
||||
@ -52,6 +53,10 @@ dar_to_scala(
|
||||
da_scala_library(
|
||||
name = "PackageManagementTest.scala",
|
||||
srcs = [":PackageManagementTest.scala-codegen"],
|
||||
plugins = [silencer_plugin],
|
||||
scalacopts = [
|
||||
"-P:silencer:lineContentFilters=import _root_.scala.language.higherKinds;",
|
||||
],
|
||||
deps = [
|
||||
"//language-support/scala/bindings",
|
||||
],
|
||||
@ -105,6 +110,13 @@ EOF
|
||||
generated_srcs = [
|
||||
":DarsResourceNames%s.scala" % lf_version_suffix,
|
||||
],
|
||||
scala_deps = [
|
||||
"@maven//:com_softwaremill_diffx_diffx_core",
|
||||
"@maven//:com_typesafe_akka_akka_actor",
|
||||
"@maven//:com_typesafe_akka_akka_stream",
|
||||
"@maven//:org_scala_lang_modules_scala_collection_compat",
|
||||
"@maven//:org_scala_lang_modules_scala_java8_compat",
|
||||
],
|
||||
visibility = [
|
||||
"//:__subpackages__",
|
||||
],
|
||||
@ -119,20 +131,26 @@ EOF
|
||||
"//libs-scala/resources-akka",
|
||||
"//libs-scala/resources-grpc",
|
||||
"//libs-scala/timer-utils",
|
||||
"@maven//:com_softwaremill_diffx_diffx_core_2_12",
|
||||
"@maven//:com_typesafe_akka_akka_actor_2_12",
|
||||
"@maven//:com_typesafe_akka_akka_stream_2_12",
|
||||
"@maven//:com_typesafe_config",
|
||||
"@maven//:io_netty_netty_common",
|
||||
"@maven//:io_netty_netty_transport",
|
||||
"@maven//:org_scala_lang_modules_scala_collection_compat_2_12",
|
||||
"@maven//:org_scala_lang_modules_scala_java8_compat_2_12",
|
||||
"@maven//:org_slf4j_slf4j_api",
|
||||
],
|
||||
),
|
||||
da_scala_library_suite(
|
||||
name = "ledger-api-test-tool-test-suites%s" % lf_version_suffix,
|
||||
srcs = glob(["src/main/scala/com/daml/ledger/api/testtool/suites/**/*.scala"]),
|
||||
plugins = [silencer_plugin],
|
||||
scala_deps = [
|
||||
"@maven//:com_chuusai_shapeless",
|
||||
"@maven//:com_propensive_magnolia", # transitive dependency of diffx
|
||||
"@maven//:com_propensive_mercator", # transitive dependency of diffx
|
||||
"@maven//:com_softwaremill_diffx_diffx_core",
|
||||
"@maven//:org_scala_lang_modules_scala_collection_compat",
|
||||
],
|
||||
scalacopts = [
|
||||
"-P:silencer:lineContentFilters=import scala.collection.compat._",
|
||||
],
|
||||
scaladoc = False,
|
||||
visibility = [
|
||||
"//:__subpackages__",
|
||||
@ -149,13 +167,8 @@ EOF
|
||||
"//ledger/test-common:semantic-tests%s.scala" % lf_version_suffix,
|
||||
"//libs-scala/grpc-utils",
|
||||
"//libs-scala/timer-utils",
|
||||
"@maven//:com_chuusai_shapeless_2_12",
|
||||
"@maven//:com_propensive_magnolia_2_12", # transitive dependency of diffx
|
||||
"@maven//:com_propensive_mercator_2_12", # transitive dependency of diffx
|
||||
"@maven//:com_softwaremill_diffx_diffx_core_2_12",
|
||||
"@maven//:io_grpc_grpc_api",
|
||||
"@maven//:io_grpc_grpc_context",
|
||||
"@maven//:org_scala_lang_modules_scala_collection_compat_2_12",
|
||||
"@maven//:org_slf4j_slf4j_api",
|
||||
],
|
||||
),
|
||||
@ -183,6 +196,7 @@ EOF
|
||||
":DarsResourceNames%s.scala" % lf_version_suffix,
|
||||
],
|
||||
main_class = "com.daml.ledger.api.testtool.LedgerApiTestTool",
|
||||
plugins = [silencer_plugin],
|
||||
resources = [
|
||||
"src/main/resources/logback.xml",
|
||||
":PackageManagementTest.dar",
|
||||
@ -190,6 +204,10 @@ EOF
|
||||
],
|
||||
scala_deps = [
|
||||
"@maven//:org_scala_lang_modules_scala_collection_compat",
|
||||
"@maven//:com_github_scopt_scopt",
|
||||
],
|
||||
scalacopts = [
|
||||
"-P:silencer:lineContentFilters=import scala.collection.compat._",
|
||||
],
|
||||
tags = [
|
||||
"maven_coordinates=com.daml:ledger-api-test-tool%s:__VERSION__" % lf_version_suffix,
|
||||
@ -210,7 +228,6 @@ EOF
|
||||
"//libs-scala/resources",
|
||||
"//libs-scala/resources-akka",
|
||||
"//libs-scala/resources-grpc",
|
||||
"@maven//:com_github_scopt_scopt_2_12",
|
||||
"@maven//:io_grpc_grpc_api",
|
||||
"@maven//:io_grpc_grpc_core",
|
||||
"@maven//:io_grpc_grpc_netty",
|
||||
|
@ -34,7 +34,7 @@ def conformance_test(
|
||||
"exclusive",
|
||||
] + tags,
|
||||
flaky = flaky,
|
||||
) if not is_windows and scala_major_version == "2.12" else None
|
||||
) if not is_windows else None
|
||||
|
||||
def server_conformance_test(name, servers, server_args = [], test_tool_args = [], flaky = False):
|
||||
for server_name, server in servers.items():
|
||||
|
@ -12,6 +12,7 @@ import com.daml.ledger.api.testtool.tests.Tests
|
||||
import com.daml.ledger.api.tls.TlsConfiguration
|
||||
import scopt.{OptionParser, Read}
|
||||
|
||||
import scala.collection.compat.immutable.LazyList
|
||||
import scala.concurrent.duration.{DurationInt, FiniteDuration}
|
||||
import scala.util.Try
|
||||
|
||||
@ -231,7 +232,8 @@ object Cli {
|
||||
|
||||
private def oneOfRead[T](readersHead: Read[T], readersTail: Read[T]*): Read[T] = Read.reads {
|
||||
str =>
|
||||
val results = (readersHead #:: Stream(readersTail: _*)).map(reader => Try(reader.reads(str)))
|
||||
val results =
|
||||
(readersHead #:: LazyList(readersTail: _*)).map(reader => Try(reader.reads(str)))
|
||||
results.find(_.isSuccess) match {
|
||||
case Some(value) => value.get
|
||||
case None => results.head.get // throw the first failure
|
||||
|
@ -15,6 +15,7 @@ import io.grpc.Channel
|
||||
import io.grpc.netty.{NegotiationType, NettyChannelBuilder}
|
||||
import org.slf4j.LoggerFactory
|
||||
|
||||
import scala.collection.compat._
|
||||
import scala.concurrent.duration.DurationInt
|
||||
import scala.concurrent.{ExecutionContext, Future}
|
||||
import scala.util.{Failure, Success}
|
||||
@ -126,7 +127,11 @@ object LedgerApiTestTool {
|
||||
}
|
||||
|
||||
val performanceTestsToRun =
|
||||
Tests.performanceTests(config.performanceTestsReport).filterKeys(config.performanceTests)
|
||||
Tests
|
||||
.performanceTests(config.performanceTestsReport)
|
||||
.view
|
||||
.filterKeys(config.performanceTests)
|
||||
.toMap
|
||||
|
||||
if (config.included.nonEmpty && performanceTestsToRun.nonEmpty) {
|
||||
println("Either regular or performance tests can be run, but not both.")
|
||||
|
@ -10,7 +10,7 @@ import com.daml.grpc.{GrpcException, GrpcStatus}
|
||||
import io.grpc.Status
|
||||
|
||||
import scala.concurrent.Future
|
||||
import scala.language.{higherKinds, implicitConversions}
|
||||
import scala.language.implicitConversions
|
||||
import scala.util.control.NonFatal
|
||||
|
||||
object Assertions extends DiffExtensions {
|
||||
|
@ -6,7 +6,7 @@ package com.daml.ledger.api.testtool.infrastructure
|
||||
import java.io.PrintStream
|
||||
import java.nio.file.{Files, Path, StandardOpenOption}
|
||||
|
||||
import scala.collection.JavaConverters._
|
||||
import scala.jdk.CollectionConverters._
|
||||
|
||||
trait BenchmarkReporter {
|
||||
|
||||
|
@ -9,7 +9,7 @@ import scala.collection.immutable
|
||||
import scala.concurrent.duration.Duration
|
||||
|
||||
sealed abstract class Envelope(val name: String) extends Product with Serializable {
|
||||
def this(names: Vector[String]) {
|
||||
def this(names: Vector[String]) = {
|
||||
this(names.mkString(Envelope.Separator))
|
||||
}
|
||||
}
|
||||
|
@ -59,7 +59,7 @@ final class LedgerTestCasesRunner(
|
||||
private def start(test: LedgerTestCase, session: LedgerSession)(implicit
|
||||
executionContext: ExecutionContext
|
||||
): Future[Duration] = {
|
||||
val execution = Promise[Duration]
|
||||
val execution = Promise[Duration]()
|
||||
val scaledTimeout = DefaultTimeout * timeoutScaleFactor * test.timeoutScale
|
||||
|
||||
val startedTest =
|
||||
|
@ -52,7 +52,7 @@ object Reporter {
|
||||
|
||||
private def indented(msg: String, n: Int = 2): String = {
|
||||
val indent = " " * n
|
||||
msg.lines.map(l => s"$indent$l").mkString("\n")
|
||||
msg.linesIterator.map(l => s"$indent$l").mkString("\n")
|
||||
}
|
||||
|
||||
private def printReport(results: Vector[LedgerTestSummary]): Unit =
|
||||
|
@ -11,6 +11,7 @@ import com.daml.ledger.packagemanagementtest.PackageManagementTest.PackageManage
|
||||
import com.google.protobuf.ByteString
|
||||
import io.grpc.Status
|
||||
|
||||
import scala.collection.compat._
|
||||
import scala.concurrent.{ExecutionContext, Future}
|
||||
|
||||
final class PackageManagementServiceIT extends LedgerTestSuite {
|
||||
@ -59,7 +60,7 @@ final class PackageManagementServiceIT extends LedgerTestSuite {
|
||||
acsAfter <- ledger.activeContracts(party)
|
||||
} yield {
|
||||
val duplicatePackageIds =
|
||||
knownPackages.groupBy(_.packageId).mapValues(_.size).filter(_._2 > 1)
|
||||
knownPackages.groupBy(_.packageId).view.mapValues(_.size).filter(_._2 > 1).toMap
|
||||
assert(
|
||||
duplicatePackageIds.isEmpty,
|
||||
s"There are duplicate package identifiers: ${duplicatePackageIds
|
||||
|
@ -14,6 +14,7 @@ import io.grpc.Status
|
||||
import scalaz.Tag
|
||||
import scalaz.syntax.tag.ToTagOps
|
||||
|
||||
import scala.collection.compat._
|
||||
import scala.util.Random
|
||||
|
||||
final class PartyManagementServiceIT extends LedgerTestSuite {
|
||||
@ -135,7 +136,7 @@ final class PartyManagementServiceIT extends LedgerTestSuite {
|
||||
for {
|
||||
parties <- ledger.allocateParties(100)
|
||||
} yield {
|
||||
val nonUniqueNames = parties.groupBy(Tag.unwrap).mapValues(_.size).filter(_._2 > 1)
|
||||
val nonUniqueNames = parties.groupBy(Tag.unwrap).view.mapValues(_.size).filter(_._2 > 1).toMap
|
||||
assert(
|
||||
nonUniqueNames.isEmpty,
|
||||
s"There are non-unique party names: ${nonUniqueNames
|
||||
|
@ -132,7 +132,7 @@ sealed trait PerformanceEnvelope[E <: Envelope] {
|
||||
val finished = Instant.now
|
||||
(
|
||||
Duration.between(started, finished),
|
||||
timings.values.flatMap(_.right.toOption.toList).toList,
|
||||
timings.values.flatMap(_.toOption.toList).toList,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
@ -36,6 +36,7 @@ import com.softwaremill.diffx.generic.auto._
|
||||
import io.grpc.Status
|
||||
import scalaz.Tag
|
||||
|
||||
import scala.collection.compat._
|
||||
import scala.collection.mutable
|
||||
import scala.concurrent.Future
|
||||
|
||||
@ -1652,7 +1653,7 @@ object TransactionServiceIT {
|
||||
t.copy(
|
||||
commandId = "commandId",
|
||||
offset = "offset",
|
||||
eventsById = t.eventsById.mapValues(_.modifyWitnessParties(_.sorted)),
|
||||
eventsById = t.eventsById.view.mapValues(_.modifyWitnessParties(_.sorted)).toMap,
|
||||
)
|
||||
)
|
||||
.sortBy(_.transactionId)
|
||||
|
@ -228,11 +228,11 @@ client_server_build(
|
||||
"--participant=participant-id=%s,port=%d" % (REFERENCE_LEDGER_EXPORT_NAME, REFERENCE_LEDGER_EXPORT_PORT),
|
||||
],
|
||||
visibility = [":__subpackages__"],
|
||||
) if not is_windows and scala_major_version == "2.12" else None
|
||||
) if not is_windows else None
|
||||
|
||||
# Test for checking the integrity of the ledger export produced above.
|
||||
integrity_test(
|
||||
name = "%s-integrity-test" % REFERENCE_LEDGER_EXPORT_NAME,
|
||||
checker = "//ledger/participant-state/kvutils/tools:integrity-check",
|
||||
dump = ":%s" % REFERENCE_LEDGER_EXPORT_NAME,
|
||||
) if not is_windows and scala_major_version == "2.12" else None
|
||||
) if not is_windows else None
|
||||
|
@ -45,10 +45,8 @@ da_scala_test(
|
||||
"@maven//:org_typelevel_cats_core",
|
||||
"@maven//:org_typelevel_cats_effect",
|
||||
"@maven//:org_typelevel_cats_kernel",
|
||||
"@maven//:org_scala_lang_modules_scala_collection_compat",
|
||||
],
|
||||
versioned_scala_deps = {
|
||||
"2.12": ["@maven//:org_scala_lang_modules_scala_collection_compat"],
|
||||
},
|
||||
runtime_deps = [
|
||||
"@maven//:ch_qos_logback_logback_classic",
|
||||
],
|
||||
@ -78,5 +76,6 @@ da_scala_test(
|
||||
"@maven//:io_grpc_grpc_api",
|
||||
"@maven//:io_grpc_grpc_core",
|
||||
"@maven//:io_grpc_grpc_netty",
|
||||
"@maven//:org_slf4j_slf4j_api",
|
||||
],
|
||||
)
|
||||
|
@ -30,7 +30,7 @@ import doobie.hikari.HikariTransactor
|
||||
import doobie.util.log.LogHandler
|
||||
import io.grpc.inprocess.{InProcessChannelBuilder, InProcessServerBuilder}
|
||||
import io.grpc.netty.NettyChannelBuilder
|
||||
import org.scalatest.EitherValues
|
||||
import org.scalatest.OptionValues
|
||||
import org.scalatest.flatspec.AsyncFlatSpec
|
||||
import org.scalatest.matchers.should.Matchers
|
||||
import sun.security.tools.keytool.CertAndKeyGen
|
||||
@ -42,7 +42,7 @@ import scala.concurrent.duration.DurationInt
|
||||
final class NonRepudiationProxyConformance
|
||||
extends AsyncFlatSpec
|
||||
with Matchers
|
||||
with EitherValues
|
||||
with OptionValues
|
||||
with PostgresAroundAll {
|
||||
|
||||
import NonRepudiationProxyConformance._
|
||||
@ -104,7 +104,7 @@ final class NonRepudiationProxyConformance
|
||||
runner.runTests.map { summaries =>
|
||||
summaries.foldLeft(succeed) { case (_, LedgerTestSummary(_, name, description, result)) =>
|
||||
withClue(s"$name: $description") {
|
||||
result.right.value shouldBe a[Result.Succeeded]
|
||||
result.toOption.value shouldBe a[Result.Succeeded]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user