Добавление классов из src / test / kotlin в узлы Corda MockNetwork в качестве Cordapp - PullRequest
0 голосов
/ 12 июня 2019

Иногда в нашем тестовом коде Cordapp нам необходимо добавить дополнительные классы (будь то дополнительные потоки, службы Corda и т. Д.) В качестве Cordapp.Ранее в Corda 3.x это было возможно.Похоже, что это не так в Corda 4.x.

Пример:

Учитывая, что шаблон kotlin предполагает наличие дополнительного класса в исходных текстах теста для

/**
 * This service is representative of a service we use in our primary project.
 * It contains logic that's very useful from the perspective of our cordapps testing.
 * Historically in Corda 3.x we could load this service into the MockNetwork node's classpath
 * This is no longer the case. The log line in the initialiser is never called.
 */
@CordaService
class TestCordaService(serviceHub: AppServiceHub) : SingletonSerializeAsToken() {
//...
}

В Corda 3.x мы могли бы запустить сеть следующим образом:

MockNetwork(cordappPackages = listOf("<package names>"))

Есть ли способ достичь этого в Corda 4.x.

1 Ответ

1 голос
/ 12 июня 2019

После некоторых экспериментов я наткнулся на класс net.corda.testing.node.internal.CustomCordapp.

Мы можем использовать этот класс следующим образом:

  // we collect the distinct set of paths in the event that we don't add the same cordapp twice
  private val cordapps = listOf(
    TemplateContract::class,
    Initiator::class
// and other key cordapp classes
  ).map { it.packageName }.distinct().map { TestCordapp.findCordapp(it) }

// here we declare a custom cordapp based the entry-point classes in a given test package
  private val customTestCordapp = CustomCordapp(packages = setOf(TestCordaService::class.packageName),
    classes = setOf(TestCordaService::class.java))

  private val network = MockNetwork(MockNetworkParameters(cordappsForAllNodes = cordapps + customTestCordapp))
  // ... 

См. Этот репозиторий для примера: https://github.com/dazraf/mock-network-service-reproducer

...