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