Skip to content

Winston 3 upgrade #5496

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

Merged
merged 18 commits into from
Apr 14, 2019
Merged
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
1,630 changes: 779 additions & 851 deletions package-lock.json

Large diffs are not rendered by default.

4 changes: 2 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -40,8 +40,8 @@
"semver": "6.0.0",
"tv4": "1.3.0",
"uuid": "3.3.2",
"winston": "2.4.4",
"winston-daily-rotate-file": "1.7.2",
"winston": "3.2.1",
"winston-daily-rotate-file": "3.8.0",
"ws": "6.2.1"
},
"devDependencies": {
Expand Down
92 changes: 50 additions & 42 deletions spec/AudienceRouter.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -189,52 +189,60 @@ describe('AudiencesRouter', () => {
});
});

it_exclude_dbs(['postgres'])('query installations with limit = 0 and count = 1', done => {
const config = Config.get('test');
const androidAudienceRequest = {
name: 'Android Users',
query: '{ "test": "android" }',
};
const iosAudienceRequest = {
name: 'Iphone Users',
query: '{ "test": "ios" }',
};
const request = {
config: config,
auth: auth.master(config),
body: {},
query: {
limit: 0,
count: 1,
},
info: {},
};
it_exclude_dbs(['postgres'])(
'query installations with limit = 0 and count = 1',
done => {
const config = Config.get('test');
const androidAudienceRequest = {
name: 'Android Users',
query: '{ "test": "android" }',
};
const iosAudienceRequest = {
name: 'Iphone Users',
query: '{ "test": "ios" }',
};
const request = {
config: config,
auth: auth.master(config),
body: {},
query: {
limit: 0,
count: 1,
},
info: {},
};

const router = new AudiencesRouter();
rest
.create(config, auth.nobody(config), '_Audience', androidAudienceRequest)
.then(() => {
return rest.create(
const router = new AudiencesRouter();
rest
.create(
config,
auth.nobody(config),
'_Audience',
iosAudienceRequest
);
})
.then(() => {
return router.handleFind(request);
})
.then(res => {
const response = res.response;
expect(response.results.length).toEqual(0);
expect(response.count).toEqual(2);
done();
})
.catch(err => {
fail(JSON.stringify(err));
done();
});
});
androidAudienceRequest
)
.then(() => {
return rest.create(
config,
auth.nobody(config),
'_Audience',
iosAudienceRequest
);
})
.then(() => {
return router.handleFind(request);
})
.then(res => {
const response = res.response;
expect(response.results.length).toEqual(0);
expect(response.count).toEqual(2);
done();
})
.catch(err => {
fail(JSON.stringify(err));
done();
});
}
);

it('should create, read, update and delete audiences throw api', done => {
Parse._request(
Expand Down
7 changes: 5 additions & 2 deletions spec/CloudCodeLogger.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -203,7 +203,9 @@ describe('Cloud Code Logger', () => {
.catch(() => {})
.then(() => {
const logs = spy.calls.all().reverse();
expect(logs[0].args[1]).toBe('it failed!');
expect(logs[0].args[1]).toBe('Parse error: ');
expect(logs[0].args[2].message).toBe('it failed!');

const log = logs[1].args;
expect(log[0]).toEqual('error');
expect(log[1]).toMatch(
Expand Down Expand Up @@ -268,6 +270,7 @@ describe('Cloud Code Logger', () => {
expect(spy).toHaveBeenCalled();
expect(spy.calls.count()).toBe(1);
const { args } = spy.calls.mostRecent();
expect(args[0]).toBe('Object not found.');
expect(args[0]).toBe('Parse error: ');
expect(args[1].message).toBe('Object not found.');
});
});
15 changes: 10 additions & 5 deletions spec/FilesController.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ const FilesController = require('../lib/Controllers/FilesController').default;

const mockAdapter = {
createFile: () => {
return Promise.reject(new Error('it failed'));
return Promise.reject(new Error('it failed with xyz'));
},
deleteFile: () => {},
getFileData: () => {},
Expand Down Expand Up @@ -59,13 +59,18 @@ describe('FilesController', () => {
.then(logs => {
// we get two logs here: 1. the source of the failure to save the file
// and 2 the message that will be sent back to the client.
const log1 = logs.pop();

const log1 = logs.find(
x => x.message === 'Error creating a file: it failed with xyz'
);
expect(log1.level).toBe('error');
expect(log1.message).toBe('it failed');
const log2 = logs.pop();

const log2 = logs.find(
x => x.message === 'Parse error: Could not store file: yolo.txt.'
);
expect(log2.level).toBe('error');
expect(log2.code).toBe(130);
expect(log2.message).toBe('Could not store file.');

done();
});
});
Expand Down
24 changes: 11 additions & 13 deletions spec/Logger.spec.js
Original file line number Diff line number Diff line change
@@ -1,31 +1,30 @@
const logging = require('../lib/Adapters/Logger/WinstonLogger');
const winston = require('winston');
const Transport = require('winston-transport');

class TestTransport extends winston.Transport {
log(level, msg, meta, callback) {
class TestTransport extends Transport {
log(info, callback) {
callback(null, true);
}
}

describe('Logger', () => {
describe('WinstonLogger', () => {
it('should add transport', () => {
const testTransport = new TestTransport({
name: 'test',
});
const testTransport = new TestTransport();
spyOn(testTransport, 'log');
logging.addTransport(testTransport);
expect(Object.keys(logging.logger.transports).length).toBe(4);
expect(logging.logger.transports.length).toBe(4);
logging.logger.info('hi');
expect(testTransport.log).toHaveBeenCalled();
logging.logger.error('error');
expect(testTransport.log).toHaveBeenCalled();
logging.removeTransport(testTransport);
expect(Object.keys(logging.logger.transports).length).toBe(3);
expect(logging.logger.transports.length).toBe(3);
});

it('should have files transports', done => {
reconfigureServer().then(() => {
const transports = logging.logger.transports;
const transportKeys = Object.keys(transports);
expect(transportKeys.length).toBe(3);
expect(transports.length).toBe(3);
done();
});
});
Expand All @@ -35,8 +34,7 @@ describe('Logger', () => {
logsFolder: null,
}).then(() => {
const transports = logging.logger.transports;
const transportKeys = Object.keys(transports);
expect(transportKeys.length).toBe(1);
expect(transports.length).toBe(1);
done();
});
});
Expand Down
56 changes: 52 additions & 4 deletions spec/LoggerController.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ describe('LoggerController', () => {
done();
});

it('can process an ascending query without throwing', done => {
it('can parse an ascending query without throwing', done => {
// Make mock request
const query = {
from: '2016-01-01Z00:00:00',
Expand All @@ -65,11 +65,59 @@ describe('LoggerController', () => {
done();
});

it('can process an ascending query without throwing', done => {
// Make mock request
const query = {
from: '2016-01-01Z00:00:00',
until: '2016-01-01Z00:00:00',
size: 5,
order: 'asc',
level: 'error',
};

const loggerController = new LoggerController(new WinstonLoggerAdapter());

expect(() => {
loggerController
.getLogs(query)
.then(function(res) {
expect(res.length).not.toBe(0);
done();
})
.catch(err => {
jfail(err);
fail('should not fail');
done();
});
}).not.toThrow();
});

it('can parse a descending query without throwing', done => {
// Make mock request
const query = {
from: '2016-01-01Z00:00:00',
until: '2016-01-01Z00:00:00',
size: 5,
order: 'desc',
level: 'error',
};

const result = LoggerController.parseOptions(query);

expect(result.from.getTime()).toEqual(1451606400000);
expect(result.until.getTime()).toEqual(1451606400000);
expect(result.size).toEqual(5);
expect(result.order).toEqual('desc');
expect(result.level).toEqual('error');

done();
});

it('can process a descending query without throwing', done => {
// Make mock request
const query = {
from: '2016-01-01',
until: '2016-01-30',
from: '2016-01-01Z00:00:00',
until: '2016-01-01Z00:00:00',
size: 5,
order: 'desc',
level: 'error',
Expand All @@ -81,7 +129,7 @@ describe('LoggerController', () => {
loggerController
.getLogs(query)
.then(function(res) {
expect(res.length).toBe(0);
expect(res.length).not.toBe(0);
done();
})
.catch(err => {
Expand Down
11 changes: 8 additions & 3 deletions spec/MongoStorageAdapter.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,11 @@ const { MongoClient } = require('mongodb');
const databaseURI =
'mongodb://localhost:27017/parseServerMongoAdapterTestDatabase';

const fakeClient = {
s: { options: { dbName: null } },
db: () => null,
};

// These tests are specific to the mongo storage adapter + mongo storage format
// and will eventually be moved into their own repo
describe_only_db('mongo')('MongoStorageAdapter', () => {
Expand All @@ -16,7 +21,7 @@ describe_only_db('mongo')('MongoStorageAdapter', () => {
});

it('auto-escapes symbols in auth information', () => {
spyOn(MongoClient, 'connect').and.returnValue(Promise.resolve(null));
spyOn(MongoClient, 'connect').and.returnValue(Promise.resolve(fakeClient));
new MongoStorageAdapter({
uri:
'mongodb://user!with@+ symbols:password!with@+ symbols@localhost:1234/parse',
Expand All @@ -28,7 +33,7 @@ describe_only_db('mongo')('MongoStorageAdapter', () => {
});

it("doesn't double escape already URI-encoded information", () => {
spyOn(MongoClient, 'connect').and.returnValue(Promise.resolve(null));
spyOn(MongoClient, 'connect').and.returnValue(Promise.resolve(fakeClient));
new MongoStorageAdapter({
uri:
'mongodb://user!with%40%2B%20symbols:password!with%40%2B%20symbols@localhost:1234/parse',
Expand All @@ -41,7 +46,7 @@ describe_only_db('mongo')('MongoStorageAdapter', () => {

// https://github.com/parse-community/parse-server/pull/148#issuecomment-180407057
it('preserves replica sets', () => {
spyOn(MongoClient, 'connect').and.returnValue(Promise.resolve(null));
spyOn(MongoClient, 'connect').and.returnValue(Promise.resolve(fakeClient));
new MongoStorageAdapter({
uri:
'mongodb://test:testpass@ds056315-a0.mongolab.com:59325,ds059315-a1.mongolab.com:59315/testDBname?replicaSet=rs-ds059415',
Expand Down
7 changes: 5 additions & 2 deletions spec/PushController.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -1512,7 +1512,10 @@ describe('PushController', () => {
date: noTimezone,
isLocalTime: true,
})
).toBe(`2017-09-06T${expectedHour}:14:01.048`, 'No timezone');
).toBe(
`2017-09-06T${expectedHour.toString().padStart(2, '0')}:14:01.048`,
'No timezone'
);
expect(
PushController.formatPushTime({
date: new Date('2017-09-06'),
Expand Down Expand Up @@ -1569,7 +1572,7 @@ describe('PushController', () => {
.then(pushStatus => {
expect(pushStatus.get('status')).toBe('scheduled');
expect(pushStatus.get('pushTime')).toBe(
`2017-09-06T${expectedHour}:14:01.048`
`2017-09-06T${expectedHour.toString().padStart(2, '0')}:14:01.048`
);
})
.then(done, done.fail);
Expand Down
Loading