การตรวจหาอุปกรณ์ใน Tradefed

การเชื่อมต่ออุปกรณ์ใหม่จะทริกเกอร์ชุดเหตุการณ์ที่เกิดขึ้นไม่พร้อมกันซึ่งไม่ชัดเจนแต่ควรทำความเข้าใจ

เชื่อมต่อทางกายภาพ

Tradefed ใช้ไลบรารี ddmlib (ไลบรารี adb ของ Java) เพื่อให้บริการการโต้ตอบพื้นฐานกับ adb และอุปกรณ์ ส่วนหนึ่งคืออินเทอร์เฟซ IDeviceChangeListener ที่ช่วยให้รับเหตุการณ์ใหม่ของอุปกรณ์ได้ เช่น

  • deviceConnected: เมื่อ adb พบอุปกรณ์ใหม่
  • deviceDisconnected: เมื่ออุปกรณ์ไม่ได้รายงานไปยัง adb อีกต่อไป
  • deviceChanged: เมื่อสถานะอุปกรณ์ที่สำคัญเกิดขึ้น (เช่น อุปกรณ์ออฟไลน์หรืออุปกรณ์ออนไลน์)

เหตุการณ์เหล่านี้เพียงพอในระดับ adb ในการตัดสินใจว่าอุปกรณ์เชื่อมต่ออยู่ ออนไลน์ หรือออฟไลน์ แต่สำหรับชุดทดสอบ เราต้องการสถานะที่ดีกว่านี้เพื่อให้มั่นใจว่าอุปกรณ์พร้อมที่จะเริ่มการทดสอบจริงๆ และไม่ควรได้รับผลกระทบจากสถานะที่อาจไม่เสถียรซึ่งอาจเกิดขึ้นกับอุปกรณ์ที่เพิ่งเชื่อมต่อ

ลำดับเหตุการณ์ใน Tradefed มีดังนี้

  1. อุปกรณ์ได้รับการจดจำเป็น deviceConnected และเปิดรับเหตุการณ์ปกติจาก adb
  2. ระบบจะสร้างกิจกรรม Tradefed ภายในที่จะทําสิ่งต่อไปนี้

    • ตรวจสอบว่าระบบรู้จักอุปกรณ์แล้วหรือยัง โดย Tradefed จะเก็บข้อมูลอ้างอิงภายในสำหรับอุปกรณ์บางเครื่อง (โดยเฉพาะอุปกรณ์ที่กําลังจัดสรรและทำการทดสอบอยู่) เพื่อไม่ให้ TF สูญเสียการติดตามอุปกรณ์แบบสุ่ม
    • ตรวจสอบว่าอุปกรณ์เป็น ONLINE หรือ OFFLINE
  3. ในกรณีที่อุปกรณ์เป็น

    • OFFLINE: ระบบจะเปลี่ยนสถานะของอุปกรณ์เป็นCONNECTED_OFFLINE สถานะ Tradefed ซึ่งยังไม่อนุญาตให้อุปกรณ์ทำการทดสอบ หากอุปกรณ์ออนไลน์ในภายหลัง อุปกรณ์จะเข้าสู่วงจร ONLINE หากเราได้รับเหตุการณ์ deviceDisconnect ระบบจะนำอุปกรณ์ออกจากรายการ

    • ONLINE (ตามที่ adb เห็น): ระบบจะตั้งค่าสถานะของอุปกรณ์เป็น CONNECTED_ONLINE และจะตรวจสอบความพร้อมใช้งานของอุปกรณ์สำหรับการทดสอบการจัดสรร: checking_availability

  4. หากการตรวจสอบ 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 พื้นฐานคืออุปกรณ์ที่มาจาก ddmlib เสมอ

ซึ่งหมายความว่าหากมีการเชื่อมต่ออุปกรณ์ใหม่ ระบบจะสร้าง ITestDevice ใหม่และเชื่อมโยงกับ IDevice เมื่อเกิดกรณีนี้ขึ้นระหว่างการเรียกใช้และมีการใช้ ITestDevice ระบบจะยังคงแทนที่ IDevice ที่เกี่ยวข้องเพื่อให้การทดสอบดำเนินการต่อได้ตามข้อมูลอ้างอิงที่เหมาะสม ซึ่งจะดำเนินการได้อย่างราบรื่นทุกครั้งที่อุปกรณ์ตัดการเชื่อมต่อ/เชื่อมต่อใหม่ (เช่น ในระหว่างการรีบูต)