aboutsummaryrefslogtreecommitdiff
path: root/packages/bun-uws/tests/smoke.mjs
blob: a4b4f69532fbe0a3198c60c2ddc25e6c9c7962a6 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
/* This smoke test runs against the Crc32 example program for now, but this example will be extended for more tests */

var crc32 = (function () {
    var table = new Uint32Array(256);
    for (var i = 256; i--;) {
        var tmp = i;
        for (var k = 8; k--;) {
            tmp = tmp & 1 ? 3988292384 ^ tmp >>> 1 : tmp >>> 1;
        }
        table[i] = tmp;
    }
    return function (data) {
        var crc = -1; // Begin with all bits set ( 0xffffffff )
        for (var i = 0, l = data.length; i < l; i++) {
            crc = crc >>> 8 ^ table[crc & 255 ^ data[i]];
        }
        return (crc ^ -1) >>> 0; // Apply binary NOT
    };
})();

async function chunkedCrc32Test(array) {

    console.log("Making chunked request with body size: " + array.length);

    const stream = new ReadableStream(/*{type: "bytes"}, */{
        async start(controller) {
            await 1;
            controller.enqueue(array);
            controller.close();
        },
    });

    const r = await fetch("http://localhost:3000", {
        method: 'POST',
        headers: { 'Content-Type': 'application/octet-stream' },
        body: stream,
        duplex: 'half',
    });

    /* Download the response body (it's a crc32 hash plus newline) */
    const body = await r.body.getReader().read();

    /* Make a crc32 comparison of the two (mind the newline in one!) */
    const got = new TextDecoder().decode(body.value);

    const want = crc32(array).toString(16);
    if (got.toString().slice(0, -1) !== want.toString()) {
        throw new Error("failed chunked test");
    }
}

async function fixedCrc32Test(array) {
    console.log("Making request with body size: " + array.length);

    /* Send it with content-length */
    const res = await fetch("http://localhost:3000", { keepalive: true, headers: { 'Content-Type': 'text/plain' }, method: "POST", body: array });

    /* Download the response body (it's a crc32 hash plus newline) */
    const body = await res.body.getReader().read();

    /* Make a crc32 comparison of the two (mind the newline in one!) */
    const got = new TextDecoder().decode(body.value);
    const want = crc32(array).toString(16);
    if (got.toString().slice(0, -1) !== want.toString()) {
        throw new Error("failed test");
    }
}

/* Maximum chunk size is less than 256mb */
const sizes = [0, 0, 32, 32, 128, 256, 1024, 65536, 1024 * 1024, 1024 * 1024 * 128, 0, 0, 32, 32];
for (let i = 0; i < sizes.length; i++) {

    /* Create buffer with random data */
    const array = new Uint8Array(sizes[i]);
    //if (sizes[i] <= 65536) {
    //self.crypto.getRandomValues(array);
    //} else {
    array.fill(Math.random() * 255);
    //}

    /* Do this for all methods */
    await fixedCrc32Test(array);
    await chunkedCrc32Test(array);
}

console.log("Done!");
2022-02-05()Gravatar Jarred Sumner 1-1/+1 2022-02-05One less memcpyGravatar Jarred Sumner 1-68/+100 2022-02-05Further reliability improvements to http clientGravatar Jarred Sumner 2-14/+62 2022-02-05Implement keep-alive but disable itGravatar Jarred Sumner 2-17/+126 2022-02-05Make bun-install slower but more reliable on Linux Kernel 5.5 and lowerGravatar Jarred SUmner 1-112/+31 2022-02-04Several reliability improvements to HTTPGravatar Jarred SUmner 12-141/+189 2022-02-04reminderGravatar Jarred Sumner 3-5/+6 2022-02-04`path.resolve()` passes testsGravatar Jarred Sumner 2-13/+81 2022-02-04Update multiple-var.jsGravatar Jarred Sumner 1-1/+2 2022-02-04:camera:Gravatar Jarred Sumner 74-340/+669 2022-02-04Update snippets.jsonGravatar Jarred Sumner 1-1/+3 2022-02-04Add integration test for reading .json files that have UTF-8 string literalsGravatar Jarred Sumner 2-0/+9 2022-02-04[http] fix segfaultGravatar Jarred Sumner 1-17/+25 2022-02-04[bun dev] Fix bug with serving static files on next.js apps introduced in af6...Gravatar Jarred Sumner 1-5/+7 2022-02-04Update types.zigGravatar Jarred Sumner 1-9/+10 2022-02-04Update test_command.zigGravatar Jarred Sumner 1-2/+0 2022-02-04`path.normalize()` tests passGravatar Jarred Sumner 2-146/+213 2022-02-03Fix test failures in path.joinGravatar Jarred Sumner 1-8/+115 2022-02-03Update mimalloc_arena.zigGravatar Jarred Sumner 1-0/+9 2022-02-03[bun test] Support multiple filesGravatar Jarred Sumner 1-2/+12 2022-02-03Update js_ast.zigGravatar Jarred Sumner 1-0/+1 2022-02-03Support loading multiple entry points by changing what `bun:main` points toGravatar Jarred Sumner 6-4/+36 2022-02-03[bun install] Configurable max http retry countGravatar Jarred Sumner 1-0/+7 2022-02-03Missing newline in errors in bun installGravatar Jarred Sumner 1-4/+8 2022-02-03Fix bug with http clientGravatar Jarred Sumner 6-107/+101 2022-02-03Move detectFastRefresh to later so HTTP request handler starts fasterGravatar Jarred Sumner 1-2/+1 2022-02-03Fix bug with macro remaps in Bun.Transpiler apiGravatar Jarred Sumner 2-5/+8 2022-02-03Slight improvement to non-ascii file path handlingGravatar Jarred Sumner 4-18/+79 2022-02-02`path.relative` passes Node's tests (which also fixed bugs)Gravatar Jarred Sumner 8-283/+571