xref: /llvm-project/llvm/unittests/Support/raw_socket_stream_test.cpp (revision a5ffabce98a4b2e9d69009fa3e60f2b154100860)
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