[linter] manual-fix

This commit is contained in:
Sergey Konovalov
2025-08-31 00:01:32 +03:00
parent 412dd8848d
commit 7a930a9af2
4 changed files with 62 additions and 77 deletions

View File

@ -31,7 +31,6 @@
*/ */
const {describe, test, expect, afterAll, beforeAll} = require('@jest/globals'); const {describe, test, expect, afterAll, beforeAll} = require('@jest/globals');
const http = require('http');
const {signToken} = require('../../../DocService/sources/DocsCoServer'); const {signToken} = require('../../../DocService/sources/DocsCoServer');
const storage = require('../../../Common/sources/storage/storage-base'); const storage = require('../../../Common/sources/storage/storage-base');
@ -62,49 +61,45 @@ const testFilesNames = {
getList: 'DocService-DocsCoServer-forgottenFilesCommands-getForgottenList-integration-test' getList: 'DocService-DocsCoServer-forgottenFilesCommands-getForgottenList-integration-test'
}; };
function makeRequest(requestBody, timeout = 5000) { /**
return new Promise(async (resolve, reject) => { * Makes HTTP request to the command service
const timer = setTimeout(() => reject('Request timeout'), timeout); * @param {Object} requestBody - Request payload
* @param {number} timeout - Request timeout in milliseconds
* @returns {Promise<string>} Response data
*/
async function makeRequest(requestBody, timeout = 5000) {
let body = '';
if (cfgTokenEnableRequestOutbox) {
const secret = utils.getSecretByElem(cfgSecretOutbox);
const token = await signToken(ctx, requestBody, cfgTokenAlgorithm, cfgTokenOutboxExpires, constants.c_oAscSecretType.Inbox, secret);
body = JSON.stringify({token});
} else {
body = JSON.stringify(requestBody);
}
let body = ''; const controller = new AbortController();
if (cfgTokenEnableRequestOutbox) { const timeoutId = setTimeout(() => controller.abort(), timeout);
const secret = utils.getSecretByElem(cfgSecretOutbox);
const token = await signToken(ctx, requestBody, cfgTokenAlgorithm, cfgTokenOutboxExpires, constants.c_oAscSecretType.Inbox, secret);
body = JSON.stringify({token});
} else {
body = JSON.stringify(requestBody);
}
const options = { try {
port: '8000', const response = await fetch('http://localhost:8000/coauthoring/CommandService.ashx', {
path: '/coauthoring/CommandService.ashx',
method: 'POST', method: 'POST',
headers: { headers: {
'Content-Type': 'application/json', 'Content-Type': 'application/json',
'Content-Length': Buffer.byteLength(body) 'Content-Length': Buffer.byteLength(body).toString()
} },
}; body,
const request = http.request(options, response => { signal: controller.signal
response.setEncoding('utf8');
let data = '';
response.on('data', chunk => {
data += chunk;
});
response.on('end', () => {
resolve(data);
clearTimeout(timer);
});
}); });
request.on('error', error => { clearTimeout(timeoutId);
reject(error); return await response.text();
clearTimeout(timer); } catch (error) {
}); clearTimeout(timeoutId);
if (error.name === 'AbortError') {
request.write(body); throw new Error('Request timeout');
request.end(); }
}); throw error;
}
} }
function getKeysDirectories(keys) { function getKeysDirectories(keys) {

View File

@ -242,7 +242,7 @@ function runTestForDir(ctx, isMultitenantMode, specialDir) {
expect(outputText.toString('utf8')).toEqual(testFileData3); expect(outputText.toString('utf8')).toEqual(testFileData3);
}); });
test('getSignedUrl', async () => { test('getSignedUrl', async () => {
let url, urls, data; let url, data;
url = await storage.getSignedUrl(ctx, baseUrl, testFile1, urlType, undefined, undefined, specialDir); url = await storage.getSignedUrl(ctx, baseUrl, testFile1, urlType, undefined, undefined, specialDir);
data = await request(url); data = await request(url);
expect(data).toEqual(testFileData1); expect(data).toEqual(testFileData1);
@ -260,27 +260,24 @@ function runTestForDir(ctx, isMultitenantMode, specialDir) {
expect(data).toEqual(testFileData4); expect(data).toEqual(testFileData4);
}); });
test('getSignedUrls', async () => { test('getSignedUrls', async () => {
let urls, data; const urls = await storage.getSignedUrls(ctx, baseUrl, testDir, urlType, undefined, specialDir);
urls = await storage.getSignedUrls(ctx, baseUrl, testDir, urlType, undefined, specialDir); const data = [];
data = [];
for (const i in urls) { for (const i in urls) {
data.push(await request(urls[i])); data.push(await request(urls[i]));
} }
expect(data.sort()).toEqual([testFileData1, testFileData2, testFileData3, testFileData4].sort()); expect(data.sort()).toEqual([testFileData1, testFileData2, testFileData3, testFileData4].sort());
}); });
test('getSignedUrlsArrayByArray', async () => { test('getSignedUrlsArrayByArray', async () => {
let urls, data; const urls = await storage.getSignedUrlsArrayByArray(ctx, baseUrl, [testFile1, testFile2], urlType, specialDir);
urls = await storage.getSignedUrlsArrayByArray(ctx, baseUrl, [testFile1, testFile2], urlType, specialDir); const data = [];
data = [];
for (let i = 0; i < urls.length; ++i) { for (let i = 0; i < urls.length; ++i) {
data.push(await request(urls[i])); data.push(await request(urls[i]));
} }
expect(data.sort()).toEqual([testFileData1, testFileData2].sort()); expect(data.sort()).toEqual([testFileData1, testFileData2].sort());
}); });
test('getSignedUrlsByArray', async () => { test('getSignedUrlsByArray', async () => {
let urls, data; const urls = await storage.getSignedUrlsByArray(ctx, baseUrl, [testFile3, testFile4], undefined, urlType, specialDir);
urls = await storage.getSignedUrlsByArray(ctx, baseUrl, [testFile3, testFile4], undefined, urlType, specialDir); const data = [];
data = [];
for (const i in urls) { for (const i in urls) {
data.push(await request(urls[i])); data.push(await request(urls[i]));
} }
@ -361,32 +358,30 @@ describe('storage mix common and forgotten dir', () => {
tenantManager.setMultitenantMode(false); tenantManager.setMultitenantMode(false);
let buffer = Buffer.from(testFileData1); let buffer = Buffer.from(testFileData1);
let res = await storage.putObject(ctx, testFile1, buffer, buffer.length, specialDirCache); const res = await storage.putObject(ctx, testFile1, buffer, buffer.length, specialDirCache);
expect(res).toEqual(undefined); expect(res).toEqual(undefined);
let list = await storage.listObjects(ctx, testDir, specialDirCache); let list = await storage.listObjects(ctx, testDir, specialDirCache);
expect(list.sort()).toEqual([testFile1].sort()); expect(list.sort()).toEqual([testFile1].sort());
buffer = Buffer.from(testFileData2); buffer = Buffer.from(testFileData2);
res = await storage.putObject(ctx, testFile2, buffer, buffer.length, specialDirForgotten); const res2 = await storage.putObject(ctx, testFile2, buffer, buffer.length, specialDirForgotten);
expect(res).toEqual(undefined); expect(res2).toEqual(undefined);
list = await storage.listObjects(ctx, testDir, specialDirForgotten); list = await storage.listObjects(ctx, testDir, specialDirForgotten);
expect(list.sort()).toEqual([testFile2].sort()); expect(list.sort()).toEqual([testFile2].sort());
}); });
test('copyPath', async () => { test('copyPath', async () => {
let list, res; const res = await storage.copyPath(ctx, testDir, testDir, specialDirCache, specialDirForgotten);
res = await storage.copyPath(ctx, testDir, testDir, specialDirCache, specialDirForgotten);
expect(res).toEqual(undefined); expect(res).toEqual(undefined);
list = await storage.listObjects(ctx, testDir, specialDirForgotten); const list = await storage.listObjects(ctx, testDir, specialDirForgotten);
expect(list.sort()).toEqual([testFile1, testFile2].sort()); expect(list.sort()).toEqual([testFile1, testFile2].sort());
}); });
test('copyObject', async () => { test('copyObject', async () => {
let list, res; const res = await storage.copyObject(ctx, testFile2, testFile2, specialDirForgotten, specialDirCache);
res = await storage.copyObject(ctx, testFile2, testFile2, specialDirForgotten, specialDirCache);
expect(res).toEqual(undefined); expect(res).toEqual(undefined);
list = await storage.listObjects(ctx, testDir, specialDirCache); const list = await storage.listObjects(ctx, testDir, specialDirCache);
expect(list.sort()).toEqual([testFile1, testFile2].sort()); expect(list.sort()).toEqual([testFile1, testFile2].sort());
}); });

View File

@ -1,20 +1,16 @@
const {describe, test, expect, beforeAll, afterAll} = require('@jest/globals'); const {describe, test, expect, beforeAll, afterAll} = require('@jest/globals');
const {Writable, Readable} = require('stream'); const {Readable} = require('stream');
const {buffer} = require('node:stream/consumers'); const {buffer} = require('node:stream/consumers');
const http = require('http'); const http = require('http');
const https = require('https');
const express = require('express'); const express = require('express');
const operationContext = require('../../Common/sources/operationContext'); const operationContext = require('../../Common/sources/operationContext');
const utils = require('../../Common/sources/utils'); const utils = require('../../Common/sources/utils');
const fs = require('fs').promises;
const path = require('path');
// Create operation context for tests // Create operation context for tests
const ctx = new operationContext.Context(); const ctx = new operationContext.Context();
// Test server setup // Test server setup
let server; let server;
let testServer;
let proxyServer; let proxyServer;
const PORT = 3456; const PORT = 3456;
const BASE_URL = `http://localhost:${PORT}`; const BASE_URL = `http://localhost:${PORT}`;
@ -98,9 +94,8 @@ describe('HTTP Request Unit Tests', () => {
}); });
// Endpoint that simulates timeout // Endpoint that simulates timeout
app.get('/api/timeout', (req, res) => { app.get('/api/timeout', (_req, _res) => {
// Never send response to trigger timeout // Never send response to trigger timeout
}); });
app.use('/api/status/:code', (req, res) => { app.use('/api/status/:code', (req, res) => {
@ -116,8 +111,9 @@ describe('HTTP Request Unit Tests', () => {
app.get('/api/error', (req, res) => { app.get('/api/error', (req, res) => {
res.status(500).json({error: 'Internal Server Error'}); res.status(500).json({error: 'Internal Server Error'});
}); });
// Endpoint that simulates a slow response headers // Endpoint that simulates a slow response headers
app.get('/api/slow-headers', (req, res) => { app.get('/api/slow-headers', (_req, res) => {
// Delay sending headers // Delay sending headers
setTimeout(() => { setTimeout(() => {
res.json({success: true}); res.json({success: true});
@ -136,7 +132,7 @@ describe('HTTP Request Unit Tests', () => {
}); });
// Endpoint that simulates slow/chunked response with inactivity periods // Endpoint that simulates slow/chunked response with inactivity periods
app.get('/api/slow-body', (req, res) => { app.get('/api/slow-body', (_req, res) => {
// Send headers immediately // Send headers immediately
res.setHeader('Content-Type', 'application/json'); res.setHeader('Content-Type', 'application/json');
res.write('{"part1": "First part of the response",'); res.write('{"part1": "First part of the response",');
@ -161,12 +157,11 @@ describe('HTTP Request Unit Tests', () => {
}); });
// POST endpoint that times out // POST endpoint that times out
app.post('/api/timeout', express.json(), (req, res) => { app.post('/api/timeout', express.json(), (_req, _res) => {
// Never send response to trigger timeout // Never send response to trigger timeout
}); });
app.get('/api/binary', (req, res) => { app.get('/api/binary', (_req, res) => {
// PNG file signature as binary data // PNG file signature as binary data
const binaryData = Buffer.from([0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a]); const binaryData = Buffer.from([0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a]);
res.setHeader('content-type', 'image/png'); res.setHeader('content-type', 'image/png');
@ -175,13 +170,13 @@ describe('HTTP Request Unit Tests', () => {
}); });
// Large file endpoint // Large file endpoint
app.get('/api/large', (req, res) => { app.get('/api/large', (_req, res) => {
res.setHeader('content-type', 'application/octet-stream'); res.setHeader('content-type', 'application/octet-stream');
res.send(Buffer.alloc(2 * 1024 * 1024)); //2MB res.send(Buffer.alloc(2 * 1024 * 1024)); //2MB
}); });
// Large file endpoint with truly no content-length header // Large file endpoint with truly no content-length header
app.get('/api/large-chunked', (req, res) => { app.get('/api/large-chunked', (_req, res) => {
res.setHeader('content-type', 'application/octet-stream'); res.setHeader('content-type', 'application/octet-stream');
res.setHeader('transfer-encoding', 'chunked'); res.setHeader('transfer-encoding', 'chunked');
res.write(Buffer.alloc(2 * 1024 * 1024)); res.write(Buffer.alloc(2 * 1024 * 1024));
@ -217,7 +212,7 @@ describe('HTTP Request Unit Tests', () => {
// Setup proxy server // Setup proxy server
const proxyApp = express(); const proxyApp = express();
proxyApp.use((req, res, next) => { proxyApp.use((req, res) => {
// Record request details // Record request details
const requestInfo = { const requestInfo = {
method: req.method, method: req.method,
@ -497,7 +492,7 @@ describe('HTTP Request Unit Tests', () => {
}); });
try { try {
const result = await utils.downloadUrlPromise( await utils.downloadUrlPromise(
mockCtx, mockCtx,
`${BASE_URL}/api/redirect`, `${BASE_URL}/api/redirect`,
{wholeCycle: '5s', connectionAndInactivity: '3s'}, {wholeCycle: '5s', connectionAndInactivity: '3s'},
@ -528,7 +523,7 @@ describe('HTTP Request Unit Tests', () => {
}); });
try { try {
const result = await utils.downloadUrlPromise( await utils.downloadUrlPromise(
mockCtx, mockCtx,
`${BASE_URL}/api/redirect`, `${BASE_URL}/api/redirect`,
{wholeCycle: '5s', connectionAndInactivity: '3s'}, {wholeCycle: '5s', connectionAndInactivity: '3s'},
@ -607,7 +602,7 @@ describe('HTTP Request Unit Tests', () => {
null, null,
true true
); );
const receivedData = await buffer(stream); await buffer(stream);
throw new Error('Expected an error to be thrown'); throw new Error('Expected an error to be thrown');
} catch (error) { } catch (error) {
expect(error.code).toBe('EMSGSIZE'); expect(error.code).toBe('EMSGSIZE');
@ -623,7 +618,7 @@ describe('HTTP Request Unit Tests', () => {
null, null,
true true
); );
const receivedData = await buffer(stream); await buffer(stream);
throw new Error('Expected an error to be thrown'); throw new Error('Expected an error to be thrown');
} catch (error) { } catch (error) {
expect(error.code).toBe('EMSGSIZE'); expect(error.code).toBe('EMSGSIZE');
@ -1269,7 +1264,7 @@ describe('HTTP Request Unit Tests', () => {
try { try {
const postData = JSON.stringify({test: 'data'}); const postData = JSON.stringify({test: 'data'});
const result = await utils.postRequestPromise( await utils.postRequestPromise(
ctx, ctx,
`${BASE_URL}/api/status/205`, `${BASE_URL}/api/status/205`,
postData, postData,

View File

@ -18,7 +18,7 @@ process.env['NODE_CONFIG'] = JSON.stringify({
}); });
// Required modules // Required modules
const {describe, test, expect, beforeAll, afterAll, it, jest} = require('@jest/globals'); const {describe, expect, beforeAll, afterAll, it} = require('@jest/globals');
const http = require('http'); const http = require('http');
const operationContext = require('../../Common/sources/operationContext'); const operationContext = require('../../Common/sources/operationContext');