You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@thrift.apache.org by je...@apache.org on 2017/12/03 01:03:07 UTC

[37/50] [abbrv] thrift git commit: THRIFT-2013: update docker for artful (go back to lua 5.2) and enhance cpp client to send 0, 1, 2, 4, 8, ..., 131072 size binary tests, this exposed problems in the erl and rs servers and those tests have been disabled for no

THRIFT-2013: update docker for artful (go back to lua 5.2) and enhance
cpp client to send 0,1,2,4,8,...,131072 size binary tests, this exposed
problems in the erl and rs servers and those tests have been disabled for now.


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

Branch: refs/heads/0.11.0
Commit: 39eaae6675f01ff844b35c04ebd50090dc413624
Parents: 6e883f9
Author: James E. King, III <jk...@apache.org>
Authored: Sun Nov 19 20:17:33 2017 -0500
Committer: James E. King, III <jk...@apache.org>
Committed: Mon Nov 20 07:27:03 2017 -0500

----------------------------------------------------------------------
 LANGUAGES.md                          |   6 +-
 build/docker/README.md                |   8 +-
 build/docker/ubuntu-artful/Dockerfile |   7 +-
 lib/netcore/Thrift/Thrift.csproj      |   1 +
 lib/rs/src/transport/socket.rs        |   2 +-
 test/cpp/src/TestClient.cpp           | 188 +++++++++++++++--------------
 test/cpp/src/TestServer.cpp           |  12 +-
 test/known_failures_Linux.json        |  18 ++-
 test/rs/src/bin/test_client.rs        |   4 +-
 9 files changed, 133 insertions(+), 113 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/thrift/blob/39eaae66/LANGUAGES.md
----------------------------------------------------------------------
diff --git a/LANGUAGES.md b/LANGUAGES.md
index d1a21e2..79fcf28 100644
--- a/LANGUAGES.md
+++ b/LANGUAGES.md
@@ -114,7 +114,7 @@ The Language/Library Levels indicate the minimum and maximum versions that are u
 <tr align=center>
 <td align=left><a href="lib/netcore/README.md">.NET Core</a></td>
 <!-- Build Systems ---------><td><img src="doc/images/cred.png" alt=""/></td><td><img src="doc/images/cred.png" alt=""/></td>
-<!-- Language Levels -------><td colspan=2>2.0.0</td>
+<!-- Language Levels -------><td>2.0.0</td><td>2.0.3</td>
 <!-- Low-Level Transports --><td><img src="doc/images/cred.png" alt=""/></td><td><img src="doc/images/cred.png" alt=""/></td><td><img src="doc/images/cgrn.png" alt="Yes"/></td><td><img src="doc/images/cgrn.png" alt="Yes"/></td><td><img src="doc/images/cgrn.png" alt="Yes"/></td><td><img src="doc/images/cgrn.png" alt="Yes"/></td>
 <!-- Transport Wrappers ----><td><img src="doc/images/cgrn.png" alt="Yes"/></td><td><img src="doc/images/cgrn.png" alt="Yes"/></td><td><img src="doc/images/cred.png" alt=""/></td>
 <!-- Protocols -------------><td><img src="doc/images/cgrn.png" alt="Yes"/></td><td><img src="doc/images/cgrn.png" alt="Yes"/></td><td><img src="doc/images/cgrn.png" alt="Yes"/></td><td><img src="doc/images/cgrn.png" alt="Yes"/></td>
@@ -194,7 +194,7 @@ The Language/Library Levels indicate the minimum and maximum versions that are u
 <tr align=center>
 <td align=left><a href="lib/lua/README.md">Lua</a></td>
 <!-- Build Systems ---------><td><img src="doc/images/cgrn.png" alt="Yes"/></td><td><img src="doc/images/cred.png" alt=""/></td>
-<!-- Language Levels -------><td>5.1.5</td><td>5.3.3</td>
+<!-- Language Levels -------><td>5.1.5</td><td>5.2.4</td>
 <!-- Low-Level Transports --><td><img src="doc/images/cred.png" alt=""/></td><td><img src="doc/images/cred.png" alt=""/></td><td><img src="doc/images/cgrn.png" alt="Yes"/></td><td><img src="doc/images/cred.png" alt=""/></td><td><img src="doc/images/cgrn.png" alt="Yes"/></td><td><img src="doc/images/cred.png" alt=""/></td>
 <!-- Transport Wrappers ----><td><img src="doc/images/cgrn.png" alt="Yes"/></td><td><img src="doc/images/cgrn.png" alt="Yes"/></td><td><img src="doc/images/cred.png" alt=""/></td>
 <!-- Protocols -------------><td><img src="doc/images/cgrn.png" alt="Yes"/></td><td><img src="doc/images/cgrn.png" alt="Yes"/></td><td><img src="doc/images/cgrn.png" alt="Yes"/></td><td><img src="doc/images/cred.png" alt=""/></td>
@@ -204,7 +204,7 @@ The Language/Library Levels indicate the minimum and maximum versions that are u
 <tr align=center>
 <td align=left><a href="lib/nodejs/README.md">node.js</a></td>
 <!-- Build Systems ---------><td><img src="doc/images/cgrn.png" alt="Yes"/></td><td><img src="doc/images/cred.png" alt=""/></td>
-<!-- Language Levels -------><td>4.2.6</td><td>8.8.1</td>
+<!-- Language Levels -------><td>4.2.6</td><td>8.9.1</td>
 <!-- Low-Level Transports --><td><img src="doc/images/cred.png" alt=""/></td><td><img src="doc/images/cred.png" alt=""/></td><td><img src="doc/images/cred.png" alt=""/></td><td><img src="doc/images/cred.png" alt=""/></td><td><img src="doc/images/cgrn.png" alt="Yes"/></td><td><img src="doc/images/cgrn.png" alt="Yes"/></td>
 <!-- Transport Wrappers ----><td><img src="doc/images/cgrn.png" alt="Yes"/></td><td><img src="doc/images/cgrn.png" alt="Yes"/></td><td><img src="doc/images/cred.png" alt=""/></td>
 <!-- Protocols -------------><td><img src="doc/images/cgrn.png" alt="Yes"/></td><td><img src="doc/images/cgrn.png" alt="Yes"/></td><td><img src="doc/images/cgrn.png" alt="Yes"/></td><td><img src="doc/images/cgrn.png" alt="Yes"/></td>

http://git-wip-us.apache.org/repos/asf/thrift/blob/39eaae66/build/docker/README.md
----------------------------------------------------------------------
diff --git a/build/docker/README.md b/build/docker/README.md
index 10a7a76..a8d9501 100644
--- a/build/docker/README.md
+++ b/build/docker/README.md
@@ -147,15 +147,15 @@ Last updated: October 1, 2017
 | d         | 2.070.2       | 2.073.2       | 2.076.0       |       |
 | dart      | 1.20.1        | 1.24.2        | 1.24.2        |       |
 | delphi    |               |               |               | Not in CI |
-| dotnet    |               | 2.0.3         |               | Needs to be added to artful |
+| dotnet    |               | 2.0.3         | 2.0.3         |       |
 | erlang    | R16B03        | 18.3          | 20.0.4        |       |
 | go        | 1.2.1         | 1.6.2         | 1.8.3         |       |
 | haskell   | 7.6.3         | 7.10.3        | 8.0.2         |       |
 | haxe      |               | 3.2.1         | 3.4.2         | disabled in trusty builds - cores on install v3.0.0, disabled in artful builds - see THRIFT-4352 |
-| java      | 1.7.0_151     | 1.8.0_131     | 1.8.0_144     |       |
+| java      | 1.7.0_151     | 1.8.0_131     | 1.8.0_151     |       |
 | js        |               |               |               | Unsure how to look for version info? |
-| lua       | 5.1.5         | 5.2.4         | 5.3.3         |       |
-| nodejs    |               | 4.2.6         | 8.8.1         | trusty has node.js 0.10.0 which is too old |
+| lua       | 5.1.5         | 5.2.4         | 5.2.4         | Lua 5.3: see THRIFT-4386 |
+| nodejs    |               | 4.2.6         | 8.9.1         | trusty has node.js 0.10.0 which is too old |
 | ocaml     |               | 4.02.3        | 4.04.0        |       |
 | perl      | 5.18.2        | 5.22.1        | 5.26.0        |       |
 | php       | 5.5.9         | 7.0.22        | 7.1.8         |       |

http://git-wip-us.apache.org/repos/asf/thrift/blob/39eaae66/build/docker/ubuntu-artful/Dockerfile
----------------------------------------------------------------------
diff --git a/build/docker/ubuntu-artful/Dockerfile b/build/docker/ubuntu-artful/Dockerfile
index 756209d..cba2902 100644
--- a/build/docker/ubuntu-artful/Dockerfile
+++ b/build/docker/ubuntu-artful/Dockerfile
@@ -162,12 +162,11 @@ RUN apt-get install -y --no-install-recommends \
 
 RUN apt-get install -y --no-install-recommends \
 `# Lua dependencies` \
-      lua5.3 \
-      lua5.3-dev && \
-    ln -s /usr/bin/lua5.3 /usr/bin/lua && \
-    ln -s /usr/bin/luac5.3 /usr/bin/luac
+      lua5.2 \
+      lua5.2-dev
 # https://bugs.launchpad.net/ubuntu/+source/lua5.3/+bug/1707212
 # lua5.3 does not install alternatives!
+# need to update our luasocket code, lua doesn't have luaL_openlib any more
 
 RUN apt-get install -y --no-install-recommends \
 `# Node.js dependencies` \

http://git-wip-us.apache.org/repos/asf/thrift/blob/39eaae66/lib/netcore/Thrift/Thrift.csproj
----------------------------------------------------------------------
diff --git a/lib/netcore/Thrift/Thrift.csproj b/lib/netcore/Thrift/Thrift.csproj
index 3725d7b..e806fed 100644
--- a/lib/netcore/Thrift/Thrift.csproj
+++ b/lib/netcore/Thrift/Thrift.csproj
@@ -22,6 +22,7 @@
     <PackageReference Include="Microsoft.Extensions.Logging.Console" Version="[2.0,)" />
     <PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="[2.0,)" />
     <PackageReference Include="System.IO.Pipes" Version="[4.3,)" />
+    <PackageReference Include="System.Net.Http.WinHttpHandler" Version="4.4.0" />
     <PackageReference Include="System.Net.NameResolution" Version="[4.3,)" />
     <PackageReference Include="System.Net.Requests" Version="[4.3,)" />
     <PackageReference Include="System.Net.Security" Version="[4.3,)" />

http://git-wip-us.apache.org/repos/asf/thrift/blob/39eaae66/lib/rs/src/transport/socket.rs
----------------------------------------------------------------------
diff --git a/lib/rs/src/transport/socket.rs b/lib/rs/src/transport/socket.rs
index a6f780a..727bba3 100644
--- a/lib/rs/src/transport/socket.rs
+++ b/lib/rs/src/transport/socket.rs
@@ -156,7 +156,7 @@ impl Read for TTcpChannel {
 
 impl Write for TTcpChannel {
     fn write(&mut self, b: &[u8]) -> io::Result<usize> {
-        self.if_set(|s| s.write(b))
+        self.if_set(|s| s.write_all(b)).map(|_| b.len())
     }
 
     fn flush(&mut self) -> io::Result<()> {

http://git-wip-us.apache.org/repos/asf/thrift/blob/39eaae66/test/cpp/src/TestClient.cpp
----------------------------------------------------------------------
diff --git a/test/cpp/src/TestClient.cpp b/test/cpp/src/TestClient.cpp
index 6e7ff8e..9544a4a 100644
--- a/test/cpp/src/TestClient.cpp
+++ b/test/cpp/src/TestClient.cpp
@@ -44,6 +44,7 @@
 #include <boost/algorithm/string.hpp>
 #include <boost/filesystem.hpp>
 #include <boost/program_options.hpp>
+#include <boost/random/random_device.hpp>
 #include <thrift/stdcxx.h>
 #if _WIN32
 #include <thrift/windows/TWinsockSingleton.h>
@@ -130,13 +131,16 @@ bool print_eq(T expected, T actual) {
     return_code |= ERR_BASETYPES;                                                                  \
   }
 
+int binary_test(ThriftTestClient& testClient, string::size_type siz);
+
+BOOST_CONSTEXPR_OR_CONST int ERR_BASETYPES = 1;
+BOOST_CONSTEXPR_OR_CONST int ERR_STRUCTS = 2;
+BOOST_CONSTEXPR_OR_CONST int ERR_CONTAINERS = 4;
+BOOST_CONSTEXPR_OR_CONST int ERR_EXCEPTIONS = 8;
+BOOST_CONSTEXPR_OR_CONST int ERR_UNKNOWN = 64;
+
 int main(int argc, char** argv) {
   cout.precision(19);
-  int ERR_BASETYPES = 1;
-  int ERR_STRUCTS = 2;
-  int ERR_CONTAINERS = 4;
-  int ERR_EXCEPTIONS = 8;
-  int ERR_UNKNOWN = 64;
 
   string testDir  = boost::filesystem::system_complete(argv[0]).parent_path().parent_path().parent_path().string();
   string caPath   = testDir + "/keys/CA.pem";
@@ -161,13 +165,13 @@ int main(int argc, char** argv) {
   boost::program_options::options_description desc("Allowed options");
   desc.add_options()
       ("help,h", "produce help message")
-      ("host", 
-          boost::program_options::value<string>(&host)->default_value(host), 
+      ("host",
+          boost::program_options::value<string>(&host)->default_value(host),
           "Host to connect")
-      ("port", 
-          boost::program_options::value<int>(&port)->default_value(port), 
+      ("port",
+          boost::program_options::value<int>(&port)->default_value(port),
           "Port number to connect")
-      ("domain-socket", 
+      ("domain-socket",
           boost::program_options::value<string>(&domain_socket)->default_value(domain_socket),
           "Domain Socket (e.g. /tmp/ThriftTest.thrift), instead of host and port")
       ("abstract-namespace",
@@ -179,7 +183,7 @@ int main(int argc, char** argv) {
       ("protocol",
           boost::program_options::value<string>(&protocol_type)->default_value(protocol_type),
           "Protocol: binary, compact, header, json, multi, multic, multih, multij")
-      ("ssl", 
+      ("ssl",
           "Encrypted Transport using SSL")
       ("testloops,n",
           boost::program_options::value<int>(&numTests)->default_value(numTests),
@@ -244,7 +248,7 @@ int main(int argc, char** argv) {
   stdcxx::shared_ptr<TSocket> socket;
   stdcxx::shared_ptr<TTransport> transport;
   stdcxx::shared_ptr<TProtocol> protocol;
-  stdcxx::shared_ptr<TProtocol> protocol2;	// SecondService for multiplexed
+  stdcxx::shared_ptr<TProtocol> protocol2;  // SecondService for multiplexed
 
   if (ssl) {
     cout << "Client Certificate File: " << certPath << endl;
@@ -295,9 +299,9 @@ int main(int argc, char** argv) {
   }
 
   if (boost::starts_with(protocol_type, "multi")) {
-	protocol2 = stdcxx::make_shared<TMultiplexedProtocol>(protocol, "SecondService");
-	// we don't need access to the original protocol any more, so...
-	protocol = stdcxx::make_shared<TMultiplexedProtocol>(protocol, "ThriftTest");
+  protocol2 = stdcxx::make_shared<TMultiplexedProtocol>(protocol, "SecondService");
+  // we don't need access to the original protocol any more, so...
+  protocol = stdcxx::make_shared<TMultiplexedProtocol>(protocol, "ThriftTest");
   }
 
   // Connection info
@@ -387,18 +391,18 @@ int main(int argc, char** argv) {
     // in the middle of the ThriftTest
     //
     if (boost::starts_with(protocol_type, "multi")) {
-		SecondServiceClient ssc(protocol2);
-		// transport is already open...
-		  
+    SecondServiceClient ssc(protocol2);
+    // transport is already open...
+
         try {
           cout << "secondService.secondTestString(\"foo\") => " << flush;
-	  	  std::string result;
-		  ssc.secondtestString(result, "foo");
-		  cout << "{" << result << "}" << endl;
-	    } catch (std::exception& e) {
-		  cout << "  *** FAILED *** " << e.what() << endl;
-		  return_code |= ERR_EXCEPTIONS;
-		}
+        std::string result;
+      ssc.secondtestString(result, "foo");
+      cout << "{" << result << "}" << endl;
+      } catch (std::exception& e) {
+      cout << "  *** FAILED *** " << e.what() << endl;
+      return_code |= ERR_EXCEPTIONS;
+    }
     }
 
     try {
@@ -568,72 +572,9 @@ int main(int argc, char** argv) {
     /**
      * BINARY TEST
      */
-    cout << "testBinary(empty)" << endl;
-    try {
-      string bin_result;
-      testClient.testBinary(bin_result, string());
-      if (!bin_result.empty()) {
-        cout << endl << "*** FAILED ***" << endl;
-        cout << "invalid length: " << bin_result.size() << endl;
-        return_code |= ERR_BASETYPES;
-      }
-    } catch (TTransportException&) {
-      throw;
-    } catch (exception& ex) {
-      cout << "*** FAILED ***" << endl << ex.what() << endl;
-      return_code |= ERR_BASETYPES;
-    }
-    cout << "testBinary([-128..127]) = {" << flush;
-    const signed char bin_data[256]
-        = {-128, -127, -126, -125, -124, -123, -122, -121, -120, -119, -118, -117, -116, -115, -114,
-           -113, -112, -111, -110, -109, -108, -107, -106, -105, -104, -103, -102, -101, -100, -99,
-           -98,  -97,  -96,  -95,  -94,  -93,  -92,  -91,  -90,  -89,  -88,  -87,  -86,  -85,  -84,
-           -83,  -82,  -81,  -80,  -79,  -78,  -77,  -76,  -75,  -74,  -73,  -72,  -71,  -70,  -69,
-           -68,  -67,  -66,  -65,  -64,  -63,  -62,  -61,  -60,  -59,  -58,  -57,  -56,  -55,  -54,
-           -53,  -52,  -51,  -50,  -49,  -48,  -47,  -46,  -45,  -44,  -43,  -42,  -41,  -40,  -39,
-           -38,  -37,  -36,  -35,  -34,  -33,  -32,  -31,  -30,  -29,  -28,  -27,  -26,  -25,  -24,
-           -23,  -22,  -21,  -20,  -19,  -18,  -17,  -16,  -15,  -14,  -13,  -12,  -11,  -10,  -9,
-           -8,   -7,   -6,   -5,   -4,   -3,   -2,   -1,   0,    1,    2,    3,    4,    5,    6,
-           7,    8,    9,    10,   11,   12,   13,   14,   15,   16,   17,   18,   19,   20,   21,
-           22,   23,   24,   25,   26,   27,   28,   29,   30,   31,   32,   33,   34,   35,   36,
-           37,   38,   39,   40,   41,   42,   43,   44,   45,   46,   47,   48,   49,   50,   51,
-           52,   53,   54,   55,   56,   57,   58,   59,   60,   61,   62,   63,   64,   65,   66,
-           67,   68,   69,   70,   71,   72,   73,   74,   75,   76,   77,   78,   79,   80,   81,
-           82,   83,   84,   85,   86,   87,   88,   89,   90,   91,   92,   93,   94,   95,   96,
-           97,   98,   99,   100,  101,  102,  103,  104,  105,  106,  107,  108,  109,  110,  111,
-           112,  113,  114,  115,  116,  117,  118,  119,  120,  121,  122,  123,  124,  125,  126,
-           127};
-    try {
-      string bin_result;
-      testClient.testBinary(bin_result, string(reinterpret_cast<const char *>(bin_data), 256));
-      if (bin_result.size() != 256) {
-        cout << endl << "*** FAILED ***" << endl;
-        cout << "invalid length: " << bin_result.size() << endl;
-        return_code |= ERR_BASETYPES;
-      } else {
-        bool first = true;
-        bool failed = false;
-        for (int i = 0; i < 256; ++i) {
-          if (!first)
-            cout << ",";
-          else
-            first = false;
-          cout << static_cast<int>(bin_result[i]);
-          if (!failed && bin_result[i] != i - 128) {
-            failed = true;
-          }
-        }
-        cout << "}" << endl;
-        if (failed) {
-          cout << "*** FAILED ***" << endl;
-          return_code |= ERR_BASETYPES;
-        }
-      }
-    } catch (TTransportException&) {
-      throw;
-    } catch (exception& ex) {
-      cout << "*** FAILED ***" << endl << ex.what() << endl;
-      return_code |= ERR_BASETYPES;
+    for (string::size_type i = 0; i < 131073 && !return_code; ) {
+      return_code |= binary_test(testClient, i);
+      if (i > 0) { i *= 2; } else { ++i; }
     }
 
 
@@ -1137,7 +1078,7 @@ int main(int argc, char** argv) {
       return_code |= ERR_BASETYPES;
 
     cout << endl << "All tests done." << endl << flush;
-    
+
     uint64_t stop = now();
     uint64_t tot = stop - start;
 
@@ -1164,3 +1105,66 @@ int main(int argc, char** argv) {
 
   return return_code;
 }
+
+void binary_fill(std::string& str, string::size_type siz)
+{
+    static const signed char bin_data[256]
+        = {-128, -127, -126, -125, -124, -123, -122, -121, -120, -119, -118, -117, -116, -115, -114,
+           -113, -112, -111, -110, -109, -108, -107, -106, -105, -104, -103, -102, -101, -100, -99,
+           -98,  -97,  -96,  -95,  -94,  -93,  -92,  -91,  -90,  -89,  -88,  -87,  -86,  -85,  -84,
+           -83,  -82,  -81,  -80,  -79,  -78,  -77,  -76,  -75,  -74,  -73,  -72,  -71,  -70,  -69,
+           -68,  -67,  -66,  -65,  -64,  -63,  -62,  -61,  -60,  -59,  -58,  -57,  -56,  -55,  -54,
+           -53,  -52,  -51,  -50,  -49,  -48,  -47,  -46,  -45,  -44,  -43,  -42,  -41,  -40,  -39,
+           -38,  -37,  -36,  -35,  -34,  -33,  -32,  -31,  -30,  -29,  -28,  -27,  -26,  -25,  -24,
+           -23,  -22,  -21,  -20,  -19,  -18,  -17,  -16,  -15,  -14,  -13,  -12,  -11,  -10,  -9,
+           -8,   -7,   -6,   -5,   -4,   -3,   -2,   -1,   0,    1,    2,    3,    4,    5,    6,
+           7,    8,    9,    10,   11,   12,   13,   14,   15,   16,   17,   18,   19,   20,   21,
+           22,   23,   24,   25,   26,   27,   28,   29,   30,   31,   32,   33,   34,   35,   36,
+           37,   38,   39,   40,   41,   42,   43,   44,   45,   46,   47,   48,   49,   50,   51,
+           52,   53,   54,   55,   56,   57,   58,   59,   60,   61,   62,   63,   64,   65,   66,
+           67,   68,   69,   70,   71,   72,   73,   74,   75,   76,   77,   78,   79,   80,   81,
+           82,   83,   84,   85,   86,   87,   88,   89,   90,   91,   92,   93,   94,   95,   96,
+           97,   98,   99,   100,  101,  102,  103,  104,  105,  106,  107,  108,  109,  110,  111,
+           112,  113,  114,  115,  116,  117,  118,  119,  120,  121,  122,  123,  124,  125,  126,
+           127};
+
+    str.resize(siz);
+    char *ptr = &str[0];
+    string::size_type pos = 0;
+    for (string::size_type i = 0; i < siz; ++i)
+    {
+        if (pos == 255) { pos = 0; } else { ++pos; }
+        *ptr++ = bin_data[pos];
+    }
+}
+
+int binary_test(ThriftTestClient& testClient, string::size_type siz)
+{
+    string bin_request;
+    string bin_result;
+
+    cout << "testBinary(siz = " << siz << ")" << endl;
+    binary_fill(bin_request, siz);
+    try {
+        testClient.testBinary(bin_result, bin_request);
+
+        if (bin_request.size() != bin_result.size()) {
+            cout << "*** FAILED: request size " << bin_request.size() << "; result size " << bin_result.size() << endl;
+            return ERR_BASETYPES;
+        }
+
+        for (string::size_type i = 0; i < siz; ++i) {
+            if (bin_request.at(i) != bin_result.at(i)) {
+                cout << "*** FAILED: at position " << i << " request[i] is h" << hex << bin_request.at(i) << " result[i] is h" << hex << bin_result.at(i) << endl;
+                return ERR_BASETYPES;
+            }
+        }
+    } catch (TTransportException&) {
+        throw;
+    } catch (exception& ex) {
+        cout << "*** FAILED ***" << endl << ex.what() << endl;
+        return ERR_BASETYPES;
+    }
+
+    return 0;
+}

http://git-wip-us.apache.org/repos/asf/thrift/blob/39eaae66/test/cpp/src/TestServer.cpp
----------------------------------------------------------------------
diff --git a/test/cpp/src/TestServer.cpp b/test/cpp/src/TestServer.cpp
index 744a86c..78b0a74 100644
--- a/test/cpp/src/TestServer.cpp
+++ b/test/cpp/src/TestServer.cpp
@@ -113,7 +113,7 @@ public:
   void testBinary(std::string& _return, const std::string& thing) {
     std::ostringstream hexstr;
     hexstr << std::hex << thing;
-    printf("testBinary(%s)\n", hexstr.str().c_str());
+    printf("testBinary(%lu: %s)\n", thing.size(), hexstr.str().c_str());
     _return = thing;
   }
 
@@ -345,7 +345,7 @@ class SecondHandler : public SecondServiceIf
   public:
     void secondtestString(std::string& result, const std::string& thing)
     { result = "testString(\"" + thing + "\")"; }
-};	
+};
 
 class TestProcessorEventHandler : public TProcessorEventHandler {
   virtual void* getContext(const char* fn_name, void* serverContext) {
@@ -606,10 +606,10 @@ int main(int argc, char** argv) {
       } else if (protocol_type == "compact") {
       } else if (protocol_type == "json") {
       } else if (protocol_type == "header") {
-      } else if (protocol_type == "multi") {	// multiplexed binary
-      } else if (protocol_type == "multic") {	// multiplexed compact
-      } else if (protocol_type == "multih") {	// multiplexed header
-      } else if (protocol_type == "multij") {	// multiplexed json
+      } else if (protocol_type == "multi") {  // multiplexed binary
+      } else if (protocol_type == "multic") { // multiplexed compact
+      } else if (protocol_type == "multih") { // multiplexed header
+      } else if (protocol_type == "multij") { // multiplexed json
       } else {
         throw invalid_argument("Unknown protocol type " + protocol_type);
       }

http://git-wip-us.apache.org/repos/asf/thrift/blob/39eaae66/test/known_failures_Linux.json
----------------------------------------------------------------------
diff --git a/test/known_failures_Linux.json b/test/known_failures_Linux.json
index ea194a1..ae9b370 100644
--- a/test/known_failures_Linux.json
+++ b/test/known_failures_Linux.json
@@ -3,9 +3,9 @@
   "c_glib-csharp_multi-binary_framed-ip",
   "c_glib-csharp_multi_buffered-ip",
   "c_glib-csharp_multi_framed-ip",
-  "c_glib-csharp_multic_buffered-ip",
   "c_glib-csharp_multic-compact_buffered-ip",
   "c_glib-csharp_multic-compact_framed-ip",
+  "c_glib-csharp_multic_buffered-ip",
   "c_glib-csharp_multic_framed-ip",
   "c_glib-rs_multi_buffered-ip",
   "c_glib-rs_multi_framed-ip",
@@ -195,6 +195,8 @@
   "d-py_json_buffered-ip-ssl",
   "d-py_json_framed-ip",
   "d-py_json_framed-ip-ssl",
+  "erl-cpp_binary_buffered-ip",
+  "erl-cpp_compact_buffered-ip",
   "erl-csharp_binary_buffered-ip",
   "erl-csharp_compact_buffered-ip",
   "erl-nodejs_binary_buffered-ip",
@@ -297,6 +299,20 @@
   "nodejs-netcore_json_buffered-ip-ssl",
   "nodejs-netcore_json_framed-ip",
   "nodejs-netcore_json_framed-ip-ssl",
+  "rb-cpp_json_buffered-ip",
+  "rb-cpp_json_framed-ip",
+  "rs-cpp_binary_buffered-ip",
+  "rs-cpp_binary_framed-ip",
+  "rs-cpp_compact_buffered-ip",
+  "rs-cpp_compact_framed-ip",
+  "rs-cpp_multi-binary_buffered-ip",
+  "rs-cpp_multi-binary_framed-ip",
+  "rs-cpp_multi_buffered-ip",
+  "rs-cpp_multi_framed-ip",
+  "rs-cpp_multic-compact_buffered-ip",
+  "rs-cpp_multic-compact_framed-ip",
+  "rs-cpp_multic_buffered-ip",
+  "rs-cpp_multic_framed-ip",
   "rs-csharp_binary_buffered-ip",
   "rs-csharp_binary_framed-ip",
   "rs-csharp_compact_buffered-ip",

http://git-wip-us.apache.org/repos/asf/thrift/blob/39eaae66/test/rs/src/bin/test_client.rs
----------------------------------------------------------------------
diff --git a/test/rs/src/bin/test_client.rs b/test/rs/src/bin/test_client.rs
index 7c11ad5..0df2f00 100644
--- a/test/rs/src/bin/test_client.rs
+++ b/test/rs/src/bin/test_client.rs
@@ -126,7 +126,7 @@ fn build_protocols(
     };
 
     let (i_prot, o_prot): (Box<TInputProtocol>, Box<TOutputProtocol>) = match protocol {
-        "binary" | "multi:binary" => {
+        "binary" => {
             (Box::new(TBinaryInputProtocol::new(i_tran, true)),
              Box::new(TBinaryOutputProtocol::new(o_tran, true)))
         }
@@ -139,7 +139,7 @@ fn build_protocols(
                 ),
             ))
         }
-        "compact" | "multi:compact" => {
+        "compact" => {
             (Box::new(TCompactInputProtocol::new(i_tran)),
              Box::new(TCompactOutputProtocol::new(o_tran)))
         }