পরিষেবার নাম সচেতন HAL টেস্টিং

Android 9-এ, Vendor Test Suite (VTS) টেস্ট চলছে এমন ডিভাইসের উপর ভিত্তি করে প্রদত্ত HAL ইনস্ট্যান্সের পরিষেবার নাম পাওয়ার সুবিধা অন্তর্ভুক্ত। পরিষেবার নাম সম্পর্কে সচেতন VTS HAL টেস্ট রান করলে ডেভেলপাররা টার্গেট- এবং হোস্ট-সাইড VTS টেস্ট রান, দুটিতেই ভেন্ডর এক্সটেনশন, একাধিক HAL এবং একাধিক HAL ইনস্ট্যান্সের টেস্টিং অটোমেট করতে পারেন।

পরিষেবার নাম সম্পর্কে

HAL পরিষেবার প্রতিটি ইনস্ট্যান্স একটি পরিষেবার নাম দিয়ে নিজেকে রেজিস্টার করে।

Android-এর আগের ভার্সনে, VTS HAL টেস্ট চালানো ডেভেলপারদের getService()-এ টেস্ট ক্লায়েন্টের জন্য সঠিক পরিষেবার নাম সেট করতে হত অথবা নাম খালি রেখে ডিফল্ট পরিষেবার নামে ফিরে যেতে হত। এই পদ্ধতির অসুবিধাগুলির মধ্যে রয়েছে:

  • সঠিক পরিষেবার নাম সেট করার জন্য টেস্ট ডেভেলপারের জ্ঞানের উপর নির্ভরতা।
  • ডিফল্ট হিসেবে একটিমাত্র পরিষেবা ইনস্ট্যান্সের বিরুদ্ধে পরীক্ষা করার মধ্যে সীমাবদ্ধ।
  • পরিষেবার নামের ম্যানুয়াল রক্ষণাবেক্ষণ (যেমন, নাম হার্ড-কোড করা থাকে, পরিষেবার নাম পরিবর্তন হলে তা ম্যানুয়ালি আপডেট করতে হয়।

Android 9-এ, ডেভেলপাররা পরীক্ষা করা ডিভাইসের উপর ভিত্তি করে প্রদত্ত HAL ইনস্ট্যান্সের জন্য পরিষেবার নাম অটোমেটিক পেতে পারেন। এই পদ্ধতির সুবিধার মধ্যে রয়েছে টেস্টিংয়ের জন্য সহায়তা:

  • ভেন্ডর HAL এক্সটেনশন। যেমন, কোনও ভেন্ডরের কাছে camera.provider HAL-এর ইমপ্লিমেন্টেশন থাকলে, সেটি কাস্টমাইজ করা পরিষেবার নাম সহ ভেন্ডর ডিভাইসে রান করে। VTS, ভেন্ডর ইনস্ট্যান্স শনাক্ত করতে এবং সেটির বিরুদ্ধে টেস্ট রান করতে পারে।
  • একাধিক HAL ইনস্ট্যান্স। যেমন, যখন graphics.composer HAL-এর দুটি ইনস্ট্যান্স থাকে (একটি "default" পরিষেবা নামের সাথে এবং একটি "vr" পরিষেবা নামের সাথে), VTS দুটি ইনস্ট্যান্সই শনাক্ত করতে পারে এবং সেগুলির প্রত্যেকটির বিরুদ্ধে পরীক্ষা চালাতে পারে।
  • মাল্টি-HAL টেস্টিং। একাধিক HAL-এর সাথে একাধিক ইনস্ট্যান্স পরীক্ষা করার সময় ব্যবহার করা হয়। যেমন, VTS পরীক্ষা চালানোর সময়, এটি যাচাই করে যে কীভাবে KeyMint (আগে Keymaster) ও Gatekeeper HAL একসাথে কাজ করে। VTS সেইসব HAL-এর জন্য পরিষেবা ইনস্ট্যান্সের সবকটি কম্বিনেশন পরীক্ষা করতে পারে।

টার্গেট-সাইড পরীক্ষা

টার্গেট-সাইড টেস্টিংয়ের জন্য পরিষেবার নাম সংক্রান্ত সচেতনতা চালু করতে, Android 9-এ কাস্টমাইজ করা যায় এমন টেস্ট এনভায়রনমেন্ট (VtsHalHidlTargetTestEnvBase) অন্তর্ভুক্ত যা নিম্নলিখিত ইন্টারফেস প্রদান করে:

  • পরীক্ষায় HAL(s) টার্গেট করার জন্য রেজিস্টার করুন।
  • সব রেজিস্টার করা HAL-এর তালিকা তৈরি করুন।
  • VTS ফ্রেমওয়ার্কের দেওয়া রেজিস্টার করা HAL-এর জন্য পরিষেবার নাম পান।

এছাড়াও, VTS ফ্রেমওয়ার্ক এগুলির জন্য রানটাইম সহায়তা প্রদান করে:

  • সব রেজিস্টার করা টেস্ট HAL(হার্ডওয়্যার অ্যাবস্ট্রাকশন লেয়ার) পেতে টেস্ট বাইনারি প্রি-প্রসেস করা।
  • চালু থাকা সব পরিষেবার ইনস্ট্যান্স শনাক্ত করা এবং প্রতিটি ইনস্ট্যান্সের জন্য পরিষেবার নাম পাওয়া (vendor/manifest.xml-এর উপর ভিত্তি করে পাওয়া)।
  • সমস্ত ইনস্ট্যান্সের কম্বিনেশন গণনা করা হচ্ছে (একাধিক HAL টেস্টিংয়ের জন্য)।
  • প্রতিটি পরিষেবা ইনস্ট্যান্সের (কম্বিনেশন) জন্য নতুন টেস্ট তৈরি করা।

উদাহরণ:

টার্গেট-সাইড টেস্টিংয়ের জন্য রানটাইম সহায়তা

ছবি ১. টার্গেট-সাইড টেস্টিংয়ের জন্য VTS ফ্রেমওয়ার্ক রানটাইম সাপোর্ট

টার্গেট-সাইড টেস্টের জন্য পরিষেবার নাম সেট-আপ করা

টার্গেট-সাইড পরিষেবা নামের ব্যাপারে সচেতন টেস্টিংয়ের জন্য আপনার টেস্ট এনভায়রনমেন্ট সেট-আপ করতে:

  1. testEnvironment-এর ভিত্তিতে VtsHalHidlTargetTestEnvBase নির্ধারণ করুন এবং টেস্ট HAL রেজিস্টার করুন:
    #include <VtsHalHidlTargetTestEnvBase.h>
    class testEnvironment  : public::testing::VtsHalHidlTargetTestEnvBase {
          virtual void registerTestServices() override {
        registerTestService<IFoo>();
          }
    };
  2. পরিষেবার নাম পাস করতে টেস্ট এনভায়রনমেন্টের মাধ্যমে প্রদান করা getServiceName() ব্যবহার করুন:
    ::testing::VtsHalHidlTargetTestBase::getService<IFoo>(testEnv->getServiceName<IFoo>("default"));
    // "default" is the default service name you want to use.
  3. 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 প্যারামিটারাইজড পরীক্ষার মতো) বিরুদ্ধে একই টেস্ট স্ক্রিপ্ট একাধিকবার রান করাতে হোস্ট সাইড টেমপ্লেট ব্যবহার করতে পারেন।

হোস্ট-সাইড টেস্টিংয়ের জন্য রানটাইম সহায়তা

ছবি ২. হোস্ট-সাইড টেস্টিংয়ের জন্য VTS ফ্রেমওয়ার্ক রানটাইম সাপোর্ট
  • hal test স্ক্রিপ্ট, পরীক্ষায় টার্গেট করা HAL পরিষেবা নির্দিষ্ট করে।
  • hal_hidl_host_test param_test-এর সাবক্লাস টেস্ট স্ক্রিপ্ট থেকে রেজিস্টার করা টেস্টিং HAL নেয়, টেস্টিং HAL-এর জন্য সংশ্লিষ্ট পরিষেবার নাম(গুলি) শনাক্ত করে, তারপর টেস্ট প্যারামিটার হিসেবে পরিষেবার নামের কম্বিনেশন (মাল্টি-HAL টেস্টিংয়ের জন্য) তৈরি করে। এছাড়াও, এটি একটি পদ্ধতি getHalServiceName() প্রদান করে যা বর্তমান টেস্ট কেসে পাস করা প্যারামিটার অনুসারে সংশ্লিষ্ট পরিষেবার নাম রিটার্ন করে।
  • param_test টেমপ্লেট প্যারামিটারের তালিকা গ্রহণ করার লজিককে সমর্থন করে এবং প্রতিটি প্যারামিটারের জন্য প্রদত্ত সমস্ত টেস্ট কেস রান করে। অর্থাৎ, প্রতিটি টেস্ট কেসের জন্য এটি N সংখ্যক নতুন প্যারামিটারাইজড টেস্ট কেস (N = প্যারামিটারের সাইজ) তৈরি করে, যার প্রত্যেকটিতে একটি করে প্রদত্ত প্যারামিটার থাকে।

হোস্ট-সাইড টেস্টে পরিষেবার নাম সেট-আপ করা

হোস্ট-সাইড পরিষেবার নাম সম্পর্কে সচেতন টেস্টিংয়ের জন্য আপনার টেস্ট এনভায়রনমেন্ট সেট-আপ করতে:

  1. টেস্ট স্ক্রিপ্টে টার্গেট HAL পরিষেবা নির্দিষ্ট করুন:
    TEST_HAL_SERVICES = { "android.hardware.foo@1.0::IFoo" }
  2. getHalServiceName()-এ কল করে init 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 রেজিস্টার করা

Android-এর আগের ভার্সনে, VTS, <precondition-lshal>-এ কনফিগার করা বিকল্প ব্যবহার করে টেস্টিং HAL শনাক্ত করত AndroidTest.xml। এই পদ্ধতিটি বজায় রাখা কঠিন ছিল (কারণ এটি ডেভেলপারদের উপর নির্ভর করত যাতে তারা সঠিকভাবে পরীক্ষা কনফিগার করতে এবং সেই অনুযায়ী কনফিগারেশন আপডেট করতে পারে) এবং এটি সঠিক ছিল না (কারণ এতে শুধুমাত্র প্যাকেজ ও ভার্সন সংক্রান্ত তথ্য থাকত, ইন্টারফেস সংক্রান্ত তথ্য থাকত না)।

Android 9-এ, VTS, পরিষেবার নাম সচেতনতা ব্যবহার করে টেস্টিং HAL শনাক্ত করে। এছাড়াও, রেজিস্টার করা টেস্টিং HAL এইসব কাজে লাগে:

  • পূর্বশর্ত চেক করা। HAL টেস্ট রান করার আগে, VTS নিশ্চিত করতে পারে যে টার্গেট ডিভাইসে টেস্টিং HAL উপলভ্য আছে এবং এটি না থাকলে টেস্ট এড়িয়ে যেতে পারে (VTS টেস্টেবিলিটি চেক দেখুন)।
  • কভারেজ পরিমাপ। VTS, ক্রস-প্রসেস কোড কভারেজ পরিমাপ করার জন্য, এটি যে টেস্টিং HAL পরিষেবা পরিমাপ করতে চায় (অর্থাৎ, hal পরিষেবা প্রসেসের কভারেজ ফ্ল্যাশ করা) সেটির ব্যাপারে জ্ঞান ব্যবহার করে।