গ্লোবাল কনফিগারেশন সহ প্রোটোকল লোড করা

এই বিভাগটি বুঝতে, প্রথমে Tradefed @Option সম্পর্কে জানুন।

Tradefed-এ সাধারণ বিকল্পগুলি XML কনফিগারেশন বা কমান্ড লাইন থেকে অতিরিক্ত তথ্য পেতে টেস্ট ক্লাসগুলিকে অনুমতি দেয়। এই ফিচার আপনাকে এক ধাপ এগিয়ে যেতে এবং প্রয়োজন হলে এইসব অতিরিক্ত তথ্য সংক্রান্ত কিছু সমস্যা সমাধান করতে দেয়।

ফাইলের বিকল্পের উদাহরণ

Example File @option:

@Option(name = 'config-file')
private File mConfigFile;

XML কনফিগারেশনের মাধ্যমে উপরে উল্লেখ করা বিষয়গুলি সেট করা যেতে পারে:

<option name="config-file" value="/tmp/file" />

অথবা কমান্ডের মাধ্যমে:

--config-file /tmp/file

বর্ণনা

এই ফিচারের সাহায্যে আপনি ফাইল-টাইপ করা @বিকল্পগুলিকে লোকাল ফাইলে পরিবর্তন করতে পারবেন, যাতে ব্যবহারকারীর দৃষ্টিকোণ থেকে সেগুলি নির্বিঘ্নে উপলভ্য থাকে।

এটি কাজ করার জন্য, ফাইলটিকে রিমোট স্টাইল পাথ সহ নির্দিষ্ট করতে হবে। যেমন:

--config-file gs://bucket/tmp/file

এই পাথ Google Cloud Storage (GCS) বাকেটের মধ্যে থাকা কোনও ফাইলকে নির্দেশ করে যেখানে এটি স্টোর করা আছে। Tradefed রিমোট পাথ দেখতে পেলে, ফাইলটি লোকালি ডাউনলোড করার চেষ্টা করবে এবং @Option-এ অ্যাসাইন করবে। এর ফলে mConfigFile ভেরিয়েবল এখন ফাইলের লোকাল ভার্সন দেখায়, যা টেস্টের মাধ্যমে ব্যবহার করা যেতে পারে।

কোনও কারণে রিমোট ফাইল ডাউনলোড করা না গেলে, Tradefed একটি ConfigurationException থ্রো করবে যা টেস্ট রান করা আটকাবে। আমরা সেইসব ফাইল না থাকাকে একটি গুরুতর সমস্যা হিসেবে বিবেচনা করি, কারণ কিছু টেস্ট আর্টিফ্যাক্টও থাকবে না।

কোয়েরি প্যারামিটার ব্যবহার করা

? ব্যবহার করে URL-এ কোয়েরি প্যারামিটার যোগ করা যায়। যেমন, gs://bucket/path?unzip=true। কী/ভ্যালু unzip=true, IRemoteFileResolver interface ইমপ্লিমেন্টেশনে উপলভ্য হবে।

দুটি বিল্ট-ইন আচরণ উপলভ্য:

  • unzip: true হিসেবে সেট করা থাকলে এবং ডাউনলোড করা ফাইল zip হলে, এটি অটোমেটিক আনজিপ হয়ে অস্থায়ী লোকেশনে সেভ হয়ে যাবে। যেমন: ?unzip=true
  • ঐচ্ছিক: ডিফল্ট হিসেবে false সেট করা থাকে। true হিসেবে সেট করা থাকলে এবং রেজোলিউশন ব্যর্থ হলে, এটি কোনও ব্যতিক্রম দেখাবে না এবং ফাইলটি পরিবর্তন করবে না। যেমন: ?optional=true

এছাড়াও, আপনি --dynamic-download-args key=value গ্লোবাল কোয়েরি আর্গুমেন্ট পাস করতে পারবেন যা ইনভোকেশনে চেষ্টা করা সব ডায়নামিক ডাউনলোডে কী/ভ্যালু পাস করবে।

যেসব প্রোটোকল কাজ করে

অফিসিয়ালি কাজ করে এমন প্রোটোকল ও সেগুলির সংশ্লিষ্ট ফর্ম্যাট হল:

  • Google Cloud Storage, প্রোটোকল: gs, ফর্ম্যাট: gs://<bucket name>/path
  • লোকাল ফাইল, প্রোটোকল: file, ফর্ম্যাট: file:/local/path
  • http লিঙ্ক, প্রোটোকল: http, ফর্ম্যাট: http://url
  • https লিঙ্ক, প্রোটোকল: https, ফর্ম্যাট: https://url

সীমাবদ্ধতা

@Option-এর ডায়নামিক রেজোলিউশন বর্তমানে ডাউনলোড করার জন্য প্রোটোকল এবং লোকেশনের সীমিত সংখ্যায় কাজ করে। @Option-এর রেজোলিউশন বর্তমানে শুধুমাত্র মূল XML Tradefed কনফিগারেশনের জন্য চালু করা আছে।

সুইট হিসেবে রান করলে, বর্তমান মডিউল (AndroidTest.xml) ডিফল্ট হিসেবে ফাইল সম্পর্কিত সমস্যা সমাধান করবে না। এটি মডিউলকে কিছু অজানা ডিপেন্ডেন্সি তৈরি করা থেকে আটকানোর জন্য করা হয়। সুট লেভেলে --enable-module-dynamic-download ব্যবহার করে এটি এড়ানো যেতে পারে, তবে কম্প্যাটিবিলিটি টেস্ট সুট (CTS) এবং ভেন্ডর টেস্ট সুট (VTS)-এর মতো প্রধান সুটগুলি এটি চালু করবে না।

নতুন প্রোটোকল প্রয়োগ করা

যেসব প্রোটোকল কাজ করে, সেগুলির Tradefed-এ IRemoteFileResolver ইন্টারফেস ইমপ্লিমেন্টেশন থাকে, যা প্রোটোকলের শর্ট ট্যাগ নির্ধারণ করে। এটি getSupportedProtocol-এর মাধ্যমে ফাইল পাথে ম্যাচ করা হবে। যেমন, gs Google Cloud Storage প্রোটোকলের জন্য ব্যবহার করা হয়। প্রয়োগ করার জন্য সাজেস্ট করা ইন্টারফেস হল #resolveRemoteFiles(RemoteFileResolverArgs) যা দীর্ঘমেয়াদী মেইনটেইন করা ইন্টারফেস হবে।

সাপোর্ট আনুষ্ঠানিকভাবে চালু করতে, প্রয়োগ করা প্রোটোকল হার্নেস META-INF পরিষেবা ফাইলে যোগ করা যেতে পারে।