You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@thrift.apache.org by he...@apache.org on 2013/05/11 20:44:48 UTC

[4/5] git commit: THRIFT-1967 Node.js tests don't cover all services Patch: Henrique Mendonça

THRIFT-1967 Node.js tests don't cover all services
Patch: Henrique Mendonça

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


Project: http://git-wip-us.apache.org/repos/asf/thrift/repo
Commit: http://git-wip-us.apache.org/repos/asf/thrift/commit/08c34eae
Tree: http://git-wip-us.apache.org/repos/asf/thrift/tree/08c34eae
Diff: http://git-wip-us.apache.org/repos/asf/thrift/diff/08c34eae

Branch: refs/heads/master
Commit: 08c34eae979c7a1246bc1b598724d56b147dd2f2
Parents: 4a35d4c
Author: Henrique <henrique@henrique-vb.(none)>
Authored: Sat May 11 19:29:19 2013 +0200
Committer: Henrique <henrique@henrique-vb.(none)>
Committed: Sat May 11 20:41:22 2013 +0200

----------------------------------------------------------------------
 .travis.yml             |    5 ++-
 lib/nodejs/package.json |    3 +-
 test/nodejs/Makefile.am |    4 +-
 test/nodejs/client.js   |  117 ++++++++++++++++++++++++++++++++++++-----
 test/nodejs/server.js   |   29 +++++-----
 test/test.sh            |    4 +-
 6 files changed, 126 insertions(+), 36 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/thrift/blob/08c34eae/.travis.yml
----------------------------------------------------------------------
diff --git a/.travis.yml b/.travis.yml
index 64f658d..7e654f3 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
-

http://git-wip-us.apache.org/repos/asf/thrift/blob/08c34eae/lib/nodejs/package.json
----------------------------------------------------------------------
diff --git a/lib/nodejs/package.json b/lib/nodejs/package.json
index b3f7b20..c57a07b 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"
   }
 }

http://git-wip-us.apache.org/repos/asf/thrift/blob/08c34eae/test/nodejs/Makefile.am
----------------------------------------------------------------------
diff --git a/test/nodejs/Makefile.am b/test/nodejs/Makefile.am
index 06e2eec..2c0a18f 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:

http://git-wip-us.apache.org/repos/asf/thrift/blob/08c34eae/test/nodejs/client.js
----------------------------------------------------------------------
diff --git a/test/nodejs/client.js b/test/nodejs/client.js
index 8e19b88..ea2cc38 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,26 +155,102 @@ client.testMap(mapout, function(err, response) {
   assert.deepEqual(mapout, response);
 });
 
-/*
- * TODO: testSet, testList, testEnum, testTypedef, testMapMap, testInsanity
- */
+
+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.deepEqual(mapTestInput, response);
+});
 
 
-client.testException('ApplicationException', function(err, response) {
-  //assert.equal('ApplicationException', err);
-  assert( ! 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.equal('Xception', err.message);
   assert( ! response);
+  assert.equal(err.errorCode, 1001);
+  assert.equal('Xception', err.message);
 });
-
-client.testException('success', function(err, response) {
+client.testException('no Exception', function(err, response) {
   assert( ! err);
-  //assert.equal('success', response);
+  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!");

http://git-wip-us.apache.org/repos/asf/thrift/blob/08c34eae/test/nodejs/server.js
----------------------------------------------------------------------
diff --git a/test/nodejs/server.js b/test/nodejs/server.js
index 056209d..06724e6 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
   }
 });
 

http://git-wip-us.apache.org/repos/asf/thrift/blob/08c34eae/test/test.sh
----------------------------------------------------------------------
diff --git a/test/test.sh b/test/test.sh
index 76301c1..351fa1c 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 -