test: update

This commit is contained in:
Micooz 2017-11-04 22:00:26 +08:00
parent 1d33d04d84
commit 587ea3cac3
10 changed files with 266 additions and 21 deletions

@ -1,4 +1,4 @@
import {IPreset, IPresetStatic} from '../defs';
import {IPreset, IPresetStatic, checkPresetClass} from '../defs';
test('IPreset#onNotified', () => {
const preset = new IPreset();
@ -14,3 +14,19 @@ test('IPresetStatic#constructor', () => {
expect(() => new IPresetStatic()).not.toThrow();
expect(() => new IPresetStatic()).toThrow();
});
test('should return false if class is not a function', () => {
expect(checkPresetClass(null)).toBe(false);
});
test('should return false if class is not meet requirements', () => {
const clazz = class A {
};
expect(checkPresetClass(clazz)).toBe(false);
});
test('should return true if class is a valid preset', () => {
const clazz = class A extends IPreset {
};
expect(checkPresetClass(clazz)).toBe(true);
});

@ -0,0 +1,9 @@
import {getPresetClassByName} from '../index';
test('should return a preset class', () => {
expect(getPresetClassByName('ss-base')).toBeDefined();
});
test('should throw if no preset class found', () => {
expect(() => getPresetClassByName('???')).toThrow();
});

@ -27,7 +27,7 @@ export class PresetRunner extends EventEmitter {
this.middleware.onDestroy();
}
async forward(data) {
async forward(data, isUdp = false) {
if (typeof data === 'string') {
data = Buffer.from(data);
}
@ -39,12 +39,13 @@ export class PresetRunner extends EventEmitter {
this.middleware.write({
direction: __IS_CLIENT__ ? PIPE_ENCODE : PIPE_DECODE,
buffer: data,
direct: resolve
direct: resolve,
isUdp
});
});
}
async backward(data) {
async backward(data, isUdp = false) {
if (typeof data === 'string') {
data = Buffer.from(data);
}
@ -56,9 +57,18 @@ export class PresetRunner extends EventEmitter {
this.middleware.write({
direction: __IS_CLIENT__ ? PIPE_DECODE : PIPE_ENCODE,
buffer: data,
direct: resolve
direct: resolve,
isUdp
});
});
}
async forwardUdp(data) {
return await this.forward(data, true);
}
async backwardUdp(data) {
return await this.backward(data, true);
}
}

@ -1,6 +1,6 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
exports[`running on client and server 1`] = `
exports[`tcp relay on client and server 1`] = `
Object {
"data": Array [
254,
@ -44,7 +44,7 @@ Object {
}
`;
exports[`running on client and server 2`] = `
exports[`tcp relay on client and server 2`] = `
Object {
"data": Array [
51,
@ -54,7 +54,7 @@ Object {
}
`;
exports[`running on client and server 3`] = `
exports[`tcp relay on client and server 3`] = `
Object {
"data": Array [
53,
@ -64,7 +64,7 @@ Object {
}
`;
exports[`running on client and server 4`] = `
exports[`tcp relay on client and server 4`] = `
Object {
"payload": Object {
"host": "example.com",
@ -75,7 +75,7 @@ Object {
}
`;
exports[`running on client and server 5`] = `
exports[`tcp relay on client and server 5`] = `
Object {
"data": Array [
49,
@ -85,7 +85,7 @@ Object {
}
`;
exports[`running on client and server 6`] = `
exports[`tcp relay on client and server 6`] = `
Object {
"data": Array [
49,
@ -95,7 +95,92 @@ Object {
}
`;
exports[`running on client and server 7`] = `
exports[`tcp relay on client and server 7`] = `
Object {
"data": Array [
51,
52,
],
"type": "Buffer",
}
`;
exports[`udp relay on client and server 1`] = `
Object {
"data": Array [
254,
185,
104,
226,
233,
140,
217,
93,
245,
246,
200,
4,
244,
255,
81,
190,
50,
72,
106,
215,
69,
80,
74,
142,
1,
39,
236,
117,
248,
80,
156,
72,
113,
182,
49,
50,
],
"type": "Buffer",
}
`;
exports[`udp relay on client and server 2`] = `
Object {
"data": Array [
51,
52,
],
"type": "Buffer",
}
`;
exports[`udp relay on client and server 3`] = `
Object {
"payload": Object {
"host": "example.com",
"onConnected": [Function],
"port": 443,
},
"type": "@action:connect_to_remote",
}
`;
exports[`udp relay on client and server 4`] = `
Object {
"data": Array [
49,
50,
],
"type": "Buffer",
}
`;
exports[`udp relay on client and server 5`] = `
Object {
"data": Array [
51,

@ -1,6 +1,6 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
exports[`running on both client and server 1`] = `
exports[`tcp relay on client and server 1`] = `
Object {
"data": Array [
18,

@ -1,6 +1,6 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
exports[`running on both client and server 1`] = `
exports[`tcp relay on client and server 1`] = `
Object {
"data": Array [
49,
@ -10,7 +10,7 @@ Object {
}
`;
exports[`running on both client and server 2`] = `
exports[`tcp relay on client and server 2`] = `
Object {
"data": Array [
51,
@ -20,7 +20,7 @@ Object {
}
`;
exports[`running on both client and server 3`] = `
exports[`tcp relay on client and server 3`] = `
Object {
"data": Array [
53,
@ -30,7 +30,7 @@ Object {
}
`;
exports[`running on both client and server 4`] = `
exports[`tcp relay on client and server 4`] = `
Object {
"data": Array [
55,
@ -39,3 +39,23 @@ Object {
"type": "Buffer",
}
`;
exports[`udp relay on client and server 1`] = `
Object {
"data": Array [
49,
50,
],
"type": "Buffer",
}
`;
exports[`udp relay on client and server 2`] = `
Object {
"data": Array [
51,
52,
],
"type": "Buffer",
}
`;

@ -1,7 +1,7 @@
import {CONNECT_TO_REMOTE} from '../../src/presets';
import {PresetRunner} from '../common';
test('running on client and server', async () => {
test('tcp relay on client and server', async () => {
let runner = new PresetRunner({
name: 'base-auth'
}, {
@ -10,6 +10,7 @@ test('running on client and server', async () => {
__IS_SERVER__: false
});
// client
runner.notify({
type: CONNECT_TO_REMOTE,
payload: {
@ -55,3 +56,48 @@ test('running on client and server', async () => {
runner.destroy();
});
test('udp relay on client and server', async () => {
let runner = new PresetRunner({
name: 'base-auth'
}, {
__KEY__: 'secret',
__IS_CLIENT__: true,
__IS_SERVER__: false
});
// client
runner.notify({
type: CONNECT_TO_REMOTE,
payload: {
host: 'example.com',
port: 443
}
});
const packet_1 = await runner.forwardUdp('12');
expect(packet_1).toMatchSnapshot();
expect(await runner.backwardUdp('34')).toMatchSnapshot();
runner.destroy();
// server
runner = new PresetRunner({
name: 'base-auth'
}, {
__KEY__: 'secret',
__IS_CLIENT__: false,
__IS_SERVER__: true
});
runner.on('broadcast', (action) => {
expect(action).toMatchSnapshot();
action.payload.onConnected();
});
expect(await runner.forwardUdp(packet_1)).toMatchSnapshot();
expect(await runner.backwardUdp('34')).toMatchSnapshot();
runner.destroy();
});

@ -1,6 +1,6 @@
import {PresetRunner} from '../common';
test('running on client and server', async () => {
test('tcp relay on client and server', async () => {
const runner = new PresetRunner({
name: 'ss-aead-cipher',
params: {
@ -30,3 +30,25 @@ test('running on client and server', async () => {
runner.destroy();
});
test('udp relay on client and server', async () => {
const runner = new PresetRunner({
name: 'ss-aead-cipher',
params: {
method: 'aes-128-gcm'
}
}, {
__KEY__: 'secret',
__IS_CLIENT__: true,
__IS_SERVER__: false
});
const packet = await runner.forwardUdp('12');
expect(packet).toHaveLength(16 + 2 + 16);
// should decrypt correctly
expect(await runner.backwardUdp(Buffer.from(packet))).toHaveLength(2);
runner.destroy();
});

@ -1,6 +1,6 @@
import {PresetRunner} from '../common';
test('running on both client and server', async () => {
test('tcp relay on client and server', async () => {
const runner = new PresetRunner({
name: 'ss-stream-cipher',
params: {
@ -27,3 +27,24 @@ test('running on both client and server', async () => {
runner.destroy();
});
test('udp relay on client and server', async () => {
const runner = new PresetRunner({
name: 'ss-stream-cipher',
params: {
method: 'rc4-md5-6'
}
}, {
__KEY__: 'secret',
__IS_CLIENT__: true,
__IS_SERVER__: false
});
expect(await runner.forwardUdp('1')).toHaveLength(6 + 1);
const iv = Buffer.alloc(6);
expect(await runner.backwardUdp(iv)).toHaveLength(0);
await expect(runner.backwardUdp('2')).rejects.toBeDefined();
runner.destroy();
});

@ -1,7 +1,7 @@
import {CONNECTION_CREATED, CONNECT_TO_REMOTE, CONNECTION_CLOSED} from '../../src/presets';
import {PresetRunner} from '../common';
test('running on both client and server', async () => {
test('tcp relay on client and server', async () => {
const runner = new PresetRunner({
name: 'tracker'
}, {
@ -25,4 +25,20 @@ test('running on both client and server', async () => {
expect(await runner.backward('78')).toMatchSnapshot();
runner.notify({type: CONNECTION_CLOSED});
runner.destroy();
});
test('udp relay on client and server', async () => {
const runner = new PresetRunner({
name: 'tracker'
}, {
__IS_CLIENT__: true,
__IS_SERVER__: false
});
expect(await runner.forwardUdp('12')).toMatchSnapshot();
expect(await runner.backwardUdp('34')).toMatchSnapshot();
runner.destroy();
});