mirror of
https://github.com/socketio/socket.io.git
synced 2026-04-30 03:00:39 -04:00
180 lines
4.9 KiB
JavaScript
180 lines
4.9 KiB
JavaScript
const expect = require("expect.js");
|
|
const io = require("../");
|
|
|
|
describe("socket", function () {
|
|
this.timeout(70000);
|
|
|
|
it("should have an accessible socket id equal to the server-side socket id (default namespace)", (done) => {
|
|
const socket = io({ forceNew: true });
|
|
socket.on("connect", () => {
|
|
expect(socket.id).to.be.ok();
|
|
expect(socket.id).to.eql(socket.io.engine.id);
|
|
socket.disconnect();
|
|
done();
|
|
});
|
|
});
|
|
|
|
it("should have an accessible socket id equal to the server-side socket id (custom namespace)", (done) => {
|
|
const socket = io("/foo", { forceNew: true });
|
|
socket.on("connect", () => {
|
|
expect(socket.id).to.be.ok();
|
|
expect(socket.id).to.eql("/foo#" + socket.io.engine.id);
|
|
socket.disconnect();
|
|
done();
|
|
});
|
|
});
|
|
|
|
it("clears socket.id upon disconnection", (done) => {
|
|
const socket = io({ forceNew: true });
|
|
socket.on("connect", () => {
|
|
socket.on("disconnect", () => {
|
|
expect(socket.id).to.not.be.ok();
|
|
done();
|
|
});
|
|
|
|
socket.disconnect();
|
|
});
|
|
});
|
|
|
|
it("doesn't fire a connect_error if we force disconnect in opening state", (done) => {
|
|
const socket = io({ forceNew: true, timeout: 100 });
|
|
socket.disconnect();
|
|
socket.on("connect_error", () => {
|
|
throw new Error("Unexpected");
|
|
});
|
|
setTimeout(() => {
|
|
done();
|
|
}, 300);
|
|
});
|
|
|
|
it("should ping and pong with latency", (done) => {
|
|
const socket = io({ forceNew: true });
|
|
socket.on("connect", () => {
|
|
let pinged;
|
|
socket.once("ping", () => {
|
|
pinged = true;
|
|
});
|
|
socket.once("pong", (ms) => {
|
|
expect(pinged).to.be(true);
|
|
expect(ms).to.be.a("number");
|
|
socket.disconnect();
|
|
done();
|
|
});
|
|
});
|
|
});
|
|
|
|
it("should change socket.id upon reconnection", (done) => {
|
|
const socket = io({ forceNew: true });
|
|
socket.on("connect", () => {
|
|
const id = socket.id;
|
|
|
|
socket.on("reconnect_attempt", () => {
|
|
expect(socket.id).to.not.be.ok();
|
|
});
|
|
|
|
socket.on("reconnect", () => {
|
|
expect(socket.id).to.not.eql(id);
|
|
socket.disconnect();
|
|
done();
|
|
});
|
|
|
|
socket.io.engine.close();
|
|
});
|
|
});
|
|
|
|
it("should enable compression by default", (done) => {
|
|
const socket = io({ forceNew: true });
|
|
socket.on("connect", () => {
|
|
socket.io.engine.once("packetCreate", (packet) => {
|
|
expect(packet.options.compress).to.be(true);
|
|
socket.disconnect();
|
|
done();
|
|
});
|
|
socket.emit("hi");
|
|
});
|
|
});
|
|
|
|
it("should disable compression", (done) => {
|
|
const socket = io({ forceNew: true });
|
|
socket.on("connect", () => {
|
|
socket.io.engine.once("packetCreate", (packet) => {
|
|
expect(packet.options.compress).to.be(false);
|
|
socket.disconnect();
|
|
done();
|
|
});
|
|
socket.compress(false).emit("hi");
|
|
});
|
|
});
|
|
|
|
describe("query option", () => {
|
|
it("should accept an object (default namespace)", (done) => {
|
|
const socket = io("/", { forceNew: true, query: { e: "f" } });
|
|
|
|
socket.emit("getHandshake", (handshake) => {
|
|
expect(handshake.query.e).to.be("f");
|
|
socket.disconnect();
|
|
done();
|
|
});
|
|
});
|
|
|
|
it("should accept a query string (default namespace)", (done) => {
|
|
const socket = io("/?c=d", { forceNew: true });
|
|
|
|
socket.emit("getHandshake", (handshake) => {
|
|
expect(handshake.query.c).to.be("d");
|
|
socket.disconnect();
|
|
done();
|
|
});
|
|
});
|
|
|
|
it("should accept an object", (done) => {
|
|
const socket = io("/abc", { query: { a: "b" } });
|
|
|
|
socket.on("handshake", (handshake) => {
|
|
expect(handshake.query.a).to.be("b");
|
|
socket.disconnect();
|
|
done();
|
|
});
|
|
});
|
|
|
|
it("should accept a query string", (done) => {
|
|
const socket = io("/abc?b=c&d=e");
|
|
|
|
socket.on("handshake", (handshake) => {
|
|
expect(handshake.query.b).to.be("c");
|
|
expect(handshake.query.d).to.be("e");
|
|
socket.disconnect();
|
|
done();
|
|
});
|
|
});
|
|
|
|
it("should properly encode the parameters", (done) => {
|
|
const socket = io("/abc", { query: { "&a": "&=?a" } });
|
|
|
|
socket.on("handshake", (handshake) => {
|
|
expect(handshake.query["&a"]).to.be("&=?a");
|
|
socket.disconnect();
|
|
done();
|
|
});
|
|
});
|
|
});
|
|
|
|
it("should fire an error event on middleware failure from main namespace", (done) => {
|
|
const socket = io("/foo", { forceNew: true, query: { fail: true } });
|
|
socket.on("error", (err) => {
|
|
expect(err).to.eql("Auth failed (main namespace)");
|
|
socket.disconnect();
|
|
done();
|
|
});
|
|
});
|
|
|
|
it("should fire an error event on middleware failure from custom namespace", (done) => {
|
|
const socket = io("/no", { forceNew: true });
|
|
socket.on("error", (err) => {
|
|
expect(err).to.eql("Auth failed (custom namespace)");
|
|
socket.disconnect();
|
|
done();
|
|
});
|
|
});
|
|
});
|