123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222 |
- import "./setup";
- import { Peer } from "../lib/peer";
- import { Server } from "mock-socket";
- import { ConnectionType, PeerErrorType, ServerMessageType } from "../lib/enums";
- import { expect, beforeAll, afterAll, describe, it } from "@jest/globals";
- const createMockServer = (): Server => {
- const fakeURL = "ws://localhost:8080/peerjs?key=peerjs&id=1&token=testToken";
- const mockServer = new Server(fakeURL);
- mockServer.on("connection", (socket) => {
- //@ts-ignore
- socket.on("message", (data) => {
- socket.send("test message from mock server");
- });
- socket.send(JSON.stringify({ type: ServerMessageType.Open }));
- });
- return mockServer;
- };
- describe("Peer", () => {
- describe("after construct without parameters", () => {
- it("shouldn't contains any connection", () => {
- const peer = new Peer();
- expect(peer.open).toBe(false);
- expect(peer.connections).toEqual({});
- expect(peer.id).toBeNull();
- expect(peer.disconnected).toBe(false);
- expect(peer.destroyed).toBe(false);
- peer.destroy();
- });
- });
- describe("after construct with parameters", () => {
- it("should contains id and key", () => {
- const peer = new Peer("1", { key: "anotherKey" });
- expect(peer.id).toBe("1");
- expect(peer.options.key).toBe("anotherKey");
- peer.destroy();
- });
- });
- describe.skip("after call to peer #2", () => {
- let mockServer;
- beforeAll(() => {
- mockServer = createMockServer();
- });
- it("Peer#1 should has id #1", (done) => {
- const peer1 = new Peer("1", { port: 8080, host: "localhost" });
- expect(peer1.open).toBe(false);
- const mediaOptions = {
- metadata: { var: "123" },
- constraints: {
- mandatory: {
- OfferToReceiveAudio: true,
- OfferToReceiveVideo: true,
- },
- },
- };
- const track = new MediaStreamTrack();
- const mediaStream = new MediaStream([track]);
- const mediaConnection = peer1.call("2", mediaStream, { ...mediaOptions });
- expect(typeof mediaConnection.connectionId).toBe("string");
- expect(mediaConnection.type).toBe(ConnectionType.Media);
- expect(mediaConnection.peer).toBe("2");
- expect(mediaConnection.options).toEqual(
- // expect.arrayContaining([mediaOptions]),mediaOptions
- expect.objectContaining(mediaOptions),
- );
- expect(mediaConnection.metadata).toEqual(mediaOptions.metadata);
- expect(mediaConnection.peerConnection.getSenders()[0].track.id).toBe(
- track.id,
- );
- peer1.once("open", (id) => {
- expect(id).toBe("1");
- //@ts-ignore
- expect(peer1._lastServerId).toBe("1");
- expect(peer1.disconnected).toBe(false);
- expect(peer1.destroyed).toBe(false);
- expect(peer1.open).toBe(true);
- peer1.destroy();
- expect(peer1.disconnected).toBe(true);
- expect(peer1.destroyed).toBe(true);
- expect(peer1.open).toBe(false);
- expect(peer1.connections).toEqual({});
- done();
- });
- });
- afterAll(() => {
- mockServer.stop();
- });
- });
- describe("reconnect", () => {
- let mockServer;
- beforeAll(() => {
- mockServer = createMockServer();
- });
- it("connect to server => disconnect => reconnect => destroy", (done) => {
- const peer1 = new Peer("1", { port: 8080, host: "localhost" });
- peer1.once("open", () => {
- expect(peer1.open).toBe(true);
- peer1.once("disconnected", () => {
- expect(peer1.disconnected).toBe(true);
- expect(peer1.destroyed).toBe(false);
- expect(peer1.open).toBe(false);
- peer1.once("open", (id) => {
- expect(id).toBe("1");
- expect(peer1.disconnected).toBe(false);
- expect(peer1.destroyed).toBe(false);
- expect(peer1.open).toBe(true);
- peer1.once("disconnected", () => {
- expect(peer1.disconnected).toBe(true);
- expect(peer1.destroyed).toBe(false);
- expect(peer1.open).toBe(false);
- peer1.once("close", () => {
- expect(peer1.disconnected).toBe(true);
- expect(peer1.destroyed).toBe(true);
- expect(peer1.open).toBe(false);
- done();
- });
- });
- peer1.destroy();
- });
- peer1.reconnect();
- });
- peer1.disconnect();
- });
- });
- it("disconnect => reconnect => destroy", (done) => {
- mockServer.stop();
- const peer1 = new Peer("1", { port: 8080, host: "localhost" });
- peer1.once("disconnected", (id) => {
- expect(id).toBe("1");
- expect(peer1.disconnected).toBe(true);
- expect(peer1.destroyed).toBe(false);
- expect(peer1.open).toBe(false);
- peer1.once("open", (id) => {
- expect(id).toBe("1");
- expect(peer1.disconnected).toBe(false);
- expect(peer1.destroyed).toBe(false);
- expect(peer1.open).toBe(true);
- peer1.once("disconnected", () => {
- expect(peer1.disconnected).toBe(true);
- expect(peer1.destroyed).toBe(false);
- expect(peer1.open).toBe(false);
- peer1.once("close", () => {
- expect(peer1.disconnected).toBe(true);
- expect(peer1.destroyed).toBe(true);
- expect(peer1.open).toBe(false);
- done();
- });
- });
- peer1.destroy();
- });
- mockServer = createMockServer();
- peer1.reconnect();
- });
- });
- it("destroy peer if no id and no connection", (done) => {
- mockServer.stop();
- const peer1 = new Peer({ port: 8080, host: "localhost" });
- peer1.once("error", (error) => {
- expect(error.type).toBe(PeerErrorType.ServerError);
- peer1.once("close", () => {
- expect(peer1.disconnected).toBe(true);
- expect(peer1.destroyed).toBe(true);
- expect(peer1.open).toBe(false);
- done();
- });
- mockServer = createMockServer();
- });
- });
- afterAll(() => {
- mockServer.stop();
- });
- });
- });
|