Tradefed-এ ডিভাইস শনাক্তকরণ

নতুন ডিভাইস কানেক্ট করলে অ্যাসিঙ্ক্রোনাস ইভেন্টের একটি সিরিজ ট্রিগার হয় যা স্পষ্ট নয়, তবে বোঝা প্রয়োজন।

ফিজিক্যালি কানেক্ট করা

adb এবং ডিভাইসের সাথে প্রাথমিক ইন্টার‍্যাকশন প্রদান করতে Tradefed ddmlib লাইব্রেরি (একটি Java adb লাইব্রেরি) ব্যবহার করে। এই সমাধানের একটি অংশ হল IDeviceChangeListener ইন্টারফেস যা নতুন ডিভাইস ইভেন্ট গ্রহণ করতে দেয়, যেমন:

  • deviceConnected: adb-এর মাধ্যমে নতুন ডিভাইস দেখা গেলে
  • deviceDisconnected: কোনও ডিভাইস যখন adb-এ আর রিপোর্ট করছে না
  • deviceChanged: ডিভাইসের কোনও মেজর স্টেট পরিবর্তন হলে (যেমন, ডিভাইস অফলাইন বা ডিভাইস অনলাইন)

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

Tradefed-এ ইভেন্টের ক্রম হল:

  1. ডিভাইসটি deviceConnected হিসেবে শনাক্ত করা হয়েছে এবং adb থেকে নিয়মিত ইভেন্টের জন্য খোলা আছে
  2. একটি ইন্টার্নাল Tradefed ইভেন্ট তৈরি করা হয় যা:

    • ডিভাইসটি আগে থেকেই পরিচিত কিনা তা চেক করুন; Tradefed কিছু ডিভাইসের (বিশেষ করে বর্তমানে বরাদ্দ করা এবং টেস্ট চালানো) অভ্যন্তরীণ রেফারেন্স রাখে যাতে TF এলোমেলোভাবে তাদের ট্র্যাক হারানো এড়াতে পারে।
    • ডিভাইসটি ONLINE বা OFFLINE কিনা তা চেক করুন।
  3. ডিভাইসটি যদি:

    • OFFLINE: ডিভাইসটি Tradefed CONNECTED_OFFLINE স্টেটে পরিবর্তন করা হবে, যা ডিভাইসটিকে এখনও পরীক্ষা চালানোর অনুমতি দেয় না। ডিভাইসটি পরে অনলাইন হলে, এটি ONLINE চক্রের মধ্যে দিয়ে যাবে। আমরা কোনও deviceDisconnect ইভেন্ট পেলে, ডিভাইসটি তালিকা থেকে সরিয়ে দেওয়া হবে।

    • ONLINE (adb-তে যেভাবে দেখা যায়): ডিভাইসটি এই অবস্থায় CONNECTED_ONLINE রাখা হবে এবং টেস্ট অ্যালোকেশনের জন্য এটির উপলভ্যতা চেক করা হবে: checking_availability।

  4. availability চেক সফল হলে, ডিভাইসটি টেস্ট অ্যালোকেশনের জন্য উপলভ্য হিসেবে চিহ্নিত করা হবে; এটি টেস্ট চালাতে পারবে। তা না হলে, ডিভাইসটিকে অ্যাসাইন করার জন্য unavailable হিসেবে চিহ্নিত করা হবে এবং কোনও পরীক্ষা গ্রহণ করতে পারবে না।

এইসব রাজ্যের সবকটিই Tradefed কনসোলে দেখানো হয়, যখন ডিভাইসগুলি এর মাধ্যমে তালিকাভুক্ত করা হয়: tf> list devices

এটি মনে রাখা গুরুত্বপূর্ণ যে ডিভাইসটি বর্তমানে কোনও পরীক্ষার জন্য বরাদ্দ করা হলে, উপরের বেশিরভাগ ঘটনা ঘটবে না এবং Tradefed ইন্টার্নালি ডিভাইসের অবস্থা নির্ধারণ করবে। তাই, Tradefed-এর তালিকায় থাকা সত্ত্বেও কোনও ডিভাইস adb devices থেকে উধাও হয়ে যেতে পারে। যেমন, কোনও টেস্টের জন্য ডিভাইস রিবুট করলে এটি হতে পারে।

adb connect-এর মাধ্যমে কানেক্ট করা ভার্চুয়াল ডিভাইস

রিমোট ভার্চুয়াল ডিভাইস তৈরি করা হলে, Tradefed adb connect ব্যবহার করে এটির সাথে কানেক্ট করে। এর ফলে ডিভাইসটি সাধারণত adb devices-এ <some ip>:<port number> হিসেবে দেখা যাবে এবং এটি ফিজিক্যালি কানেক্ট করা ডিভাইসের মতো একই ক্রম অনুসরণ করবে।

deviceConnected ইভেন্ট ঘটলে ডিভাইস ট্র্যাক করা

deviceConnected হলে, ddmlib নতুন কানেক্ট করা ডিভাইস ট্র্যাক করতে একটি নতুন রেফারেন্স IDevice তৈরি করে।

Tradefed সেই রেফারেন্স ব্যবহার করে এবং আরও উন্নত পরিষেবা প্রদান করতে, ডিভাইস ইন্টারফেসের ITestDevice নিজস্ব প্রয়োগের মধ্যে তা র‍্যাপ করে। কিন্তু অন্তর্নিহিত iDevice সবসময় ddmlib থেকে আসে।

এর অর্থ হল, কোনও নতুন ডিভাইস কানেক্ট করা হলে, একটি নতুন ITestDevice তৈরি করা হয় এবং IDevice-এর সাথে যুক্ত করা হয়। When this happens during an invocation and the ITestDevice is being used, the underlying IDevice is still replaced so testing can proceed on the proper reference. প্রতিবার ডিভাইস ডিসকানেক্ট/রিকানেক্ট (যেমন, রিবুট করার সময়) করার সময় এটি নির্বিঘ্নে করা হয়।