এই অংশটি বোঝার জন্য, প্রথমে ট্রেডফেড @অপশন অধ্যয়ন করুন।
ট্রেডফেডের সাধারণ অপশনগুলো টেস্ট ক্লাসগুলোকে এক্সএমএল কনফিগারেশন বা কমান্ড লাইন থেকে অতিরিক্ত তথ্য গ্রহণ করার সুযোগ দেয়। এই ফিচারটি আপনাকে আরও এক ধাপ এগিয়ে যেতে এবং প্রয়োজনে এই অতিরিক্ত তথ্যের কিছু অংশ সমাধান করতে সাহায্য করে।
ফাইল বিকল্পের উদাহরণ
উদাহরণ ফাইল @বিকল্প:
@Option(name = 'config-file')
private File mConfigFile;
উপরোক্ত বিষয়গুলো XML কনফিগারেশনের মাধ্যমে সেট করা যেতে পারে:
<option name="config-file" value="/tmp/file" />
অথবা কমান্ডের মাধ্যমে:
--config-file /tmp/file
বর্ণনা
এই ফিচারটি রিমোট ফাইল-টাইপড @Options-কে একটি লোকাল ফাইলে রিজলভ করার সুযোগ দেয়, যাতে ব্যবহারকারী নির্বিঘ্নে তা ব্যবহার করতে পারেন।
এটি কার্যকর করার জন্য, ফাইলটিকে একটি রিমোট স্টাইল পাথ দিয়ে নির্দিষ্ট করতে হবে। উদাহরণস্বরূপ:
--config-file gs://bucket/tmp/file
এই পাথটি একটি গুগল ক্লাউড স্টোরেজ (GCS) বাকেটের ভেতরের একটি ফাইলকে নির্দেশ করে, যেখানে এটি সংরক্ষিত আছে। ট্রেডফেড এই রিমোট পাথটি দেখার পর, ফাইলটি স্থানীয়ভাবে ডাউনলোড করার চেষ্টা করবে এবং এটিকে @Option-এ অ্যাসাইন করবে। এর ফলে mConfigFile ভেরিয়েবলটি এখন ফাইলটির স্থানীয় সংস্করণকে নির্দেশ করবে, যা টেস্টের জন্য ব্যবহার করা যাবে।
যদি কোনো কারণে রিমোট ফাইলটি ডাউনলোড করা না যায়, তাহলে ট্রেডফেড একটি ConfigurationException থ্রো করবে যা টেস্টটি চলতে বাধা দেবে। আমরা এই ফাইলগুলোর অনুপস্থিতিকে একটি গুরুতর ব্যর্থতা হিসেবে বিবেচনা করি, কারণ এর ফলে কিছু টেস্ট আর্টিফ্যাক্টও অনুপস্থিত থাকবে।
কোয়েরি প্যারামিটার ব্যবহার করুন
? ব্যবহার করে একটি URL-এ কোয়েরি প্যারামিটার যোগ করা যায়। উদাহরণস্বরূপ, gs://bucket/path?unzip=true । unzip=true কী/ভ্যালুটি IRemoteFileResolver ইন্টারফেস ইমপ্লিমেন্টেশনে পাওয়া যাবে।
দুটি অন্তর্নির্মিত আচরণ উপলব্ধ আছে:
- আনজিপ: যদি এটি '
trueসেট করা থাকে এবং ডাউনলোড করা ফাইলটি একটি জিপ ফাইল হয়, তবে এটি স্বয়ংক্রিয়ভাবে একটি অস্থায়ী স্থানে আনজিপ হয়ে যাবে। উদাহরণ:?unzip=true - ঐচ্ছিক: ডিফল্টরূপে এর মান
falseথাকে। যদি এটিtrueসেট করা হয় এবং রেজোলিউশন ব্যর্থ হয়, তবে এটি কোনো এক্সেপশন থ্রো করবে না এবং ফাইলটি প্রতিস্থাপন করবে না। উদাহরণ:?optional=true
আপনি --dynamic-download-args key=value এর মাধ্যমে গ্লোবাল কোয়েরি আর্গুমেন্টও পাস করতে পারেন, যা আহ্বানের সময় চেষ্টা করা সমস্ত ডাইনামিক ডাউনলোডে key/value পাস করবে।
সমর্থিত প্রোটোকল
আনুষ্ঠানিকভাবে সমর্থিত প্রোটোকল এবং তাদের সংশ্লিষ্ট ফরম্যাটগুলো হলো:
- গুগল ক্লাউড স্টোরেজ, প্রোটোকল:
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)- এর মতো প্রধান স্যুটগুলো এটি চালু করবে না।
একটি নতুন প্রোটোকল বাস্তবায়ন করুন
সমর্থিত প্রোটোকলগুলোর জন্য ট্রেডফেডে IRemoteFileResolver ইন্টারফেসের একটি ইমপ্লিমেন্টেশন রয়েছে, যা প্রোটোকলের সংক্ষিপ্ত ট্যাগ নির্ধারণ করে এবং getSupportedProtocol এর মাধ্যমে ফাইল পাথে সেই ট্যাগটিই মেলানো হয়। উদাহরণস্বরূপ, গুগল ক্লাউড স্টোরেজ প্রোটোকলের জন্য gs ব্যবহৃত হয়। ইমপ্লিমেন্ট করার জন্য প্রস্তাবিত ইন্টারফেসটি হলো #resolveRemoteFiles(RemoteFileResolverArgs) , যা দীর্ঘমেয়াদে রক্ষণাবেক্ষণ করা হবে।
সমর্থনটি আনুষ্ঠানিকভাবে চালু করার জন্য, বাস্তবায়িত প্রোটোকলগুলো হারনেস META-INF সার্ভিসেস ফাইলে যোগ করা যেতে পারে।