wasm-metering
Version:
injects metering into webassembly binaries
66 lines (53 loc) • 1.87 kB
JavaScript
const fs = require('fs')
const tape = require('tape')
const metering = require('../')
const defaultCostTable = require('./defaultCostTable')
const toolkit = require('wasm-json-toolkit')
tape('basic test', t => {
const json = JSON.parse(fs.readFileSync(`${__dirname}/in/json/basic.wast.json`).toString())
const wasm = toolkit.json2wasm(json)
const meteredWasm = metering.meterWASM(wasm)
const meteredJSON = toolkit.wasm2json(meteredWasm)
t.equals(meteredJSON[2].entries[0].moduleStr, 'metering')
t.equals(meteredJSON[2].entries[0].fieldStr, 'usegas')
t.equals(meteredJSON[1].entries[1].params[0], 'i32')
t.end()
})
tape('basic metering tests', t => {
let files = fs.readdirSync(`${__dirname}/in/json`)
// files = ['zeroCostOps.wast.json']
for (const file of files) {
console.log(file)
const json = JSON.parse(fs.readFileSync(`${__dirname}/in/json/${file}`).toString())
let costTable
try {
costTable = require(`${__dirname}/in/costTables/${file}.js`)
} catch (e) {
costTable = defaultCostTable
}
try {
let meteredJson = metering.meterJSON(json, {
costTable
})
let expectedJson = require(`${__dirname}/expected-out/json/${file}`)
t.deepEquals(meteredJson, expectedJson, `${file} - should have the correct json`)
} catch (e) {
t.equals(file, 'basic+import.wast.json')
}
}
t.end()
})
tape('wasm test', t => {
const json = require('./in/json/basic.wast.json')
const wasm = toolkit.json2wasm(json)
const meteredWasm = metering.meterWASM(wasm, {
meterType: 'i32',
fieldStr: 'test',
moduleStr: 'test'
})
const meteredJSON = toolkit.wasm2json(meteredWasm)
t.equals(meteredJSON[2].entries[0].moduleStr, 'test')
t.equals(meteredJSON[2].entries[0].fieldStr, 'test')
t.equals(meteredJSON[1].entries[1].params[0], 'i32')
t.end()
})