diff --git a/experimental/behave/src/scenario/kotlin/net/corda/behave/scenarios/ScenarioHooks.kt b/experimental/behave/src/scenario/kotlin/net/corda/behave/scenarios/ScenarioHooks.kt deleted file mode 100644 index f3fad092c9..0000000000 --- a/experimental/behave/src/scenario/kotlin/net/corda/behave/scenarios/ScenarioHooks.kt +++ /dev/null @@ -1,18 +0,0 @@ -package net.corda.behave.scenarios - -import cucumber.api.java.After -import cucumber.api.java.Before - -@Suppress("KDocMissingDocumentation") -class ScenarioHooks(private val state: ScenarioState) { - - @Before - fun beforeScenario() { - } - - @After - fun afterScenario() { - state.stopNetwork() - } - -} \ No newline at end of file diff --git a/testing/qa/behave/compatibility/README.md b/testing/qa/behave/compatibility/README.md new file mode 100644 index 0000000000..2912f902c7 --- /dev/null +++ b/testing/qa/behave/compatibility/README.md @@ -0,0 +1,189 @@ +Compatibility Test Suite (CTS) +============================= + +Compatibility / Interoperability testing refers to validating the run-time behaviour of different versions of +components within the Corda Platform and ensuring that data is compatible, both "on the wire" (P2P AMQP and RPC Kyro +serialization forms) and "at rest" (persisted to a database) between collaborating components. + +Compatibility testing focuses at three different levels: + +1. Corda Network (Compatibility Zone - level, Doorman, Notary) +2. Corda Node (eg. participant nodes, oracles) +3. Corda Applications (CorDapps) + +Corda Network +------------- +Components within scope for this level of testing include: +- Doorman +- Network Map Service +- Notary (and notary clusters) +- Ancillary support infrastructure services: Float, Bridge Manager, HA supervisors + +The following aspects of a Corda Network are configurable/changeable over time and require validating via CTS coverage: + +- Permissioning: provision of an identity certificate signed by the networks root CA +- Network Parameters changes (such as adding/removing a Notary, whitelisting CorDapps for constraint checking), + and distribution to nodes via bootstrapper (OS) / HTTP NMS distribution (Enterprise) +- Nodes and Oracles addition and removal (with provisioned identities) via bootstrapping / registration with Network Map + a) OS: `nodeInfo` distribution into a node's `additional-node-infos` directory + b) Enterprise: HTTP NMS (node configured with `compatibilityZoneURL`) +- Versioning: `platformVersion` (part of a node's `NodeInfo`) +- Change in HA setup + +References: + +1. https://docs.corda.r3.com/head/setting-up-a-corda-network.html +2. https://docs.corda.r3.com/head/permissioning.html +3. https://docs.corda.r3.com/head/network-map.html +4. https://docs.corda.r3.com/head/network-map.html#network-parameters-update-process +5. https://docs.corda.r3.com/head/versioning.html +6. https://docs.corda.r3.com/head/high-availability.html + +Corda Node +---------- +Refers exclusively to exercising the capabilities of a Corda Node, to include: + +- Node Configuration changes (such as change of database, rpcUser permissions, address changes, standalone broker). + Impact and consequences of running in`devMode` (uses pre-configured keystores, no security) +- Node Start-up options + +References: + +1. https://docs.corda.r3.com/head/node-administration.html +2. https://docs.corda.r3.com/head/corda-configuration-file.html + +Corda Application (CorDapp) +----------------- +Refers to testing the evolution of CorDapps with respect to changes to the following: +- States +- Contracts +- Services +- Flows +- Utilities and library functions (eg. cryptography) + +References: + +- https://docs.corda.net/head/upgrading-cordapps.html + +Specifically, compatibility testing takes the following types of CorDapp-related versioning changes into consideration: + +1. Flow Versioning. + + The `version` property of an `@InitiatingFlow` determines the version in effect at execution. + + A non-backwards compatible change is one where the interface of the flow changes: specifically, the sequence of `send` + and `receive` calls between an `InitiatingFlow` and an `InitiatedBy` flow, including the types of the data sent and received. + + There are 3 failure scenarios to test for: + + a) flows that hang (due to the expectation that a response is expected but never received) + + b) incorrect data types in `send` or `receive` calls: "Expected Type X but Received Type Y" + + c) early termination: "Counterparty flow terminated early on the other side" + + Inlined Flows are not versioned as they inherit the version of their parent `initiatingFlow` or `inittiatedFlow`. + There are 2 scenarios to consider: + + a) Inlined flows that perform `send` and `receive` calling with other inlined flows + A change to the interface here must be considered a change to the parent flow interfaces. + + b) Utility inlined flows that perform a local function (eg. query the vault). + + Flow Draining mode is used to ensure outstanding checkpointed flows are flushed before upgrading to a new flow version. + +2. State and contract. + + Two types of contract/state upgrade: + + a) Implicit, using CZ Whitelisting of multiple CorDapp version (subsequently enforced by contract constraint logic) + + b) Explicit, by creating a special contract upgrade transaction and getting all participants of a state to sign it using + contract upgrade flows. + Upgraded contracts must implement the `UpgradedContract` interface. + +3. State and state schema. + + Two scenarios: + + a) Schema additions (backwards compatible) + + b) Schema deletions/type modifications require use of `ContractUpgradeFlow` and must define a new version of the `MappedSchema` + +4. Serialisation of custom types. + + AMQP serialisation rules: + - Constructor + - JavaBean getter + - Generics + - Superclass (abstract) + - Cyclic object graph cycles are not supported + - Enums may not evolve! + +Reference Corda Applications +---------------------------- +The intent of the CTS is to incorporate samples, demos and customer driven "use case scenarios" into an ever growing +regression test suite. + +The following categories reflect our current ecosystem of CorDapps: + +Corda Repository samples: +------------------------- +1) Trader demo +2) IRS demo +3) SIMM Valuation demo +4) Bank of Corda +5) Notary demo +6) Attachment demo + +Corda.net samples (https://www.corda.net/samples/): +----------------- +General + - Yo! + - IOU + - Obligations (uses confidential identities) + - Negotiation + +Observers + - Crowdfunding + +Attachments + - FTP + - Blacklist + +Confidential Identities + - Whistle Blower + +Oracles + - Prime numbers + - Options + +Scheduled activities: + - Heartbeat + +Accessing external data: + - Flow HTTP + - Flow DB access + +Upgrading CorDapps + - Contract upgrades + +Alternative node web-servers + - Spring Webserver + - Yo! CorDapp Spring Webserver + +RPC Clients + - NodeInfo + - Ping-Pong + +DevRel other +------------ + - https://github.com/CaisR3 + +Corda Incubator/Accelerator demos: +--------------------------- + - Wildfire (https://bitbucket.org/R3-CEV/wildfire) + - Ubin (https://github.com/project-ubin/ubin-corda) + - Reference data + + diff --git a/testing/qa/behave/compatibility/resources/features/compatibility/cordapp/cordapp-contract-versions.feature b/testing/qa/behave/compatibility/resources/features/compatibility/cordapp/cordapp-contract-versions.feature new file mode 100644 index 0000000000..0920e40155 --- /dev/null +++ b/testing/qa/behave/compatibility/resources/features/compatibility/cordapp/cordapp-contract-versions.feature @@ -0,0 +1,42 @@ +@compatibility @cordapps @flows +Feature: Compatibility - CorDapp versions + To support an interoperable Corda network, a Corda node must have the ability to transact with another Corda node + when each node has a different version of the same cordapp for different Contract change scenarios. + + Scenario Outline: Corda node can transact with another Corda node where each has a Cordapp version with different Contract verify but same State definition + Given a node A of version + And node A has finance app installed + And a node B of version + And node B has finance app installed + When the network is ready + Then node A can transfer 100 tokens to node B + + Examples: + | Corda-Node-Version-X | Cordapp-Version-X | Cordapp-Version-Y | + | corda-3.0 | finance-V1-contract | finance-V2-contract | + + Scenario Outline: Corda node can transact with another Corda node where each has a Cordapp version with same Contract verify but different State definition + Given a node A of version + And node A has finance app installed + And a node B of version + And node B has finance app installed + And node B has upgraded contract + When the network is ready + Then node A can transfer 100 tokens to node B + + Examples: + | Corda-Node-Version-X | Cordapp-Version-X | Cordapp-Version-Y | + | corda-3.0 | finance-V1-state | finance-V2-state | + + Scenario Outline: Corda node can transact with another Corda node where each has a Cordapp version with same Contract verify but different State definition and custom schemas + Given a node A of version + And node A has finance app installed + And a node B of version + And node B has finance app installed + And node B has upgraded contract + When the network is ready + Then node A can transfer 100 tokens to node B + + Examples: + | Corda-Node-Version-X | Cordapp-Version-X | Cordapp-Version-Y | + | corda-3.0 | finance-V1-state-schema | finance-V2-state-schema | diff --git a/testing/qa/behave/compatibility/resources/features/compatibility/cordapp/cordapp-flow-versions.feature b/testing/qa/behave/compatibility/resources/features/compatibility/cordapp/cordapp-flow-versions.feature new file mode 100644 index 0000000000..524f811317 --- /dev/null +++ b/testing/qa/behave/compatibility/resources/features/compatibility/cordapp/cordapp-flow-versions.feature @@ -0,0 +1,40 @@ +@compatibility @cordapps @flows +Feature: Compatibility - CorDapp versions + To support an interoperable Corda network, a Corda node must have the ability to transact with another Corda node + when each node has a different version of the same cordapp for different Flow change scenarios. + + Scenario Outline: Corda node can transact with another Corda node where each has a Cordapp version with same same Flow version but different implementations + Given a node A of version + And node A has finance app installed + And a node B of version + And node B has finance app installed + When the network is ready + Then node A can transfer 100 tokens to node B + + Examples: + | Corda-Node-Version-X | Cordapp-Version-X | Cordapp-Version-Y | + | corda-3.0 | finance-V1-flowImpl1 | finance-V2-flowImpl2 | + + Scenario Outline: Corda node can transact with another Corda node where each has a Cordapp version with different, but backwards compatible, Flow versions + Given a node A of version + And node A has finance app installed + And a node B of version + And node B has finance app installed + When the network is ready + Then node A can transfer 100 tokens to node B + + Examples: + | Corda-Node-Version-X | Cordapp-Version-X | Cordapp-Version-Y | + | corda-3.0 | finance-V1-flowV1 | finance-V2-flowV2 | + + Scenario Outline: Corda node fails to transact with another Corda node where each has a Cordapp version with different, incompatible, Flow versions + Given a node A of version + And node A has finance app installed + And a node B of version + And node B has finance app installed + When the network is ready + Then node A fails to transfer 100 tokens to node B + + Examples: + | Corda-Node-Version-X | Cordapp-Version-X | Cordapp-Version-Y | + | corda-3.0 | finance-V1-flowV1-incompat | finance-V2-flowV2-incompat | diff --git a/testing/qa/behave/compatibility/resources/features/compatibility/cordapp/cordapp-upgrades.feature b/testing/qa/behave/compatibility/resources/features/compatibility/cordapp/cordapp-upgrades.feature new file mode 100644 index 0000000000..0157ce024e --- /dev/null +++ b/testing/qa/behave/compatibility/resources/features/compatibility/cordapp/cordapp-upgrades.feature @@ -0,0 +1,50 @@ +@compatibility @cordapps @upgrade @migration +Feature: Compatibility - CorDapp upgrades and migrations + To support an interoperable Corda network, a CordaApp must be upgradeable across different Corda distributions and + node versions (and without loss of transactions between participating nodes in a flow) + + Scenario Outline: CorDapp running on Corda OS node using default database (H2) can be migrated to an R3 Corda (Enterprise) node without loss of data. + Given a node A of version + And node A has finance app installed + And a node B of version + And node B has finance app installed + When the network is ready + Then node A can issue 1000 + And node A can transfer 100 to node B + And node A is migrated to + And node B can transfer 100 to node A + + Examples: + | Corda-Node-Version-X | Corda-Node-Version-Y | Cordapp-Version-X | Cordapp-Version-Y | + | corda-3.0 | r3corda-3.0-DP3-RC01 | finance-V1 | finance-V2 | + + Scenario Outline: as above but Node B has not processed Node A payment flow transactions before upgrade + Given a node A of version + And node A has finance app installed + When the network is ready + Then node A can issue 1000 + And node A can transfer 100 to node B + And node B has version + And node B has finance app installed + And node A is migrated to + And node B can transfer 100 to node A + + Examples: + | Corda-Node-Version-X | Corda-Node-Version-Y | Cordapp-Version-X | Cordapp-Version-Y | + | corda-3.0 | r3corda-3.0-DP3-RC01 | finance-V1 | finance-V2 | + + Scenario Outline: as above but Node B has not processed Node A payment flow transactions before upgrade so we enforce flow draining mode before upgrade can complete + Given a node A of version + And node A has finance app installed + When the network is ready + Then node A can issue 1000 + And node A can transfer 100 to node B + And node A enables flow draining mode + And node B has version + And node B has finance app installed + And node A is migrated to + And node B can transfer 100 to node A + + Examples: + | Corda-Node-Version-X | Corda-Node-Version-Y | Cordapp-Version-X | Cordapp-Version-Y | + | corda-3.0 | r3corda-3.0-DP3-RC01 | finance-V1 | finance-V2 | diff --git a/testing/qa/behave/compatibility/resources/features/compatibility/cordapp/cordapp-versions.feature b/testing/qa/behave/compatibility/resources/features/compatibility/cordapp/cordapp-versions.feature new file mode 100644 index 0000000000..1254c94317 --- /dev/null +++ b/testing/qa/behave/compatibility/resources/features/compatibility/cordapp/cordapp-versions.feature @@ -0,0 +1,16 @@ +@compatibility @cordapps +Feature: Compatibility - CorDapp versions + To support an interoperable Corda network, a Corda node must have the ability to transact with another Corda node + when each node has a different versions of the same cordapp but identical Flow interfaces and Contract usage. + + Scenario Outline: Corda node can transact with another Corda node where each has a different Cordapp versions but with same Flows, Contracts, Contract States, Contract State Schemas + Given a node A of version with proxy + And node A has finance app installed + And a node B of version + And node B has finance app installed + When the network is ready + Then node A can transfer 100 tokens to node B + + Examples: + | Corda-Node-Version-X | Cordapp-Version-X | Cordapp-Version-Y | + | corda-3.0 | finance-V1 | finance-V2 | diff --git a/testing/qa/behave/compatibility/resources/features/compatibility/databases/database.feature b/testing/qa/behave/compatibility/resources/features/compatibility/databases/database.feature new file mode 100644 index 0000000000..0980580a37 --- /dev/null +++ b/testing/qa/behave/compatibility/resources/features/compatibility/databases/database.feature @@ -0,0 +1,58 @@ +@compatibility @node @database +Feature: Compatibility - Database providers + To support an interoperable Corda network, a Corda (OS) node must have the ability to transact with an R3 Corda (Enterprise) node using different database providers. + + Scenario Outline: QA: Corda (OS) Node using H2 can transact with R3 Corda (Enterprise) node using SQL Server, in an R3 Corda configured network. + Given a node PartyA of version with proxy + And node PartyA uses database of type + And node PartyA has the finance app installed + And a node PartyB of version + And node PartyB has the finance app installed + And a nonvalidating notary Notary of version + When the network is ready + Then node PartyA can issue 1000 + And node PartyA can transfer 100 to node PartyB + + Examples: + | Corda-Node-Version | R3-Corda-Node-Version | Currency | Database-Type | +# | corda-3.0 | r3-master | GBP | SQL Server | + | corda-3.0 | r3corda-3.0-DP3-RC04 | GBP | SQL Server | + + Scenario Outline: QA: Corda (OS) Node using H2 can transact with R3 Corda (Enterprise) node using Postgres, in an R3 Corda configured network. + Given a node PartyA of version with proxy + And node PartyA uses database of type + And node PartyA has the finance app installed + And a node PartyB of version + And node PartyB has the finance app installed + And a nonvalidating notary Notary of version + When the network is ready + Then node PartyA can issue 1000 + And node PartyA can transfer 100 to node PartyB + + Examples: + | Corda-Node-Version | R3-Corda-Node-Version | Currency | Database-Type | +# | corda-3.0 | r3-master | GBP | postgres | + | corda-3.0 | r3corda-3.0-DP3-RC04 | GBP | postgres | + + + Scenario Outline: QA: 3 Nodes can transact with each other using different database providers: H2, SQL Server, PostgreSQL + Given a node PartyA of version with proxy + And node PartyA uses database of type + And node PartyA has the finance app installed + And a node PartyB of version + And node PartyB uses database of type + And node PartyB has the finance app installed + And a node PartyC of version + And node PartyC uses database of type + And node PartyC has the finance app installed + And a nonvalidating notary Notary of version + When the network is ready + Then node PartyA can issue 1000 + And node PartyA can transfer 100 to node B + And node PartyB can transfer 100 to node C + And node PartyC can transfer 100 to node A + + Examples: + | R3-Corda-Node-Version | Currency | Database-Type-1 | Database-Type-2 | Database-Type-3 | +# | r3-master | GBP | h2 | sql-server | postgres | + | r3corda-3.0-DP3-RC01 | GBP | h2 | sql-server | postgres | \ No newline at end of file diff --git a/testing/qa/behave/compatibility/resources/features/compatibility/finance/cash.feature b/testing/qa/behave/compatibility/resources/features/compatibility/finance/cash.feature new file mode 100644 index 0000000000..f8c2ef161f --- /dev/null +++ b/testing/qa/behave/compatibility/resources/features/compatibility/finance/cash.feature @@ -0,0 +1,18 @@ +@compatibility @node @cordapps +Feature: Compatibility - Mixed Corda distributions (OS and Enterprise) running different CorDapps + To support an interoperable Corda network, different CorDapps must have the ability to transact in mixed Corda (OS) and R3 Corda (Enterprise) networks. + + Scenario Outline: Corda (OS) Node can transact with R3 Corda (Enterprise) node using Finance Cash application. + Given a node partyA of version with proxy + And node partyA has the finance app installed + And a node partyB of version with proxy + And node partyB has the finance app installed + And a nonvalidating notary Notary of version + When the network is ready + Then node partyA can issue 1000 + And node partyA can transfer 100 to node partyB + + Examples: + | Corda-Node-Version | R3-Corda-Node-Version | Currency | + | corda-3.0 | r3corda-3.0-DP3-RC04 | GBP | + diff --git a/testing/qa/behave/compatibility/resources/features/compatibility/network-management/doorman-certs.feature b/testing/qa/behave/compatibility/resources/features/compatibility/network-management/doorman-certs.feature new file mode 100644 index 0000000000..12f5d3482e --- /dev/null +++ b/testing/qa/behave/compatibility/resources/features/compatibility/network-management/doorman-certs.feature @@ -0,0 +1,46 @@ +@compatibility @doorman +Feature: Compatibility - Doorman certificate issuance + To support an interoperable Corda network, a Corda node must have the ability to transact with another Corda node + when each node has been issued a certificate by a different Doorman version. + + Scenario Outline: Corda (OS) nodes can transact with each other, where they have been issued Certificates by different (R3 Corda) Doorman versions. + Given a node A of version + And node A was issued a certificate by + And node A has the finance app installed + And a node B of version + And node B was issued a certificate by + And node B has the finance app installed + When the network is ready + Then node A can transfer 100 tokens to node B + + Examples: + | Corda-Node-Version | Doorman-Version-X | Doorman-Version-Y | + | corda-3.0 | doorman-3.0-DP3-RC01 | doorman-3.0-master | + + Scenario Outline: R3 Corda nodes can transact with each other, where they have been issued Certificates by different (R3 Corda) Doorman versions. + Given a node A of version + And node A was issued a certificate by + And node A has the finance app installed + And a node B of version + And node B was issued a certificate by + And node B has the finance app installed + When the network is ready + Then node A can transfer 100 tokens to node B + + Examples: + | Corda-Node-Version | Doorman-Version-X | Doorman-Version-Y | + | r3corda-3.0-DP3-RC01 | doorman-3.0-DP3-RC01 | doorman-3.0-master | + + Scenario Outline: Mixed (R3 and OS) Corda nodes can transact with each other, where they have been issued Certificates by different (R3 Corda) Doorman versions. + Given a node A of version + And node A was issued a certificate by + And node A has the finance app installed + And a node B of version + And node B was issued a certificate by + And node B has the finance app installed + When the network is ready + Then node A can transfer 100 tokens to node B + + Examples: + | Corda-Node-Version-X | Corda-Node-Version-Y | Doorman-Version-X | Doorman-Version-Y | + | r3corda-3.0-DP3-RC01 | corda-3.0 | doorman-3.0-DP3-RC01 | doorman-3.0-master | diff --git a/testing/qa/behave/compatibility/resources/features/compatibility/network-management/network-parameters.feature b/testing/qa/behave/compatibility/resources/features/compatibility/network-management/network-parameters.feature new file mode 100644 index 0000000000..2e472b2cec --- /dev/null +++ b/testing/qa/behave/compatibility/resources/features/compatibility/network-management/network-parameters.feature @@ -0,0 +1,31 @@ +@compatibility @networkparams @notary +Feature: Compatibility - CZ Network Parameters changes + To support an interoperable Corda network, Corda nodes must continue transacting with each other + when the CZ network parameters change: minimumPlatformVersion, notaries, maxMessageSize, maxTransactionSize, + whitelistedContractImplementations. + + Scenario Outline: R3 Corda nodes continue transacting when list of Notaries changes (additive) + Given a node A of version + And node A has the finance app installed + And a node B of version + And node B has the finance app installed + And doorman changes network parameters notaries + When the network is ready + Then node A can transfer 100 tokens to node B + + Examples: + | Corda-Node-Version | + | r3corda-3.0 | + + Scenario Outline: R3 Corda nodes continue transacting when existing Notary changes from non-validating to validating + Given a node A of version + And node A has the finance app installed + And a node B of version + And node B has the finance app installed + And doorman changes network parameters notary from non-validating to validating + When the network is ready + Then node A can transfer 100 tokens to node B + + Examples: + | Corda-Node-Version | + | r3corda-3.0 | \ No newline at end of file diff --git a/testing/qa/behave/compatibility/resources/features/compatibility/network-management/nodeinfo-change.feature b/testing/qa/behave/compatibility/resources/features/compatibility/network-management/nodeinfo-change.feature new file mode 100644 index 0000000000..a70361cc7b --- /dev/null +++ b/testing/qa/behave/compatibility/resources/features/compatibility/network-management/nodeinfo-change.feature @@ -0,0 +1,17 @@ +@compatibility @nms +Feature: Compatibility - NMS node identity (nodeinfo) changes + To support an interoperable Corda network, a Corda node must have the ability to transact with another Corda node + after making changes to its node information: addresses, legalIdentitiesAndCerts, platformVersion + + Scenario Outline: Corda (OS) node can transact with another Corda (OS) node where a node adds new addresses to its nodeinfo + Given a node A of version + And node A has the finance app installed + And node A adds a new nodeinfo address + And a node B of version + And node B has the finance app installed + When the network is ready + Then node A can transfer 100 tokens to node B + + Examples: + | Corda-Node-Version | + | corda-3.0 | \ No newline at end of file diff --git a/testing/qa/behave/compatibility/resources/features/compatibility/network-management/nodeinfo-generation.feature b/testing/qa/behave/compatibility/resources/features/compatibility/network-management/nodeinfo-generation.feature new file mode 100644 index 0000000000..0600f49a37 --- /dev/null +++ b/testing/qa/behave/compatibility/resources/features/compatibility/network-management/nodeinfo-generation.feature @@ -0,0 +1,40 @@ +@compatibility @nms +Feature: Compatibility - NMS node identity (nodeinfo) generation + To support an interoperable Corda network, a Corda node must have the ability to transact with another Corda node + when each node have generated "NodeInfos" by different NMS versions (both R3 Corda and Corda). + + Scenario Outline: Corda (OS) node can transact with another Corda (OS) node where node infos are generated by different versions of Corda OS + Given a node A of version + And node A has the finance app installed + And a node B of version + And node B has the finance app installed + When the network is ready + Then node A can transfer 100 tokens to node B + + Examples: + | Corda-Node-Version-X | Corda-Node-Version-Y | + | corda-3.0 | corda-3.0 | + + Scenario Outline: R3 Corda node can transact with another R3 Corda node where node infos are generated by different versions of R3 Corda + Given a node A of version + And node A has the finance app installed + And a node B of version + And node B has the finance app installed + When the network is ready + Then node A can transfer 100 tokens to node B + + Examples: + | Corda-Node-Version-X | Corda-Node-Version-Y | + | r3corda-3.0-DP3-RC01 | r3corda-3.0 | + + Scenario Outline: R3 Corda node can transact with another Corda (OS) node where node infos are generated by different distributions Corda + Given a node A of version + And node A has the finance app installed + And a node B of version + And node B has the finance app installed + When the network is ready + Then node A can transfer 100 tokens to node B + + Examples: + | Corda-Node-Version-X | Corda-Node-Version-Y | + | r3corda-3.0-DP3-RC01 | corda-3.0 | diff --git a/testing/qa/behave/compatibility/resources/features/compatibility/node/node-availability.feature b/testing/qa/behave/compatibility/resources/features/compatibility/node/node-availability.feature new file mode 100644 index 0000000000..3a4fe30c57 --- /dev/null +++ b/testing/qa/behave/compatibility/resources/features/compatibility/node/node-availability.feature @@ -0,0 +1,19 @@ +@compatibility @node @availability +Feature: Compatibility - Node high availability and operational continuity + To support a highly available Corda network, a Corda node must have the ability to continue transacting with another Corda node + when one node in an H/A cluster fails + + Scenario Outline: Corda (OS) node can transact with another Corda (OS) node where node configuration is changed on one of the Corda OS nodes + Given a node A of version in high-availability mode + And node A has the finance app installed + And a node B of version + And node B has the finance app installed + When the network is ready + Then node A can issue 1000 GBP + And node A can transfer 100 GBP to node B + And node A primary node fails + And node A can transfer 100 GBP to node B + + Examples: + | Corda-Node-Version-X | + | r3corda-3.0-DP3-RC01 | \ No newline at end of file diff --git a/testing/qa/behave/compatibility/resources/features/compatibility/node/node-configuration.feature b/testing/qa/behave/compatibility/resources/features/compatibility/node/node-configuration.feature new file mode 100644 index 0000000000..30390f0ffd --- /dev/null +++ b/testing/qa/behave/compatibility/resources/features/compatibility/node/node-configuration.feature @@ -0,0 +1,44 @@ +@compatibility @node @configuration +Feature: Compatibility - Node configuration + To support an interoperable Corda network, a Corda node must have the ability to transact with another Corda node + when configuration changes are applied independently to each node: + + Scenario Outline: Corda (OS) node can transact with another Corda (OS) node where node configuration is changed on one of the Corda OS nodes + Given a node A of version + And node A configuration is changed + And node A has the finance app installed + And a node B of version + And node B has the finance app installed + When the network is ready + Then node A can transfer 100 tokens to node B + + Examples: + | Corda-Node-Version-X | + | corda-3.0 | + + Scenario Outline: R3 Corda node can transact with another R3 Corda node where node configuration is changed on one of the R3 Corda nodes + Given a node A of version + And node A has the finance app installed + And node A configuration is changed + And a node B of version + And node B has the finance app installed + When the network is ready + Then node A can transfer 100 tokens to node B + + Examples: + | Corda-Node-Version-X | + | r3corda-3.0-DP3-RC01 | + + Scenario Outline: R3 Corda node can transact with another Corda (OS) node where where node configuration is changed on both of the R3 Corda nodes + Given a node A of version + And node A configuration is changed + And node A has the finance app installed + And a node B of version + And node B configuration is changed + And node B has the finance app installed + When the network is ready + Then node A can transfer 100 tokens to node B + + Examples: + | Corda-Node-Version-X | Corda-Node-Version-Y | + | r3corda-3.0-DP3-RC01 | corda-3.0 | diff --git a/testing/qa/behave/compatibility/resources/features/compatibility/node/node-databases.feature b/testing/qa/behave/compatibility/resources/features/compatibility/node/node-databases.feature new file mode 100644 index 0000000000..2e711c9015 --- /dev/null +++ b/testing/qa/behave/compatibility/resources/features/compatibility/node/node-databases.feature @@ -0,0 +1,126 @@ +@compatibility @node @database +Feature: Compatibility - Node databases + To support an interoperable Corda network, a Corda (OS) node must have the ability to transact with an R3 Corda (Enterprise) node using different databases: + H2, azure-sql, sql-server, postgress, oracle + + Scenario Outline: Corda (OS) Node using H2 database can transact with R3 Corda node also using an H2 database + Given a node A of version + And node A uses database of type + And node A has the finance app installed + And a node B of version + And node B uses database of type + And node B has the finance app installed + When the network is ready + Then node A can transfer 100 tokens to node B + Then node B can transfer 100 tokens to node A + + Examples: + | Corda-Node-Version | R3-Corda-Node-Version | Database-Type-A | + | corda-3.0 | r3corda-3.0 | H2 | + + Scenario Outline: Corda (OS) Node using H2 database can transact with R3 Corda node using azure-sql database + Given a node A of version + And node A uses database of type + And node A has the finance app installed + And a node B of version + And node B uses database of type + And node B has the finance app installed + When the network is ready + Then node A can transfer 100 tokens to node B + Then node B can transfer 100 tokens to node A + + Examples: + | Corda-Node-Version | R3-Corda-Node-Version | Database-Type-A | Database-Type-B | + | corda-3.0 | r3corda-3.0 | H2 | azure-sql | + + Scenario Outline: Corda (OS) Node using H2 database can transact with R3 Corda node using a sql-server database + Given a node A of version + And node A uses database of type + And node A has the finance app installed + And a node B of version + And node B uses database of type + And node B has the finance app installed + When the network is ready + Then node A can transfer 100 tokens to node B + Then node B can transfer 100 tokens to node A + + Examples: + | Corda-Node-Version | R3-Corda-Node-Version | Database-Type-A | Database-Type-B | + | corda-3.0 | r3corda-3.0 | H2 | sql-server | + + Scenario Outline: Corda (OS) Node using H2 database can transact with R3 Corda node using an oracle 11g database + Given a node A of version + And node A uses database of type + And node A has the finance app installed + And a node B of version + And node B uses database of type + And node B has the finance app installed + When the network is ready + Then node A can transfer 100 tokens to node B + Then node B can transfer 100 tokens to node A + + Examples: + | Corda-Node-Version | R3-Corda-Node-Version | Database-Type-A | Database-Type-B | + | corda-3.0 | r3corda-3.0 | H2 | oracle11g | + + Scenario Outline: Corda (OS) Node using H2 database can transact with R3 Corda node using an oracle 12c database + Given a node A of version + And node A uses database of type + And node A has the finance app installed + And a node B of version + And node B uses database of type + And node B has the finance app installed + When the network is ready + Then node A can transfer 100 tokens to node B + Then node B can transfer 100 tokens to node A + + Examples: + | Corda-Node-Version | R3-Corda-Node-Version | Database-Type-A | Database-Type-B | + | corda-3.0 | r3corda-3.0 | H2 | oracle12c | + + Scenario Outline: Corda (OS) Node using H2 database can transact with R3 Corda node using a postgres database + Given a node A of version + And node A uses database of type + And node A has the finance app installed + And a node B of version + And node B uses database of type + And node B has the finance app installed + When the network is ready + Then node A can transfer 100 tokens to node B + Then node B can transfer 100 tokens to node A + + Examples: + | Corda-Node-Version | R3-Corda-Node-Version | Database-Type-A | Database-Type-B | + | corda-3.0 | r3corda-3.0 | H2 | postgres | + + + Scenario Outline: Corda network of an (OS) Node using H2 database and R3 Corda nodes using different commercial database providers and versions transacting between each other + Given a node A of version + And node A uses database of type + And node A has the finance app installed + And a node B of version + And node B uses database of type + And node B has the finance app installed + And a node C of version + And node C uses database of type + And node C has the finance app installed + And a node D of version + And node D uses database of type + And node D has the finance app installed + And a node E of version + And node E uses database of type + And node E has the finance app installed + And a node F of version + And node F uses database of type + And node F has the finance app installed + When the network is ready + Then node A can transfer 100 tokens to node B + Then node B can transfer 100 tokens to node C + Then node C can transfer 100 tokens to node D + Then node D can transfer 100 tokens to node E + Then node E can transfer 100 tokens to node F + Then node F can transfer 100 tokens to node A + + Examples: + | Corda-Node-Version | R3-Corda-Node-Version | Database-Type-A | Database-Type-B | Database-Type-C | Database-Type-D | Database-Type-E | Database-Type-F | + | corda-3.0 | r3corda-3.0 | H2 | azure-sql | sql-server | oracle11g | oracle12c | postgres | \ No newline at end of file diff --git a/testing/qa/behave/compatibility/resources/features/compatibility/node/node-versions.feature b/testing/qa/behave/compatibility/resources/features/compatibility/node/node-versions.feature new file mode 100644 index 0000000000..4382a98f75 --- /dev/null +++ b/testing/qa/behave/compatibility/resources/features/compatibility/node/node-versions.feature @@ -0,0 +1,88 @@ +@compatibility @node +Feature: Compatibility - Node versions + To support an interoperable Corda network, a Corda (OS) node must have the ability to transact with an R3 Corda (Enterprise) node for the same version. + + Scenario Outline: Startup a Corda (OS) Node + Given a node PartyA of version + When the network is ready + + Examples: + | Corda-Node-Version | + | corda-3.0 | + + Scenario Outline: Startup a Corda (OS) Node from Artifactory + Given a node PartyA of version + And a node PartyB of version + When the network is ready + + Examples: + | Corda-Node-Version | + | corda-3.0 | + + Scenario Outline: Startup an R3 Corda Node from Artifactory + Given a node PartyA of version + When the network is ready + + Examples: + | Corda-Node-Version | + | r3corda-3.0-DP3-RC01 | + + Scenario Outline: Startup a Corda (OS) Node and print its node information + Given a node PartyA of version + When the network is ready + Then user can retrieve logging information for node A + And user can retrieve node identity information for node A + + Examples: + | Corda-Node-Version | + | corda-3.0 | + + Scenario Outline: Startup a Corda (OS) Node with several Cordapps deployed. + Given a node PartyA of version +# And node PartyA has app installed: net.corda:bank-of-corda-demo-corda:CORDA_VERSION +# And node PartyA has app installed: net.corda:trader-demo-corda:CORDA_VERSION + When the network is ready + Then user can retrieve logging information for node A + And user can retrieve node identity information for node A + + Examples: + | Corda-Node-Version | + | corda-3.0 | + + Scenario Outline: Startup a Corda (OS) Node and issue some currency + Given a node PartyA of version + And a nonvalidating notary Notary of version + When the network is ready + Then node PartyA can issue 1000 + + Examples: + | Corda-Node-Version | Currency | + | corda-3.0 | GBP | + + Scenario Outline: R3 Corda (Enterprise) Node can transact with Corda (OS) node, in a Corda OS configured network + Given a node PartyA of version + And node PartyA has the finance app installed + And a node PartyB of version + And node PartyB has the finance app installed + And a nonvalidating notary Notary of version + When the network is ready + Then node PartyA can issue 1000 + And node PartyA can transfer 100 to node B + + Examples: + | Corda-Node-Version | R3-Corda-Node-Version | Currency | + | corda-3.0 | r3-master | GBP | + + Scenario Outline: Corda (OS) Node can transact with R3 Corda (Enterprise) node, in an R3 Corda configured network. + Given a node PartyA of version + And node PartyA has the finance app installed + And a node PartyB of version + And node PartyB has the finance app installed + And a nonvalidating notary Notary of version + When the network is ready + Then node PartyA can issue 1000 + And node PartyA can transfer 100 to node B + + Examples: + | Corda-Node-Version | R3-Corda-Node-Version | Currency | + | corda-3.0 | r3-master | GBP | \ No newline at end of file diff --git a/testing/qa/behave/compatibility/resources/features/compatibility/notary/notary-change.feature b/testing/qa/behave/compatibility/resources/features/compatibility/notary/notary-change.feature new file mode 100644 index 0000000000..db65a4bd48 --- /dev/null +++ b/testing/qa/behave/compatibility/resources/features/compatibility/notary/notary-change.feature @@ -0,0 +1,31 @@ +@compatibility @notary +Feature: Compatibility - Notary version change + To support an interoperable Corda network, a Corda node using a Notary type must have the ability to transact with another Corda node + using a different Notary type by changing Notarised states from one Notary type to another (by invoking notary change flow). + + Scenario Outline: Corda (OS) nodes can continue transacting with each other, using states that change from one Notary type to another (by invoking notary change flow) + Given a node A of version using + And node A has the finance app installed + And node A changes notary to + And a node B of version using + And node B has the finance app installed + When the network is ready + Then node A can transfer 100 tokens to node B + + Examples: + | Corda-Node-Version | Notary-Type-A | Notary-Type-B | + | corda-3.0 | notary-validating | notary-non-validating | + + Scenario Outline: Corda (OS) nodes can continue transacting with each other, using states that have been signed by different notaries (using transaction resolution). + Given a node A of version using + And node A has the finance app installed + And a node B of version using + And node B has the finance app installed + When the network is ready + Then node A can issue 1000 + And node A can transfer 100 to node B + + Examples: + | Corda-Node-Version | Notary-Type-A | Notary-Type-B | + | corda-3.0 | notary-validating | notary-non-validating | + diff --git a/testing/qa/behave/compatibility/resources/features/compatibility/notary/notary-healthcheck.feature b/testing/qa/behave/compatibility/resources/features/compatibility/notary/notary-healthcheck.feature new file mode 100644 index 0000000000..b29e7e4cb4 --- /dev/null +++ b/testing/qa/behave/compatibility/resources/features/compatibility/notary/notary-healthcheck.feature @@ -0,0 +1,14 @@ +@compatibility @notary +Feature: Compatibility - Notary cluster member changes. + To support an interoperable Corda network, a Corda OS node must have the ability to transact with an R3 Corda Notary cluster. + + Scenario Outline: Corda (OS) health checker node can interact with R3 Corda RAFT notary cluster. + Given a node PartyA of version + And node PartyA has app installed: +# And a 3 node validating RAFT notary cluster of version + When the network is ready + Then node PartyA can run + + Examples: + | Corda-Node-Version | R3-Corda-Node-Version | Cordapp-Name | NumIterations | SleepMillis | + | corda-3.0 | r3-master | notaryhealthcheck | 10 | 200 | diff --git a/testing/qa/behave/compatibility/resources/features/compatibility/notary/notary-versions.feature b/testing/qa/behave/compatibility/resources/features/compatibility/notary/notary-versions.feature new file mode 100644 index 0000000000..7d4f40299f --- /dev/null +++ b/testing/qa/behave/compatibility/resources/features/compatibility/notary/notary-versions.feature @@ -0,0 +1,17 @@ +@compatibility @notary +Feature: Compatibility - Notary version change + To support an interoperable Corda network, a Corda node must have the ability to transact with another Corda node + using notarised states from a different Notary version. + + Scenario Outline: Corda (OS) nodes can continue transacting with each other, where states have been notarised by different versions of a notary + Given a node A of version + And node A has the finance app installed + And a node B of version + And node B has the finance app installed + When the network is ready + Then node A can transfer 100 tokens to node B using + And node B can transfer 100 tokens to node A using + + Examples: + | Corda-Node-Version | Notary-Version-X | Notary-Version-Y | + | corda-3.0 | notary-r3c-3.0-DP2 | notary-r3c-3.0 | diff --git a/testing/qa/behave/compatibility/resources/features/interoperability.feature b/testing/qa/behave/compatibility/resources/features/interoperability.feature new file mode 100644 index 0000000000..98ee3ef03b --- /dev/null +++ b/testing/qa/behave/compatibility/resources/features/interoperability.feature @@ -0,0 +1,73 @@ +@qa +Feature: QA Interoperability + To support an interoperable Corda network, different CorDapps must have the ability to transact in mixed Corda (OS) and R3 Corda (Enterprise) networks. + + Scenario Outline: Corda (OS) Node can transact with R3 Corda (Enterprise) node, in an R3 Corda configured network. + Given a node PartyA of version with proxy + And node PartyA has the finance app installed + And a node PartyB of version + And node PartyB has the finance app installed + And a nonvalidating notary Notary of version + When the network is ready + Then node PartyA can issue 1000 + And node PartyA can transfer 100 to node PartyB + + Examples: + | R3-Corda-Node-Version | Corda-Node-Version | Currency | +# | r3-master | corda-master | GBP | +# | r3-master | corda-3.0 | GBP | + | r3corda-3.0-DP3-RC04 | corda-3.0 | GBP | + + Scenario Outline: Corda (OS) Node using H2 database can transact with R3 Corda node using a sql-server database + Given a node PartyA of version with proxy + And node PartyA uses database of type + And node PartyA has the finance app installed + And a node PartyB of version + And node PartyB has the finance app installed + And a nonvalidating notary Notary of version + When the network is ready + Then node PartyA can issue 1000 + And node PartyA can transfer 100 to node PartyB + + Examples: + | R3-Corda-Node-Version | Corda-Node-Version | Currency | Database-Type | +# | r3-master | corda-3.0 | GBP | sql-server | + | r3corda-3.0-DP3-RC04 | corda-3.0 | GBP | sql-server | + + Scenario Outline: Corda (OS) Node using H2 database can transact with R3 Corda node using a postgres database + Given a node PartyA of version with proxy + And node PartyA uses database of type + And node PartyA has the finance app installed + And a node PartyB of version + And node PartyB has the finance app installed + And a nonvalidating notary Notary of version + When the network is ready + Then node PartyA can issue 1000 + And node PartyA can transfer 100 to node PartyB + + Examples: + | R3-Corda-Node-Version | Corda-Node-Version | Currency | Database-Type | +# | r3-master | corda-3.0 | GBP | postgres | + | r3corda-3.0-DP3-RC04 | corda-3.0 | GBP | postgres | + + Scenario Outline: Corda network of an (OS) Node using H2 database and R3 Corda nodes using different commercial database providers and versions transacting between each other + Given a node PartyA of version with proxy + And node PartyA uses database of type + And node PartyA has the finance app installed + And a node PartyB of version with proxy + And node PartyB uses database of type + And node PartyB has the finance app installed + And a node PartyC of version with proxy + And node PartyC uses database of type + And node PartyC has the finance app installed + And a nonvalidating notary Notary of version + When the network is ready within 4 minutes + Then node PartyA can issue 1000 + And node PartyA can transfer 100 to node PartyB + And node PartyB can transfer 100 to node PartyC + And node PartyC can transfer 100 to node PartyA + + Examples: + | R3-Corda-Node-Version | Currency | Database-Type-1 | Database-Type-2 | Database-Type-3 | +# | r3-master | GBP | h2 | sql-server | postgres | + | r3corda-3.0-DP3-RC04 | GBP | h2 | sql-server | postgres | \ No newline at end of file diff --git a/testing/qa/behave/compatibility/resources/scripts/run-interoperability.sh b/testing/qa/behave/compatibility/resources/scripts/run-interoperability.sh new file mode 100755 index 0000000000..d65fdc8f3e --- /dev/null +++ b/testing/qa/behave/compatibility/resources/scripts/run-interoperability.sh @@ -0,0 +1,15 @@ +#!/bin/bash + +# +# Run this script from the experimental/behave directory +# +# $ pwd +# ./IdeaProjects/corda-reviews/experimental/behave +# $ src/qa-scenarios/resources/scripts/run-behave-qa.sh + +BUILD_DIR=$PWD +cd $BUILD_DIR +../../gradlew behaveJar + +# QA compatibility +java -jar $BUILD_DIR/build/libs/corda-behave.jar -d --glue net.corda.behave.scenarios -path ./src/qa-scenarios/resources/features/qa-interop-testing.feature diff --git a/testing/qa/behave/functional/resources/features/functional.feature b/testing/qa/behave/functional/resources/features/functional.feature new file mode 100644 index 0000000000..25ca856ef5 --- /dev/null +++ b/testing/qa/behave/functional/resources/features/functional.feature @@ -0,0 +1,76 @@ +@qa +Feature: QA Operational + An R3 Corda network must support cash transactions using multiple database providers. + + Scenario Outline: QA: Stand up a basic R3 Corda Network with one node that can verify its identity + Given a node PartyA of version with proxy + And node PartyA has the finance app installed + When the network is ready + Then node PartyA is on platform version 4 + And node PartyA is on release version R3.CORDA-3.0.0-DEV-PREVIEW-3 + And user can retrieve node identity information for node PartyA + + Examples: + | R3-Corda-Node-Version | + | R3.CORDA-3.0.0-DEV-PREVIEW-3 | + + Scenario Outline: QA: Stand up a basic R3 Corda Network with one node and a notary; node can issue cash to itself + Given a node PartyA of version with proxy + And a nonvalidating notary Notary of version + And node PartyA has the finance app installed + When the network is ready + Then node PartyA can issue 1000 + + Examples: + | R3-Corda-Node-Version | Currency | + | R3.CORDA-3.0.0-DEV-PREVIEW-3 | GBP | + + Scenario Outline: User can connect to an R3 Corda node using a SQL Server database + Given a node PartyA of version + And node PartyA uses database of type + When the network is ready + Then user can connect to the database of node PartyA + + Examples: + | Node-Version | Database-Type | + | R3.CORDA-3.0.0-DEV-PREVIEW-3 | SQL Server | + + Scenario Outline: QA: Node using H2 can transact with node using SQL Server, in an R3 Corda configured network. + Given a node PartyA of version with proxy + And node PartyA uses database of type + And node PartyA has the finance app installed + And a node PartyB of version + And node PartyB has the finance app installed + And a nonvalidating notary Notary of version + When the network is ready + Then node PartyA can issue 1000 + And node PartyA can transfer 100 to node B + + Examples: + | R3-Corda-Node-Version | Currency | Database-Type | + | R3.CORDA-3.0.0-DEV-PREVIEW-3 | GBP | SQL Server | + + Scenario Outline: User can connect to an R3 Corda node using a PostgreSQL database + Given a node PartyA of version + And node PartyA uses database of type + When the network is ready + Then user can connect to the database of node PartyA + + Examples: + | Node-Version | Database-Type | + | R3.CORDA-3.0.0-DEV-PREVIEW-3 | postgres | + + Scenario Outline: QA: Node using H2 can transact with node using Postgres, in an R3 Corda configured network. + Given a node PartyA of version with proxy + And node PartyA uses database of type + And node PartyA has the finance app installed + And a node PartyB of version + And node PartyB has the finance app installed + And a nonvalidating notary Notary of version + When the network is ready + Then node PartyA can issue 1000 + And node PartyA can transfer 100 to node B + + Examples: + | R3-Corda-Node-Version | Currency | Database-Type | + | R3.CORDA-3.0.0-DEV-PREVIEW-3 | GBP | postgres | diff --git a/testing/qa/behave/functional/resources/scripts/run-functional.sh b/testing/qa/behave/functional/resources/scripts/run-functional.sh new file mode 100755 index 0000000000..ca723019cd --- /dev/null +++ b/testing/qa/behave/functional/resources/scripts/run-functional.sh @@ -0,0 +1,15 @@ +#!/bin/bash + +# +# Run this script from the experimental/behave directory +# +# $ pwd +# ./IdeaProjects/corda-reviews/experimental/behave +# $ src/qa-scenarios/resources/scripts/run-behave-qa.sh + +BUILD_DIR=$PWD +cd $BUILD_DIR +../../gradlew behaveJar + +# QA compatibility +java -jar $BUILD_DIR/build/libs/corda-behave.jar -d --glue net.corda.behave.scenarios -path ./testing/qa/functional/resources/features/qa-functional-testing.feature