THRIFT-847 Test Framework harmonization across all languages

Added cross tests for ruby with ruby, cpp, java, node and python.
ruby_protocols="binary compact json accel"
ruby_transports="buffered framed"
ruby_sockets="ip"
Created new TestServer.rb and TestClient.rb for this purpose

Patch: Chamila Dilshan Wijayarathna
diff --git a/test/test.sh b/test/test.sh
index 0fdb0de..ffcccfe 100755
--- a/test/test.sh
+++ b/test/test.sh
@@ -199,6 +199,10 @@
 py_transports="buffered framed"
 py_sockets="ip ip-ssl"
 
+ruby_protocols="binary compact json accel"
+ruby_transports="buffered framed"
+ruby_sockets="ip"
+
 
 ######### java client - java server #############
 for proto in $java_protocols; do
@@ -271,7 +275,6 @@
 NODE_TEST_DIR=${BASEDIR}/../lib/nodejs/test
 export NODE_PATH=${NODE_TEST_DIR}:${NODE_TEST_DIR}/../lib:${NODE_PATH}
 ######### nodejs client - nodejs server ##############
-##
 for proto in ${nodejs_protocols}; do
   for trans in ${nodejs_transports}; do
     for sock in ${nodejs_sockets}; do
@@ -288,7 +291,6 @@
 done
 
 ######### nodejs client - cpp server ##############
-##
 for proto in $(intersection "${nodejs_protocols}" "${cpp_protocols}"); do
   for trans in $(intersection "${nodejs_transports}" "${cpp_transports}"); do
     for sock in $(intersection "${nodejs_sockets}" "${cpp_sockets}"); do
@@ -321,7 +323,6 @@
 done
 
 ######### nodejs client - java server ##############
-##
 for proto in $(intersection "${nodejs_protocols}" "${java_protocols}"); do
   for trans in $(intersection "${nodejs_transports}" "${java_server_transports}"); do
     for sock in $(intersection "${nodejs_sockets}" "${java_sockets}"); do
@@ -445,7 +446,6 @@
   done
 
 ######### py client - java server ##############
-##
 for proto in $(intersection "${py_protocols}" "${java_protocols}"); do
   for trans in $(intersection "${py_transports}" "${java_server_transports}"); do
     for sock in $(intersection "${py_sockets}" "${java_sockets}"); do
@@ -504,7 +504,6 @@
   done
 
 ######### py client - nodejs server ##############
-##
 for proto in $(intersection "${py_protocols}" "${nodejs_protocols}"); do
   for trans in $(intersection "${py_transports}" "${nodejs_transports}"); do
     for sock in $(intersection "${py_sockets}" "${nodejs_sockets}"); do
@@ -562,6 +561,280 @@
     done
   done
 
+######### ruby client - ruby server ##############
+for proto in ${ruby_protocols}; do
+  for trans in ${ruby_transports}; do
+    for sock in ${ruby_sockets}; do
+      case "$sock" in
+        "ip" ) extraparam="";;
+        "ip-ssl" ) extraparam="--ssl";;
+      esac
+      do_test "ruby-ruby" "${proto}" "${trans}-${sock}" \
+              "ruby rb/integration/TestClient.rb --protocol=${proto} --transport=${trans} --port=9091" \
+              "ruby rb/integration/TestServer.rb --protocol=${proto} --transport=${trans} --port=9091" \
+              "5" "5"
+    done
+  done
+done
+
+for trans in ${ruby_transports}; do
+    for sock in ${ruby_sockets}; do
+      case "$sock" in
+        "ip" ) extraparam="";;
+        "ip-ssl" ) extraparam="--ssl";;
+      esac
+      do_test "ruby-ruby" "accel-binary" "${trans}-${sock}" \
+              "ruby rb/integration/TestClient.rb --protocol=accel --transport=${trans} --port=9091" \
+              "ruby rb/integration/TestServer.rb --protocol=binary --transport=${trans} --port=9091" \
+              "5" "5"
+      do_test "ruby-ruby" "binary-accel" "${trans}-${sock}" \
+              "ruby rb/integration/TestClient.rb --protocol=binary --transport=${trans} --port=9091" \
+              "ruby rb/integration/TestServer.rb --protocol=accel --transport=${trans} --port=9091" \
+              "5" "5"
+    done
+  done
+
+######### ruby client - cpp server ##############
+for proto in $(intersection "${cpp_protocols}" "${ruby_protocols}"); do
+  for trans in $(intersection "${cpp_transports}" "${ruby_transports}"); do
+    for sock in $(intersection "${cpp_sockets}" "${ruby_sockets}"); do
+      case "$sock" in
+        "ip" ) extraparam="";;
+        "ip-ssl" ) extraparam="--ssl";;
+      esac
+      do_test "ruby-cpp" "${proto}" "${trans}-${sock}" \
+              "ruby rb/integration/TestClient.rb --protocol=${proto} --transport=${trans}" \
+              "cpp/TestServer --protocol=${proto} --transport=${trans} ${extraparam}" \
+              "5" "5"
+    done
+  done
+done
+
+for trans in $(intersection "${cpp_transports}" "${ruby_transports}"); do
+    for sock in $(intersection "${cpp_sockets}" "${ruby_sockets}"); do
+      case "$sock" in
+        "ip" ) extraparam="";;
+        "ip-ssl" ) extraparam="--ssl";;
+      esac
+      do_test "ruby-cpp" "accel-binary" "${trans}-${sock}" \
+              "ruby rb/integration/TestClient.rb --protocol=accel --transport=${trans}" \
+              "cpp/TestServer --protocol=binary --transport=${trans} ${extraparam}" \
+              "5" "5"
+    done
+  done
+
+######### cpp client - ruby server ##############
+for proto in $(intersection "${cpp_protocols}" "${ruby_protocols}"); do
+  for trans in $(intersection "${cpp_transports}" "${ruby_transports}"); do
+    for sock in $(intersection "${cpp_sockets}" "${ruby_sockets}"); do
+      case "$sock" in
+        "ip" ) extraparam="";;
+        "ip-ssl" ) extraparam="--ssl";;
+      esac
+      do_test "cpp-ruby" "${proto}" "${trans}-${sock}" \
+              "cpp/TestClient --protocol=${proto} --transport=${trans} ${extraparam}" \
+              "ruby rb/integration/TestServer.rb --protocol=${proto} --transport=${trans}" \
+              "5" "5"
+    done
+  done
+done
+
+for trans in $(intersection "${cpp_transports}" "${ruby_transports}"); do
+    for sock in $(intersection "${cpp_sockets}" "${ruby_sockets}"); do
+      case "$sock" in
+        "ip" ) extraparam="";;
+        "ip-ssl" ) extraparam="--ssl";;
+      esac
+      do_test "cpp-ruby" "binary-accel" "${trans}-${sock}" \
+              "cpp/TestClient --protocol=binary --transport=${trans} ${extraparam}" \
+              "ruby rb/integration/TestServer.rb --protocol=accel --transport=${trans}" \
+              "5" "5"
+    done
+  done
+
+######### ruby client - java server ##############
+for proto in $(intersection "${ruby_protocols}" "${java_protocols}"); do
+  for trans in $(intersection "${ruby_transports}" "${java_server_transports}"); do
+    for sock in $(intersection "${ruby_sockets}" "${java_sockets}"); do
+      case "$sock" in
+        "ip" ) extraparam="";;
+        "ip-ssl" ) extraparam="--ssl";;
+      esac
+      do_test "ruby-java" "${proto}" "${trans}-${sock}" \
+              "ruby rb/integration/TestClient.rb --protocol=${proto} --transport=${trans}" \
+              "ant -f  ../lib/java/build.xml -Dno-gen-thrift=\"\" -Dtestargs \"--protocol=${proto} --transport=${trans} ${extraparam}\" run-testserver" \
+              "15" "5"
+    done
+  done
+done
+
+for trans in $(intersection "${ruby_transports}" "${java_server_transports}"); do
+    for sock in $(intersection "${ruby_sockets}" "${java_sockets}"); do
+      case "$sock" in
+        "ip" ) extraparam="";;
+        "ip-ssl" ) extraparam="--ssl";;
+      esac
+      do_test "ruby-java" "accel-binary" "${trans}-${sock}" \
+              "ruby rb/integration/TestClient.rb --protocol=accel --transport=${trans}" \
+              "ant -f  ../lib/java/build.xml -Dno-gen-thrift=\"\" -Dtestargs \"--protocol=binary --transport=${trans} ${extraparam}\" run-testserver" \
+              "15" "5"
+    done
+  done
+
+######### java client - ruby server ##############
+for proto in $(intersection "${ruby_protocols}" "${java_protocols}"); do
+  for trans in $(intersection "${ruby_transports}" "${java_client_transports}"); do
+    for sock in $(intersection "${ruby_sockets}" "${java_sockets}"); do
+      case "$sock" in
+        "ip" ) extraparam="";;
+        "ip-ssl" ) extraparam="--ssl";;
+      esac
+      do_test "java-ruby" "${proto}" "${trans}-${sock}" \
+              "ant -f  ../lib/java/build.xml -Dno-gen-thrift=\"\" -Dtestargs \"--protocol=${proto} --transport=${trans} ${extraparam}\" run-testclient" \
+              "ruby rb/integration/TestServer.rb --protocol=${proto} --transport=${trans}" \
+              "10" "5"
+    done
+  done
+done
+
+for trans in $(intersection "${ruby_transports}" "${java_client_transports}"); do
+    for sock in $(intersection "${ruby_sockets}" "${java_sockets}"); do
+      case "$sock" in
+        "ip" ) extraparam="";;
+        "ip-ssl" ) extraparam="--ssl";;
+      esac
+      do_test "java-ruby" "binary-accel" "${trans}-${sock}" \
+              "ant -f  ../lib/java/build.xml -Dno-gen-thrift=\"\" -Dtestargs \"--protocol=binary --transport=${trans} ${extraparam}\" run-testclient" \
+              "ruby rb/integration/TestServer.rb --protocol=accel --transport=${trans}" \
+              "10" "5"
+    done
+  done
+
+######### ruby client - nodejs server ##############
+for proto in $(intersection "${ruby_protocols}" "${nodejs_protocols}"); do
+  for trans in $(intersection "${ruby_transports}" "${nodejs_transports}"); do
+    for sock in $(intersection "${ruby_sockets}" "${nodejs_sockets}"); do
+      case "$sock" in
+        "ip" ) extraparam="";;
+        "ip-ssl" ) extraparam="--ssl";;
+      esac
+      do_test "ruby-nodejs" "${proto}" "${trans}-${sock}" \
+              "ruby rb/integration/TestClient.rb --protocol=${proto} --transport=${trans}" \
+              "node ${NODE_TEST_DIR}/server.js -p ${proto} -t ${trans} ${extraparam}" \
+              "5" "2"
+    done
+  done
+done
+
+for trans in $(intersection "${ruby_transports}" "${nodejs_transports}"); do
+    for sock in $(intersection "${ruby_sockets}" "${nodejs_sockets}"); do
+      case "$sock" in
+        "ip" ) extraparam="";;
+        "ip-ssl" ) extraparam="--ssl";;
+      esac
+      do_test "ruby-nodejs" "${proto}" "${trans}-${sock}" \
+              "ruby rb/integration/TestClient.rb --protocol=accel --transport=${trans}" \
+              "node ${NODE_TEST_DIR}/server.js -p binary -t ${trans} ${extraparam}" \
+              "5" "2"
+    done
+  done
+
+######### nodejs client - ruby server ##############
+for proto in $(intersection "${ruby_protocols}" "${nodejs_protocols}"); do
+  for trans in $(intersection "${ruby_transports}" "${nodejs_transports}"); do
+    for sock in $(intersection "${ruby_sockets}" "${nodejs_sockets}"); do
+      case "$sock" in
+        "ip" ) extraparam="";;
+        "ip-ssl" ) extraparam="--ssl";;
+      esac
+      do_test "nodejs-ruby" "${proto}" "${trans}-${sock}" \
+              "node ${NODE_TEST_DIR}/client.js -p ${proto} -t ${trans} ${extraparam}" \
+              "ruby rb/integration/TestServer.rb --protocol=${proto} --transport=${trans}" \
+              "10" "5"
+    done
+  done
+done
+
+for trans in $(intersection "${ruby_transports}" "${nodejs_transports}"); do
+    for sock in $(intersection "${ruby_sockets}" "${nodejs_sockets}"); do
+      case "$sock" in
+        "ip" ) extraparam="";;
+        "ip-ssl" ) extraparam="--ssl";;
+      esac
+      do_test "nodejs-ruby" "binary-accel" "${trans}-${sock}" \
+              "node ${NODE_TEST_DIR}/client.js -p binary -t ${trans} ${extraparam}" \
+              "ruby rb/integration/TestServer.rb --protocol=accel --transport=${trans}" \
+              "10" "2"
+    done
+  done
+
+  ######### py client - ruby server ##############
+for proto in $(intersection "${py_protocols}" "${ruby_protocols}"); do
+  for trans in $(intersection "${py_transports}" "${ruby_transports}"); do
+    for sock in $(intersection "${py_sockets}" "${ruby_sockets}"); do
+      case "$sock" in
+        "ip" ) extraparam="";;
+        "ip-ssl" ) extraparam="--ssl";;
+      esac
+      do_test "py-ruby" "${proto}" "${trans}-${sock}" \
+              "py/TestClient.py --protocol=${proto} --transport=${trans} --port=9090 --host=localhost --genpydir=py/gen-py ${extraparam}" \
+              "ruby rb/integration/TestServer.rb --protocol=${proto} --transport=${trans}" \
+              "15" "5"
+    done
+  done
+done
+
+for trans in $(intersection "${py_transports}" "${ruby_transports}"); do
+    for sock in $(intersection "${py_sockets}" "${ruby_sockets}"); do
+      case "$sock" in
+        "ip" ) extraparam="";;
+        "ip-ssl" ) extraparam="--ssl";;
+      esac
+      do_test "py-ruby" "${proto}" "${trans}-${sock}" \
+              "py/TestClient.py --protocol=accel --transport=${trans} --port=9090 --host=localhost --genpydir=py/gen-py ${extraparam}" \
+              "ruby rb/integration/TestServer.rb --protocol=binary --transport=${trans}" \
+              "15" "5"
+      do_test "py-ruby" "${proto}" "${trans}-${sock}" \
+              "py/TestClient.py --protocol=binary --transport=${trans} --port=9090 --host=localhost --genpydir=py/gen-py ${extraparam}" \
+              "ruby rb/integration/TestServer.rb --protocol=accel --transport=${trans}" \
+              "15" "5"
+    done
+  done
+
+######### ruby client - py server ##############
+for proto in $(intersection "${py_protocols}" "${ruby_protocols}"); do
+  for trans in $(intersection "${py_transports}" "${ruby_transports}"); do
+    for sock in $(intersection "${py_sockets}" "${ruby_sockets}"); do
+      case "$sock" in
+        "ip" ) extraparam="";;
+        "ip-ssl" ) extraparam="--ssl";;
+      esac
+      do_test "ruby-py" "${proto}" "${trans}-${sock}" \
+              "ruby rb/integration/TestClient.rb --protocol=${proto} --transport=${trans}" \
+              "py/TestServer.py --protocol=${proto} --transport=${trans} --port=9090 --genpydir=py/gen-py TSimpleServer ${extraparam}" \
+              "5" "2"
+    done
+  done
+done
+
+for trans in $(intersection "${py_transports}" "${ruby_transports}"); do
+    for sock in $(intersection "${py_sockets}" "${ruby_sockets}"); do
+      case "$sock" in
+        "ip" ) extraparam="";;
+        "ip-ssl" ) extraparam="--ssl";;
+      esac
+      do_test "ruby-py" "binary-accel" "${trans}-${sock}" \
+              "ruby rb/integration/TestClient.rb --protocol=binary --transport=${trans}" \
+              "py/TestServer.py --protocol=accel --transport=${trans} --port=9090 --genpydir=py/gen-py TSimpleServer ${extraparam}" \
+              "5" "2"
+      do_test "ruby-py" "accel-binary" "${trans}-${sock}" \
+              "ruby rb/integration/TestClient.rb --protocol=accel --transport=${trans}" \
+              "py/TestServer.py --protocol=binary --transport=${trans} --port=9090 --genpydir=py/gen-py TSimpleServer ${extraparam}" \
+              "5" "2"
+    done
+  done
+
+
 # delete Unix Domain Socket used by cpp tests
 rm -f /tmp/ThriftTest.thrift
 
@@ -595,14 +868,6 @@
         "make -C php/ client" \
         "cpp/TestServer" \
         "10" "2"
-do_test "rb-rb" "binary" "buffered-ip" \
-        "ruby rb/integration/simple_client.rb" \
-        "ruby rb/integration/simple_server.rb" \
-        "5" "5"
-do_test "rb-rb" "binary-accl" "buffered-ip" \
-        "ruby rb/integration/accelerated_buffered_client.rb" \
-        "ruby rb/integration/accelerated_buffered_server.rb" \
-        "5" "5"
 
 echo " failed tests are logged to test/log/error.log"
 echo " full log is here test/log/client_server_protocol_transport_client.log"