Repository: thrift Updated Branches: refs/heads/master 30f465db9 -> 5d93b04f9
THRIFT-3371: added test for abstract namespace domain sockets. Project: http://git-wip-us.apache.org/repos/asf/thrift/repo Commit: http://git-wip-us.apache.org/repos/asf/thrift/commit/dd08f6e4 Tree: http://git-wip-us.apache.org/repos/asf/thrift/tree/dd08f6e4 Diff: http://git-wip-us.apache.org/repos/asf/thrift/diff/dd08f6e4 Branch: refs/heads/master Commit: dd08f6e43cf1d9eccf5e5de702106bbbbd9b2b07 Parents: 30f465d Author: pavlo <[email protected]> Authored: Thu Oct 8 16:43:56 2015 -0400 Committer: Roger Meier <[email protected]> Committed: Sun Oct 11 00:47:27 2015 +0200 ---------------------------------------------------------------------- test/cpp/src/TestClient.cpp | 21 +++++++++++++++++++-- test/cpp/src/TestServer.cpp | 23 ++++++++++++++++++++--- test/crossrunner/run.py | 4 +++- test/crossrunner/test.py | 13 +++++++------ 4 files changed, 49 insertions(+), 12 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/thrift/blob/dd08f6e4/test/cpp/src/TestClient.cpp ---------------------------------------------------------------------- diff --git a/test/cpp/src/TestClient.cpp b/test/cpp/src/TestClient.cpp index e709899..1ab4d21 100644 --- a/test/cpp/src/TestClient.cpp +++ b/test/cpp/src/TestClient.cpp @@ -125,6 +125,7 @@ int main(int argc, char** argv) { string transport_type = "buffered"; string protocol_type = "binary"; string domain_socket = ""; + bool abstract_namespace = false; bool noinsane = false; boost::program_options::options_description desc("Allowed options"); @@ -139,6 +140,8 @@ int main(int argc, char** argv) { "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", + "Look for the domain socket in the Abstract Namespace (no connection with filesystem pathnames)")( "transport", boost::program_options::value<string>(&transport_type)->default_value(transport_type), "Transport: buffered, framed, http, evhttp")( @@ -188,6 +191,10 @@ int main(int argc, char** argv) { ssl = true; } + if (vm.count("abstract-namespace")) { + abstract_namespace = true; + } + if (vm.count("noinsane")) { noinsane = true; } @@ -206,7 +213,13 @@ int main(int argc, char** argv) { socket = factory->createSocket(host, port); } else { if (domain_socket != "") { - socket = boost::shared_ptr<TSocket>(new TSocket(domain_socket)); + if (abstract_namespace) { + std::string abstract_socket("\0", 1); + abstract_socket += domain_socket; + socket = boost::shared_ptr<TSocket>(new TSocket(abstract_socket)); + } else { + socket = boost::shared_ptr<TSocket>(new TSocket(domain_socket)); + } port = 0; } else { socket = boost::shared_ptr<TSocket>(new TSocket(host, port)); @@ -236,7 +249,11 @@ int main(int argc, char** argv) { } // Connection info - cout << "Connecting (" << transport_type << "/" << protocol_type << ") to: " << domain_socket; + cout << "Connecting (" << transport_type << "/" << protocol_type << ") to: "; + if (abstract_namespace) { + cout << '@'; + } + cout << domain_socket; if (port != 0) { cout << host << ":" << port; } http://git-wip-us.apache.org/repos/asf/thrift/blob/dd08f6e4/test/cpp/src/TestServer.cpp ---------------------------------------------------------------------- diff --git a/test/cpp/src/TestServer.cpp b/test/cpp/src/TestServer.cpp index 66d3bb2..51169af 100644 --- a/test/cpp/src/TestServer.cpp +++ b/test/cpp/src/TestServer.cpp @@ -546,6 +546,7 @@ int main(int argc, char** argv) { string protocol_type = "binary"; string server_type = "simple"; string domain_socket = ""; + bool abstract_namespace = false; size_t workers = 4; boost::program_options::options_description desc("Allowed options"); @@ -556,6 +557,8 @@ int main(int argc, char** argv) { boost::program_options::value<string>(&domain_socket) ->default_value(domain_socket), "Unix Domain Socket (e.g. /tmp/ThriftTest.thrift)")( + "abstract-namespace", + "Create the domain socket in the Abstract Namespace (no connection with filesystem pathnames)")( "server-type", boost::program_options::value<string>(&server_type)->default_value(server_type), "type of server, \"simple\", \"thread-pool\", \"threaded\", or \"nonblocking\"")( @@ -618,6 +621,10 @@ int main(int argc, char** argv) { ssl = true; } + if (vm.count("abstract-namespace")) { + abstract_namespace = true; + } + // Dispatcher boost::shared_ptr<TProtocolFactory> protocolFactory; if (protocol_type == "json") { @@ -653,8 +660,14 @@ int main(int argc, char** argv) { serverSocket = boost::shared_ptr<TServerSocket>(new TSSLServerSocket(port, sslSocketFactory)); } else { if (domain_socket != "") { - unlink(domain_socket.c_str()); - serverSocket = boost::shared_ptr<TServerSocket>(new TServerSocket(domain_socket)); + if (abstract_namespace) { + std::string abstract_socket("\0", 1); + abstract_socket += domain_socket; + serverSocket = boost::shared_ptr<TServerSocket>(new TServerSocket(abstract_socket)); + } else { + unlink(domain_socket.c_str()); + serverSocket = boost::shared_ptr<TServerSocket>(new TServerSocket(domain_socket)); + } port = 0; } else { serverSocket = boost::shared_ptr<TServerSocket>(new TServerSocket(port)); @@ -677,7 +690,11 @@ int main(int argc, char** argv) { // Server Info cout << "Starting \"" << server_type << "\" server (" << transport_type << "/" << protocol_type - << ") listen on: " << domain_socket; + << ") listen on: "; + if (abstract_namespace) { + cout << '@'; + } + cout << domain_socket; if (port != 0) { cout << port; } http://git-wip-us.apache.org/repos/asf/thrift/blob/dd08f6e4/test/crossrunner/run.py ---------------------------------------------------------------------- diff --git a/test/crossrunner/run.py b/test/crossrunner/run.py index e3300ba..ae7d366 100644 --- a/test/crossrunner/run.py +++ b/test/crossrunner/run.py @@ -204,7 +204,7 @@ class PortAllocator(object): return port if ok else self._get_domain_port() def alloc_port(self, socket_type): - if socket_type == 'domain': + if socket_type in ('domain', 'abstract'): return self._get_domain_port() else: return self._get_tcp_port() @@ -226,6 +226,8 @@ class PortAllocator(object): path = domain_socket_path(port) if os.path.exists(path): os.remove(path) + elif socket_type == 'abstract': + self._dom_ports.remove(port) else: self._ports.remove(port) except IOError as err: http://git-wip-us.apache.org/repos/asf/thrift/blob/dd08f6e4/test/crossrunner/test.py ---------------------------------------------------------------------- diff --git a/test/crossrunner/test.py b/test/crossrunner/test.py index 512e664..3750ba3 100644 --- a/test/crossrunner/test.py +++ b/test/crossrunner/test.py @@ -60,10 +60,11 @@ class TestProgram(object): cmd[0] = abs_if_exists(cmd[0]) return cmd - def _socket_arg(self, socket, port): + def _socket_args(self, socket, port): return { - 'ip-ssl': '--ssl', - 'domain': '--domain-socket=%s' % domain_socket_path(port), + 'ip-ssl': ['--ssl'], + 'domain': ['--domain-socket=%s' % domain_socket_path(port)], + 'abstract': ['--abstract-namespace', '--domain-socket=%s' % domain_socket_path(port)], }.get(socket, None) def build_command(self, port): @@ -71,9 +72,9 @@ class TestProgram(object): args = [] args.append('--protocol=' + self.protocol) args.append('--transport=' + self.transport) - socket_arg = self._socket_arg(self.socket, port) - if socket_arg: - args.append(socket_arg) + socket_args = self._socket_args(self.socket, port) + if socket_args: + args += socket_args args.append('--port=%d' % port) if self._join_args: cmd.append('%s' % " ".join(args))
