import { DOMAIN_SERVERS, PORT_SERVER_APP } from '../config.functional'; import { API_ERROR, HEADER_TYPE, HTTP_STATUS } from '../../../src/lib/constants'; export default function (server, express) { describe('shoul test for unexpected client hangs', () => { let handleResponseTarball; beforeAll(function () { express.get('/testexp-racycrash', function (request, response) { response.send({ name: 'testexp-racycrash', versions: { '0.1.0': { name: 'testexp_tags', version: '0.1.0', dist: { shasum: 'fake', tarball: `http://${DOMAIN_SERVERS}:${PORT_SERVER_APP}/testexp-racycrash/-/test.tar.gz` } } } }); }); express.get('/testexp-racycrash/-/test.tar.gz', function (request, response) { handleResponseTarball(response); }); }); test('should not crash on error if client disconnects', (callback) => { handleResponseTarball = function (res) { res.header(HEADER_TYPE.CONTENT_LENGTH, 1e6); res.write('test test test'); setTimeout(function () { res.write('-'); // destroy the connection res.socket.destroy(); cb(); }, HTTP_STATUS.OK); }; server.request({ uri: '/testexp-racycrash/-/test.tar.gz' }).then(function (body) { expect(body).toEqual('test test test'); }); function cb() { // test for NOT crashing server .request({ uri: '/testexp-racycrash' }) .status(HTTP_STATUS.OK) .then(function () { callback(); }); } }); test('should not store tarball', () => { handleResponseTarball = function (res) { res.socket.destroy(); }; return server .request({ uri: '/testexp-racycrash/-/test.tar.gz' }) .body_error(API_ERROR.INTERNAL_SERVER_ERROR); }); }); }