anyproxy/test/lib/httpsServerMgr.spec.js
2020-01-23 11:02:23 +08:00

68 lines
2.3 KiB
JavaScript

const tls = require('tls');
const httpsServerMgr = require('../../lib/httpsServerMgr');
describe('httpsServerMgr', () => {
let serverMgrInstance;
beforeAll(async () => {
serverMgrInstance = new httpsServerMgr({
hostname: '127.0.0.1',
handler: (req, res) => {
res.end('hello world');
},
wsHandler: () => { },
});
});
afterAll(async () => {
await serverMgrInstance.close();
});
it('SNI server should work properly', async () => {
const sniServerA = await serverMgrInstance.getSharedHttpsServer('a.anyproxy.io');
const sniServerB = await serverMgrInstance.getSharedHttpsServer('b.anyproxy.io');
expect(sniServerA).toEqual(sniServerB); // SNI - common server
const connectHostname = 'some_new_host.anyproxy.io';
const connectOpt = {
servername: connectHostname, // servername is required for sni server
rejectUnauthorized: false,
}
await new Promise((resolve, reject) => {
const socketToSNIServer = tls.connect(sniServerA.port, '127.0.0.1', connectOpt, (tlsSocket) => {
// console.log('client to SNI server connected, ', socketToSNIServer.authorized ? 'authorized' : 'unauthorized');
const certSubject = socketToSNIServer.getPeerCertificate().subject;
expect(certSubject.CN).toEqual(connectHostname);
socketToSNIServer.end();
resolve();
});
socketToSNIServer.on('keylog', line => {
console.log(line);
})
});
});
it('IP server should work properly', async () => {
const ipServerHost = '1.2.3.4';
const anotherSNIServer = await serverMgrInstance.getSharedHttpsServer('c.anyproxy.io');
const ipServerA = await serverMgrInstance.getSharedHttpsServer(ipServerHost);
const ipServerB = await serverMgrInstance.getSharedHttpsServer('5.6.7.8');
expect(ipServerA).not.toEqual(ipServerB);
expect(anotherSNIServer).not.toEqual(ipServerA);
const connectOpt = {
rejectUnauthorized: false,
}
await new Promise((resolve, reject) => {
const socketToIpServer = tls.connect(ipServerA.port, '127.0.0.1', connectOpt, () => {
const certSubject = socketToIpServer.getPeerCertificate().subject;
expect(certSubject.CN).toEqual(ipServerHost);
socketToIpServer.end();
resolve();
});
});
});
});