UNPKG

@webda/gcp

Version:

Webda GCP Services implementation

103 lines 4.23 kB
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; import { suite, test } from "@testdeck/mocha"; import { QueueTest } from "@webda/core/lib/queues/queue.spec.js"; import * as assert from "assert"; import { EventEmitter } from "events"; import * as sinon from "sinon"; class FakeSubscription extends EventEmitter { emitError() { this.emit("error", "Fake error"); } close() { } } let GCPQueueTest = class GCPQueueTest extends QueueTest { async basic() { let queue = this.webda.getService("queue"); queue.getParameters().subscription = `${queue.getParameters().subscription}_${this.webda.getUuid()}`; await queue.pubsub.createSubscription(queue.getParameters().topic, queue.getParameters().subscription, { ackDeadlineSeconds: 10, enableExactlyOnceDelivery: true }); try { await this.simple(queue, true, 12000); // Seems to be penalized by no promise on ACK await this.sleep(5000); this.log("DEBUG", "Verify receiveMessage is now empty"); queue.getParameters().timeout = 3000; // TODO Investigate this one if ((await queue.receiveMessage()).length > 0) { this.log("ERROR", "Queue should be empty - not an assert to avoid random"); } } finally { await queue.pubsub.subscription(queue.getParameters().subscription).delete(); } } async consumers() { let queue = this.webda.getService("queue"); queue.getParameters().subscription = `${queue.getParameters().subscription}_${this.webda.getUuid()}`; await queue.pubsub.createSubscription(queue.getParameters().topic, queue.getParameters().subscription, { ackDeadlineSeconds: 10, enableMessageOrdering: true }); try { // Test consumer let msg; let consumed = 0; let consumer = queue.consume(async (dt) => { consumed++; if (msg) { throw new Error(); } msg = dt; }); await this.sleep(1000); this.log("DEBUG", "Consume sendMessage"); await queue.sendMessage({ plop: 1 }); this.log("DEBUG", "Consume cancel"); await queue.sendMessage({ plop: 2 }); // Need to wait before cancel to ensure message are received while (consumed < 2) { await this.sleep(500); } await consumer.cancel(); this.log("DEBUG", "Consume assert"); assert.notStrictEqual(msg, undefined); // The second message throw an exception so it can come back await queue.receiveMessage(); await queue.receiveMessage(); } finally { await queue.pubsub.subscription(queue.getParameters().subscription).delete(); } } async receiveError() { this.log("DEBUG", "Receive Error test"); let queue = this.webda.getService("queue"); let service = new FakeSubscription(); sinon.stub(queue.pubsub, "subscription").callsFake(() => { return service; }); let consumer = queue.receiveMessage(); service.emitError(); await assert.rejects(() => consumer, /Fake error/); } }; __decorate([ test ], GCPQueueTest.prototype, "basic", null); __decorate([ test ], GCPQueueTest.prototype, "consumers", null); __decorate([ test ], GCPQueueTest.prototype, "receiveError", null); GCPQueueTest = __decorate([ suite ], GCPQueueTest); //# sourceMappingURL=queue.spec.js.map