การตรวจหาอุปกรณ์ใน 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 จะสร้าง ID อ้างอิงใหม่ IDevice เพื่อติดตามอุปกรณ์ที่เชื่อมต่อใหม่

Tradefed ใช้ข้อมูลอ้างอิงดังกล่าวและรวมไว้ในการใช้งานอินเทอร์เฟซอุปกรณ์ ของตัวเอง ITestDevice เพื่อให้บริการขั้นสูงยิ่งขึ้น แต่ IDevice พื้นฐานจะเป็น IDevice ที่มาจาก ddmlib เสมอ

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