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