Merge "adb: add test for flushing socket data after a write failure."

am: 32caa9870f

Change-Id: I8f1e13f89d0ce42311ea517612488d0b5e46a543
This commit is contained in:
Josh Gao 2018-03-16 23:15:51 +00:00 committed by android-build-merger
commit aef43182dc
1 changed files with 40 additions and 0 deletions

View File

@ -213,6 +213,46 @@ TEST_F(LocalSocketTest, write_error_when_having_packets) {
TerminateThread(thread);
}
#if 0
// Ensure that if we fail to write output to an fd, we will still flush data coming from it.
TEST_F(LocalSocketTest, flush_after_shutdown) {
int head_fd[2];
int tail_fd[2];
ASSERT_EQ(0, adb_socketpair(head_fd));
ASSERT_EQ(0, adb_socketpair(tail_fd));
asocket* head = create_local_socket(head_fd[1]);
asocket* tail = create_local_socket(tail_fd[1]);
head->peer = tail;
head->ready(head);
tail->peer = head;
tail->ready(tail);
PrepareThread();
std::thread thread(fdevent_loop);
ASSERT_TRUE(WriteFdExactly(head_fd[0], "foo", 3));
ASSERT_EQ(0, adb_shutdown(head_fd[0], SHUT_RD));
const char* str = "write succeeds, but local_socket will fail to write";
ASSERT_TRUE(WriteFdExactly(tail_fd[0], str, strlen(str)));
ASSERT_TRUE(WriteFdExactly(head_fd[0], "bar", 3));
char buf[6];
ASSERT_TRUE(ReadFdExactly(tail_fd[0], buf, 6));
ASSERT_EQ(0, memcmp(buf, "foobar", 6));
adb_close(head_fd[0]);
adb_close(tail_fd[0]);
// Wait until the local sockets are closed.
std::this_thread::sleep_for(SLEEP_FOR_FDEVENT);
ASSERT_EQ(GetAdditionalLocalSocketCount(), fdevent_installed_count());
TerminateThread(thread);
}
#endif
#if defined(__linux__)
static void ClientThreadFunc() {