daml/ledger/ledger-on-sql/BUILD.bazel
fabiotudone-da a03f52a15e
Add ledger API tests about command deduplication information in completions [KVL-1057] (#10748)
* Add Ledger API Test Tool tests about command deduplication information present in completions

CHANGELOG_BEGIN
CHANGELOG_END

* Address review comments

* Fix offset reference and move new tests to a separate, optional suite

* Cover rejections as well

* Test both the command and command submission services

* Run new test suite (only) on sandbox-classic append-only and daml-on-sql

* Use the append-only schema with daml-on-sql for CommandDeduplicationInfoIT

* Fix tests except offset, successful completions only.

* Remove completion offset test as it's not supported by most ledgers

* Remove support for multiple submissions as rejection completions are not being tested for the moment

* Consolidate test cases for faster run

* Avoid forbidden characters in short identifiers

* Clarify assert

* Remove wrong test about deduplication time being preserved in completion

* Adhere to the Scala style guide

* Eliminate some code duplication

* fmt

* Make 3e404be compile

* Never assume a specific deduplication period format in completions

* Code cleanup

* Pass party to completionStreamRequest to avoid ILLEGAL_ARG failures

* Enable in append-only mode for all ledgers that support it

* Clarify that the new tests are append-only-only

* Update ledger/ledger-on-sql/BUILD.bazel

Fix suite name

* Update ledger/sandbox-classic/BUILD.bazel

Fix suite name

* fmt
2021-09-09 07:56:14 +00:00

666 lines
24 KiB
Python

# Copyright (c) 2021 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved.
# SPDX-License-Identifier: Apache-2.0
load(
"//bazel_tools:scala.bzl",
"da_scala_binary",
"da_scala_library",
"da_scala_test_suite",
"silencer_plugin",
)
load("//ledger/ledger-api-test-tool:conformance.bzl", "conformance_test")
load("@oracle//:index.bzl", "oracle_testing")
supported_databases = [
{
"name": "h2-memory",
"runtime_deps": [
"@maven//:com_h2database_h2",
],
"conformance_test_tags": [
"manual",
],
"conformance_test_server_args": [
"--jdbc-url=jdbc:h2:mem:daml-on-sql-conformance-test",
],
},
{
"name": "postgresql",
"runtime_deps": [
"@maven//:org_postgresql_postgresql",
],
"conformance_test_server_main": "com.daml.ledger.on.sql.MainWithEphemeralPostgresql",
},
{
"name": "sqlite-memory",
"runtime_deps": [
"@maven//:org_xerial_sqlite_jdbc",
],
"conformance_test_server_args": [
"--jdbc-url=jdbc:sqlite:file:daml-on-sql-conformance-test?mode=memory&cache=shared",
],
},
]
all_database_runtime_deps = {dep: None for db in supported_databases for dep in db["runtime_deps"]}.keys()
da_scala_library(
name = "ledger-on-sql",
srcs = glob(["src/main/scala/**/*.scala"]),
plugins = [
silencer_plugin,
],
resources = glob(["src/main/resources/**/*"]),
scala_deps = [
"@maven//:com_typesafe_akka_akka_actor",
"@maven//:com_typesafe_akka_akka_stream",
"@maven//:org_playframework_anorm_anorm",
"@maven//:org_playframework_anorm_anorm_tokenizer",
"@maven//:org_scala_lang_modules_scala_collection_compat",
"@maven//:org_scalaz_scalaz_core",
],
tags = ["maven_coordinates=com.daml:ledger-on-sql:__VERSION__"],
visibility = [
"//visibility:public",
],
deps = [
"//daml-lf/data",
"//daml-lf/engine",
"//language-support/scala/bindings",
"//ledger/caching",
"//ledger/ledger-api-common",
"//ledger/ledger-api-domain",
"//ledger/ledger-api-health",
"//ledger/ledger-configuration",
"//ledger/ledger-offset",
"//ledger/ledger-resources",
"//ledger/metrics",
"//ledger/participant-state",
"//ledger/participant-state/kvutils",
"//libs-scala/concurrent",
"//libs-scala/contextualized-logging",
"//libs-scala/resources",
"//libs-scala/resources-akka",
"//libs-scala/resources-grpc",
"@maven//:com_google_protobuf_protobuf_java",
"@maven//:com_zaxxer_HikariCP",
"@maven//:io_dropwizard_metrics_metrics_core",
"@maven//:org_flywaydb_flyway_core",
],
)
da_scala_library(
name = "ledger-on-sql-app",
srcs = glob(["src/app/scala/**/*.scala"]),
resources = glob(["src/app/resources/**/*"]),
scala_deps = [
"@maven//:com_github_scopt_scopt",
"@maven//:com_typesafe_akka_akka_actor",
"@maven//:com_typesafe_akka_akka_stream",
],
visibility = ["//visibility:public"],
deps = [
":ledger-on-sql",
"//daml-lf/data",
"//daml-lf/engine",
"//language-support/scala/bindings",
"//ledger/caching",
"//ledger/ledger-api-auth",
"//ledger/ledger-api-health",
"//ledger/ledger-configuration",
"//ledger/ledger-resources",
"//ledger/metrics",
"//ledger/participant-integration-api",
"//ledger/participant-state",
"//ledger/participant-state/kvutils",
"//ledger/participant-state/kvutils/app",
"//libs-scala/contextualized-logging",
"//libs-scala/ports",
"//libs-scala/resources",
],
)
da_scala_binary(
name = "app",
main_class = "com.daml.ledger.on.sql.Main",
visibility = ["//visibility:public"],
runtime_deps = [
"@maven//:ch_qos_logback_logback_classic",
"@maven//:ch_qos_logback_logback_core",
] + all_database_runtime_deps,
deps = [
":ledger-on-sql-app",
],
)
da_scala_library(
name = "ledger-on-sql-test-lib",
srcs = glob(["src/test/lib/scala/**/*.scala"]),
scala_deps = [
"@maven//:com_github_scopt_scopt",
"@maven//:com_typesafe_akka_akka_actor",
"@maven//:com_typesafe_akka_akka_stream",
"@maven//:org_scalactic_scalactic",
"@maven//:org_scalatest_scalatest_core",
"@maven//:org_scalatest_scalatest_flatspec",
"@maven//:org_scalatest_scalatest_matchers_core",
"@maven//:org_scalatest_scalatest_shouldmatchers",
"@maven//:org_scalatest_scalatest_wordspec",
"@maven//:org_scalaz_scalaz_core",
],
visibility = [
"//visibility:public",
],
deps = [
":ledger-on-sql",
":ledger-on-sql-app",
"//daml-lf/data",
"//daml-lf/engine",
"//language-support/scala/bindings",
"//ledger-api/rs-grpc-bridge",
"//ledger-api/testing-utils",
"//ledger/caching",
"//ledger/ledger-api-health",
"//ledger/ledger-configuration",
"//ledger/ledger-resources",
"//ledger/metrics",
"//ledger/participant-integration-api",
"//ledger/participant-state",
"//ledger/participant-state/kvutils",
"//ledger/participant-state/kvutils:kvutils-tests-lib",
"//ledger/participant-state/kvutils/app",
"//libs-scala/concurrent",
"//libs-scala/contextualized-logging",
"//libs-scala/oracle-testing",
"//libs-scala/ports",
"//libs-scala/postgresql-testing",
"//libs-scala/resources",
"@maven//:com_google_protobuf_protobuf_java",
"@maven//:io_dropwizard_metrics_metrics_core",
"@maven//:org_scalatest_scalatest_compatible",
],
)
da_scala_test_suite(
name = "ledger-on-sql-tests",
srcs = glob(["src/test/suite/**/*.scala"]),
data = [
"//ledger/test-common:model-tests-default.dar",
],
resources = glob(["src/test/resources/*"]),
scala_deps = [
"@maven//:com_typesafe_akka_akka_actor",
"@maven//:com_typesafe_akka_akka_stream",
"@maven//:org_scala_lang_modules_scala_java8_compat",
"@maven//:org_scalactic_scalactic",
"@maven//:org_scalatest_scalatest_core",
"@maven//:org_scalatest_scalatest_flatspec",
"@maven//:org_scalatest_scalatest_matchers_core",
"@maven//:org_scalatest_scalatest_shouldmatchers",
"@maven//:org_scalatest_scalatest_wordspec",
"@maven//:org_scalaz_scalaz_core",
],
runtime_deps = [
"@maven//:ch_qos_logback_logback_classic",
"@maven//:ch_qos_logback_logback_core",
] + all_database_runtime_deps,
deps = [
":ledger-on-sql",
":ledger-on-sql-test-lib",
"//daml-lf/data",
"//daml-lf/engine",
"//ledger-api/rs-grpc-bridge",
"//ledger-api/testing-utils",
"//ledger/ledger-api-common",
"//ledger/ledger-api-health",
"//ledger/ledger-configuration",
"//ledger/ledger-resources",
"//ledger/ledger-resources:ledger-resources-test-lib",
"//ledger/metrics",
"//ledger/participant-integration-api",
"//ledger/participant-state",
"//ledger/participant-state/kvutils",
"//ledger/participant-state/kvutils:kvutils-tests-lib",
"//libs-scala/concurrent",
"//libs-scala/contextualized-logging",
"//libs-scala/flyway-testing",
"//libs-scala/postgresql-testing",
"//libs-scala/resources",
"@maven//:com_google_protobuf_protobuf_java",
"@maven//:io_dropwizard_metrics_metrics_core",
"@maven//:org_flywaydb_flyway_core",
"@maven//:org_scalatest_scalatest_compatible",
],
)
[
conformance_test(
name = "conformance-test-{}".format(db["name"]),
lf_versions = [
"default",
"latest",
"preview",
],
ports = [6865],
server = ":conformance-test-{}-bin".format(db["name"]),
server_args = [
"--contract-id-seeding=testing-weak",
"--participant participant-id=conformance-test,port=6865",
] + db.get("conformance_test_server_args", []),
tags = db.get("conformance_test_tags", []),
test_tool_args = db.get("conformance_test_tool_args", []) + [
"--verbose",
"--exclude=CommandDeduplicationIT", # It's a KV ledger so it needs the KV variant
],
)
for db in supported_databases
]
[
(
da_scala_binary(
name = "conformance-test-{}-bin".format(db["name"]),
main_class = db.get("conformance_test_server_main", "com.daml.ledger.on.sql.Main"),
visibility = ["//visibility:public"],
runtime_deps = db.get("runtime_deps", []),
deps = [
":ledger-on-sql",
":ledger-on-sql-test-lib",
],
),
conformance_test(
name = "conformance-test-participant-pruning-{}".format(db["name"]),
ports = [6865],
server = ":conformance-test-{}-bin".format(db["name"]),
server_args = [
"--contract-id-seeding=testing-weak",
"--participant participant-id=conformance-test,port=6865",
] + db.get("conformance_test_server_args", []),
tags = db.get("conformance_test_tags", []),
test_tool_args = db.get("conformance_test_tool_args", []) + [
"--verbose",
"--include=ParticipantPruningIT",
# Disable tests targeting only append-only schema functionality
"--exclude=ParticipantPruningIT:PRLocalAndNonLocalRetroactiveDivulgences,ParticipantPruningIT:PRRetroactiveDivulgences,ParticipantPruningIT:PRImmediateAndRetroactiveDivulgence",
],
),
conformance_test(
name = "conformance-test-multi-party-submission-{}".format(db["name"]),
ports = [6865],
server = ":conformance-test-{}-bin".format(db["name"]),
server_args = [
"--contract-id-seeding=testing-weak",
"--participant participant-id=conformance-test,port=6865",
] + db.get("conformance_test_server_args", []),
tags = db.get("conformance_test_tags", []),
test_tool_args = db.get("conformance_test_tool_args", []) + [
"--verbose",
"--include=MultiPartySubmissionIT",
],
),
conformance_test(
name = "conformance-test-kv-command-deduplication-{}".format(db["name"]),
ports = [6865],
server = ":conformance-test-{}-bin".format(db["name"]),
server_args = [
"--contract-id-seeding=testing-weak",
"--participant participant-id=conformance-test,port=6865",
] + db.get("conformance_test_server_args", []),
tags = db.get("conformance_test_tags", []),
test_tool_args = db.get("conformance_test_tool_args", []) + [
"--include=KVCommandDeduplicationIT",
],
),
conformance_test(
name = "benchmark-performance-envelope-{}".format(db["name"]),
ports = [6865],
server = ":conformance-test-{}-bin".format(db["name"]),
server_args = [
"--contract-id-seeding=testing-weak",
"--participant participant-id=example,port=6865",
] + db.get("conformance_test_server_args", []),
tags = db.get("benchmark_performance_envelope_tags", []),
test_tool_args = db.get("benchmark_performance_envelope_tags", []) + [
"--verbose",
"--perf-tests=PerformanceEnvelope.Throughput.TwentyOPS",
"--perf-tests=PerformanceEnvelope.Latency.1000ms",
"--perf-tests=PerformanceEnvelope.TransactionSize.1000KB",
],
),
)
for db in supported_databases
]
da_scala_binary(
name = "conformance-test-oracle-bin",
main_class = "com.daml.ledger.on.sql.MainWithEphemeralOracleUser",
visibility = ["//visibility:public"],
runtime_deps = [
"@maven//:com_oracle_database_jdbc_ojdbc8",
],
deps = [
":ledger-on-sql",
":ledger-on-sql-test-lib",
],
)
conformance_test(
name = "conformance-test-append-only-postgres",
ports = [6865],
server = ":conformance-test-postgresql-bin",
server_args = [
"--contract-id-seeding=testing-weak",
"--participant participant-id=conformance-test,port=6865,contract-state-cache-max-size=1,contract-key-state-cache-max-size=1",
"--index-append-only-schema",
"--mutable-contract-state-cache",
],
tags = [],
test_tool_args = [
"--verbose",
"--exclude=CommandDeduplicationIT", # It's a KV ledger so it needs the KV variant
],
)
conformance_test(
name = "conformance-test-append-only-h2",
ports = [6865],
server = ":conformance-test-h2-memory-bin",
server_args = [
"--contract-id-seeding=testing-weak",
"--participant participant-id=conformance-test,port=6865,contract-state-cache-max-size=1,contract-key-state-cache-max-size=1",
"--index-append-only-schema",
"--mutable-contract-state-cache",
"--jdbc-url=jdbc:h2:mem:daml-on-sql-conformance-test",
],
tags = [],
test_tool_args = [
"--verbose",
"--exclude=CommandDeduplicationIT", # It's a KV ledger so it needs the KV variant
],
)
conformance_test(
name = "conformance-test-append-only-oracle",
ports = [6865],
server = ":conformance-test-oracle-bin",
server_args = [
"--contract-id-seeding=testing-weak",
"--participant participant-id=conformance-test,port=6865,contract-state-cache-max-size=1,contract-key-state-cache-max-size=1",
"--index-append-only-schema",
"--mutable-contract-state-cache",
],
tags = [] if oracle_testing else ["manual"],
test_tool_args = [
"--verbose",
"--exclude=CommandDeduplicationIT", # It's a KV ledger so it needs the KV variant
],
)
conformance_test(
name = "conformance-test-append-only-postgres-command-completion-dedup-info",
ports = [6865],
server = ":conformance-test-postgresql-bin",
server_args = [
"--contract-id-seeding=testing-weak",
"--participant participant-id=conformance-test,port=6865,contract-state-cache-max-size=1,contract-key-state-cache-max-size=1",
"--index-append-only-schema",
"--mutable-contract-state-cache",
],
tags = [],
test_tool_args = [
"--verbose",
"--include=" +
"AppendOnlyCompletionDeduplicationInfoITCommandService" +
",AppendOnlyCompletionDeduplicationInfoITCommandSubmissionService",
],
)
conformance_test(
name = "conformance-test-append-only-h2-command-completion-dedup-info",
ports = [6865],
server = ":conformance-test-h2-memory-bin",
server_args = [
"--contract-id-seeding=testing-weak",
"--participant participant-id=conformance-test,port=6865,contract-state-cache-max-size=1,contract-key-state-cache-max-size=1",
"--index-append-only-schema",
"--mutable-contract-state-cache",
"--jdbc-url=jdbc:h2:mem:daml-on-sql-conformance-test",
],
tags = [],
test_tool_args = [
"--verbose",
"--include=" +
"AppendOnlyCompletionDeduplicationInfoITCommandService" +
",AppendOnlyCompletionDeduplicationInfoITCommandSubmissionService",
],
)
conformance_test(
name = "conformance-test-append-only-oracle-command-completion-dedup-info",
ports = [6865],
server = ":conformance-test-oracle-bin",
server_args = [
"--contract-id-seeding=testing-weak",
"--participant participant-id=conformance-test,port=6865,contract-state-cache-max-size=1,contract-key-state-cache-max-size=1",
"--index-append-only-schema",
"--mutable-contract-state-cache",
],
tags = [] if oracle_testing else ["manual"],
test_tool_args = [
"--verbose",
"--include=" +
"AppendOnlyCompletionDeduplicationInfoITCommandService" +
",AppendOnlyCompletionDeduplicationInfoITCommandSubmissionService",
],
)
conformance_test(
name = "conformance-test-oracle",
ports = [6865],
server = ":conformance-test-oracle-bin",
server_args = [
"--contract-id-seeding=testing-weak",
"--participant participant-id=conformance-test,port=6865,contract-state-cache-max-size=1,contract-key-state-cache-max-size=1",
],
tags = [] if oracle_testing else ["manual"],
test_tool_args = [
"--verbose",
"--exclude=CommandDeduplicationIT", # It's a KV ledger so it needs the KV variant
],
)
conformance_test(
name = "conformance-test-append-only-in-memory-fan-out-postgres",
ports = [6865],
server = ":conformance-test-postgresql-bin",
server_args = [
"--contract-id-seeding=testing-weak",
"--participant participant-id=conformance-test,port=6865,contract-state-cache-max-size=1,contract-key-state-cache-max-size=1,ledger-api-transactions-buffer-max-size=10",
"--index-append-only-schema",
"--mutable-contract-state-cache",
"--buffered-ledger-api-streams-unsafe",
],
tags = [],
test_tool_args = [
"--verbose",
"--exclude=CommandDeduplicationIT", # It's a KV ledger so it needs the KV variant
],
)
conformance_test(
name = "conformance-test-append-only-in-memory-fan-out-oracle",
ports = [6865],
server = ":conformance-test-oracle-bin",
server_args = [
"--contract-id-seeding=testing-weak",
"--participant participant-id=conformance-test,port=6865,contract-state-cache-max-size=1,contract-key-state-cache-max-size=1,ledger-api-transactions-buffer-max-size=10",
"--index-append-only-schema",
"--mutable-contract-state-cache",
"--buffered-ledger-api-streams-unsafe",
],
tags = [] if oracle_testing else ["manual"],
test_tool_args = [
"--verbose",
"--exclude=CommandDeduplicationIT", # It's a KV ledger so it needs the KV variant
],
)
conformance_test(
name = "conformance-test-append-only-pruning-postgres",
ports = [6865],
server = ":conformance-test-postgresql-bin",
server_args = [
"--contract-id-seeding=testing-weak",
"--participant participant-id=conformance-test,port=6865,contract-state-cache-max-size=1,contract-key-state-cache-max-size=1",
"--index-append-only-schema",
"--mutable-contract-state-cache",
],
tags = [],
test_tool_args = [
"--verbose",
"--include=ParticipantPruningIT",
# Disable tests targeting only multi-participant setups
"--exclude=ParticipantPruningIT:PRImmediateAndRetroactiveDivulgence",
],
)
conformance_test(
name = "conformance-test-append-only-pruning-h2",
ports = [6865],
server = ":conformance-test-h2-memory-bin",
server_args = [
"--contract-id-seeding=testing-weak",
"--participant participant-id=conformance-test,port=6865,contract-state-cache-max-size=1,contract-key-state-cache-max-size=1",
"--index-append-only-schema",
"--mutable-contract-state-cache",
"--jdbc-url=jdbc:h2:mem:daml-on-sql-conformance-test",
],
tags = [],
test_tool_args = [
"--verbose",
"--include=ParticipantPruningIT",
# Disable tests targeting only multi-participant setups
"--exclude=ParticipantPruningIT:PRImmediateAndRetroactiveDivulgence",
],
)
conformance_test(
name = "conformance-test-append-only-pruning-oracle",
ports = [6865],
server = ":conformance-test-oracle-bin",
server_args = [
"--contract-id-seeding=testing-weak",
"--participant participant-id=conformance-test,port=6865,contract-state-cache-max-size=1,contract-key-state-cache-max-size=1,ledger-api-transactions-buffer-max-size=10",
"--index-append-only-schema",
"--mutable-contract-state-cache",
"--buffered-ledger-api-streams-unsafe",
],
tags = [] if oracle_testing else ["manual"],
test_tool_args = [
"--verbose",
"--include=ParticipantPruningIT",
# Disable tests targeting only multi-participant setups
"--exclude=ParticipantPruningIT:PRImmediateAndRetroactiveDivulgence",
],
)
conformance_test(
name = "conformance-test-pruning-oracle",
ports = [6865],
server = ":conformance-test-oracle-bin",
server_args = [
"--contract-id-seeding=testing-weak",
"--participant participant-id=conformance-test,port=6865,contract-state-cache-max-size=1,contract-key-state-cache-max-size=1",
],
tags = [] if oracle_testing else ["manual"],
test_tool_args = [
"--verbose",
"--include=ParticipantPruningIT",
# Disable tests targeting only append-only schema functionality
"--exclude=ParticipantPruningIT:PRLocalAndNonLocalRetroactiveDivulgences,ParticipantPruningIT:PRRetroactiveDivulgences,ParticipantPruningIT:PRImmediateAndRetroactiveDivulgence",
],
)
conformance_test(
name = "conformance-test-append-only-multi-party-submission-postgres",
ports = [6865],
server = ":conformance-test-postgresql-bin",
server_args = [
"--contract-id-seeding=testing-weak",
"--participant participant-id=conformance-test,port=6865,contract-state-cache-max-size=1,contract-key-state-cache-max-size=1",
"--index-append-only-schema",
"--mutable-contract-state-cache",
],
tags = [],
test_tool_args = [
"--verbose",
"--include=MultiPartySubmissionIT",
],
)
conformance_test(
name = "conformance-test-append-only-multi-party-submission-h2",
ports = [6865],
server = ":conformance-test-h2-memory-bin",
server_args = [
"--contract-id-seeding=testing-weak",
"--participant participant-id=conformance-test,port=6865,contract-state-cache-max-size=1,contract-key-state-cache-max-size=1",
"--index-append-only-schema",
"--mutable-contract-state-cache",
"--jdbc-url=jdbc:h2:mem:daml-on-sql-conformance-test",
],
tags = [],
test_tool_args = [
"--verbose",
"--include=MultiPartySubmissionIT",
],
)
conformance_test(
name = "conformance-test-append-only-multi-party-submission-oracle",
ports = [6865],
server = ":conformance-test-oracle-bin",
server_args = [
"--contract-id-seeding=testing-weak",
"--participant participant-id=conformance-test,port=6865,contract-state-cache-max-size=1,contract-key-state-cache-max-size=1,ledger-api-transactions-buffer-max-size=10",
"--index-append-only-schema",
"--mutable-contract-state-cache",
"--buffered-ledger-api-streams-unsafe",
],
tags = [] if oracle_testing else ["manual"],
test_tool_args = [
"--verbose",
"--include=MultiPartySubmissionIT",
],
)
conformance_test(
name = "conformance-test-multi-party-submission-oracle",
ports = [6865],
server = ":conformance-test-oracle-bin",
server_args = [
"--contract-id-seeding=testing-weak",
"--participant participant-id=conformance-test,port=6865,contract-state-cache-max-size=1,contract-key-state-cache-max-size=1",
],
tags = [] if oracle_testing else ["manual"],
test_tool_args = [
"--verbose",
"--include=MultiPartySubmissionIT",
],
)
conformance_test(
name = "conformance-test-contract-ids",
ports = [6865],
server = ":conformance-test-h2-memory-bin",
server_args = [
"--contract-id-seeding=testing-weak",
"--participant participant-id=conformance-test,port=6865,contract-state-cache-max-size=1,contract-key-state-cache-max-size=1",
"--jdbc-url=jdbc:h2:mem:daml-on-sql-conformance-test",
],
test_tool_args = [
"--verbose",
"--include=ContractIdIT:RejectV0,ContractIdIT:AcceptSuffixedV1,ContractIdIT:AcceptNonSuffixedV1",
],
)