mirror of
https://github.com/fluencelabs/registry.git
synced 2025-04-25 10:12:13 +00:00
feat(aqua): add tests (#127)
This commit is contained in:
parent
f179336869
commit
9ca1f0498c
146
.github/e2e/docker-compose.yml
vendored
Normal file
146
.github/e2e/docker-compose.yml
vendored
Normal file
@ -0,0 +1,146 @@
|
|||||||
|
networks:
|
||||||
|
fluence:
|
||||||
|
driver: bridge
|
||||||
|
ipam:
|
||||||
|
config:
|
||||||
|
- subnet: 10.50.10.0/24
|
||||||
|
|
||||||
|
services:
|
||||||
|
fluence-1:
|
||||||
|
image: ${RUST_PEER_IMAGE}
|
||||||
|
ports:
|
||||||
|
- 7771:7771
|
||||||
|
- 9991:9991
|
||||||
|
command:
|
||||||
|
- --aqua-pool-size=2
|
||||||
|
- -t=7771
|
||||||
|
- -w=9991
|
||||||
|
- -x=10.50.10.10
|
||||||
|
- --external-maddrs
|
||||||
|
- /dns4/fluence-1/tcp/7771
|
||||||
|
- /dns4/fluence-1/tcp/9991/ws
|
||||||
|
- --allow-private-ips
|
||||||
|
- --local
|
||||||
|
# - --bootstraps=/dns/fluence-1/tcp/7771
|
||||||
|
# 12D3KooWBM3SdXWqGaawQDGQ6JprtwswEg3FWGvGhmgmMez1vRbR
|
||||||
|
- -k=hK62afickoeP2uZbmSkAYXxxqP8ozq16VRN7qfTP719EHC5V5tjrtW57BSjUr8GvsEXmJRbtejUWyPZ2rZMyQdq
|
||||||
|
volumes:
|
||||||
|
- ./registry:/.fluence/v1/builtins/registry
|
||||||
|
networks:
|
||||||
|
fluence:
|
||||||
|
ipv4_address: 10.50.10.10
|
||||||
|
|
||||||
|
fluence-2:
|
||||||
|
image: ${RUST_PEER_IMAGE}
|
||||||
|
ports:
|
||||||
|
- 7772:7772
|
||||||
|
- 9992:9992
|
||||||
|
command:
|
||||||
|
- --aqua-pool-size=2
|
||||||
|
- -t=7772
|
||||||
|
- -w=9992
|
||||||
|
- -x=10.50.10.20
|
||||||
|
- --external-maddrs
|
||||||
|
- /dns4/fluence-2/tcp/7772
|
||||||
|
- /dns4/fluence-2/tcp/9992/ws
|
||||||
|
- --allow-private-ips
|
||||||
|
- --bootstraps=/dns/fluence-1/tcp/7771
|
||||||
|
# 12D3KooWQdpukY3p2DhDfUfDgphAqsGu5ZUrmQ4mcHSGrRag6gQK
|
||||||
|
- -k=2WijTVdhVRzyZamWjqPx4V4iNMrajegNMwNa2PmvPSZV6RRpo5M2fsPWdQr22HVRubuJhhSw8BrWiGt6FPhFAuXy
|
||||||
|
volumes:
|
||||||
|
- ./registry:/.fluence/v1/builtins/registry
|
||||||
|
networks:
|
||||||
|
fluence:
|
||||||
|
ipv4_address: 10.50.10.20
|
||||||
|
|
||||||
|
fluence-3:
|
||||||
|
image: ${RUST_PEER_IMAGE}
|
||||||
|
ports:
|
||||||
|
- 7773:7773
|
||||||
|
- 9993:9993
|
||||||
|
command:
|
||||||
|
- --aqua-pool-size=2
|
||||||
|
- -t=7773
|
||||||
|
- -w=9993
|
||||||
|
- -x=10.50.10.30
|
||||||
|
- --external-maddrs
|
||||||
|
- /dns4/fluence-3/tcp/7773
|
||||||
|
- /dns4/fluence-3/tcp/9993/ws
|
||||||
|
- --allow-private-ips
|
||||||
|
- --bootstraps=/dns/fluence-1/tcp/7771
|
||||||
|
# 12D3KooWRT8V5awYdEZm6aAV9HWweCEbhWd7df4wehqHZXAB7yMZ
|
||||||
|
- -k=2n2wBVanBeu2GWtvKBdrYK9DJAocgG3PrTUXMharq6TTfxqTL4sLdXL9BF23n6rsnkAY5pR9vBtx2uWYDQAiZdrX
|
||||||
|
volumes:
|
||||||
|
- ./registry:/.fluence/v1/builtins/registry
|
||||||
|
networks:
|
||||||
|
fluence:
|
||||||
|
ipv4_address: 10.50.10.30
|
||||||
|
|
||||||
|
fluence-4:
|
||||||
|
image: ${RUST_PEER_IMAGE}
|
||||||
|
ports:
|
||||||
|
- 7774:7774
|
||||||
|
- 9994:9994
|
||||||
|
command:
|
||||||
|
- --aqua-pool-size=2
|
||||||
|
- -t=7774
|
||||||
|
- -w=9994
|
||||||
|
- -x=10.50.10.40
|
||||||
|
- --external-maddrs
|
||||||
|
- /dns4/fluence-4/tcp/7774
|
||||||
|
- /dns4/fluence-4/tcp/9994/ws
|
||||||
|
- --allow-private-ips
|
||||||
|
- --bootstraps=/dns/fluence-1/tcp/7771
|
||||||
|
# 12D3KooWBzLSu9RL7wLP6oUowzCbkCj2AGBSXkHSJKuq4wwTfwof
|
||||||
|
- -k=4zp8ucAikkjB8CmkufYiFBW4QCDUCbQG7yMjviX7W8bMyN5rfChQ2Pi5QCWThrCTbAm9uq5nbFbxtFcNZq3De4dX
|
||||||
|
volumes:
|
||||||
|
- ./registry:/.fluence/v1/builtins/registry
|
||||||
|
networks:
|
||||||
|
fluence:
|
||||||
|
ipv4_address: 10.50.10.40
|
||||||
|
|
||||||
|
fluence-5:
|
||||||
|
image: ${RUST_PEER_IMAGE}
|
||||||
|
ports:
|
||||||
|
- 7775:7775
|
||||||
|
- 9995:9995
|
||||||
|
command:
|
||||||
|
- --aqua-pool-size=2
|
||||||
|
- -t=7775
|
||||||
|
- -w=9995
|
||||||
|
- -x=10.50.10.50
|
||||||
|
- --external-maddrs
|
||||||
|
- /dns4/fluence-5/tcp/7775
|
||||||
|
- /dns4/fluence-5/tcp/9995/ws
|
||||||
|
- --allow-private-ips
|
||||||
|
- --bootstraps=/dns/fluence-1/tcp/7771
|
||||||
|
# 12D3KooWBf6hFgrnXwHkBnwPGMysP3b1NJe5HGtAWPYfwmQ2MBiU
|
||||||
|
- -k=3ry26rm5gkJXvdqRH4FoM3ezWq4xVVsBQF7wtKq4E4pbuaa6p1F84tNqifUS7DdfJL9hs2gcdW64Wc342vHZHMUp
|
||||||
|
volumes:
|
||||||
|
- ./registry:/.fluence/v1/builtins/registry
|
||||||
|
networks:
|
||||||
|
fluence:
|
||||||
|
ipv4_address: 10.50.10.50
|
||||||
|
|
||||||
|
fluence-6:
|
||||||
|
image: ${RUST_PEER_IMAGE}
|
||||||
|
ports:
|
||||||
|
- 7776:7776
|
||||||
|
- 9996:9996
|
||||||
|
command:
|
||||||
|
- --aqua-pool-size=2
|
||||||
|
- -t=7776
|
||||||
|
- -w=9996
|
||||||
|
- --bootstraps=/dns/fluence-1/tcp/7771
|
||||||
|
- -x=10.50.10.60
|
||||||
|
- --external-maddrs
|
||||||
|
- /dns4/fluence-6/tcp/7776
|
||||||
|
- /dns4/fluence-6/tcp/9996/ws
|
||||||
|
- --allow-private-ips
|
||||||
|
# 12D3KooWPisGn7JhooWhggndz25WM7vQ2JmA121EV8jUDQ5xMovJ
|
||||||
|
- -k=5Qh8bB1sF28uLPwr3HTvEksCeC6mAWQvebCfcgv9y6j4qKwSzNKm2tzLUg4nACUEo2KZpBw11gNCnwaAdM7o1pEn
|
||||||
|
volumes:
|
||||||
|
- ./registry:/.fluence/v1/builtins/registry
|
||||||
|
networks:
|
||||||
|
fluence:
|
||||||
|
ipv4_address: 10.50.10.60
|
58
.github/workflows/registry.yml
vendored
58
.github/workflows/registry.yml
vendored
@ -1,58 +0,0 @@
|
|||||||
name: registry
|
|
||||||
|
|
||||||
on:
|
|
||||||
pull_request:
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- "master"
|
|
||||||
|
|
||||||
env:
|
|
||||||
RUST_BACKTRACE: 1
|
|
||||||
CARGO_TERM_COLOR: always
|
|
||||||
|
|
||||||
concurrency:
|
|
||||||
group: "${{ github.workflow }}-${{ github.ref }}"
|
|
||||||
cancel-in-progress: true
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
nextest:
|
|
||||||
name: "cargo nextest"
|
|
||||||
runs-on: builder
|
|
||||||
|
|
||||||
defaults:
|
|
||||||
run:
|
|
||||||
working-directory: service
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v3
|
|
||||||
|
|
||||||
- uses: actions-rs/toolchain@v1
|
|
||||||
with:
|
|
||||||
toolchain: nightly
|
|
||||||
target: wasm32-wasi
|
|
||||||
default: true
|
|
||||||
components: rustfmt, clippy
|
|
||||||
|
|
||||||
- name: "Cache rust"
|
|
||||||
uses: Swatinem/rust-cache@v1
|
|
||||||
|
|
||||||
- name: "Install marine"
|
|
||||||
uses: baptiste0928/cargo-install@v1
|
|
||||||
with:
|
|
||||||
crate: marine
|
|
||||||
|
|
||||||
- name: "Build service"
|
|
||||||
run: ./build.sh
|
|
||||||
|
|
||||||
- name: "cargo fmt"
|
|
||||||
run: cargo fmt --all -- --check
|
|
||||||
|
|
||||||
- name: "cargo clippy"
|
|
||||||
run: cargo clippy -Z unstable-options --all
|
|
||||||
|
|
||||||
- name: "Install nextest"
|
|
||||||
run: cargo install --locked cargo-nextest --version 0.9.22
|
|
||||||
|
|
||||||
- name: "cargo nextest"
|
|
||||||
run: cargo nextest run --release --all-features --no-fail-fast --test-threads=1 --
|
|
||||||
|
|
62
.github/workflows/run-tests.yml
vendored
Normal file
62
.github/workflows/run-tests.yml
vendored
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
name: Run tests
|
||||||
|
|
||||||
|
on:
|
||||||
|
pull_request:
|
||||||
|
paths-ignore:
|
||||||
|
- "**.md"
|
||||||
|
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- "main"
|
||||||
|
|
||||||
|
concurrency:
|
||||||
|
group: "${{ github.workflow }}-${{ github.ref }}"
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
aqua:
|
||||||
|
uses: ./.github/workflows/tests.yml
|
||||||
|
with:
|
||||||
|
ref: ${{ github.ref }}
|
||||||
|
|
||||||
|
cargo:
|
||||||
|
name: "Run cargo tests"
|
||||||
|
runs-on: builder
|
||||||
|
|
||||||
|
defaults:
|
||||||
|
run:
|
||||||
|
working-directory: service
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
|
||||||
|
- name: Setup rust toolchain
|
||||||
|
uses: actions-rust-lang/setup-rust-toolchain@v1
|
||||||
|
|
||||||
|
- name: Install marine
|
||||||
|
uses: baptiste0928/cargo-install@v1
|
||||||
|
with:
|
||||||
|
crate: marine
|
||||||
|
|
||||||
|
- name: Build service
|
||||||
|
run: ./build.sh
|
||||||
|
|
||||||
|
- name: Run cargo fmt
|
||||||
|
run: cargo fmt --all -- --check
|
||||||
|
|
||||||
|
- name: Run cargo clippy
|
||||||
|
env:
|
||||||
|
RUSTFLAGS: ""
|
||||||
|
run: cargo clippy -Z unstable-options --all
|
||||||
|
|
||||||
|
- name: Install cargo-nextest
|
||||||
|
uses: baptiste0928/cargo-install@v1
|
||||||
|
with:
|
||||||
|
crate: cargo-nextest
|
||||||
|
|
||||||
|
- name: Run cargo nextest
|
||||||
|
env:
|
||||||
|
RUSTFLAGS: ""
|
||||||
|
NEXTEST_RETRIES: 2
|
||||||
|
NEXTEST_TEST_THREADS: 1
|
||||||
|
run: cargo nextest run --release --all-features --no-fail-fast
|
143
.github/workflows/tests.yml
vendored
Normal file
143
.github/workflows/tests.yml
vendored
Normal file
@ -0,0 +1,143 @@
|
|||||||
|
name: Run tests with workflow_call
|
||||||
|
|
||||||
|
on:
|
||||||
|
workflow_call:
|
||||||
|
inputs:
|
||||||
|
fluence-env:
|
||||||
|
description: "Fluence enviroment to run tests agains"
|
||||||
|
type: string
|
||||||
|
default: "local"
|
||||||
|
rust-peer-image:
|
||||||
|
description: "rust-peer image tag"
|
||||||
|
type: string
|
||||||
|
default: "fluencelabs/fluence:minimal"
|
||||||
|
aqua-version:
|
||||||
|
description: "@fluencejs/aqua version"
|
||||||
|
type: string
|
||||||
|
ref:
|
||||||
|
description: "GitHub ref to checkout to"
|
||||||
|
type: string
|
||||||
|
default: "main"
|
||||||
|
|
||||||
|
env:
|
||||||
|
FORCE_COLOR: true
|
||||||
|
RUST_PEER_IMAGE: "${{ inputs.rust-peer-image }}"
|
||||||
|
FLUENCE_ENV: "${{ inputs.fluence-env }}"
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
aqua:
|
||||||
|
name: "Run aqua tests"
|
||||||
|
runs-on: builder
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
id-token: write
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Import secrets
|
||||||
|
uses: hashicorp/vault-action@v2.4.1
|
||||||
|
with:
|
||||||
|
url: https://vault.fluence.dev
|
||||||
|
path: jwt/github
|
||||||
|
role: ci
|
||||||
|
method: jwt
|
||||||
|
jwtGithubAudience: "https://github.com/fluencelabs"
|
||||||
|
jwtTtl: 300
|
||||||
|
secrets: |
|
||||||
|
kv/docker-registry/basicauth/ci username | DOCKER_USERNAME ;
|
||||||
|
kv/docker-registry/basicauth/ci password | DOCKER_PASSWORD ;
|
||||||
|
kv/npm-registry/basicauth/ci token | NODE_AUTH_TOKEN;
|
||||||
|
|
||||||
|
- name: Checkout registry
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
with:
|
||||||
|
repository: fluencelabs/registry
|
||||||
|
ref: ${{ inputs.ref }}
|
||||||
|
|
||||||
|
- name: Setup node with self-hosted registry
|
||||||
|
uses: actions/setup-node@v3
|
||||||
|
with:
|
||||||
|
node-version: "16"
|
||||||
|
registry-url: "https://npm.fluence.dev"
|
||||||
|
cache: "npm"
|
||||||
|
cache-dependency-path: "**/package-lock.json"
|
||||||
|
|
||||||
|
- name: Run npm install in aqua
|
||||||
|
run: npm install
|
||||||
|
working-directory: aqua
|
||||||
|
|
||||||
|
- name: Set aqua version from branch
|
||||||
|
if: inputs.aqua-version != ''
|
||||||
|
run: npm i --save-dev @fluencelabs/aqua@${{ inputs.aqua-version }}
|
||||||
|
working-directory: aqua
|
||||||
|
|
||||||
|
- name: Run npm install in aqua-tests
|
||||||
|
run: npm install
|
||||||
|
working-directory: aqua-tests
|
||||||
|
|
||||||
|
- name: Set aqua version from branch
|
||||||
|
if: inputs.aqua-version != ''
|
||||||
|
run: npm i --save-dev @fluencelabs/aqua@${{ inputs.aqua-version }}
|
||||||
|
working-directory: aqua-tests
|
||||||
|
|
||||||
|
- name: Setup rust toolchain
|
||||||
|
uses: actions-rust-lang/setup-rust-toolchain@v1
|
||||||
|
|
||||||
|
- name: Install marine
|
||||||
|
uses: baptiste0928/cargo-install@v1
|
||||||
|
with:
|
||||||
|
crate: marine
|
||||||
|
|
||||||
|
- name: Build service
|
||||||
|
run: ./build.sh
|
||||||
|
working-directory: service
|
||||||
|
|
||||||
|
- name: Create builtin distribution package
|
||||||
|
run: ./builtin-package/package.sh
|
||||||
|
|
||||||
|
- name: Unpack registry package
|
||||||
|
run: tar xvf registry.tar.gz
|
||||||
|
|
||||||
|
- name: Login to DockerHub
|
||||||
|
uses: docker/login-action@v2
|
||||||
|
with:
|
||||||
|
registry: docker.fluence.dev
|
||||||
|
username: ${{ env.DOCKER_USERNAME }}
|
||||||
|
password: ${{ env.DOCKER_PASSWORD }}
|
||||||
|
|
||||||
|
- name: Pull rust-peer image
|
||||||
|
run: docker pull $RUST_PEER_IMAGE
|
||||||
|
|
||||||
|
- name: Setup docker-compose
|
||||||
|
uses: KengoTODA/actions-setup-docker-compose@v1.0.9
|
||||||
|
with:
|
||||||
|
version: 'v2.10.0'
|
||||||
|
|
||||||
|
- name: Run rust-peer
|
||||||
|
uses: isbang/compose-action@v1.1.0
|
||||||
|
with:
|
||||||
|
compose-file: ".github/e2e/docker-compose.yml"
|
||||||
|
down-flags: "--volumes"
|
||||||
|
|
||||||
|
- name: Setup python
|
||||||
|
uses: actions/setup-python@v4
|
||||||
|
with:
|
||||||
|
python-version: "3.9"
|
||||||
|
cache: "pip"
|
||||||
|
cache-dependency-path: aqua-tests/requirements.txt
|
||||||
|
|
||||||
|
- name: Install python requirements
|
||||||
|
run: pip install -r requirements.txt
|
||||||
|
working-directory: aqua-tests
|
||||||
|
|
||||||
|
# TODO run an aqua script in a loop to check
|
||||||
|
- name: Wait for registry to be deployed
|
||||||
|
run: sleep 40
|
||||||
|
|
||||||
|
- name: Run aqua tests
|
||||||
|
run: pytest -n auto
|
||||||
|
working-directory: aqua-tests
|
||||||
|
|
||||||
|
- name: Dump rust-peer logs on failure
|
||||||
|
if: failure()
|
||||||
|
uses: jwalton/gh-docker-logs@v1
|
2
.gitignore
vendored
2
.gitignore
vendored
@ -13,3 +13,5 @@ registry.tar.gz
|
|||||||
# Remove after https://github.com/fluencelabs/aqua/issues/287
|
# Remove after https://github.com/fluencelabs/aqua/issues/287
|
||||||
aqua/target/typescript/**
|
aqua/target/typescript/**
|
||||||
example/src/generated/**
|
example/src/generated/**
|
||||||
|
|
||||||
|
**/__pycache__
|
||||||
|
7
aqua-tests/README.md
Normal file
7
aqua-tests/README.md
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
# Registry API tests
|
||||||
|
|
||||||
|
## How to run
|
||||||
|
|
||||||
|
- `npm i`
|
||||||
|
- `pip3 install -r requirements.txt`
|
||||||
|
- `pytest -n auto`
|
8
aqua-tests/aqua/test.aqua
Normal file
8
aqua-tests/aqua/test.aqua
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
module Test
|
||||||
|
|
||||||
|
import "@fluencelabs/aqua-lib/builtin.aqua"
|
||||||
|
import "@fluencelabs/registry/resources-api.aqua"
|
||||||
|
export getResource, createResource, getResourceId, get_peer_id, registerServiceRecord, resolveResource, unregisterService
|
||||||
|
|
||||||
|
func get_peer_id() -> PeerId:
|
||||||
|
<- INIT_PEER_ID
|
10
aqua-tests/config.py
Normal file
10
aqua-tests/config.py
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
|
||||||
|
def get_local():
|
||||||
|
return [
|
||||||
|
'/ip4/127.0.0.1/tcp/9991/ws/p2p/12D3KooWBM3SdXWqGaawQDGQ6JprtwswEg3FWGvGhmgmMez1vRbR',
|
||||||
|
'/ip4/127.0.0.1/tcp/9992/ws/p2p/12D3KooWQdpukY3p2DhDfUfDgphAqsGu5ZUrmQ4mcHSGrRag6gQK',
|
||||||
|
'/ip4/127.0.0.1/tcp/9993/ws/p2p/12D3KooWRT8V5awYdEZm6aAV9HWweCEbhWd7df4wehqHZXAB7yMZ',
|
||||||
|
'/ip4/127.0.0.1/tcp/9994/ws/p2p/12D3KooWBzLSu9RL7wLP6oUowzCbkCj2AGBSXkHSJKuq4wwTfwof',
|
||||||
|
'/ip4/127.0.0.1/tcp/9995/ws/p2p/12D3KooWBf6hFgrnXwHkBnwPGMysP3b1NJe5HGtAWPYfwmQ2MBiU',
|
||||||
|
'/ip4/127.0.0.1/tcp/9996/ws/p2p/12D3KooWPisGn7JhooWhggndz25WM7vQ2JmA121EV8jUDQ5xMovJ'
|
||||||
|
]
|
14441
aqua-tests/package-lock.json
generated
Normal file
14441
aqua-tests/package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load Diff
34
aqua-tests/package.json
Normal file
34
aqua-tests/package.json
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
{
|
||||||
|
"name": "aqua-tests",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"description": "Aqua Registry library",
|
||||||
|
|
||||||
|
"dependencies": {
|
||||||
|
"@fluencelabs/aqua-lib": "^0.5.1",
|
||||||
|
"@fluencelabs/trust-graph": "^3.0.1",
|
||||||
|
"@fluencelabs/registry": "file:../aqua"
|
||||||
|
},
|
||||||
|
"scripts": {
|
||||||
|
"compile-aqua": "aqua -i . -o ./target/typescript",
|
||||||
|
"generate-aqua": "../service/build.sh",
|
||||||
|
"build": "npm run compile-aqua"
|
||||||
|
},
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "git+https://github.com/fluencelabs/registry.git",
|
||||||
|
"directory": "aqua"
|
||||||
|
},
|
||||||
|
"keywords": [
|
||||||
|
"aqua",
|
||||||
|
"fluence"
|
||||||
|
],
|
||||||
|
"author": "Fluence Labs",
|
||||||
|
"license": "MIT",
|
||||||
|
"bugs": {
|
||||||
|
"url": "https://github.com/fluencelabs/registry/issues"
|
||||||
|
},
|
||||||
|
"homepage": "https://github.com/fluencelabs/registry",
|
||||||
|
"devDependencies": {
|
||||||
|
"@fluencelabs/aqua": "0.7.6-344"
|
||||||
|
}
|
||||||
|
}
|
4
aqua-tests/requirements.txt
Normal file
4
aqua-tests/requirements.txt
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
delegator.py==0.1.1
|
||||||
|
pytest==7.1.3
|
||||||
|
pytest-xdist==2.5.0
|
||||||
|
ed25519==1.5
|
137
aqua-tests/test_aqua.py
Normal file
137
aqua-tests/test_aqua.py
Normal file
@ -0,0 +1,137 @@
|
|||||||
|
import delegator
|
||||||
|
import random
|
||||||
|
import json
|
||||||
|
import ed25519
|
||||||
|
import os
|
||||||
|
from config import get_local
|
||||||
|
|
||||||
|
def get_sk():
|
||||||
|
return ed25519.create_keypair()[0].to_ascii(encoding="base64").decode("utf-8")
|
||||||
|
|
||||||
|
def get_relay():
|
||||||
|
env = os.environ.get("FLUENCE_ENV")
|
||||||
|
if env == "local":
|
||||||
|
peers = get_local()
|
||||||
|
else:
|
||||||
|
if env is None:
|
||||||
|
env = "testnet"
|
||||||
|
c = delegator.run(f"npx aqua config default_peers {env}", block=True)
|
||||||
|
peers = c.out.strip().split("\n")
|
||||||
|
|
||||||
|
assert len(peers) != 0, c.err
|
||||||
|
peer = peers[random.randint(0, len(peers) - 1)]
|
||||||
|
assert len(peer) != 0, c.err
|
||||||
|
|
||||||
|
return peer
|
||||||
|
|
||||||
|
def get_random_peer_id():
|
||||||
|
addr = get_relay()
|
||||||
|
return addr.split("/")[-1]
|
||||||
|
|
||||||
|
def run_aqua(func, args, sk, relay=get_relay()):
|
||||||
|
|
||||||
|
# "a" : arg1, "b" : arg2 .....
|
||||||
|
data = {chr(97 + i): arg for (i, arg) in enumerate(args)}
|
||||||
|
call = f"{func}(" + ", ".join([chr(97 + i) for i in range(0, len(args))]) + ")"
|
||||||
|
file = "./aqua/test.aqua"
|
||||||
|
|
||||||
|
command = f"npx aqua run --addr {relay} -f '{call}' -i {file} --sk {sk} -d '{json.dumps(data)}'"
|
||||||
|
print(command)
|
||||||
|
c = delegator.run(command, block=True)
|
||||||
|
if len(c.err) != 0:
|
||||||
|
print(c.err)
|
||||||
|
|
||||||
|
result = json.loads(c.out)
|
||||||
|
print(result)
|
||||||
|
return result
|
||||||
|
|
||||||
|
def create_resource(label, sk):
|
||||||
|
result, error = run_aqua("createResource", [label], sk)
|
||||||
|
assert len(result) == 1, error
|
||||||
|
return result[0]
|
||||||
|
|
||||||
|
def get_peer_id(sk):
|
||||||
|
return run_aqua("get_peer_id", [], sk)
|
||||||
|
|
||||||
|
def test_create_resource():
|
||||||
|
sk = get_sk()
|
||||||
|
label = "some_label"
|
||||||
|
result = create_resource(label, sk)
|
||||||
|
peer_id = get_peer_id(sk)
|
||||||
|
resource_id = run_aqua("getResourceId", [label, peer_id], sk)
|
||||||
|
assert(result == resource_id)
|
||||||
|
|
||||||
|
def test_get_resource():
|
||||||
|
sk = get_sk()
|
||||||
|
label = "some_label"
|
||||||
|
resource_id = create_resource(label, sk)
|
||||||
|
peer_id = get_peer_id(sk)
|
||||||
|
result, error = run_aqua("getResource", [resource_id], sk)
|
||||||
|
assert len(result) == 1, error
|
||||||
|
resource = result[0]
|
||||||
|
assert resource["id"] == resource_id, error
|
||||||
|
assert resource["owner_peer_id"] == peer_id, error
|
||||||
|
assert resource["label"] == label, error
|
||||||
|
|
||||||
|
def test_register_record_unregister():
|
||||||
|
sk = get_sk()
|
||||||
|
relay = get_relay()
|
||||||
|
label = "some_label"
|
||||||
|
value = "some_value"
|
||||||
|
peer_id = get_peer_id(sk)
|
||||||
|
service_id = "id"
|
||||||
|
|
||||||
|
resource_id = create_resource(label, sk)
|
||||||
|
result, error = run_aqua("registerServiceRecord", [resource_id, value, peer_id, service_id], sk, relay)
|
||||||
|
assert result, error
|
||||||
|
|
||||||
|
result, error = run_aqua("resolveResource", [resource_id, 2], sk, relay)
|
||||||
|
assert len(result) == 1, error
|
||||||
|
|
||||||
|
records = result[0]
|
||||||
|
assert len(records) == 1, "records not found"
|
||||||
|
|
||||||
|
record = records[0]
|
||||||
|
assert record["metadata"]["key_id"] == resource_id
|
||||||
|
assert record["metadata"]["issued_by"] == peer_id
|
||||||
|
assert record["metadata"]["peer_id"] == peer_id
|
||||||
|
assert record["metadata"]["service_id"] == [service_id]
|
||||||
|
|
||||||
|
result, error = run_aqua("unregisterService", [resource_id, peer_id], sk, relay)
|
||||||
|
assert result, error
|
||||||
|
|
||||||
|
result, error = run_aqua("resolveResource", [resource_id, 2], sk, relay)
|
||||||
|
assert len(result) == 1, error
|
||||||
|
assert len(result[0]) == 0
|
||||||
|
|
||||||
|
def test_register_unregister_remote_record():
|
||||||
|
sk = get_sk()
|
||||||
|
relay = get_relay()
|
||||||
|
label = "some_label"
|
||||||
|
value = "some_value"
|
||||||
|
issuer_peer_id = get_peer_id(sk)
|
||||||
|
peer_id = get_random_peer_id()
|
||||||
|
service_id = "id"
|
||||||
|
|
||||||
|
resource_id = create_resource(label, sk)
|
||||||
|
result, error = run_aqua("registerServiceRecord", [resource_id, value, peer_id, service_id], sk, relay)
|
||||||
|
assert result, error
|
||||||
|
|
||||||
|
result, error = run_aqua("resolveResource", [resource_id, 2], sk, relay)
|
||||||
|
assert len(result) == 1, error
|
||||||
|
|
||||||
|
records = result[0]
|
||||||
|
assert len(records) == 1, "records not found"
|
||||||
|
|
||||||
|
record = records[0]
|
||||||
|
assert record["metadata"]["key_id"] == resource_id
|
||||||
|
assert record["metadata"]["issued_by"] == issuer_peer_id
|
||||||
|
assert record["metadata"]["peer_id"] == peer_id
|
||||||
|
assert record["metadata"]["service_id"] == [service_id]
|
||||||
|
|
||||||
|
result, error = run_aqua("unregisterService", [resource_id, peer_id], sk, relay)
|
||||||
|
assert result, error
|
||||||
|
|
||||||
|
result, error = run_aqua("resolveResource", [resource_id, 2], sk, relay)
|
||||||
|
assert len(result) == 1, error
|
||||||
|
assert len(result[0]) == 0
|
@ -116,7 +116,7 @@ func registerServiceRecord(resource_id: ResourceId, value: string, peer_id: Peer
|
|||||||
|
|
||||||
|
|
||||||
func unregisterService(resource_id: ResourceId, peer_id: PeerId) -> bool, *Error:
|
func unregisterService(resource_id: ResourceId, peer_id: PeerId) -> bool, *Error:
|
||||||
success: *bool
|
success: ?bool
|
||||||
error: *Error
|
error: *Error
|
||||||
|
|
||||||
on HOST_PEER_ID:
|
on HOST_PEER_ID:
|
||||||
@ -126,7 +126,7 @@ func unregisterService(resource_id: ResourceId, peer_id: PeerId) -> bool, *Error
|
|||||||
error <<- sig_result.error!
|
error <<- sig_result.error!
|
||||||
success <<- false
|
success <<- false
|
||||||
else:
|
else:
|
||||||
key, error_get <- getResource(resource_id)
|
key, error_get <- getResourceHelper(resource_id)
|
||||||
if key == nil:
|
if key == nil:
|
||||||
appendErrors(error, error_get)
|
appendErrors(error, error_get)
|
||||||
success <<- false
|
success <<- false
|
||||||
@ -165,10 +165,11 @@ func unregisterService(resource_id: ResourceId, peer_id: PeerId) -> bool, *Error
|
|||||||
|
|
||||||
<- succ, error
|
<- succ, error
|
||||||
|
|
||||||
func resolveResource(resource_id: ResourceId, ack: i16) -> []Record, *Error:
|
func resolveResource(resource_id: ResourceId, ack: i16) -> ?[]Record, *Error:
|
||||||
on HOST_PEER_ID:
|
on HOST_PEER_ID:
|
||||||
nodes <- getNeighbors(resource_id)
|
nodes <- getNeighbors(resource_id)
|
||||||
res: *[]Record
|
result: ?[]Record
|
||||||
|
records: *[]Record
|
||||||
error: *Error
|
error: *Error
|
||||||
successful: *bool
|
successful: *bool
|
||||||
for n <- nodes par:
|
for n <- nodes par:
|
||||||
@ -177,7 +178,7 @@ func resolveResource(resource_id: ResourceId, ack: i16) -> []Record, *Error:
|
|||||||
t <- Peer.timestamp_sec()
|
t <- Peer.timestamp_sec()
|
||||||
get_result <- Registry.get_records(resource_id, t)
|
get_result <- Registry.get_records(resource_id, t)
|
||||||
if get_result.success:
|
if get_result.success:
|
||||||
res <<- get_result.result
|
records <<- get_result.result
|
||||||
successful <<- true
|
successful <<- true
|
||||||
else:
|
else:
|
||||||
error <<- get_result.error
|
error <<- get_result.error
|
||||||
@ -185,17 +186,25 @@ func resolveResource(resource_id: ResourceId, ack: i16) -> []Record, *Error:
|
|||||||
success <- wait(successful, ack, DEFAULT_TIMEOUT)
|
success <- wait(successful, ack, DEFAULT_TIMEOUT)
|
||||||
if success == false:
|
if success == false:
|
||||||
error <<- "timeout exceeded"
|
error <<- "timeout exceeded"
|
||||||
|
else:
|
||||||
result <- Registry.merge(res)
|
merged <- Registry.merge(records)
|
||||||
if result.success == false:
|
if merged.success == false:
|
||||||
error <<- result.error
|
error <<- merged.error
|
||||||
<- result.result, error
|
else:
|
||||||
|
result <<- merged.result
|
||||||
|
<- result, error
|
||||||
|
|
||||||
-- Execute the given call on providers
|
-- Execute the given call on providers
|
||||||
-- Note that you can provide another Aqua function as an argument to this one
|
-- Note that you can provide another Aqua function as an argument to this one
|
||||||
func executeOnProviders(resource_id: ResourceId, ack: i16, call: Record -> ()) -> *Error:
|
func executeOnResource(resource_id: ResourceId, ack: i16, call: Record -> ()) -> bool, *Error:
|
||||||
providers, error <- resolveResource(resource_id, ack)
|
success: ?bool
|
||||||
for r <- providers par:
|
result, error <- resolveResource(resource_id, ack)
|
||||||
on r.metadata.peer_id via r.metadata.relay_id:
|
|
||||||
call(r)
|
if result == nil:
|
||||||
<- error
|
success <<- false
|
||||||
|
else:
|
||||||
|
for r <- result! par:
|
||||||
|
on r.metadata.peer_id via r.metadata.relay_id:
|
||||||
|
call(r)
|
||||||
|
success <<- true
|
||||||
|
<- success!, error
|
||||||
|
@ -6,12 +6,15 @@ This example shows how to use Registry to discover and call fluence services wit
|
|||||||
|
|
||||||
## Table of contents:
|
## Table of contents:
|
||||||
|
|
||||||
1. [Set up the environment](#set-up-the-environment)
|
- [Services advertisement and discovery](#services-advertisement-and-discovery)
|
||||||
2. [Deploy echo service written in Rust](#deploy-echo-service-written-in-rust)
|
- [Overview](#overview)
|
||||||
3. [Run echo service written in JS/TS](#run-echo-service-written-in-jsts)
|
- [Table of contents:](#table-of-contents)
|
||||||
4. [Register both services in Registry](#register-both-services-using-registry)
|
- [Set up the environment](#set-up-the-environment)
|
||||||
5. [Call both services using resourceId](#call-both-services-using-resourceid)
|
- [Deploy echo service written in Rust](#deploy-echo-service-written-in-rust)
|
||||||
6. [Remove service record](#remove-service-record)
|
- [Run echo service written in JS/TS](#run-echo-service-written-in-jsts)
|
||||||
|
- [Register both services using Registry](#register-both-services-using-registry)
|
||||||
|
- [Call both services using resourceId](#call-both-services-using-resourceid)
|
||||||
|
- [Remove service record](#remove-service-record)
|
||||||
|
|
||||||
## Set up the environment
|
## Set up the environment
|
||||||
|
|
||||||
@ -98,9 +101,9 @@ It is `resourceId`, which we will use to register our services, and then we will
|
|||||||
|
|
||||||
To register the `echo` service written in Rust, replace `RESOURCE_ID` and execute
|
To register the `echo` service written in Rust, replace `RESOURCE_ID` and execute
|
||||||
```sh
|
```sh
|
||||||
fluence run -f 'registerService("RESOURCE_ID")'
|
fluence run -f 'registerServiceRecord("RESOURCE_ID")'
|
||||||
```
|
```
|
||||||
This command calls [registerService](src/aqua/main.aqua#L26) aqua function, which uses `registerServiceRecord` function from Resources API to register the rust service on this `resourceId`
|
This command calls [registerServiceRecord](src/aqua/main.aqua#L26) aqua function, which uses `registerServiceRecord` function from Resources API to register the rust service on this `resourceId`
|
||||||
|
|
||||||
You should see this output:
|
You should see this output:
|
||||||
```
|
```
|
||||||
|
@ -10,7 +10,7 @@ services:
|
|||||||
|
|
||||||
dependencies:
|
dependencies:
|
||||||
npm:
|
npm:
|
||||||
"@fluencelabs/aqua": 0.7.6-344
|
"@fluencelabs/aqua": 0.7.7-349
|
||||||
"@fluencelabs/registry": 0.6.2
|
"@fluencelabs/registry": 0.6.2
|
||||||
"@fluencelabs/aqua-lib": 0.4.3
|
"@fluencelabs/aqua-lib": 0.4.3
|
||||||
cargo:
|
cargo:
|
||||||
|
56
example/package-lock.json
generated
56
example/package-lock.json
generated
@ -8,8 +8,20 @@
|
|||||||
"name": "echo",
|
"name": "echo",
|
||||||
"version": "0.0.0",
|
"version": "0.0.0",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@fluencelabs/fluence": "^0.25.1",
|
"@fluencelabs/fluence": "^0.26.2",
|
||||||
"@fluencelabs/fluence-network-environment": "^1.0.13"
|
"@fluencelabs/fluence-network-environment": "^1.0.13",
|
||||||
|
"@fluencelabs/registry": "file:../aqua"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"../aqua": {
|
||||||
|
"version": "0.3.1",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"@fluencelabs/aqua-lib": "^0.5.1",
|
||||||
|
"@fluencelabs/trust-graph": "^3.0.1"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"@fluencelabs/aqua": "^0.7.3-318"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@ampproject/remapping": {
|
"node_modules/@ampproject/remapping": {
|
||||||
@ -645,9 +657,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@fluencelabs/avm": {
|
"node_modules/@fluencelabs/avm": {
|
||||||
"version": "0.30.5",
|
"version": "0.30.11",
|
||||||
"resolved": "https://registry.npmjs.org/@fluencelabs/avm/-/avm-0.30.5.tgz",
|
"resolved": "https://registry.npmjs.org/@fluencelabs/avm/-/avm-0.30.11.tgz",
|
||||||
"integrity": "sha512-Ea+ZX80/MjoKyLp8l+NublSW46gAqa4DXNDcYFxx30LhBSxtAGAr+ZiK0LlWKqFkj4EQtB6VuG9hRLNwgzZ1FA=="
|
"integrity": "sha512-7Uz2H0MH+22b1LpH6pFZxkgSaYRNbaTjJIGOZFF3lDK3diiwfInk9fdR/r76mOhjqicqg0qnzK+w/9g5yJ1HYg=="
|
||||||
},
|
},
|
||||||
"node_modules/@fluencelabs/connection": {
|
"node_modules/@fluencelabs/connection": {
|
||||||
"version": "0.2.0",
|
"version": "0.2.0",
|
||||||
@ -674,11 +686,11 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@fluencelabs/fluence": {
|
"node_modules/@fluencelabs/fluence": {
|
||||||
"version": "0.25.2",
|
"version": "0.26.2",
|
||||||
"resolved": "https://registry.npmjs.org/@fluencelabs/fluence/-/fluence-0.25.2.tgz",
|
"resolved": "https://registry.npmjs.org/@fluencelabs/fluence/-/fluence-0.26.2.tgz",
|
||||||
"integrity": "sha512-NTyF4Xx9IJuXpogERFlf5HCeZ55exSd46o3CoBiAEBpw73qwtYjOfUcbhYLU+FZzI2o0aIhbnYIb0fkzEOZpiQ==",
|
"integrity": "sha512-QixzyAqOE7EYVWIbaryez+T4gyEWXMF2Yk57nieAGvJfJXhcJbw2oYXL7dcHpd7JEDvKmgwpX5XWEbdsudbHmw==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@fluencelabs/avm": "0.30.5",
|
"@fluencelabs/avm": "0.30.11",
|
||||||
"@fluencelabs/connection": "0.2.0",
|
"@fluencelabs/connection": "0.2.0",
|
||||||
"@fluencelabs/interfaces": "0.1.0",
|
"@fluencelabs/interfaces": "0.1.0",
|
||||||
"@fluencelabs/keypair": "0.2.0",
|
"@fluencelabs/keypair": "0.2.0",
|
||||||
@ -764,6 +776,10 @@
|
|||||||
"ts-jest": "^27.1.4"
|
"ts-jest": "^27.1.4"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/@fluencelabs/registry": {
|
||||||
|
"resolved": "../aqua",
|
||||||
|
"link": true
|
||||||
|
},
|
||||||
"node_modules/@istanbuljs/load-nyc-config": {
|
"node_modules/@istanbuljs/load-nyc-config": {
|
||||||
"version": "1.1.0",
|
"version": "1.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz",
|
||||||
@ -7085,9 +7101,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"@fluencelabs/avm": {
|
"@fluencelabs/avm": {
|
||||||
"version": "0.30.5",
|
"version": "0.30.11",
|
||||||
"resolved": "https://registry.npmjs.org/@fluencelabs/avm/-/avm-0.30.5.tgz",
|
"resolved": "https://registry.npmjs.org/@fluencelabs/avm/-/avm-0.30.11.tgz",
|
||||||
"integrity": "sha512-Ea+ZX80/MjoKyLp8l+NublSW46gAqa4DXNDcYFxx30LhBSxtAGAr+ZiK0LlWKqFkj4EQtB6VuG9hRLNwgzZ1FA=="
|
"integrity": "sha512-7Uz2H0MH+22b1LpH6pFZxkgSaYRNbaTjJIGOZFF3lDK3diiwfInk9fdR/r76mOhjqicqg0qnzK+w/9g5yJ1HYg=="
|
||||||
},
|
},
|
||||||
"@fluencelabs/connection": {
|
"@fluencelabs/connection": {
|
||||||
"version": "0.2.0",
|
"version": "0.2.0",
|
||||||
@ -7110,11 +7126,11 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"@fluencelabs/fluence": {
|
"@fluencelabs/fluence": {
|
||||||
"version": "0.25.2",
|
"version": "0.26.2",
|
||||||
"resolved": "https://registry.npmjs.org/@fluencelabs/fluence/-/fluence-0.25.2.tgz",
|
"resolved": "https://registry.npmjs.org/@fluencelabs/fluence/-/fluence-0.26.2.tgz",
|
||||||
"integrity": "sha512-NTyF4Xx9IJuXpogERFlf5HCeZ55exSd46o3CoBiAEBpw73qwtYjOfUcbhYLU+FZzI2o0aIhbnYIb0fkzEOZpiQ==",
|
"integrity": "sha512-QixzyAqOE7EYVWIbaryez+T4gyEWXMF2Yk57nieAGvJfJXhcJbw2oYXL7dcHpd7JEDvKmgwpX5XWEbdsudbHmw==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"@fluencelabs/avm": "0.30.5",
|
"@fluencelabs/avm": "0.30.11",
|
||||||
"@fluencelabs/connection": "0.2.0",
|
"@fluencelabs/connection": "0.2.0",
|
||||||
"@fluencelabs/interfaces": "0.1.0",
|
"@fluencelabs/interfaces": "0.1.0",
|
||||||
"@fluencelabs/keypair": "0.2.0",
|
"@fluencelabs/keypair": "0.2.0",
|
||||||
@ -7184,6 +7200,14 @@
|
|||||||
"ts-jest": "^27.1.4"
|
"ts-jest": "^27.1.4"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"@fluencelabs/registry": {
|
||||||
|
"version": "file:../aqua",
|
||||||
|
"requires": {
|
||||||
|
"@fluencelabs/aqua": "^0.7.3-318",
|
||||||
|
"@fluencelabs/aqua-lib": "^0.5.1",
|
||||||
|
"@fluencelabs/trust-graph": "^3.0.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
"@istanbuljs/load-nyc-config": {
|
"@istanbuljs/load-nyc-config": {
|
||||||
"version": "1.1.0",
|
"version": "1.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz",
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
],
|
],
|
||||||
"author": "Fluence Labs",
|
"author": "Fluence Labs",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@fluencelabs/fluence": "^0.25.1",
|
"@fluencelabs/fluence": "^0.26.2",
|
||||||
"@fluencelabs/fluence-network-environment": "^1.0.13"
|
"@fluencelabs/fluence-network-environment": "^1.0.13"
|
||||||
},
|
},
|
||||||
"prettier": {}
|
"prettier": {}
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
module Export
|
module Export
|
||||||
import "services/echoService.aqua"
|
import "services/echoService.aqua"
|
||||||
import registerServiceRecord from "@fluencelabs/registry/resources-api.aqua"
|
import registerServiceRecord from "../../aqua/resources-api.aqua"
|
||||||
export EchoService, registerServiceRecord
|
export EchoService, registerServiceRecord
|
||||||
|
@ -2,8 +2,8 @@ module Main
|
|||||||
|
|
||||||
import App from "deployed.app.aqua"
|
import App from "deployed.app.aqua"
|
||||||
import EchoService from "services/echoService.aqua"
|
import EchoService from "services/echoService.aqua"
|
||||||
import "@fluencelabs/registry/resources-api.aqua"
|
import "../../aqua/resources-api.aqua"
|
||||||
export App, echo, echoJS, createRes, registerService, echoAll, unregisterEchoService
|
export App, echo, echoJS, createRes, registerEchoService, echoAll, unregisterEchoService
|
||||||
|
|
||||||
func echo(msg: string) -> string:
|
func echo(msg: string) -> string:
|
||||||
services <- App.services() -- Get ids of the deployed services
|
services <- App.services() -- Get ids of the deployed services
|
||||||
@ -23,7 +23,7 @@ func createRes() -> ?string:
|
|||||||
resourceId, error <- createResource("echo")
|
resourceId, error <- createResource("echo")
|
||||||
<- resourceId
|
<- resourceId
|
||||||
|
|
||||||
func registerService(resourceId: string) -> *bool:
|
func registerEchoService(resourceId: string) -> *bool:
|
||||||
results: *bool
|
results: *bool
|
||||||
services <- App.services()
|
services <- App.services()
|
||||||
for srv <- services.echoService.default:
|
for srv <- services.echoService.default:
|
||||||
@ -34,7 +34,7 @@ func echoAll(resourceId: string, msg: string) -> *string:
|
|||||||
-- 2 is the min number of peers we want to ask
|
-- 2 is the min number of peers we want to ask
|
||||||
records <- resolveResource(resourceId, 2)
|
records <- resolveResource(resourceId, 2)
|
||||||
results: *string
|
results: *string
|
||||||
for r <- records:
|
for r <- records!:
|
||||||
on r.metadata.peer_id via r.metadata.relay_id:
|
on r.metadata.peer_id via r.metadata.relay_id:
|
||||||
EchoService r.metadata.service_id!
|
EchoService r.metadata.service_id!
|
||||||
results <- EchoService.echo(msg)
|
results <- EchoService.echo(msg)
|
||||||
|
@ -14,8 +14,8 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
import { Fluence, KeyPair, setLogLevel } from "@fluencelabs/fluence";
|
import { Fluence, KeyPair, setLogLevel } from "@fluencelabs/fluence";
|
||||||
import { krasnodar } from "@fluencelabs/fluence-network-environment";
|
import { testNet } from "@fluencelabs/fluence-network-environment";
|
||||||
import { registerEchoService, registerServiceRecord } from "./generated/export";
|
import { registerEchoService, registerServiceRecordRecord } from "./generated/export";
|
||||||
import assert from "node:assert";
|
import assert from "node:assert";
|
||||||
|
|
||||||
// don't store your secret key in the code. This is just for the example
|
// don't store your secret key in the code. This is just for the example
|
||||||
@ -23,7 +23,7 @@ const secretKey = "Iz3HUmNIB78lkNNVmMkDKrju0nCivtkJNyObrFAr774=";
|
|||||||
|
|
||||||
async function main() {
|
async function main() {
|
||||||
const keypair = await KeyPair.fromEd25519SK(Buffer.from(secretKey, "base64"));
|
const keypair = await KeyPair.fromEd25519SK(Buffer.from(secretKey, "base64"));
|
||||||
const connectTo = krasnodar[0];
|
const connectTo = testNet[0];
|
||||||
assert(connectTo !== undefined);
|
assert(connectTo !== undefined);
|
||||||
|
|
||||||
// connect to the Fluence network
|
// connect to the Fluence network
|
||||||
@ -56,7 +56,7 @@ async function main() {
|
|||||||
fluence run -f 'echoJS("${peerId}", "${relayId}", "${serviceId}", "hi")'`
|
fluence run -f 'echoJS("${peerId}", "${relayId}", "${serviceId}", "hi")'`
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
const [success, error] = await registerServiceRecord(
|
const [success, error] = await registerServiceRecordRecord(
|
||||||
resourceId,
|
resourceId,
|
||||||
"echo",
|
"echo",
|
||||||
peerId,
|
peerId,
|
||||||
|
5
rust-toolchain.toml
Normal file
5
rust-toolchain.toml
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
[toolchain]
|
||||||
|
channel = "nightly"
|
||||||
|
components = [ "rustfmt", "clippy" ]
|
||||||
|
targets = [ "x86_64-unknown-linux-gnu", "x86_64-apple-darwin", "wasm32-wasi" ]
|
||||||
|
profile = "minimal"
|
Loading…
x
Reference in New Issue
Block a user