הגדרת אוטומציה של אישורים

כדי להפוך את בדיקות ההסמכה לאוטומטיות, נדרשת הגדרה נוספת.

כל שלבי ההתקנה וההגדרה שבהמשך מתבצעים במחשב Windows שבו מופעלת תוכנת GRL Test Harness. לפני שממשיכים, צריך להוריד ולהתקין את GRL Thread Test Harness העדכני.

אחרי ההתקנה, יש שתי שיטות אוטומציה למכשיר שנבדק (DUT):

  1. OpenThread Harness Automation Tool
  2. מצב אוטומטי של מכשיר בבדיקה (DUT) ב-Test Harness

OpenThread Harness Automation Tool

התקנה

  1. מתקינים את התוכנה הבאה:
    • ‫Python 2.7
    • ‫Git for Windows (מומלץ מאוד להשתמש בתמיכה ב-Bash)
  2. משכפלים את מאגר OpenThread כדי לקבל את סקריפטי האוטומציה:
    git clone https://github.com/openthread/openthread
    
  3. מתקינים את הדרישות של Python:
    cd tools/harness-automation
    pip install -r requirements.txt
    
  4. מתקינים את Google Chrome ואת ChromeDriver.

הגדרה

  1. יוצרים קובץ תצורה לכלי האוטומציה:
    cp autothreadharness/settings_sample.py autothreadharness/settings.py
    
  2. מעדכנים את קובץ התצורה החדש בהתאם להוראות בקובץ.
  3. מוסיפים את הפרמטר הבא לקובץ התצורה של Test Harness, שנמצא במיקום C:\GRL\Thread1.1\Config\Configuration.ini:
    BrowserAutoNavigate = False

תמיכה בסביבות בדיקה מעורבות

כלי האוטומציה של Harness תומך גם בסביבות בדיקה מעורבות, שבהן מכשירי ההפניה שמשמשים בכל מקרה בדיקה הם קבוצה מעורבת של מכשירים ולא כולם אותו מכשיר. לדוגמה, במקום להשתמש ב-32 לוחות TI CC2538 שמריצים OpenThread לכל תרחישי הבדיקה, אפשר לשלב בין כל ארבעת מכשירי העזר של Thread לכל תרחיש בדיקה לפי הצורך.

כדי להשתמש בסביבות בדיקה מעורבות, צריך לבצע הגדרה נוספת:

  1. מוסיפים את הפרמטר הנוסף הבא לקובץ ההגדרות של Test Harness, שנמצא בנתיב C:\GRL\Thread1.1\Config\Configuration.ini:
    EnableDeviceSelection = True
  2. מורידים את קובץ התצורה של הטופולוגיה מ-Thread Group. צריך להוסיף את הקובץ הזה בשם TopologyConfig.txt לתיקייה C:\GRL\Thread1.1\Thread_Harness\TestScripts. בקובץ הזה מפורט מכשיר הייחוס שבו צריך להשתמש לכל תפקיד בכל תרחיש בדיקה.

אפשר לשנות את קובץ הגדרות הטופולוגיה שסופק על ידי Thread Group כדי להשתמש בהגדרות אחרות של מיטה מעורבת, אבל כדי לקבל אישור רשמי צריך להשתמש בהגדרה המקורית.

הערכים התקינים לשימוש במכשירים להשוואה בקובץ התצורה של הטופולוגיה הם:

הערך בקובץ התצורה של הטופולוגיה מכשיר להתייחסות במסגרת הבדיקה
ARM ‫ARM: NXP FRDM-K64F עם Firefly 6LoWPAN Shield
NXP ‫NXP(Freescale): USB-KW24D512 Dongles
OpenThread OpenThread: TI CC2538DK
SiLabs ‫Silabs: EM358x USB Stick

כל רשומה של תרחיש בדיקה בקובץ התצורה של הטופולוגיה צריכה להיות בשורה נפרדת ובפורמט של זוגות role:device באופן הבא:

5.3.10-Leader:NXP,Router_1:OpenThread,BorderRouter:OpenThread,MED_1:ARM

מצב בדיקה אוטומטית של מכשיר בבדיקה

תוכנת GRL Test Harness מספקת תכונה מתקדמת של גילוי אוטומטי (Auto DUT) שמאיצה את תהליך האימות של ספקי מחסנית הפניות של Thread.

‫OpenThread מספק דוגמה של ממשק בקר מארח של Thread‏ (THCI) שמאפשר ל-Test Harness לשלוט ברכיב או במוצר כאילו הם אחת מפלטפורמות ההפניה. בהתאם למאפיינים של היציאה הטורית בפלטפורמה הספציפית שלכם, יכול להיות ש-DUT:

פועל כפלטפורמת ההפניה הקיימת של OpenThread

אם יציאת הטורית של ה-DUT פועלת בהגדרות של 115200 8-N-1, והמכשיר מגיב בצורה נכונה אחרי כל איפוס פיזי של המכשיר (לדוגמה, כדי לאשר את החיבור התקין של המכשיר למחשב Windows), הפלטפורמה יכולה להשתמש בכלי OpenThread THCI. הכלי הזה מאפשר למכשיר לפעול כפלטפורמת ההפניה של OpenThread במהלך הבדיקה.

  1. אם GRL Test Harness פתוח, סוגרים אותו.
  2. מצמידים את המכשיר למחשב Windows.
  3. מוצאים את מזהה החומרה של היציאה הטורית של המכשיר באמצעות מודול pySerial של Python:
    1. מתקינים את pySerial במחשב Windows.
    2. משתמשים ב-Python בשורת הפקודה של Windows כדי למנות את כל מזהי החומרה (VID ו-PID) של מכשירים שמחוברים למכונה. בפלט הזה, מכשיר אחד מחובר עם מזהה VID=1366 ו-PID=1015:
      python -m serial.tools.list_ports -v
      COM10
          desc: USB Serial Port (COM10)
          hwid: USB\VID_1366+PID_1015+MI_00
    3. אם אתם כבר יודעים מהו יציאת ה-COM, אתם יכולים להשתמש בפקודה אחרת. לדוגמה, אם יציאת ה-COM היא COM10:
      python -c "import serial.tools.list_ports;print [ports[2] for ports in serial.tools.list_ports.comports() if ports[0] == 'COM10']"
      ['USB\VID_1366+PID_1015+MI_00']
  4. מעדכנים את רשימת מכשירי הזהב:
    1. פתיחת C:\GRL\Thread1.1\Config\Configuration.ini.
    2. מעדכנים את קבוצת OpenThread במערך GoldenDeviceHardwareIds עם ה-VID וה-PID של המכשירים:
      GoldenDeviceHardwareIds = {
      'NXP': ['VID:PID=1FC9:0300','VID:PID=15A2:0300','VID:PID=1366:1015'],
      'SiLabs': 'VID:PID=10C4:8A5E',
      'ARM': 'VID:PID=0D28:0204',
      'OpenThread':['VID:PID=10C4:EA60','VID:PID=1366:1015']}
  5. מפעילים את המצב האוטומטי של DUT.

פלטפורמת הפניה חדשה

אם היציאה הטורית של ה-DUT לא פועלת בהגדרות הנכונות של היציאה הטורית, או אם המכשיר לא מגיב בצורה נכונה אחרי איפוס פיזי (מוציא קוד לא קריא תוך 3-6 שניות אחרי האיפוס), אפשר להתאים אישית את OpenThread THCI כדי להתייחס למכשיר כאל פלטפורמה חדשה ב-Test Harness.

לדוגמה, כדי להתאים אישית את THCI באמצעות פלטפורמת Nordic Semiconductor nRF52840:

  1. אם GRL Test Harness פתוח, סוגרים אותו.
  2. משנים את /tools/harness-thci/OpenThread.py בהתאם למאפייני ה-UART של מכשיר היעד. השינויים עשויים להיות שונים במכשירי היעד. במקרה של פלטפורמת Nordic nRF52840:

    1. משנים את השם של הקובץ OpenThread.py ל-nRF52840.py.
    2. שינוי שלושת המופעים הראשונים של OpenThread ל-nRF52840:

      >> Device : nRF52840 THCI
      >> Class : nRF52840
      
      class nRF52840(IThci):
      
    3. משנים את הפרמטרים של היציאה הטורית:

      def _connect(self):
          print 'My port is %s' % self.port
          if self.port.startswith('COM'):
              self.handle = serial.Serial(self.port, 115200, timeout=0)
              time.sleep(1)
              self.handle.write('\r\n')
              time.sleep(0.1)
              self._is_net = False
          elif ':' in self.port:
              host, port = self.port.split(':')
              self.handle = socket.create_connection((host, port))
              self.handle.setblocking(0)
              self._is_net = True
          else:
              raise Exception('Unknown port schema')
          self.UIStatusMsg = self.getVersionNumber()
    4. שינוי זמן השינה כדי למנוע את ההשפעה של פלט קוד לא קריא אחרי איפוס המכשיר:

      def powerDown(self):
          """power down the Thread device"""
          print '%s call powerDown' % self.port
          self._sendline('reset')
          self.isPowerDown = True
          time.sleep(8)  # New addition
      
      def reboot(self):
          """reset and rejoin to Thread Network without any timeout
      
          Returns:
              True: successful to reset and rejoin the Thread Network
              False: fail to reset and rejoin the Thread Network
          """
          print '%s call reboot' % self.port
          try:
              self._sendline('reset')
              self.isPowerDown = True
              time.sleep(8)  # Updated from 3 to 8
      
      def reset(self):
          """factory reset"""
          print '%s call reset' % self.port
          try:
              self._sendline('factoryreset')
              time.sleep(8)  # Updated from 3 to 8
              self._read()
      
      def resetAndRejoin(self, timeout):
          """reset and join back Thread Network with a given timeout delay
      
          Args:
              timeout: a timeout interval before rejoin Thread Network
      
          Returns:
              True: successful to reset and rejoin Thread Network
              False: fail to reset and rejoin the Thread Network
          """
          print '%s call resetAndRejoin' % self.port
          print timeout
          try:
              self._sendline('reset')
              self.isPowerDown = True
              time.sleep(timeout)
              if timeout < 8:      # Sleep a bit longer if the timeout is short
                  time.sleep(8 - timeout)
  3. מעתיקים את הקובץ nRF52840.py שערכתם אל C:\GRL\Thread1.1\Thread_Harness\THCI

  4. מוסיפים את פרטי הפלטפורמה החדשים ל-Test Harness:

    1. יוצרים סמל (בפורמט png או jpg) כדי להבדיל בקלות בין הפלטפורמה שלכם ומעתיקים אותו אל C:\GRL\Thread1.1\Web\images.
    2. מעדכנים את C:\GRL\Thread1.1\Web\data\deviceInputFields.xml עם קטע חדש של DEVICE, כאשר הפרמטר thumbnail הוא קובץ הסמל:

      <DEVICE name="nRF52840" thumbnail="nRF52840.jpg" description ="nRF52840: Nordic" THCI="nRF52840">
          <ITEM label="Serial Line"
                type="text"
                forParam="SerialPort"
                validation="COM"
                hint="eg: COM1">COM
          </ITEM>
          <ITEM label="Speed"
                type="text"
                forParam="SerialBaudRate"
                validation="baud-rate"
                hint="eg: 115200">115200
          </ITEM>
      </DEVICE>
      
  5. מצמידים את המכשיר למחשב Windows.

  6. איתור מזהה החומרה של היציאה הסדרתית של המכשיר באמצעות מודול pySerial של Python:

    1. מתקינים את pySerial במחשב Windows.
    2. משתמשים ב-Python בשורת הפקודה של Windows כדי למנות את כל מזהי החומרה (VID ו-PID) של מכשירים שמחוברים למכונה. בפלט הזה, מכשיר אחד מחובר עם מזהה VID=1366 ו-PID=1015:
      python -m serial.tools.list_ports -v
      COM10
          desc: USB Serial Port (COM10)
          hwid: USB\VID_1366+PID_1015+MI_00
    3. אם אתם כבר יודעים מהו יציאת ה-COM, אתם יכולים להשתמש בפקודה אחרת. לדוגמה, אם יציאת ה-COM היא COM10:
      python -c "import serial.tools.list_ports;print [ports[2] for ports in serial.tools.list_ports.comports() if ports[0] == 'COM10']"
      ['USB\VID_1366+PID_1015+MI_00']
  7. מעדכנים את רשימת מכשירי הזהב:

    1. פתיחת C:\GRL\Thread1.1\Config\Configuration.ini.
    2. מוסיפים קבוצת פלטפורמות חדשה במערך GoldenDeviceHardwareIds עם ה-VID וה-PID של המכשיר:
      GoldenDeviceHardwareIds = {
      'NXP': ['VID:PID=1FC9:0300','VID:PID=15A2:0300','VID:PID=1366:1015'],
      'SiLabs': 'VID:PID=10C4:8A5E',
      'ARM': 'VID:PID=0D28:0204',
      'OpenThread':'VID:PID=10C4:EA60',
      'nRF52840': 'VID:PID=1366:1015'}
  8. מפעילים את המצב האוטומטי של DUT.

הפעלת מצב DUT אוטומטי

אחרי שמסיימים את אחת משתי אפשרויות ההגדרה שלמעלה:

  1. פותחים את GRL Test Harness, המכשיר או היציאה יופיעו עכשיו כמכשיר הפניה חדש.
  2. מסמנים את התיבה Enable Auto DUT Device Selection (הפעלת בחירה אוטומטית של מכשיר DUT) מתחת לרשימת החומרה הנתמכת.
  3. בוחרים את לחצן הבחירה הגדרה כמכשיר הנבדק מתחת למכשיר או ליציאה של היעד כדי להגדיר את המכשיר כמכשיר הנבדק.
אישור OT אוטומטי של DUT