Coder Social home page Coder Social logo

tryorama's Introduction

Project Discord License: CAL 1.0 Test

Tryorama

Tryorama provides a convenient way to run an arbitrary amount of Holochain conductors on your local machine, as well as on network nodes that are running the TryCP service. In combination with the test runner and assertion library of your choice, you can test the behavior of multiple Holochain nodes in a network. Included functions to clean up used resources make sure that all state is deleted between tests so that they are independent of one another.

npm install @holochain/tryorama

Complete API reference

Compatibility

Tryorama v0.11.x is compatible with JS client v0.13.x and Holochain v0.1.x.

Tryorama v0.15.x is compatible with JS client v0.16.x and Holochain v0.2.x.

Tryorama v0.16.x is compatible with JS client v0.17.x and Holochain v0.3.x.

Example

With a few lines of code you can start testing your Holochain application. The examples in this repository use tape as test runner and assertion library. You can choose any other runner and library.

Example with 2 conductors creating and reading an entry.

There are lots of examples for working with scenarios and conductors in the scenario and conductor test folders.

Curried function to get a zome caller

Example

Signals

Scenario.addPlayerWithHapp as well as Conductor.installAgentsHapps allow for a signal handler to be specified. Signal handlers are registered with the conductor and act as a callback when a signal is received.

Example sending and receiving a signal

Logging

The log level can be set with the environment variable TRYORAMA_LOG_LEVEL. Log levels used in Tryorama are debug, verbose and info. The default level is info. To set the log level for a test run, prepend the test command with:

TRYORAMA_LOG_LEVEL=debug node test.js

Concepts

Scenarios provide high-level functions to interact with the Holochain Conductor API. Players consist of a conductor, an agent and installed hApps, and can be added to a Scenario. Access to installed hApps is made available through the cells, which can either be destructured according to the sequence during installation or retrieved by their role id.

One level underneath the Scenario is the Conductor. Apart from methods for creation, startup and shutdown, it comes with complete functionality of Admin and App API that the JavaScript client offers.

tryorama's People

Contributors

alastairong avatar connoropolous avatar ddd-mtl avatar dependabot[bot] avatar freesig avatar guillemcordoba avatar jetttech avatar jost-s avatar maackle avatar mattyg avatar thetasinner avatar timotree3 avatar zippy avatar zo-el avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

tryorama's Issues

Doesnt install again

 @holochain/[email protected] postinstall /Users/philipbeadle/holochain-2020/scaffolded-apps/holodex/dna/tests/node_modules/@holochain/tryorama
> npm run build


> @holochain/[email protected] build /Users/philipbeadle/holochain-2020/scaffolded-apps/holodex/dna/tests/node_modules/@holochain/tryorama
> rm -rf ./lib ; tsc -d

../../../../../node_modules/@types/sizzle/index.d.ts:14:35 - error TS2304: Cannot find name 'Element'.

14     <TArrayLike extends ArrayLike<Element>>(selector: string, context: Element | Document | DocumentFragment, results: TArrayLike): TArrayLike;
                                     ~~~~~~~

../../../../../node_modules/@types/sizzle/index.d.ts:14:72 - error TS2304: Cannot find name 'Element'.

14     <TArrayLike extends ArrayLike<Element>>(selector: string, context: Element | Document | DocumentFragment, results: TArrayLike): TArrayLike;
                                                                          ~~~~~~~

../../../../../node_modules/@types/sizzle/index.d.ts:14:82 - error TS2304: Cannot find name 'Document'.

14     <TArrayLike extends ArrayLike<Element>>(selector: string, context: Element | Document | DocumentFragment, results: TArrayLike): TArrayLike;
                                                                                    ~~~~~~~~

../../../../../node_modules/@types/sizzle/index.d.ts:14:93 - error TS2304: Cannot find name 'DocumentFragment'.

14     <TArrayLike extends ArrayLike<Element>>(selector: string, context: Element | Document | DocumentFragment, results: TArrayLike): TArrayLike;
                                                                                               ~~~~~~~~~~~~~~~~

../../../../../node_modules/@types/sizzle/index.d.ts:15:34 - error TS2304: Cannot find name 'Element'.

15     (selector: string, context?: Element | Document | DocumentFragment): Element[];
                                    ~~~~~~~

../../../../../node_modules/@types/sizzle/index.d.ts:15:44 - error TS2304: Cannot find name 'Document'.

15     (selector: string, context?: Element | Document | DocumentFragment): Element[];
                                              ~~~~~~~~

../../../../../node_modules/@types/sizzle/index.d.ts:15:55 - error TS2304: Cannot find name 'DocumentFragment'.

15     (selector: string, context?: Element | Document | DocumentFragment): Element[];
                                                         ~~~~~~~~~~~~~~~~

../../../../../node_modules/@types/sizzle/index.d.ts:15:74 - error TS2304: Cannot find name 'Element'.

15     (selector: string, context?: Element | Document | DocumentFragment): Element[];
                                                                            ~~~~~~~

../../../../../node_modules/@types/sizzle/index.d.ts:18:28 - error TS2304: Cannot find name 'Element'.

18     matchSelector(element: Element, selector: string): boolean;
                              ~~~~~~~

Unable to override custom zome port for players

Since the 0.2.x branch I can't use genConfigArgs in the conductor anymore. How should I go about dynamically injecting zomePort now?

The use-case is that I need to be able to configure the zome port to pass it to hc-web-client in order to run integration tests against the GraphQL API that my app exposes.

First let's make sure I am attempting this correctly- seems like I need to inject the custom zome port within the config handler function rather than orchestrator config now. The parameter name is interfacePort rather than zomePort. Seems fine- the data being generated by ScenarioApi in const configJson = await configSeed(configSeedArgs) appears to have the correct port assignments reflected in configJson.

Only issue is you are doing const { configDir, interfacePort } = configSeedArgs a few lines lower down, which means you're pulling interfacePort from the original config, before it's had a chance to be intercepted and modified by my custom config handler. The end result is that the Player being constructed is listening on the unmodified port, it never gets a connection, and my tests hang.

Support hdk 0.0.115

Trying to bump hdk to 0.0.115, I encounter an error when running tests with tryorama, detail info here:
holochain-open-dev/holochain-time-index#7

It seems properties in DNA configuration is not interpreted as the old fasion.

Another thing I noticed is, hdk-0.0.114 doesn't provide properties in ZoomInfo, which is also weird, as it's in 0.0.110 and 0.0.115.

Example test fails: Field "manifest" missing

Running npm test in the example folder from a nix shell with nightly holochain build throws an error:

07:04:57 [tryorama: player c0] debug: Player.installHapp(["/Users/jost/Desktop/dev/holochain/tryorama/example/test.dna.gz"], noAgentPubKey)
07:04:57 [tryorama] error: Test error: {
  type: 'error',
  data: { type: 'internal_error', data: 'missing field `manifest`' }
}
not ok 1 Test threw an exception. See output for details.
  ---
    operator: fail
    at: <anonymous> (/Users/jost/Desktop/dev/holochain/tryorama/src/middleware.ts:137:13)
    stack: |-
      Error: Test threw an exception. See output for details.
          at Test.assert [as _assert] (/Users/jost/Desktop/dev/holochain/tryorama/node_modules/tape/lib/test.js:304:54)
          at Test.bound [as _assert] (/Users/jost/Desktop/dev/holochain/tryorama/node_modules/tape/lib/test.js:91:32)
          at Test.fail (/Users/jost/Desktop/dev/holochain/tryorama/node_modules/tape/lib/test.js:398:10)
          at Test.bound [as fail] (/Users/jost/Desktop/dev/holochain/tryorama/node_modules/tape/lib/test.js:91:32)
          at /Users/jost/Desktop/dev/holochain/tryorama/src/middleware.ts:137:13
          at processTicksAndRejections (internal/process/task_queues.js:97:5)
  ...
07:04:57 [tryorama] debug: Test failed: basic test {
  type: 'error',
  data: { type: 'internal_error', data: 'missing field `manifest`' }
}

I've debugged into the (fairly complex) code and and got to the point that it happens when the client sends the message to register the test.dna to the AdminWebSocket. The response is the above error then.

I don't understand the architecture enough yet to know where the registering fails on the admin web socket. Perhaps @Connoropolous or @zo-el can see on the spot where the problem is?

Feature request: player cleanup hooks

After being able to integrate #16 I've been able to run some more tests which have yielded interesting results. Things are mostly working, but I've found that I need to clean up player port mappings between test runs since tape runs everything inside one process.

What I've done for the moment is not pretty and necessitates a higher-order function around the player in order to inject cleanup logic, which seems like a bit of an awkward workaround.

Expose and document more config on Player

Player already has _instancePort, which is an undocumented "private" member. There is at least one use case (#22) where it would have been useful for that to have been publicly known. Some of these "private" fields should become public, and get documented.

the logging situation

building on the learnings from #124...

Context, when updating to latest tryorama we (working on hREA) "lost" our wasm debug logs. We couldn't find them. I had to dig through source code and other things to figure out what to do to get them back, which I've only just managed now. My solution was to set TRYORAMA_LOG_LEVEL=debug. This struck me as non-obvious and I don't think I've seen it anywhere in the README or documentation but please let me know if I'm wrong about that.

Once I'd set, I was able to see my wasm log through tryorama again:

14:11:56 [Tryorama - Local Conductor] debug: starting conductor
Jun 20 14:11:56.088 DEBUG wasm_trace: hc_zome_rea_agreement:zomes/rea_agreement/zome/src/lib.rs:37 WARGH

The logging situation is pretty confusing. starting conductor here doesn't make sense since it appears for any logged line, coming through stdout. There is also the question/issue of the logging level. I think stdout and stderr logs should both share the same logging level since they're not otherwise semantically meaningful. The logging level of tryorama I think is having no impact on or respect for the logging level of holochain itself (aside the stdout/stderr issue).

runConductorProcess.stdout.on("data", (data: Buffer) => {
logger.debug(`starting conductor\n${data}`);

runConductorProcess.stderr.on("data", (data: Buffer) => {
logger.info(data.toString());

Related somewhat: holochain/holochain#1449

[RSM] Version mistmatch with @holochain/conductor-api

When installing tryorama and running npm test, this error gets returned:

TypeError: cell_data is not iterable

Updating to the latest version of @holochain/conductor-api IN GITHUB fixes the issue. Once a new version of @holochain/conductor-api gets released, tryorama can be updated to point to the newer version on npm.

For now, workaround for developers: install the conductor-api from github in your test/package.json with:

npm install https://github.com/holochain/holochain-conductor-api

Stabilising latest version API and ensuring Holochain core compatibility

Hey @maackle (: I've been having issues upgrading to 0.2.0-rc.2 (config doesn't seem to work as it's documented), but I can't find the source code of that version anywhere to check against... it doesn't seem to be on master here.

I haven't had debug output in tests for a while now and I was hoping upgrading would fix the issue. But the code I'm looking at that came from NPM seems to have changed dramatically or be midway through an edit- I can't use genConfigArgs in the conductor anymore. How should I go about dynamically injecting zomePort now? Is this a semi-stable API I'm looking at, or will the next version be different?

console logging not clear

console.log no longer works for me within the tests..

also its not clear from the documentation how you set the wasm log level?
TRYORAMA_LOG_LEVEL=debug node test.js ?

i just do npm test from the command line..
should the log level not be a property one can set in the test scripts?

incomprehensible error.. wbindgen

i assume this means some problem with the wasm build.. but better error handling and info is needed

mac os ventura
"dependencies": {
"@msgpack/msgpack": "^2.7.0",
"@holochain/client": "^0.16.2",
"@holochain/tryorama": "^0.15.1",
"js-base64": "3.7.5",
"typescript": "^4.9.4",
"vitest": "^0.28.4"
},

stderr | .test.ts > create and read zome
error occurred during test run: internal_error: Conductor returned an error while using a ConductorApi: RibosomeError(WasmRuntimeError(RuntimeError { source: User(WasmError { file: "crates/holochain/src/core/ribosome/real_ribosome.rs", line: 441, error: Compile("Error while importing "wbindgen_placeholder"."__wbindgen_describe": unknown import. Expected Function(FunctionType { params: [I32], results: [] })") }), wasm_trace: [], native_trace: 0:


<unknown>
   1: <unknown>
   2: <unknown>
   3: <unknown>
   4: <unknown>
   5: <unknown>
   6: <unknown>
   7: <unknown>
   8: <unknown>
   9: <unknown>
  10: <unknown>
  11: <unknown>
  12: <unknown>
  13: <unknown>
  14: <unknown>
  15: <unknown>
  16: <unknown>
  17: <unknown>
  18: <unknown>
  19: <unknown>
  20: <unknown>
  21: <unknown>
  22: <unknown>
  23: <unknown>
  24: <unknown>
  25: <unknown>
  26: <unknown>
  27: <unknown>
  28: <unknown>
  29: <unknown>
  30: <unknown>
 }))
    at catchError (file:///Users/node_modules/@holochain/tryorama/node_modules/@holochain/client/lib/api/common.js:37:23)
    at processTicksAndRejections (node:internal/process/task_queues:95:5)
    at AdminWebsocket.installApp (file:///Users/node_modules/@holochain/tryorama/node_modules/@holochain/client/lib/api/common.js:13:22)
    at Scenario.addPlayerWithApp (file:///Users/node_modules/@holochain/tryorama/lib/local/scenario.js:61:25)
    at async Promise.all (index 1)
    at Scenario.addPlayersWithApps (file:///Users/node_modules/@holochain/tryorama/lib/local/scenario.js:77:25)
    at /Users/test.ts:20:26
    at Module.runScenario (file:///Users/node_modules/@holochain/tryorama/lib/local/scenario.js:131:9)
    at /Users/test.ts:10:3
    at runTest (file:///Users/node_modules/@vitest/runner/dist/index.js:439:9)

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ Failed Tests 1 ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯

 ❯ catchError ../node_modules/@holochain/tryorama/node_modules/@holochain/client/lib/api/common.js:37:23
 ❯ AdminWebsocket.installApp ../node_modules/@holochain/tryorama/node_modules/@holochain/client/lib/api/common.js:13:22
 ❯ Scenario.addPlayerWithApp ../node_modules/@holochain/tryorama/lib/local/scenario.js:61:25
 ❯ Scenario.addPlayersWithApps ../node_modules/@holochain/tryorama/lib/local/scenario.js:77:25
 ❯ src/my_space/schedule/appointment.test.ts:20:26
     18|     // Add 2 players with the test app to the Scenario. The returned players
     19|     // can be destructured.
     20|     const [alice, bob] = await scenario.addPlayersWithApps([appSource, appSource]);
       |                          ^
     21| 
     22|     // Shortcut peer discovery through gossip and register all agents in every
 ❯ Module.runScenario ../node_modules/@holochain/tryorama/lib/local/scenario.js:131:9


executing command runs indefinitely

executing command ... path-to-test-file sometimes runs indefinitely ... race condition?
more console logging about what its actually doing would be useful

Networking bugs & correct network configuration for v0.0.32-alpha2

I've recently started updating my Diorama tests to Try-o-rama. Operations which previously ran fine are now hanging the backend.

Reproducible on both 0.1.2-beta.4 and 0.1.1-beta.1. In both cases I have been using core v0.0.32-alpha2.

It appears as though this might be due to the status of networking support? These are the results I'm getting:

With n3h network configuration provided to Config.genConfig and using "n3h": "github:holochain/n3h#0.0.20-alpha" as a dependency, I get an internal crash:

☯☯☯ [[[CONDUCTOR alice]]]
☯ response: Err(ErrorMessage { msg: "bad exit Some(1) \"internal/modules/cjs/loader.js:857\\n  return process.dlopen(module, path.toNamespacedPath(filename));\\n                 ^\\n\\nError: /home/pospi/projects/holo-rea/oce-holo/node_modules/better-sqlite3/build/better_sqlite3.node: undefined symbol: _ZN2v816FunctionTemplate3NewEPNS_7IsolateEPFvRKNS_20FunctionCallbackInfoINS_5ValueEEEENS_5LocalIS4_EENSA_INS_9SignatureEEEiNS_19ConstructorBehaviorE\\n    at Object.Module._extensions..node (internal/modules/cjs/loader.js:857:18)\\n    at Module.load (internal/modules/cjs/loader.js:685:32)\\n    at Function.Module._load (internal/modules/cjs/loader.js:620:12)\\n    at Module.require (internal/modules/cjs/loader.js:723:19)\\n    at require (internal/modules/cjs/helpers.js:14:16)\\n    at Object.<anonymous> (/home/pospi/projects/holo-rea/oce-holo/node_modules/better-sqlite3/lib/database.js:5:21)\\n    at Module._compile (internal/modules/cjs/loader.js:816:30)\\n    at Object.Module._extensions..js (internal/modules/cjs/loader.js:827:10)\\n    at Module.load (internal/modules/cjs/loader.js:685:32)\\n    at Function.Module._load (internal/modules/cjs/loader.js:620:12)\\n\"" }

With lib3h or websocket networks configured, the configuration is rejected:

★★★ [[[CONDUCTOR alice]]]
★ Error while trying to boot from config: IoError("Error loading configuration: unknown variant `websocket`, expected one of `n3h`, `lib3h`, `memory`, `sim1h` for key `network.type`")

With sim1h or sim2h networks configured, it looks like the config is rejected further down the stack:

14:58:35 [try-o-rama] error: Tried to use an invalid value for a complex type and found the following problems:
    - Expecting "n3h" at 0.0.network.0.0 but instead got: "sim1h".
    - Expecting "memory" at 0.0.network.0.1 but instead got: "sim1h".
    - Expecting "websocket" at 0.0.network.0.2 but instead got: "sim1h".
    - Expecting { [K in string]: any } at 0.0.network.1 but instead got: "sim1h".

With memory network configured, the conductor appears unable to determine when a call through the DNA has run to completion. I just end up getting zome call timed out after 90 seconds on conductor 'alice' and a failure of the first request in the test scenario. When I enable detailed logging, it looks as though it's looping infinitely through this sequence:

☯ DEBUG 2019-10-17 14:24:29 [lib3h::gateway::gateway_transport] net_worker_thread/puid-5-2f /home/travis/.cargo/registry/src/github.com-1ecc6299db9ec823/lib3h-0.0.13/src/gateway/gateway_transport.rs:231 gateway_transport: SendMessage, first resolving address Lib3hUri("transportid:HcMcJmwRIZE33p6vee3cXt99rPGUPzospf7cBvn8aarb3znyFx6dNpmVH54tigz")
☯ DEBUG 2019-10-17 14:24:29 [lib3h::engine::network_layer] net_worker_thread/puid-12-2d /home/travis/.cargo/registry/src/github.com-1ecc6299db9ec823/lib3h-0.0.13/src/engine/network_layer.rs:117 mem-agent-puid-13-0 << handle_network_transport_request: ReceivedData { uri: Lib3hUri("mem://addr_1/"), payload: "�\u{0}�����app_spec_memory��Ktransportid:HcMcJmwRIZE33p6vee3cXt99rPGUPzospf7cBvn8aarb3znyFx6dNpmVH54tigz��Ktransportid:HcMcJ77qfoxbNxgt5hiOhQXTuNu634pc9bbKcrDbWs9du8ghQGRgMVeb4wagaui�\u{650}kgGRk5HZS3RyYW5zcG9ydGlkOkhjTWNKNzdxZm94Yk54Z3Q1aGlPaFFYVHVOdTYzNHBjOWJiS2NyRGJXczlkdThnaFFHUmdNVmViNHdhZ2F1aZGtbWVtOi8vYWRkcl8xL88AAAFt1/WQTQ==" }
☯ 
14:24:29 error: 
☸☸☸ {{{CONDUCTOR alice}}}
☸ DEBUG 2019-10-17 14:24:29 [lib3h::engine::network_layer] net_worker_thread/puid-12-2d /home/travis/.cargo/registry/src/github.com-1ecc6299db9ec823/lib3h-0.0.13/src/engine/network_layer.rs:140 Received message from: mem://addr_1/ | size: 325
☸ DEBUG 2019-10-17 14:24:29 [lib3h::engine::network_layer] net_worker_thread/puid-12-2d /home/travis/.cargo/registry/src/github.com-1ecc6299db9ec823/lib3h-0.0.13/src/engine/network_layer.rs:58 mem-agent-puid-13-0 << handle_network_dht_request: GossipTo(GossipToData { peer_name_list: [Lib3hUri("transportid:HcMcJ77qfoxbNxgt5hiOhQXTuNu634pc9bbKcrDbWs9du8ghQGRgMVeb4wagaui")], bundle: "�\u{1}����Ktransportid:HcMcJmwRIZE33p6vee3cXt99rPGUPzospf7cBvn8aarb3znyFx6dNpmVH54tigz��mem://addr_2/�\u{0}\u{0}\u{1}m���a" })
☸ DEBUG 2019-10-17 14:24:29 [lib3h::engine::ghost_engine] net_worker_thread/puid-12-2d /home/travis/.cargo/registry/src/github.com-1ecc6299db9ec823/lib3h-0.0.13/src/engine/ghost_engine.rs:727 (app_spec_memory) handle_GossipTo: GossipToData { peer_name_list: [Lib3hUri("transportid:HcMcJ77qfoxbNxgt5hiOhQXTuNu634pc9bbKcrDbWs9du8ghQGRgMVeb4wagaui")], bundle: "�\u{1}����Ktransportid:HcMcJmwRIZE33p6vee3cXt99rPGUPzospf7cBvn8aarb3znyFx6dNpmVH54tigz��mem://addr_2/�\u{0}\u{0}\u{1}m���a" }
☸ DEBUG 2019-10-17 14:24:29 [lib3h::gateway::gateway_transport] net_worker_thread/puid-12-2d /home/travis/.cargo/registry/src/github.com-1ecc6299db9ec823/lib3h-0.0.13/src/gateway/gateway_transport.rs:231 gateway_transport: SendMessage, first resolving address Lib3hUri("transportid:HcMcJ77qfoxbNxgt5hiOhQXTuNu634pc9bbKcrDbWs9du8ghQGRgMVeb4wagaui")
☸ DEBUG 2019-10-17 14:24:29 [lib3h::engine::network_layer] net_worker_thread/puid-5-2f /home/travis/.cargo/registry/src/github.com-1ecc6299db9ec823/lib3h-0.0.13/src/engine/network_layer.rs:117 mem-agent-puid-6-0 << handle_network_transport_request: ReceivedData { uri: Lib3hUri("mem://addr_2/"), payload: "�\u{0}�����app_spec_memory��Ktransportid:HcMcJ77qfoxbNxgt5hiOhQXTuNu634pc9bbKcrDbWs9du8ghQGRgMVeb4wagaui��Ktransportid:HcMcJmwRIZE33p6vee3cXt99rPGUPzospf7cBvn8aarb3znyFx6dNpmVH54tigz�\u{650}kgGRk5HZS3RyYW5zcG9ydGlkOkhjTWNKbXdSSVpFMzNwNnZlZTNjWHQ5OXJQR1VQem9zcGY3Y0J2bjhhYXJiM3pueUZ4NmROcG1WSDU0dGlnepGtbWVtOi8vYWRkcl8yL88AAAFt1/WYYQ==" }
☸ DEBUG 2019-10-17 14:24:29 [lib3h::engine::network_layer] net_worker_thread/puid-5-2f /home/travis/.cargo/registry/src/github.com-1ecc6299db9ec823/lib3h-0.0.13/src/engine/network_layer.rs:140 Received message from: mem://addr_2/ | size: 325
☸ DEBUG 2019-10-17 14:24:29 [holochain_core_types::sync] hc_guard_watcher/puid-0-0 core_types/src/sync.rs:152 tracking 1 active guard(s) alive for > 500ms:
☸ KIND       PUID      ELAPSED (ms)
☸ Read   puid-21-0         8393
☸ DEBUG 2019-10-17 14:24:29 [lib3h::engine::network_layer] net_worker_thread/puid-5-2f /home/travis/.cargo/registry/src/github.com-1ecc6299db9ec823/lib3h-0.0.13/src/engine/network_layer.rs:58 mem-agent-puid-6-0 << handle_network_dht_request: GossipTo(GossipToData { peer_name_list: [Lib3hUri("transportid:HcMcJmwRIZE33p6vee3cXt99rPGUPzospf7cBvn8aarb3znyFx6dNpmVH54tigz")], bundle: "�\u{1}����Ktransportid:HcMcJ77qfoxbNxgt5hiOhQXTuNu634pc9bbKcrDbWs9du8ghQGRgMVeb4wagaui��mem://addr_1/�\u{0}\u{0}\u{1}m���M" })
☸ DEBUG 2019-10-17 14:24:29 [lib3h::engine::ghost_engine] net_worker_thread/puid-5-2f /home/travis/.cargo/registry/src/github.com-1ecc6299db9ec823/lib3h-0.0.13/src/engine/ghost_engine.rs:727 (app_spec_memory) handle_GossipTo: GossipToData { peer_name_list: [Lib3hUri("transportid:HcMcJmwRIZE33p6vee3cXt99rPGUPzospf7cBvn8aarb3znyFx6dNpmVH54tigz")], bundle: "�\u{1}����Ktransportid:HcMcJ77qfoxbNxgt5hiOhQXTuNu634pc9bbKcrDbWs9du8ghQGRgMVeb4wagaui��mem://addr_1/�\u{0}\u{0}\u{1}m���M" }

...from here, it starts back at net_worker_thread/puid-5-2f attempting to resolve for Lib3hUri("transportid:HcMcJmwRIZE33p6vee3cXt99rPGUPzospf7cBvn8aarb3znyFx6dNpmVH54tigz"). To me that seems indicative of gossip payloads endlessly cycling back and forth, and never being interpreted as final?

So I guess sub-questions for this issue are:

  • Which networking implementation should I be using with Try-o-rama, and are there dependencies required to set it up?
    • If so, can I request a Holonix configuration to include those dependencies in an app? (CC @thedavidmeister)
  • Am I doing anything wrong in my tests (see link @ start of post) or orchestrator configuration which might be responsible for these hangs, or do I just need to wait for fixes here?

Tryorama tests fail because of connection errors even after all tests succeeded

In a sample app scaffolded from the open-dev templates, when I run the tryorama tests, they all pass, but the process itself errors out because of weird websocket connection errors:

13:07:38 [Tryorama - Local Conductor] info: # lair-keystore connection_url # unix:///tmp/ggliK4NGrgRK66STI5l8f/ks/socket?k=m4Yi_KoRd0KTr_VRFnkePCi_IseNesr7GIOe48zmBn8 #
# lair-keystore running #


stdout | src/forum/posts/all-posts.test.ts > create a Post and get all posts
13:07:43 [Tryorama - Local Conductor] info: # lair-keystore connection_url # unix:///tmp/SE1tKnH44Ng5GGIOpDN4u/ks/socket?k=3g6QVzsXMvegy7I5n_7VUzMM8Jr2ezJbZ4gFQL4GtSM #
# lair-keystore running #

13:07:43 [Tryorama - Local Conductor] info: # lair-keystore connection_url # unix:///tmp/Yb1-l5G9KlRHOIGepdvyP/ks/socket?k=fWDEZiz1QSZIcd0Wz37izk0t0tBgTHYBQGAW_MlcPzE #
# lair-keystore running #


stdout | src/forum/posts/all-posts.test.ts > create a Post and get all posts
13:07:43 [Tryorama - Local Conductor] info:
Conductor ready.


 ✓ src/forum/posts/comment.test.ts (4) 83154ms
 ✓ src/forum/posts/post.test.ts (4) 53184ms
 ✓ src/forum/posts/like.test.ts (3) 19201ms
 ✓ src/forum/posts/comment-to-likes.test.ts (1) 13881ms
 ✓ src/forum/posts/post-to-likes.test.ts (1) 13894ms
 ✓ src/forum/posts/certificate-to-likes.test.ts (1) 13083ms
 ✓ src/forum/posts/certificate.test.ts (2) 25732ms
 ✓ src/forum/posts/creator-to-posts.test.ts (1) 3816ms
 ✓ src/forum/posts/posts-by-author-entry-hash.test.ts (1) 13850ms
 ✓ src/forum/posts/posts-by-author.test.ts (1) 13856ms
 ✓ src/forum/posts/all-posts-entry-hash.test.ts (1) 4804ms
 ✓ src/forum/posts/all-posts.test.ts (1) 13861ms

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ Unhandled Errors ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯

Vitest caught 25 unhandled errors during the test run.
This might cause false positive tests. Resolve unhandled errors to make sure your tests are not affected.

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ Unhandled Rejection ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
ConnectionError: could not connect to Holochain Conductor API at ws://127.0.0.1:30001/ - Error: connect ECONNREFUSED 127.0.0.1:30001
 ❯ WebSocket.socket.onerror ../node_modules/.pnpm/@[email protected]/node_modules/@holochain/client/lib/api/client.js:135:28
 ❯ callListener ../node_modules/.pnpm/[email protected]/node_modules/ws/lib/event-target.js:290:14
 ❯ WebSocket.onError ../node_modules/.pnpm/[email protected]/node_modules/ws/lib/event-target.js:230:9
 ❯ WebSocket.emit node:events:518:28
 ❯ emitErrorAndClose ../node_modules/.pnpm/[email protected]/node_modules/ws/lib/websocket.js:1033:13
 ❯ ClientRequest.<anonymous> ../node_modules/.pnpm/[email protected]/node_modules/ws/lib/websocket.js:880:5
 ❯ ClientRequest.emit node:events:518:28
 ❯ Socket.socketErrorListener node:_http_client:495:9
 ❯ Socket.emit node:events:518:28
 ❯ emitErrorNT node:internal/streams/destroy:169:8

This error originated in "src/forum/posts/post.test.ts" test file. It doesn't mean the error was thrown inside the file itself, but while it was running.
The latest test that might've caused the error is "create and update Post". It might mean one of the following:
- The error was thrown, while Vitest was running this test.
- If the error occurred after the test had been completed, this was the last documented test before it was thrown.

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ Unhandled Rejection ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
ConnectionError: could not connect to Holochain Conductor API at ws://127.0.0.1:30001/ - Error: connect ECONNREFUSED 127.0.0.1:30001
 ❯ WebSocket.socket.onerror ../node_modules/.pnpm/@[email protected]/node_modules/@holochain/client/lib/api/client.js:135:28
 ❯ callListener ../node_modules/.pnpm/[email protected]/node_modules/ws/lib/event-target.js:290:14
 ❯ WebSocket.onError ../node_modules/.pnpm/[email protected]/node_modules/ws/lib/event-target.js:230:9
 ❯ WebSocket.emit node:events:518:28
 ❯ emitErrorAndClose ../node_modules/.pnpm/[email protected]/node_modules/ws/lib/websocket.js:1033:13
 ❯ ClientRequest.<anonymous> ../node_modules/.pnpm/[email protected]/node_modules/ws/lib/websocket.js:880:5
 ❯ ClientRequest.emit node:events:518:28
 ❯ Socket.socketErrorListener node:_http_client:495:9
 ❯ Socket.emit node:events:518:28
 ❯ emitErrorNT node:internal/streams/destroy:169:8

This error originated in "src/forum/posts/comment-to-likes.test.ts" test file. It doesn't mean the error was thrown inside the file itself, but while it was running.
The latest test that might've caused the error is "link a Comment to a Like". It might mean one of the following:
- The error was thrown, while Vitest was running this test.
- If the error occurred after the test had been completed, this was the last documented test before it was thrown.

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ Unhandled Rejection ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
ConnectionError: could not connect to Holochain Conductor API at ws://127.0.0.1:30004/ - Error: connect ECONNREFUSED 127.0.0.1:30004
 ❯ WebSocket.socket.onerror ../node_modules/.pnpm/@[email protected]/node_modules/@holochain/client/lib/api/client.js:135:28
 ❯ callListener ../node_modules/.pnpm/[email protected]/node_modules/ws/lib/event-target.js:290:14
 ❯ WebSocket.onError ../node_modules/.pnpm/[email protected]/node_modules/ws/lib/event-target.js:230:9
 ❯ WebSocket.emit node:events:518:28
 ❯ emitErrorAndClose ../node_modules/.pnpm/[email protected]/node_modules/ws/lib/websocket.js:1033:13
 ❯ ClientRequest.<anonymous> ../node_modules/.pnpm/[email protected]/node_modules/ws/lib/websocket.js:880:5
 ❯ ClientRequest.emit node:events:518:28
 ❯ Socket.socketErrorListener node:_http_client:495:9
 ❯ Socket.emit node:events:518:28
 ❯ emitErrorNT node:internal/streams/destroy:169:8

This error originated in "src/forum/posts/post-to-likes.test.ts" test file. It doesn't mean the error was thrown inside the file itself, but while it was running.
The latest test that might've caused the error is "link a Post to a Like". It might mean one of the following:
- The error was thrown, while Vitest was running this test.
- If the error occurred after the test had been completed, this was the last documented test before it was thrown.

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ Unhandled Rejection ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
ConnectionError: could not connect to Holochain Conductor API at ws://127.0.0.1:30006/ - Error: connect ECONNREFUSED 127.0.0.1:30006
 ❯ WebSocket.socket.onerror ../node_modules/.pnpm/@[email protected]/node_modules/@holochain/client/lib/api/client.js:135:28
 ❯ callListener ../node_modules/.pnpm/[email protected]/node_modules/ws/lib/event-target.js:290:14
 ❯ WebSocket.onError ../node_modules/.pnpm/[email protected]/node_modules/ws/lib/event-target.js:230:9
 ❯ WebSocket.emit node:events:518:28
 ❯ emitErrorAndClose ../node_modules/.pnpm/[email protected]/node_modules/ws/lib/websocket.js:1033:13
 ❯ ClientRequest.<anonymous> ../node_modules/.pnpm/[email protected]/node_modules/ws/lib/websocket.js:880:5
 ❯ ClientRequest.emit node:events:518:28
 ❯ Socket.socketErrorListener node:_http_client:495:9
 ❯ Socket.emit node:events:518:28
 ❯ emitErrorNT node:internal/streams/destroy:169:8

This error originated in "src/forum/posts/post-to-likes.test.ts" test file. It doesn't mean the error was thrown inside the file itself, but while it was running.
The latest test that might've caused the error is "link a Post to a Like". It might mean one of the following:
- The error was thrown, while Vitest was running this test.
- If the error occurred after the test had been completed, this was the last documented test before it was thrown.

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ Unhandled Rejection ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
ConnectionError: could not connect to Holochain Conductor API at ws://127.0.0.1:30006/ - Error: connect ECONNREFUSED 127.0.0.1:30006
 ❯ WebSocket.socket.onerror ../node_modules/.pnpm/@[email protected]/node_modules/@holochain/client/lib/api/client.js:135:28
 ❯ callListener ../node_modules/.pnpm/[email protected]/node_modules/ws/lib/event-target.js:290:14
 ❯ WebSocket.onError ../node_modules/.pnpm/[email protected]/node_modules/ws/lib/event-target.js:230:9
 ❯ WebSocket.emit node:events:518:28
 ❯ emitErrorAndClose ../node_modules/.pnpm/[email protected]/node_modules/ws/lib/websocket.js:1033:13
 ❯ ClientRequest.<anonymous> ../node_modules/.pnpm/[email protected]/node_modules/ws/lib/websocket.js:880:5
 ❯ ClientRequest.emit node:events:518:28
 ❯ Socket.socketErrorListener node:_http_client:495:9
 ❯ Socket.emit node:events:518:28
 ❯ emitErrorNT node:internal/streams/destroy:169:8

This error originated in "src/forum/posts/certificate-to-likes.test.ts" test file. It doesn't mean the error was thrown inside the file itself, but while it was running.
The latest test that might've caused the error is "link a Certificate to a Like". It might mean one of the following:
- The error was thrown, while Vitest was running this test.
- If the error occurred after the test had been completed, this was the last documented test before it was thrown.

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ Unhandled Rejection ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
ConnectionError: could not connect to Holochain Conductor API at ws://127.0.0.1:30006/ - Error: connect ECONNREFUSED 127.0.0.1:30006
 ❯ WebSocket.socket.onerror ../node_modules/.pnpm/@[email protected]/node_modules/@holochain/client/lib/api/client.js:135:28
 ❯ callListener ../node_modules/.pnpm/[email protected]/node_modules/ws/lib/event-target.js:290:14
 ❯ WebSocket.onError ../node_modules/.pnpm/[email protected]/node_modules/ws/lib/event-target.js:230:9
 ❯ WebSocket.emit node:events:518:28
 ❯ emitErrorAndClose ../node_modules/.pnpm/[email protected]/node_modules/ws/lib/websocket.js:1033:13
 ❯ ClientRequest.<anonymous> ../node_modules/.pnpm/[email protected]/node_modules/ws/lib/websocket.js:880:5
 ❯ ClientRequest.emit node:events:518:28
 ❯ Socket.socketErrorListener node:_http_client:495:9
 ❯ Socket.emit node:events:518:28
 ❯ emitErrorNT node:internal/streams/destroy:169:8

This error originated in "src/forum/posts/certificate-to-likes.test.ts" test file. It doesn't mean the error was thrown inside the file itself, but while it was running.
The latest test that might've caused the error is "link a Certificate to a Like". It might mean one of the following:
- The error was thrown, while Vitest was running this test.
- If the error occurred after the test had been completed, this was the last documented test before it was thrown.

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ Unhandled Rejection ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
ConnectionError: could not connect to Holochain Conductor API at ws://127.0.0.1:30006/ - Error: connect ECONNREFUSED 127.0.0.1:30006
 ❯ WebSocket.socket.onerror ../node_modules/.pnpm/@[email protected]/node_modules/@holochain/client/lib/api/client.js:135:28
 ❯ callListener ../node_modules/.pnpm/[email protected]/node_modules/ws/lib/event-target.js:290:14
 ❯ WebSocket.onError ../node_modules/.pnpm/[email protected]/node_modules/ws/lib/event-target.js:230:9
 ❯ WebSocket.emit node:events:518:28
 ❯ emitErrorAndClose ../node_modules/.pnpm/[email protected]/node_modules/ws/lib/websocket.js:1033:13
 ❯ ClientRequest.<anonymous> ../node_modules/.pnpm/[email protected]/node_modules/ws/lib/websocket.js:880:5
 ❯ ClientRequest.emit node:events:518:28
 ❯ Socket.socketErrorListener node:_http_client:495:9
 ❯ Socket.emit node:events:518:28
 ❯ emitErrorNT node:internal/streams/destroy:169:8

This error originated in "src/forum/posts/certificate-to-likes.test.ts" test file. It doesn't mean the error was thrown inside the file itself, but while it was running.
The latest test that might've caused the error is "link a Certificate to a Like". It might mean one of the following:
- The error was thrown, while Vitest was running this test.
- If the error occurred after the test had been completed, this was the last documented test before it was thrown.

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ Unhandled Rejection ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
ConnectionError: could not connect to Holochain Conductor API at ws://127.0.0.1:30001/ - Error: connect ECONNREFUSED 127.0.0.1:30001
 ❯ WebSocket.socket.onerror ../node_modules/.pnpm/@[email protected]/node_modules/@holochain/client/lib/api/client.js:135:28
 ❯ callListener ../node_modules/.pnpm/[email protected]/node_modules/ws/lib/event-target.js:290:14
 ❯ WebSocket.onError ../node_modules/.pnpm/[email protected]/node_modules/ws/lib/event-target.js:230:9
 ❯ WebSocket.emit node:events:518:28
 ❯ emitErrorAndClose ../node_modules/.pnpm/[email protected]/node_modules/ws/lib/websocket.js:1033:13
 ❯ ClientRequest.<anonymous> ../node_modules/.pnpm/[email protected]/node_modules/ws/lib/websocket.js:880:5
 ❯ ClientRequest.emit node:events:518:28
 ❯ Socket.socketErrorListener node:_http_client:495:9
 ❯ Socket.emit node:events:518:28
 ❯ emitErrorNT node:internal/streams/destroy:169:8

This error originated in "src/forum/posts/certificate-to-likes.test.ts" test file. It doesn't mean the error was thrown inside the file itself, but while it was running.
The latest test that might've caused the error is "link a Certificate to a Like". It might mean one of the following:
- The error was thrown, while Vitest was running this test.
- If the error occurred after the test had been completed, this was the last documented test before it was thrown.

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ Unhandled Rejection ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
ConnectionError: could not connect to Holochain Conductor API at ws://127.0.0.1:30001/ - Error: connect ECONNREFUSED 127.0.0.1:30001
 ❯ WebSocket.socket.onerror ../node_modules/.pnpm/@[email protected]/node_modules/@holochain/client/lib/api/client.js:135:28
 ❯ callListener ../node_modules/.pnpm/[email protected]/node_modules/ws/lib/event-target.js:290:14
 ❯ WebSocket.onError ../node_modules/.pnpm/[email protected]/node_modules/ws/lib/event-target.js:230:9
 ❯ WebSocket.emit node:events:518:28
 ❯ emitErrorAndClose ../node_modules/.pnpm/[email protected]/node_modules/ws/lib/websocket.js:1033:13
 ❯ ClientRequest.<anonymous> ../node_modules/.pnpm/[email protected]/node_modules/ws/lib/websocket.js:880:5
 ❯ ClientRequest.emit node:events:518:28
 ❯ Socket.socketErrorListener node:_http_client:495:9
 ❯ Socket.emit node:events:518:28
 ❯ emitErrorNT node:internal/streams/destroy:169:8

This error originated in "src/forum/posts/certificate.test.ts" test file. It doesn't mean the error was thrown inside the file itself, but while it was running.
The latest test that might've caused the error is "create and read Certificate". It might mean one of the following:
- The error was thrown, while Vitest was running this test.
- If the error occurred after the test had been completed, this was the last documented test before it was thrown.

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ Unhandled Rejection ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
ConnectionError: could not connect to Holochain Conductor API at ws://127.0.0.1:30001/ - Error: connect ECONNREFUSED 127.0.0.1:30001
 ❯ WebSocket.socket.onerror ../node_modules/.pnpm/@[email protected]/node_modules/@holochain/client/lib/api/client.js:135:28
 ❯ callListener ../node_modules/.pnpm/[email protected]/node_modules/ws/lib/event-target.js:290:14
 ❯ WebSocket.onError ../node_modules/.pnpm/[email protected]/node_modules/ws/lib/event-target.js:230:9
 ❯ WebSocket.emit node:events:518:28
 ❯ emitErrorAndClose ../node_modules/.pnpm/[email protected]/node_modules/ws/lib/websocket.js:1033:13
 ❯ ClientRequest.<anonymous> ../node_modules/.pnpm/[email protected]/node_modules/ws/lib/websocket.js:880:5
 ❯ ClientRequest.emit node:events:518:28
 ❯ Socket.socketErrorListener node:_http_client:495:9
 ❯ Socket.emit node:events:518:28
 ❯ emitErrorNT node:internal/streams/destroy:169:8

This error originated in "src/forum/posts/certificate.test.ts" test file. It doesn't mean the error was thrown inside the file itself, but while it was running.
The latest test that might've caused the error is "create and read Certificate". It might mean one of the following:
- The error was thrown, while Vitest was running this test.
- If the error occurred after the test had been completed, this was the last documented test before it was thrown.

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ Unhandled Rejection ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
ConnectionError: could not connect to Holochain Conductor API at ws://127.0.0.1:30001/ - Error: connect ECONNREFUSED 127.0.0.1:30001
 ❯ WebSocket.socket.onerror ../node_modules/.pnpm/@[email protected]/node_modules/@holochain/client/lib/api/client.js:135:28
 ❯ callListener ../node_modules/.pnpm/[email protected]/node_modules/ws/lib/event-target.js:290:14
 ❯ WebSocket.onError ../node_modules/.pnpm/[email protected]/node_modules/ws/lib/event-target.js:230:9
 ❯ WebSocket.emit node:events:518:28
 ❯ emitErrorAndClose ../node_modules/.pnpm/[email protected]/node_modules/ws/lib/websocket.js:1033:13
 ❯ ClientRequest.<anonymous> ../node_modules/.pnpm/[email protected]/node_modules/ws/lib/websocket.js:880:5
 ❯ ClientRequest.emit node:events:518:28
 ❯ Socket.socketErrorListener node:_http_client:495:9
 ❯ Socket.emit node:events:518:28
 ❯ emitErrorNT node:internal/streams/destroy:169:8

This error originated in "src/forum/posts/certificate.test.ts" test file. It doesn't mean the error was thrown inside the file itself, but while it was running.
The latest test that might've caused the error is "create and read Certificate". It might mean one of the following:
- The error was thrown, while Vitest was running this test.
- If the error occurred after the test had been completed, this was the last documented test before it was thrown.

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ Unhandled Rejection ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
ConnectionError: could not connect to Holochain Conductor API at ws://127.0.0.1:30003/ - Error: connect ECONNREFUSED 127.0.0.1:30003
 ❯ WebSocket.socket.onerror ../node_modules/.pnpm/@[email protected]/node_modules/@holochain/client/lib/api/client.js:135:28
 ❯ callListener ../node_modules/.pnpm/[email protected]/node_modules/ws/lib/event-target.js:290:14
 ❯ WebSocket.onError ../node_modules/.pnpm/[email protected]/node_modules/ws/lib/event-target.js:230:9
 ❯ WebSocket.emit node:events:518:28
 ❯ emitErrorAndClose ../node_modules/.pnpm/[email protected]/node_modules/ws/lib/websocket.js:1033:13
 ❯ ClientRequest.<anonymous> ../node_modules/.pnpm/[email protected]/node_modules/ws/lib/websocket.js:880:5
 ❯ ClientRequest.emit node:events:518:28
 ❯ Socket.socketErrorListener node:_http_client:495:9
 ❯ Socket.emit node:events:518:28
 ❯ emitErrorNT node:internal/streams/destroy:169:8

This error originated in "src/forum/posts/certificate.test.ts" test file. It doesn't mean the error was thrown inside the file itself, but while it was running.
The latest test that might've caused the error is "create and read Certificate". It might mean one of the following:
- The error was thrown, while Vitest was running this test.
- If the error occurred after the test had been completed, this was the last documented test before it was thrown.

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ Unhandled Rejection ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
ConnectionError: could not connect to Holochain Conductor API at ws://127.0.0.1:30006/ - Error: connect ECONNREFUSED 127.0.0.1:30006
 ❯ WebSocket.socket.onerror ../node_modules/.pnpm/@[email protected]/node_modules/@holochain/client/lib/api/client.js:135:28
 ❯ callListener ../node_modules/.pnpm/[email protected]/node_modules/ws/lib/event-target.js:290:14
 ❯ WebSocket.onError ../node_modules/.pnpm/[email protected]/node_modules/ws/lib/event-target.js:230:9
 ❯ WebSocket.emit node:events:518:28
 ❯ emitErrorAndClose ../node_modules/.pnpm/[email protected]/node_modules/ws/lib/websocket.js:1033:13
 ❯ ClientRequest.<anonymous> ../node_modules/.pnpm/[email protected]/node_modules/ws/lib/websocket.js:880:5
 ❯ ClientRequest.emit node:events:518:28
 ❯ Socket.socketErrorListener node:_http_client:495:9
 ❯ Socket.emit node:events:518:28
 ❯ emitErrorNT node:internal/streams/destroy:169:8

This error originated in "src/forum/posts/certificate.test.ts" test file. It doesn't mean the error was thrown inside the file itself, but while it was running.
The latest test that might've caused the error is "create and read Certificate". It might mean one of the following:
- The error was thrown, while Vitest was running this test.
- If the error occurred after the test had been completed, this was the last documented test before it was thrown.

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ Unhandled Rejection ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
ConnectionError: could not connect to Holochain Conductor API at ws://127.0.0.1:30003/ - Error: connect ECONNREFUSED 127.0.0.1:30003
 ❯ WebSocket.socket.onerror ../node_modules/.pnpm/@[email protected]/node_modules/@holochain/client/lib/api/client.js:135:28
 ❯ callListener ../node_modules/.pnpm/[email protected]/node_modules/ws/lib/event-target.js:290:14
 ❯ WebSocket.onError ../node_modules/.pnpm/[email protected]/node_modules/ws/lib/event-target.js:230:9
 ❯ WebSocket.emit node:events:518:28
 ❯ emitErrorAndClose ../node_modules/.pnpm/[email protected]/node_modules/ws/lib/websocket.js:1033:13
 ❯ ClientRequest.<anonymous> ../node_modules/.pnpm/[email protected]/node_modules/ws/lib/websocket.js:880:5
 ❯ ClientRequest.emit node:events:518:28
 ❯ Socket.socketErrorListener node:_http_client:495:9
 ❯ Socket.emit node:events:518:28
 ❯ emitErrorNT node:internal/streams/destroy:169:8

This error originated in "src/forum/posts/certificate.test.ts" test file. It doesn't mean the error was thrown inside the file itself, but while it was running.
The latest test that might've caused the error is "create and read Certificate". It might mean one of the following:
- The error was thrown, while Vitest was running this test.
- If the error occurred after the test had been completed, this was the last documented test before it was thrown.

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ Unhandled Rejection ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
ConnectionError: could not connect to Holochain Conductor API at ws://127.0.0.1:30001/ - Error: connect ECONNREFUSED 127.0.0.1:30001
 ❯ WebSocket.socket.onerror ../node_modules/.pnpm/@[email protected]/node_modules/@holochain/client/lib/api/client.js:135:28
 ❯ callListener ../node_modules/.pnpm/[email protected]/node_modules/ws/lib/event-target.js:290:14
 ❯ WebSocket.onError ../node_modules/.pnpm/[email protected]/node_modules/ws/lib/event-target.js:230:9
 ❯ WebSocket.emit node:events:518:28
 ❯ emitErrorAndClose ../node_modules/.pnpm/[email protected]/node_modules/ws/lib/websocket.js:1033:13
 ❯ ClientRequest.<anonymous> ../node_modules/.pnpm/[email protected]/node_modules/ws/lib/websocket.js:880:5
 ❯ ClientRequest.emit node:events:518:28
 ❯ Socket.socketErrorListener node:_http_client:495:9
 ❯ Socket.emit node:events:518:28
 ❯ emitErrorNT node:internal/streams/destroy:169:8

This error originated in "src/forum/posts/creator-to-posts.test.ts" test file. It doesn't mean the error was thrown inside the file itself, but while it was running.
The latest test that might've caused the error is "link a Creator to a Post". It might mean one of the following:
- The error was thrown, while Vitest was running this test.
- If the error occurred after the test had been completed, this was the last documented test before it was thrown.

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ Unhandled Rejection ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
ConnectionError: could not connect to Holochain Conductor API at ws://127.0.0.1:30006/ - Error: connect ECONNREFUSED 127.0.0.1:30006
 ❯ WebSocket.socket.onerror ../node_modules/.pnpm/@[email protected]/node_modules/@holochain/client/lib/api/client.js:135:28
 ❯ callListener ../node_modules/.pnpm/[email protected]/node_modules/ws/lib/event-target.js:290:14
 ❯ WebSocket.onError ../node_modules/.pnpm/[email protected]/node_modules/ws/lib/event-target.js:230:9
 ❯ WebSocket.emit node:events:518:28
 ❯ emitErrorAndClose ../node_modules/.pnpm/[email protected]/node_modules/ws/lib/websocket.js:1033:13
 ❯ ClientRequest.<anonymous> ../node_modules/.pnpm/[email protected]/node_modules/ws/lib/websocket.js:880:5
 ❯ ClientRequest.emit node:events:518:28
 ❯ Socket.socketErrorListener node:_http_client:495:9
 ❯ Socket.emit node:events:518:28
 ❯ emitErrorNT node:internal/streams/destroy:169:8

This error originated in "src/forum/posts/posts-by-author-entry-hash.test.ts" test file. It doesn't mean the error was thrown inside the file itself, but while it was running.
The latest test that might've caused the error is "create a Post and get posts by author entry hash". It might mean one of the following:
- The error was thrown, while Vitest was running this test.
- If the error occurred after the test had been completed, this was the last documented test before it was thrown.

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ Unhandled Rejection ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
ConnectionError: could not connect to Holochain Conductor API at ws://127.0.0.1:30001/ - Error: connect ECONNREFUSED 127.0.0.1:30001
 ❯ WebSocket.socket.onerror ../node_modules/.pnpm/@[email protected]/node_modules/@holochain/client/lib/api/client.js:135:28
 ❯ callListener ../node_modules/.pnpm/[email protected]/node_modules/ws/lib/event-target.js:290:14
 ❯ WebSocket.onError ../node_modules/.pnpm/[email protected]/node_modules/ws/lib/event-target.js:230:9
 ❯ WebSocket.emit node:events:518:28
 ❯ emitErrorAndClose ../node_modules/.pnpm/[email protected]/node_modules/ws/lib/websocket.js:1033:13
 ❯ ClientRequest.<anonymous> ../node_modules/.pnpm/[email protected]/node_modules/ws/lib/websocket.js:880:5
 ❯ ClientRequest.emit node:events:518:28
 ❯ Socket.socketErrorListener node:_http_client:495:9
 ❯ Socket.emit node:events:518:28
 ❯ emitErrorNT node:internal/streams/destroy:169:8

This error originated in "src/forum/posts/posts-by-author.test.ts" test file. It doesn't mean the error was thrown inside the file itself, but while it was running.
The latest test that might've caused the error is "create a Post and get posts by author". It might mean one of the following:
- The error was thrown, while Vitest was running this test.
- If the error occurred after the test had been completed, this was the last documented test before it was thrown.

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ Unhandled Rejection ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
ConnectionError: could not connect to Holochain Conductor API at ws://127.0.0.1:30003/ - Error: connect ECONNREFUSED 127.0.0.1:30003
 ❯ WebSocket.socket.onerror ../node_modules/.pnpm/@[email protected]/node_modules/@holochain/client/lib/api/client.js:135:28
 ❯ callListener ../node_modules/.pnpm/[email protected]/node_modules/ws/lib/event-target.js:290:14
 ❯ WebSocket.onError ../node_modules/.pnpm/[email protected]/node_modules/ws/lib/event-target.js:230:9
 ❯ WebSocket.emit node:events:518:28
 ❯ emitErrorAndClose ../node_modules/.pnpm/[email protected]/node_modules/ws/lib/websocket.js:1033:13
 ❯ ClientRequest.<anonymous> ../node_modules/.pnpm/[email protected]/node_modules/ws/lib/websocket.js:880:5
 ❯ ClientRequest.emit node:events:518:28
 ❯ Socket.socketErrorListener node:_http_client:495:9
 ❯ Socket.emit node:events:518:28
 ❯ emitErrorNT node:internal/streams/destroy:169:8

This error originated in "src/forum/posts/posts-by-author.test.ts" test file. It doesn't mean the error was thrown inside the file itself, but while it was running.
The latest test that might've caused the error is "create a Post and get posts by author". It might mean one of the following:
- The error was thrown, while Vitest was running this test.
- If the error occurred after the test had been completed, this was the last documented test before it was thrown.

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ Unhandled Rejection ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
ConnectionError: could not connect to Holochain Conductor API at ws://127.0.0.1:30003/ - Error: connect ECONNREFUSED 127.0.0.1:30003
 ❯ WebSocket.socket.onerror ../node_modules/.pnpm/@[email protected]/node_modules/@holochain/client/lib/api/client.js:135:28
 ❯ callListener ../node_modules/.pnpm/[email protected]/node_modules/ws/lib/event-target.js:290:14
 ❯ WebSocket.onError ../node_modules/.pnpm/[email protected]/node_modules/ws/lib/event-target.js:230:9
 ❯ WebSocket.emit node:events:518:28
 ❯ emitErrorAndClose ../node_modules/.pnpm/[email protected]/node_modules/ws/lib/websocket.js:1033:13
 ❯ ClientRequest.<anonymous> ../node_modules/.pnpm/[email protected]/node_modules/ws/lib/websocket.js:880:5
 ❯ ClientRequest.emit node:events:518:28
 ❯ Socket.socketErrorListener node:_http_client:495:9
 ❯ Socket.emit node:events:518:28
 ❯ emitErrorNT node:internal/streams/destroy:169:8

This error originated in "src/forum/posts/posts-by-author.test.ts" test file. It doesn't mean the error was thrown inside the file itself, but while it was running.
The latest test that might've caused the error is "create a Post and get posts by author". It might mean one of the following:
- The error was thrown, while Vitest was running this test.
- If the error occurred after the test had been completed, this was the last documented test before it was thrown.

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ Unhandled Rejection ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
ConnectionError: could not connect to Holochain Conductor API at ws://127.0.0.1:30000/ - Error: connect ECONNREFUSED 127.0.0.1:30000
 ❯ WebSocket.socket.onerror ../node_modules/.pnpm/@[email protected]/node_modules/@holochain/client/lib/api/client.js:135:28
 ❯ callListener ../node_modules/.pnpm/[email protected]/node_modules/ws/lib/event-target.js:290:14
 ❯ WebSocket.onError ../node_modules/.pnpm/[email protected]/node_modules/ws/lib/event-target.js:230:9
 ❯ WebSocket.emit node:events:518:28
 ❯ emitErrorAndClose ../node_modules/.pnpm/[email protected]/node_modules/ws/lib/websocket.js:1033:13
 ❯ ClientRequest.<anonymous> ../node_modules/.pnpm/[email protected]/node_modules/ws/lib/websocket.js:880:5
 ❯ ClientRequest.emit node:events:518:28
 ❯ Socket.socketErrorListener node:_http_client:495:9
 ❯ Socket.emit node:events:518:28
 ❯ emitErrorNT node:internal/streams/destroy:169:8

This error originated in "src/forum/posts/posts-by-author.test.ts" test file. It doesn't mean the error was thrown inside the file itself, but while it was running.
The latest test that might've caused the error is "create a Post and get posts by author". It might mean one of the following:
- The error was thrown, while Vitest was running this test.
- If the error occurred after the test had been completed, this was the last documented test before it was thrown.

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ Unhandled Rejection ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
ConnectionError: could not connect to Holochain Conductor API at ws://127.0.0.1:30006/ - Error: connect ECONNREFUSED 127.0.0.1:30006
 ❯ WebSocket.socket.onerror ../node_modules/.pnpm/@[email protected]/node_modules/@holochain/client/lib/api/client.js:135:28
 ❯ callListener ../node_modules/.pnpm/[email protected]/node_modules/ws/lib/event-target.js:290:14
 ❯ WebSocket.onError ../node_modules/.pnpm/[email protected]/node_modules/ws/lib/event-target.js:230:9
 ❯ WebSocket.emit node:events:518:28
 ❯ emitErrorAndClose ../node_modules/.pnpm/[email protected]/node_modules/ws/lib/websocket.js:1033:13
 ❯ ClientRequest.<anonymous> ../node_modules/.pnpm/[email protected]/node_modules/ws/lib/websocket.js:880:5
 ❯ ClientRequest.emit node:events:518:28
 ❯ Socket.socketErrorListener node:_http_client:495:9
 ❯ Socket.emit node:events:518:28
 ❯ emitErrorNT node:internal/streams/destroy:169:8

This error originated in "src/forum/posts/posts-by-author.test.ts" test file. It doesn't mean the error was thrown inside the file itself, but while it was running.
The latest test that might've caused the error is "create a Post and get posts by author". It might mean one of the following:
- The error was thrown, while Vitest was running this test.
- If the error occurred after the test had been completed, this was the last documented test before it was thrown.

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ Unhandled Rejection ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
ConnectionError: could not connect to Holochain Conductor API at ws://127.0.0.1:30000/ - Error: connect ECONNREFUSED 127.0.0.1:30000
 ❯ WebSocket.socket.onerror ../node_modules/.pnpm/@[email protected]/node_modules/@holochain/client/lib/api/client.js:135:28
 ❯ callListener ../node_modules/.pnpm/[email protected]/node_modules/ws/lib/event-target.js:290:14
 ❯ WebSocket.onError ../node_modules/.pnpm/[email protected]/node_modules/ws/lib/event-target.js:230:9
 ❯ WebSocket.emit node:events:518:28
 ❯ emitErrorAndClose ../node_modules/.pnpm/[email protected]/node_modules/ws/lib/websocket.js:1033:13
 ❯ ClientRequest.<anonymous> ../node_modules/.pnpm/[email protected]/node_modules/ws/lib/websocket.js:880:5
 ❯ ClientRequest.emit node:events:518:28
 ❯ Socket.socketErrorListener node:_http_client:495:9
 ❯ Socket.emit node:events:518:28
 ❯ emitErrorNT node:internal/streams/destroy:169:8

This error originated in "src/forum/posts/all-posts.test.ts" test file. It doesn't mean the error was thrown inside the file itself, but while it was running.
The latest test that might've caused the error is "create a Post and get all posts". It might mean one of the following:
- The error was thrown, while Vitest was running this test.
- If the error occurred after the test had been completed, this was the last documented test before it was thrown.

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ Unhandled Rejection ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
ConnectionError: could not connect to Holochain Conductor API at ws://127.0.0.1:30005/ - Error: connect ECONNREFUSED 127.0.0.1:30005
 ❯ WebSocket.socket.onerror ../node_modules/.pnpm/@[email protected]/node_modules/@holochain/client/lib/api/client.js:135:28
 ❯ callListener ../node_modules/.pnpm/[email protected]/node_modules/ws/lib/event-target.js:290:14
 ❯ WebSocket.onError ../node_modules/.pnpm/[email protected]/node_modules/ws/lib/event-target.js:230:9
 ❯ WebSocket.emit node:events:518:28
 ❯ emitErrorAndClose ../node_modules/.pnpm/[email protected]/node_modules/ws/lib/websocket.js:1033:13
 ❯ ClientRequest.<anonymous> ../node_modules/.pnpm/[email protected]/node_modules/ws/lib/websocket.js:880:5
 ❯ ClientRequest.emit node:events:518:28
 ❯ Socket.socketErrorListener node:_http_client:495:9
 ❯ Socket.emit node:events:518:28
 ❯ emitErrorNT node:internal/streams/destroy:169:8

This error originated in "src/forum/posts/all-posts.test.ts" test file. It doesn't mean the error was thrown inside the file itself, but while it was running.
The latest test that might've caused the error is "create a Post and get all posts". It might mean one of the following:
- The error was thrown, while Vitest was running this test.
- If the error occurred after the test had been completed, this was the last documented test before it was thrown.

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ Unhandled Rejection ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
internal_error: Conductor returned an error while using a ConductorApi: CellMissing(CellId(DnaHash(uhC0kpWI_MkdEp0s7wGPCWyJnWfs4kVAMbmJ9y10f33LEtCiSywYc), AgentPubKey(uhCAkISDXd8cXhfB5lBQCovQISdM5S9n4U24SN6lOtE8foWN61EjS)))
 ❯ catchError ../node_modules/.pnpm/@[email protected]/node_modules/@holochain/client/lib/api/common.js:38:23
 ❯ processTicksAndRejections node:internal/process/task_queues:95:5
 ❯ AppWebsocket.callZome ../node_modules/.pnpm/@[email protected]/node_modules/@holochain/client/lib/api/common.js:13:22
 ❯ fetch ../node_modules/.pnpm/@[email protected]_@[email protected]/node_modules/@holochain-open-dev/stores/src/holochain.ts:582:29

This error originated in "src/forum/posts/all-posts.test.ts" test file. It doesn't mean the error was thrown inside the file itself, but while it was running.
The latest test that might've caused the error is "create a Post and get all posts". It might mean one of the following:
- The error was thrown, while Vitest was running this test.
- If the error occurred after the test had been completed, this was the last documented test before it was thrown.

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ Unhandled Rejection ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
ConnectionError: could not connect to Holochain Conductor API at ws://127.0.0.1:30006/ - Error: connect ECONNREFUSED 127.0.0.1:30006
 ❯ WebSocket.socket.onerror ../node_modules/.pnpm/@[email protected]/node_modules/@holochain/client/lib/api/client.js:135:28
 ❯ callListener ../node_modules/.pnpm/[email protected]/node_modules/ws/lib/event-target.js:290:14
 ❯ WebSocket.onError ../node_modules/.pnpm/[email protected]/node_modules/ws/lib/event-target.js:230:9
 ❯ WebSocket.emit node:events:518:28
 ❯ emitErrorAndClose ../node_modules/.pnpm/[email protected]/node_modules/ws/lib/websocket.js:1033:13
 ❯ ClientRequest.<anonymous> ../node_modules/.pnpm/[email protected]/node_modules/ws/lib/websocket.js:880:5
 ❯ ClientRequest.emit node:events:518:28
 ❯ Socket.socketErrorListener node:_http_client:495:9
 ❯ Socket.emit node:events:518:28
 ❯ emitErrorNT node:internal/streams/destroy:169:8

This error originated in "src/forum/posts/all-posts.test.ts" test file. It doesn't mean the error was thrown inside the file itself, but while it was running.
The latest test that might've caused the error is "create a Post and get all posts". It might mean one of the following:
- The error was thrown, while Vitest was running this test.
- If the error occurred after the test had been completed, this was the last documented test before it was thrown.
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯

 Test Files  12 passed (12)
      Tests  21 passed (21)
     Errors  25 errors
   Start at  13:03:24
   Duration  272.67s (transform 73ms, setup 0ms, collect 246ms, tests 272.32s, environment 0ms, prepare 33ms)

/tmp/forum-lit-open-dev/tests:
 ERR_PNPM_RECURSIVE_RUN_FIRST_FAIL  tests@ test: `vitest run`
Exit status 1

forum-lit-open-dev on  main [!+?]  🦀 ❄️  nix-shell-env took 4m33s

Tryorama v0.16.0-dev.2

Tryorama RSM - emit_signal Testing

Feature Request

  • Add method for emit_signal testing

Currently, there is no method for testing emit_signals within the dna. Emit signals return a null value and as such, require additional tooling to listen to network calls and read signal data returned to the conductor for proper testing at the dna level.

Bad documentation in README?

The documentation for tests with custom agent config and DNA is not working for me.

index.js:

const path = require("path");

const {
  Orchestrator,
  Config,
  combine,
  singleConductor,
  localOnly,
  tapeExecutor,
} = require("@holochain/tryorama");

process.on("unhandledRejection", (error) => {
  // Will print "unhandledRejection err is not defined"
  console.error("got unhandledRejection:", error);
});

const dnaPath = path.join(__dirname, "../dist/example-dna.dna.json");

const orchestrator = new Orchestrator({
  middleware: combine(
    // use the tape harness to run the tests, injects the tape API into each scenario
    // as the second argument
    tapeExecutor(require("tape")),

    // specify that all "players" in the test are on the local machine, rather than
    // on remote machines
    localOnly,

    // squash all instances from all conductors down into a single conductor,
    // for in-memory testing purposes.
    // Remove this middleware for other "real" network types which can actually
    // send messages across conductors
    singleConductor
  ),
});

const dna = {
  id: "rolesTests",
  file: "./dist/example-dna.dna.json",
};
const aliceConfig = Config.gen([{
  agent: {
    id: "alice",
    public_address:
      "HcScJWFagz6JtswwimIuXHa5V8h8Sjoy9Bkrbzfervjhuvq8g9whUEawSk845iz",
    file: "./alice.keystore",
  },
  dna,
}]);
const bobConfig = Config.gen([{
  agent: {
    id: "bob",
    public_address:
      "HcSCJR7dD9t6Nuqc9kxqWfKzbo443p8y8Z38IA9dukBEr96umt3b47uetMXg3aa",
    file: "./bob.keystore",
  },
  dna,
}]);

const {
  assignRole,
  getAgentRoles,
  getAllRoles,
  getAgentsWithRole,
  createEntry,
  unassignRole,
} = require("./utils");

orchestrator.registerScenario(
  "only progenitor can assign roles",
  async (s, t) => {
    const { alice, bob } = await s.players(
      { alice: aliceConfig, bob: bobConfig },
      true
    );
    const aliceAddress = alice.instance("rolesTest").agentAddress;
    const bobAddress = bob.instance("rolesTest").agentAddress;

    let result = await assignRole(bob)(aliceAddress, "editor");
    t.notOk(result.Ok);

    result = await assignRole(alice)(bobAddress, "editor");
    t.ok(result.Ok);
    await s.consistency();

    result = await getAgentRoles(bob)(bobAddress);
    t.equal(result.Ok[0], "editor");

    result = await getAgentsWithRole(bob)("editor");
    t.equal(result.Ok[0], bobAddress);

    result = await getAllRoles(bob)();
    t.equal(result.Ok[0], "editor");
  }
);

orchestrator.run();

Error:

  ]
}
14:33:49 [tryorama] error: Could not validate Instances Array
Tried to use an invalid value for a complex type and found the following problems:
    - Expecting string at 0.0.id but instead got: undefined.
    - Expecting string at 0.0.agent.0.name but instead got: undefined.
    - Expecting string at 0.0.agent.0.keystore_file but instead got: undefined.
/home/guillem/projects/eyss/holochain_roles/example-dna/test/node_modules/@holochain/tryorama/lib/types.js:22
        throw new Error(msg);
        ^

If I try to change the config to:

const dna = {
  id: "rolesTests",
  file: "./dist/example-dna.dna.json",
};
const aliceConfig = Config.gen({
  agent: {
    id: "alice",
    public_address:
      "HcScJWFagz6JtswwimIuXHa5V8h8Sjoy9Bkrbzfervjhuvq8g9whUEawSk845iz",
    file: "./alice.keystore",
  },
  dna,
});
const bobConfig = Config.gen({
  agent: {
    id: "bob",
    public_address:
      "HcSCJR7dD9t6Nuqc9kxqWfKzbo443p8y8Z38IA9dukBEr96umt3b47uetMXg3aa",
    file: "./bob.keystore",
  },
  dna,
});

This is what I get:

14:39:25 info: 
☸☸☸ [[[CONDUCTOR combined]]]
☸ Error while trying to boot from config: ErrorGeneric("Error while trying to create instance \"agent--alice\": Holochain Instance Error: Attempting to initialize DNA with zero zomes!")
☸ 
14:39:25 [tryorama] info: conductor 'combined' exited with code 0
not ok 2 Conductor exited before starting interface (code 0)
  ---
    operator: fail
    stack: |-
      Error: Conductor exited before starting interface (code 0)
          at Test.assert [as _assert] (/home/guillem/projects/eyss/holochain_roles/example-dna/test/node_modules/tape/lib/test.js:228:54)
          at Test.bound [as _assert] (/home/guillem/projects/eyss/holochain_roles/example-dna/test/node_modules/tape/lib/test.js:80:32)
          at Test.fail (/home/guillem/projects/eyss/holochain_roles/example-dna/test/node_modules/tape/lib/test.js:322:10)
          at Test.bound [as fail] (/home/guillem/projects/eyss/holochain_roles/example-dna/test/node_modules/tape/lib/test.js:80:32)
          at /home/guillem/projects/eyss/holochain_roles/example-dna/test/node_modules/@holochain/tryorama/lib/middleware.js:72:19
          at processTicksAndRejections (internal/process/task_queues.js:93:5)
  ...
got an error for  agents can only create entries when given permission Conductor exited before starting interface (code 0)
14:39:25 [tryorama] debug: Done with test: agents can only create entries when given permission

npm deprecate @holochain/try-o-rama

It looks like @holochain/try-o-rama was renamed to @holochain/tryorama

The latest version of @holochain/try-o-rama has the following issue:

#17

Please run npm deprecate @holochain/try-o-rama. Thank you!

Change API for awaitDhtSync

I was hoping to swap out all my await pause(2000) for await awaitDhtSync() but I saw you made some changes in #172 and now it doesn't actually work the way I need it to.

I see the function was changed from:

awaitDhtSync(players: Array<Player>, dnaHash: DnaHash, interval?: number, timeout?: number)

to

awaitDhtSync(conductors: Array<IConductor>, cellId: CellId, interval?: number, timeout?: number)

This doesn't work for my usecase because each player in a scenario will have a different CellId -- we need to know the AgentPubKey of each of the agents in order to determine which cell states to compare across the conductors.

So there's a few other ways we could re-implement this api. I could help take on the implementation, but I want to make sure I get the api right and you're okay with it.

Option 1
Pass an array of conductors, an array of agentpubkeys, and a DnaHash where the indexes are expected to align to produce the correct cellIds for the correct conductors

awaitDhtSync(conductors: Array<IConductor>, agents: Array<AgentPubKey>, dnaHash: DnaHash, interval?: number, timeout?: number)

Option 2
Pass an array of objects merging the associated conductor & cell id

interface IConductorCell {
  conductor: IConductor;
  cellId: CellId;
}
awaitDhtSync(conductorCells: Array<IConductorCell>, interval?: number, timeout?: number)

I think to make this ergonomic we're going to want to start saving the Player info (conductor + AppAgent) in the scenario class -- otherwise we have no way of knowing which agentpubkeys are associated with a conductor under a single "player". Then we'll want to change the function name used in the scenario class to awaitPlayersDhtSync(), and only include players in the check, not every conductor added via addConductor()

Does that make sense? What do you think @jost-s ?

signals broken for 0.2x

seems it wasnt finished.. the signalhandler option does not appear to be implemented
in conductor.ts. function InstallApp line 389 .

work around example:

  await runScenario(async scenario => {
    
    // setup signal receiver
    let signalHandler_alice: AppSignalCb | undefined;
    let signalReceived_alice: Promise<AppSignal>
    signalHandler_alice = (signal) => {
        console.log("signal found for Alice:",signal)
        signalReceived_alice = new Promise<AppSignal>((resolve) => {
        resolve(signal);
      };
    });
    //set app path
    const testAppPath = process.cwd() + path_to_happ;

    // Add players with the test app to the Scenario.
    const alice = await scenario.addPlayerWithApp({ path: testAppPath })
    
    // hack to get the appWs and add the event handler...  maybe it is idempotent and doesnt create another websocket?
    const appWs = await alice.conductor.connectAppWs(await alice.conductor.attachAppInterface())
    appWs.on("signal", SignalHandler_alice);
   
    await scenario.shareAllAgents();

   //  make a callzome here to provoke a signal back for alice

    await dhtSync([alice], alice.cells[0].cell_id[0]);
    const alice_signal = await signalReceived_alice

TypeError: Converting circular structure to JSON in orchestrator.run(): upgraded from 0.3.2-dev.3 to 0.3.4-dev.0

After upgrading from 0.3.2-dev.3 to 0.3.4-dev.0, a circular JSON structure occurs in orchestrator.run()

(node:410065) UnhandledPromiseRejectionWarning: TypeError: Converting circular structure to JSON
    --> starting at object with constructor 'DerivedLogger'
    |     property '_readableState' -> object with constructor 'ReadableState'
    |     property 'pipes' -> object with constructor 'Console'
    --- property 'parent' closes the circle
    at JSON.stringify (<anonymous>)
    at Splatter._splat (/home/brian/work/cogov/cogov-dev/test/node_modules/logform/splat.js:71:25)
    at Splatter.transform (/home/brian/work/cogov/cogov-dev/test/node_modules/logform/splat.js:119:19)
    at Format.transform (/home/brian/work/cogov/cogov-dev/test/node_modules/logform/combine.js:20:24)
    at DerivedLogger._transform (/home/brian/work/cogov/cogov-dev/test/node_modules/winston/lib/winston/logger.js:305:29)
(node:410065) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 4)

All of the assertions pass in test/index.js.

there is a need to be able to use the `timeout` property on callZome

tryorama/ts/src/common.ts

Lines 84 to 113 in 4d46060

callZome: async <T>(request: CellZomeCallRequest) => {
const callZomeResponse = await conductor.appWs().callZome({
...request,
cap_secret: request.cap_secret ?? null,
cell_id: cell.cell_id,
provenance: request.provenance || agentPubKey,
payload: request.payload ?? null,
});
assertZomeResponse<T>(callZomeResponse);
return callZomeResponse;
},
});
/**
* Get a shorthand function to call a Cell's Zome.
*
* @param cell - The Cell to call the Zome on.
* @param zomeName - The name of the Zome to call.
* @returns A function to call the specified Zome.
*
* @public
*/
export const getZomeCaller =
(cell: CallableCell, zomeName: string) =>
<T>(fnName: string, payload?: unknown): Promise<T> =>
cell.callZome<T>({
zome_name: zomeName,
fn_name: fnName,
payload,
});

we have in hREA some zome calls (especially the first one which calls init that need to be able to take longer than the default timeout, for our tests to pass. I've shimmed this in my temp fork but if we fix it here I can switch back to this version of tryorama.

I added it as an optional second argument, which fits the fn signature of the underlying @holochain/client call

Too few JSDoc & comments

It's difficult to understand the code if it isn't documented. Especially, the exported methods/variables and methods of the classes.

Example of a method of the class Player: call method should have an explanation about what args are necessary and why they're needed.

Feature Request: function that waits until all agents have identical dht state

Currently when writing tryorama tests, we have to call sleep() after every zome call, waiting for changes to be gossiped to all agents. This makes for flaky tests that inconsistently fail if network conditions change, or slow tests that wait unecessesarily longer than needed because sleep time is static.

One way around this could be to introduce a function like waitForPeerSync(). This would compare the DHT state of all agents in the scenario and sleep until they are identical.

feature / question : runorama exists?

Hi there,
just wondering if it would be possible to adapt tryorama to run against a real conductor.. not one that is spawned and killed.. It would greatly assist with testing and data import

as anything like that been discussed?

Cleaning up debug messages

I'm getting a lot of messages of the following structure when I run tests:

00:00:00 [tryorama: tryorama conductor bob] debug: ...
or
00:00:00 [tryorama] info: ...
as well as

00:00:00 info:
☸☸☸ [[[CONDUCTOR alice]]]
☸ Successfully loaded 1 instance configurations
☸ Starting instances...
☸ Start all instances
☸ Starting instance "course_dna"...

I find this clutters my test output and makes it hard to read what the results of my actual tests are.
I throught configuring the logger would help, but even after configuring the logger to error, I'm still getting the debug and info messages.

Here's what I tried in the conductor statement:

const conductorConfig = Config.gen(
  { course_dna: dna },
  {
    network: {
      type: "sim2h",
      sim2h_url: "ws://localhost:9000"
    },
    logger: Config.logger({ type: "error" }),
  }
);

and in the orchestrator statement:

const orchestrator = new Orchestrator({
  middleware: combine(
    tapeExecutor(require("tape")),
    localOnly
  ),
  globalConfig: {
    logger: { type: "error" }
  }
});

Note that following recommendations here, I've been using ^0.3.0-rc.3 to try solving the issue, to no avail.

Am I missing something?

how to set loglevel verbosity

using the latest version "@holochain/tryorama": "^0.3.2-dev.2"

in the readme file it says switching off logging is a config setting:
const commonConfig = Config.gen( { chat: Config.dna('path/to/chat.dna.json') }, { logger: Config.logger(false) } )

i get an error that the 'type' field is missing with this config
i imagine it should be something like {type:'error'} but that doesnt work for me either.

Documentation / examples of advanced `logger` configuration

This new logger looks like it might have the capabilities I was craving with Diorama :D

Is it possible to configure it to:

  • show only DNA logs output with hdk::debug; nothing else?
  • show only DNA logs related to data writes?
  • show only DNA logs related to data reads?
  • show only DNA logs related to inter-DNA calls & signalling?

...and I guess optimally, combinations of all of the above & more?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.