Skip to content

Commit

Permalink
test: add tests for mithril-client-wasm
Browse files Browse the repository at this point in the history
These tests are intended to be performed in `Mithril Client multi-platform test`
  • Loading branch information
dlachaume committed Jan 26, 2024
1 parent ba96064 commit a8eae53
Show file tree
Hide file tree
Showing 10 changed files with 4,617 additions and 1 deletion.
6 changes: 6 additions & 0 deletions mithril-client-wasm/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -38,3 +38,9 @@ www-install:

www-serve:
npm --prefix www run start

www-test-install:
npm --prefix www-test install

www-test-serve:
npm --prefix www-test run start
24 changes: 24 additions & 0 deletions mithril-client-wasm/www-test/.bin/create-wasm-app.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
#!/usr/bin/env node

const { spawn } = require("child_process");
const fs = require("fs");

let folderName = '.';

if (process.argv.length >= 3) {
folderName = process.argv[2];
if (!fs.existsSync(folderName)) {
fs.mkdirSync(folderName);
}
}

const clone = spawn("git", ["clone", "https://github.com/rustwasm/create-wasm-app.git", folderName]);

clone.on("close", code => {
if (code !== 0) {
console.error("cloning the template failed!")
process.exit(code);
} else {
console.log("🦀 Rust + 🕸 Wasm = ❤");
}
});
3 changes: 3 additions & 0 deletions mithril-client-wasm/www-test/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
node_modules
dist
.env
5 changes: 5 additions & 0 deletions mithril-client-wasm/www-test/bootstrap.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
// A dependency graph that contains any wasm must all be imported
// asynchronously. This `bootstrap.js` file does the single async import, so
// that no one else needs to worry about it again.
import("./index.js")
.catch(e => console.error("Error importing `index.js`:", e));
10 changes: 10 additions & 0 deletions mithril-client-wasm/www-test/index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Hello wasm-pack!</title>
</head>
<body>
<script src="./bootstrap.js"></script>
</body>
</html>
150 changes: 150 additions & 0 deletions mithril-client-wasm/www-test/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,150 @@
import initMithrilClient, {
MithrilClient,
} from "@mithril-dev/mithril-client-wasm"

function display_test_result_in_dom(step_number, step_name, result, error) {
let div = document.createElement("div")
div.id = step_name
div.title = result
div.innerHTML = `Result test n°${step_number} : ${result}; function_name: ${step_name}${
error ? `; reason: ${error}` : ""
}`
document.body.appendChild(div)
}

function handle_error(step_number, step_name, error) {
display_test_result_in_dom(step_number, step_name, "FAILED", error)
console.error(`Error at step ${step_number} (${step_name}):`, error)
throw new Error(
`Stopping script due to error at step ${step_number}: ${error}`
)
}

await initMithrilClient()
const aggregator_endpoint = process.env.AGGREGATOR_ENDPOINT
const genesis_verification_key = process.env.GENESIS_VERIFICATION_KEY
let client
let test_name
let test_number = 1

// Test 'MithrilClient constructor'
try {
test_name = "MithrilClient constructor"
client = new MithrilClient(aggregator_endpoint, genesis_verification_key)
display_test_result_in_dom(test_number, test_name, "OK")
} catch (error) {
handle_error(test_number, test_name, error)
}

// Test 'list_snapshots' function
let snapshots
try {
test_number++
test_name = "list_snapshots"
snapshots = await client.list_snapshots()
display_test_result_in_dom(test_number, test_name, "OK")
console.log("snapshots", snapshots)
} catch (error) {
handle_error(test_number, test_name, error)
}

// Test 'get_snapshot' function
try {
test_number++
test_name = "get_snapshot"
const snapshot = await client.get_snapshot(snapshots[0].digest)
display_test_result_in_dom(test_number, test_name, "OK")
console.log("snapshot", snapshot)
} catch (error) {
handle_error(test_number, test_name, error)
}

// Test 'list_mithril_stake_distributions' function
let mithril_stake_distributions
try {
test_number++
test_name = "list_mithril_stake_distributions"
mithril_stake_distributions = await client.list_mithril_stake_distributions()
display_test_result_in_dom(test_number, test_name, "OK")
console.log("mithril_stake_distributions", mithril_stake_distributions)
} catch (error) {
handle_error(test_number, test_name, error)
}

// Test 'get_mithril_stake_distribution' function
let mithril_stake_distribution
try {
test_number++
test_name = "get_mithril_stake_distribution"
mithril_stake_distribution = await client.get_mithril_stake_distribution(
mithril_stake_distributions[0].hash
)
display_test_result_in_dom(test_number, test_name, "OK")
console.log("mithril_stake_distribution", mithril_stake_distribution)
} catch (error) {
handle_error(test_number, test_name, error)
}

// Test 'get_mithril_certificate' function
let certificate
try {
test_number++
test_name = "get_mithril_certificate"
certificate = await client.get_mithril_certificate(
mithril_stake_distribution.certificate_hash
)
display_test_result_in_dom(test_number, test_name, "OK")
console.log("certificate", certificate)
} catch (error) {
handle_error(test_number, test_name, error)
}

// Test 'verify_certificate_chain' function
let last_certificate_from_chain
try {
test_number++
test_name = "verify_certificate_chain"
last_certificate_from_chain = await client.verify_certificate_chain(
certificate.hash
)
display_test_result_in_dom(test_number, test_name, "OK")
console.log("last_certificate_from_chain", last_certificate_from_chain)
} catch (error) {
handle_error(test_number, test_name, error)
}

// Test 'compute_mithril_stake_distribution_message' function
let mithril_stake_distribution_message
try {
test_number++
test_name = "compute_mithril_stake_distribution_message"
mithril_stake_distribution_message =
await client.compute_mithril_stake_distribution_message(
mithril_stake_distribution
)
display_test_result_in_dom(test_number, test_name, "OK")
console.log(
"mithril_stake_distribution_message",
mithril_stake_distribution_message
)
} catch (error) {
handle_error(test_number, test_name, error)
}

// Test 'verify_message_match_certificate' function
try {
test_number++
test_name = "verify_message_match_certificate"
const valid_stake_distribution_message =
await client.verify_message_match_certificate(
mithril_stake_distribution_message,
last_certificate_from_chain
)
display_test_result_in_dom(test_number, test_name, "OK")
console.log(
"valid_stake_distribution_message",
valid_stake_distribution_message
)
} catch (error) {
handle_error(test_number, test_name, error)
}
Loading

0 comments on commit a8eae53

Please sign in to comment.