Skip to content
This repository was archived by the owner on Feb 26, 2024. It is now read-only.

Commit c39937c

Browse files
committed
add tests
1 parent f7a56dd commit c39937c

File tree

11 files changed

+105
-18
lines changed

11 files changed

+105
-18
lines changed

packages/core/lib/console-child.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ const TruffleError = require("@truffle/error");
33
const Config = require("@truffle/config");
44
const Web3 = require("web3");
55
const yargs = require("yargs");
6-
const StreamingWeb3HttpProvider = require("stream-provider");
6+
const StreamingWeb3HttpProvider = require("@truffle/stream-provider");
77

88
const crypto = require("crypto");
99
global.crypto = crypto;

packages/core/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@
4848
"@truffle/require": "^2.0.79",
4949
"@truffle/resolver": "^7.0.33",
5050
"@truffle/source-fetcher": "^0.5.9",
51+
"@truffle/stream-provider": "^0.0.1",
5152
"@truffle/workflow-compile": "^3.2.35",
5253
"chai": "^4.2.0",
5354
"colors": "^1.4.0",

packages/environment/environment.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ const Resolver = require("@truffle/resolver");
66
const Artifactor = require("@truffle/artifactor");
77
const Ganache = require("ganache-core/public-exports");
88
const Provider = require("@truffle/provider");
9-
const StreamingWeb3HttpProvider = require("stream-provider");
9+
const StreamingWeb3HttpProvider = require("@truffle/stream-provider");
1010

1111
const Environment = {
1212
// It's important config is a Config object and not a vanilla object

packages/environment/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
"@truffle/expect": "^0.0.18",
2525
"@truffle/interface-adapter": "^0.5.8",
2626
"@truffle/resolver": "^7.0.33",
27+
"@truffle/stream-provider": "^0.0.1",
2728
"ganache-core": "2.13.0",
2829
"node-ipc": "^9.1.1",
2930
"source-map-support": "^0.5.19",

packages/provider/index.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ const Web3 = require("web3");
33
const { createInterfaceAdapter } = require("@truffle/interface-adapter");
44
const wrapper = require("./wrapper");
55
const DEFAULT_NETWORK_CHECK_TIMEOUT = 5000;
6-
const StreamingWeb3HttpProvider = require("stream-provider");
6+
const StreamingWeb3HttpProvider = require("@truffle/stream-provider");
77

88
module.exports = {
99
wrap: function (provider, options) {

packages/provider/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
"dependencies": {
2323
"@truffle/error": "^0.0.14",
2424
"@truffle/interface-adapter": "^0.5.8",
25+
"@truffle/stream-provider": "^0.0.1",
2526
"web3": "1.5.3"
2627
},
2728
"devDependencies": {

packages/stream-provider/lib/index.ts

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ const JSONStream = require("JSONStream");
77
// they export types, but in the wrong place
88
const Web3HttpProvider = (_Web3HttpProvider as any) as typeof HttpProvider;
99

10-
export class StreamingWeb3HttpProvider extends Web3HttpProvider {
10+
export default class StreamingWeb3HttpProvider extends Web3HttpProvider {
1111
/**
1212
* Should be used to make async request
1313
*
@@ -60,12 +60,23 @@ export class StreamingWeb3HttpProvider extends Web3HttpProvider {
6060
.then(async response => {
6161
let error = null;
6262
let result: any = {};
63+
const stream = response.data.pipe(
64+
JSONStream.parse([true, { emitKey: true }])
65+
);
6366
try {
64-
for await (const { key, value } of response.data.pipe(
65-
JSONStream.parse([true, { emitKey: true }])
66-
)) {
67-
result[key] = value;
68-
}
67+
result = await new Promise((resolve, reject) => {
68+
let result: any = {};
69+
stream.on("data", (data: any) => {
70+
const { key, value } = data;
71+
result[key] = value;
72+
});
73+
stream.on("error", (error: Error) => {
74+
reject(error);
75+
});
76+
stream.on("end", () => {
77+
resolve(result);
78+
});
79+
});
6980
} catch (e) {
7081
error = errors.InvalidResponse(e);
7182
}

packages/stream-provider/package.json

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,9 @@
2222
},
2323
"scripts": {
2424
"build": "tsc",
25-
"prepare": "yarn build"
25+
"prepare": "yarn build",
26+
"test:ts": "mocha -r ts-node/register test/*.ts",
27+
"test": "yarn test:ts"
2628
},
2729
"types": "dist/index.d.ts",
2830
"dependencies": {
@@ -31,6 +33,9 @@
3133
"JSONStream": "1.3.5",
3234
"axios": "^0.21.1"
3335
},
36+
"devDependencies": {
37+
"mocha": "8.1.2"
38+
},
3439
"keywords": [
3540
"ethereum",
3641
"etherscan",
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
import assert from "assert";
2+
import http, { Server, ServerResponse } from "http";
3+
import StreamingWeb3HttpProvider from "../lib/";
4+
5+
describe("test", () => {
6+
const PORT = 9451;
7+
let server: Server;
8+
const SIZE = (1000000000 / 2) | 0;
9+
beforeEach(() => {
10+
server = http.createServer();
11+
server
12+
.on("request", (request, response: ServerResponse) => {
13+
let body: Buffer[] = [];
14+
request
15+
.on("data", (chunk: Buffer) => {
16+
body.push(chunk);
17+
})
18+
.on("end", () => {
19+
response.writeHead(200, "OK", {
20+
"content-type": "application/json"
21+
});
22+
const prefix = '{"id":1,"result":{"structLogs":["';
23+
const postfix = '"]}}';
24+
response.write(prefix);
25+
// .5 gigs of utf-8 0s
26+
const lots = Buffer.allocUnsafe(SIZE).fill(48);
27+
response.write(lots);
28+
response.write('","');
29+
response.write(lots);
30+
response.write('","');
31+
response.write(lots);
32+
response.write('","');
33+
response.write(lots);
34+
response.write(postfix);
35+
response.end();
36+
});
37+
})
38+
.listen(PORT);
39+
});
40+
afterEach(async () => {
41+
server && server.close();
42+
});
43+
(it("handle giant traces", async () => {
44+
const provider = new StreamingWeb3HttpProvider(`http://localhost:${PORT}`);
45+
const result = await new Promise<any>((resolve, reject) => {
46+
provider.send(
47+
{
48+
id: 1,
49+
jsonrpc: "2.0",
50+
method: "debug_traceTransaction",
51+
params: ["0x1234"]
52+
},
53+
(err, result) => {
54+
if (err) return void reject(err);
55+
resolve(result);
56+
}
57+
);
58+
});
59+
assert.strictEqual(result.structLogs.length, 4);
60+
result.structLogs.forEach((log: Buffer) => {
61+
assert.strictEqual(log.length, SIZE);
62+
});
63+
assert(true);
64+
}) as any).timeout(0);
65+
});

packages/stream-provider/tsconfig.json

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,17 @@
1010
"sourceMap": true,
1111
"outDir": "dist",
1212
"baseUrl": ".",
13-
"lib": ["es2017"],
14-
"paths": {
15-
},
13+
"lib": [
14+
"es2017"
15+
],
16+
"paths": {},
1617
"rootDir": "lib",
17-
"types": ["debug", "node"]
18+
"types": [
19+
"mocha",
20+
"node"
21+
]
1822
},
1923
"include": [
2024
"./lib/**/*.ts"
2125
]
22-
23-
}
26+
}

0 commit comments

Comments
 (0)