aspnetcore/clients/ts/signalr/spec/LongPollingTransport.spec.ts

67 lines
2.6 KiB
TypeScript

import { HttpResponse } from "../src/HttpClient";
import { LogLevel } from "../src/ILogger";
import { TransferFormat } from "../src/ITransport";
import { NullLogger } from "../src/Loggers";
import { LongPollingTransport } from "../src/LongPollingTransport";
import { ConsoleLogger } from "../src/Utils";
import { TestHttpClient } from "./TestHttpClient";
import { asyncit as it, PromiseSource } from "./Utils";
describe("LongPollingTransport", () => {
it("shuts down poll after timeout even if server doesn't shut it down on receiving the DELETE", async () => {
let firstPoll = true;
const pollCompleted = new PromiseSource();
const client = new TestHttpClient()
.on("GET", async (r) => {
if (firstPoll) {
firstPoll = false;
return new HttpResponse(200);
} else {
// Turn 'onabort' into a promise.
const abort = new Promise((resolve, reject) => r.abortSignal.onabort = resolve);
await abort;
// Signal that the poll has completed.
pollCompleted.resolve();
return new HttpResponse(204);
}
})
.on("DELETE", (r) => new HttpResponse(202));
const transport = new LongPollingTransport(client, null, NullLogger.instance, false, 100);
await transport.connect("http://example.com", TransferFormat.Text);
await transport.stop();
// This should complete within the shutdown timeout
await pollCompleted.promise;
});
it("sends DELETE request on stop", async () => {
let firstPoll = true;
const deleteReceived = new PromiseSource();
const pollCompleted = new PromiseSource();
const client = new TestHttpClient()
.on("GET", async (r) => {
if (firstPoll) {
firstPoll = false;
return new HttpResponse(200);
} else {
await deleteReceived.promise;
pollCompleted.resolve();
return new HttpResponse(204);
}
})
.on("DELETE", (r) => {
deleteReceived.resolve();
return new HttpResponse(202);
});
const transport = new LongPollingTransport(client, null, NullLogger.instance, false);
await transport.connect("http://example.com", TransferFormat.Text);
await transport.stop();
// This should complete, because the DELETE request triggers it to stop.
await pollCompleted.promise;
});
});