Merge changes from topic 'fmq_test_fix' am: e8f31ca238 am: c86163d864
am: dbc65b5172

Change-Id: I87f4859836f16358e2209f9be7b526e5aaae0f75
diff --git a/tests/fmq_test b/tests/fmq_test
index 7c5bfbe..02683c9 100644
--- a/tests/fmq_test
+++ b/tests/fmq_test
@@ -1,6 +1,6 @@
 source /data/nativetest64/hidl_test_helper
 
-run_all_tests \
+TREBLE_TESTING_OVERRIDE=true run_all_tests \
     "/data/nativetest/android.hardware.tests.msgq@1.0-service-test/android.hardware.tests.msgq@1.0-service-test" \
     "/data/nativetest64/android.hardware.tests.msgq@1.0-service-test/android.hardware.tests.msgq@1.0-service-test" \
     "/data/nativetest/mq_test_client/mq_test_client" \
diff --git a/tests/msgq_test_client.cpp b/tests/msgq_test_client.cpp
index c15035b..4416c54 100644
--- a/tests/msgq_test_client.cpp
+++ b/tests/msgq_test_client.cpp
@@ -19,9 +19,10 @@
 #error "GTest did not detect pthread library."
 #endif
 
-#include <fmq/MessageQueue.h>
 #include <android/hardware/tests/msgq/1.0/ITestMsgQ.h>
 #include <fmq/EventFlag.h>
+#include <fmq/MessageQueue.h>
+#include <hidl/ServiceManagement.h>
 
 // libutils:
 using android::OK;
@@ -37,23 +38,30 @@
 using android::hardware::MessageQueue;
 using android::hardware::MQDescriptorSync;
 using android::hardware::MQDescriptorUnsync;
+using android::hardware::details::waitForHwService;
 
 typedef MessageQueue<uint16_t, kSynchronizedReadWrite> MessageQueueSync;
 typedef MessageQueue<uint16_t, kUnsynchronizedWrite> MessageQueueUnsync;
 
+static sp<ITestMsgQ> waitGetTestService() {
+    // waitForHwService is required because ITestMsgQ is not in manifest.xml.
+    // "Real" HALs shouldn't be doing this.
+    waitForHwService(ITestMsgQ::descriptor, "default");
+    return ITestMsgQ::getService();
+}
+
 class UnsynchronizedWriteClientMultiProcess : public ::testing::Test {
-protected:
-    void getQueue(MessageQueueUnsync** fmq, sp<ITestMsgQ>& service, bool setupQueue) {
-        service = ITestMsgQ::getService();
-        ASSERT_NE(service, nullptr);
-        ASSERT_TRUE(service->isRemote());
-        service->getFmqUnsyncWrite(setupQueue,
-                                   [fmq](bool ret, const MQDescriptorUnsync<uint16_t>& in) {
-                                       ASSERT_TRUE(ret);
-                                       *fmq = new (std::nothrow) MessageQueueUnsync(in);
-                                   });
-        ASSERT_NE(*fmq, nullptr);
-        ASSERT_TRUE((*fmq)->isValid());
+   protected:
+    void getQueue(MessageQueueUnsync** fmq, sp<ITestMsgQ>* service, bool setupQueue) {
+        *service = waitGetTestService();
+        *fmq = nullptr;
+        if (*service == nullptr) return;
+        if (!(*service)->isRemote()) return;
+        (*service)->getFmqUnsyncWrite(setupQueue,
+                                      [fmq](bool ret, const MQDescriptorUnsync<uint16_t>& in) {
+                                          ASSERT_TRUE(ret);
+                                          *fmq = new (std::nothrow) MessageQueueUnsync(in);
+                                      });
     }
 };
 
@@ -64,7 +72,7 @@
     }
 
     virtual void SetUp() {
-        mService = ITestMsgQ::getService();
+        mService = waitGetTestService();
         ASSERT_NE(mService, nullptr);
         ASSERT_TRUE(mService->isRemote());
         mService->configureFmqSyncReadWrite([this](
@@ -89,7 +97,7 @@
     }
 
     virtual void SetUp() {
-        mService = ITestMsgQ::getService();
+        mService = waitGetTestService();
         ASSERT_NE(mService, nullptr);
         ASSERT_TRUE(mService->isRemote());
         mService->getFmqUnsyncWrite(true /* configureFmq */,
@@ -138,7 +146,11 @@
     if ((pid = fork()) == 0) {
         sp<ITestMsgQ> testService;
         MessageQueueUnsync*  queue = nullptr;
-        getQueue(&queue, testService, true /* setupQueue */);
+        getQueue(&queue, &testService, true /* setupQueue */);
+        ASSERT_NE(testService, nullptr);
+        ASSERT_TRUE(testService->isRemote());
+        ASSERT_NE(queue, nullptr);
+        ASSERT_TRUE(queue->isValid());
 
         size_t numMessagesMax = queue->getQuantumCount();
 
@@ -183,7 +195,11 @@
         sp<ITestMsgQ> testService;
         MessageQueueUnsync* queue = nullptr;
 
-        getQueue(&queue, testService, false /* setupQueue */);
+        getQueue(&queue, &testService, false /* setupQueue */);
+        ASSERT_NE(testService, nullptr);
+        ASSERT_TRUE(testService->isRemote());
+        ASSERT_NE(queue, nullptr);
+        ASSERT_TRUE(queue->isValid());
 
         // This read should fail due to the write overflow.
         std::vector<uint16_t> readData(dataLen);