Skip to content
This repository was archived by the owner on Jul 3, 2020. It is now read-only.

Commit ae461ee

Browse files
author
Face Kapow
committed
js/test/unit/buffers, js/test/unit/lib, js/test/unit/net, js/test/unit/*.js
1 parent fecb02e commit ae461ee

12 files changed

Lines changed: 493 additions & 599 deletions

File tree

.eslintrc

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,9 @@ rules:
2424
consistent-return: 0
2525
no-underscore-dangle: 0
2626
global-require: 0
27+
import/no-extraneous-dependencies: 0
28+
no-param-reassign: 1
29+
no-return-assign: 1
2730

2831
parserOptions:
2932
ecmaVersion: 6

js/test/unit/buffers/physical-address.js

Lines changed: 15 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -13,37 +13,32 @@
1313
// limitations under the License.
1414

1515
'use strict';
16-
var test = require('tape');
17-
var runtime = require('../../../core');
18-
var resources = require('../../../core/resources');
16+
const test = require('tape');
17+
const resources = require('../../../core/resources');
1918

20-
test('buffer crosses page boundary', function(t) {
19+
test('buffer crosses page boundary', (t) => {
2120
// allocate on page boundary
22-
var buf = resources.memoryRange.block(0x3200000 - 12, 24).buffer();
23-
var u8 = new Uint8Array(buf);
24-
for (var i = 0; i < u8.length; i++) {
25-
u8[i] = i;
26-
}
21+
const buf = resources.memoryRange.block(0x3200000 - 12, 24).buffer();
22+
const u8 = new Uint8Array(buf);
23+
for (let i = 0; i < u8.length; i++) u8[i] = i;
2724

28-
var addr = __SYSCALL.bufferAddress(u8);
29-
var b1 = u8.subarray(0, addr[0]);
30-
var b2 = u8.subarray(addr[0]);
25+
const addr = __SYSCALL.bufferAddress(u8);
26+
const b1 = u8.subarray(0, addr[0]);
27+
const b2 = u8.subarray(addr[0]);
3128
t.equal(b1.length, 12);
3229
t.equal(b1[0], 0);
3330
t.equal(b2.length, 12);
3431
t.equal(b2[0], 12);
3532
t.end();
3633
});
3734

38-
test('buffer does not cross page boundary', function(t) {
39-
var buf = resources.memoryRange.block(0x3200000, 24).buffer();
40-
var u8 = new Uint8Array(buf);
41-
for (var i = 0; i < u8.length; i++) {
42-
u8[i] = i;
43-
}
35+
test('buffer does not cross page boundary', (t) => {
36+
const buf = resources.memoryRange.block(0x3200000, 24).buffer();
37+
const u8 = new Uint8Array(buf);
38+
for (let i = 0; i < u8.length; i++) u8[i] = i;
4439

45-
var addr = __SYSCALL.bufferAddress(u8);
46-
var b1 = u8.subarray(0, addr[0]);
40+
const addr = __SYSCALL.bufferAddress(u8);
41+
const b1 = u8.subarray(0, addr[0]);
4742
t.equal(b1.length, u8.length);
4843
t.equal(addr[3], 0);
4944
t.end();

js/test/unit/index.js

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,15 +13,14 @@
1313
// limitations under the License.
1414

1515
'use strict';
16-
var runtime = require('../../');
17-
var test = require('tape');
18-
var stream = test.createStream();
19-
var shutdown = runtime.machine.shutdown;
2016

21-
stream.on('data', function(v) {
22-
if (v[v.length - 1] === '\n') {
23-
v = v.slice(0, -1);
24-
}
17+
const test = require('tape');
18+
const stream = test.createStream();
19+
const { shutdown } = require('../../').machine;
20+
21+
stream.on('data', (vOpt) => {
22+
let v = vOpt;
23+
if (v[v.length - 1] === '\n') v = v.slice(0, -1);
2524
console.log(v);
2625
});
2726

js/test/unit/lib/buffer-builder.js

Lines changed: 16 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -25,16 +25,16 @@ class BufferBuilder {
2525
this._checksumOffset = 0;
2626
}
2727

28-
uint8(value) {
29-
value = (value >>> 0) & 0xff;
28+
uint8(valueOpt) {
29+
const value = (valueOpt >>> 0) & 0xff;
3030
this._p.push(value);
3131
this._repeatFirst = this._p.length - 1;
3232
this._repeatLast = this._p.length;
3333
return this;
3434
}
3535

36-
uint16(value) {
37-
value = value >>> 0;
36+
uint16(valueOpt) {
37+
const value = valueOpt >>> 0;
3838
this.uint8((value >>> 8) & 0xff);
3939
this.uint8(value & 0xff);
4040
this._repeatFirst = this._p.length - 2;
@@ -58,8 +58,8 @@ class BufferBuilder {
5858
return this.uint16(0);
5959
}
6060

61-
uint32(value) {
62-
value = value >>> 0;
61+
uint32(valueOpt) {
62+
const value = valueOpt >>> 0;
6363
this.uint8((value >>> 24) & 0xff);
6464
this.uint8((value >>> 16) & 0xff);
6565
this.uint8((value >>> 8) & 0xff);
@@ -69,42 +69,33 @@ class BufferBuilder {
6969
return this;
7070
}
7171

72-
align(alignment, value) {
73-
alignment = alignment || 0;
74-
value = value || 0;
75-
while ((this._p.length % alignment) !== 0) {
76-
this.uint8(value);
77-
}
72+
align(alignment = 0, value = 0) {
73+
while ((this._p.length % alignment) !== 0) this.uint8(value);
7874
return this;
7975
}
8076

8177
array(u8) {
82-
for (var i = 0; i < u8.length; ++i) {
83-
this.uint8(u8[i] & 0xff);
84-
}
78+
for (const item of u8) this.uint8(item & 0xff);
8579
this._repeatFirst = this._p.length - u8.length;
8680
this._repeatLast = this._p.length;
8781
return this;
8882
}
8983

90-
repeat(times) {
91-
times = times || 0;
92-
for (var t = 0; t < times; ++t) {
93-
for (var i = this._repeatFirst; i < this._repeatLast; ++i) {
84+
repeat(times = 0) {
85+
for (let t = 0; t < times; ++t) {
86+
for (let i = this._repeatFirst; i < this._repeatLast; ++i) {
9487
this._p.push(this._p[i]);
9588
}
9689
}
9790
return this;
9891
}
9992

10093
buffer() {
101-
var buf = new Uint8Array(this._p);
94+
const buf = new Uint8Array(this._p);
10295
if (this._ck) {
103-
if (this._checksumLast === 0) {
104-
this._checksumLast = this._p.length;
105-
}
106-
var sub = buf.subarray(this._checksumFirst, this._checksumLast);
107-
var cksum = this._ck(sub);
96+
if (this._checksumLast === 0) this._checksumLast = this._p.length;
97+
const sub = buf.subarray(this._checksumFirst, this._checksumLast);
98+
const cksum = this._ck(sub);
10899
buf[this._checksumOffset] = (cksum >>> 8) & 0xff;
109100
buf[this._checksumOffset + 1] = cksum & 0xff;
110101
}

js/test/unit/lib/interface-mock.js

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -14,18 +14,17 @@
1414

1515
'use strict';
1616

17-
var Interface = require('../../../core/net/interface');
18-
var MACAddress = require('../../../core/net/mac-address');
19-
var IP4Address = require('../../../core/net/ip4-address');
17+
const Interface = require('../../../core/net/interface');
18+
const MACAddress = require('../../../core/net/mac-address');
19+
const IP4Address = require('../../../core/net/ip4-address');
2020

21-
module.exports = function(opts) {
22-
opts = opts || {};
23-
var ip = opts.ip || new IP4Address(127, 0, 0, 1);
24-
var mask = opts.mask || new IP4Address(255, 0, 0, 0);
25-
var mac = opts.mac || new MACAddress(1, 2, 3, 4, 5, 6);
26-
var intf = new Interface(mac);
21+
module.exports = (opts = {}) => {
22+
const ip = opts.ip || new IP4Address(127, 0, 0, 1);
23+
const mask = opts.mask || new IP4Address(255, 0, 0, 0);
24+
const mac = opts.mac || new MACAddress(1, 2, 3, 4, 5, 6);
25+
const intf = new Interface(mac);
2726
intf.disableArp();
2827
intf.configure(ip, mask);
29-
intf.ontransmit = function() {};
28+
intf.ontransmit = () => {};
3029
return intf;
3130
};

js/test/unit/lib/packet-builder.js

Lines changed: 57 additions & 82 deletions
Original file line numberDiff line numberDiff line change
@@ -14,49 +14,41 @@
1414

1515
'use strict';
1616

17-
var BufferBuilder = require('./buffer-builder');
18-
var IP4Address = require('../../../core/net/ip4-address');
19-
var MACAddress = require('../../../core/net/mac-address');
20-
var checksum = require('../../../core/net/checksum');
21-
22-
function cksum(u8) {
23-
return checksum(u8, 0, u8.length, 0);
24-
}
25-
26-
exports.createEthernetIP4 = function(protocol, payload, opts) {
27-
opts = opts || {};
28-
var srcIP = IP4Address.parse(opts.srcIP) || new IP4Address(127, 0, 0, 1);
29-
var destIP = IP4Address.parse(opts.destIP) || IP4Address.ANY;
30-
var srcMAC = MACAddress.parse(opts.srcMAC) || MACAddress.ZERO;
31-
var destMAC = MACAddress.parse(opts.destMAC) || MACAddress.ZERO;
32-
var etherType = opts.etherType || 0x0800;
33-
var tos = opts.tos || 0;
34-
var id = opts.id || 0;
35-
var dontFragment = opts.dontFragment || false;
36-
var moreFragments = opts.moreFragments || false;
37-
var fragmentOffsetBytes = opts.fragmentOffsetBytes || 0;
38-
var ttl = opts.ttl || 64;
39-
40-
var fragmentData = (opts.fragmentOffsetBytes >>> 3) & 0x1fff;
17+
const BufferBuilder = require('./buffer-builder');
18+
const IP4Address = require('../../../core/net/ip4-address');
19+
const MACAddress = require('../../../core/net/mac-address');
20+
const checksum = require('../../../core/net/checksum');
21+
22+
const cksum = u8 => checksum(u8, 0, u8.length, 0);
23+
24+
exports.createEthernetIP4 = (protocol, payload, opts = {}) => {
25+
const srcIP = IP4Address.parse(opts.srcIP) || new IP4Address(127, 0, 0, 1);
26+
const destIP = IP4Address.parse(opts.destIP) || IP4Address.ANY;
27+
const srcMAC = MACAddress.parse(opts.srcMAC) || MACAddress.ZERO;
28+
const destMAC = MACAddress.parse(opts.destMAC) || MACAddress.ZERO;
29+
const etherType = opts.etherType || 0x0800;
30+
const tos = opts.tos || 0;
31+
const id = opts.id || 0;
32+
const dontFragment = opts.dontFragment || false;
33+
const moreFragments = opts.moreFragments || false;
34+
const fragmentOffsetBytes = opts.fragmentOffsetBytes || 0;
35+
const ttl = opts.ttl || 64;
36+
37+
let fragmentData = (opts.fragmentOffsetBytes >>> 3) & 0x1fff;
4138

4239
if ((fragmentData << 3) !== fragmentOffsetBytes) {
43-
throw new Error('invalid fragment offset ' + fragmentOffsetBytes + ' byte(s)');
40+
throw new Error(`invalid fragment offset ${fragmentOffsetBytes} byte(s)`);
4441
}
4542

46-
if (dontFragment) {
47-
fragmentData |= (1 << 14);
48-
}
49-
50-
if (moreFragments) {
51-
fragmentData |= (1 << 13);
52-
}
43+
if (dontFragment) fragmentData |= (1 << 14);
44+
if (moreFragments) fragmentData |= (1 << 13);
5345

54-
var protocolId = 0;
46+
let protocolId = 0;
5547
switch (protocol) {
56-
case 'icmp': protocolId = 0x01; break;
57-
case 'tcp': protocolId = 0x06; break;
58-
case 'udp': protocolId = 0x11; break;
59-
default: throw new Error('unknown protocol');
48+
case 'icmp': protocolId = 0x01; break;
49+
case 'tcp': protocolId = 0x06; break;
50+
case 'udp': protocolId = 0x11; break;
51+
default: throw new Error('unknown protocol');
6052
}
6153

6254
return new BufferBuilder()
@@ -95,10 +87,9 @@ exports.createEthernetIP4 = function(protocol, payload, opts) {
9587
.buffer();
9688
};
9789

98-
exports.createUDP = function(payload, opts) {
99-
opts = opts || {};
100-
var srcPort = opts.srcPort || 1;
101-
var destPort = opts.destPort || 1;
90+
exports.createUDP = (payload, opts = {}) => {
91+
const srcPort = opts.srcPort || 1;
92+
const destPort = opts.destPort || 1;
10293

10394
return new BufferBuilder()
10495
.uint16(srcPort)
@@ -109,71 +100,55 @@ exports.createUDP = function(payload, opts) {
109100
.buffer();
110101
};
111102

112-
exports.splitBuffer = function(u8, chunks) {
113-
var results = [];
114-
for (var i = 0; i < chunks.length; ++i) {
115-
var chunkLength = chunks[i];
103+
exports.splitBuffer = (u8Opt, chunks) => {
104+
let u8 = u8Opt;
105+
const results = [];
106+
for (const chunkLength of chunks) {
116107
if (u8.length < chunkLength) {
117108
throw new Error('need bigger buffer to produce chunks');
118109
}
119110
results.push(u8.subarray(0, chunkLength));
120111
u8 = u8.subarray(chunkLength);
121112
}
122113

123-
if (u8.length > 0) {
124-
results.push(u8);
125-
}
114+
if (u8.length > 0) results.push(u8);
126115

127116
return results;
128117
};
129118

130-
exports.makeBuffer = function(length, firstValue) {
131-
firstValue = firstValue || 0;
132-
var u8 = new Uint8Array(length);
133-
for (var i = 0; i < u8.length; ++i) {
134-
u8[i] = firstValue++;
135-
}
119+
exports.makeBuffer = (length, firstValueOpt = 0) => {
120+
let firstValue = firstValueOpt;
121+
const u8 = new Uint8Array(length);
122+
for (let i = 0; i < u8.length; ++i) u8[i] = firstValue++;
136123
return u8;
137124
};
138125

139-
exports.buffersEqual = function(a, b) {
140-
if (!(a instanceof Uint8Array) || !(b instanceof Uint8Array)) {
141-
return false;
142-
}
143-
144-
if (a.length !== b.length) {
145-
return false;
146-
}
126+
exports.buffersEqual = (a, b) => {
127+
if (!(a instanceof Uint8Array) || !(b instanceof Uint8Array)) return false;
128+
if (a.length !== b.length) return false;
147129

148-
for (var i = 0; i < a.length; ++i) {
149-
if (a[i] !== b[i]) {
150-
return false;
151-
}
152-
}
130+
for (let i = 0; i < a.length; ++i) if (a[i] !== b[i]) return false;
153131

154132
return true;
155133
};
156134

157-
exports.makeBufferSlices = function(u8, slices) {
158-
var results = [];
159-
for (var i = 0; i < slices.length; ++i) {
160-
results.push(u8.subarray(slices[i].offset, slices[i].offset + slices[i].len));
161-
}
135+
exports.makeBufferSlices = (u8, slices) => {
136+
const results = [];
137+
for (const slice of slices) results.push(u8.subarray(slice.offset, slice.offset + slice.len));
162138
return results;
163139
};
164140

165-
exports.createFragmentedIP4 = function(opts, payloadLength, slices) {
166-
if (payloadLength < 8) {
167-
throw new Error('no space for udp header in fragmented buffers');
168-
}
141+
exports.createFragmentedIP4 = (optsOpt, payloadLength, slices) => {
142+
const opts = optsOpt;
143+
if (payloadLength < 8) throw new Error('no space for udp header in fragmented buffers');
169144

170-
var dataBuffer = exports.makeBuffer(payloadLength - 8);
171-
var udp = exports.createUDP(dataBuffer, opts);
172-
var fragments = exports.makeBufferSlices(udp, slices);
145+
const dataBuffer = exports.makeBuffer(payloadLength - 8);
146+
const udp = exports.createUDP(dataBuffer, opts);
147+
const fragments = exports.makeBufferSlices(udp, slices);
173148

174-
var ip4fragments = [];
175-
for (var i = 0; i < fragments.length; ++i) {
176-
var fragment = fragments[i];
149+
const ip4fragments = [];
150+
for (let i = 0; i < fragments.length; ++i) {
151+
const fragment = fragments[i];
177152
opts.fragmentOffsetBytes = slices[i].offset;
178153
opts.moreFragments = payloadLength !== slices[i].offset + slices[i].len;
179154
ip4fragments.push(exports.createEthernetIP4('udp', fragment, opts));

0 commit comments

Comments
 (0)