gitoriaLog in with ident

mpackdb

All repositories: gitoria

ReadmeCodePull requestsReleasesTicketsSettings
Commit8788872587888725release 1.0.7caramboleyo87888725/tests/refresh.test.js

2.2 KB

  1. import MPackDB, { PrimaryKeyType } from '../src/MPackDB.js';
  2. import { rm } from 'fs/promises';
  3. const TEST_DB_PATH = 'db/refresh';
  4. console.log('--- Refresh Test ---');
  5. console.log('Two DB instances on the same file: one writes/deletes, the other reads.\n');
  6. await rm(TEST_DB_PATH, { recursive: true, force: true });
  7. // Instance A: the "app"
  8. const dbA = new MPackDB(`${TEST_DB_PATH}/users`, { primaryKey: '*id', indexes: ['email'] });
  9. await dbA.insert({ email: '[email protected]' });
  10. await dbA.insert({ email: '[email protected]' });
  11. await dbA.insert({ email: '[email protected]' });
  12. // Instance B: the "admin" (read-only, same files, no compaction to avoid breaking A's write stream)
  13. const dbB = new MPackDB(`${TEST_DB_PATH}/users`, { primaryKey: '*id', indexes: ['email'], compact: false });
  14. // B should see all 3
  15. const beforeDelete = await dbB.find();
  16. console.log(`B sees ${beforeDelete.length} records before delete (expected: 3)`);
  17. console.log(` ${beforeDelete.length === 3 ? '✓ PASS' : '✗ FAIL'}`);
  18. // A deletes bob
  19. await dbA.delete(r => r.email === '[email protected]');
  20. console.log('\nA deleted [email protected]');
  21. // B should now see 2 (thanks to refresh)
  22. const afterDelete = await dbB.find();
  23. console.log(`B sees ${afterDelete.length} records after delete (expected: 2)`);
  24. const emails = afterDelete.map(u => u.email);
  25. console.log(` emails: ${emails.join(', ')}`);
  26. const bobGone = !emails.includes('[email protected]');
  27. console.log(` bob gone: ${bobGone ? '✓ PASS' : '✗ FAIL — bob still visible (stale meta)'}`);
  28. // A inserts a new record
  29. await dbA.insert({ email: '[email protected]' });
  30. console.log('\nA inserted [email protected]');
  31. // B should see 3 again
  32. const afterInsert = await dbB.find();
  33. console.log(`B sees ${afterInsert.length} records after insert (expected: 3)`);
  34. const emails2 = afterInsert.map(u => u.email);
  35. console.log(` emails: ${emails2.join(', ')}`);
  36. const daveVisible = emails2.includes('[email protected]');
  37. console.log(` dave visible: ${daveVisible ? '✓ PASS' : '✗ FAIL'}`);
  38. await dbA.close();
  39. await dbB.close();
  40. const allPass = beforeDelete.length === 3 && afterDelete.length === 2 && bobGone && afterInsert.length === 3 && daveVisible;
  41. console.log(`\n${allPass ? '✓ All refresh tests passed!' : '✗ Some tests FAILED'}`);

Branches

Latest commits

  • 87888725release 1.0.7caramboleyo
  • c4cdb9b6node: import prefixes (Deno compat) + pre-existing index-state WIPcaramboleyo
  • 0afb8f4bupdate now must be a callbackcaramboleyo
  • cde73eb4release 1.0.6caramboleyo
  • d01dda02add index hints, intersection, boundingBox; remove findByIndexcaramboleyo
  • b8ffc1a0release 1.0.5caramboleyo
  • d47876a1reimplemented lost features like indexed find and more testscaramboleyo
  • 7f08da9afixed insert ignoring model definitioncaramboleyo
  • 705774a9added flush before findcaramboleyo
  • b4db6391initial commitcaramboleyo