test: update
This commit is contained in:
parent
1d33d04d84
commit
587ea3cac3
@ -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);
|
||||
});
|
||||
|
9
src/presets/__tests__/index.test.js
Normal file
9
src/presets/__tests__/index.test.js
Normal file
@ -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();
|
||||
});
|
||||
|
Loading…
Reference in New Issue
Block a user