एक नया डिवाइस कनेक्शन कई एसिंक्रोनस इवेंट ट्रिगर करता है, जिन्हें अभी तक समझना मुश्किल है.
फ़िज़िकल तौर पर कनेक्ट होना
Tradefed, adb
और डिवाइसों के साथ बुनियादी इंटरैक्शन देने के लिए, ddmlib
लाइब्रेरी (Java adb
लाइब्रेरी) का इस्तेमाल करता है. IDeviceChangeListener इंटरफ़ेस, इस समाधान का एक हिस्सा है. इसकी मदद से, डिवाइस से जुड़े नए इवेंट किए जा सकते हैं, जैसे कि:
deviceConnected
: जबadb
को कोई नया डिवाइस दिखता हैdeviceDisconnected
: जब कोई डिवाइसadb
को रिपोर्ट नहीं कर रहा हैdeviceChanged
: जब डिवाइस की कोई मुख्य स्थिति होती है, जैसे कि डिवाइस ऑफ़लाइन या डिवाइस ऑनलाइन
adb
लेवल पर, ये इवेंट यह तय करने के लिए काफ़ी होते हैं कि कोई डिवाइस कनेक्ट है, ऑनलाइन है या ऑफ़लाइन है. हालांकि, टेस्ट हार्नेस के लिए, हमें इससे बेहतर स्थिति की ज़रूरत है, ताकि यह पक्का किया जा सके कि डिवाइस, टेस्ट चलाने के लिए सचमुच तैयार है. साथ ही, नए कनेक्ट किए गए डिवाइस की वजह से, इस पर किसी तरह का असर नहीं पड़ना चाहिए.
Tradefed में इवेंट का क्रम इस तरह है:
- डिवाइस को
deviceConnected
के तौर पर पहचाना गया है और वहadb
से सामान्य इवेंट के लिए उपलब्ध है एक इंटरनल Tradefed इवेंट बनाया जाता है, जो:
- देखें कि डिवाइस पहले से मौजूद है या नहीं; Tradefed कुछ डिवाइसों (खास तौर पर, उन डिवाइसों के लिए जिन्हें फ़िलहाल टेस्ट के लिए असाइन किया गया है और जिन पर टेस्ट चल रहे हैं) का इंटरनल रेफ़रंस रखता है, ताकि TF को उनका ट्रैक रखने में समस्या न हो.
- देखें कि डिवाइस
ONLINE
है याOFFLINE
.
अगर डिवाइस:
OFFLINE
: डिवाइस को TradefedCONNECTED_OFFLINE
स्टेटस पर स्विच कर दिया जाएगा. इस स्टेटस में, डिवाइस पर टेस्ट नहीं चलाए जा सकते. अगर डिवाइस बाद में ऑनलाइन होता है, तो उसेONLINE
साइकल से गुज़रना होगा. अगर हमेंdeviceDisconnect
इवेंट मिलता है, तो डिवाइस को सूची से हटा दिया जाएगा.ONLINE
(adb के हिसाब से): डिवाइस कोCONNECTED_ONLINE
स्थिति में रखा जाएगा और टेस्ट के लिए डिवाइस उपलब्ध है या नहीं, इसकी जांच की जाएगी:checking_availability
.
अगर
availability
की जांच पूरी हो जाती है, तो डिवाइस को टेस्ट के लिए उपलब्ध के तौर पर मार्क कर दिया जाएगा. इसके बाद, उस पर टेस्ट चलाए जा सकेंगे. अगर ऐसा नहीं है, तो असाइन करने के लिए डिवाइस कोunavailable
के तौर पर मार्क किया जाएगा और उसे कोई टेस्ट नहीं दिया जाएगा.
डिवाइसों की लिस्टिंग करते समय, ये सभी स्थितियां Tradefed console में दिखती हैं: tf> list devices
यह ध्यान रखना ज़रूरी है कि जब डिवाइस को किसी टेस्ट के लिए ऐलोकेट किया गया हो, तो ऊपर बताई गई ज़्यादातर स्थितियां नहीं होंगी. साथ ही, Tradefed डिवाइस की स्थिति को अंदरूनी तौर पर तय करेगा. इसलिए, हो सकता है कि कोई डिवाइस adb devices
से हट जाए, लेकिन Tradefed में उसकी लिस्टिंग बनी रहे. उदाहरण के लिए, ऐसा तब हो सकता है, जब टेस्ट के ज़रिए
डिवाइस को फिर से चालू किया जा रहा हो.
adb Connect से कनेक्ट किया गया वर्चुअल डिवाइस
जब कोई रिमोट वर्चुअल डिवाइस बनाया जाता है, तो Tradefed adb
connect
का इस्तेमाल करके उससे कनेक्ट होता है. आम तौर पर, इससे adb devices
में <some ip>:<port number>
के तौर पर दिखने वाले डिवाइस को ट्रिगर किया जाएगा. साथ ही, यह उसी क्रम में चलेगा जिस क्रम में फ़िज़िकली कनेक्ट किए गए डिवाइस चलते हैं.
device Connected इवेंट के होने पर डिवाइस को ट्रैक करना
deviceConnected
के होने पर, ddmlib
कनेक्ट किए गए नए डिवाइस को ट्रैक करने के लिए, एक नई पहचान IDevice बनाता है.
Tradefed उस रेफ़रंस का इस्तेमाल करता है और ज़्यादा बेहतर सेवा देने के लिए, उसे डिवाइस इंटरफ़ेस ITestDevice के अपने लागू किए गए वर्शन में रैप करता है. हालांकि, ddmlib
से आने वाला IDevice हमेशा मुख्य डिवाइस होता है.
इसका मतलब है कि अगर कोई नया डिवाइस कनेक्ट किया जाता है, तो एक नया ITestDevice बन जाता है और उसे IDevice से जोड़ दिया जाता है. जब किसी कॉल के दौरान ऐसा होता है और ITestDevice का इस्तेमाल किया जा रहा होता है, तब भी IDevice को बदल दिया जाता है, ताकि सही रेफ़रंस पर टेस्टिंग की जा सके. यह प्रोसेस, डिवाइस के डिसकनेक्ट/फिर से कनेक्ट होने पर हर बार आसानी से पूरी हो जाती है. उदाहरण के लिए, डिवाइस को फिर से चालू करने पर.