Merge "Handle radio API in low version VTS for high version service" into pi-dev
diff --git a/radio/1.0/vts/functional/Android.bp b/radio/1.0/vts/functional/Android.bp
index afbb1c4..b959670 100644
--- a/radio/1.0/vts/functional/Android.bp
+++ b/radio/1.0/vts/functional/Android.bp
@@ -31,6 +31,8 @@
            "VtsHalRadioV1_0TargetTest.cpp",
            "vts_test_util.cpp"],
     static_libs: [
+        "android.hardware.radio@1.2",
+        "android.hardware.radio@1.1",
         "android.hardware.radio@1.0",
     ],
 }
@@ -44,6 +46,8 @@
            "VtsHalSapV1_0TargetTest.cpp",
            "vts_test_util.cpp"],
     static_libs: [
+        "android.hardware.radio@1.2",
+        "android.hardware.radio@1.1",
         "android.hardware.radio@1.0",
     ],
 }
@@ -55,6 +59,8 @@
         "vts_test_util.cpp"
     ],
     shared_libs: [
+        "android.hardware.radio@1.2",
+        "android.hardware.radio@1.1",
         "android.hardware.radio@1.0",
     ],
 }
diff --git a/radio/1.0/vts/functional/radio_hidl_hal_misc.cpp b/radio/1.0/vts/functional/radio_hidl_hal_misc.cpp
index bc03cf1..5a5813d 100644
--- a/radio/1.0/vts/functional/radio_hidl_hal_misc.cpp
+++ b/radio/1.0/vts/functional/radio_hidl_hal_misc.cpp
@@ -36,15 +36,19 @@
  * Test IRadio.getVoiceRegistrationState() for the response returned.
  */
 TEST_F(RadioHidlTest, getVoiceRegistrationState) {
-    serial = GetRandomSerialNumber();
+    // The IRadio/IRadioResponse pair of this function is upgraded in 1.2.
+    // For radio version < 1.2, skip to test this function.
+    if (versionIRadio < v1_2) {
+        serial = GetRandomSerialNumber();
 
-    radio->getVoiceRegistrationState(serial);
-    EXPECT_EQ(std::cv_status::no_timeout, wait());
-    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
-    EXPECT_EQ(serial, radioRsp->rspInfo.serial);
+        radio->getVoiceRegistrationState(serial);
+        EXPECT_EQ(std::cv_status::no_timeout, wait());
+        EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp->rspInfo.type);
+        EXPECT_EQ(serial, radioRsp->rspInfo.serial);
 
-    if (cardStatus.cardState == CardState::ABSENT) {
-        EXPECT_EQ(RadioError::NONE, radioRsp->rspInfo.error);
+        if (cardStatus.cardState == CardState::ABSENT) {
+            EXPECT_EQ(RadioError::NONE, radioRsp->rspInfo.error);
+        }
     }
 }
 
diff --git a/radio/1.0/vts/functional/radio_hidl_hal_test.cpp b/radio/1.0/vts/functional/radio_hidl_hal_test.cpp
index 96719d6..fec66ca 100644
--- a/radio/1.0/vts/functional/radio_hidl_hal_test.cpp
+++ b/radio/1.0/vts/functional/radio_hidl_hal_test.cpp
@@ -25,6 +25,10 @@
             RadioHidlEnvironment::Instance()->getServiceName<IRadio>(
                 hidl_string(RADIO_SERVICE_NAME)));
     }
+
+    versionIRadio = getIRadioVersion(radio);
+    ASSERT_FALSE(unknown == versionIRadio);
+
     ASSERT_NE(nullptr, radio.get());
 
     radioRsp = new (std::nothrow) RadioResponse(*this);
diff --git a/radio/1.0/vts/functional/radio_hidl_hal_utils_v1_0.h b/radio/1.0/vts/functional/radio_hidl_hal_utils_v1_0.h
index f5ce072..edbeb7a 100644
--- a/radio/1.0/vts/functional/radio_hidl_hal_utils_v1_0.h
+++ b/radio/1.0/vts/functional/radio_hidl_hal_utils_v1_0.h
@@ -33,6 +33,7 @@
 
 using ::android::hardware::hidl_string;
 using ::android::hardware::hidl_vec;
+using ::android::hardware::hidl_version;
 using ::android::hardware::Return;
 using ::android::hardware::Void;
 using ::android::sp;
@@ -536,6 +537,9 @@
     /* Serial number for radio request */
     int serial;
 
+    /* Version of radio service */
+    hidl_version versionIRadio{0, 0};
+
     /* Update Sim Card Status */
     void updateSimCardStatus();
 
diff --git a/radio/1.0/vts/functional/vts_test_util.cpp b/radio/1.0/vts/functional/vts_test_util.cpp
index 7d15f35..20ec99e 100644
--- a/radio/1.0/vts/functional/vts_test_util.cpp
+++ b/radio/1.0/vts/functional/vts_test_util.cpp
@@ -54,3 +54,21 @@
     }
     return testing::AssertionFailure() << "SapError:" + toString(err) + " is returned";
 }
+
+hidl_version getIRadioVersion(sp<::android::hardware::radio::V1_0::IRadio> radio) {
+    if (::android::hardware::radio::V1_2::IRadio::castFrom(radio).withDefault(nullptr) != nullptr) {
+        ALOGI("Radio service version: 1.2");
+        return v1_2;
+    } else if (::android::hardware::radio::V1_1::IRadio::castFrom(radio).withDefault(nullptr) !=
+               nullptr) {
+        ALOGI("Radio service version: 1.1");
+        return v1_1;
+    } else if (::android::hardware::radio::V1_0::IRadio::castFrom(radio).withDefault(nullptr) !=
+               nullptr) {
+        ALOGI("Radio service version: 1.0");
+        return v1_0;
+    } else {
+        ALOGI("Radio service version: unknown");
+        return unknown;
+    }
+}
\ No newline at end of file
diff --git a/radio/1.0/vts/functional/vts_test_util.h b/radio/1.0/vts/functional/vts_test_util.h
index 826f0de..36ca18f 100644
--- a/radio/1.0/vts/functional/vts_test_util.h
+++ b/radio/1.0/vts/functional/vts_test_util.h
@@ -14,12 +14,20 @@
  * limitations under the License.
  */
 
+#ifndef VTS_TEST_UTIL_H
+#define VTS_TEST_UTIL_H 1
+
 #include <android-base/logging.h>
 
 #include <VtsHalHidlTargetTestBase.h>
 
+#include <android/hardware/radio/1.0/IRadio.h>
 #include <android/hardware/radio/1.0/types.h>
+#include <android/hardware/radio/1.1/IRadio.h>
+#include <android/hardware/radio/1.2/IRadio.h>
 
+using ::android::sp;
+using ::android::hardware::hidl_version;
 using ::android::hardware::radio::V1_0::RadioError;
 using ::android::hardware::radio::V1_0::SapResultCode;
 using namespace std;
@@ -33,6 +41,14 @@
 };
 
 /*
+ * Radio hidl version parameters.
+ */
+const hidl_version v1_0(1, 0);
+const hidl_version v1_1(1, 1);
+const hidl_version v1_2(1, 2);
+const hidl_version unknown(0, 0);
+
+/*
  * Generate random serial number for radio test
  */
 int GetRandomSerialNumber();
@@ -48,3 +64,10 @@
  * vendor/devices implementations.
  */
 ::testing::AssertionResult CheckAnyOfErrors(SapResultCode err, std::vector<SapResultCode> errors);
+
+/*
+ * Get the radio service version.
+ */
+hidl_version getIRadioVersion(sp<::android::hardware::radio::V1_0::IRadio> radio);
+
+#endif /*VTS_TEST_UTIL_H*/
\ No newline at end of file
diff --git a/radio/1.1/vts/functional/Android.bp b/radio/1.1/vts/functional/Android.bp
index e7195ee..9d35796 100644
--- a/radio/1.1/vts/functional/Android.bp
+++ b/radio/1.1/vts/functional/Android.bp
@@ -24,6 +24,7 @@
            "VtsHalRadioV1_1TargetTest.cpp"],
     static_libs: [
         "RadioVtsTestUtilBase",
+        "android.hardware.radio@1.2",
         "android.hardware.radio@1.1",
         "android.hardware.radio@1.0",
     ],
diff --git a/radio/1.1/vts/functional/radio_hidl_hal_test.cpp b/radio/1.1/vts/functional/radio_hidl_hal_test.cpp
index 2f657b4..cc6b0e5 100644
--- a/radio/1.1/vts/functional/radio_hidl_hal_test.cpp
+++ b/radio/1.1/vts/functional/radio_hidl_hal_test.cpp
@@ -30,6 +30,10 @@
                 ->getServiceName<::android::hardware::radio::V1_1::IRadio>(
                     hidl_string(RADIO_SERVICE_NAME)));
     }
+
+    versionIRadio = getIRadioVersion(radio_v1_1);
+    ASSERT_FALSE(unknown == versionIRadio);
+
     ASSERT_NE(nullptr, radio_v1_1.get());
 
     radioRsp_v1_1 = new (std::nothrow) RadioResponse_v1_1(*this);
diff --git a/radio/1.1/vts/functional/radio_hidl_hal_utils_v1_1.h b/radio/1.1/vts/functional/radio_hidl_hal_utils_v1_1.h
index 925f4fc..6125442 100644
--- a/radio/1.1/vts/functional/radio_hidl_hal_utils_v1_1.h
+++ b/radio/1.1/vts/functional/radio_hidl_hal_utils_v1_1.h
@@ -561,6 +561,9 @@
     /* Serial number for radio request */
     int serial;
 
+    /* Version of radio service */
+    hidl_version versionIRadio{0, 0};
+
     /* Update Sim Card Status */
     void updateSimCardStatus();
 
diff --git a/radio/1.2/vts/functional/radio_hidl_hal_test.cpp b/radio/1.2/vts/functional/radio_hidl_hal_test.cpp
index b34f138..7a34d11 100644
--- a/radio/1.2/vts/functional/radio_hidl_hal_test.cpp
+++ b/radio/1.2/vts/functional/radio_hidl_hal_test.cpp
@@ -30,6 +30,10 @@
                 ->getServiceName<::android::hardware::radio::V1_2::IRadio>(
                     hidl_string(RADIO_SERVICE_NAME)));
     }
+
+    versionIRadio = getIRadioVersion(radio_v1_2);
+    ASSERT_FALSE(unknown == versionIRadio);
+
     ASSERT_NE(nullptr, radio_v1_2.get());
 
     radioRsp_v1_2 = new (std::nothrow) RadioResponse_v1_2(*this);
diff --git a/radio/1.2/vts/functional/radio_hidl_hal_utils_v1_2.h b/radio/1.2/vts/functional/radio_hidl_hal_utils_v1_2.h
index 4712202..06be67c 100644
--- a/radio/1.2/vts/functional/radio_hidl_hal_utils_v1_2.h
+++ b/radio/1.2/vts/functional/radio_hidl_hal_utils_v1_2.h
@@ -616,6 +616,9 @@
     /* Serial number for radio request */
     int serial;
 
+    /* Version of radio service */
+    hidl_version versionIRadio{0, 0};
+
     /* Update Sim Card Status */
     void updateSimCardStatus();
 
diff --git a/radio/config/1.0/vts/functional/Android.bp b/radio/config/1.0/vts/functional/Android.bp
index aa8266e..a1243a6 100644
--- a/radio/config/1.0/vts/functional/Android.bp
+++ b/radio/config/1.0/vts/functional/Android.bp
@@ -27,6 +27,9 @@
     static_libs: [
         "RadioVtsTestUtilBase",
         "android.hardware.radio.config@1.0",
+        "android.hardware.radio@1.2",
+        "android.hardware.radio@1.1",
+        "android.hardware.radio@1.0",
     ],
     header_libs: ["radio.util.header@1.0"],
 }