CTS QA Scenarios

This commit is contained in:
josecoll 2018-02-16 19:23:47 +00:00
parent e618b49a6c
commit 4c3d223d5a
23 changed files with 1065 additions and 18 deletions

View File

@ -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()
}
}

View File

@ -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

View File

@ -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 <Corda-Node-Version-X>
And node A has <Cordapp-Version-X> finance app installed
And a node B of version <Corda-Node-Version-X>
And node B has <Cordapp-Version-Y> 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 <Corda-Node-Version-X>
And node A has <Cordapp-Version-X> finance app installed
And a node B of version <Corda-Node-Version-X>
And node B has <Cordapp-Version-Y> finance app installed
And node B has upgraded <Cordapp-Version-Y> 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 <Corda-Node-Version-X>
And node A has <Cordapp-Version-X> finance app installed
And a node B of version <Corda-Node-Version-X>
And node B has <Cordapp-Version-Y> finance app installed
And node B has upgraded <Cordapp-Version-Y> 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 |

View File

@ -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 <Corda-Node-Version-X>
And node A has <Cordapp-Version-X> finance app installed
And a node B of version <Corda-Node-Version-X>
And node B has <Cordapp-Version-Y> 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 <Corda-Node-Version-X>
And node A has <Cordapp-Version-X> finance app installed
And a node B of version <Corda-Node-Version-X>
And node B has <Cordapp-Version-Y> 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 <Corda-Node-Version-X>
And node A has <Cordapp-Version-X> finance app installed
And a node B of version <Corda-Node-Version-X>
And node B has <Cordapp-Version-Y> 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 |

View File

@ -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 <Corda-Node-Version-X>
And node A has <Cordapp-Version-X> finance app installed
And a node B of version <Corda-Node-Version-X>
And node B has <Cordapp-Version-Y> finance app installed
When the network is ready
Then node A can issue 1000 <Currency>
And node A can transfer 100 <Currency> to node B
And node A is migrated to <Corda-Node-Version-Y>
And node B can transfer 100 <Currency> 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 <Corda-Node-Version-X>
And node A has <Cordapp-Version-X> finance app installed
When the network is ready
Then node A can issue 1000 <Currency>
And node A can transfer 100 <Currency> to node B
And node B has version <Corda-Node-Version-X>
And node B has <Cordapp-Version-Y> finance app installed
And node A is migrated to <Corda-Node-Version-Y>
And node B can transfer 100 <Currency> 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 <Corda-Node-Version-X>
And node A has <Cordapp-Version-X> finance app installed
When the network is ready
Then node A can issue 1000 <Currency>
And node A can transfer 100 <Currency> to node B
And node A enables flow draining mode
And node B has version <Corda-Node-Version-X>
And node B has <Cordapp-Version-Y> finance app installed
And node A is migrated to <Corda-Node-Version-Y>
And node B can transfer 100 <Currency> 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 |

View File

@ -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 <Corda-Node-Version-X> with proxy
And node A has <Cordapp-Version-X> finance app installed
And a node B of version <Corda-Node-Version-X>
And node B has <Cordapp-Version-Y> 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 |

View File

@ -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 <R3-Corda-Node-Version> with proxy
And node PartyA uses database of type <Database-Type>
And node PartyA has the finance app installed
And a node PartyB of version <Corda-Node-Version>
And node PartyB has the finance app installed
And a nonvalidating notary Notary of version <R3-Corda-Node-Version>
When the network is ready
Then node PartyA can issue 1000 <Currency>
And node PartyA can transfer 100 <Currency> 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 <R3-Corda-Node-Version> with proxy
And node PartyA uses database of type <Database-Type>
And node PartyA has the finance app installed
And a node PartyB of version <Corda-Node-Version>
And node PartyB has the finance app installed
And a nonvalidating notary Notary of version <R3-Corda-Node-Version>
When the network is ready
Then node PartyA can issue 1000 <Currency>
And node PartyA can transfer 100 <Currency> 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 <R3-Corda-Node-Version> with proxy
And node PartyA uses database of type <Database-Type-1>
And node PartyA has the finance app installed
And a node PartyB of version <R3-Corda-Node-Version>
And node PartyB uses database of type <Database-Type-2>
And node PartyB has the finance app installed
And a node PartyC of version <R3-Corda-Node-Version>
And node PartyC uses database of type <Database-Type-3>
And node PartyC has the finance app installed
And a nonvalidating notary Notary of version <R3-Corda-Node-Version>
When the network is ready
Then node PartyA can issue 1000 <Currency>
And node PartyA can transfer 100 <Currency> to node B
And node PartyB can transfer 100 <Currency> to node C
And node PartyC can transfer 100 <Currency> 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 |

View File

@ -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 <Corda-Node-Version> with proxy
And node partyA has the finance app installed
And a node partyB of version <R3-Corda-Node-Version> with proxy
And node partyB has the finance app installed
And a nonvalidating notary Notary of version <Corda-Node-Version>
When the network is ready
Then node partyA can issue 1000 <Currency>
And node partyA can transfer 100 <Currency> to node partyB
Examples:
| Corda-Node-Version | R3-Corda-Node-Version | Currency |
| corda-3.0 | r3corda-3.0-DP3-RC04 | GBP |

View File

@ -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 <Corda-Node-Version>
And node A was issued a certificate by <Doorman-Version-X>
And node A has the finance app installed
And a node B of version <Corda-Node-Version>
And node B was issued a certificate by <Doorman-Version-Y>
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 <Corda-Node-Version>
And node A was issued a certificate by <Doorman-Version-X>
And node A has the finance app installed
And a node B of version <Corda-Node-Version>
And node B was issued a certificate by <Doorman-Version-Y>
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 <Corda-Node-Version-X>
And node A was issued a certificate by <Doorman-Version-X>
And node A has the finance app installed
And a node B of version <Corda-Node-Version-Y>
And node B was issued a certificate by <Doorman-Version-Y>
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 |

View File

@ -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 <Corda-Node-Version>
And node A has the finance app installed
And a node B of version <Corda-Node-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 <Corda-Node-Version>
And node A has the finance app installed
And a node B of version <Corda-Node-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 |

View File

@ -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 <Corda-Node-Version>
And node A has the finance app installed
And node A adds a new nodeinfo address
And a node B of version <Corda-Node-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 |

View File

@ -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 <Corda-Node-Version-X>
And node A has the finance app installed
And a node B of version <Corda-Node-Version-Y>
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 <Corda-Node-Version-X>
And node A has the finance app installed
And a node B of version <Corda-Node-Version-Y>
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 <Corda-Node-Version-X>
And node A has the finance app installed
And a node B of version <Corda-Node-Version-Y>
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 |

View File

@ -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 <Corda-Node-Version-X> in high-availability mode
And node A has the finance app installed
And a node B of version <Corda-Node-Version-X>
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 |

View File

@ -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 <Corda-Node-Version-X>
And node A configuration is changed
And node A has the finance app installed
And a node B of version <Corda-Node-Version-X>
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 <Corda-Node-Version-X>
And node A has the finance app installed
And node A configuration is changed
And a node B of version <Corda-Node-Version-X>
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 <Corda-Node-Version-X>
And node A configuration is changed
And node A has the finance app installed
And a node B of version <Corda-Node-Version-Y>
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 |

View File

@ -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 <Corda-Node-Version>
And node A uses database of type <Database-Type-A>
And node A has the finance app installed
And a node B of version <R3-Corda-Node-Version>
And node B uses database of type <Database-Type-A>
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 <Corda-Node-Version>
And node A uses database of type <Database-Type-A>
And node A has the finance app installed
And a node B of version <R3-Corda-Node-Version>
And node B uses database of type <Database-Type-B>
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 <Corda-Node-Version>
And node A uses database of type <Database-Type-A>
And node A has the finance app installed
And a node B of version <R3-Corda-Node-Version>
And node B uses database of type <Database-Type-B>
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 <Corda-Node-Version>
And node A uses database of type <Database-Type-A>
And node A has the finance app installed
And a node B of version <R3-Corda-Node-Version>
And node B uses database of type <Database-Type-B>
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 <Corda-Node-Version>
And node A uses database of type <Database-Type-A>
And node A has the finance app installed
And a node B of version <R3-Corda-Node-Version>
And node B uses database of type <Database-Type-B>
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 <Corda-Node-Version>
And node A uses database of type <Database-Type-A>
And node A has the finance app installed
And a node B of version <R3-Corda-Node-Version>
And node B uses database of type <Database-Type-B>
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 <Corda-Node-Version>
And node A uses database of type <Database-Type-A>
And node A has the finance app installed
And a node B of version <R3-Corda-Node-Version>
And node B uses database of type <Database-Type-B>
And node B has the finance app installed
And a node C of version <R3-Corda-Node-Version>
And node C uses database of type <Database-Type-C>
And node C has the finance app installed
And a node D of version <R3-Corda-Node-Version>
And node D uses database of type <Database-Type-D>
And node D has the finance app installed
And a node E of version <R3-Corda-Node-Version>
And node E uses database of type <Database-Type-E>
And node E has the finance app installed
And a node F of version <R3-Corda-Node-Version>
And node F uses database of type <Database-Type-F>
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 |

View File

@ -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 <Corda-Node-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 <Corda-Node-Version>
And a node PartyB of version <Corda-Node-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 <Corda-Node-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 <Corda-Node-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 <Corda-Node-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 <Corda-Node-Version>
And a nonvalidating notary Notary of version <Corda-Node-Version>
When the network is ready
Then node PartyA can issue 1000 <Currency>
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 <Corda-Node-Version>
And node PartyA has the finance app installed
And a node PartyB of version <R3-Corda-Node-Version>
And node PartyB has the finance app installed
And a nonvalidating notary Notary of version <Corda-Node-Version>
When the network is ready
Then node PartyA can issue 1000 <Currency>
And node PartyA can transfer 100 <Currency> 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 <R3-Corda-Node-Version>
And node PartyA has the finance app installed
And a node PartyB of version <Corda-Node-Version>
And node PartyB has the finance app installed
And a nonvalidating notary Notary of version <R3-Corda-Node-Version>
When the network is ready
Then node PartyA can issue 1000 <Currency>
And node PartyA can transfer 100 <Currency> to node B
Examples:
| Corda-Node-Version | R3-Corda-Node-Version | Currency |
| corda-3.0 | r3-master | GBP |

View File

@ -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 <Corda-Node-Version> using <Notary-Type-A>
And node A has the finance app installed
And node A changes notary to <Notary-Type-B>
And a node B of version <Corda-Node-Version> using <Notary-Type-B>
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 <Corda-Node-Version> using <Notary-Type-A>
And node A has the finance app installed
And a node B of version <Corda-Node-Version> using <Notary-Type-B>
And node B has the finance app installed
When the network is ready
Then node A can issue 1000 <Currency>
And node A can transfer 100 <Currency> to node B
Examples:
| Corda-Node-Version | Notary-Type-A | Notary-Type-B |
| corda-3.0 | notary-validating | notary-non-validating |

View File

@ -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 <Corda-Node-Version>
And node PartyA has app installed: <Cordapp-Name>
# And a 3 node validating RAFT notary cluster of version <R3-Corda-Node-Version>
When the network is ready
Then node PartyA can run <Cordapp-Name> <NumIterations> <SleepMillis>
Examples:
| Corda-Node-Version | R3-Corda-Node-Version | Cordapp-Name | NumIterations | SleepMillis |
| corda-3.0 | r3-master | notaryhealthcheck | 10 | 200 |

View File

@ -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 <Corda-Node-Version>
And node A has the finance app installed
And a node B of version <Corda-Node-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 <Notary-Version-X>
And node B can transfer 100 tokens to node A using <Notary-Version-Y>
Examples:
| Corda-Node-Version | Notary-Version-X | Notary-Version-Y |
| corda-3.0 | notary-r3c-3.0-DP2 | notary-r3c-3.0 |

View File

@ -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 <R3-Corda-Node-Version> with proxy
And node PartyA has the finance app installed
And a node PartyB of version <Corda-Node-Version>
And node PartyB has the finance app installed
And a nonvalidating notary Notary of version <R3-Corda-Node-Version>
When the network is ready
Then node PartyA can issue 1000 <Currency>
And node PartyA can transfer 100 <Currency> 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 <R3-Corda-Node-Version> with proxy
And node PartyA uses database of type <Database-Type>
And node PartyA has the finance app installed
And a node PartyB of version <Corda-Node-Version>
And node PartyB has the finance app installed
And a nonvalidating notary Notary of version <R3-Corda-Node-Version>
When the network is ready
Then node PartyA can issue 1000 <Currency>
And node PartyA can transfer 100 <Currency> 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 <R3-Corda-Node-Version> with proxy
And node PartyA uses database of type <Database-Type>
And node PartyA has the finance app installed
And a node PartyB of version <Corda-Node-Version>
And node PartyB has the finance app installed
And a nonvalidating notary Notary of version <R3-Corda-Node-Version>
When the network is ready
Then node PartyA can issue 1000 <Currency>
And node PartyA can transfer 100 <Currency> 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 <R3-Corda-Node-Version> with proxy
And node PartyA uses database of type <Database-Type-1>
And node PartyA has the finance app installed
And a node PartyB of version <R3-Corda-Node-Version> with proxy
And node PartyB uses database of type <Database-Type-2>
And node PartyB has the finance app installed
And a node PartyC of version <R3-Corda-Node-Version> with proxy
And node PartyC uses database of type <Database-Type-3>
And node PartyC has the finance app installed
And a nonvalidating notary Notary of version <R3-Corda-Node-Version>
When the network is ready within 4 minutes
Then node PartyA can issue 1000 <Currency>
And node PartyA can transfer 100 <Currency> to node PartyB
And node PartyB can transfer 100 <Currency> to node PartyC
And node PartyC can transfer 100 <Currency> 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 |

View File

@ -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

View File

@ -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 <R3-Corda-Node-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 <R3-Corda-Node-Version> with proxy
And a nonvalidating notary Notary of version <R3-Corda-Node-Version>
And node PartyA has the finance app installed
When the network is ready
Then node PartyA can issue 1000 <Currency>
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 <Node-Version>
And node PartyA uses database of type <Database-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 <R3-Corda-Node-Version> with proxy
And node PartyA uses database of type <Database-Type>
And node PartyA has the finance app installed
And a node PartyB of version <R3-Corda-Node-Version>
And node PartyB has the finance app installed
And a nonvalidating notary Notary of version <R3-Corda-Node-Version>
When the network is ready
Then node PartyA can issue 1000 <Currency>
And node PartyA can transfer 100 <Currency> 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 <Node-Version>
And node PartyA uses database of type <Database-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 <R3-Corda-Node-Version> with proxy
And node PartyA uses database of type <Database-Type>
And node PartyA has the finance app installed
And a node PartyB of version <R3-Corda-Node-Version>
And node PartyB has the finance app installed
And a nonvalidating notary Notary of version <R3-Corda-Node-Version>
When the network is ready
Then node PartyA can issue 1000 <Currency>
And node PartyA can transfer 100 <Currency> to node B
Examples:
| R3-Corda-Node-Version | Currency | Database-Type |
| R3.CORDA-3.0.0-DEV-PREVIEW-3 | GBP | postgres |

View File

@ -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