61 lines
1.9 KiB
JavaScript
61 lines
1.9 KiB
JavaScript
'use strict';
|
|
|
|
const assert = require('assert');
|
|
const {
|
|
_private: {
|
|
normalizeWorkspaceRefundProxy,
|
|
normalizeWorkspaceRefundProxyList,
|
|
parseStoredSecret,
|
|
encodeStoredSecret,
|
|
maskWorkspaceRefundProxy,
|
|
},
|
|
} = require('../src/services/workspace_refund_credentials_store');
|
|
|
|
const proxy = 'socks5://proxy-user:proxy-pass@127.0.0.1:1080';
|
|
const proxy2 = 'socks5://proxy-user:proxy-pass@127.0.0.2:1080';
|
|
assert.strictEqual(normalizeWorkspaceRefundProxy(proxy), proxy);
|
|
assert.deepStrictEqual(
|
|
normalizeWorkspaceRefundProxyList(`${proxy}\n${proxy2}\n${proxy}`),
|
|
[proxy, proxy2],
|
|
'代理池应按行读取、保持顺序并自动去重',
|
|
);
|
|
assert.strictEqual(maskWorkspaceRefundProxy(proxy), 'socks5://127.0.0.1:1080');
|
|
assert.strictEqual(
|
|
maskWorkspaceRefundProxy('127.0.0.1:1080:proxy-user:proxy-pass'),
|
|
'auto://127.0.0.1:1080',
|
|
);
|
|
|
|
const encoded = encodeStoredSecret('header.payload.signature', [proxy, proxy2]);
|
|
const decoded = parseStoredSecret(encoded);
|
|
assert.deepStrictEqual(decoded, {
|
|
accessToken: 'header.payload.signature',
|
|
proxies: [proxy, proxy2],
|
|
});
|
|
|
|
assert.deepStrictEqual(
|
|
parseStoredSecret(JSON.stringify({
|
|
kind: 'workspace_refund_credentials',
|
|
version: 2,
|
|
accessToken: 'legacy-v2.header.signature',
|
|
proxy,
|
|
})),
|
|
{ accessToken: 'legacy-v2.header.signature', proxies: [proxy] },
|
|
'已有单代理加密配置必须自动迁移为代理池',
|
|
);
|
|
|
|
assert.deepStrictEqual(
|
|
parseStoredSecret('legacy.header.signature'),
|
|
{ accessToken: 'legacy.header.signature', proxies: [] },
|
|
'升级前只保存 Token 的文件必须继续兼容',
|
|
);
|
|
assert.throws(
|
|
() => normalizeWorkspaceRefundProxy('not-a-proxy'),
|
|
error => error && error.code === 'REFUND_PROXY_INVALID',
|
|
);
|
|
assert.throws(
|
|
() => normalizeWorkspaceRefundProxyList(Array.from({ length: 21 }, (_, index) => `127.0.0.${index + 1}:1080`)),
|
|
error => error && error.code === 'REFUND_PROXY_INVALID',
|
|
);
|
|
|
|
console.log('workspace_refund_credentials_store.test.js: PASS');
|