Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 32caa987 authored by Josh Gao's avatar Josh Gao Committed by Gerrit Code Review
Browse files

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

parents 40858e95 df3bae9f
Loading
Loading
Loading
Loading
+40 −0
Original line number Diff line number Diff line
@@ -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() {