@autofleet/node-common 1.1.9 → 1.1.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,52 @@
1
+ const tk = require('timekeeper');
2
+ const WebSocket = require('ws');
3
+ const Logger = require('../logger');
4
+
5
+ const logger = Logger();
6
+
7
+ const createWs = (host, resolve) => {
8
+ const ws = new WebSocket(`ws://${host}`);
9
+
10
+ ws.on('open', () => {
11
+ ws.send(JSON.stringify({ type: 'ping' }));
12
+ if (resolve) {
13
+ resolve(true);
14
+ }
15
+ });
16
+
17
+ ws.on('error', (error) => {
18
+ logger.error('ERROR', error);
19
+ });
20
+
21
+ ws.on('message', (data) => {
22
+ const jsonMsg = JSON.parse(data);
23
+
24
+ if (jsonMsg.type === 'freeze') {
25
+ logger.info('I know you just sent me back to the future, but I\'m back.I\'m back from the future.', { goingBackTo: jsonMsg.time });
26
+ tk.freeze(new Date(jsonMsg.time));
27
+ } else if (jsonMsg.type === 'travel') {
28
+ tk.travel(jsonMsg.time);
29
+ }
30
+ });
31
+
32
+ ws.on('close', () => {
33
+ setTimeout(() => {
34
+ if (process.env.TIME_TRAVEL_MS_SERVICE_HOST === host) {
35
+ createWs(host, null);
36
+ }
37
+ }, 500);
38
+ });
39
+ };
40
+
41
+ module.exports = () => new Promise((resolve) => {
42
+ const { TIME_TRAVEL_MS_SERVICE_HOST, SHOULD_TIME_TRAVEL } = process.env;
43
+ if (TIME_TRAVEL_MS_SERVICE_HOST && SHOULD_TIME_TRAVEL) {
44
+ logger.info('If my calculations are correct, when this baby hits 88 miles per hour... you\'re gonna see some serious shit.', {
45
+ TIME_TRAVEL_MS_SERVICE_HOST,
46
+ });
47
+
48
+ createWs(TIME_TRAVEL_MS_SERVICE_HOST, resolve);
49
+ } else {
50
+ resolve(false);
51
+ }
52
+ });
@@ -0,0 +1,105 @@
1
+ const tk = require('timekeeper');
2
+ const deloreanClient = require('./index');
3
+ const portfinder = require('portfinder');
4
+ const WebSocket = require('ws');
5
+
6
+ const { env } = process;
7
+
8
+ const createUrl = async () => {
9
+ const port = await portfinder.getPortPromise();
10
+ return {
11
+ url: `127.0.0.1:${port}`,
12
+ port,
13
+ };
14
+ };
15
+
16
+ const mockServer = (port, time, type) => {
17
+ const wss = new WebSocket.Server({ port });
18
+ let gotPing = false;
19
+
20
+ wss.on('connection', (ws) => {
21
+ ws.on('message', (message) => {
22
+ const json = JSON.parse(message);
23
+ if (json.type === 'ping') {
24
+ gotPing = true;
25
+ }
26
+ });
27
+
28
+ ws.send(JSON.stringify({
29
+ type,
30
+ time,
31
+ }));
32
+ });
33
+
34
+ return {
35
+ close: () => wss.close(),
36
+ gotPing: () => gotPing,
37
+ };
38
+ };
39
+
40
+ describe('Logger', () => {
41
+ beforeEach(() => {
42
+ tk.reset();
43
+ env.SHOULD_TIME_TRAVEL = true;
44
+ env.TIME_TRAVEL_MS_SERVICE_HOST = '';
45
+ });
46
+
47
+ afterAll(() => {
48
+ env.SHOULD_TIME_TRAVEL = false;
49
+ env.TIME_TRAVEL_MS_SERVICE_HOST = '0';
50
+ });
51
+
52
+ test('Conects to server, sends ping an freeze time', async (done) => {
53
+ const { url, port } = await createUrl();
54
+ env.TIME_TRAVEL_MS_SERVICE_HOST = url;
55
+ const mockedDate = new Date('2013-10-08 12:32:50 +0530').getTime();
56
+ const { close, gotPing } = mockServer(port, mockedDate, 'freeze');
57
+ await deloreanClient();
58
+
59
+ setTimeout(() => {
60
+ expect(Date.now()).toEqual(mockedDate);
61
+ expect(gotPing()).toBeTruthy();
62
+ close();
63
+ done();
64
+ }, 100);
65
+ });
66
+
67
+ it('Conects to server, sends ping an freeze time', async (done) => {
68
+ const { url, port } = await createUrl();
69
+ env.TIME_TRAVEL_MS_SERVICE_HOST = url;
70
+ const mockedDate = new Date('2013-10-08 12:32:50 +0530').getTime();
71
+ const { close, gotPing } = mockServer(port, mockedDate, 'travel');
72
+ await deloreanClient();
73
+
74
+ setTimeout(() => {
75
+ expect(Date.now()).toBeGreaterThan(mockedDate);
76
+ expect(Date.now()).toBeLessThan(new Date('2013-10-08 13:32:50 +0530').getTime());
77
+ expect(gotPing()).toBeTruthy();
78
+ close();
79
+ done();
80
+ }, 100);
81
+ });
82
+
83
+ it('Wont start without TIME_TRAVEL_MS_SERVICE_HOST', async () => {
84
+ const { port } = await createUrl();
85
+ delete env.TIME_TRAVEL_MS_SERVICE_HOST;
86
+ const mockedDate = new Date('2013-10-08 12:32:50 +0530').getTime();
87
+ const { close } = mockServer(port, mockedDate, 'travel');
88
+ const result = await deloreanClient();
89
+
90
+ expect(result).toBeFalsy();
91
+ close();
92
+ });
93
+
94
+ it('Wont start without SHOULD_TIME_TRAVEL', async () => {
95
+ const { url, port } = await createUrl();
96
+ env.TIME_TRAVEL_MS_SERVICE_HOST = url;
97
+ delete env.SHOULD_TIME_TRAVEL;
98
+ const mockedDate = new Date('2013-10-08 12:32:50 +0530').getTime();
99
+ const { close } = mockServer(port, mockedDate, 'travel');
100
+ const result = await deloreanClient();
101
+
102
+ expect(result).toBeFalsy();
103
+ close();
104
+ });
105
+ });
package/index.js CHANGED
@@ -1,9 +1,13 @@
1
1
  const Network = require('./network');
2
2
  const Logger = require('./logger');
3
3
  const Settings = require('./settings');
4
+ const client = require('./delorean-client');
4
5
 
5
6
  module.exports = {
6
7
  Network,
7
8
  Logger,
8
9
  Settings,
10
+ Delorean: {
11
+ client,
12
+ },
9
13
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@autofleet/node-common",
3
- "version": "1.1.9",
3
+ "version": "1.1.10",
4
4
  "description": "",
5
5
  "scripts": {
6
6
  "coverage": "jest --coverage --forceExit --runInBand",
@@ -30,9 +30,9 @@
30
30
  "node-cache": "^4.2.0",
31
31
  "portfinder": "^1.0.13",
32
32
  "qs": "^6.5.2",
33
+ "timekeeper": "^2.1.2",
33
34
  "winston": "^3.0.0-rc4",
34
- "ws": "^5.2.0",
35
- "timekeeper": "^2.1.2"
35
+ "ws": "^5.2.1"
36
36
  },
37
37
  "devDependencies": {
38
38
  "eslint": "^4.19.1",