Skip to content

Commit

Permalink
build: add bindings ts tests to ci
Browse files Browse the repository at this point in the history
Add tests from #11 which didn't make it into stellar#973 due to the quickstart image not starting properly in CI.

Adding this directly to stellar#973 was costing too much time. We can troubleshoot quickstart issues here.

Update for latest changes from `soroban config identity` to `soroban
keys`
  • Loading branch information
chadoh committed Jan 11, 2024
1 parent d7b3376 commit 5f8a5fa
Show file tree
Hide file tree
Showing 11 changed files with 122 additions and 71 deletions.
43 changes: 43 additions & 0 deletions .github/workflows/bindings-ts.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@

name: bindings typescript

on:
push:
branches: [main, release/**]
pull_request:

jobs:
test:
name: test generated libraries
runs-on: ubuntu-22.04
services:
rpc:
image: stellar/quickstart:soroban-dev@sha256:0ad51035cf7caba2fd99c7c1fad0945df6932be7d5c893e1520ccdef7d6a6ffe
ports:
- 8000:8000
env:
ENABLE_LOGS: true
NETWORK: local
ENABLE_SOROBAN_RPC: true
options: >-
--health-cmd "curl --no-progress-meter --fail-with-body -X POST \"http://localhost:8000/soroban/rpc\" -H 'Content-Type: application/json' -d '{\"jsonrpc\":\"2.0\",\"id\":8675309,\"method\":\"getNetwork\"}' && curl --no-progress-meter \"http://localhost:8000/friendbot\" | grep '\"invalid_field\": \"addr\"'"
--health-interval 10s
--health-timeout 5s
--health-retries 50
steps:
- uses: actions/checkout@v3
- uses: actions/cache@v3
with:
path: |
~/.cargo/bin/
~/.cargo/registry/index/
~/.cargo/registry/cache/
~/.cargo/git/db/
target/
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
- run: rustup update
- run: cargo build
- run: rustup target add wasm32-unknown-unknown
- run: make build-test-wasms
- run: npm ci && npm run test
working-directory: cmd/crates/soroban-spec-typescript/ts-tests

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
"dependencies": {
"@stellar/freighter-api": "1.7.1",
"buffer": "6.0.3",
"stellar-sdk": "11.1.0"
"stellar-sdk": "11.2.0"
},
"scripts": {
"build": "node ./scripts/build.mjs"
Expand All @@ -15,6 +15,6 @@
},
"typings": "dist/types/index.d.ts",
"devDependencies": {
"typescript": "5.1.6"
"typescript": "5.3.3"
}
}
1 change: 0 additions & 1 deletion cmd/crates/soroban-spec-typescript/ts-tests/.nvmrc

This file was deleted.

25 changes: 15 additions & 10 deletions cmd/crates/soroban-spec-typescript/ts-tests/initialize.sh
Original file line number Diff line number Diff line change
Expand Up @@ -16,22 +16,28 @@ echo " Passphrase: \"$SOROBAN_NETWORK_PASSPHRASE\""
NETWORK_STATUS=$(curl -s -X POST "http://localhost:8000/soroban/rpc" -H "Content-Type: application/json" -d '{ "jsonrpc": "2.0", "id": 8675309, "method": "getHealth" }' | sed 's/.*"status":"\(.*\)".*/\1/') || { echo "Make sure you're running local RPC network on localhost:8000" && exit 1; }
echo " Status: $NETWORK_STATUS"

if [[ "$NETWORK_STATUS" != "healthy" ]]; then
echo "Network is not healthy (not running?), exiting"
exit 1
fi

# Print command before executing, from https://stackoverflow.com/a/23342259/249801
# Discussion: https://github.com/stellar/soroban-tools/pull/1034#pullrequestreview-1690667116
exe() { echo"${@/eval/}" ; "$@" ; }

function fund_all() {
exe eval "./soroban config identity fund"
exe eval "./soroban config identity generate alice"
exe eval "./soroban config identity fund alice"
exe eval "./soroban config identity generate bob"
exe eval "./soroban config identity fund bob"
exe eval "./soroban keys generate root"
exe eval "./soroban keys fund root"
exe eval "./soroban keys generate alice"
exe eval "./soroban keys fund alice"
exe eval "./soroban keys generate bob"
exe eval "./soroban keys fund bob"
}
function upload() {
exe eval "(./soroban contract $1 --wasm $2 --ignore-checks) > $3"
exe eval "(./soroban contract $1 --source root --wasm $2 --ignore-checks) > $3"
}
function deploy() {
exe eval "(./soroban contract deploy --wasm-hash $(cat $1) --ignore-checks) > $2"
exe eval "(./soroban contract deploy --source root --wasm-hash $(cat $1) --ignore-checks) > $2"
}
function deploy_all() {
upload deploy ../../../../target/wasm32-unknown-unknown/test-wasms/test_custom_types.wasm contract-id-custom-types.txt
Expand All @@ -42,7 +48,7 @@ function deploy_all() {
deploy contract-token-hash.txt contract-id-token-b.txt
}
function initialize() {
exe eval "./soroban contract invoke --id $(cat $1) -- initialize --admin $(./soroban config identity address) --decimal 0 --name 'Token $2' --symbol '$2'"
exe eval "./soroban contract invoke --source root --id $(cat $1) -- initialize --admin $(./soroban keys address root) --decimal 0 --name 'Token $2' --symbol '$2'"
}
function initialize_all() {
initialize contract-id-token-a.txt A
Expand All @@ -59,14 +65,13 @@ function bind_all() {
}

function mint() {
exe eval "./soroban contract invoke --id $(cat $1) -- mint --amount 2000000 --to $(./soroban config identity address $2)"
exe eval "./soroban contract invoke --source root --id $(cat $1) -- mint --amount 2000000 --to $(./soroban keys address $2)"
}
function mint_all() {
mint contract-id-token-a.txt alice
mint contract-id-token-b.txt bob
}

curl -X POST "http://localhost:8000/soroban/rpc" || { echo "Make sure you're running standalone RPC network on localhost:8000" && exit 1; }
fund_all
deploy_all
initialize_all
Expand Down
26 changes: 13 additions & 13 deletions cmd/crates/soroban-spec-typescript/ts-tests/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions cmd/crates/soroban-spec-typescript/ts-tests/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,8 @@
"ava": "^5.3.1",
"dotenv": "^16.3.1",
"eslint": "^8.53.0",
"stellar-sdk": "11.1.0",
"typescript": "^5.1.6"
"stellar-sdk": "11.2.0",
"typescript": "^5.3.3"
},
"ava": {
"typescript": {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ import test from 'ava'
import { root, rpcUrl, wallet } from './util.js'
import { Contract, Ok, Err, networks } from 'test-custom-types'

const addr = root.address;
const publicKey = root.keypair.publicKey();

const contract = new Contract({ ...networks.standalone, rpcUrl, wallet });
Expand Down Expand Up @@ -50,18 +49,21 @@ test("strukt", async (t) => {
})

test('simple first', async t => {
const simple = { tag: 'First', values: undefined } as const
t.deepEqual((await contract.simple({ simple })).result, simple)
const arg = { tag: 'First', values: undefined } as const
const ret = { tag: 'First' }
t.deepEqual((await contract.simple({ simple: arg })).result, ret)
})

test('simple second', async t => {
const simple = { tag: 'Second', values: undefined } as const
t.deepEqual((await contract.simple({ simple })).result, simple)
const arg = { tag: 'Second', values: undefined } as const
const ret = { tag: 'Second' }
t.deepEqual((await contract.simple({ simple: arg })).result, ret)
})

test('simple third', async t => {
const simple = { tag: 'Third', values: undefined } as const
t.deepEqual((await contract.simple({ simple })).result, simple)
const arg = { tag: 'Third', values: undefined } as const
const ret = { tag: 'Third' }
t.deepEqual((await contract.simple({ simple: arg })).result, ret)
})

test('complex with struct', async t => {
Expand All @@ -72,29 +74,30 @@ test('complex with struct', async t => {

test('complex with tuple', async t => {
const arg = { tag: 'Tuple', values: [[{ a: 0, b: true, c: 'hello' }, { tag: 'First', values: undefined }]] } as const
const ret = { tag: 'Tuple', values: [[{ a: 0, b: true, c: 'hello' }, { tag: 'First', values: undefined }]] }
const ret = { tag: 'Tuple', values: [[{ a: 0, b: true, c: 'hello' }, { tag: 'First' }]] }
t.deepEqual((await contract.complex({ complex: arg })).result, ret)
})

test('complex with enum', async t => {
const arg = { tag: 'Enum', values: [{ tag: 'First', values: undefined }] } as const
const ret = { tag: 'Enum', values: [{ tag: 'First', values: undefined }] }
const ret = { tag: 'Enum', values: [{ tag: 'First' }] }
t.deepEqual((await contract.complex({ complex: arg })).result, ret)
})

test('complex with asset', async t => {
const arg = { tag: 'Asset', values: [publicKey, 1n] } as const
const ret = { tag: 'Asset', values: [addr, 1n] }
const ret = { tag: 'Asset', values: [publicKey, 1n] }
t.deepEqual((await contract.complex({ complex: arg })).result, ret)
})

test('complex with void', async t => {
const complex = { tag: 'Void', values: undefined } as const
t.deepEqual((await contract.complex({ complex })).result, complex)
const arg = { tag: 'Void', values: undefined } as const
const ret = { tag: 'Void' }
t.deepEqual((await contract.complex({ complex: arg })).result, ret)
})

test('addresse', async t => {
t.deepEqual((await contract.addresse({ addresse: publicKey })).result, addr)
t.deepEqual((await contract.addresse({ addresse: publicKey })).result, publicKey)
})

test('bytes', async t => {
Expand Down Expand Up @@ -138,7 +141,8 @@ test('map', async t => {
map.set(1, true)
map.set(2, false)
// map.set(3, 'hahaha') // should throw an error
t.deepEqual((await contract.map({ map })).result, map)
const ret = Array.from(map.entries())
t.deepEqual((await contract.map({ map })).result, ret)
})

test('vec', async t => {
Expand Down Expand Up @@ -178,6 +182,6 @@ test('string', async t => {

test('tuple_strukt', async t => {
const arg = [{ a: 0, b: true, c: 'hello' }, { tag: 'First', values: undefined }] as const
const res = [{ a: 0, b: true, c: 'hello' }, { tag: 'First', values: undefined }]
const res = [{ a: 0, b: true, c: 'hello' }, { tag: 'First' }]
t.deepEqual((await contract.tupleStrukt({ tuple_strukt: arg })).result, res)
})
Loading

0 comments on commit 5f8a5fa

Please sign in to comment.