Skip to content

Commit

Permalink
add rawocket test
Browse files Browse the repository at this point in the history
  • Loading branch information
Tobias Oberstein committed Mar 26, 2017
1 parent f10113a commit 4e99659
Show file tree
Hide file tree
Showing 6 changed files with 146 additions and 25 deletions.
9 changes: 9 additions & 0 deletions README.md
Expand Up @@ -93,6 +93,15 @@ AutobahnJS is available via the Node package manager [here](https://www.npmjs.or

npm install autobahn

#### NodeJS and ws version

AutobahnJS currently strives for support of NodeJS v4.2.6 or later. The reason is that this is the version that currently ships with Ubuntu 16.04 LTS.

On NodeJS, we need the [ws library](https://github.com/websockets/ws/) for WebSocket support, as different from browsers, NodeJS does not come with a native implementation.

However, the ws library v2 or later is incompatible with NodeJS earlier than v4.5.0. See [here](http://stackoverflow.com/a/42331959/884770) and [here](https://github.com/websockets/ws/issues/989).

Rather than dropping support for NodeJS v4 (and hence for the system NodeJS version of Ubuntu), we use ws v1 for time being.

## More information

Expand Down
3 changes: 2 additions & 1 deletion package.json
Expand Up @@ -24,7 +24,8 @@
},
"devDependencies": {
"browserify": ">= 13.1.1",
"nodeunit": ">= 0.10.2"
"nodeunit": ">= 0.10.2",
"deep-equal": ">= 1.0.1"
},
"browser": {
"ws": false,
Expand Down
41 changes: 21 additions & 20 deletions test/test.js
Expand Up @@ -17,6 +17,7 @@ var sync = require('./test_basic_sync.js');
var async = require('./test_basic_async.js');
var connect = require('./test_connect.js');
var msgpack_serialization = require('./test_msgpack_serialization.js');
var rawsocket_transport = require('./test_rawsocket_transport.js');
var rpc_complex = require('./test_rpc_complex.js');
var rpc_arguments = require('./test_rpc_arguments.js');
var rpc_error = require('./test_rpc_error.js');
Expand All @@ -34,23 +35,23 @@ var pubsub_prefix_sub = require('./test_pubsub_prefix_sub.js');
var pubsub_wildcard_sub = require('./test_pubsub_wildcard_sub.js');


exports.testSync = sync.testSync;
exports.testAsync = async.testAsync;
exports.testConnect = connect.testConnect;
exports.testMsgpackSerialization = msgpack_serialization.testMsgpackSerialization;
exports.testRpcArguments = rpc_arguments.testRpcArguments;
exports.testRpcComplex = rpc_complex.testRpcComplex;
exports.testRpcError = rpc_error.testRpcError;
exports.testRpcOptions = rpc_options.testRpcOptions;
exports.testRpcProgress = rpc_progress.testRpcProgress;
exports.testRpcSlowsquare = rpc_slowsquare.testRpcSlowsquare;
exports.testRpcRouting = rpc_routing.testRpcRouting;
exports.testPubsubBasic = pubsub_basic.testPubsubBasic;
exports.testPubsubComplex = pubsub_complex.testPubsubComplex;
exports.testPubsubOptions = pubsub_options.testPubsubOptions;
exports.testPubsubExcludeMe = pubsub_excludme.testPubsubExcludeMe;
exports.testPubsubExclude = pubsub_exclude.testPubsubExclude;
exports.testPubsubEligible = pubsub_eligible.testPubsubEligible;
exports.testPubsubPrefixSub = pubsub_prefix_sub.testPubsubPrefixSub;
exports.testPubsubWildcardSub = pubsub_wildcard_sub.testPubsubWildcardSub;

//exports.testSync = sync.testSync;
//exports.testAsync = async.testAsync;
//exports.testConnect = connect.testConnect;
//exports.testMsgpackSerialization = msgpack_serialization.testMsgpackSerialization;
exports.testRawSocketTransport = rawsocket_transport.testRawSocketTransport;
//exports.testRpcArguments = rpc_arguments.testRpcArguments;
//exports.testRpcComplex = rpc_complex.testRpcComplex;
//exports.testRpcError = rpc_error.testRpcError;
//exports.testRpcOptions = rpc_options.testRpcOptions;
//exports.testRpcProgress = rpc_progress.testRpcProgress;
//exports.testRpcSlowsquare = rpc_slowsquare.testRpcSlowsquare;
//exports.testRpcRouting = rpc_routing.testRpcRouting;
//exports.testPubsubBasic = pubsub_basic.testPubsubBasic;
//exports.testPubsubComplex = pubsub_complex.testPubsubComplex;
//exports.testPubsubOptions = pubsub_options.testPubsubOptions;
//exports.testPubsubExcludeMe = pubsub_excludme.testPubsubExcludeMe;
//exports.testPubsubExclude = pubsub_exclude.testPubsubExclude;
//exports.testPubsubEligible = pubsub_eligible.testPubsubEligible;
//exports.testPubsubPrefixSub = pubsub_prefix_sub.testPubsubPrefixSub;
//exports.testPubsubWildcardSub = pubsub_wildcard_sub.testPubsubWildcardSub;
93 changes: 93 additions & 0 deletions test/test_rawsocket_transport.js
@@ -0,0 +1,93 @@
///////////////////////////////////////////////////////////////////////////////
//
// AutobahnJS - http://autobahn.ws, http://wamp.ws
//
// A JavaScript library for WAMP ("The Web Application Messaging Protocol").
//
// Copyright (c) Crossbar.io Technologies GmbH and contributors
//
// Licensed under the MIT License.
// http://www.opensource.org/licenses/mit-license.php
//
///////////////////////////////////////////////////////////////////////////////

var autobahn = require('./../index.js');
var testutil = require('./testutil.js');

exports.testRawSocketTransport = function (testcase) {

testcase.expect(1);

var test = new testutil.Testlog("test/test_rawsocket_transport.txt");
var N = 2;

test.log("connecting " + N + " sessions ...");

var connection_config = {
realm: testutil.config.realm,
transports: [
{
type: 'rawsocket',
host: '127.0.0.1',
port: 8080
}
],
// FIXME - serializer is ignored! sth wrong
serializers: [
new autobahn.serializer.MsgpackSerializer()
],
protocols: ['wamp.2.msgpack']
};

var dl = testutil.connect_n(N, connection_config);

autobahn.when.all(dl).then(
function (res) {
test.log("all " + res.length + " sessions connected");

for (var i = 0; i < res.length; ++i) {
test.log("session._socket.info", res[i]._socket.info);
}

var session1 = res[0];
var session2 = res[1];

var counter = 0;

var t1 = setInterval(function () {
test.log("publishing to topic 'com.myapp.topic1': " + counter);
session1.publish('com.myapp.topic1', [counter]);
counter += 1;
}, 100);

var received = 0;

var sub;
function onevent1(args) {
test.log("Got event:", args[0]);
received += 1;
if (received > 5) {
test.log("Closing ..");

clearInterval(t1);

session1.leave();
session2.leave();

var chk = test.check()
testcase.ok(!chk, chk);
testcase.done();
}
}

sub = session2.subscribe('com.myapp.topic1', onevent1);
},
function (err) {
test.log(err);

var chk = test.check();
testcase.ok(!chk, chk);
testcase.done();
}
);
}
17 changes: 17 additions & 0 deletions test/test_rawsocket_transport.txt
@@ -0,0 +1,17 @@
0 "connecting 2 sessions ..."
1 "all 2 sessions connected"
2 "session._socket.info" {"protocol":"wamp.2.json","type":"rawsocket","url":null}
3 "session._socket.info" {"protocol":"wamp.2.json","type":"rawsocket","url":null}
4 "publishing to topic 'com.myapp.topic1': 0"
5 "Got event:" 0
6 "publishing to topic 'com.myapp.topic1': 1"
7 "Got event:" 1
8 "publishing to topic 'com.myapp.topic1': 2"
9 "Got event:" 2
10 "publishing to topic 'com.myapp.topic1': 3"
11 "Got event:" 3
12 "publishing to topic 'com.myapp.topic1': 4"
13 "Got event:" 4
14 "publishing to topic 'com.myapp.topic1': 5"
15 "Got event:" 5
16 "Closing .."
8 changes: 4 additions & 4 deletions test/testutil.js
Expand Up @@ -29,17 +29,17 @@ var config = {
*/

// shortcut config
var config = {
var default_config = {
url: 'ws://127.0.0.1:8080/ws',
realm: 'realm1'
}

function connect_n(n) {
function connect_n(n, config) {
var dl = [];
for (var i = 0; i < n; ++i) {
(function (idx) {
var d = autobahn.when.defer();
var connection = new autobahn.Connection(config);
var connection = new autobahn.Connection(config || default_config);

connection.onopen = function (session) {
d.resolve(session);
Expand Down Expand Up @@ -148,5 +148,5 @@ Testlog.prototype.check = function () {


exports.Testlog = Testlog;
exports.config = config;
exports.config = default_config;
exports.connect_n = connect_n;

0 comments on commit 4e99659

Please sign in to comment.