Skip to content

test: Investigate integration test timeout #2487

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 7 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions integration/test/ParseDistTest.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ let page = null;
for (const fileName of ['parse.js', 'parse.min.js']) {
describe(`Parse Dist Test ${fileName}`, () => {
beforeEach(async () => {
console.log('beforeEach', fileName);
browser = await puppeteer.launch({
args: ['--disable-web-security', '--incognito', '--no-sandbox'],
});
Expand All @@ -16,6 +17,9 @@ for (const fileName of ['parse.js', 'parse.min.js']) {
});

afterEach(async () => {
console.log('afterEach', fileName);
console.log('page', typeof page);
console.log('browser', typeof browser);
await page.close();
await browser.close();
});
Expand Down
3 changes: 0 additions & 3 deletions integration/test/ParseEventuallyQueueTest.js
Original file line number Diff line number Diff line change
Expand Up @@ -194,7 +194,6 @@ describe('Parse EventuallyQueue', () => {
const parseServer = await reconfigureServer();
const object = new TestObject({ hash: 'saveSecret' });
await parseServer.handleShutdown();
await new Promise(resolve => parseServer.server.close(resolve));
await object.saveEventually();

const length = await Parse.EventuallyQueue.length();
Expand Down Expand Up @@ -226,7 +225,6 @@ describe('Parse EventuallyQueue', () => {
const object = new TestObject({ hash: 'saveSecret' });
object.setACL(acl);
await parseServer.handleShutdown();
await new Promise(resolve => parseServer.server.close(resolve));
await object.saveEventually();

const length = await Parse.EventuallyQueue.length();
Expand All @@ -252,7 +250,6 @@ describe('Parse EventuallyQueue', () => {
const object = new TestObject({ hash: 'deleteSecret' });
await object.save();
await parseServer.handleShutdown();
await new Promise(resolve => parseServer.server.close(resolve));
await object.destroyEventually();
const length = await Parse.EventuallyQueue.length();

Expand Down
18 changes: 10 additions & 8 deletions integration/test/ParseServerTest.js
Original file line number Diff line number Diff line change
@@ -1,26 +1,28 @@
'use strict';

const assert = require('assert');

describe('ParseServer', () => {
it('can reconfigure server', async () => {
const parseServer = await reconfigureServer({ serverURL: 'www.google.com' });
assert.strictEqual(parseServer.config.serverURL, 'www.google.com');
let parseServer = await reconfigureServer({ serverURL: 'www.google.com' });
expect(parseServer.config.serverURL).toBe('www.google.com');
await parseServer.handleShutdown();
await new Promise(resolve => parseServer.server.close(resolve));
await reconfigureServer();
parseServer = await reconfigureServer();
expect(parseServer.config.serverURL).toBe('http://localhost:1337/parse');
});

it('can shutdown', async () => {
let close = 0;
const parseServer = await reconfigureServer();
parseServer.server.on('close', () => {
close += 1;
});
const object = new TestObject({ foo: 'bar' });
await parseServer.handleShutdown();
await new Promise(resolve => parseServer.server.close(resolve));
expect(close).toBe(1);
await expectAsync(object.save()).toBeRejectedWithError(
'XMLHttpRequest failed: "Unable to connect to the Parse API"'
);
await reconfigureServer({});
await object.save();
assert(object.id);
expect(object.id).toBeDefined();
});
});
12 changes: 0 additions & 12 deletions integration/test/clear.js

This file was deleted.

36 changes: 20 additions & 16 deletions integration/test/helper.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
jasmine.DEFAULT_TIMEOUT_INTERVAL = 20000;
jasmine.DEFAULT_TIMEOUT_INTERVAL = 5000;

const { SpecReporter } = require('jasmine-spec-reporter');
jasmine.getEnv().addReporter(new SpecReporter());
Expand All @@ -7,7 +7,7 @@ const ParseServer = require('parse-server').default;
const CustomAuth = require('./CustomAuth');
const { TestUtils } = require('parse-server');
const Parse = require('../../node');
const fs = require('fs');
const fs = require('fs').promises;
const path = require('path');
const dns = require('dns');
const MockEmailAdapterWithOptions = require('./support/MockEmailAdapterWithOptions');
Expand All @@ -21,6 +21,7 @@ const port = 1337;
const mountPath = '/parse';
const serverURL = 'http://localhost:1337/parse';
let didChangeConfiguration = false;
const distFiles = {};

/*
To generate the auth data below, the Twitter app "GitHub CI Test App" has
Expand Down Expand Up @@ -97,7 +98,6 @@ let parseServer;
const reconfigureServer = async (changedConfiguration = {}) => {
if (parseServer) {
await parseServer.handleShutdown();
await new Promise(resolve => parseServer.server.close(resolve));
parseServer = undefined;
return reconfigureServer(changedConfiguration);
}
Expand All @@ -113,8 +113,7 @@ const reconfigureServer = async (changedConfiguration = {}) => {
return reconfigureServer(newConfiguration);
}
const app = parseServer.expressApp;
for (const fileName of ['parse.js', 'parse.min.js']) {
const file = fs.readFileSync(path.resolve(__dirname, `./../../dist/${fileName}`)).toString();
for (const [fileName, file] of Object.entries(distFiles)) {
app.get(`/${fileName}`, (_req, res) => {
res.send(`<html><head>
<meta charset="utf-8">
Expand All @@ -132,12 +131,6 @@ const reconfigureServer = async (changedConfiguration = {}) => {
</body></html>`);
});
}
app.get('/clear/:fast', (req, res) => {
const { fast } = req.params;
TestUtils.destroyAllDataPermanently(fast).then(() => {
res.send('{}');
});
});
parseServer.server.on('connection', connection => {
const key = `${connection.remoteAddress}:${connection.remotePort}`;
openConnections[key] = connection;
Expand All @@ -157,18 +150,29 @@ global.TestObject = Parse.Object.extend('TestObject');
global.reconfigureServer = reconfigureServer;

beforeAll(async () => {
const promise = ['parse.js', 'parse.min.js'].map(fileName => {
return fs.readFile(path.resolve(__dirname, `./../../dist/${fileName}`), 'utf8').then(file => {
distFiles[fileName] = file;
});
});
await Promise.all(promise);
await reconfigureServer();
Parse.initialize('integration');
Parse.CoreManager.set('SERVER_URL', serverURL);
Parse.CoreManager.set('MASTER_KEY', 'notsosecret');
Parse.CoreManager.set('REQUEST_ATTEMPT_LIMIT', 1);
});

afterEach(async () => {
await Parse.User.logOut();
Parse.Storage._clear();
await TestUtils.destroyAllDataPermanently(true);
if (didChangeConfiguration) {
await reconfigureServer();
try {
await Parse.User.logOut();
Parse.Storage._clear();
await TestUtils.destroyAllDataPermanently(true);
if (didChangeConfiguration) {
await reconfigureServer();
}
} catch (e) {
console.error('Failed to tear down the server', e);
}
});

Expand Down
3 changes: 1 addition & 2 deletions jasmine.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,5 @@
"spec_files": [
"*Test.js"
],
"random": true,
"timeout": 20000
"random": true
}
Loading