feat(smartpdf): add automatic port allocation and multi-instance support
This commit is contained in:
97
test/test.port.ts
Normal file
97
test/test.port.ts
Normal file
@@ -0,0 +1,97 @@
|
||||
import { expect, tap } from '@git.zone/tstest/tapbundle';
|
||||
import * as smartpdf from '../ts/index.js';
|
||||
|
||||
tap.test('should create multiple SmartPdf instances with automatic port allocation', async () => {
|
||||
const instance1 = new smartpdf.SmartPdf();
|
||||
const instance2 = new smartpdf.SmartPdf();
|
||||
const instance3 = new smartpdf.SmartPdf();
|
||||
|
||||
// Start all instances
|
||||
await instance1.start();
|
||||
await instance2.start();
|
||||
await instance3.start();
|
||||
|
||||
// Verify all instances have different ports
|
||||
expect(instance1.serverPort).toBeGreaterThanOrEqual(20000);
|
||||
expect(instance1.serverPort).toBeLessThanOrEqual(30000);
|
||||
expect(instance2.serverPort).toBeGreaterThanOrEqual(20000);
|
||||
expect(instance2.serverPort).toBeLessThanOrEqual(30000);
|
||||
expect(instance3.serverPort).toBeGreaterThanOrEqual(20000);
|
||||
expect(instance3.serverPort).toBeLessThanOrEqual(30000);
|
||||
|
||||
// Ensure all ports are different
|
||||
expect(instance1.serverPort).not.toEqual(instance2.serverPort);
|
||||
expect(instance1.serverPort).not.toEqual(instance3.serverPort);
|
||||
expect(instance2.serverPort).not.toEqual(instance3.serverPort);
|
||||
|
||||
console.log(`Instance 1 port: ${instance1.serverPort}`);
|
||||
console.log(`Instance 2 port: ${instance2.serverPort}`);
|
||||
console.log(`Instance 3 port: ${instance3.serverPort}`);
|
||||
|
||||
// Test that all instances work correctly
|
||||
const pdf1 = await instance1.getA4PdfResultForHtmlString('<h1>Instance 1</h1>');
|
||||
const pdf2 = await instance2.getA4PdfResultForHtmlString('<h1>Instance 2</h1>');
|
||||
const pdf3 = await instance3.getA4PdfResultForHtmlString('<h1>Instance 3</h1>');
|
||||
|
||||
expect(pdf1.buffer).toBeInstanceOf(Buffer);
|
||||
expect(pdf2.buffer).toBeInstanceOf(Buffer);
|
||||
expect(pdf3.buffer).toBeInstanceOf(Buffer);
|
||||
|
||||
// Clean up
|
||||
await instance1.stop();
|
||||
await instance2.stop();
|
||||
await instance3.stop();
|
||||
});
|
||||
|
||||
tap.test('should create SmartPdf instance with custom port range', async () => {
|
||||
const customInstance = new smartpdf.SmartPdf({
|
||||
portRangeStart: 25000,
|
||||
portRangeEnd: 26000
|
||||
});
|
||||
|
||||
await customInstance.start();
|
||||
|
||||
expect(customInstance.serverPort).toBeGreaterThanOrEqual(25000);
|
||||
expect(customInstance.serverPort).toBeLessThanOrEqual(26000);
|
||||
|
||||
console.log(`Custom range instance port: ${customInstance.serverPort}`);
|
||||
|
||||
await customInstance.stop();
|
||||
});
|
||||
|
||||
tap.test('should create SmartPdf instance with specific port', async () => {
|
||||
const specificPortInstance = new smartpdf.SmartPdf({
|
||||
port: 28888
|
||||
});
|
||||
|
||||
await specificPortInstance.start();
|
||||
|
||||
expect(specificPortInstance.serverPort).toEqual(28888);
|
||||
|
||||
console.log(`Specific port instance: ${specificPortInstance.serverPort}`);
|
||||
|
||||
await specificPortInstance.stop();
|
||||
});
|
||||
|
||||
tap.test('should throw error when specific port is already in use', async () => {
|
||||
const instance1 = new smartpdf.SmartPdf({ port: 29999 });
|
||||
await instance1.start();
|
||||
|
||||
const instance2 = new smartpdf.SmartPdf({ port: 29999 });
|
||||
|
||||
let errorThrown = false;
|
||||
try {
|
||||
await instance2.start();
|
||||
} catch (error) {
|
||||
errorThrown = true;
|
||||
expect(error.message).toInclude('already in use');
|
||||
}
|
||||
|
||||
expect(errorThrown).toBeTrue();
|
||||
|
||||
await instance1.stop();
|
||||
});
|
||||
|
||||
|
||||
|
||||
export default tap.start();
|
@@ -1,4 +1,4 @@
|
||||
import { expect, tap } from '@push.rocks/tapbundle';
|
||||
import { expect, tap } from '@git.zone/tstest/tapbundle';
|
||||
import * as smartpdf from '../ts/index.js';
|
||||
import * as fs from 'fs';
|
||||
import * as path from 'path';
|
||||
|
Reference in New Issue
Block a user