Skip to content

Commit 39fa17f

Browse files
authored
Postgres: Properly initialize database on startup and debugger (#7255)
* PG: Properly initialize database * fix flaky tests * flaky test * correct test * no idea * clean up debugger
1 parent bee889a commit 39fa17f

16 files changed

+134
-117
lines changed

package-lock.json

+71-16
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

+1
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@
5050
"mongodb": "3.6.3",
5151
"mustache": "4.1.0",
5252
"parse": "3.1.0",
53+
"pg-monitor": "1.4.1",
5354
"pg-promise": "10.9.2",
5455
"pluralize": "8.0.0",
5556
"redis": "3.0.2",

spec/Auth.spec.js

+3-3
Original file line numberDiff line numberDiff line change
@@ -230,10 +230,10 @@ describe('Auth', () => {
230230
const role2 = new Parse.Role('role2loadtest' + i, acl2);
231231
role.getUsers().add([user]);
232232
role2.getUsers().add([user2]);
233-
roles.push(role.save());
234-
roles.push(role2.save());
233+
roles.push(role);
234+
roles.push(role2);
235235
}
236-
const savedRoles = await Promise.all(roles);
236+
const savedRoles = await Parse.Object.saveAll(roles);
237237
expect(savedRoles.length).toBe(rolesNumber * 2);
238238
const cloudRoles = await userAuth.getRolesForUser();
239239
const cloudRoles2 = await user2Auth.getRolesForUser();

spec/ParseAPI.spec.js

+2
Original file line numberDiff line numberDiff line change
@@ -170,6 +170,7 @@ describe('miscellaneous', function () {
170170
const config = Config.get('test');
171171
// Remove existing data to clear out unique index
172172
TestUtils.destroyAllDataPermanently()
173+
.then(() => config.database.adapter.performInitialization({ VolatileClassesSchemas: [] }))
173174
.then(() => config.database.adapter.createClass('_User', userSchema))
174175
.then(() =>
175176
config.database.adapter
@@ -210,6 +211,7 @@ describe('miscellaneous', function () {
210211
const config = Config.get('test');
211212
// Remove existing data to clear out unique index
212213
TestUtils.destroyAllDataPermanently()
214+
.then(() => config.database.adapter.performInitialization({ VolatileClassesSchemas: [] }))
213215
.then(() => config.database.adapter.createClass('_User', userSchema))
214216
.then(() =>
215217
config.database.adapter.createObject('_User', userSchema, {

spec/ParseGraphQLSchema.spec.js

-2
Original file line numberDiff line numberDiff line change
@@ -54,8 +54,6 @@ describe('ParseGraphQLSchema', () => {
5454
const graphQLSchema = await parseGraphQLSchema.load();
5555
const updatedGraphQLSchema = await parseGraphQLSchema.load();
5656
expect(graphQLSchema).toBe(updatedGraphQLSchema);
57-
await new Promise(resolve => setTimeout(resolve, 200));
58-
expect(graphQLSchema).toBe(await parseGraphQLSchema.load());
5957
});
6058

6159
it('should load a brand new GraphQL Schema if Parse Schema changes', async () => {

spec/ParseQuery.spec.js

+14-20
Original file line numberDiff line numberDiff line change
@@ -275,32 +275,26 @@ describe('Parse.Query testing', () => {
275275
});
276276
});
277277

278-
it('query with limit equal to maxlimit', function (done) {
278+
it('query with limit equal to maxlimit', async () => {
279279
const baz = new TestObject({ foo: 'baz' });
280280
const qux = new TestObject({ foo: 'qux' });
281-
reconfigureServer({ maxLimit: 1 });
282-
Parse.Object.saveAll([baz, qux]).then(function () {
283-
const query = new Parse.Query(TestObject);
284-
query.limit(1);
285-
query.find().then(function (results) {
286-
equal(results.length, 1);
287-
done();
288-
});
289-
});
281+
await reconfigureServer({ maxLimit: 1 });
282+
await Parse.Object.saveAll([baz, qux]);
283+
const query = new Parse.Query(TestObject);
284+
query.limit(1);
285+
const results = await query.find();
286+
equal(results.length, 1);
290287
});
291288

292-
it('query with limit exceeding maxlimit', function (done) {
289+
it('query with limit exceeding maxlimit', async () => {
293290
const baz = new TestObject({ foo: 'baz' });
294291
const qux = new TestObject({ foo: 'qux' });
295-
reconfigureServer({ maxLimit: 1 });
296-
Parse.Object.saveAll([baz, qux]).then(function () {
297-
const query = new Parse.Query(TestObject);
298-
query.limit(2);
299-
query.find().then(function (results) {
300-
equal(results.length, 1);
301-
done();
302-
});
303-
});
292+
await reconfigureServer({ maxLimit: 1 });
293+
await Parse.Object.saveAll([baz, qux]);
294+
const query = new Parse.Query(TestObject);
295+
query.limit(2);
296+
const results = await query.find();
297+
equal(results.length, 1);
304298
});
305299

306300
it('containedIn object array queries', function (done) {

spec/ParseServerRESTController.spec.js

-5
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ const ParseServerRESTController = require('../lib/ParseServerRESTController')
22
.ParseServerRESTController;
33
const ParseServer = require('../lib/ParseServer').default;
44
const Parse = require('parse/node').Parse;
5-
const TestUtils = require('../lib/TestUtils');
65
const semver = require('semver');
76

87
let RESTController;
@@ -183,10 +182,6 @@ describe('ParseServerRESTController', () => {
183182
}
184183
});
185184

186-
beforeEach(async () => {
187-
await TestUtils.destroyAllDataPermanently(true);
188-
});
189-
190185
it('should handle a batch request with transaction = true', done => {
191186
const myObject = new Parse.Object('MyObject'); // This is important because transaction only works on pre-existing collections
192187
myObject

spec/PostgresStorageAdapter.spec.js

+3-2
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,11 @@ const dropTable = (client, className) => {
1919

2020
describe_only_db('postgres')('PostgresStorageAdapter', () => {
2121
let adapter;
22-
beforeEach(() => {
22+
beforeEach(async () => {
2323
const config = Config.get('test');
2424
adapter = config.database.adapter;
25-
return adapter.deleteAllClasses();
25+
await adapter.deleteAllClasses();
26+
await adapter.performInitialization({ VolatileClassesSchemas: [] });
2627
});
2728

2829
it('schemaUpgrade, upgrade the database schema when schema changes', done => {

spec/Schema.spec.js

+1
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ describe('SchemaController', () => {
2828
afterEach(async () => {
2929
await config.database.schemaCache.clear();
3030
await TestUtils.destroyAllDataPermanently(false);
31+
await config.database.adapter.performInitialization({ VolatileClassesSchemas: [] });
3132
});
3233

3334
it('can validate one object', done => {

spec/batch.spec.js

-5
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
const batch = require('../lib/batch');
22
const request = require('../lib/request');
3-
const TestUtils = require('../lib/TestUtils');
43
const semver = require('semver');
54

65
const originalURL = '/parse/batch';
@@ -187,10 +186,6 @@ describe('batch', () => {
187186
}
188187
});
189188

190-
beforeEach(async () => {
191-
await TestUtils.destroyAllDataPermanently(true);
192-
});
193-
194189
it('should handle a batch request with transaction = true', done => {
195190
const myObject = new Parse.Object('MyObject'); // This is important because transaction only works on pre-existing collections
196191
myObject

spec/helper.js

+5-18
Original file line numberDiff line numberDiff line change
@@ -167,31 +167,18 @@ const reconfigureServer = changedConfiguration => {
167167
const Parse = require('parse/node');
168168
Parse.serverURL = 'http://localhost:' + port + '/1';
169169

170-
beforeEach(done => {
170+
beforeEach(async () => {
171171
try {
172172
Parse.User.enableUnsafeCurrentUser();
173173
} catch (error) {
174174
if (error !== 'You need to call Parse.initialize before using Parse.') {
175175
throw error;
176176
}
177177
}
178-
TestUtils.destroyAllDataPermanently(true)
179-
.catch(error => {
180-
// For tests that connect to their own mongo, there won't be any data to delete.
181-
if (error.message === 'ns not found' || error.message.startsWith('connect ECONNREFUSED')) {
182-
return;
183-
} else {
184-
fail(error);
185-
return;
186-
}
187-
})
188-
.then(reconfigureServer)
189-
.then(() => {
190-
Parse.initialize('test', 'test', 'test');
191-
Parse.serverURL = 'http://localhost:' + port + '/1';
192-
done();
193-
})
194-
.catch(done.fail);
178+
await reconfigureServer();
179+
180+
Parse.initialize('test', 'test', 'test');
181+
Parse.serverURL = 'http://localhost:' + port + '/1';
195182
});
196183

197184
afterEach(function (done) {

spec/schemas.spec.js

+6-1
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,7 @@ describe('schemas', () => {
147147
afterEach(async () => {
148148
await config.database.schemaCache.clear();
149149
await TestUtils.destroyAllDataPermanently(false);
150+
await config.database.adapter.performInitialization({ VolatileClassesSchemas: [] });
150151
});
151152

152153
it('requires the master key to get all schemas', done => {
@@ -2816,7 +2817,11 @@ describe('schemas', () => {
28162817
});
28172818

28182819
describe('index management', () => {
2819-
beforeEach(() => require('../lib/TestUtils').destroyAllDataPermanently());
2820+
beforeEach(async () => {
2821+
await TestUtils.destroyAllDataPermanently(false);
2822+
await config.database.adapter.performInitialization({ VolatileClassesSchemas: [] });
2823+
});
2824+
28202825
it('cannot create index if field does not exist', done => {
28212826
request({
28222827
url: 'http://localhost:8378/1/schemas/NewClass',

0 commit comments

Comments
 (0)