การเชื่อมต่ออุปกรณ์ใหม่จะทำให้เกิดเหตุการณ์อะซิงโครนัสหลายชุดที่ไม่ชัดเจนแต่ควรค่าแก่การทำความเข้าใจ
เชื่อมต่อทางกายภาพ
Tradefed ใช้ไลบรารี ddmlib
(ไลบรารี Java adb
) เพื่อให้การโต้ตอบพื้นฐานกับ 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 เมื่อแสดงรายการอุปกรณ์ผ่าน: tf> list devices
สิ่งสำคัญที่ควรทราบคือเมื่อมีการจัดสรรอุปกรณ์สำหรับการทดสอบ เหตุการณ์ข้างต้นส่วนใหญ่จะไม่เกิดขึ้น และ Tradefed จะกำหนดสถานะของอุปกรณ์เป็นการภายใน ดังนั้นจึงเป็นไปได้ที่อุปกรณ์จะหายไปจาก adb devices
ในขณะที่ยังอยู่ในรายการโดย Tradefed ที่อาจเกิดขึ้นได้ เช่น เมื่อการทดสอบกำลังรีบูตอุปกรณ์ เป็นต้น
อุปกรณ์เสมือนที่เชื่อมต่อกับ adb เชื่อมต่อ
เมื่อมีการสร้างอุปกรณ์เสมือนระยะไกล Tradefed จะเชื่อมต่อกับอุปกรณ์นั้นโดยใช้ adb connect
ซึ่งโดยปกติจะทริกเกอร์อุปกรณ์ที่แสดงใน adb devices
เป็น <some ip>:<port number>
และจะเป็นไปตามลำดับเดียวกันกับอุปกรณ์ที่เชื่อมต่อทางกายภาพ
การติดตามอุปกรณ์เมื่อมีเหตุการณ์อุปกรณ์เชื่อมต่อเกิดขึ้น
เมื่อ deviceConnected
เกิดขึ้น ddmlib
จะสร้าง IDevice อ้างอิงใหม่เพื่อติดตามอุปกรณ์ที่เชื่อมต่อใหม่
Tradefed ใช้การอ้างอิงนั้นและรวมเข้ากับการใช้งานอินเทอร์เฟซอุปกรณ์ ITestDevice ของตัวเองเพื่อให้บริการขั้นสูงยิ่งขึ้น แต่ IDevice พื้นฐานนั้นมาจาก ddmlib
เสมอ
ซึ่งหมายความว่าหากมีการเชื่อมต่ออุปกรณ์ใหม่ ITestDevice ใหม่จะถูกสร้างขึ้นและเชื่อมโยงกับ IDevice เมื่อสิ่งนี้เกิดขึ้นระหว่างการเรียกใช้และมีการใช้ ITestDevice IDevice พื้นฐานจะยังคงถูกแทนที่ เพื่อให้การทดสอบสามารถดำเนินการตามการอ้างอิงที่เหมาะสมได้ ซึ่งจะดำเนินการได้อย่างราบรื่นทุกครั้งที่อุปกรณ์ถูกตัดการเชื่อมต่อ/เชื่อมต่อใหม่ (เช่น ระหว่างการรีบูต)