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

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

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

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

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

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

นี่คือลำดับเหตุการณ์ใน Tradefed:

  1. อุปกรณ์ได้รับการยอมรับว่าเป็น deviceConnected และเปิดให้เข้าร่วมกิจกรรมปกติจาก adb
  2. กิจกรรม Tradefed ภายในจะถูกสร้างขึ้นซึ่งจะ:

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

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

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

  4. หากตรวจสอบ 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 พื้นฐานจะยังคงถูกแทนที่ เพื่อให้การทดสอบสามารถดำเนินการตามการอ้างอิงที่เหมาะสมได้ ซึ่งจะดำเนินการได้อย่างราบรื่นทุกครั้งที่อุปกรณ์ถูกตัดการเชื่อมต่อ/เชื่อมต่อใหม่ (เช่น ระหว่างการรีบูต)