From cf8a45cb0ba7d459a46306f7d82f36b4dc15fc50 Mon Sep 17 00:00:00 2001 From: DieMyst Date: Thu, 3 Jun 2021 17:27:32 +0300 Subject: [PATCH] test via --- aqua/examples/via.aqua | 23 +++ src/compiled/examples/foldJoin.ts | 107 ++++++++++ src/compiled/examples/option.ts | 77 +++++++ src/compiled/examples/via.ts | 324 ++++++++++++++++++++++++++++++ src/examples/viaCall.ts | 17 ++ src/index.ts | 4 +- src/run-examples.ts | 6 + 7 files changed, 556 insertions(+), 2 deletions(-) create mode 100644 aqua/examples/via.aqua create mode 100644 src/compiled/examples/foldJoin.ts create mode 100644 src/compiled/examples/option.ts create mode 100644 src/compiled/examples/via.ts create mode 100644 src/examples/viaCall.ts diff --git a/aqua/examples/via.aqua b/aqua/examples/via.aqua new file mode 100644 index 0000000..4edca0d --- /dev/null +++ b/aqua/examples/via.aqua @@ -0,0 +1,23 @@ +import "@fluencelabs/aqua-lib/builtin.aqua" + +service CustomId("cid"): + id(s: string) -> string + +func viaArr(node_id: string, viaAr: []string) -> Info: + on node_id via viaAr: + p <- Peer.identify() + <- p + + +func viaStream(node_id: string, viaStr: []string) -> Info: + str: *string + for v <- viaStr: + str <- CustomId.id(v) + on node_id via str: + p <- Peer.identify() + <- p + +func viaOpt(relay: string, node_id: string, viaOpt: ?string) -> Info: + on node_id via viaOpt: + p <- Peer.identify() + <- p \ No newline at end of file diff --git a/src/compiled/examples/foldJoin.ts b/src/compiled/examples/foldJoin.ts new file mode 100644 index 0000000..a1a8c98 --- /dev/null +++ b/src/compiled/examples/foldJoin.ts @@ -0,0 +1,107 @@ +/** + * + * This file is auto-generated. Do not edit manually: changes may be erased. + * Generated by Aqua compiler: https://github.com/fluencelabs/aqua/. + * If you find any bugs, please write an issue on GitHub: https://github.com/fluencelabs/aqua/issues + * Aqua version: 0.1.4-SNAPSHOT + * + */ +import { FluenceClient, PeerIdB58 } from '@fluencelabs/fluence'; +import { RequestFlowBuilder } from '@fluencelabs/fluence/dist/api.unstable'; +import { RequestFlow } from '@fluencelabs/fluence/dist/internal/RequestFlow'; + + + +export async function getTwoResults(client: FluenceClient, relay: string): Promise { + let request: RequestFlow; + const promise = new Promise((resolve, reject) => { + request = new RequestFlowBuilder() + .disableInjections() + .withRawScript( + ` +(xor + (seq + (seq + (seq + (seq + (seq + (call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-) + (call %init_peer_id% ("getDataSrv" "relay") [] relay) + ) + (call -relay- ("op" "identity") []) + ) + (xor + (seq + (seq + (seq + (seq + (seq + (call relay ("op" "string_to_b58") [%init_peer_id%] k) + (call relay ("kad" "neighborhood") [k false] nodes) + ) + (fold nodes n + (par + (xor + (call n ("peer" "timestamp_sec") [] $res) + (null) + ) + (next n) + ) + ) + ) + (call relay ("op" "identity") [$res.$.[0]!]) + ) + (call relay ("op" "identity") [$res.$.[1]!]) + ) + (call relay ("op" "identity") [$res.$.[2]!]) + ) + (seq + (seq + (call -relay- ("op" "identity") []) + (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 1]) + ) + (call -relay- ("op" "identity") []) + ) + ) + ) + (call -relay- ("op" "identity") []) + ) + (xor + (call %init_peer_id% ("callbackSrv" "response") [$res]) + (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2]) + ) + ) + (seq + (call -relay- ("op" "identity") []) + (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3]) + ) +) + + `, + ) + .configHandler((h) => { + h.on('getDataSrv', '-relay-', () => { + return client.relayPeerId!; + }); + h.on('getDataSrv', 'relay', () => {return relay;}); + h.onEvent('callbackSrv', 'response', (args) => { + const [res] = args; + resolve(res); +}); + + h.onEvent('errorHandlingSrv', 'error', (args) => { + // assuming error is the single argument + const [err] = args; + reject(err); + }); + }) + .handleScriptError(reject) + .handleTimeout(() => { + reject('Request timed out for getTwoResults'); + }) + .build(); + }); + await client.initiateFlow(request!); + return promise; +} + \ No newline at end of file diff --git a/src/compiled/examples/option.ts b/src/compiled/examples/option.ts new file mode 100644 index 0000000..db63d12 --- /dev/null +++ b/src/compiled/examples/option.ts @@ -0,0 +1,77 @@ +/** + * + * This file is auto-generated. Do not edit manually: changes may be erased. + * Generated by Aqua compiler: https://github.com/fluencelabs/aqua/. + * If you find any bugs, please write an issue on GitHub: https://github.com/fluencelabs/aqua/issues + * Aqua version: 0.1.4-SNAPSHOT + * + */ +import { FluenceClient, PeerIdB58 } from '@fluencelabs/fluence'; +import { RequestFlowBuilder } from '@fluencelabs/fluence/dist/api.unstable'; +import { RequestFlow } from '@fluencelabs/fluence/dist/internal/RequestFlow'; + + + +export async function useOptional(client: FluenceClient, opt: string | null): Promise { + let request: RequestFlow; + const promise = new Promise((resolve, reject) => { + request = new RequestFlowBuilder() + .disableInjections() + .withRawScript( + ` +(xor + (seq + (seq + (seq + (seq + (call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-) + (call %init_peer_id% ("getDataSrv" "opt") [] opt) + ) + (call %init_peer_id% ("test2" "getStr") [opt] res) + ) + (fold opt i + (seq + (call %init_peer_id% ("test2" "getStr2") [i]) + (next i) + ) + ) + ) + (xor + (call %init_peer_id% ("callbackSrv" "response") [res.$.[0]!]) + (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 1]) + ) + ) + (seq + (call -relay- ("op" "identity") []) + (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2]) + ) +) + + `, + ) + .configHandler((h) => { + h.on('getDataSrv', '-relay-', () => { + return client.relayPeerId!; + }); + h.on('getDataSrv', 'opt', () => {return opt === null ? [] : [opt];}); + h.onEvent('callbackSrv', 'response', (args) => { + const [res] = args; + resolve(res); +}); + + h.onEvent('errorHandlingSrv', 'error', (args) => { + // assuming error is the single argument + const [err] = args; + reject(err); + }); + }) + .handleScriptError(reject) + .handleTimeout(() => { + reject('Request timed out for useOptional'); + }) + .build(); + }); + await client.initiateFlow(request!); + return promise; +} + \ No newline at end of file diff --git a/src/compiled/examples/via.ts b/src/compiled/examples/via.ts new file mode 100644 index 0000000..b7c3b23 --- /dev/null +++ b/src/compiled/examples/via.ts @@ -0,0 +1,324 @@ +/** + * + * This file is auto-generated. Do not edit manually: changes may be erased. + * Generated by Aqua compiler: https://github.com/fluencelabs/aqua/. + * If you find any bugs, please write an issue on GitHub: https://github.com/fluencelabs/aqua/issues + * Aqua version: 0.1.4-SNAPSHOT + * + */ +import { FluenceClient, PeerIdB58 } from '@fluencelabs/fluence'; +import { RequestFlowBuilder } from '@fluencelabs/fluence/dist/api.unstable'; +import { RequestFlow } from '@fluencelabs/fluence/dist/internal/RequestFlow'; + + + +export async function viaArr(client: FluenceClient, node_id: string, viaAr: string[]): Promise<{external_addresses:string[]}> { + let request: RequestFlow; + const promise = new Promise<{external_addresses:string[]}>((resolve, reject) => { + request = new RequestFlowBuilder() + .disableInjections() + .withRawScript( + ` +(xor + (seq + (seq + (seq + (seq + (seq + (seq + (seq + (seq + (call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-) + (call %init_peer_id% ("getDataSrv" "node_id") [] node_id) + ) + (call %init_peer_id% ("getDataSrv" "viaAr") [] viaAr) + ) + (call -relay- ("op" "identity") []) + ) + (fold viaAr -via-peer- + (seq + (call -via-peer- ("op" "identity") []) + (next -via-peer-) + ) + ) + ) + (xor + (call node_id ("peer" "identify") [] p) + (seq + (seq + (seq + (fold viaAr -via-peer- + (seq + (call -via-peer- ("op" "identity") []) + (next -via-peer-) + ) + ) + (call -relay- ("op" "identity") []) + ) + (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 1]) + ) + (call -relay- ("op" "identity") []) + ) + ) + ) + (fold viaAr -via-peer- + (seq + (call -via-peer- ("op" "identity") []) + (next -via-peer-) + ) + ) + ) + (call -relay- ("op" "identity") []) + ) + (xor + (call %init_peer_id% ("callbackSrv" "response") [p]) + (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2]) + ) + ) + (seq + (call -relay- ("op" "identity") []) + (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3]) + ) +) + + `, + ) + .configHandler((h) => { + h.on('getDataSrv', '-relay-', () => { + return client.relayPeerId!; + }); + h.on('getDataSrv', 'node_id', () => {return node_id;}); +h.on('getDataSrv', 'viaAr', () => {return viaAr;}); + h.onEvent('callbackSrv', 'response', (args) => { + const [res] = args; + resolve(res); +}); + + h.onEvent('errorHandlingSrv', 'error', (args) => { + // assuming error is the single argument + const [err] = args; + reject(err); + }); + }) + .handleScriptError(reject) + .handleTimeout(() => { + reject('Request timed out for viaArr'); + }) + .build(); + }); + await client.initiateFlow(request!); + return promise; +} + + + +export async function viaStream(client: FluenceClient, node_id: string, viaStr: string[]): Promise<{external_addresses:string[]}> { + let request: RequestFlow; + const promise = new Promise<{external_addresses:string[]}>((resolve, reject) => { + request = new RequestFlowBuilder() + .disableInjections() + .withRawScript( + ` +(xor + (seq + (seq + (seq + (seq + (seq + (seq + (seq + (seq + (seq + (call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-) + (call %init_peer_id% ("getDataSrv" "node_id") [] node_id) + ) + (call %init_peer_id% ("getDataSrv" "viaStr") [] viaStr) + ) + (fold viaStr v + (seq + (call %init_peer_id% ("cid" "id") [v] $str) + (next v) + ) + ) + ) + (call -relay- ("op" "identity") []) + ) + (fold $str -via-peer- + (seq + (call -via-peer- ("op" "identity") []) + (next -via-peer-) + ) + ) + ) + (xor + (call node_id ("peer" "identify") [] p) + (seq + (seq + (seq + (fold $str -via-peer- + (seq + (call -via-peer- ("op" "identity") []) + (next -via-peer-) + ) + ) + (call -relay- ("op" "identity") []) + ) + (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 1]) + ) + (call -relay- ("op" "identity") []) + ) + ) + ) + (fold $str -via-peer- + (seq + (call -via-peer- ("op" "identity") []) + (next -via-peer-) + ) + ) + ) + (call -relay- ("op" "identity") []) + ) + (xor + (call %init_peer_id% ("callbackSrv" "response") [p]) + (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2]) + ) + ) + (seq + (call -relay- ("op" "identity") []) + (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3]) + ) +) + + `, + ) + .configHandler((h) => { + h.on('getDataSrv', '-relay-', () => { + return client.relayPeerId!; + }); + h.on('getDataSrv', 'node_id', () => {return node_id;}); +h.on('getDataSrv', 'viaStr', () => {return viaStr;}); + h.onEvent('callbackSrv', 'response', (args) => { + const [res] = args; + resolve(res); +}); + + h.onEvent('errorHandlingSrv', 'error', (args) => { + // assuming error is the single argument + const [err] = args; + reject(err); + }); + }) + .handleScriptError(reject) + .handleTimeout(() => { + reject('Request timed out for viaStream'); + }) + .build(); + }); + await client.initiateFlow(request!); + return promise; +} + + + +export async function viaOpt(client: FluenceClient, relay: string, node_id: string, viaOpt: string | null): Promise<{external_addresses:string[]}> { + let request: RequestFlow; + const promise = new Promise<{external_addresses:string[]}>((resolve, reject) => { + request = new RequestFlowBuilder() + .disableInjections() + .withRawScript( + ` +(xor + (seq + (seq + (seq + (seq + (seq + (seq + (seq + (seq + (seq + (call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-) + (call %init_peer_id% ("getDataSrv" "relay") [] relay) + ) + (call %init_peer_id% ("getDataSrv" "node_id") [] node_id) + ) + (call %init_peer_id% ("getDataSrv" "viaOpt") [] viaOpt) + ) + (call -relay- ("op" "identity") []) + ) + (fold viaOpt -via-peer- + (seq + (call -via-peer- ("op" "identity") []) + (next -via-peer-) + ) + ) + ) + (xor + (call node_id ("peer" "identify") [] p) + (seq + (seq + (seq + (fold viaOpt -via-peer- + (seq + (call -via-peer- ("op" "identity") []) + (next -via-peer-) + ) + ) + (call -relay- ("op" "identity") []) + ) + (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 1]) + ) + (call -relay- ("op" "identity") []) + ) + ) + ) + (fold viaOpt -via-peer- + (seq + (call -via-peer- ("op" "identity") []) + (next -via-peer-) + ) + ) + ) + (call -relay- ("op" "identity") []) + ) + (xor + (call %init_peer_id% ("callbackSrv" "response") [p]) + (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2]) + ) + ) + (seq + (call -relay- ("op" "identity") []) + (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3]) + ) +) + + `, + ) + .configHandler((h) => { + h.on('getDataSrv', '-relay-', () => { + return client.relayPeerId!; + }); + h.on('getDataSrv', 'relay', () => {return relay;}); +h.on('getDataSrv', 'node_id', () => {return node_id;}); +h.on('getDataSrv', 'viaOpt', () => {return viaOpt === null ? [] : [viaOpt];}); + h.onEvent('callbackSrv', 'response', (args) => { + const [res] = args; + resolve(res); +}); + + h.onEvent('errorHandlingSrv', 'error', (args) => { + // assuming error is the single argument + const [err] = args; + reject(err); + }); + }) + .handleScriptError(reject) + .handleTimeout(() => { + reject('Request timed out for viaOpt'); + }) + .build(); + }); + await client.initiateFlow(request!); + return promise; +} + \ No newline at end of file diff --git a/src/examples/viaCall.ts b/src/examples/viaCall.ts new file mode 100644 index 0000000..1cae79b --- /dev/null +++ b/src/examples/viaCall.ts @@ -0,0 +1,17 @@ +import {FluenceClient, registerServiceFunction} from "@fluencelabs/fluence"; +import {krasnodar} from "@fluencelabs/fluence-network-environment"; +import {viaArr, viaOpt, viaStream} from "../compiled/examples/via"; + +export async function viaCall(client: FluenceClient): Promise { + + registerServiceFunction(client, "cid", "id", (args: any[], _) => { + return args[0] + }) + + let res = await viaArr(client, krasnodar[3].peerId, [krasnodar[2].peerId, krasnodar[1].peerId]) + let res2 = await viaOpt(client, client.relayPeerId!, krasnodar[3].peerId, krasnodar[2].peerId) + let res3 = await viaOpt(client, client.relayPeerId!, krasnodar[3].peerId, krasnodar[2].peerId || null) + let res4 = await viaStream(client, krasnodar[3].peerId, [krasnodar[2].peerId, krasnodar[1].peerId]) + + return [res.external_addresses, res2.external_addresses, res3.external_addresses, res4.external_addresses] +} diff --git a/src/index.ts b/src/index.ts index fcf562a..1b1d92c 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,12 +1,12 @@ #!/usr/bin/env node import {createClient, registerServiceFunction} from "@fluencelabs/fluence"; -import {testNet} from "@fluencelabs/fluence-network-environment"; +import {krasnodar} from "@fluencelabs/fluence-network-environment"; import {helloWorld} from "./compiled/examples/helloWorld"; const main = async () => { // each compiled aqua function require a connected client - const client = await createClient(testNet[0]); + const client = await createClient(krasnodar[0]); // example to how register a local service // it could be used in aqua code as follows diff --git a/src/run-examples.ts b/src/run-examples.ts index c8870b0..1fa7b99 100644 --- a/src/run-examples.ts +++ b/src/run-examples.ts @@ -16,6 +16,7 @@ import {streamCall} from "./examples/streamCall"; import {topologyCall} from "./examples/topologyCall"; import {foldJoinCall} from "./examples/foldJoinCall"; import {useOptionalCall} from "./examples/useOptionalCall"; +import {viaCall} from "./examples/viaCall"; let deepEqual = require('deep-equal') function checkCall(name: string, expected: any, actual: any, callBackOnError: () => void) { @@ -96,6 +97,9 @@ const main = async () => { // option.aqua let optionResult = await useOptionalCall(client) + // via.aqua + let viaResult = await viaCall(client) + await client.disconnect(); let success = true; @@ -129,6 +133,8 @@ const main = async () => { checkCall("useOptional", optionResult, "hello", cb) + checkCallBy("via", viaResult, (res) => res.every( (val, i, arr) => deepEqual(val, arr[0]) ), cb) + if (success) { process.exit(0) } else {