@natlibfi/melinda-rest-api-commons 6.2.0-alpha.0 → 6.2.0-alpha.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/README.md +165 -14
  2. package/dist/amqp.d.ts.map +1 -1
  3. package/dist/amqp.js +14 -0
  4. package/dist/amqp.js.map +1 -1
  5. package/dist/helpers/conversion.d.ts.map +1 -1
  6. package/dist/helpers/conversion.js.map +1 -1
  7. package/dist/helpers/fix-constants.d.ts.map +1 -1
  8. package/dist/helpers/fix-constants.js.map +1 -1
  9. package/dist/helpers/fix-strip-f884s.js.map +1 -1
  10. package/dist/mongo.d.ts +1 -0
  11. package/dist/mongo.d.ts.map +1 -1
  12. package/dist/mongo.js +25 -2
  13. package/dist/mongo.js.map +1 -1
  14. package/dist/mongoLog.d.ts +1 -0
  15. package/dist/mongoLog.d.ts.map +1 -1
  16. package/dist/mongoLog.js +12 -3
  17. package/dist/mongoLog.js.map +1 -1
  18. package/package.json +3 -1
  19. package/test/amqp-error-branches.test.ts +67 -9
  20. package/test/amqp.healthtest.ts +12 -8
  21. package/test/mongo-add-blob-size.test.ts +6 -0
  22. package/test/mongo-check-and-check-state.test.ts +6 -0
  23. package/test/mongo-check-and-set-import-job-state.test.ts +6 -0
  24. package/test/mongo-check-timeout.test.ts +6 -0
  25. package/test/mongo-create-bulk.test.ts +6 -0
  26. package/test/mongo-create-prio.test.ts +6 -0
  27. package/test/mongo-error-branches.test.ts +118 -18
  28. package/test/mongo-get-one.test.ts +6 -0
  29. package/test/mongo-get-stream.test.ts +6 -0
  30. package/test/mongo-push-ids.test.ts +6 -0
  31. package/test/mongo-push-messages.test.ts +6 -0
  32. package/test/mongo-query-by-id.test.ts +6 -0
  33. package/test/mongo-query.test.ts +6 -0
  34. package/test/mongo-read-content.test.ts +6 -0
  35. package/test/mongo-remove.test.ts +6 -0
  36. package/test/mongo-set-blob-size.test.ts +6 -0
  37. package/test/mongo-set-import-job-state.test.ts +6 -0
  38. package/test/mongo-set-operation.test.ts +6 -0
  39. package/test/mongo-set-operations.test.ts +6 -0
  40. package/test/mongo-set-state.test.ts +6 -0
  41. package/test/mongoLog-protect.test.ts +1 -0
  42. package/test/mongoLog.test.ts +6 -0
@@ -43,6 +43,7 @@ export interface MongoLogOperator {
43
43
  unprotect: (correlationId: string, blobSequence?: number | string) => Promise<UpdateResult>;
44
44
  remove: (correlationId: string, force?: boolean) => Promise<DeleteResult>;
45
45
  removeBySequences: (correlationId: string, sequences?: (number | string)[], force?: boolean) => Promise<DeleteResult>;
46
+ close: () => Promise<void>;
46
47
  }
47
48
  export default function (MONGO_URI: string, dbName?: string, deps?: {
48
49
  collection?: unknown;
@@ -1 +1 @@
1
- {"version":3,"file":"mongoLog.d.ts","sourceRoot":"","sources":["../src/mongoLog.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mongoLog.d.ts","sourceRoot":"","sources":["../src/mongoLog.ts"],"names":[],"mappings":"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"}
package/dist/mongoLog.js CHANGED
@@ -22,9 +22,11 @@ export default async function (MONGO_URI, dbName = 'rest-api', deps = {}) {
22
22
  }
23
23
  throw new ApiError(httpStatus.BAD_REQUEST, 'blobSequence must be a number or a numeric string');
24
24
  }
25
+ let client;
26
+ let closed = false;
25
27
  let logCollection = deps.collection;
26
28
  if (!deps.collection) {
27
- const client = await MongoClient.connect(MONGO_URI);
29
+ client = await MongoClient.connect(MONGO_URI);
28
30
  logCollection = client.db(dbName).collection(collection);
29
31
  }
30
32
  return {
@@ -38,8 +40,15 @@ export default async function (MONGO_URI, dbName = 'rest-api', deps = {}) {
38
40
  protect,
39
41
  unprotect,
40
42
  remove,
41
- removeBySequences
43
+ removeBySequences,
44
+ close
42
45
  };
46
+ async function close() {
47
+ if (closed)
48
+ return;
49
+ closed = true;
50
+ await client?.close();
51
+ }
43
52
  function isKnownLogItemType(value) {
44
53
  const knownLogItemTypes = Object.values(LOG_ITEM_TYPE);
45
54
  return knownLogItemTypes.includes(value);
@@ -128,7 +137,7 @@ export default async function (MONGO_URI, dbName = 'rest-api', deps = {}) {
128
137
  throw new ApiError(httpStatus.BAD_REQUEST, `Unknown logItemType: ${logItemType}`);
129
138
  });
130
139
  }
131
- logger.debug(`commons/getExpandedListOfLogs: logItemTypes: ${JSON.stringify(wantedLogItemTypes)}, dateAfter: ${dateAfter}, dateBefore: ${dateBefore}}, catalogers: ${JSON.stringify(catalogers)}`);
140
+ logger.debug(`commons/getExpandedListOfLogs: logItemTypes: ${JSON.stringify(wantedLogItemTypes)}, dateAfter: ${dateAfter}, dateBefore: ${dateBefore}, catalogers: ${JSON.stringify(catalogers)}`);
132
141
  logger.silly(JSON.stringify(generateMatchObject({ logItemTypes: wantedLogItemTypes, catalogers, dateBefore, dateAfter })));
133
142
  const pipeline = [
134
143
  generateMatchObject({ logItemTypes: wantedLogItemTypes, catalogers, dateBefore, dateAfter }),
@@ -1 +1 @@
1
- {"version":3,"file":"mongoLog.js","sourceRoot":"","sources":["../src/mongoLog.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mongoLog.js","sourceRoot":"","sources":["../src/mongoLog.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,WAAW,EAAC,MAAM,SAAS,CAAC;AAEpC,OAAO,UAAU,MAAM,aAAa,CAAC;AACrC,OAAO,EAAC,YAAY,EAAE,KAAK,IAAI,QAAQ,EAAC,MAAM,2BAA2B,CAAC;AAC1E,OAAO,EAAC,QAAQ,EAAE,YAAY,EAAC,MAAM,YAAY,CAAC;AAClD,OAAO,EAAC,cAAc,EAAC,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAC,aAAa,EAAC,MAAM,gBAAgB,CAAC;AAiG7C,MAAM,CAAC,OAAO,CAAC,KAAK,WAAW,SAAiB,EAAE,MAAM,GAAG,UAAU,EAAE,OAA+B,EAAE;IACtG,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;IAC9B,MAAM,UAAU,GAAG,MAAM,CAAC;IAO1B,SAAS,uBAAuB,CAAC,aAAqB,EAAE,YAA8B;QACpF,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,OAAO,EAAC,aAAa,EAAC,CAAC;QACzB,CAAC;QACD,IAAI,OAAO,YAAY,KAAK,QAAQ,EAAE,CAAC;YACrC,OAAO,EAAC,aAAa,EAAE,YAAY,EAAE,QAAQ,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,EAAE,CAAC,EAAC,CAAC;QAC3E,CAAC;QACD,IAAI,OAAO,YAAY,KAAK,QAAQ,EAAE,CAAC;YACrC,MAAM,MAAM,GAAG,QAAQ,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;YAC1C,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC1B,OAAO,EAAC,aAAa,EAAE,YAAY,EAAE,MAAM,EAAC,CAAC;YAC/C,CAAC;QACH,CAAC;QACD,MAAM,IAAI,QAAQ,CAAC,UAAU,CAAC,WAAW,EAAE,mDAAmD,CAAC,CAAC;IAClG,CAAC;IAMD,IAAI,MAA+B,CAAC;IACpC,IAAI,MAAM,GAAG,KAAK,CAAC;IACnB,IAAI,aAAa,GAAwB,IAAI,CAAC,UAAiC,CAAC;IAChF,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;QACrB,MAAM,GAAG,MAAM,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAC9C,aAAa,GAAG,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,UAAU,CAAU,UAAU,CAAC,CAAC;IACpE,CAAC;IAOD,OAAO;QACL,UAAU;QACV,KAAK,EAAE,CAAC,MAAsB,EAAE,EAAE,CAAC,cAAc,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACtE,SAAS,EAAE,CAAC,aAAqB,EAAE,WAAoB,EAAE,IAAa,EAAE,KAAc,EAAE,EAAE,CAAC,cAAc,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,aAAa,EAAE,WAAW,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;QACnK,aAAa,EAAE,CAAC,WAAoB,EAAE,EAAE,CAAC,cAAc,CAAC,GAAG,EAAE,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;QACzF,mBAAmB,EAAE,GAAG,EAAE,CAAC,cAAc,CAAC,GAAG,EAAE,CAAC,mBAAmB,EAAE,CAAC;QACtE,uBAAuB,EAAE,GAAG,EAAE,CAAC,cAAc,CAAC,GAAG,EAAE,CAAC,uBAAuB,EAAE,CAAC;QAC9E,qBAAqB,EAAE,CAAC,MAA6B,EAAE,EAAE,CAAC,cAAc,CAAC,GAAG,EAAE,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC;QAC7G,OAAO;QACP,SAAS;QACT,MAAM;QACN,iBAAiB;QACjB,KAAK;KACN,CAAC;IAMF,KAAK,UAAU,KAAK;QAClB,IAAI,MAAM;YAAE,OAAO;QACnB,MAAM,GAAG,IAAI,CAAC;QACd,MAAM,MAAM,EAAE,KAAK,EAAE,CAAC;IACxB,CAAC;IASD,SAAS,kBAAkB,CAAC,KAAa;QACvC,MAAM,iBAAiB,GAAa,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;QACjE,OAAO,iBAAiB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC3C,CAAC;IAID,KAAK,UAAU,UAAU,CAAC,OAAgB;QACxC,MAAM,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;QACxB,MAAM,UAAU,GAAG;YACjB,GAAG,OAAO;YACV,YAAY,EAAE,IAAI;YAClB,SAAS,EAAE,KAAK;SACjB,CAAC;QACF,IAAI,CAAC;YAEH,gBAAgB,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;YAC7C,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;YACzD,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;gBACxB,MAAM,EAAC,YAAY,EAAE,iBAAiB,EAAE,eAAe,EAAC,GAAG,OAAO,CAAC;gBACnE,MAAM,UAAU,GAAG,iBAAiB,IAAI,eAAe,CAAC,CAAC,CAAC,GAAG,iBAAiB,MAAM,eAAe,EAAE,CAAC,CAAC,CAAC,GAAG,YAAY,EAAE,CAAC;gBAC1H,MAAM,CAAC,IAAI,CAAC,WAAW,OAAO,CAAC,WAAW,cAAc,OAAO,CAAC,aAAa,sBAAsB,UAAU,OAAO,CAAC,CAAC;gBAEtH,OAAO;YACT,CAAC;YACD,MAAM,IAAI,QAAQ,CAAC,UAAU,CAAC,qBAAqB,EAAE,SAAS,CAAC,CAAC;QAClE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,QAAQ,GAAG,KAAiB,CAAC;YACnC,MAAM,YAAY,GAAG,QAAQ,CAAC,OAAO,IAAI,QAAQ,CAAC,OAAO,IAAI,EAAE,CAAC;YAChE,QAAQ,CAAC,KAAK,CAAC,CAAC;YAChB,MAAM,IAAI,QAAQ,CAAC,UAAU,CAAC,qBAAqB,EAAE,kBAAkB,YAAY,EAAE,CAAC,CAAC;QACzF,CAAC;IACH,CAAC;IAID,KAAK,UAAU,KAAK,CAAC,EAAC,KAAK,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,GAAG,IAAI,EAAiB;QACjE,MAAM,CAAC,KAAK,CAAC,iBAAiB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACtD,MAAM,CAAC,KAAK,CAAC,0BAA0B,KAAK,MAAM,IAAI,EAAE,CAAC,CAAC;QAG1D,gBAAgB,CAAC,IAAI,CAAC,aAAa,CAAuB,EAAE,KAAK,CAAC,CAAC;QAKnE,MAAM,MAAM,GAAG,MAAM,aAAa;aAC/B,IAAI,CAAC,IAA+B,CAAC;aACrC,IAAI,CAAC,EAAC,YAAY,EAAE,CAAC,EAAC,CAAC;aACvB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;aAChC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;aAClC,OAAO,EAAE,CAAC;QAEb,MAAM,CAAC,KAAK,CAAC,iBAAiB,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,sBAAsB,IAAI,WAAW,KAAK,GAAG,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC;QACxI,OAAO,MAAM,CAAC;IAChB,CAAC;IAOD,KAAK,UAAU,SAAS,CAAC,aAAqB,EAAE,cAAsB,aAAa,CAAC,SAAS,EAAE,IAAI,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC;QAChH,YAAY,CAAC,aAAa,EAAE,eAAe,CAAC,CAAC;QAC7C,MAAM,CAAC,KAAK,CAAC,cAAc,aAAa,kBAAkB,WAAW,WAAW,IAAI,YAAY,KAAK,EAAE,CAAC,CAAC;QACzG,MAAM,MAAM,GAAG,MAAM,aAAa;aAC/B,IAAI,CAAC,EAAC,aAAa,EAAE,WAAW,EAAC,CAAC;aAClC,IAAI,CAAC,EAAC,YAAY,EAAE,CAAC,EAAC,CAAC;aACvB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;aAChC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;aAClC,OAAO,EAAE,CAAC;QACb,MAAM,CAAC,KAAK,CAAC,iBAAiB,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,aAAa,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC;QACxG,OAAO,MAAM,CAAC;IAChB,CAAC;IAMD,KAAK,UAAU,aAAa,CAAC,cAAsB,aAAa,CAAC,SAAS;QACxE,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;QAGpC,MAAM,MAAM,GAAG,MAAM,aAAa;aAC/B,QAAQ,CAAC,eAAe,EAAE,EAAC,WAAW,EAAE,WAAW,EAAC,CAAC,CAAC;QACzD,MAAM,CAAC,KAAK,CAAC,mCAAmC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,uBAAuB,WAAW,GAAG,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC;QAClJ,OAAO,MAAM,CAAC;IAChB,CAAC;IAGD,KAAK,UAAU,mBAAmB;QAChC,MAAM,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAE3C,MAAM,MAAM,GAAG,MAAM,aAAa;aAC/B,QAAQ,CAAC,WAAW,CAAC,CAAC;QAGzB,OAAO,MAAkB,CAAC;IAC5B,CAAC;IAGD,KAAK,UAAU,uBAAuB;QACpC,MAAM,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;QAE/C,MAAM,MAAM,GAAG,MAAM,aAAa;aAC/B,QAAQ,CAAC,eAAe,CAAC,CAAC;QAE7B,OAAO,MAAM,CAAC;IAChB,CAAC;IAaD,KAAK,UAAU,qBAAqB,CAAC,EAAC,YAAY,EAAE,UAAU,GAAG,EAAE,EAAE,UAAU,GAAG,IAAI,IAAI,EAAE,EAAE,SAAS,GAAG,YAAY,EAAE,IAAI,EAAE,KAAK,GAAG,KAAK,EAAwB;QAIjK,MAAM,kBAAkB,GAAG,YAAY,KAAK,SAAS;YACnD,CAAC,CAAC,CAAC,aAAa,CAAC,SAAS,EAAE,aAAa,CAAC,SAAS,CAAC;YACpD,CAAC,CAAC,YAAY,CAAC;QACjB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,kBAAkB,CAAC,EAAE,CAAC;YACvC,MAAM,IAAI,QAAQ,CAAC,UAAU,CAAC,WAAW,EAAE,kCAAkC,YAAY,EAAE,CAAC,CAAC;QAC/F,CAAC;QACD,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;YAG/B,kBAAkB,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE;gBACvC,IAAI,kBAAkB,CAAC,WAAW,CAAC,EAAE,CAAC;oBACpC,OAAO;gBACT,CAAC;gBACD,MAAM,IAAI,QAAQ,CAAC,UAAU,CAAC,WAAW,EAAE,wBAAwB,WAAW,EAAE,CAAC,CAAC;YACpF,CAAC,CAAC,CAAC;QACL,CAAC;QACD,MAAM,CAAC,KAAK,CAAC,gDAAgD,IAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC,gBAAgB,SAAS,iBAAiB,UAAU,iBAAiB,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QAClM,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,mBAAmB,CAAC,EAAC,YAAY,EAAE,kBAAkB,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAC,CAAC,CAAC,CAAC,CAAC;QAEzH,MAAM,QAAQ,GAAe;YAE3B,mBAAmB,CAAC,EAAC,YAAY,EAAE,kBAAkB,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAC,CAAC;YAC1F;gBACE,OAAO,EACL,EAAC,eAAe,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,cAAc,EAAE,CAAC,EAAC;aAC5D;YACD;gBACE,QAAQ,EACR;oBACE,KAAK,EAAE,EAAC,eAAe,EAAE,gBAAgB,EAAE,aAAa,EAAE,cAAc,EAAC;oBACzE,cAAc,EAAE,EAAC,QAAQ,EAAE,eAAe,EAAC;oBAC3C,WAAW,EAAE,EAAC,QAAQ,EAAE,YAAY,EAAC;oBACrC,UAAU,EAAE,EAAC,MAAM,EAAE,CAAC,EAAC;iBACxB;aACF;YAGD;gBACE,OAAO,EACL,EAAC,mBAAmB,EAAE,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,cAAc,EAAE,CAAC,EAAC;aACpE;SACF,CAAC;QAEF,MAAM,MAAM,GAAG,MAAM,aAAa;aAC/B,SAAS,CAAC,QAAQ,CAAC;aACnB,OAAO,EAAE,CAAC;QAEb,MAAM,WAAW,GAA0B,MAAM,CAAC,GAAG,CACnD,UAAU,CAAC,EAAE;YACX,MAAM,EAAC,aAAa,EAAE,WAAW,EAAC,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;YACzD,MAAM,EAAC,SAAS,EAAE,YAAY,EAAE,QAAQ,EAAC,GAAG,UAAU,CAAC;YACvD,OAAO,EAAC,aAAa,EAAE,WAAW,EAAE,SAAS,EAAE,YAAY,EAAE,QAAQ,EAAC,CAAC;QACzE,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,KAAK,CAAC,iBAAiB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACxD,MAAM,CAAC,KAAK,CAAC,iBAAiB,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QAE7D,MAAM,CAAC,KAAK,CAAC,iBAAiB,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,WAAW,CAAC,MAAM,aAAa,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC;QAClH,OAAO,WAAW,CAAC;QAInB,SAAS,mBAAmB,CAAC,EAAC,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAsG;YAChL,MAAM,YAAY,GAAG;gBACnB,QAAQ,EAAE;oBACR,aAAa,EAAE,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAC,KAAK,EAAE,YAAY,EAAC,CAAC,CAAC,CAAC,MAAM;oBACvE,WAAW,EAAE,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAC,KAAK,EAAE,UAAU,EAAC,CAAC,CAAC,CAAC,MAAM;oBAOjE,cAAc,EAAE;wBACd,MAAM,EAAE,mBAAmB,CAAC,SAAS,CAAC;wBACtC,KAAK,EAAE,4BAA4B,CAAC,UAAU,CAAC;qBAChD;iBACF;aACF,CAAC;YAEF,OAAO,YAAY,CAAC;YAKpB,SAAS,mBAAmB,CAAC,KAAoB;gBAC/C,IAAI,KAAK,YAAY,IAAI,EAAE,CAAC;oBAC1B,OAAO,KAAK,CAAC;gBACf,CAAC;gBACD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBACpD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACvB,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACtF,CAAC;gBACD,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC;YACzB,CAAC;YAKD,SAAS,4BAA4B,CAAC,KAAoB;gBACxD,IAAI,KAAK,YAAY,IAAI,EAAE,CAAC;oBAC1B,OAAO,KAAK,CAAC;gBACf,CAAC;gBACD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBACpD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACvB,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC;gBACjG,CAAC;gBACD,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC;YACzB,CAAC;QACH,CAAC;IACJ,CAAC;IAOD,KAAK,UAAU,OAAO,CAAC,aAAqB,EAAE,YAA8B;QAC1E,MAAM,CAAC,IAAI,CAAC,wBAAwB,UAAU,oBAAoB,aAAa,mBAAmB,YAAY,EAAE,CAAC,CAAC;QAClH,YAAY,CAAC,aAAa,EAAE,eAAe,CAAC,CAAC;QAC7C,MAAM,MAAM,GAAG,uBAAuB,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;QAEpE,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,UAAU,CAC3C,MAAM,EACN;gBACE;oBACE,IAAI,EAAE;wBACJ,gBAAgB,EAAE,IAAI,IAAI,EAAE;wBAE5B,SAAS,EAAE,IAAI;qBAChB;iBACF;aACF,CACF,CAAC;YACF,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,QAAQ,GAAG,KAAiB,CAAC;YACnC,MAAM,YAAY,GAAG,QAAQ,CAAC,OAAO,IAAI,QAAQ,CAAC,OAAO,IAAI,EAAE,CAAC;YAChE,QAAQ,CAAC,KAAK,CAAC,CAAC;YAChB,MAAM,IAAI,QAAQ,CAAC,UAAU,CAAC,qBAAqB,EAAE,kBAAkB,YAAY,EAAE,CAAC,CAAC;QACzF,CAAC;IACH,CAAC;IAMD,KAAK,UAAU,SAAS,CAAC,aAAqB,EAAE,YAA8B;QAC5E,MAAM,CAAC,IAAI,CAAC,0BAA0B,UAAU,oBAAoB,aAAa,mBAAmB,YAAY,EAAE,CAAC,CAAC;QACpH,YAAY,CAAC,aAAa,EAAE,eAAe,CAAC,CAAC;QAC7C,MAAM,MAAM,GAAG,uBAAuB,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;QAEpE,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,UAAU,CAC3C,MAAM,EACN;gBACE;oBACE,IAAI,EAAE;wBACJ,gBAAgB,EAAE,IAAI,IAAI,EAAE;wBAC5B,SAAS,EAAE,KAAK;qBACjB;iBACF;aACF,CACF,CAAC;YACF,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,QAAQ,GAAG,KAAiB,CAAC;YACnC,MAAM,YAAY,GAAG,QAAQ,CAAC,OAAO,IAAI,QAAQ,CAAC,OAAO,IAAI,EAAE,CAAC;YAChE,QAAQ,CAAC,KAAK,CAAC,CAAC;YAChB,MAAM,IAAI,QAAQ,CAAC,UAAU,CAAC,qBAAqB,EAAE,kBAAkB,YAAY,EAAE,CAAC,CAAC;QACzF,CAAC;IACH,CAAC;IAKD,KAAK,UAAU,MAAM,CAAC,aAAqB,EAAE,KAAK,GAAG,KAAK;QACxD,MAAM,CAAC,IAAI,CAAC,wBAAwB,UAAU,oBAAoB,aAAa,EAAE,CAAC,CAAC;QACnF,YAAY,CAAC,aAAa,EAAE,eAAe,CAAC,CAAC;QAC7C,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,EAAC,aAAa,EAAC,CAAC,CAAC,CAAC,EAAC,aAAa,EAAE,SAAS,EAAE,EAAC,GAAG,EAAE,IAAI,EAAC,EAAC,CAAC;QAEjF,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;YACtD,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,QAAQ,GAAG,KAAiB,CAAC;YACnC,MAAM,YAAY,GAAG,QAAQ,CAAC,OAAO,IAAI,QAAQ,CAAC,OAAO,IAAI,EAAE,CAAC;YAChE,QAAQ,CAAC,KAAK,CAAC,CAAC;YAChB,MAAM,IAAI,QAAQ,CAAC,UAAU,CAAC,qBAAqB,EAAE,kBAAkB,YAAY,EAAE,CAAC,CAAC;QACzF,CAAC;IACH,CAAC;IAMD,KAAK,UAAU,iBAAiB,CAAC,aAAqB,EAAE,YAAiC,EAAE,EAAE,KAAK,GAAG,KAAK;QACxG,MAAM,CAAC,IAAI,CAAC,wBAAwB,UAAU,oBAAoB,aAAa,gBAAgB,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC;QACnH,YAAY,CAAC,aAAa,EAAE,eAAe,CAAC,CAAC;QAQ7C,MAAM,cAAc,GAAG,SAAS;aAC7B,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;aACjC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,QAAQ,GAAG,CAAC,CAAC,CAAC;QAElE,IAAI,SAAS,CAAC,MAAM,KAAK,cAAc,CAAC,MAAM,EAAE,CAAC;YAC/C,MAAM,IAAI,QAAQ,CAAC,UAAU,CAAC,qBAAqB,EAAE,+EAA+E,CAAC,CAAC;QACxI,CAAC;QAKD,MAAM,MAAM,GAAG,KAAK;YAClB,CAAC,CAAC,EAAC,aAAa,EAAE,YAAY,EAAE,EAAC,GAAG,EAAE,cAAc,EAAC,EAAC;YACtD,CAAC,CAAC,EAAC,aAAa,EAAE,YAAY,EAAE,EAAC,GAAG,EAAE,cAAc,EAAC,EAAE,SAAS,EAAE,EAAC,GAAG,EAAE,IAAI,EAAC,EAAC,CAAC;QAEjF,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;YACtD,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,QAAQ,GAAG,KAAiB,CAAC;YACnC,MAAM,YAAY,GAAG,QAAQ,CAAC,OAAO,IAAI,QAAQ,CAAC,OAAO,IAAI,EAAE,CAAC;YAChE,QAAQ,CAAC,KAAK,CAAC,CAAC;YAChB,MAAM,IAAI,QAAQ,CAAC,UAAU,CAAC,qBAAqB,EAAE,kBAAkB,YAAY,EAAE,CAAC,CAAC;QACzF,CAAC;IACH,CAAC;IAKD,SAAS,gBAAgB,CAAC,WAA+B,EAAE,YAAY,GAAG,KAAK;QAC7E,IAAI,WAAW,EAAE,CAAC;YAChB,MAAM,kBAAkB,GAAG,kBAAkB,CAAC,WAAW,CAAC,CAAC;YAC3D,IAAI,kBAAkB,EAAE,CAAC;gBACvB,MAAM,CAAC,KAAK,CAAC,sBAAsB,WAAW,EAAE,CAAC,CAAC;gBAClD,OAAO;YACT,CAAC;YACD,IAAI,YAAY,EAAE,CAAC;gBACjB,MAAM,IAAI,QAAQ,CAAC,UAAU,CAAC,qBAAqB,EAAE,wBAAwB,WAAW,EAAE,CAAC,CAAC;YAC9F,CAAC;YACD,MAAM,CAAC,KAAK,CAAC,kCAAkC,WAAW,EAAE,CAAC,CAAC;YAC9D,OAAO;QACT,CAAC;QAED,MAAM,CAAC,KAAK,CAAC,mBAAmB,WAAW,EAAE,CAAC,CAAC;IACjD,CAAC;AACH,CAAC"}
package/package.json CHANGED
@@ -13,7 +13,7 @@
13
13
  "url": "https://github.com/NatLibFi/melinda-rest-api-commons"
14
14
  },
15
15
  "license": "MIT",
16
- "version": "6.2.0-alpha.0",
16
+ "version": "6.2.0-alpha.2",
17
17
  "main": "./dist/index.js",
18
18
  "type": "module",
19
19
  "engines": {
@@ -51,6 +51,8 @@
51
51
  "@natlibfi/fixugen": "^4.0.0",
52
52
  "@natlibfi/fixura": "^5.0.0",
53
53
  "@natlibfi/fixura-mongo": "^4.0.2",
54
+ "@types/debug": "^4.1.13",
55
+ "@types/http-status": "^0.2.30",
54
56
  "@types/node": "^25.9.9",
55
57
  "cross-env": "^10.1.0",
56
58
  "eslint": "^10.12.0",
@@ -53,6 +53,7 @@ function makeChannel(overrides: Record<string, unknown> = {}) {
53
53
  purgeQueue: async () => {},
54
54
  close: async () => {},
55
55
  sendToQueue: async () => {},
56
+ on: () => {},
56
57
  ...overrides
57
58
  };
58
59
  }
@@ -62,7 +63,7 @@ function makeChannel(overrides: Record<string, unknown> = {}) {
62
63
  */
63
64
  async function makeOperator(channelOverrides?: Record<string, unknown>) {
64
65
  const channel = makeChannel(channelOverrides);
65
- const connection = {createChannel: async () => channel, close: async () => {}};
66
+ const connection = {createChannel: async () => channel, close: async () => {}, on: () => {}};
66
67
  return createAmqp(DUMMY_URL, false, {connection, channel});
67
68
  }
68
69
 
@@ -140,7 +141,7 @@ test('removeQueue closes the temp channel even when deleteQueue throws', async (
140
141
  }
141
142
  };
142
143
  const amqpOperator = await createAmqp(DUMMY_URL, false, {
143
- connection: {createChannel: async () => tempChannel, close: async () => {}},
144
+ connection: {createChannel: async () => tempChannel, close: async () => {}, on: () => {}},
144
145
  channel: makeChannel()
145
146
  });
146
147
  await assert.rejects(() => amqpOperator.removeQueue(QUEUE));
@@ -157,7 +158,8 @@ test('removeQueue closes the temp channel on success too', async () => {
157
158
  closedChannels.push('temp');
158
159
  }
159
160
  }),
160
- close: async () => {}
161
+ close: async () => {},
162
+ on: () => {}
161
163
  },
162
164
  channel: makeChannel()
163
165
  });
@@ -191,10 +193,11 @@ test('healthCheck loop stops after closeChannel and does not keep firing or thro
191
193
  purgeQueue: async () => {},
192
194
  close: async () => {
193
195
  closed = true;
194
- }
196
+ },
197
+ on: () => {}
195
198
  };
196
199
  const amqpOperator = await createAmqp(DUMMY_URL, true, {
197
- connection: {createChannel: async () => channel, close: async () => {}},
200
+ connection: {createChannel: async () => channel, close: async () => {}, on: () => {}},
198
201
  channel
199
202
  });
200
203
  // let the health check run at least once, then cancel it
@@ -466,7 +469,8 @@ test('closeConnection closes the connection and the operator resolves', async ()
466
469
  createChannel: async () => channel,
467
470
  close: async () => {
468
471
  closed.push('connection');
469
- }
472
+ },
473
+ on: () => {}
470
474
  },
471
475
  channel
472
476
  });
@@ -490,7 +494,7 @@ test('healthCheck error arriving after cancel does not rethrow and stops the loo
490
494
  }
491
495
  });
492
496
  const amqpOperator = await createAmqp(DUMMY_URL, true, {
493
- connection: {createChannel: async () => channel, close: async () => {}},
497
+ connection: {createChannel: async () => channel, close: async () => {}, on: () => {}},
494
498
  channel
495
499
  });
496
500
  // by now the loop is suspended on the pending assertQueue call;
@@ -525,12 +529,13 @@ test('healthCheck error while running rethrows into the un-awaited loop promise'
525
529
  nack: () => {},
526
530
  purgeQueue: async () => {},
527
531
  close: async () => {},
528
- sendToQueue: async () => {}
532
+ sendToQueue: async () => {},
533
+ on: () => {}
529
534
  };
530
535
  const captured = [];
531
536
  process.on('unhandledRejection', (err) => captured.push(err));
532
537
  await createAmqp('amqp://stub:5672/', true, {
533
- connection: {createChannel: async () => channel, close: async () => {}},
538
+ connection: {createChannel: async () => channel, close: async () => {}, on: () => {}},
534
539
  channel
535
540
  });
536
541
  // the first loop iteration rejects and the error escapes the un-awaited loop promise
@@ -549,3 +554,56 @@ test('healthCheck error while running rethrows into the un-awaited loop promise'
549
554
  // handleAmqpErrors logs the error to stdout before the escape, so only the tail matters
550
555
  assert.ok(stdout.endsWith('OK'), `expected child output to end with OK, got: ${stdout}`);
551
556
  });
557
+
558
+ test('broker loss (error + close events) logs the error and close cancels the health check', async () => {
559
+ // Failure-path listeners on the amqplib connection/channel:
560
+ // - 'error' must only log: without a handler an unhandled EventEmitter
561
+ // 'error' would become an uncaughtException, and the error alone must
562
+ // NOT stop the loop (the fast-fail contract is unchanged)
563
+ // - 'close' must cancel the health check loop so no iterations keep
564
+ // running on a dead link (matters for runHealthCheck: false consumers)
565
+ const handlers: Record<string, ((...args: unknown[]) => void)[]> = {};
566
+ const makeOn = (target: string) => (event: string, handler: (...args: unknown[]) => void) => {
567
+ const key = `${target}:${event}`;
568
+ const list = handlers[key] ?? (handlers[key] = []);
569
+ list.push(handler);
570
+ return {off: () => {}};
571
+ };
572
+ let healthCheckCalls = 0;
573
+ const channel = makeChannel({
574
+ on: makeOn('channel'),
575
+ assertQueue: async (name: string) => {
576
+ if (name === 'HEALTHCHECK') {
577
+ healthCheckCalls += 1;
578
+ }
579
+ return {messageCount: 0};
580
+ }
581
+ });
582
+ await createAmqp(DUMMY_URL, true, {
583
+ connection: {createChannel: async () => channel, close: async () => {}, on: makeOn('connection')},
584
+ channel
585
+ });
586
+ // all four listeners must be attached (connection + channel, error + close)
587
+ assert.deepStrictEqual(Object.keys(handlers).sort(), [
588
+ 'channel:close',
589
+ 'channel:error',
590
+ 'connection:close',
591
+ 'connection:error'
592
+ ]);
593
+ // let the loop run a couple of iterations, then simulate broker loss the
594
+ // way amqplib signals it: an 'error' event followed by 'close'
595
+ await new Promise((resolve) => setTimeout(resolve, 350));
596
+ for (const handler of handlers['channel:error'] ?? []) handler(new Error('socket lost'));
597
+ for (const handler of handlers['connection:error'] ?? []) handler(new Error('socket lost'));
598
+ // the 'error' events alone must not cancel the loop
599
+ const callsAfterError = healthCheckCalls;
600
+ await new Promise((resolve) => setTimeout(resolve, 500));
601
+ assert.ok(healthCheckCalls > 0, 'health check should have run before the broker loss');
602
+ assert.ok(healthCheckCalls > callsAfterError, 'health check keeps running after the error events');
603
+ for (const handler of handlers['channel:close'] ?? []) handler();
604
+ for (const handler of handlers['connection:close'] ?? []) handler();
605
+ const callsAfterClose = healthCheckCalls;
606
+ // wait longer than the 200 ms loop interval - no further health checks may fire
607
+ await new Promise((resolve) => setTimeout(resolve, 500));
608
+ assert.equal(healthCheckCalls, callsAfterClose, 'no health checks after the close events');
609
+ });
@@ -13,10 +13,17 @@ const setTimeoutPromise = promisify(setTimeout);
13
13
 
14
14
  describe('HealthCheck: amqpOperator should error if channel or connection fails', () => {
15
15
 
16
- it('FIX: test healthCheck - this test does not really test anything, but error can be seen in debug!', async () => {
16
+ it('healthcheck loop stops silently on closeChannel without unhandled rejections', async (t) => {
17
17
  debug(`Testing amqp against a local AMQP instance - we'll need some kind of mockup for this`);
18
18
  const amqpUrl = 'amqp://127.0.0.1:5672/';
19
19
 
20
+ // pin the contract: the loop must never leak an unhandled rejection,
21
+ // both while running and after closeChannel cancels it
22
+ const unhandled: unknown[] = [];
23
+ const onUnhandledRejection = (error: unknown) => unhandled.push(error);
24
+ process.on('unhandledRejection', onUnhandledRejection);
25
+ t.after(() => process.off('unhandledRejection', onUnhandledRejection));
26
+
20
27
  const amqpOperator = await amqpFactory(amqpUrl, true);
21
28
  debug(`Connecting to ${amqpUrl}, with healthCheck running`);
22
29
  await awaitTime(amqpOperator, false);
@@ -31,7 +38,7 @@ describe('HealthCheck: amqpOperator should error if channel or connection fails'
31
38
  await awaitTime(amqpOperator, true);
32
39
  // closeChannel() sets the run flag so the loop short-circuits gracefully:
33
40
  // it must stop silently without throwing or firing further health checks
34
- assert.ok(true, 'healthCheck loop stopped without error');
41
+ assert.deepStrictEqual(unhandled, [], 'no unhandled rejections while running or after closeChannel');
35
42
 
36
43
  debug(`Closing connection`);
37
44
  await amqpOperator.closeConnection();
@@ -42,13 +49,10 @@ describe('HealthCheck: amqpOperator should error if channel or connection fails'
42
49
  */
43
50
  async function awaitTime(amqpOperator: AmqpOperator, close: boolean): Promise<void> {
44
51
  if (close) {
45
- // wrap the wait so any error thrown by the (cancelled) loop fails the test
46
52
  await amqpOperator.closeChannel();
47
- try {
48
- await setTimeoutPromise(500);
49
- } catch (error) {
50
- assert.fail(`healthCheck loop threw after closeChannel: ${error}`);
51
- }
53
+ // note: promisify(setTimeout) never rejects, so a try/catch around it
54
+ // can never catch; the unhandledRejection assertion above is the pin
55
+ await setTimeoutPromise(500);
52
56
  return;
53
57
  }
54
58
 
@@ -8,6 +8,7 @@ import {getMongoOperator, handleError, compareToFirstDbEntry} from './testUtils.
8
8
 
9
9
 
10
10
  let mongoFixtures: any;
11
+ const openedOperators: any[] = [];
11
12
  const debug = createDebugLogger('@natlibfi/melinda-rest-api-commons/mongo:add-blob-size:test');
12
13
 
13
14
  generateTests({
@@ -34,6 +35,10 @@ generateTests({
34
35
  },
35
36
  after: async () => {
36
37
  //debug(`<< After`);
38
+ // close the operators the tests opened (one per test) before the server
39
+ for (const op of openedOperators) {
40
+ await op.close();
41
+ }
37
42
  await mongoFixtures.close();
38
43
  }
39
44
  }
@@ -61,6 +66,7 @@ async function callback(callbackParams: Record<string, any>) {
61
66
  } = callbackParams;
62
67
 
63
68
  const mongoOperator = await getMongoOperator(mongoFixtures);
69
+ openedOperators.push(mongoOperator);
64
70
  const expectedResult = await getFixture('expectedResult.json');
65
71
 
66
72
  await doPreFillDb(preFillDb);
@@ -8,6 +8,7 @@ import {getMongoOperator, handleError, compareToFirstDbEntry} from './testUtils.
8
8
 
9
9
 
10
10
  let mongoFixtures: any;
11
+ const openedOperators: any[] = [];
11
12
  const debug = createDebugLogger('@natlibfi/melinda-rest-api-commons/mongo:test');
12
13
 
13
14
  generateTests({
@@ -34,6 +35,10 @@ generateTests({
34
35
  },
35
36
  after: async () => {
36
37
  //debug(`<< After`);
38
+ // close the operators the tests opened (one per test) before the server
39
+ for (const op of openedOperators) {
40
+ await op.close();
41
+ }
37
42
  await mongoFixtures.close();
38
43
  }
39
44
  }
@@ -62,6 +67,7 @@ async function callback(callbackParams: Record<string, any>) {
62
67
  } = callbackParams;
63
68
 
64
69
  const mongoOperator = await getMongoOperator(mongoFixtures);
70
+ openedOperators.push(mongoOperator);
65
71
  const expectedResult = await getFixture('expectedResult.json');
66
72
 
67
73
  await doPreFillDb(preFillDb);
@@ -7,6 +7,7 @@ import createDebugLogger from 'debug';
7
7
  import {getMongoOperator, handleError, compareToFirstDbEntry} from './testUtils.ts';
8
8
 
9
9
  let mongoFixtures: any;
10
+ const openedOperators: any[] = [];
10
11
  const debug = createDebugLogger('@natlibfi/melinda-rest-api-commons/mongo:check-and-set-import-job-state-test');
11
12
 
12
13
  generateTests({
@@ -33,6 +34,10 @@ generateTests({
33
34
  },
34
35
  after: async () => {
35
36
  //debug(`<< After`);
37
+ // close the operators the tests opened (one per test) before the server
38
+ for (const op of openedOperators) {
39
+ await op.close();
40
+ }
36
41
  await mongoFixtures.close();
37
42
  }
38
43
  }
@@ -61,6 +66,7 @@ async function callback(callbackParams: Record<string, any>) {
61
66
  } = callbackParams;
62
67
 
63
68
  const mongoOperator = await getMongoOperator(mongoFixtures);
69
+ openedOperators.push(mongoOperator);
64
70
  const expectedResult = await getFixture('expectedResult.json');
65
71
 
66
72
  await doPreFillDb(preFillDb);
@@ -8,6 +8,7 @@ import {getMongoOperator, handleError, compareToFirstDbEntry} from './testUtils.
8
8
 
9
9
 
10
10
  let mongoFixtures: any;
11
+ const openedOperators: any[] = [];
11
12
  const debug = createDebugLogger('@natlibfi/melinda-rest-api-commons/mongo:check-timeout:test');
12
13
 
13
14
  generateTests({
@@ -34,6 +35,10 @@ generateTests({
34
35
  },
35
36
  after: async () => {
36
37
  //debug(`<< After`);
38
+ // close the operators the tests opened (one per test) before the server
39
+ for (const op of openedOperators) {
40
+ await op.close();
41
+ }
37
42
  await mongoFixtures.close();
38
43
  }
39
44
  }
@@ -62,6 +67,7 @@ async function callback(callbackParams: Record<string, any>) {
62
67
  } = callbackParams;
63
68
 
64
69
  const mongoOperator = await getMongoOperator(mongoFixtures);
70
+ openedOperators.push(mongoOperator);
65
71
  const expectedResult = await getFixture('expectedResult.json');
66
72
 
67
73
  await doPreFillDb(preFillDb);
@@ -6,6 +6,7 @@ import createDebugLogger from 'debug';
6
6
  import {getMongoOperator, handleError, compareToFirstDbEntry} from './testUtils.ts';
7
7
 
8
8
  let mongoFixtures: any;
9
+ const openedOperators: any[] = [];
9
10
  const debug = createDebugLogger('@natlibfi/melinda-rest-api-commons/mongo:test:create-bulk');
10
11
 
11
12
  generateTests({
@@ -32,6 +33,10 @@ generateTests({
32
33
  },
33
34
  after: async () => {
34
35
  //debug(`<< After`);
36
+ // close the operators the tests opened (one per test) before the server
37
+ for (const op of openedOperators) {
38
+ await op.close();
39
+ }
35
40
  await mongoFixtures.close();
36
41
  }
37
42
  }
@@ -59,6 +64,7 @@ async function callback(callbackParams: Record<string, any>) {
59
64
  } = callbackParams;
60
65
 
61
66
  const mongoOperator = await getMongoOperator(mongoFixtures);
67
+ openedOperators.push(mongoOperator);
62
68
  const expectedResult = await getFixture('expectedResult.json');
63
69
 
64
70
  await doPreFillDb(preFillDb);
@@ -7,6 +7,7 @@ import {getMongoOperator, handleError, compareToFirstDbEntry} from './testUtils.
7
7
  // import {handleError, compareToFirstDbEntry, compareToDbEntry, formatQueueItem, streamToString} from './testUtils.js';
8
8
 
9
9
  let mongoFixtures: any;
10
+ const openedOperators: any[] = [];
10
11
  const debug = createDebugLogger('@natlibfi/melinda-rest-api-commons/mongo:create-prio-test');
11
12
 
12
13
  generateTests({
@@ -33,6 +34,10 @@ generateTests({
33
34
  },
34
35
  after: async () => {
35
36
  //debug(`<< After`);
37
+ // close the operators the tests opened (one per test) before the server
38
+ for (const op of openedOperators) {
39
+ await op.close();
40
+ }
36
41
  await mongoFixtures.close();
37
42
  }
38
43
  }
@@ -58,6 +63,7 @@ async function callback(callbackParams: Record<string, any>) {
58
63
  } = callbackParams;
59
64
 
60
65
  const mongoOperator = await getMongoOperator(mongoFixtures);
66
+ openedOperators.push(mongoOperator);
61
67
  const expectedResult = await getFixture('expectedResult.json');
62
68
 
63
69
  await doPreFillDb(preFillDb);