test-corruption-fixes.jsโข4.87 kB
#!/usr/bin/env node
import { SequentialGraphitiIntegration } from './src/core/SequentialGraphitiIntegration.js';
console.log('๐ง Testing JSON Storage Corruption Fixes\n');
async function testCorruptionFixes() {
const integration = new SequentialGraphitiIntegration();
try {
console.log('๐ Initializing system (this will repair any corrupted files)...');
await integration.initialize();
console.log('โ
System initialized successfully\n');
// Test that the file repair functionality worked
console.log('๐ Checking system stats after repair...');
const stats = await integration.factStore.getStats();
console.log(`โ
Total facts loaded: ${stats.totalFacts}`);
console.log(`โ
Facts by type: ${Object.keys(stats.factsByType).length} types`);
console.log(`โ
Facts by domain: ${Object.keys(stats.factsByDomain).length} domains\n`);
// Test safe file writing
console.log('๐พ Testing safe file writing...');
const testInsights = [
{
content: 'FileManager implements atomic writes to prevent JSON corruption',
type: 'verified_pattern',
domain: 'file-systems',
tags: ['atomic-write', 'corruption-prevention']
},
{
content: 'JSON validation and backup creation ensure data integrity',
type: 'optimization',
domain: 'data-integrity',
tags: ['validation', 'backup', 'integrity']
},
{
content: 'Concurrent write protection prevents race conditions in file storage',
type: 'debugging_solution',
domain: 'concurrency',
tags: ['race-condition', 'file-locking', 'concurrent-write']
}
];
// Test storing multiple insights rapidly (this would previously cause corruption)
console.log('โก Testing rapid concurrent writes...');
const writePromises = testInsights.map(insight =>
integration.memoryTools.storeInsight(insight)
);
const results = await Promise.all(writePromises);
console.log(`โ
Successfully stored ${results.length} insights concurrently`);
for (const result of results) {
console.log(` - ${result.factId}: Quality ${result.qualityScore}`);
}
console.log();
// Test file repair functionality
console.log('๐ง Testing file repair functionality...');
const repairResults = await integration.factStore.repairStorage();
console.log(`โ
Storage repair scan results:`);
console.log(` - Files scanned: ${repairResults.scanned}`);
console.log(` - Corrupted files found: ${repairResults.corrupted}`);
console.log(` - Files repaired: ${repairResults.repaired}`);
console.log(` - Files quarantined: ${repairResults.quarantined}\n`);
// Test semantic index integrity after repairs
console.log('๐ง Testing semantic index integrity...');
const semanticStats = integration.factStore.getSemanticStats();
console.log(`โ
Semantic index: ${semanticStats.totalDocuments} documents, ${semanticStats.vocabularySize} terms`);
// Test search functionality
const searchResult = await integration.factStore.queryFacts({
query: 'corruption prevention',
limit: 5
});
console.log(`โ
Search functionality: Found ${searchResult.facts.length} relevant facts\n`);
// Test backup and cleanup
console.log('๐งน Testing backup cleanup...');
const factsDir = integration.factStore.storageDir + '/facts';
await integration.factStore.fileManager.cleanupBackups(factsDir, 0); // Clean all backups
console.log('โ
Backup cleanup completed\n');
// Final verification
console.log('๐ Final verification...');
const finalStats = await integration.factStore.getStats();
console.log(`โ
Final system state:`);
console.log(` - Total facts: ${finalStats.totalFacts}`);
console.log(` - Average quality: ${finalStats.averageQualityScore}`);
console.log(` - System healthy: ${finalStats.totalFacts > 0 ? 'Yes' : 'No'}\n`);
console.log('๐ All corruption fix tests completed successfully!');
console.log('\n๐ Summary of fixes implemented:');
console.log(' โ
Atomic file writes to prevent corruption');
console.log(' โ
JSON validation before and after writing');
console.log(' โ
Automatic backup creation and restoration');
console.log(' โ
Concurrent write protection with queuing');
console.log(' โ
Corrupted file detection and repair');
console.log(' โ
Automatic quarantine of unrepairable files');
console.log(' โ
Backup cleanup to prevent disk bloat');
} catch (error) {
console.error('โ Error in corruption fix test:', error);
console.error('Stack trace:', error.stack);
} finally {
await integration.shutdown();
}
}
testCorruptionFixes().catch(console.error);