mirror of
https://github.com/logos-messaging/js-waku.git
synced 2026-01-05 23:33:08 +00:00
test: Fix flackiness (#474)
This commit is contained in:
parent
2d4b3f1989
commit
b257885204
@ -63,6 +63,7 @@
|
|||||||
"nodekey",
|
"nodekey",
|
||||||
"opendns",
|
"opendns",
|
||||||
"peerhave",
|
"peerhave",
|
||||||
|
"portfinder",
|
||||||
"prettierignore",
|
"prettierignore",
|
||||||
"proto",
|
"proto",
|
||||||
"protobuf",
|
"protobuf",
|
||||||
|
|||||||
48
package-lock.json
generated
48
package-lock.json
generated
@ -66,6 +66,7 @@
|
|||||||
"npm-run-all": "^4.1.5",
|
"npm-run-all": "^4.1.5",
|
||||||
"nyc": "^15.1.0",
|
"nyc": "^15.1.0",
|
||||||
"p-timeout": "^4.1.0",
|
"p-timeout": "^4.1.0",
|
||||||
|
"portfinder": "^1.0.28",
|
||||||
"prettier": "^2.1.1",
|
"prettier": "^2.1.1",
|
||||||
"process": "^0.11.10",
|
"process": "^0.11.10",
|
||||||
"puppeteer": "^13.0.1",
|
"puppeteer": "^13.0.1",
|
||||||
@ -11799,7 +11800,6 @@
|
|||||||
"version": "0.5.5",
|
"version": "0.5.5",
|
||||||
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
|
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
|
||||||
"integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
|
"integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
|
||||||
"peer": true,
|
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"minimist": "^1.2.5"
|
"minimist": "^1.2.5"
|
||||||
},
|
},
|
||||||
@ -13588,6 +13588,29 @@
|
|||||||
"node": ">=6"
|
"node": ">=6"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/portfinder": {
|
||||||
|
"version": "1.0.28",
|
||||||
|
"resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz",
|
||||||
|
"integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"async": "^2.6.2",
|
||||||
|
"debug": "^3.1.1",
|
||||||
|
"mkdirp": "^0.5.5"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.12.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/portfinder/node_modules/debug": {
|
||||||
|
"version": "3.2.7",
|
||||||
|
"resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
|
||||||
|
"integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"ms": "^2.1.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/posix-character-classes": {
|
"node_modules/posix-character-classes": {
|
||||||
"version": "0.1.1",
|
"version": "0.1.1",
|
||||||
"resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
|
"resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
|
||||||
@ -27204,7 +27227,6 @@
|
|||||||
"version": "0.5.5",
|
"version": "0.5.5",
|
||||||
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
|
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
|
||||||
"integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
|
"integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
|
||||||
"peer": true,
|
|
||||||
"requires": {
|
"requires": {
|
||||||
"minimist": "^1.2.5"
|
"minimist": "^1.2.5"
|
||||||
}
|
}
|
||||||
@ -28557,6 +28579,28 @@
|
|||||||
"xmldom": "^0.6.0"
|
"xmldom": "^0.6.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"portfinder": {
|
||||||
|
"version": "1.0.28",
|
||||||
|
"resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz",
|
||||||
|
"integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"async": "^2.6.2",
|
||||||
|
"debug": "^3.1.1",
|
||||||
|
"mkdirp": "^0.5.5"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"debug": {
|
||||||
|
"version": "3.2.7",
|
||||||
|
"resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
|
||||||
|
"integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"ms": "^2.1.1"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"posix-character-classes": {
|
"posix-character-classes": {
|
||||||
"version": "0.1.1",
|
"version": "0.1.1",
|
||||||
"resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
|
"resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
|
||||||
|
|||||||
@ -112,6 +112,7 @@
|
|||||||
"npm-run-all": "^4.1.5",
|
"npm-run-all": "^4.1.5",
|
||||||
"nyc": "^15.1.0",
|
"nyc": "^15.1.0",
|
||||||
"p-timeout": "^4.1.0",
|
"p-timeout": "^4.1.0",
|
||||||
|
"portfinder": "^1.0.28",
|
||||||
"prettier": "^2.1.1",
|
"prettier": "^2.1.1",
|
||||||
"process": "^0.11.10",
|
"process": "^0.11.10",
|
||||||
"puppeteer": "^13.0.1",
|
"puppeteer": "^13.0.1",
|
||||||
|
|||||||
@ -36,13 +36,17 @@ describe('Waku Message [node only]', function () {
|
|||||||
|
|
||||||
nimWaku = new NimWaku(makeLogFileName(this));
|
nimWaku = new NimWaku(makeLogFileName(this));
|
||||||
dbg('Starting nim-waku node');
|
dbg('Starting nim-waku node');
|
||||||
await nimWaku.start({ rpcPrivate: true, lightpush: true });
|
await nimWaku.start({ rpcPrivate: true });
|
||||||
|
|
||||||
dbg('Dialing to nim-waku node');
|
dbg('Dialing to nim-waku node');
|
||||||
await waku.dial(await nimWaku.getMultiaddrWithId());
|
await waku.dial(await nimWaku.getMultiaddrWithId());
|
||||||
dbg('Wait for remote peer');
|
dbg('Wait for remote peer');
|
||||||
await waku.waitForRemotePeer([Protocols.Relay, Protocols.LightPush]);
|
await waku.waitForRemotePeer([Protocols.Relay]);
|
||||||
dbg('Remote peer ready');
|
dbg('Remote peer ready');
|
||||||
|
// As this test uses the nim-waku RPC API, we somehow often face
|
||||||
|
// Race conditions where the nim-waku node does not have the js-waku
|
||||||
|
// Node in its relay mesh just yet.
|
||||||
|
await delay(500);
|
||||||
});
|
});
|
||||||
|
|
||||||
afterEach(async function () {
|
afterEach(async function () {
|
||||||
|
|||||||
@ -60,7 +60,7 @@ describe('Waku Store', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('Retrieves history using callback', async function () {
|
it('Retrieves history using callback', async function () {
|
||||||
this.timeout(5_000);
|
this.timeout(10_000);
|
||||||
|
|
||||||
nimWaku = new NimWaku(makeLogFileName(this));
|
nimWaku = new NimWaku(makeLogFileName(this));
|
||||||
await nimWaku.start({ persistMessages: true });
|
await nimWaku.start({ persistMessages: true });
|
||||||
|
|||||||
@ -143,7 +143,10 @@ export class WakuStore {
|
|||||||
},
|
},
|
||||||
{ contentTopics }
|
{ contentTopics }
|
||||||
);
|
);
|
||||||
dbg('Querying history with the following options', options);
|
dbg('Querying history with the following options', {
|
||||||
|
peerId: options?.peerId?.toB58String(),
|
||||||
|
...options,
|
||||||
|
});
|
||||||
|
|
||||||
let peer;
|
let peer;
|
||||||
if (opts.peerId) {
|
if (opts.peerId) {
|
||||||
|
|||||||
@ -4,13 +4,13 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import { ChildProcess, spawn } from 'child_process';
|
import { ChildProcess, spawn } from 'child_process';
|
||||||
import { randomInt } from 'crypto';
|
|
||||||
|
|
||||||
import appRoot from 'app-root-path';
|
import appRoot from 'app-root-path';
|
||||||
import axios from 'axios';
|
import axios from 'axios';
|
||||||
import debug from 'debug';
|
import debug from 'debug';
|
||||||
import { Multiaddr, multiaddr } from 'multiaddr';
|
import { Multiaddr, multiaddr } from 'multiaddr';
|
||||||
import PeerId from 'peer-id';
|
import PeerId from 'peer-id';
|
||||||
|
import portfinder from 'portfinder';
|
||||||
|
|
||||||
import { hexToBuf } from '../lib/utils';
|
import { hexToBuf } from '../lib/utils';
|
||||||
import { DefaultPubSubTopic } from '../lib/waku';
|
import { DefaultPubSubTopic } from '../lib/waku';
|
||||||
@ -22,7 +22,6 @@ import waitForLine from './log_file';
|
|||||||
|
|
||||||
const dbg = debug('waku:nim-waku');
|
const dbg = debug('waku:nim-waku');
|
||||||
|
|
||||||
const NIM_WAKU_DEFAULT_RPC_PORT = 8545;
|
|
||||||
const NIM_WAKU_DIR = appRoot + '/nim-waku';
|
const NIM_WAKU_DIR = appRoot + '/nim-waku';
|
||||||
const NIM_WAKU_BIN = NIM_WAKU_DIR + '/build/wakunode2';
|
const NIM_WAKU_BIN = NIM_WAKU_DIR + '/build/wakunode2';
|
||||||
|
|
||||||
@ -43,6 +42,9 @@ export interface Args {
|
|||||||
topics?: string;
|
topics?: string;
|
||||||
rpcPrivate?: boolean;
|
rpcPrivate?: boolean;
|
||||||
websocketSupport?: boolean;
|
websocketSupport?: boolean;
|
||||||
|
tcpPort?: number;
|
||||||
|
rpcPort?: number;
|
||||||
|
websocketPort?: number;
|
||||||
}
|
}
|
||||||
|
|
||||||
export enum LogLevel {
|
export enum LogLevel {
|
||||||
@ -69,13 +71,12 @@ export interface WakuRelayMessage {
|
|||||||
export class NimWaku {
|
export class NimWaku {
|
||||||
private process?: ChildProcess;
|
private process?: ChildProcess;
|
||||||
private pid?: number;
|
private pid?: number;
|
||||||
private portsShift: number;
|
|
||||||
private peerId?: PeerId;
|
private peerId?: PeerId;
|
||||||
private multiaddrWithId?: Multiaddr;
|
private multiaddrWithId?: Multiaddr;
|
||||||
private logPath: string;
|
private readonly logPath: string;
|
||||||
|
private rpcPort?: number;
|
||||||
|
|
||||||
constructor(logName: string) {
|
constructor(logName: string) {
|
||||||
this.portsShift = randomInt(0, 5000);
|
|
||||||
this.logPath = `${LOG_DIR}/nim-waku_${logName}.log`;
|
this.logPath = `${LOG_DIR}/nim-waku_${logName}.log`;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -95,14 +96,29 @@ export class NimWaku {
|
|||||||
|
|
||||||
const mergedArgs = defaultArgs();
|
const mergedArgs = defaultArgs();
|
||||||
|
|
||||||
|
const ports: number[] = await new Promise((resolve, reject) => {
|
||||||
|
portfinder.getPorts(3, {}, (err, ports) => {
|
||||||
|
if (err) reject(err);
|
||||||
|
resolve(ports);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
this.rpcPort = ports[0];
|
||||||
|
|
||||||
// Object.assign overrides the properties with the source (if there are conflicts)
|
// Object.assign overrides the properties with the source (if there are conflicts)
|
||||||
Object.assign(
|
Object.assign(
|
||||||
mergedArgs,
|
mergedArgs,
|
||||||
{ portsShift: this.portsShift, logLevel: LogLevel.Trace },
|
{
|
||||||
|
tcpPort: ports[1],
|
||||||
|
rpcPort: this.rpcPort,
|
||||||
|
websocketPort: ports[2],
|
||||||
|
logLevel: LogLevel.Trace,
|
||||||
|
},
|
||||||
args
|
args
|
||||||
);
|
);
|
||||||
|
|
||||||
const argsArray = argsToArray(mergedArgs);
|
const argsArray = argsToArray(mergedArgs);
|
||||||
|
dbg(`nim-waku args: ${argsArray}`);
|
||||||
this.process = spawn(NIM_WAKU_BIN, argsArray, {
|
this.process = spawn(NIM_WAKU_BIN, argsArray, {
|
||||||
cwd: NIM_WAKU_DIR,
|
cwd: NIM_WAKU_DIR,
|
||||||
stdio: [
|
stdio: [
|
||||||
@ -328,8 +344,7 @@ export class NimWaku {
|
|||||||
}
|
}
|
||||||
|
|
||||||
get rpcUrl(): string {
|
get rpcUrl(): string {
|
||||||
const port = NIM_WAKU_DEFAULT_RPC_PORT + this.portsShift;
|
return `http://localhost:${this.rpcPort}/`;
|
||||||
return `http://localhost:${port}/`;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private async rpcCall<T>(
|
private async rpcCall<T>(
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user