mirror of
https://github.com/corda/corda.git
synced 2025-06-17 14:48:16 +00:00
Fixes relating to testing flows and services.
Fixed issue where Corda services installed in unit tests were not being marked as serialise as singleton. Also the driver now automatically picks up the scanning annotations. This required moving the NodeFactory used in smoke tests into a separate module.
This commit is contained in:
@ -15,7 +15,11 @@ UNRELEASED
|
||||
* ``CordaPluginRegistry.servicePlugins`` is also no longer used, along with ``PluginServiceHub.registerFlowInitiator``.
|
||||
Instead annotate your initiated flows with ``@InitiatedBy``. This annotation takes a single parameter which is the
|
||||
initiating flow. This initiating flow further has to be annotated with ``@InitiatingFlow``. For any services you
|
||||
may have, such as oracles, annotate them with ``@CordaService``.
|
||||
may have, such as oracles, annotate them with ``@CordaService``. These annotations will be picked up automatically
|
||||
when the node starts up.
|
||||
|
||||
* Due to these changes, when unit testing flows make sure to use ``AbstractNode.registerInitiatedFlow`` so that the flows
|
||||
are wired up. Likewise for services use ``AbstractNode.installCordaService``.
|
||||
|
||||
* Related to ``InitiatingFlow``, the ``shareParentSessions`` boolean parameter of ``FlowLogic.subFlow`` has been
|
||||
removed. This was an unfortunate parameter that unnecessarily exposed the inner workings of flow sessions. Now, if
|
||||
|
@ -80,4 +80,9 @@ valid) inside a ``database.transaction``. All node flows run within a database
|
||||
but any time we need to use the database directly from a unit test, you need to provide a database transaction as shown
|
||||
here.
|
||||
|
||||
And that's it: you can explore the documentation for the `MockNetwork API <api/kotlin/corda/net.corda.testing.node/-mock-network/index.html>`_ here.
|
||||
With regards to initiated flows (see :doc:`flow-state-machines` for information on initiated and initiating flows), the
|
||||
full node automatically registers them by scanning the CorDapp jars. In a unit test environment this is not possible so
|
||||
``MockNode`` has the ``registerInitiatedFlow`` method to manually register an initiated flow.
|
||||
|
||||
And that's it: you can explore the documentation for the `MockNetwork API <api/kotlin/corda/net.corda.testing.node/-mock-network/index.html>`_
|
||||
here.
|
||||
|
@ -275,3 +275,11 @@ Here's an example of it in action from ``FixingFlow.Fixer``.
|
||||
When overriding be careful when making the sub-class an anonymous or inner class (object declarations in Kotlin),
|
||||
because that kind of classes can access variables from the enclosing scope and cause serialization problems when
|
||||
checkpointed.
|
||||
|
||||
Testing
|
||||
-------
|
||||
|
||||
When unit testing we make use of the ``MockNetwork`` which allows us to create ``MockNode``s, which are simplified nodes
|
||||
suitable for tests. One feature we lose (and which is not suitable in unit testing anyway) is the node's ability to scan
|
||||
and automatically install orcales it finds in the CorDapp jars. Instead when working with ``MockNode`` use the
|
||||
``installCordaService`` method to manually install the oracle on the relevant node.
|
Reference in New Issue
Block a user