Handle radio API in low version VTS for high version service

There are some request/response pair that could be replaced in
higher-version hal. Radio service need to handle
these request/response pair specific to version number. For example,
e.g. getVoiceRegistrationStateResponse_1_2 replaces
getVoiceRegistrationStateResponse for getVoiceRegistrationState
in 1.2 radio service. We need to add util and update version number
of IRadio service to check the version for testing the correct
behavior.

Bug: 109839239
Test: run vts
Change-Id: I291690e77ea0e6e37fe75219e550f79fa44fb840
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"],
 }