Tradefed এ অপশন হ্যান্ডলিং, Tradefed এ অপশন হ্যান্ডলিং

ট্রেড ফেডারেশনের মডিউলার পদ্ধতির কেন্দ্রবিন্দুতে রয়েছে অপশন হ্যান্ডলিং। বিশেষত, অপশন হলো সেই প্রক্রিয়া যার মাধ্যমে ডেভেলপার, ইন্টিগ্রেটর এবং টেস্ট রানার একে অপরের কাজের পুনরাবৃত্তি না করেই একসাথে কাজ করতে পারে। সহজ কথায়, আমাদের অপশন হ্যান্ডলিং-এর বাস্তবায়ন ডেভেলপারকে একটি জাভা ক্লাস মেম্বারকে কনফিগারযোগ্য হিসেবে চিহ্নিত করার সুযোগ দেয়, যার ফলে ইন্টিগ্রেটর সেই মেম্বারের মান বাড়াতে বা ওভাররাইড করতে পারে এবং পরবর্তীতে টেস্ট রানারও তা বাড়াতে বা ওভাররাইড করতে পারে। এই প্রক্রিয়াটি সমস্ত জাভা ইনট্রিন্সিক টাইপের পাশাপাশি ইনট্রিন্সিক টাইপের যেকোনো Map বা Collection ইনস্ট্যান্সের জন্যও কাজ করে।

দ্রষ্টব্য: অপশন-হ্যান্ডলিং প্রক্রিয়াটি শুধুমাত্র টেস্ট লাইফসাইকেলে অন্তর্ভুক্ত ইন্টারফেসগুলোর কোনো একটি ইমপ্লিমেন্টকারী ক্লাসগুলোর ক্ষেত্রেই কাজ করে, এবং কেবল তখনই যখন সেই ক্লাসটি লাইফসাইকেল মেকানিজম দ্বারা ইনস্ট্যানশিয়েট করা হয়।

ডেভেলপার

শুরুতে, ডেভেলপার @Option অ্যানোটেশন দিয়ে একটি মেম্বারকে চিহ্নিত করেন। এগুলো (ন্যূনতম) name এবং description মান নির্দিষ্ট করে, যা সেই অপশনের সাথে যুক্ত আর্গুমেন্টের নাম এবং --help বা --help-all সহ কমান্ডটি চালানো হলে TF কনসোলে প্রদর্শিত বিবরণটি নির্দিষ্ট করে।

উদাহরণস্বরূপ, ধরা যাক আমরা এমন একটি কার্যকরী ফোন টেস্ট তৈরি করতে চাই যা বিভিন্ন ফোন নম্বরে ডায়াল করবে এবং প্রতিটি নম্বর সংযোগ হওয়ার পর সেখান থেকে ধারাবাহিক DTMF টোন পাবে বলে আশা করে।

public class PhoneCallFuncTest extends IRemoteTest {
    @Option(name = "timeout", description = "How long to wait for connection, in millis")
    private long mWaitTime = 30 * 1000;  // 30 seconds

    @Option(name = "call", description = "Key: Phone number to attempt. " +
            "Value: DTMF to expect. May be repeated.")
    private Map<String, String> mCalls = new HashMap<String, String>;

    public PhoneCallFuncTest() {
        mCalls.add("123-456-7890", "01134");  // default
    }

ওই টেস্টটির জন্য ডেভেলপারকে দুটি কনফিগারেশন পয়েন্ট সেট আপ করতে এটুকুই যথেষ্ট। এরপর তারা mWaitTime এবং mCalls যে কনফিগারযোগ্য, সেদিকে খুব বেশি মনোযোগ না দিয়েই স্বাভাবিকভাবে ব্যবহার করতে পারেন। যেহেতু @Option ফিল্ডগুলো ক্লাস ইনস্ট্যানশিয়েট হওয়ার পরে, কিন্তু run মেথড কল করার আগে সেট করা হয়, তাই এটি ইমপ্লিমেন্টরদের জন্য Map এবং Collection ফিল্ডগুলোর ডিফল্ট মান সেট করা বা সেগুলোর উপর কোনো ধরনের ফিল্টারিং করার একটি সহজ উপায় করে দেয়, যেগুলো অন্যথায় শুধুমাত্র অ্যাপেন্ড-অনলি হয়ে থাকে।

ইন্টিগ্রেটর

ইন্টিগ্রেটর কনফিগারেশনের জগতে কাজ করে, যা XML-এ লেখা হয়। কনফিগারেশন ফরম্যাটটি ইন্টিগ্রেটরকে যেকোনো @Option ফিল্ডের জন্য একটি মান সেট (বা যুক্ত) করার সুযোগ দেয়। উদাহরণস্বরূপ, ধরুন ইন্টিগ্রেটর এমন একটি কম-লেটেন্সির টেস্ট সংজ্ঞায়িত করতে চান যা ডিফল্ট নম্বরটি কল করবে, এবং সেইসাথে এমন একটি দীর্ঘ-চলমান টেস্টও চান যা বিভিন্ন নম্বর কল করবে। তারা একজোড়া কনফিগারেশন তৈরি করতে পারেন যা দেখতে নিচের মতো হতে পারে:

<?xml version="1.0" encoding="utf-8"?>
<configuration description="low-latency default test; low-latency.xml">
    <test class="com.example.PhoneCallFuncTest">
        <option name="timeout" value="5000" />
    </test>
</configuration>
<?xml version="1.0" encoding="utf-8"?>
<configuration description="call a bunch of numbers; many-numbers.xml">
    <test class="com.example.PhoneCallFuncTest">
        <option name="call" key="111-111-1111" value="#*#*TEST1*#*#" />
        <option name="call" key="222-222-2222" value="#*#*TEST2*#*#" />
        <!-- ... -->
    </test>
</configuration>

টেস্ট রানার

টেস্ট রানার ট্রেড ফেডারেশন কনসোলের মাধ্যমেও এই কনফিগারেশন পয়েন্টগুলোতে অ্যাক্সেস করতে পারেন। প্রথমত, তারা run command <name> নির্দেশনা (বা সংক্ষেপে run <name> `) ব্যবহার করে একটি কমান্ড (অর্থাৎ, একটি কনফিগ এবং এর সমস্ত আর্গুমেন্ট) রান করেন। এর বাইরে, তারা কমান্ডের অংশ হিসেবে যেকোনো আর্গুমেন্টের তালিকা নির্দিষ্ট করতে পারেন, যা প্রতিটি কনফিগের মধ্যে থাকা লাইফসাইকেল অবজেক্ট দ্বারা নির্দিষ্ট ফিল্ডগুলোকে প্রতিস্থাপন বা সেগুলোর সাথে যুক্ত করতে পারে।

many-numbers ফোন নম্বর দিয়ে লো-ল্যাটেন্সি টেস্টটি চালানোর জন্য, টেস্ট রানার নিম্নলিখিত কমান্ডটি চালাতে পারে:

tf> run low-latency.xml --call 111-111-1111 #*#*TEST1*#*# --call 222-222-2222 #*#*TEST2*#*#

অথবা, বিপরীত দিক থেকে অনুরূপ প্রভাব পেতে, টেস্ট রানার many-numbers পরীক্ষার জন্য অপেক্ষার সময় কমাতে পারে:

tf> run many-numbers.xml --timeout 5000

বিকল্প ক্রম

আপনি হয়তো লক্ষ্য করবেন যে call অপশনের অন্তর্নিহিত ইমপ্লিমেন্টেশনটি একটি Map , তাই কমান্ড লাইনে বারবার --call ব্যবহার করলে সেগুলো সবই সংরক্ষিত হয়ে যায়।

timeout অপশনটি, যার অন্তর্নিহিত ইমপ্লিমেন্টেশন হলো ` long , শুধুমাত্র একটি মান সংরক্ষণ করতে পারে। তাই কেবল সর্বশেষ নির্দিষ্ট করা মানটিই সংরক্ষিত হয়। --timeout 5 --timeout 10 এর ফলে timeout এ 10 থাকবে।

অন্তর্নিহিত বাস্তবায়ন হিসেবে List বা Collection থাকলে, কমান্ড লাইনে নির্দিষ্ট করা ক্রমানুসারে সমস্ত মান সংরক্ষিত হয়।

বুলিয়ান বিকল্পগুলি

বুলিয়ান অন্তর্নিহিত টাইপের অপশনগুলোকে সরাসরি অপশনের নাম, যেমন --[option-name] পাস করে true সেট করা যায় এবং --no-[option-name] সিনট্যাক্স ব্যবহার করে false সেট করা যায়।

আরও দেখুন

স্যুট এবং মডিউলগুলিতে পাস বিকল্পগুলি