Add tests to lshal.

Test: lshal_test
Bug: 37725279
Change-Id: I1914e6274974ed5eb0ce2d655f1333d2344b49f5
Merged-In: I1914e6274974ed5eb0ce2d655f1333d2344b49f5
diff --git a/cmds/lshal/Lshal.cpp b/cmds/lshal/Lshal.cpp
index bf4ba2c..9db42f1 100644
--- a/cmds/lshal/Lshal.cpp
+++ b/cmds/lshal/Lshal.cpp
@@ -33,7 +33,19 @@
 
 using ::android::hidl::manager::V1_0::IServiceManager;
 
-Lshal::Lshal() {
+Lshal::Lshal()
+    : mOut(std::cout), mErr(std::cerr),
+      mServiceManager(::android::hardware::defaultServiceManager()),
+      mPassthroughManager(::android::hardware::getPassthroughServiceManager()) {
+}
+
+Lshal::Lshal(std::ostream &out, std::ostream &err,
+            sp<hidl::manager::V1_0::IServiceManager> serviceManager,
+            sp<hidl::manager::V1_0::IServiceManager> passthroughManager)
+    : mOut(out), mErr(err),
+      mServiceManager(serviceManager),
+      mPassthroughManager(passthroughManager) {
+
 }
 
 void Lshal::usage(const std::string &command) const {
@@ -125,8 +137,7 @@
         NullableOStream<std::ostream> err) const {
     using android::hidl::base::V1_0::IBase;
 
-    hardware::Return<sp<IBase>> retBase =
-        ::android::hardware::defaultServiceManager()->get(interfaceName, instanceName);
+    hardware::Return<sp<IBase>> retBase = serviceManager()->get(interfaceName, instanceName);
 
     if (!retBase.isOk()) {
         std::string msg = "Cannot get " + interfaceName + "/" + instanceName + ": "
@@ -196,7 +207,17 @@
     return USAGE;
 }
 
+void signalHandler(int sig) {
+    if (sig == SIGINT) {
+        int retVal;
+        pthread_exit(&retVal);
+    }
+}
+
 Status Lshal::main(const Arg &arg) {
+    // Allow SIGINT to terminate all threads.
+    signal(SIGINT, signalHandler);
+
     Status status = parseArgs(arg);
     if (status != OK) {
         return status;
@@ -223,18 +244,13 @@
     return mOut;
 }
 
-void signalHandler(int sig) {
-    if (sig == SIGINT) {
-        int retVal;
-        pthread_exit(&retVal);
-    }
+const sp<IServiceManager> &Lshal::serviceManager() const {
+    return mServiceManager;
+}
+
+const sp<IServiceManager> &Lshal::passthroughManager() const {
+    return mPassthroughManager;
 }
 
 }  // namespace lshal
 }  // namespace android
-
-int main(int argc, char **argv) {
-    using namespace ::android::lshal;
-    signal(SIGINT, signalHandler);
-    return Lshal{}.main(Arg{argc, argv});
-}