From 08c34eae979c7a1246bc1b598724d56b147dd2f2 Mon Sep 17 00:00:00 2001 From: Henrique Date: Sat, 11 May 2013 19:29:19 +0200 Subject: [PATCH] =?UTF-8?q?THRIFT-1967=20Node.js=20tests=20don't=20cover?= =?UTF-8?q?=20all=20services=20Patch:=20Henrique=20Mendon=C3=A7a?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit align with the tests we have for the original JS and C++ libraries it also corrects two small bugs on the test server and add nodejs to travis and make check --- .travis.yml | 5 +- lib/nodejs/package.json | 3 +- test/nodejs/Makefile.am | 4 +- test/nodejs/client.js | 129 +++++++++++++++++++++++++++++++++------- test/nodejs/server.js | 29 +++++---- test/test.sh | 4 +- 6 files changed, 132 insertions(+), 42 deletions(-) diff --git a/.travis.yml b/.travis.yml index 64f658d13..7e654f3c7 100644 --- a/.travis.yml +++ b/.travis.yml @@ -48,6 +48,10 @@ before_install: - sudo apt-get install -qq ghc6 cabal-install libghc6-binary-dev libghc6-network-dev libghc6-http-dev # Thrift Compiler for Windows - sudo apt-get install -qq mingw32 mingw32-binutils mingw32-runtime +# node.js + - sudo apt-get install -qq nodejs npm + - sudo npm install nodeunit -g + - cd lib/nodejs; npm install; cd ../.. install: @@ -66,4 +70,3 @@ script: # TODO: add these steps # - sh bootstrap.sh ; sh contrib/mingw-cross-compile.sh # - sh bootstrap.sh ; dpkg-buildpackage -tc - diff --git a/lib/nodejs/package.json b/lib/nodejs/package.json index b3f7b20c9..c57a07bab 100755 --- a/lib/nodejs/package.json +++ b/lib/nodejs/package.json @@ -25,6 +25,7 @@ "main": "./lib/thrift", "engines": { "node": ">= 0.2.4" }, "dependencies": { - "node-int64": "0.3.x" + "node-int64": "~0.3.0", + "nodeunit": "~0.8.0" } } diff --git a/test/nodejs/Makefile.am b/test/nodejs/Makefile.am index 06e2eeca6..2c0a18fc4 100755 --- a/test/nodejs/Makefile.am +++ b/test/nodejs/Makefile.am @@ -28,8 +28,8 @@ check: stubs fi @if which node &> /dev/null ; then \ echo " Testing Client/Server"; \ - timeout 2 $(MAKE) server & \ - sleep 1; $(MAKE) client; sleep 1; \ + timeout -s14 3 $(MAKE) server & \ + sleep 1; $(MAKE) client; sleep 2; \ fi clean-local: diff --git a/test/nodejs/client.js b/test/nodejs/client.js index 8e19b88e0..ea2cc3837 100644 --- a/test/nodejs/client.js +++ b/test/nodejs/client.js @@ -31,7 +31,7 @@ connection.on('error', function(err) { assert(false, err); }); - // deepEqual doesn't work for binary64 + // deepEqual doesn't work with fields using node-int64 function checkRecursively(map1, map2) { if (typeof map1 !== 'function' && typeof map2 !== 'function') { if (!map1 || typeof map1 !== 'object') { @@ -47,7 +47,7 @@ function checkRecursively(map1, map2) { client.testVoid(function(err, response) { assert( ! err); - assert.equal(undefined, response); + assert.equal(undefined, response); //void }); @@ -83,6 +83,18 @@ client.testByte(1, function(err, response) { assert( ! err); assert.equal(1, response); }); +client.testByte(0, function(err, response) { + assert( ! err); + assert.equal(0, response); +}); +client.testByte(-1, function(err, response) { + assert( ! err); + assert.equal(-1, response); +}); +client.testByte(-127, function(err, response) { + assert( ! err); + assert.equal(-127, response); +}); client.testI32(-1, function(err, response) { assert( ! err); @@ -93,12 +105,10 @@ client.testI64(5, function(err, response) { assert( ! err); assert.equal(5, response); }); - client.testI64(-5, function(err, response) { assert( ! err); assert.equal(-5, response); }); - client.testI64(-34359738368, function(err, response) { assert( ! err); assert.equal(-34359738368, response); @@ -108,7 +118,6 @@ client.testDouble(-5.2098523, function(err, response) { assert( ! err); assert.equal(-5.2098523, response); }); - client.testDouble(7.012052175215044, function(err, response) { assert( ! err); assert.equal(7.012052175215044, response); @@ -126,6 +135,7 @@ client.testStruct(out, function(err, response) { checkRecursively(out, response); }); + var out2 = new ttypes.Xtruct2(); out2.byte_thing = 1; out2.struct_thing = out; @@ -135,6 +145,7 @@ client.testNest(out2, function(err, response) { checkRecursively(out2, response); }); + var mapout = {}; for (var i = 0; i < 5; ++i) { mapout[i] = i-10; @@ -144,27 +155,103 @@ client.testMap(mapout, function(err, response) { assert.deepEqual(mapout, response); }); -/* - * TODO: testSet, testList, testEnum, testTypedef, testMapMap, testInsanity - */ - -client.testException('ApplicationException', function(err, response) { - //assert.equal('ApplicationException', err); - assert( ! response); -}); - -client.testException('Xception', function(err, response) { - assert.equal('Xception', err.message); - assert( ! response); -}); - -client.testException('success', function(err, response) { +var mapTestInput = { + "a":"123", "a b":"with spaces ", "same":"same", "0":"numeric key", + "longValue":stringTest, stringTest:"long key" +}; +client.testStringMap(mapTestInput, function(err, response) { assert( ! err); - //assert.equal('success', response); + assert.deepEqual(mapTestInput, response); }); +var setTestInput = [1,2,3]; +client.testSet(setTestInput, function(err, response) { + assert( ! err); + assert.deepEqual(setTestInput, response); +}); +client.testList(setTestInput, function(err, response) { + assert( ! err); + assert.deepEqual(setTestInput, response); +}); + +client.testEnum(ttypes.Numberz.ONE, function(err, response) { + assert( ! err); + assert.equal(ttypes.Numberz.ONE, response); +}); + +client.testTypedef(69, function(err, response) { + assert( ! err); + assert.equal(69, response); +}); + + +var mapMapTest = { + "4": {"1":1, "2":2, "3":3, "4":4}, + "-4": {"-4":-4, "-3":-3, "-2":-2, "-1":-1} +}; +client.testMapMap(mapMapTest, function(err, response) { + assert( ! err); + assert.deepEqual(mapMapTest, response); +}); + +var crazy = new ttypes.Insanity({ + "userMap":{ "5":5, "8":8 }, + "xtructs":[new ttypes.Xtruct({ + "string_thing":"Goodbye4", + "byte_thing":4, + "i32_thing":4, + "i64_thing":4 + }), new ttypes.Xtruct({ + "string_thing":"Hello2", + "byte_thing":2, + "i32_thing":2, + "i64_thing":2 + })] +}); +var insanity = { + "1":{ "2": crazy, "3": crazy }, + "2":{ "6":{ "userMap":null, "xtructs":null } } +}; +client.testInsanity(crazy, function(err, response) { + assert( ! err); + checkRecursively(insanity, response); +}); + + +client.testException('TException', function(err, response) { + //assert(err); //BUG? + assert( ! response); +}); +client.testException('Xception', function(err, response) { + assert( ! response); + assert.equal(err.errorCode, 1001); + assert.equal('Xception', err.message); +}); +client.testException('no Exception', function(err, response) { + assert( ! err); + assert.equal(undefined, response); //void +}); + + +client.testOneway(1, function(err, response) { + assert(false); //should not answer +}); + +/** + * redo a simple test after the oneway to make sure we aren't "off by one" -- + * if the server treated oneway void like normal void, this next test will + * fail since it will get the void confirmation rather than the correct + * result. In this circumstance, the client will throw the exception: + * + * TApplicationException: Wrong method namea + */ +client.testI32(-1, function(err, response) { + assert( ! err); + assert.equal(-1, response); +}); + setTimeout(function() { console.log("Server successfully tested!"); connection.end(); diff --git a/test/nodejs/server.js b/test/nodejs/server.js index 056209db4..06724e619 100644 --- a/test/nodejs/server.js +++ b/test/nodejs/server.js @@ -123,7 +123,9 @@ var server = thrift.createServer(ThriftTest, { }, testInsanity: function(argument, result) { - console.log('testInsanity()'); + console.log('testInsanity('); + console.log(argument); + console.log(')'); var hello = new ttypes.Xtruct(); hello.string_thing = 'Hello2'; @@ -141,9 +143,7 @@ var server = thrift.createServer(ThriftTest, { crazy.userMap = []; crazy.userMap[ttypes.Numberz.EIGHT] = 8; crazy.userMap[ttypes.Numberz.FIVE] = 5; - crazy.xtructs = []; - crazy.xtructs.add(goodbye); - crazy.xtructs.add(hello); + crazy.xtructs = [goodbye, hello]; var first_map = []; var second_map = []; @@ -158,6 +158,8 @@ var server = thrift.createServer(ThriftTest, { insane[1] = first_map; insane[2] = second_map; + console.log('insane result:'); + console.log(insane); result(null, insane); }, @@ -179,31 +181,29 @@ var server = thrift.createServer(ThriftTest, { x.errorCode = 1001; x.message = arg; result(x); - } else if (arg === 'ApplicationException') { + } else if (arg === 'TException') { result(new Thrift.TException(arg)); } else { - var res = new ttypes.Xtruct(); - res.string_thing = arg; - result(null, res); + result(null); } }, testMultiException: function(arg0, arg1, result) { console.log('testMultiException(' + arg0 + ', ' + arg1 + ')'); if (arg0 === ('Xception')) { - var x = new Xception(); + var x = new ttypes.Xception(); x.errorCode = 1001; x.message = 'This is an Xception'; result(x); } else if (arg0 === ('Xception2')) { - var x = new Xception2(); + var x = new ttypes.Xception2(); x.errorCode = 2002; - x.struct_thing = new Xtruct(); + x.struct_thing = new ttypes.Xtruct(); x.struct_thing.string_thing = 'This is an Xception2'; result(x); } - var res = new Xtruct(); + var res = new ttypes.Xtruct(); res.string_thing = arg1; result(null, res); }, @@ -211,9 +211,8 @@ var server = thrift.createServer(ThriftTest, { testOneway: function(sleepFor, result) { console.log('testOneway(' + sleepFor + ') => sleeping...'); setTimeout(function(){ - console.log('Done sleeping!'); - }, sleepFor); - result(null); + console.log('Done sleeping for testOneway!'); + }, sleepFor*1000); //seconds } }); diff --git a/test/test.sh b/test/test.sh index 76301c11d..351fa1c98 100755 --- a/test/test.sh +++ b/test/test.sh @@ -221,7 +221,7 @@ do_test "php-cpp" "binary" "buffered-ip" \ do_test "nodejs-nodejs" "binary" "framed-ip" \ "make -C nodejs/ client" \ "make -C nodejs/ server" \ - "1" "10" + "1" "5" do_test "nodejs-cpp" "binary" "framed-ip" \ "make -C nodejs/ client" \ "cpp/TestServer --transport=framed" \ @@ -229,6 +229,6 @@ do_test "nodejs-cpp" "binary" "framed-ip" \ do_test "cpp-nodejs" "binary" "framed-ip" \ "cpp/TestClient --transport=framed" \ "make -C nodejs/ server" \ - "1" "10" + "1" "5" cd -