UNPKG

node-token-sockjs

Version:

A wrapper around express, sockjs-node, and redis that provides token based authentication, a websocket based rpc-like abstraction, and an optional publish subscribe interface.

107 lines (89 loc) 2.71 kB
var sinon = require("sinon"); global.defer = function(callback){ setTimeout(callback, 15); }; module.exports = function(TokenSocketServer){ var express = require("express"), sockjs = require("sockjs"), redis = require("redis"), RestJS = require("restjs"), MockSocket = require("./mocks/socket"), MockSocketServer = require("./mocks/socketServer"), http = require("http"); if(typeof RestJS === "object" && RestJS.Rest) RestJS = RestJS.Rest; var httpClient = new RestJS({ protocol: "http" }); var redisHost = process.env.REDIS_HOST || "127.0.0.1", redisPort = process.env.REDIS_PORT || 6379; var redisClient = redis.createClient(redisPort, redisHost), pubsubClient = redis.createClient(redisPort, redisHost); var app = express(), socketServer = new MockSocketServer(); var server = http.createServer(app), port = process.env.PORT || 6072; socketServer.installHandlers(server, { prefix: "/sockets", sockjs_url: "//cdn.sockjs.org/sockjs-0.3.min.js" }); var tokenServer = new TokenSocketServer(app, redisClient, socketServer, { pubsubClient: pubsubClient, socketController: { echo: sinon.spy(function(auth, data, callback){ callback(null, data); }), nested: { echo: sinon.spy(function(auth, data, callback){ callback(null, data); }) } }, customMiddleware: function(req, res, next){ if(req.param("middleware")){ res.json({ middleware: 1 }); }else{ req.session = req.session || {}; req.session.foo = "bar"; next(); } }, authentication: function(req, callback){ callback(null, req.param("allow")); }, routes: { ping: function(req, res){ res.json(req.body); }, nested: { ping: function(req, res){ res.json(req.body); } } }, filter: sinon.spy(function(socket, channel, message){ if(channel === "baz") message.foo = "bar"; else if(channel === "bad") message = null; return message; }), ping: true }); describe("Integration tests", function(){ before(function(done){ server.listen(port, done); }); after(function(){ tokenServer.shutdown(); }); var options = { host: "127.0.0.1", port: port, authentication: { allow: 1 } }; require("./integration/authentication")(tokenServer, httpClient, MockSocket, options); require("./integration/rpc")(tokenServer, httpClient, MockSocket, options); require("./integration/pubsub")(tokenServer, httpClient, MockSocket, options); }); };