একটি নতুন ডিভাইস সংযোগ এমন কিছু অ্যাসিঙ্ক্রোনাস ঘটনা ঘটায় যা সহজে চোখে পড়ে না, কিন্তু বোঝাটা জরুরি।
শারীরিকভাবে সংযুক্ত
ট্রেডফেড, adb এবং ডিভাইসগুলির সাথে প্রাথমিক যোগাযোগের জন্য ddmlib লাইব্রেরি (একটি জাভা adb লাইব্রেরি) ব্যবহার করে। এই সমাধানের একটি অংশ হলো IDeviceChangeListener ইন্টারফেস , যা নতুন ডিভাইস ইভেন্ট গ্রহণ করতে দেয়, যেমন:
-
deviceConnected: যখনadbএকটি নতুন ডিভাইস শনাক্ত করে -
deviceDisconnected: যখন কোনো ডিভাইস আরadbতে রিপোর্ট করে না -
deviceChanged: যখন ডিভাইসের কোনো গুরুত্বপূর্ণ অবস্থা ঘটে (যেমন ডিভাইস অফলাইন বা ডিভাইস অনলাইন)
adb লেভেলে কোনো ডিভাইস সংযুক্ত, অনলাইন বা অফলাইন আছে কিনা তা নির্ধারণ করার জন্য এই ইভেন্টগুলোই যথেষ্ট। কিন্তু টেস্ট হারনেসের জন্য, একটি ডিভাইস পরীক্ষা চালানো শুরু করার জন্য সত্যিই প্রস্তুত কিনা তা নিশ্চিত করতে আমাদের এর চেয়েও শক্তিশালী একটি স্টেট প্রয়োজন; নতুন সংযুক্ত ডিভাইসের সাথে আসা সম্ভাব্য স্টেটের অস্থিরতা দ্বারা এটি প্রভাবিত হওয়া উচিত নয়।
ট্রেডফেড-এ ঘটনাক্রমটি হলো:
- ডিভাইসটি
deviceConnectedহিসেবে স্বীকৃত এবংadbথেকে নিয়মিত ইভেন্টের জন্য উন্মুক্ত। ট্রেডফেডের একটি অভ্যন্তরীণ ইভেন্ট তৈরি করা হয় যা:
- ডিভাইসটি আগে থেকেই পরিচিত কিনা তা পরীক্ষা করুন; ট্রেডফেড কিছু ডিভাইসের (বিশেষ করে যেগুলো বর্তমানে বরাদ্দ করা হয়েছে এবং পরীক্ষা চলছে) অভ্যন্তরীণ রেফারেন্স রাখে, যাতে TF যথেচ্ছভাবে সেগুলোর খোঁজ হারিয়ে না ফেলে।
- ডিভাইসটি
ONLINEনাকিOFFLINE, তা পরীক্ষা করুন।
যদি ডিভাইসটি হয়:
OFFLINE: ডিভাইসটি ট্রেডফেড কানেক্টেড_অফলাইন (TradefedCONNECTED_OFFLINEঅবস্থায় চলে যাবে, যার ফলে ডিভাইসটি এখনই কোনো পরীক্ষা চালাতে পারবে না। যদি ডিভাইসটি পরে অনলাইন হয়, তবে এটিONLINEচক্রটি পুনরায় শুরু করবে। যদি আমরা একটিdeviceDisconnectইভেন্ট পাই, তবে ডিভাইসটি তালিকা থেকে মুছে ফেলা হবে।ONLINE(adb-এর দৃষ্টিতে): ডিভাইসটিকেCONNECTED_ONLINEঅবস্থায় আনা হবে এবং টেস্ট অ্যালোকেশনের জন্য এর প্রাপ্যতা যাচাই করা হবে:checking_availability)।
availabilityযাচাই সফল হলে, ডিভাইসটিকে পরীক্ষার জন্য বরাদ্দের জন্য উপলব্ধ হিসেবে চিহ্নিত করা হবে; এটি পরীক্ষাগুলো চালাতে পারবে। অন্যথায়, ডিভাইসটিকে বরাদ্দের জন্যunavailableহিসেবে চিহ্নিত করা হবে এবং এটি কোনো পরীক্ষা গ্রহণ করতে পারবে না।
tf> list devices কমান্ডের মাধ্যমে ডিভাইসগুলোর তালিকা তৈরি করলে ট্রেডফেড কনসোলে এই সমস্ত অবস্থা প্রতিফলিত হয়।
এটা মনে রাখা গুরুত্বপূর্ণ যে, যখন ডিভাইসটি কোনো পরীক্ষার জন্য বরাদ্দ থাকে, তখন উপরের বেশিরভাগ ঘটনাই ঘটে না এবং ট্রেডফেড অভ্যন্তরীণভাবে ডিভাইসের অবস্থা নির্ধারণ করে। তাই, ট্রেডফেডে তালিকাভুক্ত থাকা সত্ত্বেও কোনো ডিভাইস adb devices থেকে অদৃশ্য হয়ে যেতে পারে। উদাহরণস্বরূপ, কোনো পরীক্ষা ডিভাইসটিকে রিবুট করার সময় এমনটা ঘটতে পারে।
ভার্চুয়াল ডিভাইস adb connect এর সাথে সংযুক্ত
যখন একটি রিমোট ভার্চুয়াল ডিভাইস তৈরি করা হয়, তখন ট্রেডফেড adb connect ব্যবহার করে সেটির সাথে সংযোগ স্থাপন করে। এর ফলে সাধারণত ডিভাইসটি adb devices এ <some ip>:<port number> হিসেবে দেখা যায় এবং এটি ভৌতভাবে সংযুক্ত ডিভাইসগুলোর মতোই একই ক্রম অনুসরণ করে।
যখন একটি deviceConnected ইভেন্ট ঘটে তখন ডিভাইস ট্র্যাকিং।
যখন deviceConnected ঘটে, ddmlib নতুন সংযুক্ত ডিভাইসটিকে ট্র্যাক করার জন্য একটি নতুন রেফারেন্স IDevice তৈরি করে।
ট্রেডফেড আরও উন্নত পরিষেবা প্রদানের জন্য সেই রেফারেন্সটি ব্যবহার করে এবং সেটিকে তার নিজস্ব ডিভাইস ইন্টারফেস ITestDevice- এর ইমপ্লিমেন্টেশনে মোড়কজাত করে। কিন্তু অন্তর্নিহিত IDevice-টি সর্বদা ddmlib থেকে আসে।
এর মানে হলো, যদি একটি নতুন ডিভাইস সংযুক্ত করা হয়, তাহলে একটি নতুন ITestDevice তৈরি হয় এবং IDevice-এর সাথে যুক্ত হয়ে যায়। যখন কোনো ইনভোকেশনের সময় এটি ঘটে এবং ITestDevice-টি ব্যবহৃত হতে থাকে, তখনও অন্তর্নিহিত IDevice-টি প্রতিস্থাপিত হয়ে যায়, যাতে সঠিক রেফারেন্সের উপর টেস্টিং চলতে পারে। প্রতিবার যখন কোনো ডিভাইস সংযোগ বিচ্ছিন্ন বা পুনরায় সংযুক্ত হয় (উদাহরণস্বরূপ, রিবুটের সময়), তখন এই কাজটি নির্বিঘ্নে সম্পন্ন হয়।