2018-06-28 18:33:37 +02:00
|
|
|
import path from 'path';
|
2020-07-01 01:05:29 +08:00
|
|
|
import os from 'os';
|
|
|
|
import fs from 'fs';
|
2020-08-11 07:21:51 +02:00
|
|
|
import selfsigned from 'selfsigned';
|
2018-06-28 18:33:37 +02:00
|
|
|
|
2020-03-03 23:59:19 +01:00
|
|
|
import { configExample } from '@verdaccio/mock';
|
2020-11-05 23:22:09 +01:00
|
|
|
import { parseConfigFile } from '@verdaccio/config';
|
2020-03-03 23:59:19 +01:00
|
|
|
|
|
|
|
import { startVerdaccio } from '../src';
|
2020-11-15 11:14:09 +01:00
|
|
|
import { DEFAULT_DOMAIN, DEFAULT_PROTOCOL } from '../src/cli-utils';
|
2021-02-14 20:56:43 +01:00
|
|
|
const mockProcess = require('jest-mock-process');
|
2018-01-17 22:29:00 +01:00
|
|
|
|
|
|
|
describe('startServer via API', () => {
|
2019-06-19 09:00:48 +02:00
|
|
|
const parseConfigurationFile = (name) => {
|
2020-03-03 23:59:19 +01:00
|
|
|
return parseConfigFile(path.join(__dirname, `./partials/config/yaml/${name}.yaml`));
|
2019-06-19 09:00:48 +02:00
|
|
|
};
|
|
|
|
|
2018-01-17 22:29:00 +01:00
|
|
|
describe('startServer launcher', () => {
|
2018-09-22 12:54:21 +02:00
|
|
|
test('should provide all HTTP server data', async (done) => {
|
2018-01-17 22:29:00 +01:00
|
|
|
const store = path.join(__dirname, 'partials/store');
|
2018-06-28 18:33:37 +02:00
|
|
|
const serverName = 'verdaccio-test';
|
|
|
|
const version = '1.0.0';
|
|
|
|
const port = '6000';
|
2018-01-17 22:29:00 +01:00
|
|
|
|
2020-09-17 06:48:16 +02:00
|
|
|
await startVerdaccio(
|
|
|
|
configExample(),
|
|
|
|
port,
|
|
|
|
store,
|
|
|
|
version,
|
|
|
|
serverName,
|
|
|
|
(webServer, addrs, pkgName, pkgVersion) => {
|
|
|
|
expect(webServer).toBeDefined();
|
|
|
|
expect(addrs).toBeDefined();
|
|
|
|
expect(addrs.proto).toBe(DEFAULT_PROTOCOL);
|
|
|
|
expect(addrs.host).toBe(DEFAULT_DOMAIN);
|
|
|
|
expect(addrs.port).toBe(port);
|
|
|
|
expect(pkgName).toBeDefined();
|
|
|
|
expect(pkgVersion).toBeDefined();
|
|
|
|
expect(pkgVersion).toBe(version);
|
|
|
|
expect(pkgName).toBe(serverName);
|
|
|
|
done();
|
|
|
|
}
|
|
|
|
);
|
2018-01-17 22:29:00 +01:00
|
|
|
});
|
|
|
|
|
2019-06-19 09:00:48 +02:00
|
|
|
test('should set keepAliveTimeout to 0 seconds', async (done) => {
|
|
|
|
const store = path.join(__dirname, 'partials/store');
|
|
|
|
const serverName = 'verdaccio-test';
|
|
|
|
const version = '1.0.0';
|
|
|
|
const port = '6100';
|
|
|
|
|
2020-08-13 23:27:00 +02:00
|
|
|
await startVerdaccio(
|
|
|
|
configExample(parseConfigurationFile('server/keepalivetimeout-0')),
|
|
|
|
port,
|
|
|
|
store,
|
|
|
|
version,
|
|
|
|
serverName,
|
2020-03-03 23:59:19 +01:00
|
|
|
(webServer, addrs, pkgName, pkgVersion) => {
|
|
|
|
expect(webServer).toBeDefined();
|
|
|
|
expect(webServer.keepAliveTimeout).toBeDefined();
|
|
|
|
expect(webServer.keepAliveTimeout).toBe(0);
|
|
|
|
expect(addrs).toBeDefined();
|
|
|
|
expect(addrs.proto).toBe(DEFAULT_PROTOCOL);
|
|
|
|
expect(addrs.host).toBe(DEFAULT_DOMAIN);
|
|
|
|
expect(addrs.port).toBe(port);
|
|
|
|
expect(pkgName).toBeDefined();
|
|
|
|
expect(pkgVersion).toBeDefined();
|
|
|
|
expect(pkgVersion).toBe(version);
|
|
|
|
expect(pkgName).toBe(serverName);
|
|
|
|
done();
|
2020-08-13 23:27:00 +02:00
|
|
|
}
|
|
|
|
);
|
2019-06-19 09:00:48 +02:00
|
|
|
});
|
|
|
|
|
|
|
|
test('should set keepAliveTimeout to 60 seconds', async (done) => {
|
|
|
|
const store = path.join(__dirname, 'partials/store');
|
|
|
|
const serverName = 'verdaccio-test';
|
|
|
|
const version = '1.0.0';
|
|
|
|
const port = '6200';
|
|
|
|
|
2020-08-13 23:27:00 +02:00
|
|
|
await startVerdaccio(
|
|
|
|
configExample(parseConfigurationFile('server/keepalivetimeout-60')),
|
|
|
|
port,
|
|
|
|
store,
|
|
|
|
version,
|
|
|
|
serverName,
|
2020-03-03 23:59:19 +01:00
|
|
|
(webServer, addrs, pkgName, pkgVersion) => {
|
|
|
|
expect(webServer).toBeDefined();
|
|
|
|
expect(webServer.keepAliveTimeout).toBeDefined();
|
|
|
|
expect(webServer.keepAliveTimeout).toBe(60000);
|
|
|
|
expect(addrs).toBeDefined();
|
|
|
|
expect(addrs.proto).toBe(DEFAULT_PROTOCOL);
|
|
|
|
expect(addrs.host).toBe(DEFAULT_DOMAIN);
|
|
|
|
expect(addrs.port).toBe(port);
|
|
|
|
expect(pkgName).toBeDefined();
|
|
|
|
expect(pkgVersion).toBeDefined();
|
|
|
|
expect(pkgVersion).toBe(version);
|
|
|
|
expect(pkgName).toBe(serverName);
|
|
|
|
done();
|
2020-08-13 23:27:00 +02:00
|
|
|
}
|
|
|
|
);
|
2019-06-19 09:00:48 +02:00
|
|
|
});
|
|
|
|
|
|
|
|
test('should set keepAliveTimeout to 5 seconds per default', async (done) => {
|
|
|
|
const store = path.join(__dirname, 'partials/store');
|
|
|
|
const serverName = 'verdaccio-test';
|
|
|
|
const version = '1.0.0';
|
|
|
|
const port = '6300';
|
|
|
|
|
2020-08-13 23:27:00 +02:00
|
|
|
await startVerdaccio(
|
|
|
|
configExample(parseConfigurationFile('server/keepalivetimeout-undefined')),
|
|
|
|
port,
|
|
|
|
store,
|
|
|
|
version,
|
|
|
|
serverName,
|
2020-03-03 23:59:19 +01:00
|
|
|
(webServer, addrs, pkgName, pkgVersion) => {
|
|
|
|
expect(webServer).toBeDefined();
|
|
|
|
expect(webServer.keepAliveTimeout).toBeDefined();
|
|
|
|
expect(webServer.keepAliveTimeout).toBe(5000);
|
|
|
|
expect(addrs).toBeDefined();
|
|
|
|
expect(addrs.proto).toBe(DEFAULT_PROTOCOL);
|
|
|
|
expect(addrs.host).toBe(DEFAULT_DOMAIN);
|
|
|
|
expect(addrs.port).toBe(port);
|
|
|
|
expect(pkgName).toBeDefined();
|
|
|
|
expect(pkgVersion).toBeDefined();
|
|
|
|
expect(pkgVersion).toBe(version);
|
|
|
|
expect(pkgName).toBe(serverName);
|
|
|
|
done();
|
2020-08-13 23:27:00 +02:00
|
|
|
}
|
|
|
|
);
|
2019-06-19 09:00:48 +02:00
|
|
|
});
|
|
|
|
|
2020-03-03 23:59:19 +01:00
|
|
|
test('should provide all HTTPS server fails', async (done) => {
|
2021-02-14 20:56:43 +01:00
|
|
|
let mockExit = mockProcess.mockProcessExit();
|
2018-09-22 12:54:21 +02:00
|
|
|
const store = path.join(__dirname, 'partials/store');
|
|
|
|
const serverName = 'verdaccio-test';
|
|
|
|
const version = '1.0.0';
|
|
|
|
const address = 'https://www.domain.com:443';
|
|
|
|
|
2021-02-14 20:56:43 +01:00
|
|
|
const conf = configExample({});
|
2018-09-22 12:54:21 +02:00
|
|
|
conf.https = {};
|
|
|
|
// save process to catch exist
|
2020-03-03 23:59:19 +01:00
|
|
|
await startVerdaccio(conf, address, store, version, serverName, () => {
|
2021-02-14 20:56:43 +01:00
|
|
|
expect(mockExit).toHaveBeenCalledWith(2);
|
2020-03-03 23:59:19 +01:00
|
|
|
done();
|
2018-09-22 12:54:21 +02:00
|
|
|
});
|
|
|
|
});
|
|
|
|
|
2020-07-01 01:05:29 +08:00
|
|
|
test('should start a https server with key and cert', async (done) => {
|
|
|
|
const store = path.join(__dirname, 'partials/store');
|
|
|
|
const serverName = 'verdaccio-test';
|
|
|
|
const version = '1.0.0';
|
|
|
|
const address = 'https://www.domain.com:443';
|
|
|
|
const { private: key, cert } = selfsigned.generate();
|
|
|
|
const keyPath = path.join(os.tmpdir(), 'key.pem');
|
|
|
|
const certPath = path.join(os.tmpdir(), 'crt.pem');
|
|
|
|
fs.writeFileSync(keyPath, key);
|
|
|
|
fs.writeFileSync(certPath, cert);
|
|
|
|
|
2020-07-03 23:38:49 +02:00
|
|
|
const conf = configExample();
|
2020-07-01 01:05:29 +08:00
|
|
|
conf.https = {
|
|
|
|
key: keyPath,
|
2021-03-26 18:04:19 +01:00
|
|
|
cert: certPath,
|
2020-07-01 01:05:29 +08:00
|
|
|
};
|
|
|
|
|
2020-08-13 23:27:00 +02:00
|
|
|
await startVerdaccio(conf, address, store, version, serverName, (webServer, addrs) => {
|
|
|
|
expect(webServer).toBeDefined();
|
|
|
|
expect(addrs).toBeDefined();
|
|
|
|
expect(addrs.proto).toBe('https');
|
|
|
|
done();
|
2020-07-01 01:05:29 +08:00
|
|
|
});
|
2020-08-13 23:27:00 +02:00
|
|
|
});
|
2020-07-01 01:05:29 +08:00
|
|
|
|
2018-04-21 18:36:06 +02:00
|
|
|
test('should fails if config is missing', async () => {
|
|
|
|
try {
|
2019-07-16 08:40:01 +02:00
|
|
|
// @ts-ignore
|
2020-03-03 23:59:19 +01:00
|
|
|
await startVerdaccio();
|
2018-04-21 18:36:06 +02:00
|
|
|
} catch (e) {
|
|
|
|
expect(e.message).toEqual('config file must be an object');
|
|
|
|
}
|
2018-01-17 22:29:00 +01:00
|
|
|
});
|
|
|
|
});
|
|
|
|
});
|