multireturn test

This commit is contained in:
DieMyst
2021-08-10 23:31:19 +03:00
parent 02fe057852
commit 36bbdc129f
6 changed files with 88 additions and 12 deletions

View File

@ -1,11 +1,20 @@
service GetStr("multiret-test"): service GetStr("multiret-test"):
retStr: string -> string retStr: string -> string
service GetNum("multiret-num"):
retNum: -> u8
const someNum = 5 const someNum = 5
const someStr = "some-str" const someStr = "some-str"
func multiReturnFunc(somethingToReturn: []u8, smthOption: ?string) -> []string, u8, u8, string, []u8, ?string : func tupleFunc() -> string, u8:
str <- GetStr.retStr(someStr)
n <- GetNum.retNum()
<- str, n
func multiReturnFunc(somethingToReturn: []u8, smthOption: ?string) -> []string, u8, string, []u8, ?string, u8 :
res: *string res: *string
res <- GetStr.retStr(someStr) res <- GetStr.retStr(someStr)
res <- GetStr.retStr("random-str") res <- GetStr.retStr("random-str")
<- res, 5, someNum, someStr, somethingToReturn, smthOption res, tNum <- tupleFunc()
<- res, 5, someStr, somethingToReturn, smthOption, tNum

6
package-lock.json generated
View File

@ -5,9 +5,9 @@
"requires": true, "requires": true,
"dependencies": { "dependencies": {
"@fluencelabs/aqua-cli": { "@fluencelabs/aqua-cli": {
"version": "0.1.10-188", "version": "0.1.13-196",
"resolved": "https://registry.npmjs.org/@fluencelabs/aqua-cli/-/aqua-cli-0.1.10-188.tgz", "resolved": "https://registry.npmjs.org/@fluencelabs/aqua-cli/-/aqua-cli-0.1.13-196.tgz",
"integrity": "sha512-3StvE+xevgQVsGwHGpSY+OuXx86N89MxUpguvZfwufRuSLIO++aMmUGUC14GFc7LQelcP86h6pFZ5o7pNYEIVw==", "integrity": "sha512-ofBALzaUlbFH5k9FyGsslT/H+uN+l9NFxf/dg4N1/iKN6ZND+hT1jtMn7ybkTXe1vCS3DNMLqkfJBaK5f5M3Xw==",
"dev": true "dev": true
}, },
"@fluencelabs/aqua-dht": { "@fluencelabs/aqua-dht": {

View File

@ -25,7 +25,7 @@
"compile-aqua:air": "aqua-cli -i ./aqua/ -o ./compiled-air -a" "compile-aqua:air": "aqua-cli -i ./aqua/ -o ./compiled-air -a"
}, },
"devDependencies": { "devDependencies": {
"@fluencelabs/aqua-cli": "^0.1.10-188", "@fluencelabs/aqua-cli": "^0.1.13-196",
"@fluencelabs/aqua-lib": "^0.1.9", "@fluencelabs/aqua-lib": "^0.1.9",
"@fluencelabs/aqua-dht": "^0.1.35", "@fluencelabs/aqua-dht": "^0.1.35",
"ts-node": "^9.1.1", "ts-node": "^9.1.1",

View File

@ -0,0 +1,63 @@
/**
*
* 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.13-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 tupleFunc(client: FluenceClient, config?: {ttl?: number}): Promise<string> {
let request: RequestFlow;
const promise = new Promise<string>((resolve, reject) => {
const r = new RequestFlowBuilder()
.disableInjections()
.withRawScript(
`
(xor
(seq
(call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-)
(xor
(call %init_peer_id% ("callbackSrv" "response") ["str"])
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 1])
)
)
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
)
`,
)
.configHandler((h) => {
h.on('getDataSrv', '-relay-', () => {
return client.relayPeerId!;
});
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 tupleFunc');
})
if(config && config.ttl) {
r.withTTL(config.ttl)
}
request = r.build();
});
await client.initiateFlow(request!);
return promise;
}

View File

@ -1,10 +1,14 @@
import {FluenceClient, registerServiceFunction} from "@fluencelabs/fluence"; import {FluenceClient, registerServiceFunction} from "@fluencelabs/fluence";
import {multiReturnFunc} from "../compiled/examples/multiReturn"; import {multiReturnFunc} from "../compiled/examples/multiReturn";
export async function multiReturnCall(client: FluenceClient): Promise<[string[], number, number, string, number[], string | null]> { export async function multiReturnCall(client: FluenceClient): Promise<[string[], number, string, number[], string | null, number]> {
registerServiceFunction(client, "multiret-test", "retStr", (args: any[], _) => { registerServiceFunction(client, "multiret-test", "retStr", (args: any[], _) => {
return args[0] return args[0]
}) })
registerServiceFunction(client, "multiret-num", "retNum", (args: any[], _) => {
return 10
})
return await multiReturnFunc(client, [1, 2], null) return await multiReturnFunc(client, [1, 2], null)
} }

View File

@ -30,13 +30,13 @@ import {literalCall} from "./examples/returnLiteralCall";
import {multiReturnCall} from "./examples/multiReturnCall"; import {multiReturnCall} from "./examples/multiReturnCall";
let deepEqual = require('deep-equal') let deepEqual = require('deep-equal')
function checkCall(name: string, expected: any, actual: any, callBackOnError: () => void) { function checkCall(name: string, actual: any, expected: any, callBackOnError: () => void) {
if (!deepEqual(actual, expected)) { if (!deepEqual(expected, actual)) {
console.error(`${name} call has the wrong result`) console.error(`${name} call has the wrong result`)
console.error("expected: ")
console.dir(expected)
console.error("actual: ") console.error("actual: ")
console.dir(actual) console.dir(actual)
console.error("expected: ")
console.dir(expected)
callBackOnError() callBackOnError()
} }
} }
@ -201,7 +201,7 @@ const main = async () => {
checkCall("literalCall", literalCallResult, "some literal", cb) checkCall("literalCall", literalCallResult, "some literal", cb)
checkCall("multiReturnResult", multiReturnResult, [ [ 'some-str', 'random-str' ], 5, 5, 'some-str', [ 1, 2 ], null], cb) checkCall("multiReturnResult", multiReturnResult, [ [ 'some-str', 'random-str', 'some-str' ], 5, 'some-str', [ 1, 2 ], null, 10], cb)
checkCallBy("tryCatchCall", tryCatchResult, (res) => { checkCallBy("tryCatchCall", tryCatchResult, (res) => {
return (res[0] as string).includes("Error: Service with id 'unex' not found") && res[1] === '/ip4/164.90.171.139/tcp/7770' return (res[0] as string).includes("Error: Service with id 'unex' not found") && res[1] === '/ip4/164.90.171.139/tcp/7770'