diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 423a0b5aef8..ee6a051688c 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -32,6 +32,7 @@ env: --without-lua --without-rs --without-swift + --without-cl permissions: contents: read @@ -552,6 +553,71 @@ jobs: - name: Run ts tests run: make -C lib/nodets check + lib-cpp: + needs: compiler + runs-on: ubuntu-24.04 + steps: + - uses: actions/checkout@v4 + + - name: Install dependencies + run: | + sudo apt-get update -yq + sudo apt-get install -y --no-install-recommends g++ $BUILD_DEPS locales + sudo locale-gen en_US.UTF-8 + sudo locale-gen de_DE.UTF-8 + sudo update-locale + + - name: Run bootstrap + run: ./bootstrap.sh + + - name: Run configure + run: | + ./configure $(echo $CONFIG_ARGS_FOR_LIBS | sed -E 's/without-cpp/with-cpp/g') + + - uses: actions/download-artifact@v4 + with: + name: thrift-compiler + path: compiler/cpp + + - name: Run thrift-compiler + run: | + chmod a+x compiler/cpp/thrift + compiler/cpp/thrift -version + + - name: Run make for cpp + run: make -j$(nproc) -C lib/cpp + + - name: Run make check for lib/cpp + run: make -j$(nproc) -C lib/cpp check + + - name: Run make check for test/cpp + run: make -j$(nproc) -C test/cpp check + + - name: Run make precross for cpp test + run: make -j$(nproc) -C test/cpp precross + + - name: Upload cpp precross artifacts + uses: actions/upload-artifact@v4 + with: + name: cpp-precross + if-no-files-found: error + include-hidden-files: true + path: | + test/cpp/TestClient + test/cpp/TestServer + test/cpp/.libs/TestClient + test/cpp/.libs/TestServer + lib/cpp/.libs/*.so + retention-days: 3 + + - name: Upload log files from failed test runs + uses: actions/upload-artifact@v4 + if: failure() + with: + name: lib-cpp-test-log + path: lib/cpp/test/*.xml + retention-days: 3 + cross-test: needs: - lib-java-kotlin @@ -559,13 +625,14 @@ jobs: - lib-rust - lib-go - lib-python + - lib-cpp runs-on: ubuntu-24.04 strategy: matrix: # swift is currently broken and no maintainers around -> see THRIFT-5864 - server_lang: ['java', 'kotlin', 'go', 'rs'] # ['java', 'kotlin', 'go', 'rs', 'swift'] + server_lang: ['java', 'kotlin', 'go', 'rs', 'cpp'] # ['java', 'kotlin', 'go', 'rs', 'swift'] # we always use comma join as many client langs as possible, to reduce the number of jobs - client_lang: ['java,kotlin', 'go,rs'] # ['java,kotlin', 'go,rs', 'swift'] + client_lang: ['java,kotlin', 'go,rs,cpp'] # ['java,kotlin', 'go,rs', 'swift'] fail-fast: false steps: - uses: actions/checkout@v4 @@ -577,14 +644,17 @@ jobs: - uses: actions/setup-java@v4 with: distribution: temurin - # here we intentionally use an older version so that we also verify Java 17 compiles to it - java-version: 8 + java-version: 17 cache: "gradle" - name: Install openssl and certificates (for SSL tests) run: | sudo apt-get update -yq - sudo apt-get install -y --no-install-recommends openssl ca-certificates + sudo apt-get install -y --no-install-recommends \ + openssl \ + ca-certificates \ + libboost-all-dev \ + libevent-dev - name: Download java precross artifacts uses: actions/download-artifact@v4 @@ -617,6 +687,12 @@ jobs: name: go-precross path: test/go/bin + - name: Download cpp precross artifacts + uses: actions/download-artifact@v4 + with: + name: cpp-precross + path: . + - name: Set back executable flags run: | chmod a+x lib/java/build/run* @@ -625,6 +701,9 @@ jobs: # THRIFT-5864 chmod a+x test/swift/CrossTests/.build/x86_64-unknown-linux-gnu/debug/* chmod a+x test/rs/bin/* chmod a+x test/go/bin/* + chmod a+x test/cpp/* + chmod a+x test/cpp/.libs/* + chmod a+x lib/cpp/.libs/*.so - name: Create tmp domain socket folder run: mkdir /tmp/v0.16 diff --git a/lib/cpp/src/thrift/protocol/THeaderProtocol.cpp b/lib/cpp/src/thrift/protocol/THeaderProtocol.cpp index 6242e30b854..77d676a346f 100644 --- a/lib/cpp/src/thrift/protocol/THeaderProtocol.cpp +++ b/lib/cpp/src/thrift/protocol/THeaderProtocol.cpp @@ -146,6 +146,10 @@ uint32_t THeaderProtocol::writeBinary(const std::string& str) { return proto_->writeBinary(str); } +uint32_t THeaderProtocol::writeUUID(const TUuid& uuid) { + return proto_->writeUUID(uuid); +} + /** * Reading functions */ @@ -246,6 +250,10 @@ uint32_t THeaderProtocol::readString(std::string& str) { uint32_t THeaderProtocol::readBinary(std::string& binary) { return proto_->readBinary(binary); } + +uint32_t THeaderProtocol::readUUID(TUuid& uuid) { + return proto_->readUUID(uuid); +} } } } // apache::thrift::protocol diff --git a/lib/cpp/src/thrift/protocol/THeaderProtocol.h b/lib/cpp/src/thrift/protocol/THeaderProtocol.h index 0d5018596f7..99986b92c25 100644 --- a/lib/cpp/src/thrift/protocol/THeaderProtocol.h +++ b/lib/cpp/src/thrift/protocol/THeaderProtocol.h @@ -135,6 +135,8 @@ class THeaderProtocol : public TVirtualProtocol { uint32_t writeBinary(const std::string& str); + uint32_t writeUUID(const TUuid& uuid); + /** * Reading functions */ @@ -181,6 +183,8 @@ class THeaderProtocol : public TVirtualProtocol { uint32_t readBinary(std::string& binary); + uint32_t readUUID(TUuid& uuid); + protected: std::shared_ptr trans_; diff --git a/lib/cpp/src/thrift/protocol/TProtocolTap.h b/lib/cpp/src/thrift/protocol/TProtocolTap.h index d000ba61a3b..8ceed727e16 100644 --- a/lib/cpp/src/thrift/protocol/TProtocolTap.h +++ b/lib/cpp/src/thrift/protocol/TProtocolTap.h @@ -166,6 +166,12 @@ class TProtocolTap : public TVirtualProtocol { return rv; } + uint32_t readUUID(TUuid& uuid) { + uint32_t rv = source_->readUUID(uuid); + sink_->writeUUid(uuid); + return rv; + } + private: std::shared_ptr source_; std::shared_ptr sink_; diff --git a/lib/cpp/test/OneWayHTTPTest.cpp b/lib/cpp/test/OneWayHTTPTest.cpp index 8789c2c8ffb..a4bad617245 100644 --- a/lib/cpp/test/OneWayHTTPTest.cpp +++ b/lib/cpp/test/OneWayHTTPTest.cpp @@ -202,10 +202,10 @@ BOOST_AUTO_TEST_CASE( JSON_BufferedHTTP ) #endif { - std::shared_ptr socket(new TSocket("localhost", port)); + std::shared_ptr socket(new TSocket("127.0.0.1", port)); socket->setRecvTimeout(10000) ; // 1000msec should be enough std::shared_ptr blockable_transport(new TBlockableBufferedTransport(socket)); - std::shared_ptr transport(new THttpClient(blockable_transport, "localhost", "/service")); + std::shared_ptr transport(new THttpClient(blockable_transport, "127.0.0.1", "/service")); std::shared_ptr protocol(new TJSONProtocol(transport)); onewaytest::OneWayServiceClient client(protocol); diff --git a/lib/cpp/test/SecurityFromBufferTest.cpp b/lib/cpp/test/SecurityFromBufferTest.cpp index 32f2378d38b..be32a499529 100644 --- a/lib/cpp/test/SecurityFromBufferTest.cpp +++ b/lib/cpp/test/SecurityFromBufferTest.cpp @@ -119,7 +119,7 @@ struct SecurityFromBufferFixture { pServerSocketFactory->loadCertificateFromBuffer(certString("server.crt").c_str()); pServerSocketFactory->loadPrivateKeyFromBuffer(certString("server.key").c_str()); pServerSocketFactory->server(true); - pServerSocket.reset(new TSSLServerSocket("localhost", 0, pServerSocketFactory)); + pServerSocket.reset(new TSSLServerSocket("127.0.0.1", 0, pServerSocketFactory)); shared_ptr connectedClient; try { @@ -169,7 +169,7 @@ struct SecurityFromBufferFixture { pClientSocketFactory->loadCertificateFromBuffer(certString("client.crt").c_str()); pClientSocketFactory->loadPrivateKeyFromBuffer(certString("client.key").c_str()); pClientSocketFactory->loadTrustedCertificatesFromBuffer(certString("CA.pem").c_str()); - pClientSocket = pClientSocketFactory->createSocket("localhost", mPort); + pClientSocket = pClientSocketFactory->createSocket("127.0.0.1", mPort); pClientSocket->open(); uint8_t buf[3]; diff --git a/lib/cpp/test/SecurityTest.cpp b/lib/cpp/test/SecurityTest.cpp index cc71f04793d..3eb7f8ab60b 100644 --- a/lib/cpp/test/SecurityTest.cpp +++ b/lib/cpp/test/SecurityTest.cpp @@ -118,7 +118,7 @@ struct SecurityFixture pServerSocketFactory->loadCertificate(certFile("server.crt").string().c_str()); pServerSocketFactory->loadPrivateKey(certFile("server.key").string().c_str()); pServerSocketFactory->server(true); - pServerSocket.reset(new TSSLServerSocket("localhost", 0, pServerSocketFactory)); + pServerSocket.reset(new TSSLServerSocket("127.0.0.1", 0, pServerSocketFactory)); shared_ptr connectedClient; try @@ -176,7 +176,7 @@ struct SecurityFixture pClientSocketFactory->loadCertificate(certFile("client.crt").string().c_str()); pClientSocketFactory->loadPrivateKey(certFile("client.key").string().c_str()); pClientSocketFactory->loadTrustedCertificates(certFile("CA.pem").string().c_str()); - pClientSocket = pClientSocketFactory->createSocket("localhost", mPort); + pClientSocket = pClientSocketFactory->createSocket("127.0.0.1", mPort); pClientSocket->open(); uint8_t buf[3]; diff --git a/lib/cpp/test/TNonblockingSSLServerTest.cpp b/lib/cpp/test/TNonblockingSSLServerTest.cpp index 94289d5aaf3..1e83279dcdd 100644 --- a/lib/cpp/test/TNonblockingSSLServerTest.cpp +++ b/lib/cpp/test/TNonblockingSSLServerTest.cpp @@ -232,7 +232,7 @@ class Fixture { bool canCommunicate(int serverPort) { std::shared_ptr pClientSocketFactory = createClientSocketFactory(); - std::shared_ptr socket = pClientSocketFactory->createSocket("localhost", serverPort); + std::shared_ptr socket = pClientSocketFactory->createSocket("127.0.0.1", serverPort); socket->open(); test::ParentServiceClient client(std::make_shared( std::make_shared(socket))); diff --git a/lib/cpp/test/TNonblockingServerTest.cpp b/lib/cpp/test/TNonblockingServerTest.cpp index f9aab4cc1b8..29ba0bfb812 100644 --- a/lib/cpp/test/TNonblockingServerTest.cpp +++ b/lib/cpp/test/TNonblockingServerTest.cpp @@ -158,7 +158,7 @@ class Fixture { } bool canCommunicate(int serverPort) { - shared_ptr socket(new transport::TSocket("localhost", serverPort)); + shared_ptr socket(new transport::TSocket("127.0.0.1", serverPort)); socket->open(); test::ParentServiceClient client(make_shared( make_shared(socket))); diff --git a/lib/cpp/test/TSSLSocketInterruptTest.cpp b/lib/cpp/test/TSSLSocketInterruptTest.cpp index bdaa466ee60..e7a38f288dc 100644 --- a/lib/cpp/test/TSSLSocketInterruptTest.cpp +++ b/lib/cpp/test/TSSLSocketInterruptTest.cpp @@ -139,11 +139,11 @@ shared_ptr createClientSocketFactory() { BOOST_AUTO_TEST_CASE(test_ssl_interruptable_child_read_while_handshaking) { shared_ptr pServerSocketFactory = createServerSocketFactory(); - TSSLServerSocket sock1("localhost", 0, pServerSocketFactory); + TSSLServerSocket sock1("127.0.0.1", 0, pServerSocketFactory); sock1.listen(); int port = sock1.getPort(); shared_ptr pClientSocketFactory = createClientSocketFactory(); - shared_ptr clientSock = pClientSocketFactory->createSocket("localhost", port); + shared_ptr clientSock = pClientSocketFactory->createSocket("127.0.0.1", port); clientSock->open(); shared_ptr accepted = sock1.accept(); boost::thread readThread(std::bind(readerWorkerMustThrow, accepted)); @@ -159,11 +159,11 @@ BOOST_AUTO_TEST_CASE(test_ssl_interruptable_child_read_while_handshaking) { BOOST_AUTO_TEST_CASE(test_ssl_interruptable_child_read) { shared_ptr pServerSocketFactory = createServerSocketFactory(); - TSSLServerSocket sock1("localhost", 0, pServerSocketFactory); + TSSLServerSocket sock1("127.0.0.1", 0, pServerSocketFactory); sock1.listen(); int port = sock1.getPort(); shared_ptr pClientSocketFactory = createClientSocketFactory(); - shared_ptr clientSock = pClientSocketFactory->createSocket("localhost", port); + shared_ptr clientSock = pClientSocketFactory->createSocket("127.0.0.1", port); clientSock->open(); shared_ptr accepted = sock1.accept(); boost::thread readThread(std::bind(readerWorkerMustThrow, accepted)); @@ -180,12 +180,12 @@ BOOST_AUTO_TEST_CASE(test_ssl_interruptable_child_read) { BOOST_AUTO_TEST_CASE(test_ssl_non_interruptable_child_read) { shared_ptr pServerSocketFactory = createServerSocketFactory(); - TSSLServerSocket sock1("localhost", 0, pServerSocketFactory); + TSSLServerSocket sock1("127.0.0.1", 0, pServerSocketFactory); sock1.setInterruptableChildren(false); // returns to pre-THRIFT-2441 behavior sock1.listen(); int port = sock1.getPort(); shared_ptr pClientSocketFactory = createClientSocketFactory(); - shared_ptr clientSock = pClientSocketFactory->createSocket("localhost", port); + shared_ptr clientSock = pClientSocketFactory->createSocket("127.0.0.1", port); clientSock->open(); shared_ptr accepted = sock1.accept(); static_pointer_cast(accepted)->setRecvTimeout(1000); @@ -206,7 +206,7 @@ BOOST_AUTO_TEST_CASE(test_ssl_non_interruptable_child_read) { BOOST_AUTO_TEST_CASE(test_ssl_cannot_change_after_listen) { shared_ptr pServerSocketFactory = createServerSocketFactory(); - TSSLServerSocket sock1("localhost", 0, pServerSocketFactory); + TSSLServerSocket sock1("127.0.0.1", 0, pServerSocketFactory); sock1.listen(); BOOST_CHECK_THROW(sock1.setInterruptableChildren(false), std::logic_error); sock1.close(); @@ -234,11 +234,11 @@ void peekerWorkerInterrupt(shared_ptr tt) { BOOST_AUTO_TEST_CASE(test_ssl_interruptable_child_peek) { shared_ptr pServerSocketFactory = createServerSocketFactory(); - TSSLServerSocket sock1("localhost", 0, pServerSocketFactory); + TSSLServerSocket sock1("127.0.0.1", 0, pServerSocketFactory); sock1.listen(); int port = sock1.getPort(); shared_ptr pClientSocketFactory = createClientSocketFactory(); - shared_ptr clientSock = pClientSocketFactory->createSocket("localhost", port); + shared_ptr clientSock = pClientSocketFactory->createSocket("127.0.0.1", port); clientSock->open(); shared_ptr accepted = sock1.accept(); boost::thread peekThread(std::bind(peekerWorkerInterrupt, accepted)); @@ -255,12 +255,12 @@ BOOST_AUTO_TEST_CASE(test_ssl_interruptable_child_peek) { BOOST_AUTO_TEST_CASE(test_ssl_non_interruptable_child_peek) { shared_ptr pServerSocketFactory = createServerSocketFactory(); - TSSLServerSocket sock1("localhost", 0, pServerSocketFactory); + TSSLServerSocket sock1("127.0.0.1", 0, pServerSocketFactory); sock1.setInterruptableChildren(false); // returns to pre-THRIFT-2441 behavior sock1.listen(); int port = sock1.getPort(); shared_ptr pClientSocketFactory = createClientSocketFactory(); - shared_ptr clientSock = pClientSocketFactory->createSocket("localhost", port); + shared_ptr clientSock = pClientSocketFactory->createSocket("127.0.0.1", port); clientSock->open(); shared_ptr accepted = sock1.accept(); static_pointer_cast(accepted)->setRecvTimeout(1000); diff --git a/lib/cpp/test/TServerIntegrationTest.cpp b/lib/cpp/test/TServerIntegrationTest.cpp index ab235d5a4f7..b75fe542b48 100644 --- a/lib/cpp/test/TServerIntegrationTest.cpp +++ b/lib/cpp/test/TServerIntegrationTest.cpp @@ -153,7 +153,7 @@ class TServerIntegrationTestFixture { TServerIntegrationTestFixture(const shared_ptr& _processorFactory) : pServer(new TServerType(_processorFactory, shared_ptr( - new TServerSocket("localhost", 0)), + new TServerSocket("127.0.0.1", 0)), shared_ptr(new TTransportFactory), shared_ptr(new TBinaryProtocolFactory))), pEventHandler(shared_ptr(new TServerReadyEventHandler)), @@ -166,7 +166,7 @@ class TServerIntegrationTestFixture { TServerIntegrationTestFixture(const shared_ptr& _processor) : pServer( new TServerType(_processor, - shared_ptr(new TServerSocket("localhost", 0)), + shared_ptr(new TServerSocket("127.0.0.1", 0)), shared_ptr(new TTransportFactory), shared_ptr(new TBinaryProtocolFactory))), pEventHandler(shared_ptr(new TServerReadyEventHandler)), @@ -227,7 +227,7 @@ class TServerIntegrationTestFixture { std::vector > holdThreads; for (int64_t i = 0; i < numToMake; ++i) { - shared_ptr pClientSock(new TSocket("localhost", getServerPort()), + shared_ptr pClientSock(new TSocket("127.0.0.1", getServerPort()), autoSocketCloser); holdSockets.push_back(pClientSock); shared_ptr pClientProtocol(new TBinaryProtocol(pClientSock)); @@ -306,7 +306,7 @@ class TServerIntegrationTestFixture { */ void stressor() { while (!bStressDone) { - shared_ptr pSocket(new TSocket("localhost", getServerPort()), autoSocketCloser); + shared_ptr pSocket(new TSocket("127.0.0.1", getServerPort()), autoSocketCloser); shared_ptr pProtocol(new TBinaryProtocol(pSocket)); ParentServiceClient client(pProtocol); pSocket->open(); @@ -437,11 +437,11 @@ BOOST_AUTO_TEST_CASE(test_stop_with_interruptable_clients_connected) { startServer(); - shared_ptr pClientSock1(new TSocket("localhost", getServerPort()), + shared_ptr pClientSock1(new TSocket("127.0.0.1", getServerPort()), autoSocketCloser); pClientSock1->open(); - shared_ptr pClientSock2(new TSocket("localhost", getServerPort()), + shared_ptr pClientSock2(new TSocket("127.0.0.1", getServerPort()), autoSocketCloser); pClientSock2->open(); @@ -468,11 +468,11 @@ BOOST_AUTO_TEST_CASE(test_stop_with_uninterruptable_clients_connected) { startServer(); - shared_ptr pClientSock1(new TSocket("localhost", getServerPort()), + shared_ptr pClientSock1(new TSocket("127.0.0.1", getServerPort()), autoSocketCloser); pClientSock1->open(); - shared_ptr pClientSock2(new TSocket("localhost", getServerPort()), + shared_ptr pClientSock2(new TSocket("127.0.0.1", getServerPort()), autoSocketCloser); pClientSock2->open(); @@ -504,13 +504,13 @@ BOOST_AUTO_TEST_CASE(test_concurrent_client_limit) { BOOST_CHECK_EQUAL(0, pServer->getConcurrentClientCount()); BOOST_CHECK_EQUAL(2, pServer->getConcurrentClientLimit()); - shared_ptr pClientSock1(new TSocket("localhost", getServerPort()), + shared_ptr pClientSock1(new TSocket("127.0.0.1", getServerPort()), autoSocketCloser); pClientSock1->open(); blockUntilAccepted(1); BOOST_CHECK_EQUAL(1, pServer->getConcurrentClientCount()); - shared_ptr pClientSock2(new TSocket("localhost", getServerPort()), + shared_ptr pClientSock2(new TSocket("127.0.0.1", getServerPort()), autoSocketCloser); pClientSock2->open(); blockUntilAccepted(2); @@ -521,7 +521,7 @@ BOOST_AUTO_TEST_CASE(test_concurrent_client_limit) { this, pClientSock2, milliseconds(250))); - shared_ptr pClientSock3(new TSocket("localhost", getServerPort()), + shared_ptr pClientSock3(new TSocket("127.0.0.1", getServerPort()), autoSocketCloser); pClientSock2->open(); blockUntilAccepted(2); diff --git a/lib/cpp/test/TServerSocketTest.cpp b/lib/cpp/test/TServerSocketTest.cpp index 0860242bc25..49af5349529 100644 --- a/lib/cpp/test/TServerSocketTest.cpp +++ b/lib/cpp/test/TServerSocketTest.cpp @@ -33,11 +33,11 @@ using std::shared_ptr; BOOST_AUTO_TEST_SUITE(TServerSocketTest) BOOST_AUTO_TEST_CASE(test_bind_to_address) { - TServerSocket sock1("localhost", 0); + TServerSocket sock1("127.0.0.1", 0); sock1.listen(); BOOST_CHECK(sock1.isOpen()); int port = sock1.getPort(); - TSocket clientSock("localhost", port); + TSocket clientSock("127.0.0.1", port); clientSock.open(); shared_ptr accepted = sock1.accept(); accepted->close(); @@ -60,13 +60,13 @@ BOOST_AUTO_TEST_CASE(test_listen_invalid_port) { } BOOST_AUTO_TEST_CASE(test_close_before_listen) { - TServerSocket sock1("localhost", 0); + TServerSocket sock1("127.0.0.1", 0); sock1.close(); BOOST_CHECK(!sock1.isOpen()); } BOOST_AUTO_TEST_CASE(test_get_port) { - TServerSocket sock1("localHost", 888); + TServerSocket sock1("127.0.0.1", 888); BOOST_CHECK_EQUAL(888, sock1.getPort()); } diff --git a/lib/cpp/test/TSocketInterruptTest.cpp b/lib/cpp/test/TSocketInterruptTest.cpp index 1e3e59c5cda..034287b412c 100644 --- a/lib/cpp/test/TSocketInterruptTest.cpp +++ b/lib/cpp/test/TSocketInterruptTest.cpp @@ -51,11 +51,11 @@ void readerWorkerMustThrow(std::shared_ptr tt) { } BOOST_AUTO_TEST_CASE(test_interruptable_child_read) { - TServerSocket sock1("localhost", 0); + TServerSocket sock1("127.0.0.1", 0); sock1.listen(); BOOST_CHECK(sock1.isOpen()); int port = sock1.getPort(); - TSocket clientSock("localhost", port); + TSocket clientSock("127.0.0.1", port); clientSock.open(); std::shared_ptr accepted = sock1.accept(); boost::thread readThread(std::bind(readerWorkerMustThrow, accepted)); @@ -70,11 +70,11 @@ BOOST_AUTO_TEST_CASE(test_interruptable_child_read) { } BOOST_AUTO_TEST_CASE(test_non_interruptable_child_read) { - TServerSocket sock1("localhost", 0); + TServerSocket sock1("127.0.0.1", 0); sock1.setInterruptableChildren(false); // returns to pre-THRIFT-2441 behavior sock1.listen(); int port = sock1.getPort(); - TSocket clientSock("localhost", port); + TSocket clientSock("127.0.0.1", port); clientSock.open(); std::shared_ptr accepted = sock1.accept(); boost::thread readThread(std::bind(readerWorker, accepted, 0)); @@ -92,7 +92,7 @@ BOOST_AUTO_TEST_CASE(test_non_interruptable_child_read) { } BOOST_AUTO_TEST_CASE(test_cannot_change_after_listen) { - TServerSocket sock1("localhost", 0); + TServerSocket sock1("127.0.0.1", 0); sock1.listen(); BOOST_CHECK_THROW(sock1.setInterruptableChildren(false), std::logic_error); sock1.close(); @@ -103,10 +103,10 @@ void peekerWorker(std::shared_ptr tt, bool expectedResult) { } BOOST_AUTO_TEST_CASE(test_interruptable_child_peek) { - TServerSocket sock1("localhost", 0); + TServerSocket sock1("127.0.0.1", 0); sock1.listen(); int port = sock1.getPort(); - TSocket clientSock("localhost", port); + TSocket clientSock("127.0.0.1", port); clientSock.open(); std::shared_ptr accepted = sock1.accept(); // peek() will return false if child is interrupted @@ -122,11 +122,11 @@ BOOST_AUTO_TEST_CASE(test_interruptable_child_peek) { } BOOST_AUTO_TEST_CASE(test_non_interruptable_child_peek) { - TServerSocket sock1("localhost", 0); + TServerSocket sock1("127.0.0.1", 0); sock1.setInterruptableChildren(false); // returns to pre-THRIFT-2441 behavior sock1.listen(); int port = sock1.getPort(); - TSocket clientSock("localhost", port); + TSocket clientSock("127.0.0.1", port); clientSock.open(); std::shared_ptr accepted = sock1.accept(); // peek() will return false when remote side is closed diff --git a/test/cpp/Makefile.am b/test/cpp/Makefile.am index 595f7a4fc73..11bf8730371 100644 --- a/test/cpp/Makefile.am +++ b/test/cpp/Makefile.am @@ -97,7 +97,7 @@ StressTestNonBlocking_LDADD = \ # # Common thrift code generation rules # -gen-cpp/ThriftTest.cpp gen-cpp/ThriftTest_types.cpp gen-cpp/ThriftTest_constants.cpp gen-cpp/SecondService.cpp gen-cpp/SecondService.h gen-cpp/SecondService.tcc: $(top_srcdir)/test/v0.16/ThriftTest.thrift $(THRIFT) +gen-cpp/ThriftTest.cpp gen-cpp/ThriftTest_types.cpp gen-cpp/ThriftTest_constants.cpp gen-cpp/SecondService.cpp gen-cpp/SecondService.h gen-cpp/SecondService.tcc: $(top_srcdir)/test/ThriftTest.thrift $(THRIFT) $(THRIFT) --gen cpp:templates,cob_style -r $< gen-cpp/Service.cpp: $(top_srcdir)/test/StressTest.thrift $(THRIFT) diff --git a/test/cpp/src/TestClient.cpp b/test/cpp/src/TestClient.cpp index 64193c657c6..a7b4c64eb2e 100644 --- a/test/cpp/src/TestClient.cpp +++ b/test/cpp/src/TestClient.cpp @@ -22,6 +22,7 @@ #include #include #include +#include #include #include #include @@ -211,7 +212,7 @@ int main(int argc, char** argv) { #if _WIN32 transport::TWinsockSingleton::create(); #endif - string host = "localhost"; + string host = "127.0.0.1"; int port = 9090; int numTests = 1; bool ssl = false; @@ -321,9 +322,15 @@ int main(int argc, char** argv) { std::shared_ptr protocol2; // SecondService for multiplexed if (ssl) { - cout << "Client Certificate File: " << certPath << '\n'; - cout << "Client Key File: " << keyPath << '\n'; - cout << "CA File: " << caPath << '\n'; + auto fileExists = [](const std::string& path) { + std::ifstream f(path.c_str()); + return f.good(); + }; + + cout << "Client Path : " << testDir << '\n'; + cout << "Client Certificate File: " << certPath << " (" << std::boolalpha << fileExists(certPath) << ")"<< '\n'; + cout << "Client Key File: " << keyPath << " (" << std::boolalpha << fileExists(keyPath) << ")"<< '\n'; + cout << "CA File: " << caPath << " (" << std::boolalpha << fileExists(caPath) << ")"<< '\n'; factory = std::shared_ptr(new TSSLSocketFactory()); factory->ciphers("ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH"); diff --git a/test/known_failures_Linux.json b/test/known_failures_Linux.json index f4543e9d2b3..3f5e60596f5 100644 --- a/test/known_failures_Linux.json +++ b/test/known_failures_Linux.json @@ -1,4 +1,12 @@ [ + "c_glib-netstd_binary_buffered-ip", + "c_glib-netstd_binary_framed-ip", + "c_glib-netstd_compact_buffered-ip", + "c_glib-netstd_compact_framed-ip", + "c_glib-netstd_multi-binary_buffered-ip", + "c_glib-netstd_multi-binary_framed-ip", + "c_glib-netstd_multic-compact_buffered-ip", + "c_glib-netstd_multic-compact_framed-ip", "cl-c_glib_binary_buffered-ip", "cl-c_glib_binary_framed-ip", "cl-c_glib_multi-binary_buffered-ip", @@ -34,6 +42,9 @@ "cpp-cpp_multi-binary_websocket-domain", "cpp-cpp_multi-binary_websocket-ip", "cpp-cpp_multi-binary_websocket-ip-ssl", + "cpp-cpp_multi_websocket-domain", + "cpp-cpp_multi_websocket-ip", + "cpp-cpp_multi_websocket-ip-ssl", "cpp-cpp_multic-compact_websocket-domain", "cpp-cpp_multic-compact_websocket-ip", "cpp-cpp_multic-compact_websocket-ip-ssl", @@ -52,9 +63,6 @@ "cpp-cpp_multij_websocket-domain", "cpp-cpp_multij_websocket-ip", "cpp-cpp_multij_websocket-ip-ssl", - "cpp-cpp_multi_websocket-domain", - "cpp-cpp_multi_websocket-ip", - "cpp-cpp_multi_websocket-ip-ssl", "cpp-dart_binary_http-ip", "cpp-dart_compact_http-ip", "cpp-dart_json_http-ip", @@ -77,24 +85,60 @@ "cpp-go_multih-header_http-ip-ssl", "cpp-go_multij-json_http-ip", "cpp-go_multij-json_http-ip-ssl", + "cpp-java_binary_buffered-ip-ssl", + "cpp-java_binary_framed-fastframed-ip-ssl", + "cpp-java_binary_framed-ip-ssl", "cpp-java_binary_http-ip", "cpp-java_binary_http-ip-ssl", + "cpp-java_binary_zlib-ip-ssl", + "cpp-java_compact_buffered-ip-ssl", + "cpp-java_compact_framed-fastframed-ip-ssl", + "cpp-java_compact_framed-ip-ssl", "cpp-java_compact_http-ip", "cpp-java_compact_http-ip-ssl", + "cpp-java_compact_zlib-ip-ssl", + "cpp-java_json_buffered-ip-ssl", + "cpp-java_json_framed-fastframed-ip-ssl", + "cpp-java_json_framed-ip-ssl", "cpp-java_json_http-ip", "cpp-java_json_http-ip-ssl", + "cpp-java_json_zlib-ip-ssl", + "cpp-java_multi-binary_buffered-ip-ssl", + "cpp-java_multi-binary_framed-fastframed-ip-ssl", + "cpp-java_multi-binary_framed-ip-ssl", "cpp-java_multi-binary_http-ip", "cpp-java_multi-binary_http-ip-ssl", + "cpp-java_multi-binary_zlib-ip-ssl", + "cpp-java_multi_buffered-ip-ssl", + "cpp-java_multi_framed-fastframed-ip-ssl", + "cpp-java_multi_framed-ip-ssl", + "cpp-java_multi_http-ip", + "cpp-java_multi_http-ip-ssl", + "cpp-java_multi_zlib-ip-ssl", + "cpp-java_multic-compact_buffered-ip-ssl", + "cpp-java_multic-compact_framed-fastframed-ip-ssl", + "cpp-java_multic-compact_framed-ip-ssl", "cpp-java_multic-compact_http-ip", "cpp-java_multic-compact_http-ip-ssl", + "cpp-java_multic-compact_zlib-ip-ssl", + "cpp-java_multic_buffered-ip-ssl", + "cpp-java_multic_framed-fastframed-ip-ssl", + "cpp-java_multic_framed-ip-ssl", "cpp-java_multic_http-ip", "cpp-java_multic_http-ip-ssl", + "cpp-java_multic_zlib-ip-ssl", + "cpp-java_multij-json_buffered-ip-ssl", + "cpp-java_multij-json_framed-fastframed-ip-ssl", + "cpp-java_multij-json_framed-ip-ssl", "cpp-java_multij-json_http-ip", "cpp-java_multij-json_http-ip-ssl", + "cpp-java_multij-json_zlib-ip-ssl", + "cpp-java_multij_buffered-ip-ssl", + "cpp-java_multij_framed-fastframed-ip-ssl", + "cpp-java_multij_framed-ip-ssl", "cpp-java_multij_http-ip", "cpp-java_multij_http-ip-ssl", - "cpp-java_multi_http-ip", - "cpp-java_multi_http-ip-ssl", + "cpp-java_multij_zlib-ip-ssl", "cpp-netstd_binary_buffered-ip", "cpp-netstd_binary_buffered-ip-ssl", "cpp-netstd_binary_framed-ip", @@ -190,6 +234,9 @@ "cpp-py3_multi-multia_http-domain", "cpp-py3_multi-multia_http-ip", "cpp-py3_multi-multia_http-ip-ssl", + "cpp-py3_multi_http-domain", + "cpp-py3_multi_http-ip", + "cpp-py3_multi_http-ip-ssl", "cpp-py3_multic-accelc_http-domain", "cpp-py3_multic-accelc_http-ip", "cpp-py3_multic-accelc_http-ip-ssl", @@ -214,9 +261,6 @@ "cpp-py3_multij_http-domain", "cpp-py3_multij_http-ip", "cpp-py3_multij_http-ip-ssl", - "cpp-py3_multi_http-domain", - "cpp-py3_multi_http-ip", - "cpp-py3_multi_http-ip-ssl", "cpp-py_binary-accel_http-domain", "cpp-py_binary-accel_http-ip", "cpp-py_binary-accel_http-ip-ssl", @@ -244,6 +288,9 @@ "cpp-py_multi-multia_http-domain", "cpp-py_multi-multia_http-ip", "cpp-py_multi-multia_http-ip-ssl", + "cpp-py_multi_http-domain", + "cpp-py_multi_http-ip", + "cpp-py_multi_http-ip-ssl", "cpp-py_multic-accelc_http-domain", "cpp-py_multic-accelc_http-ip", "cpp-py_multic-accelc_http-ip-ssl", @@ -268,17 +315,6 @@ "cpp-py_multij_http-domain", "cpp-py_multij_http-ip", "cpp-py_multij_http-ip-ssl", - "cpp-py_multi_http-domain", - "cpp-py_multi_http-ip", - "cpp-py_multi_http-ip-ssl", - "c_glib-netstd_binary_buffered-ip", - "c_glib-netstd_binary_framed-ip", - "c_glib-netstd_compact_buffered-ip", - "c_glib-netstd_compact_framed-ip", - "c_glib-netstd_multi-binary_buffered-ip", - "c_glib-netstd_multi-binary_framed-ip", - "c_glib-netstd_multic-compact_buffered-ip", - "c_glib-netstd_multic-compact_framed-ip", "d-cl_binary_buffered-ip", "d-cl_binary_framed-ip", "d-cpp_binary_buffered-ip", @@ -305,12 +341,12 @@ "d-cpp_json_http-ip-ssl", "d-cpp_json_zlib-ip", "d-cpp_json_zlib-ip-ssl", - "d-dart_binary_http-ip", - "d-dart_compact_http-ip", - "d-dart_json_http-ip", "d-d_binary_http-ip", "d-d_compact_http-ip", "d-d_json_http-ip", + "d-dart_binary_http-ip", + "d-dart_compact_http-ip", + "d-dart_json_http-ip", "d-go_binary_http-ip", "d-go_binary_http-ip-ssl", "d-go_compact_http-ip", @@ -468,15 +504,15 @@ "go-cpp_header_http-ip-ssl", "go-cpp_json_http-ip", "go-cpp_json_http-ip-ssl", - "go-dart_binary_http-ip", - "go-dart_compact_http-ip", - "go-dart_json_http-ip", "go-d_binary_http-ip", "go-d_binary_http-ip-ssl", "go-d_compact_http-ip", "go-d_compact_http-ip-ssl", "go-d_json_http-ip", "go-d_json_http-ip-ssl", + "go-dart_binary_http-ip", + "go-dart_compact_http-ip", + "go-dart_json_http-ip", "go-java_binary_http-ip", "go-java_binary_http-ip-ssl", "go-java_compact_http-ip", @@ -509,6 +545,42 @@ "hs-php_binary-accel_framed-ip", "hs-php_json_buffered-ip", "hs-php_json_framed-ip", + "java-cpp_binary_buffered-ip-ssl", + "java-cpp_binary_fastframed-framed-ip-ssl", + "java-cpp_binary_framed-ip-ssl", + "java-cpp_binary_zlib-ip-ssl", + "java-cpp_compact_buffered-ip-ssl", + "java-cpp_compact_fastframed-framed-ip-ssl", + "java-cpp_compact_framed-ip-ssl", + "java-cpp_compact_zlib-ip-ssl", + "java-cpp_json_buffered-ip-ssl", + "java-cpp_json_fastframed-framed-ip-ssl", + "java-cpp_json_framed-ip-ssl", + "java-cpp_json_zlib-ip-ssl", + "java-cpp_multi-binary_buffered-ip-ssl", + "java-cpp_multi-binary_fastframed-framed-ip-ssl", + "java-cpp_multi-binary_framed-ip-ssl", + "java-cpp_multi-binary_zlib-ip-ssl", + "java-cpp_multi_buffered-ip-ssl", + "java-cpp_multi_fastframed-framed-ip-ssl", + "java-cpp_multi_framed-ip-ssl", + "java-cpp_multi_zlib-ip-ssl", + "java-cpp_multic-compact_buffered-ip-ssl", + "java-cpp_multic-compact_fastframed-framed-ip-ssl", + "java-cpp_multic-compact_framed-ip-ssl", + "java-cpp_multic-compact_zlib-ip-ssl", + "java-cpp_multic_buffered-ip-ssl", + "java-cpp_multic_fastframed-framed-ip-ssl", + "java-cpp_multic_framed-ip-ssl", + "java-cpp_multic_zlib-ip-ssl", + "java-cpp_multij-json_buffered-ip-ssl", + "java-cpp_multij-json_fastframed-framed-ip-ssl", + "java-cpp_multij-json_framed-ip-ssl", + "java-cpp_multij-json_zlib-ip-ssl", + "java-cpp_multij_buffered-ip-ssl", + "java-cpp_multij_fastframed-framed-ip-ssl", + "java-cpp_multij_framed-ip-ssl", + "java-cpp_multij_zlib-ip-ssl", "java-erl_binary_buffered-ip-ssl", "java-erl_binary_fastframed-framed-ip-ssl", "java-erl_binary_framed-ip-ssl", @@ -572,6 +644,14 @@ "kotlin-netstd_binary_framed-ip", "kotlin-netstd_compact_framed-ip", "kotlin-netstd_json_framed-ip", + "netstd-c_glib_binary_buffered-ip", + "netstd-c_glib_binary_buffered-ip-ssl", + "netstd-c_glib_binary_framed-ip", + "netstd-c_glib_binary_framed-ip-ssl", + "netstd-c_glib_compact_buffered-ip", + "netstd-c_glib_compact_buffered-ip-ssl", + "netstd-c_glib_compact_framed-ip", + "netstd-c_glib_compact_framed-ip-ssl", "netstd-cl_binary_buffered-ip", "netstd-cl_binary_framed-ip", "netstd-cpp_binary_buffered-ip", @@ -586,20 +666,6 @@ "netstd-cpp_json_buffered-ip-ssl", "netstd-cpp_json_framed-ip", "netstd-cpp_json_framed-ip-ssl", - "netstd-c_glib_binary_buffered-ip", - "netstd-c_glib_binary_buffered-ip-ssl", - "netstd-c_glib_binary_framed-ip", - "netstd-c_glib_binary_framed-ip-ssl", - "netstd-c_glib_compact_buffered-ip", - "netstd-c_glib_compact_buffered-ip-ssl", - "netstd-c_glib_compact_framed-ip", - "netstd-c_glib_compact_framed-ip-ssl", - "netstd-dart_binary_buffered-ip", - "netstd-dart_binary_framed-ip", - "netstd-dart_compact_buffered-ip", - "netstd-dart_compact_framed-ip", - "netstd-dart_json_buffered-ip", - "netstd-dart_json_framed-ip", "netstd-d_binary_buffered-ip", "netstd-d_binary_buffered-ip-ssl", "netstd-d_binary_framed-ip", @@ -612,6 +678,12 @@ "netstd-d_json_buffered-ip-ssl", "netstd-d_json_framed-ip", "netstd-d_json_framed-ip-ssl", + "netstd-dart_binary_buffered-ip", + "netstd-dart_binary_framed-ip", + "netstd-dart_compact_buffered-ip", + "netstd-dart_compact_framed-ip", + "netstd-dart_json_buffered-ip", + "netstd-dart_json_framed-ip", "netstd-erl_binary_buffered-ip", "netstd-erl_binary_buffered-ip-ssl", "netstd-erl_binary_framed-ip", @@ -787,15 +859,15 @@ "nodejs-cpp_json_websocket-domain", "nodejs-cpp_json_websocket-ip", "nodejs-cpp_json_websocket-ip-ssl", - "nodejs-dart_binary_http-ip", - "nodejs-dart_compact_http-ip", - "nodejs-dart_json_http-ip", "nodejs-d_binary_http-ip", "nodejs-d_binary_http-ip-ssl", "nodejs-d_compact_http-ip", "nodejs-d_compact_http-ip-ssl", "nodejs-d_json_http-ip", "nodejs-d_json_http-ip-ssl", + "nodejs-dart_binary_http-ip", + "nodejs-dart_compact_http-ip", + "nodejs-dart_json_http-ip", "nodejs-go_binary_http-ip", "nodejs-go_binary_http-ip-ssl", "nodejs-go_compact_http-ip", @@ -911,6 +983,9 @@ "py-cpp_multi-binary_http-domain", "py-cpp_multi-binary_http-ip", "py-cpp_multi-binary_http-ip-ssl", + "py-cpp_multi_http-domain", + "py-cpp_multi_http-ip", + "py-cpp_multi_http-ip-ssl", "py-cpp_multia-binary_http-domain", "py-cpp_multia-binary_http-ip", "py-cpp_multia-binary_http-ip-ssl", @@ -953,14 +1028,6 @@ "py-cpp_multij_http-domain", "py-cpp_multij_http-ip", "py-cpp_multij_http-ip-ssl", - "py-cpp_multi_http-domain", - "py-cpp_multi_http-ip", - "py-cpp_multi_http-ip-ssl", - "py-dart_accel-binary_http-ip", - "py-dart_accelc-compact_http-ip", - "py-dart_binary_http-ip", - "py-dart_compact_http-ip", - "py-dart_json_http-ip", "py-d_accel-binary_http-ip", "py-d_accel-binary_http-ip-ssl", "py-d_accelc-compact_http-ip", @@ -971,6 +1038,11 @@ "py-d_compact_http-ip-ssl", "py-d_json_http-ip", "py-d_json_http-ip-ssl", + "py-dart_accel-binary_http-ip", + "py-dart_accelc-compact_http-ip", + "py-dart_binary_http-ip", + "py-dart_compact_http-ip", + "py-dart_json_http-ip", "py-hs_accel-binary_http-ip", "py-hs_accelc-compact_http-ip", "py-hs_binary_http-ip", @@ -983,6 +1055,7 @@ "py-java_compact_http-ip-ssl", "py-java_json_http-ip-ssl", "py-java_multi-binary_http-ip-ssl", + "py-java_multi_http-ip-ssl", "py-java_multia-binary_http-ip-ssl", "py-java_multia-multi_http-ip-ssl", "py-java_multiac-compact_http-ip-ssl", @@ -991,7 +1064,6 @@ "py-java_multic_http-ip-ssl", "py-java_multij-json_http-ip-ssl", "py-java_multij_http-ip-ssl", - "py-java_multi_http-ip-ssl", "py-lua_accel-binary_http-ip", "py-lua_accelc-compact_http-ip", "py-lua_binary_http-ip", @@ -1029,14 +1101,14 @@ "py-php_binary-accel_framed-ip", "py-php_json_buffered-ip", "py-php_json_framed-ip", + "py-rs_multi_buffered-ip", + "py-rs_multi_framed-ip", "py-rs_multia-multi_buffered-ip", "py-rs_multia-multi_framed-ip", "py-rs_multiac-multic_buffered-ip", "py-rs_multiac-multic_framed-ip", "py-rs_multic_buffered-ip", "py-rs_multic_framed-ip", - "py-rs_multi_buffered-ip", - "py-rs_multi_framed-ip", "py3-cpp_accel-binary_http-domain", "py3-cpp_accel-binary_http-ip", "py3-cpp_accel-binary_http-ip-ssl", @@ -1064,6 +1136,9 @@ "py3-cpp_multi-binary_http-domain", "py3-cpp_multi-binary_http-ip", "py3-cpp_multi-binary_http-ip-ssl", + "py3-cpp_multi_http-domain", + "py3-cpp_multi_http-ip", + "py3-cpp_multi_http-ip-ssl", "py3-cpp_multia-binary_http-domain", "py3-cpp_multia-binary_http-ip", "py3-cpp_multia-binary_http-ip-ssl", @@ -1106,14 +1181,6 @@ "py3-cpp_multij_http-domain", "py3-cpp_multij_http-ip", "py3-cpp_multij_http-ip-ssl", - "py3-cpp_multi_http-domain", - "py3-cpp_multi_http-ip", - "py3-cpp_multi_http-ip-ssl", - "py3-dart_accel-binary_http-ip", - "py3-dart_accelc-compact_http-ip", - "py3-dart_binary_http-ip", - "py3-dart_compact_http-ip", - "py3-dart_json_http-ip", "py3-d_accel-binary_http-ip", "py3-d_accel-binary_http-ip-ssl", "py3-d_accelc-compact_http-ip", @@ -1124,6 +1191,11 @@ "py3-d_compact_http-ip-ssl", "py3-d_json_http-ip", "py3-d_json_http-ip-ssl", + "py3-dart_accel-binary_http-ip", + "py3-dart_accelc-compact_http-ip", + "py3-dart_binary_http-ip", + "py3-dart_compact_http-ip", + "py3-dart_json_http-ip", "py3-hs_accel-binary_http-ip", "py3-hs_accelc-compact_http-ip", "py3-hs_binary_http-ip", @@ -1136,6 +1208,7 @@ "py3-java_compact_http-ip-ssl", "py3-java_json_http-ip-ssl", "py3-java_multi-binary_http-ip-ssl", + "py3-java_multi_http-ip-ssl", "py3-java_multia-binary_http-ip-ssl", "py3-java_multia-multi_http-ip-ssl", "py3-java_multiac-compact_http-ip-ssl", @@ -1144,7 +1217,6 @@ "py3-java_multic_http-ip-ssl", "py3-java_multij-json_http-ip-ssl", "py3-java_multij_http-ip-ssl", - "py3-java_multi_http-ip-ssl", "py3-lua_accel-binary_http-ip", "py3-lua_accelc-compact_http-ip", "py3-lua_binary_http-ip", @@ -1207,7 +1279,6 @@ "rs-netstd_binary_buffered-ip", "rs-netstd_binary_framed-ip", "rs-netstd_compact_buffered-ip", - "rs-netstd_compact_buffered-ip", "rs-netstd_compact_framed-ip", "rs-netstd_multi-binary_buffered-ip", "rs-netstd_multi-binary_framed-ip",