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

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