THRIFT-3373: cross test cleanup
Client: build, node, c_glib, cpp, hs, py, rb
Patch: Nobuaki Sukegawa

Github Pull Request:
This closes #641
commit 338f1a502961a4f63b0bd4b3dae4099062d6d17f
Author: Nobuaki Sukegawa <nsukeg@gmail.com>
Date: 2015-10-09T17:25:18Z
THRIFT-3373 Various fixes for cross test servers and clients
diff --git a/lib/nodejs/test/test_driver.js b/lib/nodejs/test/test_driver.js
index 27ffd63..09439e5 100644
--- a/lib/nodejs/test/test_driver.js
+++ b/lib/nodejs/test/test_driver.js
@@ -55,6 +55,7 @@
       assert.ok(a == e, m);
     }));
     testCases.deep.forEach(makeAsserter(assert.deepEqual));
+    testCases.deepUnordered.forEach(makeAsserter(makeUnorderedDeepEqual(assert)));
 
     client.testMapMap(42, function(err, response) {
       var expected = {
@@ -147,6 +148,7 @@
       assert.ok(a == e, m);
     }));
     testCases.deep.forEach(makeAsserter(assert.deepEqual));
+    testCases.deepUnordered.forEach(makeAsserter(makeUnorderedDeepEqual(assert)));
 
     client.testStruct(testCases.out)
       .then(function(response) {
@@ -281,3 +283,20 @@
 
   setTimeout(TestForCompletion, retry_interval);
 }
+
+function makeUnorderedDeepEqual(assert) {
+  return function(actual, expected, name) {
+    assert.equal(actual.length, expected.length, name);
+    for (var k in actual) {
+      var found = false;
+      for (var k2 in expected) {
+        if (actual[k] === expected[k2]) {
+          found = true;
+        }
+      }
+      if (!found) {
+        assert.fail('Unexpected value ' + actual[k] + ' with key ' + k);
+      }
+    }
+  };
+}