123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219 |
- import "./setup";
- import { expect } from "chai";
- import { Peer } from "../lib/peer";
- import { Server } from "mock-socket";
- import { ConnectionType, ServerMessageType } from "../lib/enums";
- 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", function () {
- describe("after construct without parameters", function () {
- it("shouldn't contains any connection", function () {
- const peer = new Peer();
- expect(peer.open).to.be.false;
- expect(peer.connections).to.be.empty;
- expect(peer.id).to.be.null;
- expect(peer.disconnected).to.be.false;
- expect(peer.destroyed).to.be.false;
- peer.destroy();
- });
- });
- describe("after construct with parameters", function () {
- it("should contains id and key", function () {
- const peer = new Peer("1", { key: "anotherKey" });
- expect(peer.id).to.eq("1");
- expect(peer.options.key).to.eq("anotherKey");
- peer.destroy();
- });
- });
- describe("after call to peer #2", function () {
- let mockServer;
- before(function () {
- mockServer = createMockServer();
- });
- it("Peer#1 should has id #1", function (done) {
- const peer1 = new Peer("1", { port: 8080, host: "localhost" });
- expect(peer1.open).to.be.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(mediaConnection.connectionId).to.be.a("string");
- expect(mediaConnection.type).to.eq(ConnectionType.Media);
- expect(mediaConnection.peer).to.eq("2");
- expect(mediaConnection.options).to.include(mediaOptions);
- expect(mediaConnection.metadata).to.deep.eq(mediaOptions.metadata);
- expect(mediaConnection.peerConnection.getSenders()[0].track.id).to.eq(
- track.id,
- );
- peer1.once("open", (id) => {
- expect(id).to.be.eq("1");
- //@ts-ignore
- expect(peer1._lastServerId).to.be.eq("1");
- expect(peer1.disconnected).to.be.false;
- expect(peer1.destroyed).to.be.false;
- expect(peer1.open).to.be.true;
- peer1.destroy();
- expect(peer1.disconnected).to.be.true;
- expect(peer1.destroyed).to.be.true;
- expect(peer1.open).to.be.false;
- expect(peer1.connections).to.be.empty;
- done();
- });
- });
- after(function () {
- mockServer.stop();
- });
- });
- describe("reconnect", function () {
- let mockServer;
- before(function () {
- mockServer = createMockServer();
- });
- it("connect to server => disconnect => reconnect => destroy", function (done) {
- const peer1 = new Peer("1", { port: 8080, host: "localhost" });
- peer1.once("open", () => {
- expect(peer1.open).to.be.true;
- peer1.once("disconnected", () => {
- expect(peer1.disconnected).to.be.true;
- expect(peer1.destroyed).to.be.false;
- expect(peer1.open).to.be.false;
- peer1.once("open", (id) => {
- expect(id).to.be.eq("1");
- expect(peer1.disconnected).to.be.false;
- expect(peer1.destroyed).to.be.false;
- expect(peer1.open).to.be.true;
- peer1.once("disconnected", () => {
- expect(peer1.disconnected).to.be.true;
- expect(peer1.destroyed).to.be.false;
- expect(peer1.open).to.be.false;
- peer1.once("close", () => {
- expect(peer1.disconnected).to.be.true;
- expect(peer1.destroyed).to.be.true;
- expect(peer1.open).to.be.false;
- done();
- });
- });
- peer1.destroy();
- });
- peer1.reconnect();
- });
- peer1.disconnect();
- });
- });
- it("disconnect => reconnect => destroy", function (done) {
- mockServer.stop();
- const peer1 = new Peer("1", { port: 8080, host: "localhost" });
- peer1.once("disconnected", (id) => {
- expect(id).to.be.eq("1");
- expect(peer1.disconnected).to.be.true;
- expect(peer1.destroyed).to.be.false;
- expect(peer1.open).to.be.false;
- peer1.once("open", (id) => {
- expect(id).to.be.eq("1");
- expect(peer1.disconnected).to.be.false;
- expect(peer1.destroyed).to.be.false;
- expect(peer1.open).to.be.true;
- peer1.once("disconnected", () => {
- expect(peer1.disconnected).to.be.true;
- expect(peer1.destroyed).to.be.false;
- expect(peer1.open).to.be.false;
- peer1.once("close", () => {
- expect(peer1.disconnected).to.be.true;
- expect(peer1.destroyed).to.be.true;
- expect(peer1.open).to.be.false;
- done();
- });
- });
- peer1.destroy();
- });
- mockServer = createMockServer();
- peer1.reconnect();
- });
- });
- it("destroy peer if no id and no connection", function (done) {
- mockServer.stop();
- const peer1 = new Peer({ port: 8080, host: "localhost" });
- peer1.once("error", (_error) => {
- // expect(error.type).to.be.eq(PeerErrorType.ServerError);
- peer1.once("close", () => {
- expect(peer1.disconnected).to.be.true;
- expect(peer1.destroyed).to.be.true;
- expect(peer1.open).to.be.false;
- done();
- });
- mockServer = createMockServer();
- });
- });
- after(function () {
- mockServer.stop();
- });
- });
- });
|