Merge "Revert "Allow proxies to be compared and identified.""
diff --git a/test/AndroidTest.xml b/test/AndroidTest.xml
index 82a5dcf..7c2260b 100644
--- a/test/AndroidTest.xml
+++ b/test/AndroidTest.xml
@@ -17,50 +17,56 @@
     <target_preparer class="com.android.compatibility.common.tradefed.targetprep.VtsFilePusher">
         <option name="push-group" value="HostDrivenTest.push" />
         <option name="cleanup" value="true" />
-        <option name="remount-system" value="true" />
         <option name="push" value="DATA/nativetest/hidl_test_servers/hidl_test_servers->/data/nativetest/hidl_test_servers/hidl_test_servers" />
         <option name="push" value="DATA/nativetest64/hidl_test_servers/hidl_test_servers->/data/nativetest64/hidl_test_servers/hidl_test_servers" />
         <option name="push" value="DATA/nativetest/hidl_test_client/hidl_test_client->/data/nativetest/hidl_test_client/hidl_test_client" />
         <option name="push" value="DATA/nativetest64/hidl_test_client/hidl_test_client->/data/nativetest64/hidl_test_client/hidl_test_client" />
         <option name="push" value="DATA/nativetest64/hidl_test_helper->/data/nativetest64/hidl_test_helper" />
         <option name="push" value="DATA/nativetest64/hidl_test->/data/nativetest64/hidl_test" />
-        <option name="push" value="DATA/system/lib/libfootest.so->/system/lib/libfootest.so" />
-        <option name="push" value="DATA/system/lib64/libfootest.so->/system/lib64/libfootest.so" />
-        <option name="push" value="DATA/system/lib/libpointertest.so->/system/lib/libpointertest.so" />
-        <option name="push" value="DATA/system/lib64/libpointertest.so->/system/lib64/libpointertest.so" />
-        <option name="push" value="DATA/lib/android.hardware.tests.foo@1.0.so->/system/lib/android.hardware.tests.foo@1.0.so" />
-        <option name="push" value="DATA/lib64/android.hardware.tests.foo@1.0.so->/system/lib64/android.hardware.tests.foo@1.0.so" />
-        <option name="push" value="DATA/lib/android.hardware.tests.bar@1.0.so->/system/lib/android.hardware.tests.bar@1.0.so" />
-        <option name="push" value="DATA/lib64/android.hardware.tests.bar@1.0.so->/system/lib64/android.hardware.tests.bar@1.0.so" />
-        <option name="push" value="DATA/lib/android.hardware.tests.baz@1.0.so->/system/lib/android.hardware.tests.baz@1.0.so" />
-        <option name="push" value="DATA/lib64/android.hardware.tests.baz@1.0.so->/system/lib64/android.hardware.tests.baz@1.0.so" />
-        <option name="push" value="DATA/lib/android.hardware.tests.hash@1.0.so->/system/lib/android.hardware.tests.hash@1.0.so" />
-        <option name="push" value="DATA/lib64/android.hardware.tests.hash@1.0.so->/system/lib64/android.hardware.tests.hash@1.0.so" />
-        <option name="push" value="DATA/lib/android.hardware.tests.inheritance@1.0.so->/system/lib/android.hardware.tests.inheritance@1.0.so" />
-        <option name="push" value="DATA/lib64/android.hardware.tests.inheritance@1.0.so->/system/lib64/android.hardware.tests.inheritance@1.0.so" />
-        <option name="push" value="DATA/lib/android.hardware.tests.pointer@1.0.so->/system/lib/android.hardware.tests.pointer@1.0.so" />
-        <option name="push" value="DATA/lib64/android.hardware.tests.pointer@1.0.so->/system/lib64/android.hardware.tests.pointer@1.0.so" />
-        <option name="push" value="DATA/lib/android.hardware.tests.memory@1.0.so->/system/lib/android.hardware.tests.memory@1.0.so" />
-        <option name="push" value="DATA/lib64/android.hardware.tests.memory@1.0.so->/system/lib64/android.hardware.tests.memory@1.0.so" />
-        <option name="push" value="DATA/system/lib/hw/android.hardware.tests.foo@1.0-impl.so->/system/lib/hw/android.hardware.tests.foo@1.0-impl.so" />
-        <option name="push" value="DATA/system/lib64/hw/android.hardware.tests.foo@1.0-impl.so->/system/lib64/hw/android.hardware.tests.foo@1.0-impl.so" />
-        <option name="push" value="DATA/system/lib/hw/android.hardware.tests.bar@1.0-impl.so->/system/lib/hw/android.hardware.tests.bar@1.0-impl.so" />
-        <option name="push" value="DATA/system/lib64/hw/android.hardware.tests.bar@1.0-impl.so->/system/lib64/hw/android.hardware.tests.bar@1.0-impl.so" />
-        <option name="push" value="DATA/system/lib/hw/android.hardware.tests.baz@1.0-impl.so->/system/lib/hw/android.hardware.tests.baz@1.0-impl.so" />
-        <option name="push" value="DATA/system/lib64/hw/android.hardware.tests.baz@1.0-impl.so->/system/lib64/hw/android.hardware.tests.baz@1.0-impl.so" />
-        <option name="push" value="DATA/system/lib/hw/android.hardware.tests.hash@1.0-impl.so->/system/lib/hw/android.hardware.tests.hash@1.0-impl.so" />
-        <option name="push" value="DATA/system/lib64/hw/android.hardware.tests.hash@1.0-impl.so->/system/lib64/hw/android.hardware.tests.hash@1.0-impl.so" />
-        <option name="push" value="DATA/system/lib/hw/android.hardware.tests.inheritance@1.0-impl.so->/system/lib/hw/android.hardware.tests.inheritance@1.0-impl.so" />
-        <option name="push" value="DATA/system/lib64/hw/android.hardware.tests.inheritance@1.0-impl.so->/system/lib64/hw/android.hardware.tests.inheritance@1.0-impl.so" />
-        <option name="push" value="DATA/system/lib/hw/android.hardware.tests.pointer@1.0-impl.so->/system/lib/hw/android.hardware.tests.pointer@1.0-impl.so" />
-        <option name="push" value="DATA/system/lib64/hw/android.hardware.tests.pointer@1.0-impl.so->/system/lib64/hw/android.hardware.tests.pointer@1.0-impl.so" />
-        <option name="push" value="DATA/system/lib/hw/android.hardware.tests.memory@1.0-impl.so->/system/lib/hw/android.hardware.tests.memory@1.0-impl.so" />
-        <option name="push" value="DATA/system/lib64/hw/android.hardware.tests.memory@1.0-impl.so->/system/lib64/hw/android.hardware.tests.memory@1.0-impl.so" />
+        <option name="push" value="DATA/lib/libfootest.so->/data/local/tmp/system/lib/libfootest.so" />
+        <option name="push" value="DATA/lib64/libfootest.so->/data/local/tmp/system/lib64/libfootest.so" />
+        <option name="push" value="DATA/lib/libpointertest.so->/data/local/tmp/system/lib/libpointertest.so" />
+        <option name="push" value="DATA/lib64/libpointertest.so->/data/local/tmp/system/lib64/libpointertest.so" />
+        <option name="push" value="DATA/lib/android.hardware.tests.foo@1.0.so->/data/local/tmp/system/lib/android.hardware.tests.foo@1.0.so" />
+        <option name="push" value="DATA/lib64/android.hardware.tests.foo@1.0.so->/data/local/tmp/system/lib64/android.hardware.tests.foo@1.0.so" />
+        <option name="push" value="DATA/lib/android.hardware.tests.bar@1.0.so->/data/local/tmp/system/lib/android.hardware.tests.bar@1.0.so" />
+        <option name="push" value="DATA/lib64/android.hardware.tests.bar@1.0.so->/data/local/tmp/system/lib64/android.hardware.tests.bar@1.0.so" />
+        <option name="push" value="DATA/lib/android.hardware.tests.baz@1.0.so->/data/local/tmp/system/lib/android.hardware.tests.baz@1.0.so" />
+        <option name="push" value="DATA/lib64/android.hardware.tests.baz@1.0.so->/data/local/tmp/system/lib64/android.hardware.tests.baz@1.0.so" />
+        <option name="push" value="DATA/lib/android.hardware.tests.hash@1.0.so->/data/local/tmp/system/lib/android.hardware.tests.hash@1.0.so" />
+        <option name="push" value="DATA/lib64/android.hardware.tests.hash@1.0.so->/data/local/tmp/system/lib64/android.hardware.tests.hash@1.0.so" />
+        <option name="push" value="DATA/lib/android.hardware.tests.inheritance@1.0.so->/data/local/tmp/system/lib/android.hardware.tests.inheritance@1.0.so" />
+        <option name="push" value="DATA/lib64/android.hardware.tests.inheritance@1.0.so->/data/local/tmp/system/lib64/android.hardware.tests.inheritance@1.0.so" />
+        <option name="push" value="DATA/lib/android.hardware.tests.pointer@1.0.so->/data/local/tmp/system/lib/android.hardware.tests.pointer@1.0.so" />
+        <option name="push" value="DATA/lib64/android.hardware.tests.pointer@1.0.so->/data/local/tmp/system/lib64/android.hardware.tests.pointer@1.0.so" />
+        <option name="push" value="DATA/lib/android.hardware.tests.memory@1.0.so->/data/local/tmp/system/lib/android.hardware.tests.memory@1.0.so" />
+        <option name="push" value="DATA/lib64/android.hardware.tests.memory@1.0.so->/data/local/tmp/system/lib64/android.hardware.tests.memory@1.0.so" />
+        <option name="push" value="DATA/lib/android.hardware.tests.multithread@1.0.so->/data/local/tmp/system/lib/android.hardware.tests.multithread@1.0.so" />
+        <option name="push" value="DATA/lib64/android.hardware.tests.multithread@1.0.so->/data/local/tmp/system/lib64/android.hardware.tests.multithread@1.0.so" />
+        <option name="push" value="DATA/lib/hw/android.hardware.tests.foo@1.0-impl.so->/data/local/tmp/system/lib/hw/android.hardware.tests.foo@1.0-impl.so" />
+        <option name="push" value="DATA/lib64/hw/android.hardware.tests.foo@1.0-impl.so->/data/local/tmp/system/lib64/hw/android.hardware.tests.foo@1.0-impl.so" />
+        <option name="push" value="DATA/lib/hw/android.hardware.tests.bar@1.0-impl.so->/data/local/tmp/system/lib/hw/android.hardware.tests.bar@1.0-impl.so" />
+        <option name="push" value="DATA/lib64/hw/android.hardware.tests.bar@1.0-impl.so->/data/local/tmp/system/lib64/hw/android.hardware.tests.bar@1.0-impl.so" />
+        <option name="push" value="DATA/lib/hw/android.hardware.tests.baz@1.0-impl.so->/data/local/tmp/system/lib/hw/android.hardware.tests.baz@1.0-impl.so" />
+        <option name="push" value="DATA/lib64/hw/android.hardware.tests.baz@1.0-impl.so->/data/local/tmp/system/lib64/hw/android.hardware.tests.baz@1.0-impl.so" />
+        <option name="push" value="DATA/lib/hw/android.hardware.tests.hash@1.0-impl.so->/data/local/tmp/system/lib/hw/android.hardware.tests.hash@1.0-impl.so" />
+        <option name="push" value="DATA/lib64/hw/android.hardware.tests.hash@1.0-impl.so->/data/local/tmp/system/lib64/hw/android.hardware.tests.hash@1.0-impl.so" />
+        <option name="push" value="DATA/lib/hw/android.hardware.tests.inheritance@1.0-impl.so->/data/local/tmp/system/lib/hw/android.hardware.tests.inheritance@1.0-impl.so" />
+        <option name="push" value="DATA/lib64/hw/android.hardware.tests.inheritance@1.0-impl.so->/data/local/tmp/system/lib64/hw/android.hardware.tests.inheritance@1.0-impl.so" />
+        <option name="push" value="DATA/lib/hw/android.hardware.tests.pointer@1.0-impl.so->/data/local/tmp/system/lib/hw/android.hardware.tests.pointer@1.0-impl.so" />
+        <option name="push" value="DATA/lib64/hw/android.hardware.tests.pointer@1.0-impl.so->/data/local/tmp/system/lib64/hw/android.hardware.tests.pointer@1.0-impl.so" />
+        <option name="push" value="DATA/lib/hw/android.hardware.tests.memory@1.0-impl.so->/data/local/tmp/system/lib/hw/android.hardware.tests.memory@1.0-impl.so" />
+        <option name="push" value="DATA/lib64/hw/android.hardware.tests.memory@1.0-impl.so->/data/local/tmp/system/lib64/hw/android.hardware.tests.memory@1.0-impl.so" />
+        <option name="push" value="DATA/lib/hw/android.hardware.tests.multithread@1.0-impl.so->/data/local/tmp/system/lib/hw/android.hardware.tests.multithread@1.0-impl.so" />
+        <option name="push" value="DATA/lib64/hw/android.hardware.tests.multithread@1.0-impl.so->/data/local/tmp/system/lib64/hw/android.hardware.tests.multithread@1.0-impl.so" />
     </target_preparer>
     <target_preparer class="com.android.tradefed.targetprep.VtsPythonVirtualenvPreparer" />
     <test class="com.android.tradefed.testtype.VtsMultiDeviceTest">
       <option name="test-module-name" value="VtsHidlUnitTests" />
       <option name="binary-test-type" value="binary_test" />
       <option name="binary-test-source" value="DATA/nativetest64/hidl_test->/data/nativetest64/hidl_test" />
+      <option name="binary-test-envp" value="VTS_ROOT_PATH=/data/local/tmp" />
+      <option name="binary-test-args" value="-x /data/local/tmp/system/lib" />
+      <option name="binary-test-args" value="-y /data/local/tmp/system/lib64" />
     </test>
 </configuration>
diff --git a/test/hidl_test_helper b/test/hidl_test_helper
index 324f755..22c416f 100644
--- a/test/hidl_test_helper
+++ b/test/hidl_test_helper
@@ -2,6 +2,8 @@
     echo "runs $TEST_NAME"
     echo "\t -h help"
     echo "\t -c [CLIENT64_SERVER64 | CLIENT32_SERVER32 | CLIENT64_SERVER32 | CLIENT32_SERVER64] configures whether to run 32-bit or 64-bit versions of the servers and client"
+    echo "\t -x [/ld/library/path32] set the LD_LIBRARY_PATH for servers32 and client32"
+    echo "\t -y [/ld/library/path64] set the LD_LIBRARY_PATH for servers64 and client64"
 }
 
 failed_test_cases=()
@@ -9,20 +11,25 @@
 function run_test() {
     if [ $1 -eq 32 ]; then
         CLIENT_PATH=$CLIENT_PATH32
+        LD_LIB_PATH_CLIENT=$LD_LIB_PATH32
     else
         CLIENT_PATH=$CLIENT_PATH64
+        LD_LIB_PATH_CLIENT=$LD_LIB_PATH64
     fi
 
     if [ $2 -eq 32 ]; then
         SERVER_PATH=$SERVER_PATH32
+        LD_LIB_PATH_SERVER=$LD_LIB_PATH32
     else
         SERVER_PATH=$SERVER_PATH64
+        LD_LIB_PATH_SERVER=$LD_LIB_PATH64
     fi
 
     echo "Running $1-bit client with $2-bit servers"
-    $SERVER_PATH &
+    echo "$LD_LIB_PATH_SERVER=$LD_LIB_PATH_SERVER"
+    LD_LIBRARY_PATH=$LD_LIB_PATH_SERVER:$LD_LIBRARY_PATH $SERVER_PATH &
     SERVER_PID=$!
-    $CLIENT_PATH
+    LD_LIBRARY_PATH=$LD_LIB_PATH_CLIENT:$LD_LIBRARY_PATH $CLIENT_PATH
     if [ $? -ne 0 ]; then
         failed_test_cases+=("$1-bit client with $2-bit servers")
     fi
@@ -56,7 +63,7 @@
     fi
 }
 
-#usage: run_all_tests server_path32 server_path64 client_path32 client_path64 test_name [-h/-c config]
+#usage: run_all_tests server_path32 server_path64 client_path32 client_path64 test_name [-h/-c config/-x lib32/-y ldlib64]
 function run_all_tests() {
     SERVER_PATH32=$1
     SERVER_PATH64=$2
@@ -66,30 +73,7 @@
     check_env
     shift 5
 
-    if [ $# -eq 0 ]; then
-        for i in 32 64
-            do
-                for j in 32 64
-                    do
-                        run_test $i $j
-                    done
-            done
-        count_failed_tests=${#failed_test_cases[@]}
-        echo "*********************************************************"
-        echo "    $TEST_NAME Final Summary:\n"
-        if [ $count_failed_tests -gt 0 ]; then
-            echo "    $TEST_NAME failed for the following cases:\n\t"
-            for each in "${failed_test_cases[@]}"
-                do
-                    echo "\t$each"
-                done
-        else
-            echo "    $TEST_NAME passed for all cases!"
-        fi
-        echo "*********************************************************"
-    fi
-
-    while getopts hc: opt;
+    while getopts hc:x:y: opt;
     do
         case $opt in
             h)
@@ -115,6 +99,13 @@
                         exit 1
                         ;;
                 esac
+                exit 0
+                ;;
+            x)
+                LD_LIB_PATH32=$OPTARG
+                ;;
+            y)
+                LD_LIB_PATH64=$OPTARG
                 ;;
             *)
                 echo "Error: unknown param \"$opt\""
@@ -123,5 +114,27 @@
                 ;;
         esac
     done
+
+    for i in 32 64
+        do
+            for j in 32 64
+                do
+                    run_test $i $j
+                done
+        done
+    count_failed_tests=${#failed_test_cases[@]}
+    echo "*********************************************************"
+    echo "    $TEST_NAME Final Summary:\n"
+    if [ $count_failed_tests -gt 0 ]; then
+        echo "    $TEST_NAME failed for the following cases:\n\t"
+        for each in "${failed_test_cases[@]}"
+            do
+                echo "\t$each"
+            done
+    else
+        echo "    $TEST_NAME passed for all cases!"
+    fi
+    echo "*********************************************************"
+
     exit ${#failed_test_cases[@]}
 }