Kiểm thử mạng Thread bằng tính năng trực quan hoá

1. Giới thiệu

5abd22afa2f2ee9a.pngS

Thread, OpenThread, OTNS và Silk là gì?

Thread là một giao thức mạng lưới không dây không dây công suất thấp dựa trên IP, cho phép giao tiếp an toàn giữa các thiết bị và giữa các thiết bị. Mạng Thread có thể thích ứng với những thay đổi về cấu trúc liên kết để tránh một điểm lỗi.

OpenThread do Google phát hành là một cách triển khai nguồn mở của Thread. Mặc dù có kích thước mã và mức sử dụng bộ nhớ nhỏ, nhưng OpenThread hỗ trợ tất cả tính năng được xác định trong Thông số kỹ thuật luồng.

Bạn có thể sử dụng Trình mô phỏng mạng OpenThread (OTNS) để mô phỏng mạng Thread bằng cách chạy các nút OpenThread mô phỏng trên nền tảng posix. OTNS cung cấp giao diện Web (OTNS-Web) dễ sử dụng để trực quan hoá và vận hành mạng Thread mô phỏng.

Silk là một nền tảng kiểm thử hoàn toàn tự động để xác thực chức năng, tính năng và hiệu suất hệ thống của OpenThread với các thiết bị thực.

Kiến thức bạn sẽ học được

  • Khung xác minh chức năng của OpenThread: Silk
  • Xây dựng OpenThread cho các thiết bị thực có bật tính năng OTNS
  • Sử dụng giao diện OTNS-Web để theo dõi trạng thái của mạng Thread hình thành bằng cách chạy các trường hợp kiểm thử Silk

Lớp học lập trình này tập trung vào việc sử dụng Silk với OTNS. Các tính năng khác của Silk và OTNS sẽ không được đề cập.

Bạn cần có

Phần cứng:

  • 6 Bảng mạch bán dẫn Bắc Âu nRF52840 dev
  • 6 cáp USB sang Micro-USB để kết nối các bo mạch
  • bộ chia USB

Phần mềm:

Điều kiện tiên quyết:

2. Điều kiện tiên quyết

Hoàn thành các lớp học lập trình cơ bản trước đây

Kiểm tra các điều kiện tiên quyết của gói

Hãy đảm bảo tất cả các điều kiện tiên quyết đều được đáp ứng.

  1. Chạy which otns để kiểm tra xem tệp thực thi otns có tìm kiếm được trong $PATH hay không.
  2. Chạy which wpantund để đảm bảo bạn có thể sử dụng wpantund.
  3. Đảm bảo rằng các gói chuỗi công cụ ARM GNU, J-Link và nrfjprog đều có sẵn.

Lưu ý: Vui lòng tham khảo các tài liệu được liên kết để xem hướng dẫn về cách thiết lập. Điều kiện tiên quyết số 1 là ở bài viết Mô phỏng mạng Thread bằng OTNS và các trường khác là ở bài viết Tạo mạng Thread bằng các bảng nRF52840 và OpenThread.

3. Thiết lập lụa

Để sao chép Silk và thiết lập môi trường, hãy chạy các lệnh sau trong thư mục nguồn của bạn:

$ git clone https://github.com/openthread/silk.git
$ cd silk
$ ./bootstrap.sh
$ sudo make install-cluster

Xác định tệp cấu hình phần cứng

Để cho phép Silk thu thập các tài nguyên phần cứng kiểm thử hiện có được kết nối với máy của bạn, hãy xác định tệp hwconfig.ini ở định dạng sau:

[DEFAULT]
ClusterID: 0
LayoutCenter: 300, 300
LayoutRadius: 100

[Dev-8A7D]
HwModel: Nrf52840
HwRev: 1.0
InterfaceSerialNumber: E1A5012E8A7D
USBInterfaceNumber: 1
DutSerial: 683536778

Một công cụ có tên usbinfo được cài đặt như một phần của Silk. Công cụ này có thể dùng để tìm Số sê-ri của giao diện và Số giao diện USB. DutSerial là số SN được in trên chip hoặc được usbinfo hiển thị cho các sản phẩm J-Link.

Các trường LayoutCenterLayoutRadius trong phần [DEFAULT] xác định hình dạng của bố cục khi các thiết bị được hiển thị trên giao diện người dùng web. Việc đặt các biến đó thành các giá trị trình bày ở đây có thể là một điểm khởi đầu tốt.

Theo đó, tệp này xác định một phần cho mỗi thiết bị kiểm thử và cung cấp thông tin phần cứng có liên quan.

4. Biên dịch OpenThread khi bật OTNS

Hình ảnh toà nhà và việc nhấp nháy

Theo mặc định, các thiết bị OpenThread không phát đi các thông báo liên quan đến OTNS. Để cho phép các bảng nhà phát triển phát thông báo trạng thái đến các giao diện cần thiết cho việc trực quan hoá OTNS, hãy chạy lệnh sau trong thư mục nguồn OpenThread để tạo hình ảnh FTD và chuyển đổi hình ảnh đó sang định dạng hex.

$ git clone https://github.com/openthread/ot-nrf528xx.git --recursive
$ cd ot-nrf528xx
$ ./script/bootstrap
$ ./script/build nrf52840 USB_trans -DOT_COMMISSIONER=ON -DOT_JOINER=ON -DOT_OTNS=ON
$ cd ./build/bin
$ arm-none-eabi-objcopy -O ihex ot-ncp-ftd ot-ncp-ftd.hex

Để cài đặt ROM bảng, hãy làm theo hướng dẫn trong bước 4 của Lớp học lập trình về xây dựng mạng Thread để sử dụng nrfjprog. Sau đó, kết nối tất cả các bo mạch qua cổng USB nRF với máy chủ. Cùng một bộ cáp USB sang Micro-USB có thể được ngắt kết nối từ các cổng J-Link và được kết nối với các cổng USB nRF của bảng phát triển nRF52840. Do đó, chỉ với 6 cáp này là có thể thực hiện kiểm thử. Để tránh sự phiền hà, hãy sử dụng 12 cáp và kết nối với cả hai cổng.

5. Chạy máy chủ OTNS ở chế độ thực

Việc chạy OTNS với các tham số mặc định cho phép người dùng mô phỏng mạng Thread. Để sử dụng trình phân tích cú pháp làm công cụ trực quan hoá cho một mạng thực tế thực tế, hãy chạy trình chạy bằng:

otns -raw -real -ot-cli otns-silk-proxy

Các đối số này cho OTNS biết rằng thông báo gRPC và UDP mô tả cách trực quan hoá mạng Thread, thay vì chạy nhiều quy trình ot-cli để mô phỏng mạng. Trình duyệt của bạn sẽ tự động mở trang hiển thị với một canvas trống.

4dd5b41bf7e71334.pngS

6. Chạy các trường hợp kiểm thử Silk có hỗ trợ OTNS

Silk là một nền tảng kiểm thử hoàn toàn tự động dùng để xác thực chức năng, tính năng và hiệu suất hệ thống của OpenThread với các thiết bị thực. Hướng dẫn trong dự án README trình bày cách sử dụng tệp này.

Tệp silk_run_test.py nằm tại silk/unit_tests sẽ mang đến cho bạn một khởi đầu thuận lợi. Silk hỗ trợ OTNS khi chạy một trường hợp kiểm thử. Vì dịch vụ ở chế độ thực OTNS đã chạy cục bộ, nên chúng ta chỉ cần sửa đổi tệp silk_run_test.py với các vị trí mong muốn cho tệp nhật ký đầu ra, tập lệnh kiểm tra đầu vào và tệp hwconfig.ini. Đối số -s localhost yêu cầu Silk gửi thông báo OTNS tới localhost.

Ví dụ: bạn có thể chạy chương trình kiểm thử có tên ot_test_form_network.py bằng cách sửa đổi tệp silk_run_test.py như sau. /opt/openthread_test/ là đường dẫn mặc định mà Silk sử dụng cho đầu ra nhật ký và tệp cấu hình, nhưng bạn có thể dùng đường dẫn bất kỳ.

silk_run_test.py

import datetime
import os

from silk.tests import silk_run

RESULT_LOG_PATH = '/opt/openthread_test/results/' + 'silk_run_' + \
                  datetime.datetime.today().strftime('%m-%d') + '/'
CONFIG_PATH = '/opt/openthread_test/'

os.chdir('~/src/silk/silk/tests/')

timestamp = datetime.datetime.today().strftime('%m-%d-%H:%M')

run_log_path = RESULT_LOG_PATH + 'test_run_on_' + timestamp + '/'

argv = [
    'tests/silk_run.py',
    '-v2',
    '-c', CONFIG_PATH + 'hwconfig.ini',
    '-d', run_log_path,
    '-s', 'localhost',
    'ot_test_form_network.py'
]

silk_run.SilkRunner(argv=argv)

Hình ảnh cấu trúc liên kết của mạng đã tạo sẽ xuất hiện trên giao diện người dùng web của OTNS.

ee443b66e0a6620b.png

Góc trên cùng bên trái hiện số liệu thống kê về hình ảnh trực quan, phiên bản còn thiếu và tiêu đề thử nghiệm. Góc dưới cùng bên trái có các tuỳ chọn điều khiển cửa sổ nhật ký hiển thị ở bên phải. Ban đầu, các nút được thêm vào nhưng chưa có mạng nào được hình thành. Khi quá trình kiểm thử diễn ra, các chế độ và vai trò của mỗi nút sẽ thay đổi và các liên kết sẽ được tạo.

5c38e2c72519e620.pngS

7. Xin chúc mừng

Xin chúc mừng! Bạn đã chạy thành công một quy trình kiểm thử Silk trên các thiết bị Thread thực và trực quan hoá nó bằng OTNS!

Bạn đã thực thi quy trình kiểm thử Silk bằng các bảng phát triển được cài đặt ROM bằng chương trình cơ sở có hỗ trợ OTNS. Các hội đồng này sẽ báo cáo trạng thái của mình cho một máy chủ Silk. Máy chủ này sẽ giám sát và tổng hợp tất cả thông tin rồi gửi đến dịch vụ OTNS cùng với các thông tin kiểm thử khác. OTNS chạy ở chế độ thực sẽ trực quan hoá mạng Thread trên giao diện web.

Tiếp theo là gì?

Hãy thử chạy các trường hợp kiểm thử OpenThread khác có trong gói Silk.

Tài liệu đọc thêm

Hãy truy cập openthread.ioSilk để tham khảo nhiều tài nguyên OpenThread.

Tài liệu tham khảo