|
@@ -2,14 +2,30 @@ import "./setup";
|
|
|
import { expect } from "chai";
|
|
|
import { Peer } from "../lib/peer";
|
|
|
import { Server } from 'mock-socket';
|
|
|
-import { ConnectionType, ServerMessageType } from "../lib/enums";
|
|
|
+import { ConnectionType, ServerMessageType, PeerErrorType, PeerEventType } 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.connections).to.deep.eq({});
|
|
|
+ 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;
|
|
@@ -19,15 +35,13 @@ describe("Peer", function () {
|
|
|
});
|
|
|
|
|
|
describe("after construct with parameters", function () {
|
|
|
- it("should contains id and key", function (done) {
|
|
|
+ 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();
|
|
|
-
|
|
|
- setTimeout(() => done(), 0);
|
|
|
});
|
|
|
});
|
|
|
|
|
@@ -35,21 +49,12 @@ describe("Peer", function () {
|
|
|
let mockServer;
|
|
|
|
|
|
before(function () {
|
|
|
- const fakeURL = 'ws://localhost:8080/peerjs?key=peerjs&id=1&token=testToken';
|
|
|
- mockServer = new Server(fakeURL);
|
|
|
-
|
|
|
- mockServer.on('connection', socket => {
|
|
|
- //@ts-ignore
|
|
|
- socket.on('message', data => {
|
|
|
- socket.send('test message from mock server');
|
|
|
- });
|
|
|
-
|
|
|
- socket.send(ServerMessageType.Open);
|
|
|
- });
|
|
|
+ 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' },
|
|
@@ -73,13 +78,136 @@ describe("Peer", function () {
|
|
|
expect(mediaConnection.metadata).to.deep.eq(mediaOptions.metadata);
|
|
|
expect(mediaConnection.peerConnection.getSenders()[0].track.id).to.eq(track.id);
|
|
|
|
|
|
- peer1.destroy();
|
|
|
+ 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;
|
|
|
|
|
|
- expect(peer1.disconnected).to.be.true;
|
|
|
- expect(peer1.destroyed).to.be.true;
|
|
|
- expect(peer1.open).to.be.false;
|
|
|
+ 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' });
|
|
|
|
|
|
- done();
|
|
|
+ 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(PeerEventType.Error, (error) => {
|
|
|
+ expect(error.type).to.be.eq(PeerErrorType.ServerError);
|
|
|
+
|
|
|
+ peer1.once(PeerEventType.Close, () => {
|
|
|
+ expect(peer1.disconnected).to.be.true;
|
|
|
+ expect(peer1.destroyed).to.be.true;
|
|
|
+ expect(peer1.open).to.be.false;
|
|
|
+
|
|
|
+ done();
|
|
|
+ });
|
|
|
+
|
|
|
+ mockServer = createMockServer();
|
|
|
+ });
|
|
|
});
|
|
|
|
|
|
after(function () {
|