2021-03-03 22:01:05 +03:00
|
|
|
import { checkConnection, createClient, FluenceClient } from '../../api.unstable';
|
2021-01-19 15:47:49 +03:00
|
|
|
import Multiaddr from 'multiaddr';
|
2021-03-03 22:01:05 +03:00
|
|
|
import { nodes } from '../connection';
|
|
|
|
import { RequestFlowBuilder } from '../../internal/RequestFlowBuilder';
|
|
|
|
|
|
|
|
let client: FluenceClient;
|
2021-01-19 15:47:49 +03:00
|
|
|
|
|
|
|
describe('Typescript usage suite', () => {
|
2021-03-03 22:01:05 +03:00
|
|
|
afterEach(async () => {
|
|
|
|
if (client) {
|
|
|
|
await client.disconnect();
|
|
|
|
}
|
2021-01-19 15:47:49 +03:00
|
|
|
});
|
|
|
|
|
2021-03-03 22:01:05 +03:00
|
|
|
it('should make a call through network', async () => {
|
|
|
|
// arrange
|
|
|
|
client = await createClient();
|
|
|
|
await client.connect(nodes[0].multiaddr);
|
|
|
|
|
|
|
|
// act
|
|
|
|
const [request, promise] = new RequestFlowBuilder()
|
|
|
|
.withRawScript(
|
|
|
|
`(seq
|
|
|
|
(call init_relay ("op" "identity") ["hello world!"] result)
|
|
|
|
(call %init_peer_id% ("callback" "callback") [result])
|
|
|
|
)`,
|
|
|
|
)
|
|
|
|
.buildAsFetch<[[string]]>('callback', 'callback');
|
|
|
|
await client.initiateFlow(request);
|
|
|
|
|
|
|
|
// assert
|
|
|
|
const [[result]] = await promise;
|
|
|
|
expect(result).toBe('hello world!');
|
|
|
|
});
|
|
|
|
|
|
|
|
it('check connection should work', async function () {
|
|
|
|
client = await createClient();
|
|
|
|
await client.connect(nodes[0].multiaddr);
|
|
|
|
|
|
|
|
let isConnected = await checkConnection(client);
|
|
|
|
|
|
|
|
expect(isConnected).toEqual(true);
|
|
|
|
});
|
|
|
|
|
|
|
|
it('two clients should work inside the same time browser', async () => {
|
|
|
|
// arrange
|
|
|
|
const client1 = await createClient(nodes[0].multiaddr);
|
|
|
|
const client2 = await createClient(nodes[0].multiaddr);
|
|
|
|
|
|
|
|
let resMakingPromise = new Promise((resolve) => {
|
|
|
|
client2.aquaCallHandler.onEvent('test', 'test', (args, _) => {
|
|
|
|
resolve([...args]);
|
|
|
|
return {};
|
2021-01-19 15:47:49 +03:00
|
|
|
});
|
2021-03-03 22:01:05 +03:00
|
|
|
});
|
2021-01-19 15:47:49 +03:00
|
|
|
|
2021-03-03 22:01:05 +03:00
|
|
|
let script = `
|
|
|
|
(seq
|
|
|
|
(call "${client1.relayPeerId}" ("op" "identity") [])
|
|
|
|
(call "${client2.selfPeerId}" ("test" "test") [a b c d])
|
|
|
|
)
|
|
|
|
`;
|
2021-01-19 15:47:49 +03:00
|
|
|
|
2021-03-03 22:01:05 +03:00
|
|
|
let data: Map<string, any> = new Map();
|
|
|
|
data.set('a', 'some a');
|
|
|
|
data.set('b', 'some b');
|
|
|
|
data.set('c', 'some c');
|
|
|
|
data.set('d', 'some d');
|
2021-01-19 15:47:49 +03:00
|
|
|
|
2021-03-03 22:01:05 +03:00
|
|
|
await client1.initiateFlow(new RequestFlowBuilder().withRawScript(script).withVariables(data).build());
|
2021-01-19 15:47:49 +03:00
|
|
|
|
2021-03-03 22:01:05 +03:00
|
|
|
let res = await resMakingPromise;
|
|
|
|
expect(res).toEqual(['some a', 'some b', 'some c', 'some d']);
|
2021-01-19 15:47:49 +03:00
|
|
|
|
2021-03-03 22:01:05 +03:00
|
|
|
await client1.disconnect();
|
|
|
|
await client2.disconnect();
|
|
|
|
});
|
|
|
|
|
|
|
|
describe('should make connection to network', () => {
|
|
|
|
it('address as string', async () => {
|
2021-01-19 15:47:49 +03:00
|
|
|
// arrange
|
2021-02-25 15:33:37 +03:00
|
|
|
const addr = nodes[0].multiaddr;
|
2021-01-19 15:47:49 +03:00
|
|
|
|
|
|
|
// act
|
2021-03-03 22:01:05 +03:00
|
|
|
client = await createClient(addr);
|
|
|
|
const isConnected = await checkConnection(client);
|
2021-01-19 15:47:49 +03:00
|
|
|
|
|
|
|
// assert
|
2021-03-03 22:01:05 +03:00
|
|
|
expect(isConnected).toBeTruthy;
|
2021-01-19 15:47:49 +03:00
|
|
|
});
|
|
|
|
|
2021-03-03 22:01:05 +03:00
|
|
|
it('address as multiaddr', async () => {
|
2021-01-19 15:47:49 +03:00
|
|
|
// arrange
|
2021-02-25 15:33:37 +03:00
|
|
|
const addr = new Multiaddr(nodes[0].multiaddr);
|
2021-01-19 15:47:49 +03:00
|
|
|
|
|
|
|
// act
|
2021-03-03 22:01:05 +03:00
|
|
|
client = await createClient(addr);
|
|
|
|
const isConnected = await checkConnection(client);
|
2021-01-19 15:47:49 +03:00
|
|
|
|
|
|
|
// assert
|
2021-03-03 22:01:05 +03:00
|
|
|
expect(isConnected).toBeTruthy;
|
2021-01-19 15:47:49 +03:00
|
|
|
});
|
|
|
|
|
2021-03-03 22:01:05 +03:00
|
|
|
it('address as node', async () => {
|
2021-01-19 15:47:49 +03:00
|
|
|
// arrange
|
2021-02-25 15:33:37 +03:00
|
|
|
const addr = nodes[0];
|
2021-01-19 15:47:49 +03:00
|
|
|
|
|
|
|
// act
|
2021-03-03 22:01:05 +03:00
|
|
|
client = await createClient(addr);
|
|
|
|
const isConnected = await checkConnection(client);
|
2021-01-19 15:47:49 +03:00
|
|
|
|
|
|
|
// assert
|
2021-03-03 22:01:05 +03:00
|
|
|
expect(isConnected).toBeTruthy;
|
2021-01-19 15:47:49 +03:00
|
|
|
});
|
|
|
|
|
2021-03-03 22:01:05 +03:00
|
|
|
it('peerid as peer id', async () => {
|
2021-01-19 15:47:49 +03:00
|
|
|
// arrange
|
2021-02-25 15:33:37 +03:00
|
|
|
const addr = nodes[0].multiaddr;
|
2021-01-19 15:47:49 +03:00
|
|
|
|
|
|
|
// act
|
2021-03-03 22:01:05 +03:00
|
|
|
client = await createClient(addr);
|
|
|
|
const isConnected = await checkConnection(client);
|
2021-01-19 15:47:49 +03:00
|
|
|
|
|
|
|
// assert
|
2021-03-03 22:01:05 +03:00
|
|
|
expect(isConnected).toBeTruthy;
|
2021-01-19 15:47:49 +03:00
|
|
|
});
|
|
|
|
|
2021-03-03 22:01:05 +03:00
|
|
|
it('peerid as seed', async () => {
|
2021-01-19 15:47:49 +03:00
|
|
|
// arrange
|
2021-02-25 15:33:37 +03:00
|
|
|
const addr = nodes[0].multiaddr;
|
2021-01-19 15:47:49 +03:00
|
|
|
|
|
|
|
// act
|
2021-03-03 22:01:05 +03:00
|
|
|
client = await createClient(addr);
|
|
|
|
const isConnected = await checkConnection(client);
|
2021-01-19 15:47:49 +03:00
|
|
|
|
|
|
|
// assert
|
2021-03-03 22:01:05 +03:00
|
|
|
expect(isConnected).toBeTruthy;
|
2021-01-19 15:47:49 +03:00
|
|
|
});
|
|
|
|
});
|
2021-02-25 18:36:10 +03:00
|
|
|
|
|
|
|
it('xor handling should work with connected client', async function () {
|
|
|
|
// arrange
|
2021-03-03 22:01:05 +03:00
|
|
|
const [request, promise] = new RequestFlowBuilder()
|
|
|
|
.withRawScript(
|
|
|
|
`
|
2021-02-25 18:36:10 +03:00
|
|
|
(seq
|
2021-03-03 22:01:05 +03:00
|
|
|
(call init_relay ("op" "identity") [])
|
|
|
|
(call init_relay ("incorrect" "service") ["incorrect_arg"])
|
2021-02-25 18:36:10 +03:00
|
|
|
)
|
2021-03-03 22:01:05 +03:00
|
|
|
`,
|
|
|
|
)
|
|
|
|
.buildWithErrorHandling();
|
2021-02-25 18:36:10 +03:00
|
|
|
|
2021-03-03 22:01:05 +03:00
|
|
|
// act
|
|
|
|
client = await createClient(nodes[0].multiaddr);
|
|
|
|
await client.initiateFlow(request);
|
2021-02-25 18:36:10 +03:00
|
|
|
|
|
|
|
// assert
|
|
|
|
await expect(promise).rejects.toMatchObject({
|
|
|
|
error: expect.stringContaining("Service with id 'incorrect' not found"),
|
|
|
|
instruction: expect.stringContaining('incorrect'),
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
it('xor handling should work with local client', async function () {
|
|
|
|
// arrange
|
2021-03-03 22:01:05 +03:00
|
|
|
const [request, promise] = new RequestFlowBuilder()
|
|
|
|
.withRawScript(
|
|
|
|
`
|
|
|
|
(call %init_peer_id% ("service" "fails") [])
|
|
|
|
`,
|
|
|
|
)
|
|
|
|
.configHandler((h) => {
|
|
|
|
h.use((req, res, _) => {
|
|
|
|
res.retCode = 1;
|
|
|
|
res.result = 'service failed internally';
|
|
|
|
});
|
|
|
|
})
|
|
|
|
.buildWithErrorHandling();
|
2021-02-25 18:36:10 +03:00
|
|
|
|
|
|
|
// act
|
2021-03-03 22:01:05 +03:00
|
|
|
client = await createClient();
|
|
|
|
await client.initiateFlow(request);
|
2021-02-25 18:36:10 +03:00
|
|
|
|
|
|
|
// assert
|
2021-03-03 22:01:05 +03:00
|
|
|
await expect(promise).rejects.toMatch('service failed internally');
|
2021-02-25 18:36:10 +03:00
|
|
|
});
|
2021-01-19 15:47:49 +03:00
|
|
|
});
|