1 #include "llvm/ADT/SmallString.h" 2 #include "llvm/Config/llvm-config.h" 3 #include "llvm/Support/Casting.h" 4 #include "llvm/Support/FileSystem.h" 5 #include "llvm/Support/FileUtilities.h" 6 #include "llvm/Support/raw_ostream.h" 7 #include "llvm/Testing/Support/Error.h" 8 #include "gtest/gtest.h" 9 #include <future> 10 #include <iostream> 11 #include <stdlib.h> 12 13 using namespace llvm; 14 15 namespace { 16 17 TEST(raw_socket_streamTest, CLIENT_TO_SERVER_AND_SERVER_TO_CLIENT) { 18 SmallString<100> SocketPath; 19 llvm::sys::fs::createUniquePath("test_raw_socket_stream.sock", SocketPath, 20 true); 21 22 char Bytes[8]; 23 24 Expected<ListeningSocket> MaybeServerListener = 25 ListeningSocket::createUnix(SocketPath); 26 ASSERT_THAT_EXPECTED(MaybeServerListener, llvm::Succeeded()); 27 28 ListeningSocket ServerListener = std::move(*MaybeServerListener); 29 30 Expected<std::unique_ptr<raw_socket_stream>> MaybeClient = 31 raw_socket_stream::createConnectedUnix(SocketPath); 32 ASSERT_THAT_EXPECTED(MaybeClient, llvm::Succeeded()); 33 34 raw_socket_stream &Client = **MaybeClient; 35 36 Expected<std::unique_ptr<raw_socket_stream>> MaybeServer = 37 ServerListener.accept(); 38 ASSERT_THAT_EXPECTED(MaybeServer, llvm::Succeeded()); 39 40 raw_socket_stream &Server = **MaybeServer; 41 42 Client << "01234567"; 43 Client.flush(); 44 45 ssize_t BytesRead = Server.read(Bytes, 8); 46 47 std::string string(Bytes, 8); 48 49 ASSERT_EQ(8, BytesRead); 50 ASSERT_EQ("01234567", string); 51 } 52 } // namespace