summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartijn Coenen <maco@google.com>2017-12-11 11:10:34 +0100
committerYuexi Ma <yuexima@google.com>2018-02-06 18:45:00 -0800
commit142a9ab25a4e841789519a20ab6bd7975a0189a5 (patch)
tree2d99ce8a82f140968dc89a42ebfaa7755201ccef
parentb35d58143a35d3992173c2cf3e9d57b37989f5fd (diff)
downloadnative-142a9ab25a4e841789519a20ab6bd7975a0189a5.tar.gz
Accept EAGAIN on a binder transaction.
A recent change to the binder kernel driver delays the delivery of BR_TRANSACTION_COMPLETE until a reply comes in. The binderDriverInterfaceTest uses the non-blocking interface, and assumes BR_TRANSACTION_COMPLETE comes in on the first read. I don't think we depend on this assumption in any of our real code, so change the test. Bug: 69442864 Test: binderDriverInterfaceTest passes Change-Id: Iafca061c1bb7badd6cb61b3e876d9c3bbfa18542 Merged-In: Iafca061c1bb7badd6cb61b3e876d9c3bbfa18542 (cherry picked from 2b39df7b8964739f7eb793c13392b73752c08460)
-rw-r--r--libs/binder/tests/binderDriverInterfaceTest.cpp12
1 files changed, 11 insertions, 1 deletions
diff --git a/libs/binder/tests/binderDriverInterfaceTest.cpp b/libs/binder/tests/binderDriverInterfaceTest.cpp
index ff5912fbe1..9b289c0c23 100644
--- a/libs/binder/tests/binderDriverInterfaceTest.cpp
+++ b/libs/binder/tests/binderDriverInterfaceTest.cpp
@@ -77,6 +77,16 @@ class BinderDriverInterfaceTest : public ::testing::Test {
virtual void TearDown() {
}
protected:
+ /* The ioctl must either return 0, or if it doesn't errno should be accepted_errno */
+ void binderTestIoctlSuccessOrError(int cmd, void *arg, int accepted_errno) {
+ int ret;
+
+ ret = ioctl(m_binderFd, cmd, arg);
+ if (ret != 0) {
+ EXPECT_EQ(errno, accepted_errno);
+ }
+ }
+
void binderTestIoctlRetErr2(int cmd, void *arg, int expect_ret, int expect_errno, int accept_errno) {
int ret;
@@ -250,7 +260,7 @@ TEST_F(BinderDriverInterfaceTest, Transaction) {
{
SCOPED_TRACE("1st WriteRead");
- binderTestIoctl(BINDER_WRITE_READ, &bwr);
+ binderTestIoctlSuccessOrError(BINDER_WRITE_READ, &bwr, EAGAIN);
}
EXPECT_EQ(sizeof(bc1), bwr.write_consumed);
if (bwr.read_consumed < offsetof(typeof(br), pad)) {