mirror of
https://github.com/pavlobu/deskreen.git
synced 2025-05-18 08:20:10 -07:00
test for inactiveRooms function
This commit is contained in:
parent
7ec64ce846
commit
ae2b565f47
22
app/server/inactiveRooms.spec.ts
Normal file
22
app/server/inactiveRooms.spec.ts
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
import pollForInactiveRooms from './inactiveRooms';
|
||||||
|
import getStore from './store';
|
||||||
|
|
||||||
|
const TEN_DAYS_PERIOD_IN_MILLISECONDS = 1000 * 60 * 60 * 24 * 10;
|
||||||
|
describe('Inactive rooms auto removed from store', () => {
|
||||||
|
it('should remove inactive rooms from store that are updatedAt about 10 days ago', async () => {
|
||||||
|
const store = getStore();
|
||||||
|
store.set(
|
||||||
|
'rooms',
|
||||||
|
'roomId1',
|
||||||
|
JSON.stringify({
|
||||||
|
updatedAt: Date.now() - TEN_DAYS_PERIOD_IN_MILLISECONDS,
|
||||||
|
})
|
||||||
|
);
|
||||||
|
|
||||||
|
pollForInactiveRooms();
|
||||||
|
|
||||||
|
const rooms = (await store.getAll('rooms')) || {};
|
||||||
|
// log.info(`${Object.keys(rooms).length} rooms found`);
|
||||||
|
expect(Object.keys(rooms).length).toBe(0);
|
||||||
|
});
|
||||||
|
});
|
@ -1,15 +1,9 @@
|
|||||||
/* eslint-disable no-console */
|
/* eslint-disable no-console */
|
||||||
import getStore from './store';
|
import getStore from './store';
|
||||||
import Logger from '../utils/logger';
|
|
||||||
|
|
||||||
const log = new Logger('app/server/inactive_rooms.ts');
|
|
||||||
|
|
||||||
export default async function pollForInactiveRooms() {
|
export default async function pollForInactiveRooms() {
|
||||||
const store = getStore();
|
const store = getStore();
|
||||||
|
|
||||||
log.info('Checking for inactive rooms...');
|
|
||||||
const rooms = (await store.getAll('rooms')) || {};
|
const rooms = (await store.getAll('rooms')) || {};
|
||||||
log.info(`${Object.keys(rooms).length} rooms found`);
|
|
||||||
|
|
||||||
Object.keys(rooms).forEach(async (roomId) => {
|
Object.keys(rooms).forEach(async (roomId) => {
|
||||||
const room = JSON.parse(rooms[roomId]);
|
const room = JSON.parse(rooms[roomId]);
|
||||||
@ -18,9 +12,6 @@ export default async function pollForInactiveRooms() {
|
|||||||
timeSinceUpdatedInSeconds / 60 / 60 / 24
|
timeSinceUpdatedInSeconds / 60 / 60 / 24
|
||||||
);
|
);
|
||||||
if (timeSinceUpdatedInDays > 7) {
|
if (timeSinceUpdatedInDays > 7) {
|
||||||
log.info(
|
|
||||||
`Deleting roomId ${roomId} which hasn't been used in ${timeSinceUpdatedInDays} days`
|
|
||||||
);
|
|
||||||
await store.del('rooms', roomId);
|
await store.del('rooms', roomId);
|
||||||
}
|
}
|
||||||
});
|
});
|
@ -11,17 +11,13 @@ import koaSend from 'koa-send';
|
|||||||
import getPort from 'get-port';
|
import getPort from 'get-port';
|
||||||
// eslint-disable-next-line import/no-cycle
|
// eslint-disable-next-line import/no-cycle
|
||||||
import Socket from './socket';
|
import Socket from './socket';
|
||||||
import pollForInactiveRooms from './inactive_rooms';
|
import pollForInactiveRooms from './inactiveRooms';
|
||||||
import getStore from './store';
|
import getStore from './store';
|
||||||
|
|
||||||
import Logger from '../utils/logger';
|
import Logger from '../utils/logger';
|
||||||
|
|
||||||
const log = new Logger('app/server/index.ts');
|
const log = new Logger('app/server/index.ts');
|
||||||
|
|
||||||
// const log = (...args) => {
|
|
||||||
// logger.
|
|
||||||
// };
|
|
||||||
|
|
||||||
let isDev;
|
let isDev;
|
||||||
try {
|
try {
|
||||||
// eslint-disable-next-line global-require
|
// eslint-disable-next-line global-require
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
/* eslint-disable no-async-promise-executor */
|
/* eslint-disable no-async-promise-executor */
|
||||||
import regeneratorRuntime from 'regenerator-runtime';
|
|
||||||
import _ from 'lodash';
|
import _ from 'lodash';
|
||||||
import Io from 'socket.io';
|
import Io from 'socket.io';
|
||||||
// eslint-disable-next-line import/no-cycle
|
// eslint-disable-next-line import/no-cycle
|
||||||
|
@ -1,21 +1,19 @@
|
|||||||
/* eslint-disable @typescript-eslint/no-explicit-any */
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
||||||
/**
|
|
||||||
* Memory store more for testing purpose than production use.
|
/*
|
||||||
*/
|
* got original code from darkwire.io
|
||||||
|
* translated code to typescript for Deskreen
|
||||||
|
* */
|
||||||
|
|
||||||
interface MemoryStoreParams {
|
interface MemoryStoreParams {
|
||||||
store: any;
|
store: unknown;
|
||||||
hasSocketAdapter: boolean;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
class MemoryStore implements MemoryStoreParams {
|
class MemoryStore implements MemoryStoreParams {
|
||||||
store: any;
|
store: any;
|
||||||
|
|
||||||
hasSocketAdapter: boolean;
|
|
||||||
|
|
||||||
constructor() {
|
constructor() {
|
||||||
this.store = {};
|
this.store = {};
|
||||||
this.hasSocketAdapter = false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
async get(key: string, field: any) {
|
async get(key: string, field: any) {
|
||||||
|
@ -1,4 +0,0 @@
|
|||||||
// eslint-disable-next-line import/prefer-default-export
|
|
||||||
export function sanitize(str: string) {
|
|
||||||
return str.replace(/[^A-Za-z0-9]/g, '-');
|
|
||||||
}
|
|
@ -1,7 +0,0 @@
|
|||||||
import { sanitize } from './index';
|
|
||||||
|
|
||||||
test('sanitizes should strip bad characters', () => {
|
|
||||||
expect(sanitize('d@rkW1r# e is L3git&&!&*A*')).toBe(
|
|
||||||
'd-rkW1r--e-is-L3git-----A-'
|
|
||||||
);
|
|
||||||
});
|
|
@ -6,7 +6,7 @@ log.transports.file.level = 'warn';
|
|||||||
if (process.env.NODE_ENV !== 'production') {
|
if (process.env.NODE_ENV !== 'production') {
|
||||||
log.transports.console.level = 'silly';
|
log.transports.console.level = 'silly';
|
||||||
} else {
|
} else {
|
||||||
log.transports.console.level = 'silly'; // TODO: make false when doing release
|
log.transports.console.level = 'debug'; // TODO: make false when doing release
|
||||||
}
|
}
|
||||||
|
|
||||||
export default class LoggerWithFilePrefix {
|
export default class LoggerWithFilePrefix {
|
||||||
|
@ -1,15 +0,0 @@
|
|||||||
import getPort from 'get-port';
|
|
||||||
|
|
||||||
export function shuffle(array: number[]) {
|
|
||||||
array.sort(() => Math.random() - 0.5);
|
|
||||||
}
|
|
||||||
|
|
||||||
export default async (): Promise<number> => {
|
|
||||||
let res = 3131;
|
|
||||||
const range = Array.from(getPort.makeRange(2000, 9999));
|
|
||||||
shuffle(range);
|
|
||||||
res = await getPort({
|
|
||||||
port: range,
|
|
||||||
});
|
|
||||||
return res;
|
|
||||||
};
|
|
@ -1,18 +0,0 @@
|
|||||||
/* eslint-disable no-console */
|
|
||||||
import socketIO from 'socket.io-client';
|
|
||||||
import generateUrl from '../api/generator';
|
|
||||||
|
|
||||||
let socket: SocketIOClient.Socket;
|
|
||||||
|
|
||||||
export const connect = (roomId: string) => {
|
|
||||||
socket = socketIO(generateUrl(), {
|
|
||||||
query: {
|
|
||||||
roomId,
|
|
||||||
},
|
|
||||||
forceNew: true,
|
|
||||||
});
|
|
||||||
console.log('socket in utils', socket);
|
|
||||||
return socket;
|
|
||||||
};
|
|
||||||
|
|
||||||
export const getSocket = () => socket;
|
|
Loading…
x
Reference in New Issue
Block a user