การเชื่อมต่ออุปกรณ์ใหม่จะทริกเกอร์ชุดเหตุการณ์ที่เกิดขึ้นไม่พร้อมกันซึ่งไม่ชัดเจนแต่ควรทำความเข้าใจ
เชื่อมต่อทางกายภาพ
Tradefed ใช้ไลบรารี ddmlib
(ไลบรารี adb
ของ Java) เพื่อให้บริการการโต้ตอบพื้นฐานกับ adb
และอุปกรณ์ ส่วนหนึ่งคืออินเทอร์เฟซ IDeviceChangeListener ที่ช่วยให้รับเหตุการณ์ใหม่ของอุปกรณ์ได้ เช่น
deviceConnected
: เมื่อadb
พบอุปกรณ์ใหม่deviceDisconnected
: เมื่ออุปกรณ์ไม่ได้รายงานไปยังadb
อีกต่อไปdeviceChanged
: เมื่อสถานะอุปกรณ์ที่สำคัญเกิดขึ้น (เช่น อุปกรณ์ออฟไลน์หรืออุปกรณ์ออนไลน์)
เหตุการณ์เหล่านี้เพียงพอในระดับ adb
ในการตัดสินใจว่าอุปกรณ์เชื่อมต่ออยู่ ออนไลน์ หรือออฟไลน์ แต่สำหรับชุดทดสอบ เราจำเป็นต้องมีการระบุสถานะที่ชัดเจนกว่านี้เพื่อให้มั่นใจว่าอุปกรณ์พร้อมที่จะเริ่มการทดสอบอย่างแท้จริง และไม่ได้รับผลกระทบจากสถานะความไม่สม่ำเสมอที่อาจเกิดขึ้นกับอุปกรณ์ที่เชื่อมต่อใหม่
ลำดับเหตุการณ์ใน Tradefed มีดังนี้
- จดจำอุปกรณ์เป็น
deviceConnected
และเปิดรับเหตุการณ์ปกติตั้งแต่วันที่adb
ระบบจะสร้างกิจกรรม Tradefed ภายในที่จะทําสิ่งต่อไปนี้
- ตรวจสอบว่าระบบรู้จักอุปกรณ์แล้วหรือยัง โดย Tradefed จะเก็บข้อมูลอ้างอิงภายในสำหรับอุปกรณ์บางเครื่อง (โดยเฉพาะอุปกรณ์ที่กําลังจัดสรรและทำการทดสอบอยู่) เพื่อไม่ให้ TF สูญเสียการติดตามอุปกรณ์แบบสุ่ม
- ตรวจสอบว่าอุปกรณ์เป็น
ONLINE
หรือOFFLINE
ในกรณีที่อุปกรณ์เป็น
OFFLINE
: ระบบจะเปลี่ยนสถานะของอุปกรณ์เป็นCONNECTED_OFFLINE
สถานะ Tradefed ซึ่งยังไม่อนุญาตให้อุปกรณ์ทำการทดสอบ หากอุปกรณ์ออนไลน์ในภายหลัง อุปกรณ์จะเข้าสู่วงจรONLINE
หากเราได้รับเหตุการณ์deviceDisconnect
อุปกรณ์จะถูกนำออกจากรายการไปเลยONLINE
(ตามที่เห็นใน adb): อุปกรณ์จะอยู่ในสถานะCONNECTED_ONLINE
และจะมีการตรวจสอบความพร้อมในการจัดสรรการทดสอบ:checking_availability
หากการตรวจสอบ
availability
สำเร็จ ระบบจะทำเครื่องหมายอุปกรณ์ว่าพร้อมใช้งานสำหรับการจัดสรรทดสอบ ซึ่งจะทำให้ทำการทดสอบได้ หากไม่ ระบบจะทำเครื่องหมายอุปกรณ์เป็นunavailable
สำหรับการแบ่งสรรและอุปกรณ์จะไม่ได้รับการจัดทดสอบ
สถานะทั้งหมดนี้จะแสดงในคอนโซลที่แลกเปลี่ยนเมื่อแสดงอุปกรณ์ผ่าน tf> list devices
โปรดทราบว่าเมื่อมีการจัดสรรอุปกรณ์สำหรับการทดสอบในปัจจุบัน การดำเนินการข้างต้นส่วนใหญ่จะไม่เกิดขึ้นและ Tradefed จะกำหนดสถานะของอุปกรณ์เป็นการภายใน ดังนั้นอุปกรณ์จึงอาจหายไปจาก adb devices
ขณะยังแสดงอยู่ใน Tradefed กรณีนี้อาจเกิดขึ้นเมื่อการทดสอบกำลังรีบูตอุปกรณ์
อุปกรณ์เสมือนที่เชื่อมต่อด้วย adb connect
เมื่อสร้างอุปกรณ์เสมือนระยะไกลแล้ว Tradefed จะเชื่อมต่อกับอุปกรณ์ดังกล่าวโดยใช้ adb
connect
ซึ่งโดยปกติแล้วจะทริกเกอร์อุปกรณ์ที่แสดงใน adb devices
เป็น <some ip>:<port number>
และจะเป็นไปตามลำดับเดียวกับอุปกรณ์ที่เชื่อมต่ออยู่จริง
การติดตามอุปกรณ์เมื่อมีเหตุการณ์ deviceConnected เกิดขึ้น
เมื่อ deviceConnected
เกิดขึ้น ddmlib
จะสร้างการอ้างอิง IDevice ใหม่เพื่อติดตามอุปกรณ์ที่เชื่อมต่อใหม่
Tradefed ใช้การอ้างอิงนั้นและรวมไว้ในการใช้งานอินเตอร์เฟซอุปกรณ์ของตัวเอง ITestDevice เพื่อให้บริการขั้นสูงมากขึ้น แต่ IDevice พื้นฐานคืออุปกรณ์ที่มาจาก ddmlib
เสมอ
ซึ่งหมายความว่าหากมีการเชื่อมต่ออุปกรณ์ใหม่ ระบบจะสร้าง ITestDevice ใหม่และเชื่อมโยงกับ IDevice เมื่อเกิดกรณีนี้ขึ้นระหว่างการเรียกใช้และมีการใช้ ITestDevice ระบบจะยังคงแทนที่ IDevice ที่เกี่ยวข้องเพื่อให้การทดสอบดำเนินการต่อได้ตามข้อมูลอ้างอิงที่เหมาะสม ซึ่งทำได้อย่างไม่มีสะดุดทุกครั้งที่ยกเลิกการเชื่อมต่อหรือเชื่อมต่ออุปกรณ์อีกครั้ง (เช่น ระหว่างที่รีบูต)