mirror of
https://github.com/digital-asset/daml.git
synced 2024-09-20 09:17:43 +03:00
Add data-dependencies compatibility tests (#6313)
CHANGELOG_BEGIN CHANGELOG_END Co-authored-by: Andreas Herrmann <andreas.herrmann@tweag.io>
This commit is contained in:
parent
0f47b8d1bf
commit
f2cd820f42
@ -13,6 +13,11 @@ load(
|
|||||||
"daml_trigger_dar",
|
"daml_trigger_dar",
|
||||||
"daml_trigger_test",
|
"daml_trigger_test",
|
||||||
)
|
)
|
||||||
|
load(
|
||||||
|
"//bazel_tools/data_dependencies:data_dependencies.bzl",
|
||||||
|
"data_dependencies_coins",
|
||||||
|
"data_dependencies_upgrade",
|
||||||
|
)
|
||||||
load("//bazel_tools:versions.bzl", "versions")
|
load("//bazel_tools:versions.bzl", "versions")
|
||||||
load("//sandbox-migration:util.bzl", "migration_test")
|
load("//sandbox-migration:util.bzl", "migration_test")
|
||||||
load("//:versions.bzl", "platform_versions", "sdk_versions", "stable_versions")
|
load("//:versions.bzl", "platform_versions", "sdk_versions", "stable_versions")
|
||||||
@ -115,3 +120,22 @@ migration_test(
|
|||||||
tags = ["exclusive"],
|
tags = ["exclusive"],
|
||||||
versions = platform_versions,
|
versions = platform_versions,
|
||||||
) if not is_windows else None
|
) if not is_windows else None
|
||||||
|
|
||||||
|
[
|
||||||
|
data_dependencies_coins(
|
||||||
|
sdk_version = sdk_version,
|
||||||
|
)
|
||||||
|
for sdk_version in sdk_versions
|
||||||
|
]
|
||||||
|
|
||||||
|
[
|
||||||
|
data_dependencies_upgrade(
|
||||||
|
new_sdk_version = new_sdk_version,
|
||||||
|
old_sdk_version = old_sdk_version,
|
||||||
|
)
|
||||||
|
for old_sdk_version in sdk_versions
|
||||||
|
for new_sdk_version in sdk_versions
|
||||||
|
# Tests that we can build a package with a newer SDK version that has
|
||||||
|
# data-dependencies on packages built with an older SDK version.
|
||||||
|
if versions.is_at_least(old_sdk_version, new_sdk_version)
|
||||||
|
]
|
||||||
|
4
compatibility/bazel_tools/data_dependencies/BUILD.bazel
Normal file
4
compatibility/bazel_tools/data_dependencies/BUILD.bazel
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
# Copyright (c) 2020 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved.
|
||||||
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
|
exports_files(glob(["example/**"]))
|
@ -0,0 +1,104 @@
|
|||||||
|
# Copyright (c) 2020 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved.
|
||||||
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
|
load("//bazel_tools:versions.bzl", "version_to_name")
|
||||||
|
|
||||||
|
def _build_dar(
|
||||||
|
name,
|
||||||
|
package_name,
|
||||||
|
srcs,
|
||||||
|
data_dependencies,
|
||||||
|
sdk_version):
|
||||||
|
daml = "@daml-sdk-{sdk_version}//:daml".format(
|
||||||
|
sdk_version = sdk_version,
|
||||||
|
)
|
||||||
|
native.genrule(
|
||||||
|
name = name,
|
||||||
|
srcs = srcs + data_dependencies,
|
||||||
|
outs = ["%s.dar" % name],
|
||||||
|
tools = [daml],
|
||||||
|
cmd = """\
|
||||||
|
set -euo pipefail
|
||||||
|
TMP_DIR=$$(mktemp -d)
|
||||||
|
cleanup() {{ rm -rf $$TMP_DIR; }}
|
||||||
|
trap cleanup EXIT
|
||||||
|
mkdir -p $$TMP_DIR/src $$TMP_DIR/dep
|
||||||
|
for src in {srcs}; do
|
||||||
|
cp -L $$src $$TMP_DIR/src
|
||||||
|
done
|
||||||
|
DATA_DEPS=
|
||||||
|
for dep in {data_dependencies}; do
|
||||||
|
cp -L $$dep $$TMP_DIR/dep
|
||||||
|
DATA_DEPS="$$DATA_DEPS\n - dep/$$(basename $$dep)"
|
||||||
|
done
|
||||||
|
cat <<EOF >$$TMP_DIR/daml.yaml
|
||||||
|
sdk-version: {sdk_version}
|
||||||
|
name: {name}
|
||||||
|
source: src
|
||||||
|
version: 0.0.1
|
||||||
|
dependencies:
|
||||||
|
- daml-prim
|
||||||
|
- daml-script
|
||||||
|
data-dependencies:$$DATA_DEPS
|
||||||
|
EOF
|
||||||
|
$(location {daml}) build --project-root=$$TMP_DIR -o $$PWD/$(OUTS)
|
||||||
|
""".format(
|
||||||
|
daml = daml,
|
||||||
|
name = package_name,
|
||||||
|
data_dependencies = " ".join([
|
||||||
|
"$(location %s)" % dep
|
||||||
|
for dep in data_dependencies
|
||||||
|
]),
|
||||||
|
sdk_version = sdk_version,
|
||||||
|
srcs = " ".join([
|
||||||
|
"$(locations %s)" % src
|
||||||
|
for src in srcs
|
||||||
|
]),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
|
||||||
|
def data_dependencies_coins(sdk_version):
|
||||||
|
"""Build the coin1 and coin2 packages with the given SDK version.
|
||||||
|
"""
|
||||||
|
_build_dar(
|
||||||
|
name = "data-dependencies-coin1-{sdk_version}".format(
|
||||||
|
sdk_version = sdk_version,
|
||||||
|
),
|
||||||
|
package_name = "data-dependencies-coin1",
|
||||||
|
srcs = ["//bazel_tools/data_dependencies:example/CoinV1.daml"],
|
||||||
|
data_dependencies = [],
|
||||||
|
sdk_version = sdk_version,
|
||||||
|
)
|
||||||
|
_build_dar(
|
||||||
|
name = "data-dependencies-coin2-{sdk_version}".format(
|
||||||
|
sdk_version = sdk_version,
|
||||||
|
),
|
||||||
|
package_name = "data-dependencies-coin2",
|
||||||
|
srcs = ["//bazel_tools/data_dependencies:example/CoinV2.daml"],
|
||||||
|
data_dependencies = [],
|
||||||
|
sdk_version = sdk_version,
|
||||||
|
)
|
||||||
|
|
||||||
|
def data_dependencies_upgrade(old_sdk_version, new_sdk_version):
|
||||||
|
"""Build the coin-upgrade package using the new SDK version.
|
||||||
|
|
||||||
|
The package will have data-dependencies on the coin1 and coin2 package
|
||||||
|
built with the old SDK version.
|
||||||
|
"""
|
||||||
|
_build_dar(
|
||||||
|
name = "data-dependencies-upgrade-old-{old_sdk_version}-new-{new_sdk_version}".format(
|
||||||
|
old_sdk_version = old_sdk_version,
|
||||||
|
new_sdk_version = new_sdk_version,
|
||||||
|
),
|
||||||
|
package_name = "data-dependencies-upgrade",
|
||||||
|
srcs = ["//bazel_tools/data_dependencies:example/UpgradeFromCoinV1.daml"],
|
||||||
|
data_dependencies = [
|
||||||
|
"data-dependencies-coin1-{sdk_version}".format(
|
||||||
|
sdk_version = old_sdk_version,
|
||||||
|
),
|
||||||
|
"data-dependencies-coin2-{sdk_version}".format(
|
||||||
|
sdk_version = old_sdk_version,
|
||||||
|
),
|
||||||
|
],
|
||||||
|
sdk_version = new_sdk_version,
|
||||||
|
)
|
@ -0,0 +1,24 @@
|
|||||||
|
-- Copyright (c) 2020 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved.
|
||||||
|
-- SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
|
-- COIN_BEGIN
|
||||||
|
module CoinV1 where
|
||||||
|
|
||||||
|
template Coin
|
||||||
|
with
|
||||||
|
issuer : Party
|
||||||
|
owner : Party
|
||||||
|
where
|
||||||
|
signatory issuer, owner
|
||||||
|
-- COIN_END
|
||||||
|
|
||||||
|
template CoinProposal
|
||||||
|
with
|
||||||
|
issuer : Party
|
||||||
|
owner : Party
|
||||||
|
where
|
||||||
|
signatory issuer
|
||||||
|
observer owner
|
||||||
|
choice CoinProposal_Accept : ContractId Coin
|
||||||
|
controller owner
|
||||||
|
do create Coin with ..
|
@ -0,0 +1,14 @@
|
|||||||
|
-- Copyright (c) 2020 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved.
|
||||||
|
-- SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
|
-- COIN_AMOUNT_BEGIN
|
||||||
|
module CoinV2 where
|
||||||
|
|
||||||
|
template CoinWithAmount
|
||||||
|
with
|
||||||
|
issuer : Party
|
||||||
|
owner : Party
|
||||||
|
amount : Int
|
||||||
|
where
|
||||||
|
signatory issuer, owner
|
||||||
|
-- COIN_AMOUNT_END
|
@ -0,0 +1,46 @@
|
|||||||
|
-- Copyright (c) 2020 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved.
|
||||||
|
-- SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
|
-- UPGRADE_MODULE_BEGIN
|
||||||
|
module UpgradeFromCoinV1 where
|
||||||
|
import CoinV2
|
||||||
|
import CoinV1
|
||||||
|
-- UPGRADE_MODULE_END
|
||||||
|
|
||||||
|
-- UPGRADE_PROPOSAL_BEGIN
|
||||||
|
template UpgradeCoinProposal
|
||||||
|
with
|
||||||
|
issuer : Party
|
||||||
|
owner : Party
|
||||||
|
where
|
||||||
|
signatory issuer
|
||||||
|
observer owner
|
||||||
|
key (issuer, owner) : (Party, Party)
|
||||||
|
maintainer key._1
|
||||||
|
choice Accept : ContractId UpgradeCoinAgreement
|
||||||
|
controller owner
|
||||||
|
do create UpgradeCoinAgreement with ..
|
||||||
|
-- UPGRADE_PROPOSAL_END
|
||||||
|
|
||||||
|
-- UPGRADE_AGREEMENT_BEGIN
|
||||||
|
template UpgradeCoinAgreement
|
||||||
|
with
|
||||||
|
issuer : Party
|
||||||
|
owner : Party
|
||||||
|
where
|
||||||
|
signatory issuer, owner
|
||||||
|
key (issuer, owner) : (Party, Party)
|
||||||
|
maintainer key._1
|
||||||
|
nonconsuming choice Upgrade : ContractId CoinWithAmount
|
||||||
|
with
|
||||||
|
coinId : ContractId Coin
|
||||||
|
controller issuer
|
||||||
|
do coin <- fetch coinId
|
||||||
|
assert (coin.issuer == issuer)
|
||||||
|
assert (coin.owner == owner)
|
||||||
|
archive coinId
|
||||||
|
create CoinWithAmount with
|
||||||
|
issuer = coin.issuer
|
||||||
|
owner = coin.owner
|
||||||
|
amount = 1
|
||||||
|
-- UPGRADE_AGREEMENT_END
|
Loading…
Reference in New Issue
Block a user