* Updated interoperability scenarios to use GA Release Candidate * Removed "with proxy" and updated incorrect reference to OS master. * Update to resolve Artifactory tools if available (blob-inspector, network-bootstrapper, database-migration) * Allow passing in of argument to specify one or more scenarios to run. * Updated to RC03. * Added Oracle support in Behave framework and included functional test scenarios. * behave test using snapshot (#970) * make behave use snapshots from artifactory * rebase and fix * address PR issues * address PR issues * gradle task for bdd (#989) * gradle task for bdd (#989) * fix typo * Publishing behave-api jar for use by external applications (eg. cordapp-option). Fixed SIMMM valuation behave scenario test and startup. * Publishing behave-api jar for use by external applications (eg. cordapp-option). Fixed SIMMM valuation behave scenario test and startup. * Various fixes to make BDD working in Teamcity (#1063) * fix typo * print docker log * print docker log * attempt to fix docker * attempt to fix docker * attempt to fix docker * update to RC04 * disable clean up * try to find out why the test pick up the wrong jar * test * minor fixes * fix wrong bootstrapping procedure * remove DISABLE_CLEANUP * attempt to fix error * fixes to get postgres working * enable cleanup * generate cucumber report * bump to RC06 * attempt to make cucumber generate http report * cucumber report * some minor cleanup * removed DP3 nodes from scenarios, added oracle and bumped to RC07 * fix licence issue * fixed bootstrapper placing corda jar * Update interoperability.feature * Added missing published artifact. * Fixed compilation errors raised by stricter compilation flag checking. * Minor changes following rebase from master and re-testing. * Updates to reflect last minute naming and versioning changes applied to 3.0 release. Updated scenarios to use the officially released version of CE 3.0 * Updates following lastest PR review feedback. * Updates following lastest PR review feedback. * Align with master (maxMessageSize = mazTransactionSize). * Fix snapshot version regex matching. * Set logging level to DEBUG to ensure pattern matches catch log message output which has been downgraded from INFO * Add all supported interoperable versions.
Overview
The Behave Cucumber Scenarios defined under these sub-directories exercise Corda Enterprise and OS Corda distributions to include:
- Open Source master
- Corda Enterprise master
- Released versions of Open Source from V3.0 onwards
- Released versions of Corda Enterprise from V3.0 DEV PREVIEW 3 onwards
Compatibility scenarios exercise:
- mixed networks: combinations of OS and Corda Enterprise nodes configured within an R3 Network
- mixed-versioned nodes: combinations of different versions of OS (master, V3.0, V3.1, etc) and Corda Enterprise (master, V3.0 DP, V3.0 GA) nodes within an R3 Network.
- mixed-versioned corDapps: combinations of nodes running different versions of CorDapps (both valid and invalid upgrade mixes).
- mixed-services: ability to continue transacting upon notaries, oracles, doorman upgrades & changes.
Functional scenarios exercise the key behaviours of Corda Enterprise components and node configurations to include:
- basic cash management functions (issuance, transfer, redemption)
- vault usage of different database providers (H2, sql-server, postgreSQL)
- doorman certificate issuance and usage
- compatibility zone network parameter registration and updates
- network map registration and updates
- notary registration and updates
NOTE:
- the CTS framework uses R3's internal artifactory repositories to setup/configure officially released versions of Corda:
- Scenarios specifying
master
will use the latest code checked into the respective Open Source and Enterprise repositories:
Further goals of this project are to:
- automatically generate and register Docker images with target Azure Test Environments (eg. Functional/QA, CTS)
- effect execution of scenarios in specified Target Environments
- use Before and After hooks to pre-configure Target Environments to allow batch running of multiple scenarios (eg. a given feature will specify the environment once for one or many scenarios)
QA setup and usage instructions
Setup
Set up the staging area which will hold all the distributions of Corda referenced in the test scenarios:
- specify the staging root directory:
$export STAGING_ROOT=$HOME/staging
- if any of your tests are referencing a master version of Corda OS, checkout the latest version of the Open Source repo and run:
$ cd experimental/behave
$ ./prepare.sh
You should now see the following artifacts in your staging area:
$ ls -lR /Users/home/staging/corda/corda-master
total 285440
drwxr-xr-x 3 user staff 96 4 Jun 16:11 apps
-rw-r--r-- 1 user staff 55439705 4 Jun 16:11 corda.jar
-rw-r--r-- 1 user staff 90699598 4 Jun 16:11 network-bootstrapper.jar
/Users/home/staging/corda/corda-master/apps:
total 4688
-rw------- 1 user staff 2396954 4 Jun 16:11 corda-finance-4.0-SNAPSHOT.jar
- similarly, if any of your tests are referencing a master version of Corda Enterprise, checkout the latest version of the Enterprise repo and run:
$ cd experimental/behave
$ ./prepare.sh
You should now see the following artifacts in your staging area:
$ ls -lR /Users/home/staging/corda/r3corda-master/
total 503264
drwxr-xr-x 6 user staff 192 4 Jun 16:39 apps
-rw-r--r-- 1 user staff 6239281 4 Jun 16:39 corda-rpcProxy.jar
-rw-r--r-- 1 user staff 66441262 4 Jun 16:38 corda.jar
-rw-r--r-- 1 user staff 71987460 4 Jun 16:39 dbmigration.jar
-rw-r--r-- 1 user staff 112985324 4 Jun 16:39 network-bootstrapper.jar
-rwxr-xr-x 1 user staff 1224 4 Jun 16:39 startRPCproxy.sh
/Users/home/staging/corda/r3corda-master/apps:
total 82248
-rw------- 1 user staff 2418144 4 Jun 16:38 corda-finance-R3.CORDA-3.0-SNAPSHOT.jar
Notes:
- all versions of Corda published to the Artifactory release repositories are automatically downloaded and configured on the fly as part of a test scenario.
- Docker must be running for SQL Server, Oracle and PostrgeSQL tests.
Usage
Checkout the latest version of the Enterprise repo and run:
$cd experimental/behave
../../gradlew behaveJar
Change to the QA testing directory containing the scenario scripts and run:
$cd ../../test/qa
$export BEHAVE_JAR=$(ls ../../../experimental/behave/build/libs/corda-behave-*.jar | tail -n1)
To verify the tool is ready to be used run:
$ java -DSTAGING_ROOT=${STAGING_ROOT} -jar ${BEHAVE_JAR}
You should now see the following output providing details on how to run the tool:
Missing required option(s) [path]
Usage: ScenarioRunner [options] --path <location of feature scenario definitions>
Examples:
ScenarioRunner -path <features-dir>
ScenarioRunner -path <features-dir>/<name>.feature
ScenarioRunner -path <features-dir>/<name>.feature:3:9
ScenarioRunner -path <features-dir> --plugin html --tags @qa
ScenarioRunner -path <features-dir> --plugin html --tags @compatibility
Please refer to the Cucumber documentation https://cucumber.io/docs/reference/jvm for more info.
Option (* = required) Description
--------------------- -----------
-d
--glue [location of additional step (default: net.corda.behave.scenarios)
definitions, hooks and plugins]
* --path <Path location of .feature
specifications>
--plugin [register additional plugins (default: pretty)
(see https://cucumber.
io/docs/reference/jvm)]
--tags [only run scenarios marked as
@<tag-name>]
Note: passing in a -d option will perform a dry run only (validates the syntax of the scenario but does not execute the code)
Scenario scripts
There are currently two sets of scripts:
- Functional
# the Cucumber behave test scenario definitions themselves
$ls -l functional/resources/features/functional.feature
# Unix script to easily run these
$ls -l functional/resources/scripts/run-functional.sh
- Interoperability & Compatibility
# the Cucumber behave test scenario definitions themselves
$ls -l compatibility/resources/features/interoperability.feature
# Unix script to easily run these
$ls -l compatibility/resources/scripts/run-interoperability.sh
Note: the complete suite of Compatibility test scenarios have note yet been fully implemented.
You can now run the above test scripts in a number of different ways:
- as a complete suite called a feature set:
# run all scenarios in the functional.feature file
$java -DSTAGING_ROOT=${STAGING_ROOT} -jar ${BEHAVE_JAR} -path functional/resources/features/functional.feature
# run all scenarios in the interoperability.feature file
$java -DSTAGING_ROOT=${STAGING_ROOT} -jar ${BEHAVE_JAR} -path compatibility/resources/features/interoperability.feature
- as a set of tagged scenarios within a feature file:
# run all scenarios tagged with qa in the interoperability.feature file
$java -DSTAGING_ROOT=${STAGING_ROOT} -jar ${BEHAVE_JAR} -path compatibility/resources/features/interoperability.feature:@qa
- as an individual scenario for all example configurations:
# run the scenario defined on line 5 of the interoperability.feature file
$java -DSTAGING_ROOT=${STAGING_ROOT} -jar ${BEHAVE_JAR} -path compatibility/resources/features/interoperability.feature:5
# by default the above will run as many times as there are parameterised variable definitions
Examples:
| R3-Corda-Node-Version | Corda-Node-Version | Currency |
| r3-master | corda-master | GBP |
| corda-3.0 | corda-3.1 | GBP |
| R3.CORDA-3.0.0-DEV-PREVIEW-3 | corda-3.0 | GBP |
| R3.CORDA-3.0.0-DEV-PREVIEW-3 | corda-3.1 | GBP |
- as an individual scenario for a single example configuration you will need to comment out the other example line items:
# run the scenario defined on line 5 of the interoperability.feature file
$java -DSTAGING_ROOT=${STAGING_ROOT} -jar ${BEHAVE_JAR} -path compatibility/resources/features/interoperability.feature:5
# by default the above will the scenario using *corda-3.0* and *corda-3.1* node versions only:
Examples:
| R3-Corda-Node-Version | Corda-Node-Version | Currency |
# | r3-master | corda-master | GBP |
| corda-3.0 | corda-3.1 | GBP |
# | R3.CORDA-3.0.0-DEV-PREVIEW-3 | corda-3.0 | GBP |
# | R3.CORDA-3.0.0-DEV-PREVIEW-3 | corda-3.1 | GBP |