অ্যান্ড্রয়েড ৯-এ এমন একটি ফিচার অন্তর্ভুক্ত করা হয়েছে, যার মাধ্যমে ভেন্ডর টেস্ট স্যুট (VTS) টেস্ট যে ডিভাইসে চলছে, তার উপর ভিত্তি করে একটি নির্দিষ্ট HAL ইনস্ট্যান্সের সার্ভিস নেম পাওয়া যায়। সার্ভিস নেম-সচেতন VTS HAL টেস্ট চালানোর ফলে ডেভেলপাররা টার্গেট-সাইড এবং হোস্ট-সাইড উভয় VTS টেস্ট রানেই ভেন্ডর এক্সটেনশন, একাধিক HAL এবং একাধিক HAL ইনস্ট্যান্সের টেস্টিং স্বয়ংক্রিয় করতে পারেন।
পরিষেবার নাম সম্পর্কে
চলমান HAL সার্ভিসের প্রতিটি ইনস্ট্যান্স একটি সার্ভিস নাম দিয়ে নিজেকে রেজিস্টার করে।
অ্যান্ড্রয়েডের পূর্ববর্তী সংস্করণগুলিতে, VTS HAL টেস্ট চালানো ডেভেলপারদের getService() ফাংশনে টেস্ট ক্লায়েন্টের জন্য সঠিক সার্ভিস নামটি সেট করতে হতো, অথবা নামটি খালি রেখে ডিফল্ট সার্ভিস নামটি ব্যবহার করতে হতো। এই পদ্ধতির অসুবিধাগুলোর মধ্যে ছিল:
- সঠিক সার্ভিসের নাম নির্ধারণের জন্য টেস্ট ডেভেলপারের জ্ঞানের উপর নির্ভরতা।
- ডিফল্টরূপে একটিমাত্র সার্ভিস ইনস্ট্যান্সের বিপরীতে পরীক্ষা সীমাবদ্ধ।
- সার্ভিসের নাম ম্যানুয়ালি রক্ষণাবেক্ষণ করতে হয় (অর্থাৎ, যেহেতু নামগুলো হার্ড-কোড করা থাকে, তাই সার্ভিসের নাম পরিবর্তন হলে তা ম্যানুয়ালি আপডেট করতে হয়)।
অ্যান্ড্রয়েড ৯-এ, ডেভেলপাররা পরীক্ষাধীন ডিভাইসের উপর ভিত্তি করে একটি নির্দিষ্ট HAL ইনস্ট্যান্সের সার্ভিস নেম স্বয়ংক্রিয়ভাবে পেতে পারেন। এই পদ্ধতির সুবিধাগুলোর মধ্যে পরীক্ষার জন্য সমর্থন অন্তর্ভুক্ত:
- ভেন্ডর HAL এক্সটেনশন । উদাহরণস্বরূপ, যখন কোনো ভেন্ডরের camera.provider HAL-এর এমন একটি ইমপ্লিমেন্টেশন থাকে যা একটি কাস্টমাইজড সার্ভিস নেম সহ ভেন্ডর ডিভাইসগুলিতে চলে, তখন VTS সেই ভেন্ডর ইনস্ট্যান্সটিকে শনাক্ত করতে এবং সেটির বিপরীতে পরীক্ষাটি চালাতে পারে।
- একাধিক HAL ইনস্ট্যান্স । উদাহরণস্বরূপ, যখন
graphics.composerHAL-এর দুটি ইনস্ট্যান্স থাকে (একটি 'default' সার্ভিস নেম সহ এবং অন্যটি 'vr' সার্ভিস নেম সহ), তখন VTS উভয় ইনস্ট্যান্সকেই শনাক্ত করতে পারে এবং সেগুলোর প্রতিটির বিপরীতে পরীক্ষাটি চালাতে পারে। - মাল্টি-এইচএএল টেস্টিং । একাধিক ইনস্ট্যান্সের সাথে একাধিক এইচএএল পরীক্ষা করার সময় এটি ব্যবহৃত হয়। উদাহরণস্বরূপ, KeyMint (পূর্বে Keymaster) এবং Gatekeeper এইচএএল-গুলো কীভাবে একসাথে কাজ করে তা যাচাই করার জন্য VTS পরীক্ষাটি চালানোর সময়, VTS ঐ এইচএএল-গুলোর জন্য সার্ভিস ইনস্ট্যান্সের সমস্ত সম্ভাব্য সংমিশ্রণ পরীক্ষা করতে পারে।
লক্ষ্য-পার্শ্ব পরীক্ষা
টার্গেট-সাইড টেস্টিংয়ের জন্য সার্ভিস নেম অ্যাওয়ারনেস সক্ষম করতে, অ্যান্ড্রয়েড ৯-এ একটি কাস্টমাইজযোগ্য টেস্ট এনভায়রনমেন্ট ( VtsHalHidlTargetTestEnvBase ) অন্তর্ভুক্ত রয়েছে যা নিম্নলিখিত ইন্টারফেসগুলো প্রদান করে:
- পরীক্ষায় HAL(গুলি) লক্ষ্য করে নিবন্ধন করুন।
- সকল নিবন্ধিত HAL(গুলি) তালিকাভুক্ত করুন।
- VTS ফ্রেমওয়ার্ক দ্বারা প্রদত্ত নিবন্ধিত HAL(গুলি)-এর জন্য পরিষেবার নাম(গুলি) পান।
এছাড়াও, VTS ফ্রেমওয়ার্ক নিম্নলিখিত বিষয়গুলির জন্য রানটাইম সমর্থন প্রদান করে:
- সমস্ত নিবন্ধিত টেস্ট HAL(গুলি) পাওয়ার জন্য টেস্ট বাইনারিটি প্রি-প্রসেস করা হচ্ছে।
- চলমান সমস্ত সার্ভিস ইনস্ট্যান্স শনাক্ত করা এবং প্রতিটি ইনস্ট্যান্সের সার্ভিসের নাম সংগ্রহ করা (যা
vendor/manifest.xmlথেকে নেওয়া হয়)। - সমস্ত ইনস্ট্যান্স সংমিশ্রণ গণনা করা হচ্ছে (একাধিক HAL টেস্টিং সমর্থন করার জন্য)।
- প্রতিটি সার্ভিস ইনস্ট্যান্স (কম্বিনেশন)-এর জন্য একটি নতুন টেস্ট তৈরি করা হচ্ছে।
উদাহরণ:

সার্ভিস নেম সচেতন টার্গেট-সাইড টেস্ট সেট আপ করুন
টার্গেট-সাইড সার্ভিস নেম অ্যাওয়্যার টেস্টিং-এর জন্য আপনার টেস্ট এনভায়রনমেন্ট সেটআপ করতে:
-
VtsHalHidlTargetTestEnvBaseউপর ভিত্তি করে একটিtestEnvironmentসংজ্ঞায়িত করুন এবং test HAL-গুলি নিবন্ধন করুন:#include <VtsHalHidlTargetTestEnvBase.h> class testEnvironment : public::testing::VtsHalHidlTargetTestEnvBase { virtual void registerTestServices() override { registerTestService<IFoo>(); } };
- সার্ভিসের নাম পাস করার জন্য টেস্ট এনভায়রনমেন্ট থেকে প্রাপ্ত
getServiceName()ব্যবহার করুন:::testing::VtsHalHidlTargetTestBase::getService<IFoo>(testEnv->getServiceName<IFoo>("default")); // "default" is the default service name you want to use.
main()এবংinitTestটেস্ট এনভায়রনমেন্ট রেজিস্টার করুন:int main(int argc, char** argv) { testEnv = new testEnvironment(); ::testing::AddGlobalTestEnvironment(testEnv); ::testing::InitGoogleTest(&argc, argv); testEnv->init(argc, argv); return RUN_ALL_TESTS(); }
অতিরিক্ত উদাহরণের জন্য VtsHalCameraProviderV2_4TargetTest.cpp ফাইলটি দেখুন।
VTS হোস্ট-সাইড পরীক্ষা
VTS হোস্ট-সাইড টেস্টগুলো টার্গেট ডিভাইসে টেস্ট বাইনারি চালানোর পরিবর্তে হোস্ট সাইডে টেস্ট স্ক্রিপ্ট চালায়। এই টেস্টগুলোর জন্য সার্ভিস নেম অ্যাওয়ারনেস সক্ষম করতে, আপনি হোস্ট সাইড টেমপ্লেট ব্যবহার করে বিভিন্ন প্যারামিটারের বিপরীতে একই টেস্ট স্ক্রিপ্ট একাধিকবার চালাতে পারেন (gtest প্যারামিটারাইজড টেস্টের মতো)।

- HAL টেস্ট স্ক্রিপ্টটি পরীক্ষার জন্য লক্ষ্যবস্তু HAL পরিষেবা(গুলি) নির্দিষ্ট করে।
-
hal_hidl_host_test(param_testএর একটি সাবক্লাস) টেস্ট স্ক্রিপ্ট থেকে নিবন্ধিত টেস্টিং HAL(গুলি) গ্রহণ করে, টেস্টিং HAL-এর জন্য সংশ্লিষ্ট পরিষেবার নাম(গুলি) শনাক্ত করে, এবং তারপর টেস্ট প্যারামিটার হিসাবে পরিষেবার নামের সংমিশ্রণ (একাধিক HAL টেস্টিং-এর জন্য) তৈরি করে। এটিgetHalServiceName()নামে একটি মেথডও প্রদান করে, যা বর্তমান টেস্ট কেসে পাস করা প্যারামিটার অনুযায়ী সংশ্লিষ্ট পরিষেবার নাম ফেরত দেয়। - `param_test` টেমপ্লেটটি প্যারামিটারের একটি তালিকা গ্রহণ করার এবং প্রতিটি প্যারামিটারের বিপরীতে প্রদত্ত সমস্ত টেস্ট কেস চালানোর লজিক সমর্থন করে। অর্থাৎ, প্রতিটি টেস্ট কেসের জন্য এটি একটি নির্দিষ্ট প্যারামিটার ব্যবহার করে N-সংখ্যক নতুন প্যারামিটারযুক্ত টেস্ট কেস (N = প্যারামিটারের সংখ্যা) তৈরি করে।
সার্ভিসের নাম সম্পর্কে সচেতন হোস্ট-সাইড পরীক্ষা সেট আপ করুন
হোস্ট-সাইড সার্ভিস নেম অ্যাওয়্যার টেস্টিং-এর জন্য আপনার টেস্ট এনভায়রনমেন্ট সেটআপ করতে:
- টেস্ট স্ক্রিপ্টে টার্গেট HAL সার্ভিসটি নির্দিষ্ট করুন:
TEST_HAL_SERVICES = { "android.hardware.foo@1.0::IFoo" }
getHalServiceName()কল করুন এবং hal ইনিট করার জন্য নামটি পাস করুন:self.dut.hal.InitHidlHal( target_type='foo', target_basepaths=self.dut.libPaths, target_version=1.0, target_package='android.hardware.foo', target_component_name='IFoo', hw_binder_service_name =self.getHalServiceName("android.hardware.foo@1.0::IFoo"), bits=int(self.abi_bitness))
অতিরিক্ত উদাহরণের জন্য VtsHalMediaOmxStoreV1_0HostTest.py ফাইলটি দেখুন।
পরীক্ষার HAL নিবন্ধন করুন
অ্যান্ড্রয়েডের পূর্ববর্তী সংস্করণগুলিতে, VTS, AndroidTest.xml এ কনফিগার করা <precondition-lshal> অপশনটি ব্যবহার করে টেস্টিং HAL শনাক্ত করত। এই পদ্ধতিটি রক্ষণাবেক্ষণ করা কঠিন ছিল (কারণ এটি সঠিকভাবে টেস্ট কনফিগার করা এবং সেই অনুযায়ী কনফিগারেশন আপডেট করার জন্য ডেভেলপারদের উপর নির্ভরশীল ছিল) এবং নির্ভুল ছিল না (কারণ এতে শুধুমাত্র প্যাকেজ ও ভার্সনের তথ্য থাকত, ইন্টারফেসের তথ্য থাকত না)।
অ্যান্ড্রয়েড ৯-এ, VTS সার্ভিস নেম অ্যাওয়ারনেস ব্যবহার করে টেস্টিং HAL শনাক্ত করে। নিবন্ধিত টেস্টিং HAL-গুলো নিম্নলিখিত ক্ষেত্রেও উপযোগী:
- পূর্বশর্ত যাচাই । একটি HAL পরীক্ষা চালানোর আগে, VTS নিশ্চিত করতে পারে যে পরীক্ষাধীন HAL-টি টার্গেট ডিভাইসে উপলব্ধ আছে কিনা এবং উপলব্ধ না থাকলে পরীক্ষাগুলো এড়িয়ে যেতে পারে ( VTS পরীক্ষাযোগ্যতা যাচাই দেখুন)।
- কভারেজ পরিমাপ । VTS যে টেস্টিং HAL সার্ভিসগুলো পরিমাপ করতে চায়, সেগুলোর তথ্য ব্যবহার করে ক্রস-প্রসেস কোড কভারেজ পরিমাপ সমর্থন করে (যেমন, hal সার্ভিস প্রসেসের কভারেজ ফ্লাশ করার জন্য)।