Ledger id requirement (#6323)

* Add option based constructor for LedgerIdRequirement

changelog_begin
changelog_end

* Make option based consructor the default, deprecate old constructor

* Update with review comments
This commit is contained in:
Simon Maxen 2020-06-12 16:00:32 +01:00 committed by GitHub
parent 3351dd8963
commit 5329a4f97f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
20 changed files with 59 additions and 25 deletions

View File

@ -141,7 +141,7 @@ object ReplServiceMain extends App {
val applicationId = ApplicationId("daml repl")
val clientConfig = LedgerClientConfiguration(
applicationId = applicationId.unwrap,
ledgerIdRequirement = LedgerIdRequirement("", enabled = false),
ledgerIdRequirement = LedgerIdRequirement.none,
commandClient = CommandClientConfiguration.default,
sslContext = config.tlsConfig.flatMap(_.client),
token = config.accessTokenFile.map(new TokenHolder(_)).flatMap(_.token),

View File

@ -110,7 +110,7 @@ object RunnerMain {
val tokenHolder = config.accessTokenFile.map(new TokenHolder(_))
val clientConfig = LedgerClientConfiguration(
applicationId = ApplicationId.unwrap(applicationId),
ledgerIdRequirement = LedgerIdRequirement("", enabled = false),
ledgerIdRequirement = LedgerIdRequirement.none,
commandClient = CommandClientConfiguration.default,
sslContext = config.tlsConfig.flatMap(_.client),
token = tokenHolder.flatMap(_.token),

View File

@ -52,7 +52,7 @@ object TestMain extends StrictLogging {
val applicationId = ApplicationId("Script Test")
val clientConfig = LedgerClientConfiguration(
applicationId = ApplicationId.unwrap(applicationId),
ledgerIdRequirement = LedgerIdRequirement("", enabled = false),
ledgerIdRequirement = LedgerIdRequirement.none,
commandClient = CommandClientConfiguration.default,
sslContext = None
)

View File

@ -76,7 +76,7 @@ class TestRunner(
val clientConfig = LedgerClientConfiguration(
applicationId = applicationId.unwrap,
ledgerIdRequirement = LedgerIdRequirement("", enabled = false),
ledgerIdRequirement = LedgerIdRequirement.none,
commandClient = CommandClientConfiguration.default,
sslContext = rootCa.flatMap(file =>
TlsConfiguration.Empty.copy(trustCertCollectionFile = Some(file)).client),

View File

@ -256,7 +256,7 @@ class Extractor[T](config: ExtractorConfig, target: T)(
.maxInboundMessageSize(config.ledgerInboundMessageSizeMax),
LedgerClientConfiguration(
config.appId,
LedgerIdRequirement(ledgerId = "", enabled = false),
LedgerIdRequirement.none,
CommandClientConfiguration(1, 1, java.time.Duration.ofSeconds(20L)),
sslContext = config.tlsConfig.client,
tokenHolder.flatMap(_.token)

View File

@ -34,8 +34,7 @@ case class LedgerClientConfig(
ssl.map(_.sslContext)
)
private val ledgerIdRequirement = ledgerId.fold(LedgerIdRequirement("", enabled = false))(lid =>
LedgerIdRequirement(lid, enabled = true))
private val ledgerIdRequirement = LedgerIdRequirement(ledgerId)
}
object LedgerClientConfig {

View File

@ -86,7 +86,7 @@ class ScalaCodeGenIT
private val clientConfig = LedgerClientConfiguration(
applicationId = applicationId,
ledgerIdRequirement = LedgerIdRequirement(ledgerId, enabled = true),
ledgerIdRequirement = LedgerIdRequirement.matching(ledgerId),
commandClient = CommandClientConfiguration.default,
sslContext = None
)

View File

@ -57,7 +57,7 @@ object IouMain extends App with StrictLogging {
private val clientConfig = LedgerClientConfiguration(
applicationId = ApplicationId.unwrap(applicationId),
ledgerIdRequirement = LedgerIdRequirement("", enabled = false),
ledgerIdRequirement = LedgerIdRequirement.none,
commandClient = CommandClientConfiguration.default,
sslContext = None
)

View File

@ -63,7 +63,7 @@ object IouMain extends App with StrictLogging {
// <doc-ref:ledger-client-configuration>
private val clientConfig = LedgerClientConfiguration(
applicationId = ApplicationId.unwrap(applicationId),
ledgerIdRequirement = LedgerIdRequirement("", enabled = false),
ledgerIdRequirement = LedgerIdRequirement.none,
commandClient = CommandClientConfiguration.default,
sslContext = None,
token = None

View File

@ -183,7 +183,7 @@ object HttpServiceTestFixture {
useTls: UseTls = UseTls.NoTls): LedgerClientConfiguration =
LedgerClientConfiguration(
applicationId = ApplicationId.unwrap(applicationId),
ledgerIdRequirement = LedgerIdRequirement("", enabled = false),
ledgerIdRequirement = LedgerIdRequirement.none,
commandClient = CommandClientConfiguration.default,
sslContext = if (useTls) clientTlsConfig.client else None,
token = token

View File

@ -100,7 +100,7 @@ object HttpService extends StrictLogging {
val clientConfig = LedgerClientConfiguration(
applicationId = ApplicationId.unwrap(applicationId),
ledgerIdRequirement = LedgerIdRequirement("", enabled = false),
ledgerIdRequirement = LedgerIdRequirement.none,
commandClient = CommandClientConfiguration.default,
sslContext = tlsConfig.client,
token = tokenHolder.flatMap(_.token),

View File

@ -24,7 +24,7 @@ final class LedgerClientIT
"shut down the channel when closed" in {
val clientConfig = LedgerClientConfiguration(
applicationId = classOf[LedgerClientIT].getSimpleName,
ledgerIdRequirement = LedgerIdRequirement("", enabled = false),
ledgerIdRequirement = LedgerIdRequirement.none,
commandClient = CommandClientConfiguration.default,
sslContext = None,
token = None,

View File

@ -4,11 +4,20 @@
package com.daml.ledger.client.configuration
/**
* @param ledgerId The ID of the target ledger.
* @param enabled If true, the client will only communicate with ledgers that have the expected LedgerId.
* Note that this setting only affects the binding process, when the ledger ID on the server is checked.
* @param ledgerId The ID of the target ledger. If defined, the client will only communicate with ledgers that have the
* expected LedgerId. Note that this setting only affects the binding process, when the ledger ID
* on the server is checked.
*/
final case class LedgerIdRequirement(ledgerId: String, enabled: Boolean) {
def isAccepted(checkedLedgerId: String): Boolean = !enabled || checkedLedgerId == ledgerId
final case class LedgerIdRequirement(ledgerId: Option[String]) {
def isAccepted(checkedLedgerId: String): Boolean = ledgerId.fold(true)(checkedLedgerId.equals)
}
object LedgerIdRequirement {
val none: LedgerIdRequirement = LedgerIdRequirement(None)
def matching(ledgerId: String): LedgerIdRequirement = LedgerIdRequirement(Some(ledgerId))
@deprecated("Use option based constructor", "1.3.0")
def apply(ledgerId: String, enabled: Boolean): LedgerIdRequirement =
LedgerIdRequirement(if (enabled) Some(ledgerId) else None)
}

View File

@ -0,0 +1,26 @@
// Copyright (c) 2020 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved.
// SPDX-License-Identifier: Apache-2.0
package com.daml.ledger.client.configuration
import org.scalatest.{Matchers, WordSpec}
class LedgerIdRequirementTest extends WordSpec with Matchers {
"LedgerIdRequirement" should {
"allow accept matching ledger" in {
val expected = "ledger-a"
LedgerIdRequirement.matching(expected).isAccepted(expected) shouldBe true
}
"allow not accept non-matching ledger" in {
LedgerIdRequirement.matching("ledger-b").isAccepted("not-b") shouldBe false
}
"empty constructor should allow any ledger" in {
LedgerIdRequirement.none.isAccepted("any-ledger") shouldBe true
}
}
}

View File

@ -37,7 +37,7 @@ class TlsIT extends AsyncWordSpec with SandboxFixture with SuiteResourceManageme
private lazy val tlsEnabledConfig = LedgerClientConfiguration(
"appId",
LedgerIdRequirement("", enabled = false),
LedgerIdRequirement.none,
CommandClientConfiguration.default,
TlsConfiguration(
enabled = true,

View File

@ -281,7 +281,7 @@ class PlatformStore(
val configuration = LedgerClientConfiguration(
applicationId,
LedgerIdRequirement("_", enabled = false),
LedgerIdRequirement.none,
CommandClientConfiguration(
maxCommandsInFlight,
maxParallelSubmissions,

View File

@ -79,7 +79,7 @@ object RunnerMain {
val applicationId = ApplicationId("Trigger Runner")
val clientConfig = LedgerClientConfiguration(
applicationId = ApplicationId.unwrap(applicationId),
ledgerIdRequirement = LedgerIdRequirement("", enabled = false),
ledgerIdRequirement = LedgerIdRequirement.none,
commandClient =
CommandClientConfiguration.default.copy(defaultDeduplicationTime = config.commandTtl),
sslContext = config.tlsConfig.flatMap(_.client),

View File

@ -71,7 +71,7 @@ object TriggerRunnerImpl {
val appId = ApplicationId(name)
val clientConfig = LedgerClientConfiguration(
applicationId = appId.unwrap,
ledgerIdRequirement = LedgerIdRequirement("", enabled = false),
ledgerIdRequirement = LedgerIdRequirement.none,
commandClient = CommandClientConfiguration.default.copy(
defaultDeduplicationTime = config.ledgerConfig.commandTtl),
sslContext = None,

View File

@ -171,7 +171,7 @@ object TriggerServiceFixture {
token: Option[String] = None): LedgerClientConfiguration =
LedgerClientConfiguration(
applicationId = ApplicationId.unwrap(applicationId),
ledgerIdRequirement = LedgerIdRequirement("", enabled = false),
ledgerIdRequirement = LedgerIdRequirement.none,
commandClient = CommandClientConfiguration.default,
sslContext = None,
token = token

View File

@ -41,7 +41,7 @@ trait AbstractTriggerTest extends SandboxFixture with TestCommands {
protected def ledgerClientConfiguration =
LedgerClientConfiguration(
applicationId = MockMessages.applicationId,
ledgerIdRequirement = LedgerIdRequirement("", enabled = false),
ledgerIdRequirement = LedgerIdRequirement.none,
commandClient = CommandClientConfiguration.default,
sslContext = None,
token = None