Skip to content

Commit 6675e03

Browse files
committed
pipe select test
1 parent a0ce3e6 commit 6675e03

File tree

1 file changed

+31
-0
lines changed

1 file changed

+31
-0
lines changed

lldb/unittests/Host/PipeTest.cpp

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
#include "lldb/Host/FileSystem.h"
1212
#include "lldb/Host/HostInfo.h"
1313
#include "llvm/Testing/Support/Error.h"
14+
#include "lldb/Host/Socket.h"
1415
#include "gtest/gtest.h"
1516
#include <chrono>
1617
#include <fcntl.h>
@@ -36,6 +37,36 @@ TEST_F(PipeTest, CreateWithUniqueName) {
3637
llvm::Succeeded());
3738
}
3839

40+
41+
TEST_F(PipeTest, select) {
42+
ASSERT_THAT_ERROR(Socket::Initialize(), llvm::Succeeded());
43+
Pipe pipe;
44+
ASSERT_THAT_ERROR(pipe.CreateNew().ToError(), llvm::Succeeded());
45+
OVERLAPPED ov = {};
46+
HANDLE event = CreateEvent(NULL, true, false, NULL);
47+
ASSERT_NE(event, nullptr);
48+
ov.hEvent = event;
49+
char buffer[1];
50+
DWORD bytes_read;
51+
BOOL success = ReadFile(pipe.GetReadPipe(), buffer, 0, &bytes_read, &ov);
52+
ASSERT_FALSE(success);
53+
ASSERT_EQ(GetLastError(), ERROR_IO_PENDING);
54+
auto start = std::chrono::system_clock::now();
55+
std::future<llvm::Expected<size_t>> future_num_bytes = std::async(
56+
std::launch::async, [&] {
57+
std::this_thread::sleep_for(std::chrono::seconds(1));
58+
return pipe.Write(".", 1, std::nullopt);
59+
});
60+
DWORD result = WSAWaitForMultipleEvents(1, &event, false, INFINITE, false);
61+
ASSERT_GT(std::chrono::system_clock::now()-start, std::chrono::seconds(1));
62+
ASSERT_EQ(result, WSA_WAIT_EVENT_0);
63+
ASSERT_TRUE(GetOverlappedResult(pipe.GetReadPipe(), &ov, &bytes_read, false));
64+
ASSERT_EQ(bytes_read, 0);
65+
ASSERT_THAT_EXPECTED(future_num_bytes.get(), llvm::Succeeded());
66+
ASSERT_THAT_EXPECTED(pipe.Read(buffer, 1, std::chrono::seconds(0)), llvm::HasValue(1));
67+
ASSERT_EQ(buffer[0], '.');
68+
}
69+
3970
// Test broken
4071
#ifndef _WIN32
4172
TEST_F(PipeTest, OpenAsReader) {

0 commit comments

Comments
 (0)