From 6df862713540d76653535aac626932969729e927 Mon Sep 17 00:00:00 2001 From: Jiachen Dong Date: Tue, 20 Sep 2022 01:59:15 +0800 Subject: [PATCH] [harness-simulation] update `deviceInputFields.xml` automatically (#8177) This commit automatically updates the device fields in deviceInputFields.xml, eliminating the need to update them manually. --- tools/harness-simulation/README.md | 2 - .../harness/Web/data/updateDeviceFields.py | 58 +++++++++++++++++++ tools/harness-simulation/harness/install.bat | 2 + 3 files changed, 60 insertions(+), 2 deletions(-) create mode 100644 tools/harness-simulation/harness/Web/data/updateDeviceFields.py diff --git a/tools/harness-simulation/README.md b/tools/harness-simulation/README.md index d7f3a3c7a..602fca53e 100644 --- a/tools/harness-simulation/README.md +++ b/tools/harness-simulation/README.md @@ -34,8 +34,6 @@ Platform developers should modify the THCI implementation and/or the SI implemen 2. Double click the file `harness\install.bat` on Windows. -3. Add the additional simulation device information in `harness\Web\data\deviceInputFields.xml` to `C:\GRL\Thread1.2\Web\data\deviceInputFields.xml`. - ## Run Test Harness on Simulation 1. On the POSIX machine, change directory to the top of the OpenThread repository, and run the following commands. diff --git a/tools/harness-simulation/harness/Web/data/updateDeviceFields.py b/tools/harness-simulation/harness/Web/data/updateDeviceFields.py new file mode 100644 index 000000000..a6830022d --- /dev/null +++ b/tools/harness-simulation/harness/Web/data/updateDeviceFields.py @@ -0,0 +1,58 @@ +#!/usr/bin/env python +# +# Copyright (c) 2022, The OpenThread Authors. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# 3. Neither the name of the copyright holder nor the +# names of its contributors may be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# + +# This script merges the device fields in the argument file to `deviceInputFields.xml` in Harness +# If a device field appears in both files, it will only keep that in the argument file + +import os +import sys +import xml.etree.ElementTree as ET + +HARNESS_XML_PATH = r'%s\GRL\Thread1.2\Web\data\deviceInputFields.xml' % os.environ['systemdrive'] + + +def main(): + tree = ET.parse(HARNESS_XML_PATH) + root = tree.getroot() + added = ET.parse(sys.argv[1]).getroot() + + added_names = set(device.attrib['name'] for device in added.iter('DEVICE')) + # If some devices already exist, remove them first, and then add them back in case of update + removed_devices = filter(lambda x: x.attrib['name'] in added_names, root.iter('DEVICE')) + + for device in removed_devices: + root.remove(device) + for device in added.iter('DEVICE'): + root.append(device) + + tree.write(HARNESS_XML_PATH) + + +if __name__ == '__main__': + main() diff --git a/tools/harness-simulation/harness/install.bat b/tools/harness-simulation/harness/install.bat index 38e86fbc2..99be41c38 100644 --- a/tools/harness-simulation/harness/install.bat +++ b/tools/harness-simulation/harness/install.bat @@ -37,6 +37,8 @@ xcopy /E /Y ..\posix\sniffer_sim\proto %THREADDIR%\Thread_Harness\simulation\Sni %THREADDIR%\Python27\python.exe -m pip install --upgrade pip %THREADDIR%\Python27\python.exe -m pip install -r requirements.txt +%THREADDIR%\Python27\python.exe Web\data\updateDeviceFields.py Web\data\deviceInputFields.xml + set BASEDIR=%THREADDIR%\Thread_Harness %systemdrive%\GRL\Thread1.2\Python27\python.exe -m grpc_tools.protoc -I%BASEDIR% --python_out=%BASEDIR% --grpc_python_out=%BASEDIR% simulation/Sniffer/proto/sniffer.proto