অ্যান্ড্রয়েড ৯-এ একটি ভেন্ডর টেস্ট স্যুট (VTS) পরিকাঠামো অন্তর্ভুক্ত রয়েছে, যা AOSP জেনেরিক সিস্টেম ইমেজ (GSI) চালিত পার্টনার ডিভাইসগুলিতে VTS, CTS বা অন্যান্য টেস্টের স্বয়ংক্রিয় পরীক্ষার জন্য ব্যবহৃত হয়। পূর্বে, এই টেস্টগুলি চালানো একটি সম্পূর্ণ ম্যানুয়াল প্রক্রিয়া ছিল; নতুন VTS টেস্ট পরিকাঠামোটি একাধিক ডিভাইসে দিনে একাধিকবার স্বয়ংক্রিয় পরীক্ষা সমর্থন করার জন্য ডিজাইন করা হয়েছে।
স্থাপত্য
VTS স্বয়ংক্রিয় টেস্টিং পরিকাঠামো নিম্নলিখিত স্থাপত্য ব্যবহার করে:

যখন কোনো পরীক্ষা শুরু করা হয়, তখন VTS স্বয়ংক্রিয় টেস্টিং পরিকাঠামো নিম্নলিখিত কাজগুলো সম্পাদন করে:
- বিভিন্ন অবস্থান থেকে বিল্ড আর্টিফ্যাক্ট এবং টেস্ট রিসোর্স সংগ্রহ করে:
- পার্টনার অ্যান্ড্রয়েড বিল্ড (PAB) । GSI, VTS ফ্রেমওয়ার্ক এবং আরও কিছু বিল্ডের জন্য।
- স্থানীয় ফাইলসিস্টেম, গুগল ক্লাউড স্টোরেজ, অথবা অন্য কোনো বিক্রেতা-নির্দিষ্ট বিল্ড সিস্টেম । যেসব পার্টনার গুগলের ক্লাউডে বিল্ড সংরক্ষণ করেন না, তাদের জন্য।
- ফ্ল্যাশগুলো সংযুক্ত ডিভাইস(গুলো)তে (ডিভাইস থেকে) আর্টিফ্যাক্ট এবং (AOSP থেকে) GSI তৈরি করে।
- স্থানীয় ট্রেডফেড অথবা ক্লাউডে থাকা ট্রেডফেড ব্যবহার করে ভিটিএস টেস্টগুলো চালানো হয়।
- VTS ড্যাশবোর্ডে পরীক্ষার ফলাফল রিপোর্ট করে।
এই প্রক্রিয়াটি VTS হোস্ট কন্ট্রোলার (HC) দ্বারা সমন্বিত হয়, যা ল্যাবের একটি মেশিন এবং পরীক্ষাধীন সমস্ত সংযুক্ত ডিভাইসের আচরণ পরিচালনা করে। HC সর্বশেষ বিল্ডগুলি সংগ্রহ করা, সেগুলিকে ডিভাইসগুলিতে ফ্ল্যাশ করা এবং পরীক্ষাগুলি চালু করার (স্থানীয়ভাবে বা কমান্ডারের মাধ্যমে) জন্য দায়ী। এটি একটি ক্লাউড শিডিউলারের সাথেও যোগাযোগ করে এবং শিডিউলার ও HC-তে চলমান ট্রেডফেড ইনস্ট্যান্স (বা অন্য কোনো হারনেস)-এর মধ্যে ট্র্যাফিক পরিচালনা করে। হোস্ট কন্ট্রোলার সম্পর্কে বিস্তারিত জানতে, হোস্ট কন্ট্রোলার আর্কিটেকচার দেখুন।
সম্পদ সরবরাহকারী
স্বয়ংক্রিয় টেস্টিংয়ের জন্য সিস্টেম বিল্ড, টেস্ট ফাইল এবং ভিটিএস আর্টিফ্যাক্টের মতো রিসোর্সের প্রয়োজন হয়। যদিও সোর্স থেকে এগুলো বিল্ড করা সম্ভব, তবে নিয়মিতভাবে টিপ-অফ-ট্রি থেকে এগুলো বিল্ড করে ডাউনলোডের জন্য আর্টিফ্যাক্টগুলো পোস্ট করা সহজতর।
অংশীদাররা নিম্নলিখিত স্থানগুলি ব্যবহার করে অটোমেশন রিসোর্স অ্যাক্সেস করতে পারেন:
- পার্টনার অ্যান্ড্রয়েড বিল্ড । প্রোগ্রাম্যাটিক অ্যাক্সেস অ্যাকাউন্ট-ভিত্তিক প্রদান করা হয়।
- স্থানীয় ফাইলসিস্টেম (বা অনুরূপ)। যেসব পার্টনার পার্টনার অ্যান্ড্রয়েড বিল্ড ব্যবহার করেন না, তাদের জন্য।
পরবর্তীতে ডিভাইসগুলো ফ্ল্যাশ করার জন্য, রিসোর্সগুলোর মধ্যে উভয় অপশনের জন্যই বিল্ড প্রোভাইডার অন্তর্ভুক্ত রয়েছে, যা একটিমাত্র build_provider.py থেকে এক্সটেন্ড করা হয় এবং এই ফাইলটি বিল্ডগুলোকে স্থানীয় টেম্পোরারি ডিরেক্টরিতে সংরক্ষণ করে।
পার্টনার অ্যান্ড্রয়েড বিল্ড
অ্যান্ড্রয়েড ৮.১ এবং এর পূর্ববর্তী সংস্করণগুলিতে, অ্যান্ড্রয়েড পার্টনারদের পার্টনার অ্যান্ড্রয়েড বিল্ড ওয়েবসাইটে ( https://partner.android.com/build ) গিয়ে তাদের অ্যাকাউন্টে প্রবেশ করতে হতো এবং ইউজার ইন্টারফেসের মাধ্যমে সর্বশেষ সিস্টেম ইমেজগুলি সংগ্রহ করতে হতো। পার্টনারদের এই ধীর এবং শ্রমসাধ্য প্রক্রিয়াটি এড়াতে সাহায্য করার জন্য, অ্যান্ড্রয়েড ৯-এ উপযুক্ত ক্রেডেনশিয়াল প্রদান করা হলে PAB থেকে এই রিসোর্সগুলি স্বয়ংক্রিয়ভাবে ডাউনলোড করার সুবিধা অন্তর্ভুক্ত করা হয়েছে।
প্রবেশাধিকার প্রতিষ্ঠা করুন
প্রোগ্রাম্যাটিক অ্যাক্সেস প্রয়োজনীয় RPC-গুলো অ্যাক্সেস করার জন্য Google API-তে OAuth2 ব্যবহার করে। OAuth2 ক্রেডেনশিয়াল তৈরি করার সাধারণ পদ্ধতি অনুযায়ী, পার্টনারকে Google-এর সাথে একটি ক্লায়েন্ট আইডি/সিক্রেট পেয়ার সেট আপ করতে হয়। যখন PartnerAndroidBuildClient প্রথমবারের জন্য সেই সিক্রেটের দিকে নির্দেশ করা হয়, তখন এটি ব্যবহারকারীকে তাদের Google অ্যাকাউন্টে লগ ইন করার জন্য একটি ব্রাউজার উইন্ডো খোলে, যা পরবর্তী ধাপে যাওয়ার জন্য প্রয়োজনীয় OAuth2 ক্রেডেনশিয়াল তৈরি করে। ক্রেডেনশিয়ালগুলো (অ্যাক্সেস টোকেন এবং রিফ্রেশ টোকেন) স্থানীয়ভাবে সংরক্ষিত থাকে, যার অর্থ হলো পার্টনারদের শুধুমাত্র একবারই লগ ইন করার প্রয়োজন হবে।
URL-এর জন্য POST অনুরোধ
PAB-তে কোনো রিসোর্স লিঙ্কে ক্লিক করলে একটি POST অনুরোধ পাঠানো হয়, যাতে সেই রিসোর্সের জন্য প্রয়োজনীয় ডেটা অন্তর্ভুক্ত থাকে, যেমন:
- বিল্ড আইডি, বিল্ড টার্গেট
- সম্পদের নাম
- শাখা
- রিলিজ ক্যান্ডিডেটের নাম এবং ক্যান্ডিডেটটি অভ্যন্তরীণভাবে তৈরি কিনা
POST অনুরোধটি buildsvc RPC-এর downloadBuildArtifact মেথড দ্বারা গৃহীত হয়, যা একটি URL ফেরত দেয় যা রিসোর্সটি অ্যাক্সেস করতে ব্যবহার করা যেতে পারে।
- ক্লকওয়ার্ক কম্প্যানিয়ন APK রিসোর্সগুলোর জন্য, URL-টি হলো PAB-তে হোস্ট করা একটি পাঠযোগ্য URL (যা প্রমাণীকরণ-সুরক্ষিত এবং উপযুক্ত OAuth2 ক্রেডেনশিয়াল দিয়ে অ্যাক্সেসযোগ্য)।
- অন্যান্য রিসোর্সের জন্য, ইউআরএলটি হলো অভ্যন্তরীণ অ্যান্ড্রয়েড বিল্ড এপিআই থেকে প্রাপ্ত একটি দীর্ঘ, অসুরক্ষিত ইউআরএল (যা পাঁচ মিনিট পর মেয়াদোত্তীর্ণ হয়ে যায়)।
ইউআরএলটি নিন
ক্রস-সাইট রিকোয়েস্ট ফোরজারি এড়ানোর জন্য, buildsvc আরপিসি-তে অন্যান্য প্যারামিটারের সাথে একটি এক্সএসআরএফ টোকেন পোস্ট করা আবশ্যক। যদিও এই টোকেনটি প্রক্রিয়াটিকে আরও সুরক্ষিত করে, এটি প্রোগ্রাম্যাটিক অ্যাক্সেসকেও অনেক কঠিন করে তোলে, কারণ অ্যাক্সেসের জন্য এখন টোকেনটিও (যা শুধুমাত্র পিএবি পেজের জাভাস্ক্রিপ্টে পাওয়া যায়) প্রয়োজন হয়।
এই সমস্যা এড়ানোর জন্য, অ্যান্ড্রয়েড ৯ সমস্ত ফাইলের (শুধু APK নয়) জন্য URL নামকরণের পদ্ধতিটি নতুন করে ডিজাইন করেছে, যাতে আর্টিফ্যাক্ট তালিকা এবং আর্টিফ্যাক্ট URL অ্যাক্সেস করার জন্য অনুমানযোগ্য URL নাম ব্যবহার করা হয়। PAB এখন একটি সুবিধাজনক URL ফরম্যাট ব্যবহার করে যা পার্টনারদের রিসোর্স ডাউনলোড করতে সক্ষম করে; HC স্ক্রিপ্টগুলো সহজেই সেই APK-গুলো ডাউনলোড করতে পারে, কারণ URL ফরম্যাটটি পরিচিত, এবং HC XSRF/কুকি সংক্রান্ত সমস্যাগুলো এড়িয়ে যেতে পারে কারণ এর buildsvc RPC-এর প্রয়োজন হয় না।
স্থানীয় ফাইলসিস্টেম
আর্টিফ্যাক্টের তালিকা (বা জিপ ফাইল) সহ একটি ডিরেক্টরি দেওয়া হলে, বিল্ড প্রোভাইডার সেই ডিরেক্টরিতে যা আছে তার উপর ভিত্তি করে প্রাসঙ্গিক ইমেজগুলো সেট করে। আপনি গুগল ক্লাউড স্টোরেজ থেকে একটি স্থানীয় ডিরেক্টরিতে ফাইল কপি করতে gsutil টুলটি ব্যবহার করতে পারেন।
ফ্ল্যাশ বিল্ড
হোস্টে সর্বশেষ ডিভাইস ইমেজগুলো ডাউনলোড হয়ে গেলে, সেই ইমেজগুলো ডিভাইসগুলোতে ফ্ল্যাশ করতে হবে। বিল্ড প্রোভাইডারদের দ্বারা সংরক্ষিত টেম্পোরারি ফাইল পাথের উপর ভিত্তি করে, স্ট্যান্ডার্ড adb ও fastboot কমান্ড এবং পাইথন সাবপ্রসেস ব্যবহার করে এই কাজটি করা হয়।
সমর্থিত কার্যক্রম:
- শুধুমাত্র GSI ফ্ল্যাশ করা
- মূল সিস্টেম থেকে স্বতন্ত্র ইমেজ ফ্ল্যাশ করা (যেমন,
fastboot flash boot boot.img) - মূল সিস্টেম থেকে সমস্ত ইমেজ ফ্ল্যাশ করা হচ্ছে। উদাহরণ:
-
fastboot flashall(বিল্ট-ইনflashallইউটিলিটি ব্যবহার করে) -
fastboot flash(একবারে একটি করে)
-
পরীক্ষা চালান
অ্যান্ড্রয়েড ৯-এ, ভিটিএস স্বয়ংক্রিয় টেস্টিং পরিকাঠামোটি শুধুমাত্র ট্রেডফেড টেস্ট হারনেস সমর্থন করে, কিন্তু ভবিষ্যতে এটিকে অন্যান্য হারনেস সমর্থন করার জন্য সম্প্রসারিত করা যেতে পারে।
ডিভাইসগুলো প্রস্তুত হয়ে গেলে, আপনি নিম্নলিখিত বিকল্পগুলির মধ্যে যেকোনো একটি ব্যবহার করে পরীক্ষাগুলি শুরু করতে পারেন:
- স্থানীয়ভাবে TradeFed ব্যবহার করার সময়, হোস্ট কন্ট্রোলারে
testকমান্ডটি ব্যবহার করুন, যা একটি VTS টেস্ট প্ল্যানের নাম (যেমনvts-selftest) গ্রহণ করে এবং টেস্টটি চালায়। - TradeFed ক্লাস্টার (ঐচ্ছিকভাবে MTT-এর সাথে সংযুক্ত) ব্যবহার করার সময়, হোস্ট কন্ট্রোলার কনসোলে
leaseকমান্ডটি ব্যবহার করুন, যা অপূর্ণ টেস্ট রানগুলি খুঁজে বের করে।
TradeFedCluster ব্যবহার করা হলে, TradeFed স্থানীয়ভাবে একটি রিমোট ম্যানেজার হিসেবে চলে। অন্যথায়, পাইথন সাবপ্রসেস ব্যবহার করে টেস্টগুলো চালানো হয়।
রিপোর্টের ফলাফল
VtsMultiDeviceTest দ্বারা পরীক্ষার ফলাফল স্বয়ংক্রিয়ভাবে কিছু VTS ড্যাশবোর্ড প্রকল্পে রিপোর্ট করা হয়।