aboutsummaryrefslogtreecommitdiff
path: root/test/wasm
diff options
context:
space:
mode:
authorJ. Ryan Stinnett <jryans@gmail.com>2021-07-20 12:14:58 +0100
committerGitHub <noreply@github.com>2021-07-20 12:14:58 +0100
commit034f5ae3f1d9c01352a71f4717971f727bae57ee (patch)
treeee78cdcd804940e3321be32d322a08db68d82add /test/wasm
parentf63068df3b9efb11f2677dd527994477b806ed19 (diff)
Add startup testing for Wasm Pinecone build (#1910)
* Only include go-sqlite3 on the relevant binaries * The driver name is always sqlite3 now * Update to matrix-org/go-sqlite3-js@e537baa * Add initial Wasm test harness * Upgrade go-sqlite3-js This fixes an error about semicolons in single statements. * Add browser-like WebSocket API for testing * Upgrade go-sqlite3-js This upgrade includes printing panic messages next to stacks. * Run for all PRs targeting any branch * Use manual Node caching * Temporarily run for all pushes * Use npm ci instead of install * Use HTTPS auth for repo packages * Match path style from build.sh * update utp Co-authored-by: Neil Alexander <neilalexander@users.noreply.github.com>
Diffstat (limited to 'test/wasm')
-rwxr-xr-xtest/wasm/index.js52
-rw-r--r--test/wasm/package-lock.json67
-rw-r--r--test/wasm/package.json7
3 files changed, 126 insertions, 0 deletions
diff --git a/test/wasm/index.js b/test/wasm/index.js
new file mode 100755
index 00000000..fce5753c
--- /dev/null
+++ b/test/wasm/index.js
@@ -0,0 +1,52 @@
+#!/usr/bin/env node
+
+/*
+Copyright 2021 The Matrix.org Foundation C.I.C.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+const fs = require('fs');
+const path = require('path');
+const childProcess = require('child_process');
+
+(async function() {
+ // sql.js
+ const initSqlJs = require('sql.js');
+ await initSqlJs().then(SQL => {
+ global._go_sqlite = SQL;
+ console.log("Loaded sqlite")
+ });
+ // dendritejs expects to write to `/idb` so we create that here
+ // Since this is testing only, we use the default in-memory FS
+ global._go_sqlite.FS.mkdir("/idb");
+
+ // WebSocket
+ const WebSocket = require('isomorphic-ws');
+ global.WebSocket = WebSocket;
+
+ // Load the generic Go Wasm exec helper inline to trigger built-in run call
+ // This approach avoids copying `wasm_exec.js` into the repo, which is nice
+ // to aim for since it can differ between Go versions.
+ const goRoot = await new Promise((resolve, reject) => {
+ childProcess.execFile('go', ['env', 'GOROOT'], (err, out) => {
+ if (err) {
+ reject("Can't find go");
+ }
+ resolve(out.trim());
+ });
+ });
+ const execPath = path.join(goRoot, 'misc/wasm/wasm_exec.js');
+ const execCode = fs.readFileSync(execPath, 'utf8');
+ eval(execCode);
+})();
diff --git a/test/wasm/package-lock.json b/test/wasm/package-lock.json
new file mode 100644
index 00000000..f26d55ab
--- /dev/null
+++ b/test/wasm/package-lock.json
@@ -0,0 +1,67 @@
+{
+ "name": "wasm",
+ "lockfileVersion": 2,
+ "requires": true,
+ "packages": {
+ "": {
+ "dependencies": {
+ "isomorphic-ws": "^4.0.1",
+ "sql.js": "github:neilalexander/sql.js#252a72bf57b0538cbd49bbd6f70af71e516966ae",
+ "ws": "^7.5.2"
+ }
+ },
+ "node_modules/isomorphic-ws": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz",
+ "integrity": "sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==",
+ "peerDependencies": {
+ "ws": "*"
+ }
+ },
+ "node_modules/sql.js": {
+ "version": "1.5.0",
+ "resolved": "git+ssh://git@github.com/neilalexander/sql.js.git#252a72bf57b0538cbd49bbd6f70af71e516966ae",
+ "integrity": "sha512-EFYI/yMoQ1U08nZxQOZ7+4S0nOpKF45EVoWGef8L1kvSCMP3B3xSzwZeOmoF2tBVpbMssAgHEz43cf0ZulRDSQ==",
+ "license": "MIT"
+ },
+ "node_modules/ws": {
+ "version": "7.5.2",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.2.tgz",
+ "integrity": "sha512-lkF7AWRicoB9mAgjeKbGqVUekLnSNO4VjKVnuPHpQeOxZOErX6BPXwJk70nFslRCEEA8EVW7ZjKwXaP9N+1sKQ==",
+ "engines": {
+ "node": ">=8.3.0"
+ },
+ "peerDependencies": {
+ "bufferutil": "^4.0.1",
+ "utf-8-validate": "^5.0.2"
+ },
+ "peerDependenciesMeta": {
+ "bufferutil": {
+ "optional": true
+ },
+ "utf-8-validate": {
+ "optional": true
+ }
+ }
+ }
+ },
+ "dependencies": {
+ "isomorphic-ws": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz",
+ "integrity": "sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==",
+ "requires": {}
+ },
+ "sql.js": {
+ "version": "git+ssh://git@github.com/neilalexander/sql.js.git#252a72bf57b0538cbd49bbd6f70af71e516966ae",
+ "integrity": "sha512-EFYI/yMoQ1U08nZxQOZ7+4S0nOpKF45EVoWGef8L1kvSCMP3B3xSzwZeOmoF2tBVpbMssAgHEz43cf0ZulRDSQ==",
+ "from": "sql.js@github:neilalexander/sql.js#252a72bf57b0538cbd49bbd6f70af71e516966ae"
+ },
+ "ws": {
+ "version": "7.5.2",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.2.tgz",
+ "integrity": "sha512-lkF7AWRicoB9mAgjeKbGqVUekLnSNO4VjKVnuPHpQeOxZOErX6BPXwJk70nFslRCEEA8EVW7ZjKwXaP9N+1sKQ==",
+ "requires": {}
+ }
+ }
+}
diff --git a/test/wasm/package.json b/test/wasm/package.json
new file mode 100644
index 00000000..b28c30b1
--- /dev/null
+++ b/test/wasm/package.json
@@ -0,0 +1,7 @@
+{
+ "dependencies": {
+ "isomorphic-ws": "^4.0.1",
+ "sql.js": "github:neilalexander/sql.js#252a72bf57b0538cbd49bbd6f70af71e516966ae",
+ "ws": "^7.5.2"
+ }
+}