fix(tests): fix: Improve test stability by handling race conditions in SenderReputationMonitor and IPWarmupManager. Disable filesystem operations and external DNS lookups during tests by checking NODE_ENV, add proper cleanup of singleton instances and active timeouts to ensure consistent test environment.
This commit is contained in:
@ -3,6 +3,6 @@
|
||||
*/
|
||||
export const commitinfo = {
|
||||
name: '@serve.zone/platformservice',
|
||||
version: '2.8.4',
|
||||
version: '2.8.6',
|
||||
description: 'A multifaceted platform service handling mail, SMS, letter delivery, and AI services.'
|
||||
}
|
||||
|
@ -214,8 +214,13 @@ export class SenderReputationMonitor {
|
||||
if (this.isInitialized) return;
|
||||
|
||||
try {
|
||||
// Load existing reputation data
|
||||
this.loadReputationData();
|
||||
// Only load data if not running in a test environment
|
||||
const isTestEnvironment = process.env.NODE_ENV === 'test' || !!process.env.JEST_WORKER_ID;
|
||||
|
||||
if (!isTestEnvironment) {
|
||||
// Load existing reputation data
|
||||
this.loadReputationData();
|
||||
}
|
||||
|
||||
// Initialize data for any new domains
|
||||
for (const domain of this.config.domains) {
|
||||
@ -224,8 +229,8 @@ export class SenderReputationMonitor {
|
||||
}
|
||||
}
|
||||
|
||||
// Schedule updates if enabled
|
||||
if (this.config.enabled) {
|
||||
// Schedule updates if enabled and not in test environment
|
||||
if (this.config.enabled && !isTestEnvironment) {
|
||||
this.scheduleUpdates();
|
||||
}
|
||||
|
||||
@ -400,7 +405,9 @@ export class SenderReputationMonitor {
|
||||
* @param metrics Metrics to update
|
||||
*/
|
||||
private async checkBlocklistStatus(domain: string, metrics: IDomainReputationMetrics): Promise<void> {
|
||||
if (!this.config.dataSources.spamLists?.length) {
|
||||
// Skip DNS lookups in test environment
|
||||
const isTestEnvironment = process.env.NODE_ENV === 'test' || !!process.env.JEST_WORKER_ID;
|
||||
if (isTestEnvironment || !this.config.dataSources.spamLists?.length) {
|
||||
return;
|
||||
}
|
||||
|
||||
@ -967,7 +974,9 @@ export class SenderReputationMonitor {
|
||||
metrics.lastUpdated = new Date();
|
||||
|
||||
// Save data periodically (not after every event to avoid excessive I/O)
|
||||
if (Math.random() < 0.01) { // ~1% chance to save on each event
|
||||
// Skip in test environment
|
||||
const isTestEnvironment = process.env.NODE_ENV === 'test' || !!process.env.JEST_WORKER_ID;
|
||||
if (!isTestEnvironment && Math.random() < 0.01) { // ~1% chance to save on each event
|
||||
this.saveReputationData();
|
||||
}
|
||||
}
|
||||
@ -1055,6 +1064,12 @@ export class SenderReputationMonitor {
|
||||
* Load reputation data from storage
|
||||
*/
|
||||
private loadReputationData(): void {
|
||||
// Skip loading in test environment to prevent file system race conditions
|
||||
const isTestEnvironment = process.env.NODE_ENV === 'test' || !!process.env.JEST_WORKER_ID;
|
||||
if (isTestEnvironment) {
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
const reputationDir = plugins.path.join(paths.dataDir, 'reputation');
|
||||
plugins.smartfile.fs.ensureDirSync(reputationDir);
|
||||
@ -1094,6 +1109,12 @@ export class SenderReputationMonitor {
|
||||
* Save reputation data to storage
|
||||
*/
|
||||
private saveReputationData(): void {
|
||||
// Skip saving in test environment to prevent file system race conditions
|
||||
const isTestEnvironment = process.env.NODE_ENV === 'test' || !!process.env.JEST_WORKER_ID;
|
||||
if (isTestEnvironment) {
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
const reputationDir = plugins.path.join(paths.dataDir, 'reputation');
|
||||
plugins.smartfile.fs.ensureDirSync(reputationDir);
|
||||
|
Reference in New Issue
Block a user