THRIFT-847 Test Framework harmonization across all languages
 THRIFT-1595 Java test server should follow the documented behavior as of THRIFT-1590
 Patch: Kamil Salas
diff --git a/test/test.sh b/test/test.sh
index 4c76d90..76301c1 100755
--- a/test/test.sh
+++ b/test/test.sh
@@ -33,6 +33,18 @@
   printf "%-16s %-11s %-17s %-s\n" "client-server:" "protocol:" "transport:" "result:"
 }
 
+intersection() {
+  return_value=""
+  for one in $1; do
+    for two in $2; do
+      if [ ${one} = ${two} ]; then
+        return_value=${return_value}" "${one}
+      fi
+    done;
+  done;
+  echo ${return_value};
+}
+
 do_test () {
     client_server=$1
     protocol=$2
@@ -76,16 +88,39 @@
 #TODO add enum for parameters
 #TODO align program arguments across languages
 
-protocols="binary json"
-transports="buffered framed http"
-sockets="ip domain"
+cpp_protocols="binary json"
+java_protocols="binary json compact"
+cpp_transports="buffered framed http"
+java_server_transports="buffered framed fastframed"
+java_client_transports=${java_server_transports}" http"
 # we need a test certificate first
-#sockets="ip ip-ssl domain"
+cpp_sockets="ip domain"
+java_sockets="ip ip-ssl"
+# TODO fastframed java transport is another implementation of framed transport
 
 
-for proto in $protocols; do
-  for trans in $transports; do
-    for sock in $sockets; do
+ant -f ../lib/java/build.xml compile-test 1>/dev/null
+
+######### java client - java server #############
+for proto in $java_protocols; do
+  for trans in $java_server_transports; do
+    for sock in $java_sockets; do
+      case "$sock" in
+        "ip" ) extraparam="";;
+        "ip-ssl" ) extraparam="--ssl";;
+      esac
+      do_test "java-java" "${proto}" "${trans}-${sock}" \
+              "ant -f  ../lib/java/build.xml -Dno-gen-thrift=\"\" -Dtestargs \"--protocol=${proto} --transport=${trans} ${extraparam}\" testclient" \
+              "ant -f  ../lib/java/build.xml -Dno-gen-thrift=\"\" -Dtestargs \"--protocol=${proto} --transport=${trans} ${extraparam}\" testserver" \
+            "15" "15"
+    done
+  done
+done
+
+######### cpp client - cpp server ###############
+for proto in $cpp_protocols; do
+  for trans in $cpp_transports; do
+    for sock in $cpp_sockets; do
       case "$sock" in
        "ip" )     extraparam="";;
        "ip-ssl" ) extraparam="--ssl";;
@@ -94,10 +129,43 @@
       do_test "cpp-cpp"   "${proto}" "${trans}-${sock}" \
               "cpp/TestClient --protocol=${proto} --transport=${trans} ${extraparam}" \
               "cpp/TestServer --protocol=${proto} --transport=${trans} ${extraparam}" \
-              "10" "5"
-    done;
-  done;
-done;
+              "10" "10"
+    done
+  done
+done
+
+######### java client - cpp server ##############
+# warning: ssl over http is not supported in java client!
+for proto in $(intersection "${java_protocols}" "${cpp_protocols}"); do
+  for trans in $(intersection "${java_client_transports}" "${cpp_transports}"); do
+    for sock in $(intersection "${java_sockets}" "${cpp_sockets}"); do
+      case "$sock" in
+        "ip" ) extraparam="";;
+        "ip-ssl" ) extraparam="--ssl";;
+      esac
+      do_test "java-cpp" "${proto}" "${trans}-ip" \
+              "ant -f  ../lib/java/build.xml -Dno-gen-thrift=\"\" -Dtestargs \"--protocol=${proto} --transport=${trans} ${extraparam}\" testclient" \
+              "cpp/TestServer --protocol=${proto} --transport=${trans} ${extraparam}"\
+              "10" "15"
+    done
+  done
+done
+
+######### cpp client - java server ##############
+for proto in $(intersection "${cpp_protocols}" "${java_protocols}"); do
+  for trans in $(intersection "${cpp_transports}" "${java_server_transports}"); do
+    for sock in $(intersection "${java_sockets}" "${cpp_sockets}"); do
+      case "$sock" in
+        "ip" ) extraparam="";;
+        "ip-ssl" ) extraparam="--ssl";;
+      esac
+      do_test "cpp-java" "${proto}" "${trans}-ip" \
+              "cpp/TestClient --protocol=${proto} --transport=${trans}" \
+              "ant -f  ../lib/java/build.xml -Dno-gen-thrift=\"\" -Dtestargs \"--protocol=${proto} --transport=${trans}\" testserver" \
+              "15" "10"
+    done
+  done
+done
 
 # delete Unix Domain Socket used by cpp tests
 rm -f /tmp/ThriftTest.thrift
@@ -128,36 +196,20 @@
         "10" "10"
 do_test "py-java"  "binary" "buffered-ip" \
         "py/TestClient.py --proto=binary --port=9090 --host=localhost --genpydir=py/gen-py" \
-        "ant -f  ../lib/java/build.xml testserver" \
-        "120" "10"
-do_test "py-java"  "json"   "buffered-ip" \
+        "ant -f  ../lib/java/build.xml -Dno-gen-thrift=\"\" testserver" \
+        "15" "15"
+do_test "py-java"  "json"   "json-ip" \
         "py/TestClient.py --proto=json --port=9090 --host=localhost --genpydir=py/gen-py" \
-        "ant -f  ../lib/java/build.xml testserver" \
-        "120" "10"
+        "ant -f  ../lib/java/build.xml -Dno-gen-thrift=\"\" -Dtestargs \"--protocol=json\" testserver" \
+        "15" "10"
 do_test "java-py"  "binary" "buffered-ip" \
-        "ant -f  ../lib/java/build.xml testclient" \
+        "ant -f  ../lib/java/build.xml -Dno-gen-thrift=\"\" testclient" \
         "py/TestServer.py --proto=binary --port=9090 --genpydir=py/gen-py TSimpleServer" \
-        "10" "35"
-do_test "java-java" "binary" "buffered-ip" \
-        "ant -f  ../lib/java/build.xml testclient" \
-        "ant -f  ../lib/java/build.xml testserver" \
-        "120" "35"
-do_test "cpp-java"  "binary" "buffered-ip" \
-        "cpp/TestClient" \
-        "ant -f  ../lib/java/build.xml testserver" \
-        "100" "10"
-do_test "cpp-java"  "json"   "buffered-ip" \
-        "cpp/TestClient" \
-        "ant -f  ../lib/java/build.xml testserver" \
-        "100" "10"
+        "10" "15"
 do_test "js-java"   "json "  "http-ip" \
         "" \
         "ant -f  ../lib/js/test/build.xml unittest" \
-        "120" "10"
-do_test "java-cpp"  "binary" "buffered-ip" \
-        "ant -f  ../lib/java/build.xml testclient" \
-        "cpp/TestServer" \
-        "10" "35"
+        "10" "15"
 do_test "perl-cpp"  "binary" "buffered-ip" \
         "perl -I perl/gen-perl/ -I../lib/perl/lib/ perl/TestClient.pl" \
         "cpp/TestServer" \