Преглед изворни кода

CI: use parallel attribute in CI config file

He Yin Ling пре 6 година
родитељ
комит
81dd9d4e27

+ 178 - 1106
.gitlab-ci.yml

@@ -158,8 +158,9 @@ build_template_app:
     BATCH_BUILD: "1"
     V: "0"
 
-.build_ssc_template: &build_ssc_template
+build_ssc:
   <<: *build_template
+  parallel: 3
   artifacts:
     paths:
       - SSC/ssc_bin
@@ -176,21 +177,10 @@ build_template_app:
     - git clone $SSC_REPOSITORY
     - cd SSC
     - python $CHECKOUT_REF_SCRIPT SSC
-    - MAKEFLAGS= ./ci_build_ssc.sh "${CI_JOB_NAME}" "${IDF_PATH}/.gitlab-ci.yml"
-
-# don't forget to add to dependency to test_template when adding new build_ssc jobs
-build_ssc_00:
-  <<: *build_ssc_template
-
-build_ssc_01:
-  <<: *build_ssc_template
-
-build_ssc_02:
-  <<: *build_ssc_template
+    - MAKEFLAGS= ./ci_build_ssc.sh
 
 # If you want to add new build ssc jobs, please add it into dependencies of `assign_test` and `.test_template`
 
-
 .build_esp_idf_unit_test_template: &build_esp_idf_unit_test_template
   <<: *build_template
   artifacts:
@@ -235,8 +225,9 @@ build_esp_idf_tests_cmake:
     - rm -rf builds output sdkconfig
     - rm $CI_PROJECT_DIR/components/idf_test/unit_test/TestCaseAll.yml
 
-.build_examples_make_template: &build_examples_make_template
+build_examples_make:
   <<: *build_template
+  parallel: 8
   # This is a workaround for a rarely encountered issue with building examples in CI.
   # Probably related to building of Kconfig in 'make clean' stage
   retry: 1
@@ -268,11 +259,12 @@ build_esp_idf_tests_cmake:
     - cd build_examples
     # build some of examples
     - mkdir -p ${LOG_PATH}
-    - ${IDF_PATH}/tools/ci/build_examples.sh "${CI_JOB_NAME}"
+    - ${IDF_PATH}/tools/ci/build_examples.sh
 
 # same as above, but for CMake
-.build_examples_cmake_template: &build_examples_cmake_template
+build_examples_cmake:
   <<: *build_template
+  parallel: 5
   artifacts:
     when: always
     paths:
@@ -301,55 +293,7 @@ build_esp_idf_tests_cmake:
     - cd build_examples_cmake
     # build some of examples
     - mkdir -p ${LOG_PATH}
-    - ${IDF_PATH}/tools/ci/build_examples_cmake.sh "${CI_JOB_NAME}"
-
-build_examples_make_00:
-  <<: *build_examples_make_template
-
-build_examples_make_01:
-  <<: *build_examples_make_template
-
-build_examples_make_02:
-  <<: *build_examples_make_template
-
-build_examples_make_03:
-  <<: *build_examples_make_template
-
-build_examples_make_04:
-  <<: *build_examples_make_template
-
-build_examples_make_05:
-  <<: *build_examples_make_template
-
-build_examples_make_06:
-  <<: *build_examples_make_template
-
-build_examples_make_07:
-  <<: *build_examples_make_template
-
-build_examples_cmake_00:
-  <<: *build_examples_cmake_template
-
-build_examples_cmake_01:
-  <<: *build_examples_cmake_template
-
-build_examples_cmake_02:
-  <<: *build_examples_cmake_template
-
-build_examples_cmake_03:
-  <<: *build_examples_cmake_template
-
-build_examples_cmake_04:
-  <<: *build_examples_cmake_template
-
-build_examples_cmake_05:
-  <<: *build_examples_cmake_template
-
-build_examples_cmake_06:
-  <<: *build_examples_cmake_template
-
-build_examples_cmake_07:
-  <<: *build_examples_cmake_template
+    - ${IDF_PATH}/tools/ci/build_examples_cmake.sh
 
 # If you want to add new build example jobs, please add it into dependencies of `.example_test_template`
 
@@ -1036,9 +980,7 @@ assign_test:
   # gitlab ci do not support match job with RegEx or wildcard now in dependencies.
   # we have a lot build example jobs. now we don't use dependencies, just download all artificats of build stage.
   dependencies:
-    - build_ssc_00
-    - build_ssc_01
-    - build_ssc_02
+    - build_ssc
     - build_esp_idf_tests_make
     - build_esp_idf_tests_cmake
   variables:
@@ -1083,22 +1025,8 @@ assign_test:
       - $BOT_LABEL_EXAMPLE_TEST
   dependencies:
     - assign_test
-    - build_examples_make_00
-    - build_examples_make_01
-    - build_examples_make_02
-    - build_examples_make_03
-    - build_examples_make_04
-    - build_examples_make_05
-    - build_examples_make_06
-    - build_examples_make_07
-    - build_examples_cmake_00
-    - build_examples_cmake_01
-    - build_examples_cmake_02
-    - build_examples_cmake_03
-    - build_examples_cmake_04
-    - build_examples_cmake_05
-    - build_examples_cmake_06
-    - build_examples_cmake_07
+    - build_examples_make
+    - build_examples_cmake
   artifacts:
     when: always
     paths:
@@ -1109,7 +1037,7 @@ assign_test:
   variables:
     TEST_FW_PATH: "$CI_PROJECT_DIR/tools/tiny-test-fw"
     TEST_CASE_PATH: "$CI_PROJECT_DIR/examples"
-    CONFIG_FILE: "$CI_PROJECT_DIR/examples/test_configs/$CI_JOB_NAME.yml"
+    CONFIG_FILE: "$CI_PROJECT_DIR/examples/test_configs/$CI_JOB_NAME_$CI_NODE_INDEX.yml"
     LOG_PATH: "$CI_PROJECT_DIR/TEST_LOGS"
     ENV_FILE: "$CI_PROJECT_DIR/ci-test-runner-configs/$CI_RUNNER_DESCRIPTION/EnvConfig.yml"
   script:
@@ -1143,7 +1071,7 @@ assign_test:
   variables:
     TEST_FW_PATH: "$CI_PROJECT_DIR/tools/tiny-test-fw"
     TEST_CASE_PATH: "$CI_PROJECT_DIR/tools/unit-test-app"
-    CONFIG_FILE: "$CI_PROJECT_DIR/components/idf_test/unit_test/CIConfigs/$CI_JOB_NAME.yml"
+    CONFIG_FILE: "$CI_PROJECT_DIR/components/idf_test/unit_test/CIConfigs/$CI_JOB_NAME_$CI_NODE_INDEX.yml"
     LOG_PATH: "$CI_PROJECT_DIR/TEST_LOGS"
     ENV_FILE: "$CI_PROJECT_DIR/ci-test-runner-configs/$CI_RUNNER_DESCRIPTION/EnvConfig.yml"
 
@@ -1195,9 +1123,7 @@ test_weekend_network:
       - $BOT_LABEL_INTEGRATION_TEST
   dependencies:
     - assign_test
-    - build_ssc_00
-    - build_ssc_01
-    - build_ssc_02
+    - build_ssc
   artifacts:
     when: always
     reports:
@@ -1211,7 +1137,7 @@ test_weekend_network:
     LOG_PATH: "$CI_PROJECT_DIR/$CI_COMMIT_SHA"
     TEST_CASE_FILE_PATH: "$CI_PROJECT_DIR/components/idf_test/integration_test"
     MODULE_UPDATE_FILE: "$CI_PROJECT_DIR/components/idf_test/ModuleDefinition.yml"
-    CONFIG_FILE: "$CI_PROJECT_DIR/components/idf_test/integration_test/CIConfigs/$CI_JOB_NAME.yml"
+    CONFIG_FILE: "$CI_PROJECT_DIR/components/idf_test/integration_test/CIConfigs/$CI_JOB_NAME_$CI_NODE_INDEX.yml"
   script:
     # first test if config file exists, if not exist, exit 0
     - test -e $CONFIG_FILE || exit 0
@@ -1224,7 +1150,7 @@ test_weekend_network:
     - cd auto_test_script
     - python $CHECKOUT_REF_SCRIPT auto_test_script
     # run test
-    - python CIRunner.py -l "$LOG_PATH/$CI_JOB_NAME" -c $CONFIG_FILE -e $LOCAL_ENV_CONFIG_PATH -t $TEST_CASE_FILE_PATH -m $MODULE_UPDATE_FILE
+    - python CIRunner.py -l "$LOG_PATH/$CI_JOB_NAME_$CI_NODE_INDEX" -c $CONFIG_FILE -e $LOCAL_ENV_CONFIG_PATH -t $TEST_CASE_FILE_PATH -m $MODULE_UPDATE_FILE
 
 nvs_compatible_test:
   <<: *test_template
@@ -1251,44 +1177,39 @@ nvs_compatible_test:
     # run test
     - python CIRunner.py -l "$LOG_PATH/$CI_JOB_NAME" -c $CONFIG_FILE -e $LOCAL_ENV_CONFIG_PATH -t $TEST_CASE_FILE_PATH -m $MODULE_UPDATE_FILE
 
-example_test_001_01:
-  <<: *example_test_template
-  tags:
-    - ESP32
-    - Example_WIFI
-
-example_test_001_02:
+example_test_001:
   <<: *example_test_template
+  parallel: 2
   tags:
     - ESP32
     - Example_WIFI
 
-example_test_002_01:
+example_test_002:
   <<: *example_test_template
   image: $CI_DOCKER_REGISTRY/ubuntu-test-env$BOT_DOCKER_IMAGE_TAG
   tags:
     - ESP32
     - Example_ShieldBox_Basic
 
-.example_test_003_01:
+.example_test_003:
   <<: *example_test_template
   tags:
     - ESP32
     - Example_SDIO
 
-example_test_004_01:
+example_test_004:
   <<: *example_test_template
   tags:
     - ESP32
     - Example_CAN
 
-example_test_005_01:
+example_test_005:
   <<: *example_test_template
   tags:
     - ESP32
     - Example_WIFI_BT
 
-example_test_006_01:
+example_test_006:
   <<: *example_test_template
   image: $CI_DOCKER_REGISTRY/ubuntu-test-env$BOT_DOCKER_IMAGE_TAG
   only:
@@ -1298,1203 +1219,354 @@ example_test_006_01:
     - ESP32
     - Example_ShieldBox
 
-example_test_007_01:
+example_test_007:
   <<: *example_test_template
   tags:
     - ESP32
     - Example_I2C_CCS811_SENSOR
 
-UT_001_01:
-  <<: *unit_test_template
-  tags:
-    - ESP32_IDF
-    - UT_T1_1
-
-UT_001_02:
-  <<: *unit_test_template
-  tags:
-    - ESP32_IDF
-    - UT_T1_1
-
-UT_001_03:
-  <<: *unit_test_template
-  tags:
-    - ESP32_IDF
-    - UT_T1_1
-
-UT_001_04:
-  <<: *unit_test_template
-  tags:
-    - ESP32_IDF
-    - UT_T1_1
-
-UT_001_05:
-  <<: *unit_test_template
-  tags:
-    - ESP32_IDF
-    - UT_T1_1
-
-UT_001_06:
-  <<: *unit_test_template
-  tags:
-    - ESP32_IDF
-    - UT_T1_1
-
-UT_001_07:
-  <<: *unit_test_template
-  tags:
-    - ESP32_IDF
-    - UT_T1_1
-
-UT_001_08:
-  <<: *unit_test_template
-  tags:
-    - ESP32_IDF
-    - UT_T1_1
-
-UT_001_09:
-  <<: *unit_test_template
-  tags:
-    - ESP32_IDF
-    - UT_T1_1
-
-UT_001_10:
-  <<: *unit_test_template
-  tags:
-    - ESP32_IDF
-    - UT_T1_1
-
-UT_001_11:
-  <<: *unit_test_template
-  tags:
-    - ESP32_IDF
-    - UT_T1_1
-
-UT_001_12:
-  <<: *unit_test_template
-  tags:
-    - ESP32_IDF
-    - UT_T1_1
-
-UT_001_13:
-  <<: *unit_test_template
-  tags:
-    - ESP32_IDF
-    - UT_T1_1
-
-UT_001_14:
-  <<: *unit_test_template
-  tags:
-    - ESP32_IDF
-    - UT_T1_1
-
-UT_001_15:
+UT_001:
   <<: *unit_test_template
+  parallel: 50
   tags:
     - ESP32_IDF
     - UT_T1_1
 
-UT_001_16:
-  <<: *unit_test_template
-  tags:
-    - ESP32_IDF
-    - UT_T1_1
-
-UT_001_17:
-  <<: *unit_test_template
-  tags:
-    - ESP32_IDF
-    - UT_T1_1
-
-UT_001_18:
+UT_002:
   <<: *unit_test_template
+  parallel: 18
   tags:
     - ESP32_IDF
     - UT_T1_1
+    - psram
 
-UT_001_19:
+UT_003:
   <<: *unit_test_template
+  parallel: 3
   tags:
     - ESP32_IDF
-    - UT_T1_1
+    - UT_T1_SDMODE
 
-UT_001_20:
+UT_004:
   <<: *unit_test_template
+  parallel: 3
   tags:
     - ESP32_IDF
-    - UT_T1_1
+    - UT_T1_SPIMODE
 
-UT_001_21:
+UT_005:
   <<: *unit_test_template
   tags:
     - ESP32_IDF
-    - UT_T1_1
+    - UT_T1_SDMODE
+    - psram
 
-UT_001_22:
+UT_006:
   <<: *unit_test_template
   tags:
     - ESP32_IDF
-    - UT_T1_1
+    - UT_T1_SPIMODE
+    - psram
 
-UT_001_23:
+UT_007:
   <<: *unit_test_template
+  parallel: 4
   tags:
     - ESP32_IDF
-    - UT_T1_1
+    - UT_T1_GPIO
 
-UT_001_24:
+UT_008:
   <<: *unit_test_template
   tags:
     - ESP32_IDF
-    - UT_T1_1
+    - UT_T1_GPIO
+    - psram
 
-UT_001_25:
+UT_009:
   <<: *unit_test_template
+  parallel: 4
   tags:
     - ESP32_IDF
-    - UT_T1_1
+    - UT_T1_PCNT
 
-UT_001_26:
+UT_010:
   <<: *unit_test_template
   tags:
     - ESP32_IDF
-    - UT_T1_1
+    - UT_T1_PCNT
+    - psram
 
-UT_001_27:
+UT_011:
   <<: *unit_test_template
+  parallel: 4
   tags:
     - ESP32_IDF
-    - UT_T1_1
+    - UT_T1_LEDC
 
-UT_001_28:
+UT_012:
   <<: *unit_test_template
   tags:
     - ESP32_IDF
-    - UT_T1_1
+    - UT_T1_LEDC
+    - psram
 
-UT_001_29:
+UT_013:
   <<: *unit_test_template
+  parallel: 4
   tags:
     - ESP32_IDF
-    - UT_T1_1
+    - UT_T2_RS485
 
-UT_001_30:
+UT_014:
   <<: *unit_test_template
   tags:
     - ESP32_IDF
-    - UT_T1_1
+    - UT_T2_RS485
+    - psram
 
-UT_001_31:
+UT_015:
   <<: *unit_test_template
+  parallel: 4
   tags:
     - ESP32_IDF
-    - UT_T1_1
+    - UT_T1_RMT
 
-UT_001_32:
+UT_016:
   <<: *unit_test_template
   tags:
     - ESP32_IDF
-    - UT_T1_1
+    - UT_T1_RMT
+    - psram
 
-UT_001_33:
+UT_017:
   <<: *unit_test_template
+  parallel: 3
   tags:
     - ESP32_IDF
-    - UT_T1_1
+    - EMMC
 
-UT_001_34:
+UT_018:
   <<: *unit_test_template
+  parallel: 5
   tags:
     - ESP32_IDF
     - UT_T1_1
+    - 8Mpsram
 
-UT_001_35:
+UT_019:
   <<: *unit_test_template
+  parallel: 4
   tags:
     - ESP32_IDF
-    - UT_T1_1
+    - Example_SPI_Multi_device
 
-UT_001_36:
+UT_020:
   <<: *unit_test_template
   tags:
     - ESP32_IDF
-    - UT_T1_1
+    - Example_SPI_Multi_device
+    - psram
 
-UT_001_37:
+UT_021:
   <<: *unit_test_template
+  parallel: 4
   tags:
     - ESP32_IDF
-    - UT_T1_1
+    - UT_T2_I2C
 
-UT_001_38:
+UT_022:
   <<: *unit_test_template
   tags:
     - ESP32_IDF
-    - UT_T1_1
+    - UT_T2_I2C
+    - psram
 
-UT_001_39:
+UT_023:
   <<: *unit_test_template
+  parallel: 4
   tags:
     - ESP32_IDF
-    - UT_T1_1
+    - UT_T1_MCPWM
 
-UT_001_40:
+UT_024:
   <<: *unit_test_template
   tags:
     - ESP32_IDF
-    - UT_T1_1
+    - UT_T1_MCPWM
+    - psram
 
-UT_001_41:
+UT_025:
   <<: *unit_test_template
+  parallel: 4
   tags:
     - ESP32_IDF
-    - UT_T1_1
+    - UT_T1_I2S
 
-UT_001_42:
+UT_026:
   <<: *unit_test_template
   tags:
     - ESP32_IDF
-    - UT_T1_1
+    - UT_T1_I2S
+    - psram
 
-UT_001_43:
+UT_027:
   <<: *unit_test_template
+  parallel: 3
   tags:
     - ESP32_IDF
-    - UT_T1_1
+    - UT_T2_1
 
-UT_001_44:
+UT_028:
   <<: *unit_test_template
   tags:
     - ESP32_IDF
-    - UT_T1_1
+    - UT_T2_1
+    - psram
 
-UT_001_45:
+UT_029:
   <<: *unit_test_template
   tags:
     - ESP32_IDF
-    - UT_T1_1
+    - UT_T2_1
+    - 8Mpsram
 
-UT_001_46:
+UT_030:
   <<: *unit_test_template
+  parallel: 5
   tags:
     - ESP32_IDF
     - UT_T1_1
 
-UT_002_01:
-  <<: *unit_test_template
+IT_001:
+  <<: *test_template
+  parallel: 3
   tags:
     - ESP32_IDF
-    - UT_T1_SDMODE
+    - SSC_T1_4
 
-UT_002_02:
-  <<: *unit_test_template
+IT_002:
+  <<: *test_template
   tags:
     - ESP32_IDF
-    - UT_T1_SDMODE
+    - SSC_T1_2
 
-UT_002_03:
-  <<: *unit_test_template
+IT_003:
+  <<: *test_template
+  parallel: 13
   tags:
     - ESP32_IDF
-    - UT_T1_SDMODE
+    - SSC_T2_5
 
-UT_003_01:
-  <<: *unit_test_template
+IT_004:
+  <<: *test_template
   tags:
     - ESP32_IDF
-    - UT_T1_SPIMODE
+    - SSC_T1_APC
 
-UT_003_02:
-  <<: *unit_test_template
+IT_005:
+  <<: *test_template
+  parallel: 2
   tags:
     - ESP32_IDF
-    - UT_T1_SPIMODE
+    - SSC_T1_5
 
-UT_003_03:
-  <<: *unit_test_template
+IT_006:
+  <<: *test_template
+  parallel: 8
   tags:
     - ESP32_IDF
-    - UT_T1_SPIMODE
+    - SSC_T1_6
 
-UT_004_01:
-  <<: *unit_test_template
+IT_007:
+  <<: *test_template
+  parallel: 3
   tags:
     - ESP32_IDF
-    - UT_T1_1
-    - psram
+    - SSC_T1_7
 
-UT_004_02:
-  <<: *unit_test_template
+IT_008:
+  <<: *test_template
   tags:
     - ESP32_IDF
-    - UT_T1_1
-    - psram
+    - SSC_T1_8
 
-UT_004_03:
-  <<: *unit_test_template
+IT_009:
+  <<: *test_template
   tags:
     - ESP32_IDF
-    - UT_T1_1
-    - psram
+    - SSC_T1_3
 
-UT_004_04:
-  <<: *unit_test_template
+IT_010:
+  <<: *test_template
+  parallel: 4
   tags:
     - ESP32_IDF
-    - UT_T1_1
-    - psram
+    - SSC_T5_1
 
-UT_004_05:
-  <<: *unit_test_template
+IT_011:
+  <<: *test_template
   tags:
     - ESP32_IDF
-    - UT_T1_1
-    - psram
+    - SSC_T1_MESH1
 
-UT_004_06:
-  <<: *unit_test_template
+IT_012:
+  <<: *test_template
+  parallel: 2
   tags:
     - ESP32_IDF
-    - UT_T1_1
-    - psram
+    - SSC_T2_MESH1
 
-UT_004_07:
-  <<: *unit_test_template
+IT_013:
+  <<: *test_template
   tags:
     - ESP32_IDF
-    - UT_T1_1
-    - psram
+    - SSC_T3_MESH1
 
-UT_004_08:
-  <<: *unit_test_template
+IT_014:
+  <<: *test_template
   tags:
     - ESP32_IDF
-    - UT_T1_1
-    - psram
+    - SSC_T6_MESH1
 
-UT_004_09:
-  <<: *unit_test_template
+IT_015:
+  <<: *test_template
   tags:
     - ESP32_IDF
-    - UT_T1_1
-    - psram
+    - SSC_T12_MESH1
 
-UT_004_10:
-  <<: *unit_test_template
+IT_016:
+  <<: *test_template
   tags:
     - ESP32_IDF
-    - UT_T1_1
-    - psram
+    - SSC_T50_MESH1
 
-UT_004_11:
-  <<: *unit_test_template
+IT_017:
+  <<: *test_template
   tags:
     - ESP32_IDF
-    - UT_T1_1
-    - psram
+    - SSC_T1_MESH2
 
-UT_004_12:
-  <<: *unit_test_template
-  tags:
-    - ESP32_IDF
-    - UT_T1_1
-    - psram
-
-UT_004_13:
-  <<: *unit_test_template
-  tags:
-    - ESP32_IDF
-    - UT_T1_1
-    - psram
-
-UT_004_14:
-  <<: *unit_test_template
-  tags:
-    - ESP32_IDF
-    - UT_T1_1
-    - psram
-
-UT_004_15:
-  <<: *unit_test_template
-  tags:
-    - ESP32_IDF
-    - UT_T1_1
-    - psram
-
-UT_004_16:
-  <<: *unit_test_template
-  tags:
-    - ESP32_IDF
-    - UT_T1_1
-    - psram
-
-UT_004_17:
-  <<: *unit_test_template
-  tags:
-    - ESP32_IDF
-    - UT_T1_1
-    - psram
-
-UT_004_18:
-  <<: *unit_test_template
-  tags:
-    - ESP32_IDF
-    - UT_T1_1
-    - psram
-
-UT_004_19:
-  <<: *unit_test_template
-  tags:
-    - ESP32_IDF
-    - UT_T1_1
-    - psram
-
-UT_005_01:
-  <<: *unit_test_template
-  tags:
-    - ESP32_IDF
-    - UT_T1_SDMODE
-    - psram
-
-UT_005_02:
-  <<: *unit_test_template
-  tags:
-    - ESP32_IDF
-    - UT_T1_SPIMODE
-    - psram
-
-UT_005_03:
-  <<: *unit_test_template
-  tags:
-    - ESP32_IDF
-    - UT_T1_SPIMODE
-    - psram
-
-UT_006_01:
-  <<: *unit_test_template
-  tags:
-    - ESP32_IDF
-    - UT_T1_GPIO
-
-UT_006_02:
-  <<: *unit_test_template
-  tags:
-    - ESP32_IDF
-    - UT_T1_GPIO
-
-UT_006_03:
-  <<: *unit_test_template
-  tags:
-    - ESP32_IDF
-    - UT_T1_GPIO
-
-UT_006_04:
-  <<: *unit_test_template
-  tags:
-    - ESP32_IDF
-    - UT_T1_GPIO
-
-UT_006_05:
-  <<: *unit_test_template
-  tags:
-    - ESP32_IDF
-    - UT_T1_GPIO
-    - psram
-
-UT_007_01:
-  <<: *unit_test_template
-  tags:
-    - ESP32_IDF
-    - UT_T1_PCNT
-
-UT_007_02:
-  <<: *unit_test_template
-  tags:
-    - ESP32_IDF
-    - UT_T1_PCNT
-
-UT_007_03:
-  <<: *unit_test_template
-  tags:
-    - ESP32_IDF
-    - UT_T1_PCNT
-
-UT_007_04:
-  <<: *unit_test_template
-  tags:
-    - ESP32_IDF
-    - UT_T1_PCNT
-
-UT_007_05:
-  <<: *unit_test_template
-  tags:
-    - ESP32_IDF
-    - UT_T1_PCNT
-    - psram
-
-UT_008_01:
-  <<: *unit_test_template
-  tags:
-    - ESP32_IDF
-    - UT_T1_LEDC
-
-UT_008_02:
-  <<: *unit_test_template
-  tags:
-    - ESP32_IDF
-    - UT_T1_LEDC
-
-UT_008_03:
-  <<: *unit_test_template
-  tags:
-    - ESP32_IDF
-    - UT_T1_LEDC
-
-UT_008_04:
-  <<: *unit_test_template
-  tags:
-    - ESP32_IDF
-    - UT_T1_LEDC
-
-UT_008_05:
-  <<: *unit_test_template
-  tags:
-    - ESP32_IDF
-    - UT_T1_LEDC
-    - psram
-
-UT_009_01:
-  <<: *unit_test_template
-  tags:
-    - ESP32_IDF
-    - UT_T2_RS485
-
-UT_009_02:
-  <<: *unit_test_template
-  tags:
-    - ESP32_IDF
-    - UT_T2_RS485
-
-UT_009_03:
-  <<: *unit_test_template
-  tags:
-    - ESP32_IDF
-    - UT_T2_RS485
-
-UT_009_04:
-  <<: *unit_test_template
-  tags:
-    - ESP32_IDF
-    - UT_T2_RS485
-
-UT_009_05:
-  <<: *unit_test_template
-  tags:
-    - ESP32_IDF
-    - UT_T2_RS485
-    - psram
-
-UT_010_01:
-  <<: *unit_test_template
-  tags:
-    - ESP32_IDF
-    - UT_T1_RMT
-
-UT_010_02:
-  <<: *unit_test_template
-  tags:
-    - ESP32_IDF
-    - UT_T1_RMT
-
-UT_010_03:
-  <<: *unit_test_template
-  tags:
-    - ESP32_IDF
-    - UT_T1_RMT
-
-UT_010_04:
-  <<: *unit_test_template
-  tags:
-    - ESP32_IDF
-    - UT_T1_RMT
-
-UT_010_05:
-  <<: *unit_test_template
-  tags:
-    - ESP32_IDF
-    - UT_T1_RMT
-    - psram
-
-UT_011_01:
-  <<: *unit_test_template
-  tags:
-    - ESP32_IDF
-    - EMMC
-
-UT_011_02:
-  <<: *unit_test_template
-  tags:
-    - ESP32_IDF
-    - EMMC
-
-UT_011_03:
-  <<: *unit_test_template
-  tags:
-    - ESP32_IDF
-    - EMMC
-
-UT_012_01:
-  <<: *unit_test_template
-  tags:
-    - ESP32_IDF
-    - UT_T1_1
-    - 8Mpsram
-
-UT_012_02:
-  <<: *unit_test_template
-  tags:
-    - ESP32_IDF
-    - UT_T1_1
-    - 8Mpsram
-
-UT_012_03:
-  <<: *unit_test_template
-  tags:
-    - ESP32_IDF
-    - UT_T1_1
-    - 8Mpsram
-
-UT_012_04:
-  <<: *unit_test_template
-  tags:
-    - ESP32_IDF
-    - UT_T1_1
-    - 8Mpsram
-
-UT_012_05:
-  <<: *unit_test_template
-  tags:
-    - ESP32_IDF
-    - UT_T1_1
-    - 8Mpsram
-
-UT_013_01:
-  <<: *unit_test_template
-  tags:
-    - ESP32_IDF
-    - Example_SPI_Multi_device
-
-UT_013_02:
-  <<: *unit_test_template
-  tags:
-    - ESP32_IDF
-    - Example_SPI_Multi_device
-
-UT_013_03:
-  <<: *unit_test_template
-  tags:
-    - ESP32_IDF
-    - Example_SPI_Multi_device
-
-UT_013_04:
-  <<: *unit_test_template
-  tags:
-    - ESP32_IDF
-    - Example_SPI_Multi_device
-
-UT_013_05:
-  <<: *unit_test_template
-  tags:
-    - ESP32_IDF
-    - Example_SPI_Multi_device
-    - psram
-
-UT_014_01:
-  <<: *unit_test_template
-  tags:
-    - ESP32_IDF
-    - UT_T2_I2C
-
-UT_014_02:
-  <<: *unit_test_template
-  tags:
-    - ESP32_IDF
-    - UT_T2_I2C
-
-UT_014_03:
-  <<: *unit_test_template
-  tags:
-    - ESP32_IDF
-    - UT_T2_I2C
-
-UT_014_04:
-  <<: *unit_test_template
-  tags:
-    - ESP32_IDF
-    - UT_T2_I2C
-
-UT_014_05:
-  <<: *unit_test_template
-  tags:
-    - ESP32_IDF
-    - UT_T2_I2C
-    - psram
-
-UT_015_01:
-  <<: *unit_test_template
-  tags:
-    - ESP32_IDF
-    - UT_T1_MCPWM
-
-UT_015_02:
-  <<: *unit_test_template
-  tags:
-    - ESP32_IDF
-    - UT_T1_MCPWM
-
-UT_015_03:
-  <<: *unit_test_template
-  tags:
-    - ESP32_IDF
-    - UT_T1_MCPWM
-
-UT_015_04:
-  <<: *unit_test_template
-  tags:
-    - ESP32_IDF
-    - UT_T1_MCPWM
-
-UT_015_05:
-  <<: *unit_test_template
-  tags:
-    - ESP32_IDF
-    - UT_T1_MCPWM
-    - psram
-
-UT_016_01:
-  <<: *unit_test_template
-  tags:
-    - ESP32_IDF
-    - UT_T1_I2S
-
-UT_016_02:
-  <<: *unit_test_template
-  tags:
-    - ESP32_IDF
-    - UT_T1_I2S
-
-UT_016_03:
-  <<: *unit_test_template
-  tags:
-    - ESP32_IDF
-    - UT_T1_I2S
-
-UT_016_04:
-  <<: *unit_test_template
-  tags:
-    - ESP32_IDF
-    - UT_T1_I2S
-
-UT_016_05:
-  <<: *unit_test_template
-  tags:
-    - ESP32_IDF
-    - UT_T1_I2S
-    - psram
-
-UT_017_01:
-  <<: *unit_test_template
-  tags:
-    - ESP32_IDF
-    - UT_T2_1
-
-UT_017_02:
-  <<: *unit_test_template
-  tags:
-    - ESP32_IDF
-    - UT_T2_1
-
-UT_017_03:
-  <<: *unit_test_template
-  tags:
-    - ESP32_IDF
-    - UT_T2_1
-
-UT_017_04:
-  <<: *unit_test_template
-  tags:
-    - ESP32_IDF
-    - UT_T2_1
-
-UT_017_05:
-  <<: *unit_test_template
-  tags:
-    - ESP32_IDF
-    - UT_T2_1
-    - psram
-
-UT_017_06:
-  <<: *unit_test_template
-  tags:
-    - ESP32_IDF
-    - UT_T2_1
-    - 8Mpsram
-
-UT_017_06:
-  <<: *unit_test_template
-  tags:
-    - ESP32_IDF
-    - UT_T1_1
-
-UT_017_07:
-  <<: *unit_test_template
-  tags:
-    - ESP32_IDF
-    - UT_T1_1
-
-UT_601_01:
-  <<: *unit_test_template
-  tags:
-    - ESP32_IDF
-    - UT_T1_1
-
-UT_601_02:
-  <<: *unit_test_template
-  tags:
-    - ESP32_IDF
-    - UT_T1_1
-
-UT_601_03:
-  <<: *unit_test_template
-  tags:
-    - ESP32_IDF
-    - UT_T1_1
-
-UT_601_04:
-  <<: *unit_test_template
-  tags:
-    - ESP32_IDF
-    - UT_T1_1
-
-UT_601_05:
-  <<: *unit_test_template
-  tags:
-    - ESP32_IDF
-    - UT_T1_1
-
-UT_601_06:
-  <<: *unit_test_template
-  tags:
-    - ESP32_IDF
-    - UT_T1_1
-
-UT_601_07:
-  <<: *unit_test_template
-  tags:
-    - ESP32_IDF
-    - UT_T1_1
-
-IT_001_01:
-  <<: *test_template
-  tags:
-    - ESP32_IDF
-    - SSC_T1_4
-
-IT_001_02:
-  <<: *test_template
-  tags:
-    - ESP32_IDF
-    - SSC_T1_4
-
-IT_001_03:
-  <<: *test_template
-  tags:
-    - ESP32_IDF
-    - SSC_T1_4
-
-IT_002_01:
-  <<: *test_template
-  tags:
-    - ESP32_IDF
-    - SSC_T1_2
-
-IT_003_01:
-  <<: *test_template
-  tags:
-    - ESP32_IDF
-    - SSC_T2_5
-
-IT_003_02:
-  <<: *test_template
-  tags:
-    - ESP32_IDF
-    - SSC_T2_5
-
-IT_003_03:
-  <<: *test_template
-  tags:
-    - ESP32_IDF
-    - SSC_T2_5
-
-IT_003_04:
-  <<: *test_template
-  tags:
-    - ESP32_IDF
-    - SSC_T2_5
-
-IT_003_05:
-  <<: *test_template
-  tags:
-    - ESP32_IDF
-    - SSC_T2_5
-
-IT_003_06:
-  <<: *test_template
-  tags:
-    - ESP32_IDF
-    - SSC_T2_5
-
-IT_003_07:
-  <<: *test_template
-  tags:
-    - ESP32_IDF
-    - SSC_T2_5
-
-IT_003_08:
-  <<: *test_template
-  tags:
-    - ESP32_IDF
-    - SSC_T2_5
-
-IT_003_09:
-  <<: *test_template
-  tags:
-    - ESP32_IDF
-    - SSC_T2_5
-
-IT_003_10:
-  <<: *test_template
-  tags:
-    - ESP32_IDF
-    - SSC_T2_5
-
-IT_003_11:
-  <<: *test_template
-  tags:
-    - ESP32_IDF
-    - SSC_T2_5
-
-IT_003_12:
-  <<: *test_template
-  tags:
-    - ESP32_IDF
-    - SSC_T2_5
-
-IT_003_13:
-  <<: *test_template
-  tags:
-    - ESP32_IDF
-    - SSC_T2_5
-
-IT_004_01:
-  <<: *test_template
-  tags:
-    - ESP32_IDF
-    - SSC_T1_APC
-
-IT_005_01:
-  <<: *test_template
-  tags:
-    - ESP32_IDF
-    - SSC_T1_5
-
-IT_005_02:
-  <<: *test_template
-  tags:
-    - ESP32_IDF
-    - SSC_T1_5
-
-IT_006_01:
-  <<: *test_template
-  tags:
-    - ESP32_IDF
-    - SSC_T1_6
-
-IT_006_02:
-  <<: *test_template
-  tags:
-    - ESP32_IDF
-    - SSC_T1_6
-
-IT_006_03:
-  <<: *test_template
-  tags:
-    - ESP32_IDF
-    - SSC_T1_6
-
-IT_006_04:
-  <<: *test_template
-  tags:
-    - ESP32_IDF
-    - SSC_T1_6
-
-IT_006_05:
-  <<: *test_template
-  tags:
-    - ESP32_IDF
-    - SSC_T1_6
-
-IT_006_06:
-  <<: *test_template
-  tags:
-    - ESP32_IDF
-    - SSC_T1_6
-
-IT_006_07:
-  <<: *test_template
-  tags:
-    - ESP32_IDF
-    - SSC_T1_6
-
-IT_006_08:
-  <<: *test_template
-  tags:
-    - ESP32_IDF
-    - SSC_T1_6
-
-IT_007_01:
-  <<: *test_template
-  tags:
-    - ESP32_IDF
-    - SSC_T1_7
-
-IT_007_02:
-  <<: *test_template
-  tags:
-    - ESP32_IDF
-    - SSC_T1_7
-
-IT_007_03:
-  <<: *test_template
-  tags:
-    - ESP32_IDF
-    - SSC_T1_7
-
-IT_008_01:
-  <<: *test_template
-  tags:
-    - ESP32_IDF
-    - SSC_T1_8
-
-IT_009_01:
-  <<: *test_template
-  tags:
-    - ESP32_IDF
-    - SSC_T1_3
-
-IT_010_01:
-  <<: *test_template
-  tags:
-    - ESP32_IDF
-    - SSC_T5_1
-
-IT_010_02:
-  <<: *test_template
-  tags:
-    - ESP32_IDF
-    - SSC_T5_1
-
-IT_010_03:
-  <<: *test_template
-  tags:
-    - ESP32_IDF
-    - SSC_T5_1
-
-IT_010_04:
-  <<: *test_template
-  tags:
-    - ESP32_IDF
-    - SSC_T5_1
-
-IT_011_01:
-  <<: *test_template
-  tags:
-    - ESP32_IDF
-    - SSC_T1_MESH1
-
-IT_011_02:
-  <<: *test_template
-  tags:
-    - ESP32_IDF
-    - SSC_T2_MESH1
-
-IT_011_03:
-  <<: *test_template
-  tags:
-    - ESP32_IDF
-    - SSC_T2_MESH1
-
-IT_011_04:
-  <<: *test_template
-  tags:
-    - ESP32_IDF
-    - SSC_T3_MESH1
-
-IT_011_05:
-  <<: *test_template
-  tags:
-    - ESP32_IDF
-    - SSC_T6_MESH1
-
-IT_011_06:
-  <<: *test_template
-  tags:
-    - ESP32_IDF
-    - SSC_T12_MESH1
-
-IT_011_07:
-  <<: *test_template
-  tags:
-    - ESP32_IDF
-    - SSC_T50_MESH1
-
-IT_011_08:
-  <<: *test_template
-  tags:
-    - ESP32_IDF
-    - SSC_T1_MESH2
-
-IT_012_01:
-  <<: *test_template
-  tags:
-    - ESP32_IDF
-    - SSC_T1_9
-
-IT_012_02:
-  <<: *test_template
+IT_018:
+  <<: *test_template
+  parallel: 2
   tags:
     - ESP32_IDF
     - SSC_T1_9
 
-IT_013_01:
-  <<: *test_template
-  tags:
-    - ESP32_IDF
-    - SSC_T2_2
-
-IT_013_02:
+IT_019:
   <<: *test_template
+  parallel: 2
   tags:
     - ESP32_IDF
     - SSC_T2_2
 
-IT_014_01:
+IT_020:
   <<: *test_template
   tags:
     - ESP32_IDF
     - SSC_T2_3
 
-IT_015_01:
+IT_021:
   <<: *test_template
   tags:
     - ESP32_IDF

+ 0 - 0
components/idf_test/integration_test/CIConfigs/nvs_compatible_test.yml → components/idf_test/integration_test/CIConfigs/nvs_compatible_test_.yml


+ 0 - 2955
components/idf_test/unit_test/InitialConditionAll.yml

@@ -1,2955 +0,0 @@
-initial condition:
-- check cmd set:
-  - ''
-  - - SSC SSC1 op -Q
-    - ['R SSC1 C +CURMODE:2']
-  - - SSC SSC1 ap -Q
-    - ['R SSC1 RE "\+APCONFIG:%%s,%%s,\d+,\d+,\d+,4,"%%(<target_ssid>,<target_password>)']
-  - - SSC SSC1 dhcp -Q -o 2
-    - ['R SSC1 C +DHCP:AP,STARTED']
-  - - SSC SSC1 mac -Q -o 2
-    - [R SSC1 P <target_ap_mac>]
-  force restore cmd set:
-  - ''
-  - - SSC SSC1 reboot
-    - [R SSC1 C !!!ready!!!]
-  - - SSC SSC1 op -S -o 2
-    - ['R SSC1 C +MODE:OK']
-  - - SSC SSC1 dhcp -S -o 2
-    - [R SSC1 C +DHCP]
-  - - SSC SSC1 mac -S -o 2 -m <target_ap_mac>
-    - ['R SSC1 C +MAC:AP,OK']
-  - - SSC SSC1 ap -S -s <target_ssid> -p <target_password> -t <target_auth_enum>
-    - ['R SSC1 C +SAP:OK']
-  initial condition detail: AP mode, DHCP on, will autogen a TC with initial condition
-    APSTA1
-  restore cmd set:
-  - ''
-  - - SSC SSC1 op -S -o 2
-    - ['R SSC1 C +MODE:OK']
-  - - SSC SSC1 dhcp -S -o 2
-    - [R SSC1 C +DHCP]
-  - - SSC SSC1 mac -S -o 2 -m <target_ap_mac>
-    - ['R SSC1 C +MAC:AP,OK']
-  - - SSC SSC1 ap -S -s <target_ssid> -p <target_password> -t <target_auth_enum>
-    - ['R SSC1 C +SAP:OK']
-  restore post cmd set:
-  - ''
-  - - SSC SSC1 soc -T
-    - [R SSC1 C +CLOSEALL]
-  - - SSC SSC1 ram
-    - ['R SSC1 C +FREEHEAP:']
-  script path: InitCondBase.py
-  start: 31.0
-  tag: APM1
-  test script: InitCondBase
-- check cmd set:
-  - ''
-  - - SSC SSC1 op -Q
-    - ['R SSC1 C +CURMODE:2']
-  - - SSC SSC1 ap -Q
-    - ['R SSC1 RE "\+APCONFIG:%%s,%%s,\d+,\d+,\d+,4,"%%(<target_ssid>,<target_password>)']
-  - - SSC SSC1 ap -L
-    - ['R SSC1 RE "\+LSTA:.+,%%s"%%(<pc_ip_wifi>)']
-  - - SSC SSC1 dhcp -Q -o 2
-    - ['R SSC1 C +DHCP:AP,STARTED']
-  - - SSC SSC1 mac -Q -o 2
-    - [R SSC1 P <target_ap_mac>]
-  force restore cmd set:
-  - ''
-  - - SSC SSC1 reboot
-    - [R SSC1 C !!!ready!!!]
-  - - SSC SSC1 op -S -o 2
-    - ['R SSC1 C +MODE:OK']
-  - - SSC SSC1 mac -S -o 2 -m <target_ap_mac>
-    - ['R SSC1 C +MAC:AP,OK']
-  - - SSC SSC1 dhcp -S -o 2
-    - [R SSC1 C +DHCP]
-  - - SSC SSC1 ap -S -s <target_ssid> -p <target_password> -t <target_auth_enum>
-    - ['R SSC1 C +SAP:OK']
-  - - WIFI <pc_wifi_nic> CONN <target_ssid> <target_password> <pc_ip_wifi> <target_auth>
-      <target_encryption>
-    - ['R PC_COM NC ERROR C +WIFICONN:OK']
-  initial condition detail: AP mode, PC join AP, DHCP on, will autogen a TC with initial
-    condition APSTA2
-  restore cmd set:
-  - ''
-  - - SSC SSC1 op -S -o 2
-    - ['R SSC1 C +MODE:OK']
-  - - SSC SSC1 mac -S -o 2 -m <target_ap_mac>
-    - ['R SSC1 C +MAC:AP,OK']
-  - - SSC SSC1 dhcp -S -o 2
-    - [R SSC1 C +DHCP]
-  - - SSC SSC1 ap -S -s <target_ssid> -p <target_password> -t <target_auth_enum>
-    - ['R SSC1 C +SAP:OK']
-  - - WIFI <pc_wifi_nic> CONN <target_ssid> <target_password> <pc_ip_wifi> <target_auth>
-      <target_encryption>
-    - ['R PC_COM NC ERROR C +WIFICONN:OK']
-  restore post cmd set:
-  - ''
-  - - SSC SSC1 soc -T
-    - [R SSC1 C +CLOSEALL]
-  - - SSC SSC1 ram
-    - ['R SSC1 C +FREEHEAP:']
-  script path: InitCondBase.py
-  start: 38.0
-  tag: APM2
-  test script: InitCondBase
-- check cmd set:
-  - ''
-  - - SSC SSC1 op -Q
-    - ['R SSC1 C +CURMODE:2']
-  - - SSC SSC1 ap -Q
-    - ['R SSC1 RE "\+APCONFIG:%%s,%%s,\d+,\d+,\d+,4,"%%(<target_ssid>,<target_password>)']
-  - - SSC SSC1 dhcp -Q -o 2
-    - ['R SSC1 C +DHCP:AP,STARTED']
-  - - SSC SSC1 mac -Q -o 2
-    - [R SSC1 P <target_ap_mac>]
-  force restore cmd set:
-  - ''
-  - - SSC SSC1 reboot
-    - [R SSC1 C !!!ready!!!]
-  - - SSC SSC1 op -S -o 2
-    - ['R SSC1 C +MODE:OK']
-  - - SSC SSC1 dhcp -S -o 2
-    - [R SSC1 C +DHCP]
-  - - SSC SSC1 mac -S -o 2 -m <target_ap_mac>
-    - ['R SSC1 C +MAC:AP,OK']
-  - - SSC SSC1 ap -S -s <target_ssid> -p <target_password> -t <target_auth_enum>
-    - ['R SSC1 C +SAP:OK']
-  initial condition detail: AP mode, will NOT autogen a TC with initial condition
-    APSTA1
-  restore cmd set:
-  - ''
-  - - SSC SSC1 op -S -o 2
-    - ['R SSC1 C +MODE:OK']
-  - - SSC SSC1 dhcp -S -o 2
-    - [R SSC1 C +DHCP]
-  - - SSC SSC1 mac -S -o 2 -m <target_ap_mac>
-    - ['R SSC1 C +MAC:AP,OK']
-  - - SSC SSC1 ap -S -s <target_ssid> -p <target_password> -t <target_auth_enum>
-    - ['R SSC1 C +SAP:OK']
-  restore post cmd set:
-  - ''
-  - - SSC SSC1 soc -T
-    - [R SSC1 C +CLOSEALL]
-  - - SSC SSC1 ram
-    - ['R SSC1 C +FREEHEAP:']
-  script path: InitCondBase.py
-  start: 31.0
-  tag: APO1
-  test script: InitCondBase
-- check cmd set:
-  - ''
-  - - SSC SSC1 op -Q
-    - ['R SSC1 C +CURMODE:2']
-  - - SSC SSC1 ap -Q
-    - ['R SSC1 RE "\+APCONFIG:%%s,%%s,\d+,\d+,\d+,4,"%%(<target_ssid>,<target_password>)']
-  - - SSC SSC1 ap -L
-    - ['R SSC1 RE "\+LSTA:.+,%%s"%%(<pc_ip_wifi>)']
-  - - SSC SSC1 dhcp -Q -o 2
-    - ['R SSC1 C +DHCP:AP,STARTED']
-  - - SSC SSC1 mac -Q -o 2
-    - [R SSC1 P <target_ap_mac>]
-  force restore cmd set:
-  - ''
-  - - SSC SSC1 reboot
-    - [R SSC1 C !!!ready!!!]
-  - - SSC SSC1 op -S -o 2
-    - ['R SSC1 C +MODE:OK']
-  - - SSC SSC1 mac -S -o 2 -m <target_ap_mac>
-    - ['R SSC1 C +MAC:AP,OK']
-  - - SSC SSC1 dhcp -S -o 2
-    - [R SSC1 C +DHCP]
-  - - SSC SSC1 ap -S -s <target_ssid> -p <target_password> -t <target_auth_enum>
-    - ['R SSC1 C +SAP:OK']
-  - - WIFI <pc_wifi_nic> CONN <target_ssid> <target_password> <pc_ip_wifi> <target_auth>
-      <target_encryption>
-    - ['R PC_COM NC ERROR C +WIFICONN:OK']
-  initial condition detail: AP mode, will NOT autogen a TC with initial condition
-    APSTA2
-  restore cmd set:
-  - ''
-  - - SSC SSC1 op -S -o 2
-    - ['R SSC1 C +MODE:OK']
-  - - SSC SSC1 mac -S -o 2 -m <target_ap_mac>
-    - ['R SSC1 C +MAC:AP,OK']
-  - - SSC SSC1 dhcp -S -o 2
-    - [R SSC1 C +DHCP]
-  - - SSC SSC1 ap -S -s <target_ssid> -p <target_password> -t <target_auth_enum>
-    - ['R SSC1 C +SAP:OK']
-  - - WIFI <pc_wifi_nic> CONN <target_ssid> <target_password> <pc_ip_wifi> <target_auth>
-      <target_encryption>
-    - ['R PC_COM NC ERROR C +WIFICONN:OK']
-  restore post cmd set:
-  - ''
-  - - SSC SSC1 soc -T
-    - [R SSC1 C +CLOSEALL]
-  - - SSC SSC1 ram
-    - ['R SSC1 C +FREEHEAP:']
-  script path: InitCondBase.py
-  start: 38.0
-  tag: APO2
-  test script: InitCondBase
-- check cmd set:
-  - ''
-  - - SSC SSC1 upgrade -Q -t 1
-    - ['R SSC1 C BIN_ID,0']
-  - - SSC SSC1 upgrade -Q -t 2 -b 0
-    - ['R SSC1 C BIN_INFO,0']
-  - - SSC SSC1 op -S -o 2
-    - ['R SSC1 C +MODE:OK']
-  force restore cmd set:
-  - ''
-  - - SSC SSC1 upgrade -R -r 1 -s <ota_bin_size>
-    - [R SSC1 NC ERROR C !!!ready!!!]
-  - - SSC SSC1 op -S -o 1
-    - ['R SSC1 C +MODE:OK']
-  - - SSC SSC1 dhcp -S -o 1
-    - [R SSC1 C +DHCP]
-  - - SSC SSC1 sta -C -s <ap_ssid> -p <ap_password>
-    - ['R SSC1 RE "\+JAP:CONNECTED,%%s"%%(<ap_ssid>)']
-  - - SOC SOC1 ULISTEN <test_tcp_port1> <pc_ip>
-    - [R SOC_COM L OK]
-  - - SOC SOC1 SETOPT REPLY BIN
-    - [R SOC_COM C OK]
-  - - SSC SSC1 upgrade -I -b 0 -f 0
-    - ['P SSC1 C +UPGRADE:OK']
-  - - SSC SSC1 upgrade -U -i <pc_ip> -p <test_tcp_port1> -u <ota_bin>
-    - ['P SSC1 C +UPGRADE:SUCCEED']
-  - - SSC SSC1 upgrade -R -b 0
-    - [R SSC1 C !!!ready!!!]
-  - - SSC SSC1 op -S -o 2
-    - ['R SSC1 C +MODE:OK']
-  initial condition detail: AP only mode, running BIN0 (located on flash id 0)
-  restore cmd set:
-  - ''
-  - - SSC SSC1 upgrade -Q -t 2 -b 0
-    - ['R SSC1 C BIN_INFO,0']
-  - - SSC SSC1 upgrade -R -b 0
-    - [R SSC1 C !!!ready!!!]
-  - - SSC SSC1 op -S -o 2
-    - ['R SSC1 C +MODE:OK']
-  restore post cmd set:
-  - ''
-  - - SSC SSC1 upgrade -D
-    - ['R SSC1 C +UPGRADE:OK']
-  - - SSC SSC1 ram
-    - ['R SSC1 A <heap_size>:(\d+)']
-  script path: InitCondBase.py
-  start: 31.0
-  tag: APOBIN0
-  test script: InitCondBase
-- check cmd set:
-  - ''
-  - - SSC SSC1 op -Q
-    - ['R SSC1 C +CURMODE:3']
-  - - SSC SSC1 ap -Q
-    - ['R SSC1 RE "\+APCONFIG:%%s,%%s,\d+,\d+,\d+,4,"%%(<target_ssid>,<target_password>)']
-  - - SSC SSC1 dhcp -Q -o 2
-    - ['R SSC1 C +DHCP:AP,STARTED']
-  - - SSC SSC1 mac -Q -o 2
-    - [R SSC1 P <target_ap_mac>]
-  force restore cmd set:
-  - ''
-  - - SSC SSC1 reboot
-    - [R SSC1 C !!!ready!!!]
-  - - SSC SSC1 op -S -o 3
-    - ['R SSC1 C +MODE:OK']
-  - - SSC SSC1 mac -S -o 2 -m <target_ap_mac>
-    - ['R SSC1 C +MAC:AP,OK']
-  - - SSC SSC1 dhcp -S -o 2
-    - [R SSC1 C +DHCP]
-  - - SSC SSC1 ap -S -s <target_ssid> -p <target_password> -t <target_auth_enum>
-    - ['R SSC1 C +SAP:OK']
-  initial condition detail: testing ap on sta + ap mode (autogen by APM1)
-  restore cmd set:
-  - ''
-  - - SSC SSC1 op -S -o 3
-    - ['R SSC1 C +MODE:OK']
-  - - SSC SSC1 mac -S -o 2 -m <target_ap_mac>
-    - ['R SSC1 C +MAC:AP,OK']
-  - - SSC SSC1 dhcp -S -o 2
-    - [R SSC1 C +DHCP]
-  - - SSC SSC1 ap -S -s <target_ssid> -p <target_password> -t <target_auth_enum>
-    - ['R SSC1 C +SAP:OK']
-  restore post cmd set:
-  - ''
-  - - SSC SSC1 soc -T
-    - [R SSC1 C +CLOSEALL]
-  - - SSC SSC1 ram
-    - ['R SSC1 C +FREEHEAP:']
-  script path: InitCondBase.py
-  start: 59.0
-  tag: APSTA1
-  test script: InitCondBase
-- check cmd set:
-  - ''
-  - - SSC SSC1 op -Q
-    - ['R SSC1 C +CURMODE:3']
-  - - SSC SSC1 ap -Q
-    - ['R SSC1 RE "\+APCONFIG:%%s,%%s,\d+,\d+,\d+,4,"%%(<target_ssid>,<target_password>)']
-  - - SSC SSC1 ap -L
-    - ['R SSC1 RE "\+LSTA:.+,%%s"%%(<pc_ip_wifi>)']
-  - - SSC SSC1 dhcp -Q -o 2
-    - ['R SSC1 C +DHCP:AP,STARTED']
-  - - SSC SSC1 mac -Q -o 2
-    - [R SSC1 P <target_ap_mac>]
-  force restore cmd set:
-  - ''
-  - - SSC SSC1 reboot
-    - [R SSC1 C !!!ready!!!]
-  - - SSC SSC1 op -S -o 3
-    - ['R SSC1 C +MODE:OK']
-  - - SSC SSC1 mac -S -o 2 -m <target_ap_mac>
-    - ['R SSC1 C +MAC:AP,OK']
-  - - SSC SSC1 dhcp -S -o 2
-    - [R SSC1 C +DHCP]
-  - - SSC SSC1 ap -S -s <target_ssid> -p <target_password> -t <target_auth_enum>
-    - ['R SSC1 C +SAP:OK']
-  - - WIFI <pc_wifi_nic> CONN <target_ssid> <target_password> <pc_ip_wifi> <target_auth>
-      <target_encryption>
-    - ['R PC_COM NC ERROR C +WIFICONN:OK']
-  initial condition detail: testing ap on sta + ap mode,  PC join AP (autogen by APM2)
-  restore cmd set:
-  - ''
-  - - SSC SSC1 op -S -o 3
-    - ['R SSC1 C +MODE:OK']
-  - - SSC SSC1 mac -S -o 2 -m <target_ap_mac>
-    - ['R SSC1 C +MAC:AP,OK']
-  - - SSC SSC1 dhcp -S -o 2
-    - [R SSC1 C +DHCP]
-  - - SSC SSC1 ap -S -s <target_ssid> -p <target_password> -t <target_auth_enum>
-    - ['R SSC1 C +SAP:OK']
-  - - WIFI <pc_wifi_nic> CONN <target_ssid> <target_password> <pc_ip_wifi> <target_auth>
-      <target_encryption>
-    - ['R PC_COM NC ERROR C +WIFICONN:OK']
-  restore post cmd set:
-  - ''
-  - - SSC SSC1 soc -T
-    - [R SSC1 C +CLOSEALL]
-  - - SSC SSC1 ram
-    - ['R SSC1 C +FREEHEAP:']
-  script path: InitCondBase.py
-  start: 66.0
-  tag: APSTA2
-  test script: InitCondBase
-- check cmd set:
-  - ''
-  - - ATS AT1 AT+CWMODE_CUR?
-    - ['R AT1 L +CWMODE_CUR:3']
-  - - ATS AT1 AT+CWLIF
-    - [R AT1 P <pc_ip>]
-  - - ATS AT1 AT+CWDHCP_DEF=2,1
-    - [R AT1 R *]
-  force restore cmd set:
-  - ''
-  - - ATS AT1 AT+RST
-    - [R AT1 C ready]
-  - - ATS AT1 AT+CWMODE_DEF=3
-    - [R AT1 L OK]
-  - - DELAY 5
-    - ['']
-  - - ATC AT1 CWSAP_DEF <target_ssid> <target_password> <target_channel> <target_auth_enum>
-    - [R AT1 L OK]
-  - - ATS AT1 AT+CWDHCP_DEF=2,1
-    - [R AT1 R *]
-  - - WIFI <pc_wifi_nic> CONN <target_ssid> <target_password> <pc_ip_wifi> <target_auth>
-      <target_encryption>
-    - ['R PC_COM NC ERROR C +WIFICONN:OK']
-  - - ATS AT1 AT+CWLIF
-    - [R AT1 P <pc_ip>]
-  initial condition detail: StationSoftAP mode
-  restore cmd set:
-  - ''
-  - - ATSO AT1 +++
-    - ['']
-  - - ATS AT1 AT
-    - [R AT1 R *]
-  - - ATS AT1 AT+SAVETRANSLINK=0
-    - [R AT1 R *]
-  - - ATS AT1 AT+CWMODE_DEF=3
-    - [R AT1 L OK]
-  - - ATS AT1 AT+CWLIF
-    - [R AT1 P <pc_ip>]
-  - - ATS AT1 AT+CWDHCP_DEF=2,1
-    - [R AT1 R *]
-  restore post cmd set:
-  - ''
-  - - ATS AT1 AT+CWSTOPSMART
-    - [R AT1 R *]
-  - - ATS AT1 AT+SAVETRANSLINK=0
-    - [R AT1 R *]
-  - - AT+SYSRAM
-    - ['R AT1 A <heap_size>:(\d+)']
-  script path: InitCondBase.py
-  start: 24.0
-  tag: ATAP1
-  test script: InitCondBase
-- check cmd set:
-  - ''
-  - - ATS AT1 AT+CWMODE_CUR?
-    - ['R AT1 C +CWMODE_CUR:3 L OK']
-  - - ATS AT1 AT+CWLIF
-    - [R AT1 P <pc_ip>]
-  - - ATS AT1 AT+CIPMUX?
-    - ['R AT1 L +CIPMUX:1']
-  - - ATS AT1 AT+CIPSERVER=0
-    - [R AT1 R *]
-  - - ATC AT1 CIPCLOSE <max_conn>
-    - [R AT1 R *]
-  - - ATS AT1 AT+CWDHCP_DEF=2,1
-    - [R AT1 R *]
-  force restore cmd set:
-  - ''
-  - - ATS AT1 AT+RST
-    - [R AT1 C ready]
-  - - ATS AT1 AT+CWMODE_DEF=3
-    - [R AT1 L OK]
-  - - DELAY 5
-    - ['']
-  - - ATC AT1 CWSAP_DEF <target_ssid> <target_password> <target_channel> <target_auth_enum>
-    - [R AT1 L OK]
-  - - ATS AT1 AT+CWDHCP_DEF=2,1
-    - [R AT1 R *]
-  - - WIFI <pc_wifi_nic> CONN <target_ssid> <target_password> <pc_ip_wifi> <target_auth>
-      <target_encryption>
-    - ['R PC_COM NC ERROR C +WIFICONN:OK']
-  - - ATS AT1 AT+CWLIF
-    - [R AT1 P <pc_ip>]
-  - - ATS AT1 AT+CIPCLOSE
-    - [R AT1 R *]
-  - - ATS AT1 AT+CIPMUX=1
-    - [R AT1 L OK]
-  - - ATS AT1 AT+CIPSERVER=0
-    - [R AT1 R *]
-  - - ATC AT1 CIPCLOSE <max_conn>
-    - [R AT1 R *]
-  initial condition detail: StationSoftAP mode, PC join Target AP, multi link, use
-    dhcp
-  restore cmd set:
-  - ''
-  - - ATSO AT1 +++
-    - ['']
-  - - ATS AT1 AT
-    - [R AT1 R *]
-  - - ATS AT1 AT+SAVETRANSLINK=0
-    - [R AT1 R *]
-  - - ATS AT1 AT+CWMODE_DEF=3
-    - [R AT1 L OK]
-  - - ATS AT1 AT+CIPCLOSE
-    - [R AT1 R *]
-  - - ATS AT1 AT+CIPMODE=0
-    - [R AT1 R *]
-  - - ATS AT1 AT+CIPMUX=1
-    - [R AT1 R *]
-  - - ATS AT1 AT+CIPSERVER=0
-    - [R AT1 R *]
-  - - ATC AT1 CIPCLOSE <max_conn>
-    - [R AT1 R *]
-  - - ATS AT1 AT+CWLIF
-    - [R AT1 P <pc_ip>]
-  - - ATS AT1 AT+CWDHCP_DEF=2,1
-    - [R AT1 R *]
-  restore post cmd set:
-  - ''
-  - - ATS AT1 AT+CWSTOPSMART
-    - [R AT1 R *]
-  - - ATS AT1 AT+SAVETRANSLINK=0
-    - [R AT1 R *]
-  - - AT+SYSRAM
-    - ['R AT1 A <heap_size>:(\d+)']
-  script path: InitCondBase.py
-  start: 31.0
-  tag: ATAP3
-  test script: InitCondBase
-- check cmd set:
-  - ''
-  - - ATS AT1 AT+CWMODE_CUR?
-    - ['R AT1 C +CWMODE_CUR:3 L OK']
-  - - ATS AT1 AT+CWLIF
-    - [R AT1 P <pc_ip>]
-  - - ATS AT1 AT+CIPMUX?
-    - ['R AT1 L +CIPMUX:0']
-  - - ATS AT1 AT+CIPCLOSE
-    - [R AT1 R *]
-  - - ATS AT1 AT+CIPMODE=0
-    - [R AT1 R *]
-  - - ATS AT1 AT+CWDHCP_DEF=1,1
-    - [R AT1 R *]
-  force restore cmd set:
-  - ''
-  - - ATS AT1 AT+RST
-    - [R AT1 C ready]
-  - - ATS AT1 AT+CWMODE_DEF=3
-    - [R AT1 L OK]
-  - - DELAY 10
-    - ['']
-  - - ATC AT1 CWSAP_DEF <target_ssid> <target_password> <target_channel> <target_auth_enum>
-    - [R AT1 L OK]
-  - - ATS AT1 AT+CWDHCP_DEF=2,1
-    - [R AT1 R *]
-  - - WIFI <pc_wifi_nic> CONN <target_ssid> <target_password> <pc_ip_wifi> <target_auth>
-      <target_encryption>
-    - ['R PC_COM NC ERROR C +WIFICONN:OK']
-  - - ATS AT1 AT+CWLIF
-    - [R AT1 P <pc_ip>]
-  - - ATS AT1 AT+CIPSERVER=0
-    - [R AT1 R *]
-  - - ATC AT1 CIPCLOSE <max_conn>
-    - [R AT1 R *]
-  - - ATS AT1 AT+CIPMUX=0
-    - [R AT1 L OK]
-  - - ATS AT1 AT+CIPCLOSE
-    - [R AT1 R *]
-  initial condition detail: StationSoftAP mode, PC join Target AP, single link, use
-    dhcp
-  restore cmd set:
-  - ''
-  - - ATSO AT1 +++
-    - ['']
-  - - ATS AT1 AT
-    - [R AT1 R *]
-  - - ATS AT1 AT+SAVETRANSLINK=0
-    - [R AT1 R *]
-  - - ATS AT1 AT+CWMODE_DEF=3
-    - [R AT1 L OK]
-  - - ATS AT1 AT+CIPSERVER=0
-    - [R AT1 R *]
-  - - ATC AT1 CIPCLOSE <max_conn>
-    - [R AT1 R *]
-  - - ATS AT1 AT+CIPMUX=0
-    - [R AT1 L OK]
-  - - ATS AT1 AT+CIPCLOSE
-    - [R AT1 R *]
-  - - ATS AT1 AT+CIPMODE=0
-    - [R AT1 R *]
-  - - ATS AT1 AT+CWLIF
-    - [R AT1 P <pc_ip>]
-  - - ATS AT1 AT+CWDHCP_DEF=1,1
-    - [R AT1 R *]
-  restore post cmd set:
-  - ''
-  - - ATS AT1 AT+CWSTOPSMART
-    - [R AT1 R *]
-  - - ATS AT1 AT+SAVETRANSLINK=0
-    - [R AT1 R *]
-  - - AT+SYSRAM
-    - ['R AT1 A <heap_size>:(\d+)']
-  script path: InitCondBase.py
-  start: 45.0
-  tag: ATAP4
-  test script: InitCondBase
-- check cmd set:
-  - ''
-  - - ATS AT1 AT
-    - [R AT1 L OK]
-  - - ATS AT1 AT
-    - [R AT1 R *]
-  force restore cmd set:
-  - ''
-  - - ATS AT1 AT+RST
-    - [R AT1 C ready]
-  - - ATS AT1 AT+RST
-    - [R AT1 L OK]
-  initial condition detail: StationSoftAP mode, both PC join Target AP, single link,
-    use dhcp
-  restore cmd set:
-  - ''
-  - - ATSO AT1 +++
-    - ['']
-  - - ATS AT1 AT+SAVETRANSLINK=0
-    - [R AT1 R *]
-  restore post cmd set:
-  - ''
-  - - ATS AT1 AT+CWSTOPSMART
-    - [R AT1 R *]
-  - - ATS AT1 AT+SAVETRANSLINK=0
-    - [R AT1 R *]
-  - - AT+SYSRAM
-    - ['R AT1 A <heap_size>:(\d+)']
-  script path: InitCondBase.py
-  start: 3.0
-  tag: ATAP5
-  test script: InitCondBase
-- check cmd set:
-  - ''
-  - - ATS AT1 AT
-    - [R AT1 L OK]
-  - - ATS AT1 AT
-    - [R AT1 R *]
-  force restore cmd set:
-  - ''
-  - - ATS AT1 AT+RST
-    - [R AT1 C ready]
-  - - ATS AT1 AT+RST
-    - [R AT1 L OK]
-  initial condition detail: StationSoftAP mode, both PC join Target AP, multi link,
-    use dhcp
-  restore cmd set:
-  - ''
-  - - ATSO AT1 +++
-    - ['']
-  - - ATS AT1 AT+SAVETRANSLINK=0
-    - [R AT1 R *]
-  restore post cmd set:
-  - ''
-  - - ATS AT1 AT+CWSTOPSMART
-    - [R AT1 R *]
-  - - ATS AT1 AT+SAVETRANSLINK=0
-    - [R AT1 R *]
-  - - AT+SYSRAM
-    - ['R AT1 A <heap_size>:(\d+)']
-  script path: InitCondBase.py
-  start: 3.0
-  tag: ATAP6
-  test script: InitCondBase
-- check cmd set:
-  - ''
-  - - ATS AT1 AT+CWMODE_CUR?
-    - ['R AT1 L +CWMODE_CUR:2']
-  - - ATS AT1 AT+CWDHCP_DEF=0,1
-    - [R AT1 R *]
-  force restore cmd set:
-  - ''
-  - - ATS AT1 AT+RST
-    - [R AT1 C ready]
-  - - ATS AT1 AT+CWMODE_DEF=2
-    - [R AT1 L OK]
-  - - ATS AT1 AT+CWDHCP_DEF=0,1
-    - [R AT1 R *]
-  initial condition detail: SoftAP mode, use dhcp
-  restore cmd set:
-  - ''
-  - - ATSO AT1 +++
-    - ['']
-  - - ATS AT1 AT
-    - [R AT1 R *]
-  - - ATS AT1 AT+SAVETRANSLINK=0
-    - [R AT1 R *]
-  - - ATS AT1 AT+CWMODE_DEF=2
-    - [R AT1 L OK]
-  - - ATS AT1 AT+CWDHCP_DEF=0,1
-    - [R AT1 R *]
-  restore post cmd set:
-  - ''
-  - - ATS AT1 AT+CWSTOPSMART
-    - [R AT1 R *]
-  - - ATS AT1 AT+SAVETRANSLINK=0
-    - [R AT1 R *]
-  - - AT+SYSRAM
-    - ['R AT1 A <heap_size>:(\d+)']
-  script path: InitCondBase.py
-  start: 59.0
-  tag: ATAPO1
-  test script: InitCondBase
-- check cmd set:
-  - ''
-  - - ATS AT1 AT+CWMODE_CUR?
-    - ['R AT1 C +CWMODE_CUR:2 L OK']
-  - - ATS AT1 AT+CWLIF
-    - [R AT1 P <pc_ip>]
-  - - ATS AT1 AT+CIPMUX?
-    - ['R AT1 L +CIPMUX:1']
-  - - ATS AT1 AT+CIPSERVER=0
-    - [R AT1 R *]
-  - - ATC AT1 CIPCLOSE <max_conn>
-    - [R AT1 R *]
-  - - ATS AT1 AT+CWDHCP_DEF=0,1
-    - [R AT1 R *]
-  force restore cmd set:
-  - ''
-  - - ATS AT1 AT+RST
-    - [R AT1 C ready]
-  - - ATS AT1 AT+CWMODE_DEF=2
-    - [R AT1 L OK]
-  - - ATC AT1 CWSAP_DEF <target_ssid> <target_password> <target_channel> <target_auth_enum>
-    - [R AT1 L OK]
-  - - WIFI <pc_wifi_nic> CONN <target_ssid> <target_password> <pc_ip_wifi> <target_auth>
-      <target_encryption>
-    - ['R PC_COM NC ERROR C +WIFICONN:OK']
-  - - ATS AT1 AT+CWLIF
-    - [R AT1 P <pc_ip>]
-  - - ATS AT1 AT+CIPCLOSE
-    - [R AT1 R *]
-  - - ATS AT1 AT+CIPMUX=1
-    - [R AT1 L OK]
-  - - ATS AT1 AT+CIPSERVER=0
-    - [R AT1 R *]
-  - - ATC AT1 CIPCLOSE <max_conn>
-    - [R AT1 R *]
-  - - ATS AT1 AT+CWDHCP_DEF=0,1
-    - [R AT1 R *]
-  initial condition detail: SoftAP mode, PC join Target AP, multi link, use dhcp
-  restore cmd set:
-  - ''
-  - - ATSO AT1 +++
-    - ['']
-  - - ATS AT1 AT
-    - [R AT1 R *]
-  - - ATS AT1 AT+SAVETRANSLINK=0
-    - [R AT1 R *]
-  - - ATS AT1 AT+CWMODE_DEF=2
-    - [R AT1 L OK]
-  - - ATS AT1 AT+CIPCLOSE
-    - [R AT1 R *]
-  - - ATS AT1 AT+CIPMODE=0
-    - [R AT1 R *]
-  - - ATS AT1 AT+CIPMUX=1
-    - [R AT1 R *]
-  - - ATS AT1 AT+CIPSERVER=0
-    - [R AT1 R *]
-  - - ATC AT1 CIPCLOSE <max_conn>
-    - [R AT1 R *]
-  - - ATS AT1 AT+CWLIF
-    - [R AT1 P <pc_ip>]
-  - - ATS AT1 AT+CWDHCP_DEF=0,1
-    - [R AT1 R *]
-  restore post cmd set:
-  - ''
-  - - ATS AT1 AT+CWSTOPSMART
-    - [R AT1 R *]
-  - - ATS AT1 AT+SAVETRANSLINK=0
-    - [R AT1 R *]
-  - - AT+SYSRAM
-    - ['R AT1 A <heap_size>:(\d+)']
-  script path: InitCondBase.py
-  start: 66.0
-  tag: ATAPO3
-  test script: InitCondBase
-- check cmd set:
-  - ''
-  - - ATS AT1 AT+CWMODE_CUR?
-    - ['R AT1 C +CWMODE_CUR:2 L OK']
-  - - ATS AT1 AT+CWLIF
-    - [R AT1 P <pc_ip>]
-  - - ATS AT1 AT+CIPMUX?
-    - ['R AT1 L +CIPMUX:0']
-  - - ATS AT1 AT+CIPCLOSE
-    - [R AT1 R *]
-  - - ATS AT1 AT+CIPMODE=0
-    - [R AT1 R *]
-  - - ATS AT1 AT+CWDHCP_DEF=0,1
-    - [R AT1 R *]
-  force restore cmd set:
-  - ''
-  - - ATS AT1 AT+RST
-    - [R AT1 C ready]
-  - - ATS AT1 AT+CWMODE_DEF=2
-    - [R AT1 L OK]
-  - - ATC AT1 CWSAP_DEF <target_ssid> <target_password> <target_channel> <target_auth_enum>
-    - [R AT1 L OK]
-  - - ATS AT1 AT+CWDHCP_DEF=0,1
-    - [R AT1 R *]
-  - - WIFI <pc_wifi_nic> CONN <target_ssid> <target_password> <pc_ip_wifi> <target_auth>
-      <target_encryption>
-    - ['R PC_COM NC ERROR C +WIFICONN:OK']
-  - - ATS AT1 AT+CWLIF
-    - [R AT1 P <pc_ip>]
-  - - ATS AT1 AT+CIPSERVER=0
-    - [R AT1 R *]
-  - - ATC AT1 CIPCLOSE <max_conn>
-    - [R AT1 R *]
-  - - ATS AT1 AT+CIPMUX=0
-    - [R AT1 L OK]
-  - - ATS AT1 AT+CIPCLOSE
-    - [R AT1 R *]
-  initial condition detail: SoftAP mode, PC join Target AP, single link, use dhcp
-  restore cmd set:
-  - ''
-  - - ATSO AT1 +++
-    - ['']
-  - - ATS AT1 AT
-    - [R AT1 R *]
-  - - ATS AT1 AT+SAVETRANSLINK=0
-    - [R AT1 R *]
-  - - ATS AT1 AT+CWMODE_DEF=2
-    - [R AT1 L OK]
-  - - ATS AT1 AT+CIPSERVER=0
-    - [R AT1 R *]
-  - - ATC AT1 CIPCLOSE <max_conn>
-    - [R AT1 R *]
-  - - ATS AT1 AT+CIPMUX=0
-    - [R AT1 L OK]
-  - - ATS AT1 AT+CIPCLOSE
-    - [R AT1 R *]
-  - - ATS AT1 AT+CIPMODE=0
-    - [R AT1 R *]
-  - - ATS AT1 AT+CWLIF
-    - [R AT1 P <pc_ip>]
-  - - ATS AT1 AT+CWDHCP_DEF=0,1
-    - [R AT1 R *]
-  restore post cmd set:
-  - ''
-  - - ATS AT1 AT+CWSTOPSMART
-    - [R AT1 R *]
-  - - ATS AT1 AT+SAVETRANSLINK=0
-    - [R AT1 R *]
-  - - AT+SYSRAM
-    - ['R AT1 A <heap_size>:(\d+)']
-  script path: InitCondBase.py
-  start: 73.0
-  tag: ATAPO4
-  test script: InitCondBase
-- check cmd set:
-  - ''
-  - - ATS AT1 AT
-    - [R AT1 L OK]
-  - - ATS AT1 AT
-    - [R AT1 R *]
-  force restore cmd set:
-  - ''
-  - - ATS AT1 AT+RST
-    - [R AT1 C ready]
-  - - ATS AT1 AT+RST
-    - [R AT1 L OK]
-  initial condition detail: SoftAP mode, both PC join Target AP, single link, use
-    dhcp
-  restore cmd set:
-  - ''
-  - - ATSO AT1 +++
-    - ['']
-  - - ATS AT1 AT+SAVETRANSLINK=0
-    - [R AT1 R *]
-  restore post cmd set:
-  - ''
-  - - ATS AT1 AT+CWSTOPSMART
-    - [R AT1 R *]
-  - - ATS AT1 AT+SAVETRANSLINK=0
-    - [R AT1 R *]
-  - - AT+SYSRAM
-    - ['R AT1 A <heap_size>:(\d+)']
-  script path: InitCondBase.py
-  start: 3.0
-  tag: ATAPO5
-  test script: InitCondBase
-- check cmd set:
-  - ''
-  - - ATS AT1 AT
-    - [R AT1 L OK]
-  - - ATS AT1 AT
-    - [R AT1 R *]
-  force restore cmd set:
-  - ''
-  - - ATS AT1 AT+RST
-    - [R AT1 C ready]
-  - - ATS AT1 AT+RST
-    - [R AT1 L OK]
-  initial condition detail: SoftAP mode, both PC join Target AP, multi link, use dhcp
-  restore cmd set:
-  - ''
-  - - ATSO AT1 +++
-    - ['']
-  - - ATS AT1 AT+SAVETRANSLINK=0
-    - [R AT1 R *]
-  restore post cmd set:
-  - ''
-  - - ATS AT1 AT+CWSTOPSMART
-    - [R AT1 R *]
-  - - ATS AT1 AT+SAVETRANSLINK=0
-    - [R AT1 R *]
-  - - AT+SYSRAM
-    - ['R AT1 A <heap_size>:(\d+)']
-  script path: InitCondBase.py
-  start: 3.0
-  tag: ATAPO6
-  test script: InitCondBase
-- check cmd set:
-  - ''
-  - - ATS AT1 AT+CWMODE_CUR?
-    - ['R AT1 L +CWMODE_CUR:3']
-  - - ATS AT1 AT+CWDHCP_DEF=2,1
-    - [R AT1 R *]
-  - - ATS AT1 AT+CWDHCP_DEF=2,1
-    - [R AT1 R *]
-  force restore cmd set:
-  - ''
-  - - ATS AT1 AT+RST
-    - [R AT1 C ready]
-  - - ATS AT1 AT+CWMODE_DEF=3
-    - [R AT1 L OK]
-  - - ATS AT1 AT+CWDHCP_DEF=2,1
-    - [R AT1 R *]
-  initial condition detail: StationSoftAP mode
-  restore cmd set:
-  - ''
-  - - ATSO AT1 +++
-    - ['']
-  - - ATS AT1 AT
-    - [R AT1 R *]
-  - - ATS AT1 AT+SAVETRANSLINK=0
-    - [R AT1 R *]
-  - - ATS AT1 AT+CWMODE_DEF=3
-    - [R AT1 L OK]
-  - - ATS AT1 AT+CWDHCP_DEF=2,1
-    - [R AT1 R *]
-  restore post cmd set:
-  - ''
-  - - ATS AT1 AT+CWSTOPSMART
-    - [R AT1 R *]
-  - - ATS AT1 AT+SAVETRANSLINK=0
-    - [R AT1 R *]
-  - - AT+SYSRAM
-    - ['R AT1 A <heap_size>:(\d+)']
-  script path: InitCondBase.py
-  start: 87.0
-  tag: ATAPSTA1
-  test script: InitCondBase
-- check cmd set:
-  - ''
-  - - ATS AT1 AT+CWMODE_CUR?
-    - ['R AT1 L +CWMODE_CUR:3']
-  - - ATS AT1 AT+CWDHCP_DEF=2,1
-    - [R AT1 R *]
-  - - ATS AT1 AT+CWDHCP_DEF=2,1
-    - [R AT1 R *]
-  force restore cmd set:
-  - ''
-  - - ATS AT1 AT+RST
-    - [R AT1 C ready]
-  - - ATS AT1 AT+CWMODE_DEF=3
-    - [R AT1 L OK]
-  - - ATS AT1 AT+CWDHCP_DEF=2,1
-    - [R AT1 R *]
-  initial condition detail: StationSoftAP mode, DHCP client on
-  restore cmd set:
-  - ''
-  - - ATSO AT1 +++
-    - ['']
-  - - ATS AT1 AT
-    - [R AT1 R *]
-  - - ATS AT1 AT+SAVETRANSLINK=0
-    - [R AT1 R *]
-  - - ATS AT1 AT+CWMODE_DEF=3
-    - [R AT1 L OK]
-  - - ATS AT1 AT+CWDHCP_DEF=2,1
-    - [R AT1 R *]
-  restore post cmd set:
-  - ''
-  - - ATS AT1 AT+CWSTOPSMART
-    - [R AT1 R *]
-  - - ATS AT1 AT+SAVETRANSLINK=0
-    - [R AT1 R *]
-  - - AT+SYSRAM
-    - ['R AT1 A <heap_size>:(\d+)']
-  script path: InitCondBase.py
-  start: 87.0
-  tag: ATAPSTA2
-  test script: InitCondBase
-- check cmd set:
-  - ''
-  - - ATS AT1 AT+CWMODE_CUR?
-    - ['R AT1 L +CWMODE_CUR:3']
-  - - ATS AT1 AT+CWJAP_CUR?
-    - ['R AT1 C +CWJAP_CUR:', R AT1 P <ap_ssid>]
-  - - ATS AT1 AT+CIPMUX?
-    - ['R AT1 L +CIPMUX:1']
-  - - ATS AT1 AT+CWDHCP_CUR?
-    - ['R AT1 C DHCP:3']
-  - - ATS AT1 AT+CIPSERVER=0
-    - [R AT1 R *]
-  - - ATC AT1 CIPCLOSE <max_conn>
-    - [R AT1 R *]
-  force restore cmd set:
-  - ''
-  - - ATS AT1 AT+RST
-    - [R AT1 C ready]
-  - - ATS AT1 AT+CWMODE_DEF=3
-    - [R AT1 L OK]
-  - - ATS AT1 AT+CWDHCP_DEF=2,1
-    - [R AT1 R *]
-  - - ATC AT1 CWJAP_DEF <ap_ssid> <ap_password>
-    - [R AT1 L OK]
-  - - ATS AT1 AT+CWDHCP_DEF=2,1
-    - [R AT1 R *]
-  - - ATS AT1 AT+CIPCLOSE
-    - [R AT1 R *]
-  - - ATS AT1 AT+CIPMUX=1
-    - [R AT1 L OK]
-  - - ATS AT1 AT+CIPSERVER=0
-    - [R AT1 R *]
-  - - ATC AT1 CIPCLOSE <max_conn>
-    - [R AT1 R *]
-  - - ATS AT1 AT+CWDHCP_DEF=2,1
-    - [R AT1 R *]
-  initial condition detail: StationSoftAP mode, connected to AP, multi link, use dhcp
-  restore cmd set:
-  - ''
-  - - ATSO AT1 +++
-    - ['']
-  - - ATS AT1 AT
-    - [R AT1 R *]
-  - - ATS AT1 AT+SAVETRANSLINK=0
-    - [R AT1 R *]
-  - - ATS AT1 AT+CWMODE_DEF=3
-    - [R AT1 L OK]
-  - - ATS AT1 AT+CWDHCP_DEF=2,1
-    - [R AT1 R *]
-  - - ATC AT1 CWJAP_DEF <ap_ssid> <ap_password>
-    - [R AT1 L OK]
-  - - ATS AT1 AT+CIPCLOSE
-    - [R AT1 R *]
-  - - ATS AT1 AT+CIPMODE=0
-    - [R AT1 R *]
-  - - ATS AT1 AT+CIPMUX=1
-    - [R AT1 L OK]
-  - - ATS AT1 AT+CIPSERVER=0
-    - [R AT1 R *]
-  - - ATC AT1 CIPCLOSE <max_conn>
-    - [R AT1 R *]
-  restore post cmd set:
-  - ''
-  - - ATS AT1 AT+CWSTOPSMART
-    - [R AT1 R *]
-  - - ATS AT1 AT+SAVETRANSLINK=0
-    - [R AT1 R *]
-  - - AT+SYSRAM
-    - ['R AT1 A <heap_size>:(\d+)']
-  script path: InitCondBase.py
-  start: 94.0
-  tag: ATAPSTA3
-  test script: InitCondBase
-- check cmd set:
-  - ''
-  - - ATS AT1 AT+CWMODE_CUR?
-    - ['R AT1 L +CWMODE_CUR:3']
-  - - ATS AT1 AT+CWJAP_CUR?
-    - ['R AT1 C +CWJAP_CUR:', R AT1 P <ap_ssid>]
-  - - ATS AT1 AT+CIPMUX?
-    - ['R AT1 L +CIPMUX:0']
-  - - ATS AT1 AT+CWDHCP_CUR?
-    - ['R AT1 C DHCP:3']
-  - - ATS AT1 AT+CIPCLOSE
-    - [R AT1 R *]
-  - - ATS AT1 AT+CIPMODE=0
-    - [R AT1 R *]
-  force restore cmd set:
-  - ''
-  - - ATS AT1 AT+RST
-    - [R AT1 C ready]
-  - - ATS AT1 AT+CWMODE_DEF=3
-    - [R AT1 L OK]
-  - - ATS AT1 AT+CWDHCP_DEF=2,1
-    - [R AT1 R *]
-  - - ATC AT1 CWJAP_DEF <ap_ssid> <ap_password>
-    - [R AT1 L OK]
-  - - ATS AT1 AT+CIPSERVER=0
-    - [R AT1 R *]
-  - - ATC AT1 CIPCLOSE <max_conn>
-    - [R AT1 R *]
-  - - ATS AT1 AT+CIPMUX=0
-    - [R AT1 L OK]
-  - - ATS AT1 AT+CIPCLOSE
-    - [R AT1 R *]
-  initial condition detail: StationSoftAP mode, connected to AP, single link, use
-    dhcp
-  restore cmd set:
-  - ''
-  - - ATSO AT1 +++
-    - ['']
-  - - ATS AT1 AT
-    - [R AT1 R *]
-  - - ATS AT1 AT+SAVETRANSLINK=0
-    - [R AT1 R *]
-  - - ATS AT1 AT+CWMODE_DEF=3
-    - [R AT1 L OK]
-  - - ATS AT1 AT+CWDHCP_DEF=2,1
-    - [R AT1 R *]
-  - - ATC AT1 CWJAP_DEF <ap_ssid> <ap_password>
-    - [R AT1 L OK]
-  - - ATS AT1 AT+CIPSERVER=0
-    - [R AT1 R *]
-  - - ATC AT1 CIPCLOSE <max_conn>
-    - [R AT1 R *]
-  - - ATS AT1 AT+CIPMUX=0
-    - [R AT1 L OK]
-  - - ATS AT1 AT+CIPCLOSE
-    - [R AT1 R *]
-  - - ATS AT1 AT+CIPMODE=0
-    - [R AT1 R *]
-  - - ATS AT1 AT+CWDHCP_DEF=2,1
-    - [R AT1 R *]
-  restore post cmd set:
-  - ''
-  - - ATS AT1 AT+CWSTOPSMART
-    - [R AT1 R *]
-  - - ATS AT1 AT+SAVETRANSLINK=0
-    - [R AT1 R *]
-  - - AT+SYSRAM
-    - ['R AT1 A <heap_size>:(\d+)']
-  script path: InitCondBase.py
-  start: 101.0
-  tag: ATAPSTA4
-  test script: InitCondBase
-- check cmd set:
-  - ''
-  - - ATS AT1 AT+CWMODE_CUR?
-    - ['R AT1 L +CWMODE_CUR:3']
-  - - ATS AT1 AT+CWJAP_CUR?
-    - ['R AT1 C +CWJAP_CUR:', R AT1 P <ap_ssid>]
-  - - ATS AT1 AT+CIPMUX?
-    - ['R AT1 L +CIPMUX:1']
-  - - ATS AT1 AT+CIPSERVER=0
-    - [R AT1 R *]
-  - - ATC AT1 CIPCLOSE <max_conn>
-    - [R AT1 R *]
-  - - ATC AT1 CIPSTA_DEF <target_static_ip>
-    - [R AT1 L OK]
-  force restore cmd set:
-  - ''
-  - - ATS AT1 AT+RST
-    - [R AT1 C ready]
-  - - ATS AT1 AT+CWMODE_DEF=3
-    - [R AT1 L OK]
-  - - ATC AT1 CWJAP_DEF <ap_ssid> <ap_password>
-    - [R AT1 L OK]
-  - - ATS AT1 AT+CIPCLOSE
-    - [R AT1 R *]
-  - - ATS AT1 AT+CIPMUX=1
-    - [R AT1 L OK]
-  - - ATS AT1 AT+CIPSERVER=0
-    - [R AT1 R *]
-  - - ATC AT1 CIPCLOSE <max_conn>
-    - [R AT1 R *]
-  - - ATC AT1 CIPSTA_DEF <target_static_ip>
-    - [R AT1 L OK]
-  initial condition detail: StationSoftAP mode, connected to AP, multi link, use static
-    ip
-  restore cmd set:
-  - ''
-  - - ATSO AT1 +++
-    - ['']
-  - - ATS AT1 AT
-    - [R AT1 R *]
-  - - ATS AT1 AT+SAVETRANSLINK=0
-    - [R AT1 R *]
-  - - ATS AT1 AT+CWMODE_DEF=3
-    - [R AT1 L OK]
-  - - ATC AT1 CWJAP_DEF <ap_ssid> <ap_password>
-    - [R AT1 L OK]
-  - - ATS AT1 AT+CIPCLOSE
-    - [R AT1 R *]
-  - - ATS AT1 AT+CIPMODE=0
-    - [R AT1 R *]
-  - - ATS AT1 AT+CIPMUX=1
-    - [R AT1 L OK]
-  - - ATS AT1 AT+CIPSERVER=0
-    - [R AT1 R *]
-  - - ATC AT1 CIPCLOSE <max_conn>
-    - [R AT1 R *]
-  - - ATC AT1 CIPSTA_DEF <target_static_ip>
-    - [R AT1 L OK]
-  restore post cmd set:
-  - ''
-  - - ATS AT1 AT+CWSTOPSMART
-    - [R AT1 R *]
-  - - ATS AT1 AT+SAVETRANSLINK=0
-    - [R AT1 R *]
-  - - AT+SYSRAM
-    - ['R AT1 A <heap_size>:(\d+)']
-  script path: InitCondBase.py
-  start: 129.0
-  tag: ATAPSTA5
-  test script: InitCondBase
-- check cmd set:
-  - ''
-  - - ATS AT1 AT+CWMODE_CUR?
-    - ['R AT1 L +CWMODE_CUR:3']
-  - - ATS AT1 AT+CWJAP_CUR?
-    - ['R AT1 C +CWJAP_CUR:', R AT1 P <ap_ssid>]
-  - - ATS AT1 AT+CIPMUX?
-    - ['R AT1 L +CIPMUX:0']
-  - - ATS AT1 AT+CIPCLOSE
-    - [R AT1 R *]
-  - - ATS AT1 AT+CIPMODE=0
-    - [R AT1 R *]
-  - - ATC AT1 CIPSTA_DEF <target_static_ip>
-    - [R AT1 L OK]
-  force restore cmd set:
-  - ''
-  - - ATS AT1 AT+RST
-    - [R AT1 C ready]
-  - - ATS AT1 AT+CWMODE_DEF=3
-    - [R AT1 L OK]
-  - - ATC AT1 CWJAP_DEF <ap_ssid> <ap_password>
-    - [R AT1 L OK]
-  - - ATS AT1 AT+CIPSERVER=0
-    - [R AT1 R *]
-  - - ATC AT1 CIPCLOSE <max_conn>
-    - [R AT1 R *]
-  - - ATS AT1 AT+CIPMUX=0
-    - [R AT1 L OK]
-  - - ATS AT1 AT+CIPCLOSE
-    - [R AT1 R *]
-  - - ATC AT1 CIPSTA_DEF <target_static_ip>
-    - [R AT1 L OK]
-  initial condition detail: StationSoftAP mode, connected to AP, single link, use
-    static ip
-  restore cmd set:
-  - ''
-  - - ATSO AT1 +++
-    - ['']
-  - - ATS AT1 AT
-    - [R AT1 R *]
-  - - ATS AT1 AT+SAVETRANSLINK=0
-    - [R AT1 R *]
-  - - ATS AT1 AT+CWMODE_DEF=3
-    - [R AT1 L OK]
-  - - ATC AT1 CWJAP_DEF <ap_ssid> <ap_password>
-    - [R AT1 L OK]
-  - - ATS AT1 AT+CIPSERVER=0
-    - [R AT1 R *]
-  - - ATC AT1 CIPCLOSE <max_conn>
-    - [R AT1 R *]
-  - - ATS AT1 AT+CIPMUX=0
-    - [R AT1 L OK]
-  - - ATS AT1 AT+CIPCLOSE
-    - [R AT1 R *]
-  - - ATS AT1 AT+CIPMODE=0
-    - [R AT1 R *]
-  - - ATC AT1 CIPSTA_DEF <target_static_ip>
-    - [R AT1 L OK]
-  restore post cmd set:
-  - ''
-  - - ATS AT1 AT+CWSTOPSMART
-    - [R AT1 R *]
-  - - ATS AT1 AT+SAVETRANSLINK=0
-    - [R AT1 R *]
-  - - AT+SYSRAM
-    - ['R AT1 A <heap_size>:(\d+)']
-  script path: InitCondBase.py
-  start: 136.0
-  tag: ATAPSTA6
-  test script: InitCondBase
-- check cmd set:
-  - ''
-  - - ATS AT1 AT
-    - [R AT1 L OK]
-  - - ATS AT1 AT+RESTORE
-    - [R AT1 L OK, R AT1 C ready]
-  force restore cmd set:
-  - ''
-  - - ATS AT1 AT+RST
-    - [R AT1 C ready]
-  - - ATS AT1 AT
-    - [R AT1 L OK]
-  - - ATS AT1 AT+RESTORE
-    - [R AT1 L OK, R AT1 C ready]
-  initial condition detail: 'first time usage. Use restore function. '
-  restore cmd set:
-  - ''
-  - - ATSO AT1 +++
-    - ['']
-  - - ATS AT1 AT
-    - [R AT1 R *]
-  - - ATS AT1 AT+SAVETRANSLINK=0
-    - [R AT1 R *]
-  - - ATS AT1 AT+RESTORE
-    - [R AT1 L OK, R AT1 C ready]
-  restore post cmd set:
-  - ''
-  - - ATS AT1 AT+CWSTOPSMART
-    - [R AT1 R *]
-  - - ATS AT1 AT+SAVETRANSLINK=0
-    - [R AT1 R *]
-  - - AT+SYSRAM
-    - ['R AT1 A <heap_size>:(\d+)']
-  script path: InitCondBase.py
-  start: 143.0
-  tag: ATFTU
-  test script: InitCondBase
-- check cmd set:
-  - ''
-  - - ATS AT1 AT
-    - [R AT1 L OK]
-  - - ATS AT1 AT
-    - [R AT1 R *]
-  force restore cmd set:
-  - ''
-  - - ATS AT1 AT+RST
-    - [R AT1 C ready]
-  - - ATS AT1 AT+RST
-    - [R AT1 L OK]
-  initial condition detail: none
-  restore cmd set:
-  - ''
-  - - ATSO AT1 +++
-    - ['']
-  - - ATS AT1 AT+SAVETRANSLINK=0
-    - [R AT1 R *]
-  restore post cmd set:
-  - ''
-  - - ATS AT1 AT+CWSTOPSMART
-    - [R AT1 R *]
-  - - ATS AT1 AT+SAVETRANSLINK=0
-    - [R AT1 R *]
-  - - AT+SYSRAM
-    - ['R AT1 A <heap_size>:(\d+)']
-  script path: InitCondBase.py
-  start: 3.0
-  tag: ATNone
-  test script: InitCondBase
-- check cmd set:
-  - ''
-  - - DELAY 0.1
-    - [dummy]
-  force restore cmd set:
-  - ''
-  - - DELAY 0.1
-    - [dummy]
-  initial condition detail: none 2
-  restore cmd set:
-  - ''
-  - - DELAY 0.1
-    - [dummy]
-  restore post cmd set:
-  - ''
-  - - ATS AT1 AT+CWSTOPSMART
-    - [R AT1 R *]
-  - - ATS AT1 AT+SAVETRANSLINK=0
-    - [R AT1 R *]
-  - - AT+SYSRAM
-    - ['R AT1 A <heap_size>:(\d+)']
-  script path: InitCondBase.py
-  start: 108.0
-  tag: ATNone2
-  test script: InitCondBase
-- check cmd set:
-  - ''
-  - - ATS AT1 AT+CWMODE_CUR?
-    - ['R AT1 L +CWMODE_CUR:1']
-  - - ATS AT1 AT+CWDHCP_DEF=1,1
-    - [R AT1 L OK]
-  force restore cmd set:
-  - ''
-  - - ATS AT1 AT+RST
-    - [R AT1 C ready]
-  - - ATS AT1 AT+CWMODE_DEF=1
-    - [R AT1 L OK]
-  - - ATS AT1 AT+CWDHCP_DEF=1,1
-    - [R AT1 L OK]
-  initial condition detail: same as STA1, but will not autogen STA+AP STA test case
-  restore cmd set:
-  - ''
-  - - ATSO AT1 +++
-    - ['']
-  - - ATS AT1 AT
-    - [R AT1 R *]
-  - - ATS AT1 AT+SAVETRANSLINK=0
-    - [R AT1 R *]
-  - - ATS AT1 AT+CWMODE_DEF=1
-    - [R AT1 L OK]
-  - - ATS AT1 AT+CWDHCP_DEF=1,1
-    - [R AT1 L OK]
-  restore post cmd set:
-  - ''
-  - - ATS AT1 AT+CWSTOPSMART
-    - [R AT1 R *]
-  - - ATS AT1 AT+SAVETRANSLINK=0
-    - [R AT1 R *]
-  - - AT+SYSRAM
-    - ['R AT1 A <heap_size>:(\d+)']
-  script path: InitCondBase.py
-  start: 10.0
-  tag: ATOSTA1
-  test script: InitCondBase
-- check cmd set:
-  - ''
-  - - ATS AT1 AT+CWMODE_CUR?
-    - ['R AT1 L +CWMODE_CUR:1']
-  - - ATS AT1 AT+CWJAP_CUR?
-    - ['R AT1 C +CWJAP_CUR:', R AT1 P <ap_ssid>]
-  - - ATS AT1 AT+CIPMUX?
-    - ['R AT1 L +CIPMUX:0']
-  - - ATS AT1 AT+CWDHCP_CUR?
-    - ['R AT1 C DHCP:3']
-  - - ATS AT1 AT+CIPCLOSE
-    - [R AT1 R *]
-  - - ATS AT1 AT+CIPMODE=0
-    - [R AT1 R *]
-  force restore cmd set:
-  - ''
-  - - ATS AT1 AT+RST
-    - [R AT1 C ready]
-  - - ATS AT1 AT+CWMODE_DEF=1
-    - [R AT1 L OK]
-  - - ATS AT1 AT+CWDHCP_DEF=1,1
-    - [R AT1 R *]
-  - - ATC AT1 CWJAP_DEF <ap_ssid> <ap_password>
-    - [R AT1 L OK]
-  - - ATS AT1 AT+CIPSERVER=0
-    - [R AT1 R *]
-  - - ATC AT1 CIPCLOSE <max_conn>
-    - [R AT1 R *]
-  - - ATS AT1 AT+CIPMUX=0
-    - [R AT1 L OK]
-  - - ATS AT1 AT+CIPCLOSE
-    - [R AT1 R *]
-  initial condition detail: same as STA4, but will not autogen STA+AP STA test case
-  restore cmd set:
-  - ''
-  - - ATSO AT1 +++
-    - ['']
-  - - ATS AT1 AT
-    - [R AT1 R *]
-  - - ATS AT1 AT+SAVETRANSLINK=0
-    - [R AT1 R *]
-  - - ATS AT1 AT+CWMODE_DEF=1
-    - [R AT1 L OK]
-  - - ATS AT1 AT+CWDHCP_DEF=1,1
-    - [R AT1 R *]
-  - - ATC AT1 CWJAP_DEF <ap_ssid> <ap_password>
-    - [R AT1 L OK]
-  - - ATS AT1 AT+CIPSERVER=0
-    - [R AT1 R *]
-  - - ATC AT1 CIPCLOSE <max_conn>
-    - [R AT1 R *]
-  - - ATS AT1 AT+CIPMUX=0
-    - [R AT1 L OK]
-  - - ATS AT1 AT+CIPCLOSE
-    - [R AT1 R *]
-  - - ATS AT1 AT+CIPMODE=0
-    - [R AT1 R *]
-  restore post cmd set:
-  - ''
-  - - ATS AT1 AT+CWSTOPSMART
-    - [R AT1 R *]
-  - - ATS AT1 AT+SAVETRANSLINK=0
-    - [R AT1 R *]
-  - - AT+SYSRAM
-    - ['R AT1 A <heap_size>:(\d+)']
-  script path: InitCondBase.py
-  start: 17.0
-  tag: ATOSTA4
-  test script: InitCondBase
-- check cmd set:
-  - ''
-  - - ATS AT1 AT+CWMODE_CUR?
-    - ['R AT1 C +CWMODE_CUR:3 C OK']
-  - - ATS AT2 AT+CWMODE_CUR?
-    - ['R AT2 C +CWMODE_CUR:1 C OK']
-  - - ATS AT1 AT+CWJAP_CUR?
-    - [R AT1 NC OK L ERROR]
-  force restore cmd set:
-  - ''
-  - - ATS AT1 AT+RST
-    - [R AT1 C ready]
-  - - ATS AT1 AT+CWMODE_DEF=3
-    - [R AT1 L OK]
-  - - ATS AT2 AT+CWMODE_DEF=1
-    - [R AT2 L OK]
-  - - ATS AT1 AT+CWQAP
-    - [R AT1 L OK]
-  initial condition detail: same as OT2_1, but will not autogen STA+AP STA test case
-  restore cmd set:
-  - ''
-  - - ATSO AT1 +++
-    - ['']
-  - - ATS AT1 AT
-    - [R AT1 R *]
-  - - ATS AT1 AT+SAVETRANSLINK=0
-    - [R AT1 R *]
-  - - ATS AT1 AT+CWMODE_DEF=3
-    - [R AT1 L OK]
-  - - ATS AT2 AT+CWMODE_DEF=1
-    - [R AT2 L OK]
-  - - ATS AT1 AT+CWQAP
-    - [R AT1 L OK]
-  restore post cmd set:
-  - ''
-  - - ATS AT1 AT+CWSTOPSMART
-    - [R AT1 R *]
-  - - ATS AT1 AT+SAVETRANSLINK=0
-    - [R AT1 R *]
-  - - AT+SYSRAM
-    - ['R AT1 A <heap_size>:(\d+)']
-  script path: InitCondBase.py
-  start: 52.0
-  tag: ATOT2_1
-  test script: InitCondBase
-- check cmd set:
-  - ''
-  - - ATS AT1 AT+CWMODE_CUR?
-    - ['R AT1 L +CWMODE_CUR:1']
-  - - ATS AT1 AT+CWDHCP_DEF=1,1
-    - [R AT1 L OK]
-  force restore cmd set:
-  - ''
-  - - ATS AT1 AT+RST
-    - [R AT1 C ready]
-  - - ATS AT1 AT+CWMODE_DEF=1
-    - [R AT1 L OK]
-  - - ATS AT1 AT+CWDHCP_DEF=1,1
-    - [R AT1 L OK]
-  initial condition detail: station mode, use dhcp
-  restore cmd set:
-  - ''
-  - - ATSO AT1 +++
-    - ['']
-  - - ATS AT1 AT
-    - [R AT1 R *]
-  - - ATS AT1 AT+SAVETRANSLINK=0
-    - [R AT1 R *]
-  - - ATS AT1 AT+CWMODE_DEF=1
-    - [R AT1 L OK]
-  - - ATS AT1 AT+CWDHCP_DEF=1,1
-    - [R AT1 L OK]
-  restore post cmd set:
-  - ''
-  - - ATS AT1 AT+CWSTOPSMART
-    - [R AT1 R *]
-  - - ATS AT1 AT+SAVETRANSLINK=0
-    - [R AT1 R *]
-  - - AT+SYSRAM
-    - ['R AT1 A <heap_size>:(\d+)']
-  script path: InitCondBase.py
-  start: 10.0
-  tag: ATSTA1
-  test script: InitCondBase
-- check cmd set:
-  - ''
-  - - ATS AT1 AT+CWMODE_CUR?
-    - ['R AT1 L +CWMODE_CUR:1']
-  - - ATS AT1 AT+CWDHCP_DEF=1,1
-    - [R AT1 L OK]
-  force restore cmd set:
-  - ''
-  - - ATS AT1 AT+RST
-    - [R AT1 C ready]
-  - - ATS AT1 AT+CWMODE_DEF=1
-    - [R AT1 L OK]
-  - - ATS AT1 AT+CWDHCP_DEF=1,1
-    - [R AT1 L OK]
-  initial condition detail: station mode, DHCP client on, use dhcp
-  restore cmd set:
-  - ''
-  - - ATSO AT1 +++
-    - ['']
-  - - ATS AT1 AT
-    - [R AT1 R *]
-  - - ATS AT1 AT+SAVETRANSLINK=0
-    - [R AT1 R *]
-  - - ATS AT1 AT+CWMODE_DEF=1
-    - [R AT1 L OK]
-  - - ATS AT1 AT+CWDHCP_DEF=1,1
-    - [R AT1 L OK]
-  restore post cmd set:
-  - ''
-  - - ATS AT1 AT+CWSTOPSMART
-    - [R AT1 R *]
-  - - ATS AT1 AT+SAVETRANSLINK=0
-    - [R AT1 R *]
-  - - AT+SYSRAM
-    - ['R AT1 A <heap_size>:(\d+)']
-  script path: InitCondBase.py
-  start: 10.0
-  tag: ATSTA2
-  test script: InitCondBase
-- check cmd set:
-  - ''
-  - - ATS AT1 AT+CWMODE_CUR?
-    - ['R AT1 L +CWMODE_CUR:1']
-  - - ATS AT1 AT+CWJAP_CUR?
-    - ['R AT1 C +CWJAP_CUR:', R AT1 P <ap_ssid>]
-  - - ATS AT1 AT+CIPMUX?
-    - ['R AT1 L +CIPMUX:1']
-  - - ATS AT1 AT+CWDHCP_CUR?
-    - ['R AT1 C DHCP:3']
-  - - ATS AT1 AT+CIPSERVER=0
-    - [R AT1 R *]
-  - - ATC AT1 CIPCLOSE <max_conn>
-    - [R AT1 R *]
-  force restore cmd set:
-  - ''
-  - - ATS AT1 AT+RST
-    - [R AT1 C ready]
-  - - ATS AT1 AT+CWMODE_DEF=1
-    - [R AT1 L OK]
-  - - ATS AT1 AT+CWDHCP_DEF=1,1
-    - [R AT1 R *]
-  - - ATC AT1 CWJAP_DEF <ap_ssid> <ap_password>
-    - [R AT1 L OK]
-  - - ATS AT1 AT+CIPCLOSE
-    - [R AT1 R *]
-  - - ATS AT1 AT+CIPMUX=1
-    - [R AT1 L OK]
-  - - ATS AT1 AT+CIPSERVER=0
-    - [R AT1 R *]
-  - - ATC AT1 CIPCLOSE <max_conn>
-    - [R AT1 R *]
-  initial condition detail: station mode, connected to AP, multi link, use dhcp
-  restore cmd set:
-  - ''
-  - - ATSO AT1 +++
-    - ['']
-  - - ATS AT1 AT
-    - [R AT1 R *]
-  - - ATS AT1 AT+SAVETRANSLINK=0
-    - [R AT1 R *]
-  - - ATS AT1 AT+CWMODE_DEF=1
-    - [R AT1 L OK]
-  - - ATS AT1 AT+CWDHCP_DEF=1,1
-    - [R AT1 R *]
-  - - ATC AT1 CWJAP_DEF <ap_ssid> <ap_password>
-    - [R AT1 L OK]
-  - - ATS AT1 AT+CIPCLOSE
-    - [R AT1 R *]
-  - - ATS AT1 AT+CIPMODE=0
-    - [R AT1 R *]
-  - - ATS AT1 AT+CIPMUX=1
-    - [R AT1 L OK]
-  - - ATS AT1 AT+CIPSERVER=0
-    - [R AT1 R *]
-  - - ATC AT1 CIPCLOSE <max_conn>
-    - [R AT1 R *]
-  restore post cmd set:
-  - ''
-  - - ATS AT1 AT+CWSTOPSMART
-    - [R AT1 R *]
-  - - ATS AT1 AT+SAVETRANSLINK=0
-    - [R AT1 R *]
-  - - AT+SYSRAM
-    - ['R AT1 A <heap_size>:(\d+)']
-  script path: InitCondBase.py
-  start: 38.0
-  tag: ATSTA3
-  test script: InitCondBase
-- check cmd set:
-  - ''
-  - - ATS AT1 AT+CWMODE_CUR?
-    - ['R AT1 L +CWMODE_CUR:1']
-  - - ATS AT1 AT+CWJAP_CUR?
-    - ['R AT1 C +CWJAP_CUR:', R AT1 P <ap_ssid>]
-  - - ATS AT1 AT+CIPMUX?
-    - ['R AT1 L +CIPMUX:0']
-  - - ATS AT1 AT+CWDHCP_CUR?
-    - ['R AT1 C DHCP:3']
-  - - ATS AT1 AT+CIPCLOSE
-    - [R AT1 R *]
-  - - ATS AT1 AT+CIPMODE=0
-    - [R AT1 R *]
-  force restore cmd set:
-  - ''
-  - - ATS AT1 AT+RST
-    - [R AT1 C ready]
-  - - ATS AT1 AT+CWMODE_DEF=1
-    - [R AT1 L OK]
-  - - ATS AT1 AT+CWDHCP_DEF=1,1
-    - [R AT1 R *]
-  - - ATC AT1 CWJAP_DEF <ap_ssid> <ap_password>
-    - [R AT1 L OK]
-  - - ATS AT1 AT+CIPSERVER=0
-    - [R AT1 R *]
-  - - ATC AT1 CIPCLOSE <max_conn>
-    - [R AT1 R *]
-  - - ATS AT1 AT+CIPMUX=0
-    - [R AT1 L OK]
-  - - ATS AT1 AT+CIPCLOSE
-    - [R AT1 R *]
-  initial condition detail: station mode, connected to AP, single link, use dhcp
-  restore cmd set:
-  - ''
-  - - ATSO AT1 +++
-    - ['']
-  - - ATS AT1 AT
-    - [R AT1 R *]
-  - - ATS AT1 AT+SAVETRANSLINK=0
-    - [R AT1 R *]
-  - - ATS AT1 AT+CWMODE_DEF=1
-    - [R AT1 L OK]
-  - - ATS AT1 AT+CWDHCP_DEF=1,1
-    - [R AT1 R *]
-  - - ATC AT1 CWJAP_DEF <ap_ssid> <ap_password>
-    - [R AT1 L OK]
-  - - ATS AT1 AT+CIPSERVER=0
-    - [R AT1 R *]
-  - - ATC AT1 CIPCLOSE <max_conn>
-    - [R AT1 R *]
-  - - ATS AT1 AT+CIPMUX=0
-    - [R AT1 L OK]
-  - - ATS AT1 AT+CIPCLOSE
-    - [R AT1 R *]
-  - - ATS AT1 AT+CIPMODE=0
-    - [R AT1 R *]
-  restore post cmd set:
-  - ''
-  - - ATS AT1 AT+CWSTOPSMART
-    - [R AT1 R *]
-  - - ATS AT1 AT+SAVETRANSLINK=0
-    - [R AT1 R *]
-  - - AT+SYSRAM
-    - ['R AT1 A <heap_size>:(\d+)']
-  script path: InitCondBase.py
-  start: 17.0
-  tag: ATSTA4
-  test script: InitCondBase
-- check cmd set:
-  - ''
-  - - ATS AT1 AT+CWMODE_CUR?
-    - ['R AT1 L +CWMODE_CUR:1']
-  - - ATS AT1 AT+CWJAP_CUR?
-    - ['R AT1 C +CWJAP_CUR:', R AT1 P <ap_ssid>]
-  - - ATS AT1 AT+CIPMUX?
-    - ['R AT1 L +CIPMUX:1']
-  - - ATS AT1 AT+CIPSERVER=0
-    - [R AT1 R *]
-  - - ATC AT1 CIPCLOSE <max_conn>
-    - [R AT1 R *]
-  - - ATC AT1 CIPSTA_DEF <target_static_ip>
-    - [R AT1 L OK]
-  force restore cmd set:
-  - ''
-  - - ATS AT1 AT+RST
-    - [R AT1 C ready]
-  - - ATS AT1 AT+CWMODE_DEF=1
-    - [R AT1 L OK]
-  - - ATC AT1 CWJAP_DEF <ap_ssid> <ap_password>
-    - [R AT1 L OK]
-  - - ATS AT1 AT+CIPCLOSE
-    - [R AT1 R *]
-  - - ATS AT1 AT+CIPMUX=1
-    - [R AT1 L OK]
-  - - ATS AT1 AT+CIPSERVER=0
-    - [R AT1 R *]
-  - - ATC AT1 CIPCLOSE <max_conn>
-    - [R AT1 R *]
-  - - ATC AT1 CIPSTA_DEF <target_static_ip>
-    - [R AT1 L OK]
-  initial condition detail: station mode, connected to AP, multi link, use static
-    ip
-  restore cmd set:
-  - ''
-  - - ATSO AT1 +++
-    - ['']
-  - - ATS AT1 AT
-    - [R AT1 R *]
-  - - ATS AT1 AT+SAVETRANSLINK=0
-    - [R AT1 R *]
-  - - ATS AT1 AT+CWMODE_DEF=1
-    - [R AT1 L OK]
-  - - ATC AT1 CWJAP_DEF <ap_ssid> <ap_password>
-    - [R AT1 L OK]
-  - - ATS AT1 AT+CIPCLOSE
-    - [R AT1 R *]
-  - - ATS AT1 AT+CIPMODE=0
-    - [R AT1 R *]
-  - - ATS AT1 AT+CIPMUX=1
-    - [R AT1 L OK]
-  - - ATS AT1 AT+CIPSERVER=0
-    - [R AT1 R *]
-  - - ATC AT1 CIPCLOSE <max_conn>
-    - [R AT1 R *]
-  - - ATC AT1 CIPSTA_DEF <target_static_ip>
-    - [R AT1 L OK]
-  restore post cmd set:
-  - ''
-  - - ATS AT1 AT+CWSTOPSMART
-    - [R AT1 R *]
-  - - ATS AT1 AT+SAVETRANSLINK=0
-    - [R AT1 R *]
-  - - AT+SYSRAM
-    - ['R AT1 A <heap_size>:(\d+)']
-  script path: InitCondBase.py
-  start: 115.0
-  tag: ATSTA5
-  test script: InitCondBase
-- check cmd set:
-  - ''
-  - - ATS AT1 AT+CWMODE_CUR?
-    - ['R AT1 L +CWMODE_CUR:1']
-  - - ATS AT1 AT+CWJAP_CUR?
-    - ['R AT1 C +CWJAP_CUR:', R AT1 P <ap_ssid>]
-  - - ATS AT1 AT+CIPMUX?
-    - ['R AT1 L +CIPMUX:0']
-  - - ATS AT1 AT+CIPCLOSE
-    - [R AT1 R *]
-  - - ATS AT1 AT+CIPMODE=0
-    - [R AT1 R *]
-  - - ATC AT1 CIPSTA_DEF <target_static_ip>
-    - [R AT1 L OK]
-  force restore cmd set:
-  - ''
-  - - ATS AT1 AT+RST
-    - [R AT1 C ready]
-  - - ATS AT1 AT+CWMODE_DEF=1
-    - [R AT1 L OK]
-  - - ATC AT1 CWJAP_DEF <ap_ssid> <ap_password>
-    - [R AT1 L OK]
-  - - ATS AT1 AT+CIPSERVER=0
-    - [R AT1 R *]
-  - - ATC AT1 CIPCLOSE <max_conn>
-    - [R AT1 R *]
-  - - ATS AT1 AT+CIPMUX=0
-    - [R AT1 L OK]
-  - - ATS AT1 AT+CIPCLOSE
-    - [R AT1 R *]
-  - - ATC AT1 CIPSTA_DEF <target_static_ip>
-    - [R AT1 L OK]
-  initial condition detail: station mode, connected to AP, single link, use static
-    ip
-  restore cmd set:
-  - ''
-  - - ATSO AT1 +++
-    - ['']
-  - - ATS AT1 AT
-    - [R AT1 R *]
-  - - ATS AT1 AT+SAVETRANSLINK=0
-    - [R AT1 R *]
-  - - ATS AT1 AT+CWMODE_DEF=1
-    - [R AT1 L OK]
-  - - ATC AT1 CWJAP_DEF <ap_ssid> <ap_password>
-    - [R AT1 L OK]
-  - - ATS AT1 AT+CIPSERVER=0
-    - [R AT1 R *]
-  - - ATC AT1 CIPCLOSE <max_conn>
-    - [R AT1 R *]
-  - - ATS AT1 AT+CIPMUX=0
-    - [R AT1 L OK]
-  - - ATS AT1 AT+CIPCLOSE
-    - [R AT1 R *]
-  - - ATS AT1 AT+CIPMODE=0
-    - [R AT1 R *]
-  - - ATC AT1 CIPSTA_DEF <target_static_ip>
-    - [R AT1 L OK]
-  restore post cmd set:
-  - ''
-  - - ATS AT1 AT+CWSTOPSMART
-    - [R AT1 R *]
-  - - ATS AT1 AT+SAVETRANSLINK=0
-    - [R AT1 R *]
-  - - AT+SYSRAM
-    - ['R AT1 A <heap_size>:(\d+)']
-  script path: InitCondBase.py
-  start: 122.0
-  tag: ATSTA6
-  test script: InitCondBase
-- check cmd set:
-  - ''
-  - - ATS AT1 AT+CWMODE_CUR?
-    - ['R AT1 C +CWMODE_CUR:3 C OK']
-  - - ATS AT2 AT+CWMODE_CUR?
-    - ['R AT2 C +CWMODE_CUR:1 C OK']
-  - - ATS AT1 AT+CWJAP_CUR?
-    - [R AT1 NC OK L ERROR]
-  force restore cmd set:
-  - ''
-  - - ATS AT1 AT+RST
-    - [R AT1 C ready]
-  - - ATS AT1 AT+CWMODE_DEF=3
-    - [R AT1 L OK]
-  - - ATS AT2 AT+CWMODE_DEF=1
-    - [R AT2 L OK]
-  - - ATS AT1 AT+CWQAP
-    - [R AT1 L OK]
-  initial condition detail: Target 1 in StationSoftAP mode, Target 2 in station mode,
-    use dhcp
-  restore cmd set:
-  - ''
-  - - ATSO AT1 +++
-    - ['']
-  - - ATS AT1 AT
-    - [R AT1 R *]
-  - - ATS AT1 AT+SAVETRANSLINK=0
-    - [R AT1 R *]
-  - - ATS AT1 AT+CWMODE_DEF=3
-    - [R AT1 L OK]
-  - - ATS AT2 AT+CWMODE_DEF=1
-    - [R AT2 L OK]
-  - - ATS AT1 AT+CWQAP
-    - [R AT1 L OK]
-  restore post cmd set:
-  - ''
-  - - ATS AT1 AT+CWSTOPSMART
-    - [R AT1 R *]
-  - - ATS AT1 AT+SAVETRANSLINK=0
-    - [R AT1 R *]
-  - - AT+SYSRAM
-    - ['R AT1 A <heap_size>:(\d+)']
-  script path: InitCondBase.py
-  start: 52.0
-  tag: ATT2_1
-  test script: InitCondBase
-- check cmd set:
-  - ''
-  - - ATS AT1 AT+CWMODE_CUR?
-    - ['R AT1 C +CWMODE_CUR:2 C OK']
-  - - ATS AT2 AT+CWMODE_CUR?
-    - ['R AT2 C +CWMODE_CUR:3 C OK']
-  - - ATS AT1 AT+CWJAP_CUR?
-    - [R AT1 NC OK L ERROR]
-  force restore cmd set:
-  - ''
-  - - ATS AT1 AT+RST
-    - [R AT1 C ready]
-  - - ATS AT1 AT+CWMODE_DEF=2
-    - [R AT1 L OK]
-  - - ATS AT2 AT+CWMODE_DEF=3
-    - [R AT2 L OK]
-  initial condition detail: Target 1 in SoftAP mode, Target 2 in StationSoftAP mode,
-    use dhcp
-  restore cmd set:
-  - ''
-  - - ATSO AT1 +++
-    - ['']
-  - - ATS AT1 AT
-    - [R AT1 R *]
-  - - ATS AT1 AT+SAVETRANSLINK=0
-    - [R AT1 R *]
-  - - ATS AT1 AT+CWMODE_DEF=2
-    - [R AT1 L OK]
-  - - ATS AT2 AT+CWMODE_DEF=3
-    - [R AT2 L OK]
-  restore post cmd set:
-  - ''
-  - - ATS AT1 AT+CWSTOPSMART
-    - [R AT1 R *]
-  - - ATS AT1 AT+SAVETRANSLINK=0
-    - [R AT1 R *]
-  - - AT+SYSRAM
-    - ['R AT1 A <heap_size>:(\d+)']
-  script path: InitCondBase.py
-  start: 80.0
-  tag: ATT2_2
-  test script: InitCondBase
-- check cmd set:
-  - ''
-  - - ASSERT
-    - [dummy]
-  force restore cmd set:
-  - ''
-  - - SSC SSC[1-<node_num>] reboot
-    - ['P SSC[1-<node_num>] C !!!ready!!!']
-  - - SSC SSC[1-<node_num>] mesh -E -o 0
-    - ['P SSC[1-<node_num>] C +MESH:DISABLED']
-  - - SSC SSC[1-<node_num>] op -S -o 1
-    - ['P SSC[1-<node_num>] C +MODE:OK']
-  - - SSC SSC[1-<node_num>] sta -D
-    - ['P SSC[1-<node_num>] C +QAP:OK']
-  initial condition detail: all mesh node disabled
-  restore cmd set:
-  - ''
-  - - SSC SSC[1-<node_num>] mesh -E -o 0
-    - ['P SSC[1-<node_num>] C +MESH:DISABLED']
-  - - SSC SSC[1-<node_num>] op -S -o 1
-    - ['P SSC[1-<node_num>] C +MODE:OK']
-  - - SSC SSC[1-<node_num>] sta -D
-    - ['P SSC[1-<node_num>] C +QAP:OK']
-  restore post cmd set:
-  - ''
-  - - SSC SSC1 ram
-    - ['R SSC1 A <heap_size>:(\d+)']
-  script path: InitCondBase.py
-  start: 31.0
-  tag: DISABLED
-  test script: InitCondBase
-- check cmd set:
-  - ''
-  - - ASSERT
-    - [dummy]
-  - - SSC SSC[1-<node_num>] mesh -Q -t 4
-    - ['R SSC[1-<node_num>] T <node_num>']
-  - - MESHTREE
-    - ['R PC_COM RE "MESHTREE:%%s%20nodes"%%(<node_num>)']
-  force restore cmd set:
-  - ''
-  - - SOC SOC1 LISTEN <test_tcp_port1> <pc_ip>
-    - [R SOC_COM L OK]
-  - - SSC SSC[1-<node_num>] mesh -E -o 0
-    - ['P SSC[1-<node_num>] C +MESH:DISABLED']
-  - - SSC SSC[1-<node_num>] mesh -I -g <group_id> -a 4 -k <target_password> -i <pc_ip>
-      -p <test_tcp_port1> -h 5
-    - ['P SSC[1-<node_num>] C ENCRYPTION,OK C GROUP,OK C SERVER,OK C HOP,OK']
-  - - SSC SSC[1-<node_num>] mesh -A -s <ap_ssid> -k <ap_password>
-    - ['P SSC[1-<node_num>] C +MESHINIT:AP,OK']
-  - - SSC SSC1 mesh -E -o 1 -t 2
-    - ['P SSC1 C +MESH:ENABLED']
-  - - SOC SOC1 MACCEPT GSOC1
-    - [R SOC_COM L OK]
-  - - SSC SSC[2-<node_num>] mesh -E -o 1 -t 2
-    - ['P SSC[2-<node_num>] C +MESH:ENABLED']
-  - - DELAY 60
-    - ['']
-  - - SSC SSC[1-<node_num>] mesh -C
-    - ['P SSC[1-<node_num>] C +MESH:CONNECTED']
-  - - SSC SSC[1-<node_num>] mesh -Q -t 4
-    - ['R SSC[1-<node_num>] T <node_num>']
-  - - MESHTREE
-    - ['R PC_COM RE "MESHTREE:%%s%20nodes"%%(<node_num>)']
-  - - SSC SSC[1-<node_num>] mesh -O -t 1 -o 1
-    - ['P SSC[1-<node_num>] C +MESH:OK']
-  initial condition detail: all mesh node enabled as ONLINE, mesh network established
-  restore cmd set:
-  - ''
-  - - SSC SSC[1-<node_num>] reboot
-    - ['P SSC[1-<node_num>] C !!!ready!!!']
-  - - SOC SOC1 LISTEN <test_tcp_port1> <pc_ip>
-    - [R SOC_COM L OK]
-  - - SSC SSC[1-<node_num>] mesh -E -o 0
-    - ['P SSC[1-<node_num>] C +MESH:DISABLED']
-  - - SSC SSC[1-<node_num>] mesh -I -g <group_id> -a 4 -k <target_password> -i <pc_ip>
-      -p <test_tcp_port1> -h 5
-    - ['P SSC[1-<node_num>] C ENCRYPTION,OK C GROUP,OK C SERVER,OK C HOP,OK']
-  - - SSC SSC[1-<node_num>] mesh -A -s <ap_ssid> -k <ap_password>
-    - ['P SSC[1-<node_num>] C +MESHINIT:AP,OK']
-  - - SSC SSC1 mesh -E -o 1 -t 2
-    - ['P SSC1 C +MESH:ENABLED']
-  - - SOC SOC1 MACCEPT GSOC1
-    - [R SOC_COM L OK]
-  - - SSC SSC[2-<node_num>] mesh -E -o 1 -t 2
-    - ['P SSC[2-<node_num>] C +MESH:ENABLED']
-  - - DELAY 60
-    - ['']
-  - - SSC SSC[1-<node_num>] mesh -C
-    - ['P SSC[1-<node_num>] C +MESH:CONNECTED']
-  - - SSC SSC[1-<node_num>] mesh -Q -t 4
-    - ['R SSC[1-<node_num>] T <node_num>']
-  - - MESHTREE
-    - ['R PC_COM RE "MESHTREE:%%s%20nodes"%%(<node_num>)']
-  - - SSC SSC[1-<node_num>] mesh -O -t 1 -o 1
-    - ['P SSC[1-<node_num>] C +MESH:OK']
-  restore post cmd set:
-  - ''
-  - - SSC SSC1 ram
-    - ['R SSC1 A <heap_size>:(\d+)']
-  script path: InitCondBase.py
-  start: 17.0
-  tag: ENABLED_1
-  test script: InitCondBase
-- check cmd set:
-  - ''
-  - - ASSERT
-    - [dummy]
-  - - SSC SSC[1-<node_num>] mesh -Q -t 4
-    - ['R SSC[1-<node_num>] T <node_num>']
-  - - MESHTREE
-    - ['R PC_COM RE "MESHTREE:%%s%20nodes"%%(<node_num>)']
-  force restore cmd set:
-  - ''
-  - - SSC SSC[1-<node_num>] reboot
-    - ['P SSC[1-<node_num>] C !!!ready!!!']
-  - - SSC SSC[1-<node_num>] mesh -I -g <group_id> -a 4 -k <target_password> -i <pc_ip>
-      -p <test_tcp_port1> -h 5
-    - ['P SSC[1-<node_num>] C ENCRYPTION,OK C GROUP,OK C SERVER,OK C HOP,OK']
-  - - SSC SSC1 mesh -A -s <ap_ssid> -k <ap_password>
-    - ['P SSC1 C +MESHINIT:AP,OK']
-  - - SSC SSC1 mesh -E -o 1 -t 1
-    - ['P SSC1 C +MESH:ENABLED']
-  - - SSC SSC[2-<node_num>] mesh -E -o 1 -t 2
-    - ['']
-  - - DELAY 60
-    - ['P SSC[2-<node_num>] C +MESH:ENABLED']
-  - - SSC SSC[1-<node_num>] mesh -C
-    - ['P SSC[1-<node_num>] C +MESH:CONNECTED']
-  - - SSC SSC[1-<node_num>] mesh -Q -t 4
-    - ['R SSC[1-<node_num>] T <node_num>']
-  - - MESHTREE
-    - ['R PC_COM RE "MESHTREE:%%s%20nodes"%%(<node_num>)']
-  initial condition detail: root as LOCAL, rest node as ONLINE, mesh network established
-  restore cmd set:
-  - ''
-  - - SSC SSC[1-<node_num>] mesh -E -o 0
-    - ['P SSC[1-<node_num>] C +MESH:DISABLED']
-  - - SSC SSC[1-<node_num>] mesh -I -g <group_id> -a 4 -k <target_password> -i <pc_ip>
-      -p <test_tcp_port1> -h 5
-    - ['P SSC[1-<node_num>] C ENCRYPTION,OK C GROUP,OK C SERVER,OK C HOP,OK']
-  - - SSC SSC1 mesh -A -s <ap_ssid> -k <ap_password>
-    - ['P SSC1 C +MESHINIT:AP,OK']
-  - - SSC SSC1 mesh -E -o 1 -t 1
-    - ['P SSC1 C +MESH:ENABLED']
-  - - SSC SSC[2-<node_num>] mesh -E -o 1 -t 2
-    - ['']
-  - - DELAY 60
-    - ['P SSC[2-<node_num>] C +MESH:ENABLED']
-  - - SSC SSC[1-<node_num>] mesh -C
-    - ['P SSC[1-<node_num>] C +MESH:CONNECTED']
-  - - SSC SSC[1-<node_num>] mesh -Q -t 4
-    - ['R SSC[1-<node_num>] T <node_num>']
-  - - MESHTREE
-    - ['R PC_COM RE "MESHTREE:%%s%20nodes"%%(<node_num>)']
-  restore post cmd set:
-  - ''
-  - - SSC SSC1 ram
-    - ['R SSC1 A <heap_size>:(\d+)']
-  script path: InitCondBase.py
-  start: 24.0
-  tag: ENABLED_2
-  test script: InitCondBase
-- check cmd set:
-  - ''
-  - - SSC SSC1 op -Q
-    - ['R SSC1 C +CURMODE:2']
-  - - SSC SSC1 mac -Q -o 2
-    - [R SSC1 P <target_ap_mac>]
-  - - SSC SSC1 espnow -D
-    - ['R SSC1 C +ESPNOW:']
-  force restore cmd set:
-  - ''
-  - - SSC SSC[1-<dev_num>] reboot
-    - ['R SSC[1-<dev_num>] C !!!ready!!!']
-  - - SSC SSC1 op -S -o 2
-    - ['R SSC1 C +MODE:OK']
-  - - SSC SSC1 mac -S -m <target_ap_mac> -o 2
-    - ['R SSC1 C +MAC:AP,OK']
-  - - SSC SSC1 espnow -D
-    - ['R SSC1 C +ESPNOW:']
-  initial condition detail: one target in AP mode and espnow is de-initialized
-  restore cmd set:
-  - ''
-  - - SSC SSC1 op -S -o 2
-    - ['R SSC1 C +MODE:OK']
-  - - SSC SSC1 mac -S -m <target_ap_mac> -o 2
-    - ['R SSC1 C +MAC:AP,OK']
-  - - SSC SSC1 espnow -D
-    - ['R SSC1 C +ESPNOW:']
-  restore post cmd set:
-  - ''
-  - - SSC SSC1 ram
-    - ['R SSC1 A <heap_size>:(\d+)']
-  script path: InitCondBase.py
-  start: 17.0
-  tag: NOW1
-  test script: InitCondBase
-- check cmd set:
-  - ''
-  - - SSC SSC[1-<dev_num>] op -Q
-    - ['R SSC[1-<dev_num>] C +CURMODE:2']
-  - - SSC SSC[1-<dev_num>] mac -Q -o 3
-    - ['R SSC[1-<dev_num>] P <target[1-<dev_num>]_ap_mac> P <target[1-<dev_num>]_mac>']
-  - - SSC SSC[1-<dev_num>] espnow -D
-    - ['R SSC[1-<dev_num>] C +ESPNOW:']
-  - - SSC SSC[1-<dev_num>] espnow -I
-    - ['R SSC[1-<dev_num>] C +ESPNOW:OK']
-  - - SSC SSC[1-<dev_num>] espnow -R -t Set -r 2
-    - ['R SSC[1-<dev_num>] C +ESPNOW:OK']
-  force restore cmd set:
-  - ''
-  - - SSC SSC[1-<dev_num>] reboot
-    - ['R SSC[1-<dev_num>] C !!!ready!!!']
-  - - SSC SSC[1-<dev_num>] op -S -o 3
-    - ['R SSC[1-<dev_num>] C +MODE:OK']
-  - - SSC SSC[1-<dev_num>] mac -S -m <target[1-<dev_num>]_ap_mac> -o 2
-    - ['R SSC[1-<dev_num>] C +MAC:AP,OK']
-  - - SSC SSC[1-<dev_num>] mac -S -m <target[1-<dev_num>]_mac> -o 1
-    - ['R SSC[1-<dev_num>] C +MAC:STA,OK']
-  - - SSC SSC[1-<dev_num>] op -S -o 2
-    - ['R SSC[1-<dev_num>] C +MODE:OK']
-  - - SSC SSC[1-<dev_num>] espnow -D
-    - ['R SSC[1-<dev_num>] C +ESPNOW:']
-  - - SSC SSC[1-<dev_num>] espnow -I
-    - ['R SSC[1-<dev_num>] C +ESPNOW:OK']
-  - - SSC SSC[1-<dev_num>] espnow -R -t Set -r 2
-    - ['R SSC[1-<dev_num>] C +ESPNOW:OK']
-  initial condition detail: multiple (<dev_num>) targets in AP mode, espnow is initialized
-    with self role slave
-  restore cmd set:
-  - ''
-  - - SSC SSC[1-<dev_num>] op -S -o 3
-    - ['R SSC[1-<dev_num>] C +MODE:OK']
-  - - SSC SSC[1-<dev_num>] mac -S -m <target[1-<dev_num>]_ap_mac> -o 2
-    - ['R SSC[1-<dev_num>] C +MAC:AP,OK']
-  - - SSC SSC[1-<dev_num>] mac -S -m <target[1-<dev_num>]_mac> -o 1
-    - ['R SSC[1-<dev_num>] C +MAC:STA,OK']
-  - - SSC SSC[1-<dev_num>] op -S -o 2
-    - ['R SSC[1-<dev_num>] C +MODE:OK']
-  - - SSC SSC[1-<dev_num>] espnow -D
-    - ['R SSC[1-<dev_num>] C +ESPNOW:']
-  - - SSC SSC[1-<dev_num>] espnow -I
-    - ['R SSC[1-<dev_num>] C +ESPNOW:OK']
-  - - SSC SSC[1-<dev_num>] espnow -R -t Set -r 2
-    - ['R SSC[1-<dev_num>] C +ESPNOW:OK']
-  restore post cmd set:
-  - ''
-  - - SSC SSC1 ram
-    - ['R SSC1 A <heap_size>:(\d+)']
-  script path: InitCondBase.py
-  start: 24.0
-  tag: NOW2
-  test script: InitCondBase
-- check cmd set:
-  - ''
-  - - DELAY 0.1
-    - [dummy]
-  force restore cmd set:
-  - ''
-  - - SSC SSC1 reboot
-    - [R SSC1 C !!!ready!!!]
-  initial condition detail: none
-  restore cmd set:
-  - ''
-  - - DELAY 0.1
-    - [dummy]
-  restore post cmd set:
-  - ''
-  - - DELAY 0.1
-    - [dummy]
-  script path: InitCondBase.py
-  start: 10.0
-  tag: None
-  test script: InitCondBase
-- check cmd set:
-  - ''
-  - - SSC SSC1 sp -D
-    - ['R SSC1 C +SP:OK']
-  force restore cmd set:
-  - ''
-  - - SSC SSC1 sp -D
-    - ['R SSC1 C +SP:OK']
-  initial condition detail: one target and simple is de-inited
-  restore cmd set:
-  - ''
-  - - SSC SSC1 sp -D
-    - ['R SSC1 C +SP:OK']
-  restore post cmd set:
-  - ''
-  - - SSC SSC1 ram
-    - ['R SSC1 A <heap_size>:(\d+)']
-  script path: InitCondBase.py
-  start: 31.0
-  tag: PAIR1
-  test script: InitCondBase
-- check cmd set:
-  - ''
-  - - SSC SSC[1,2] op -Q
-    - ['R SSC[1,2] C +MODE:[2,1]']
-  - - SSC SSC[1,2] mac -Q -o 3
-    - ['R SSC[1,2] P <target[1,2]_ap_mac> P <target[1,2]_mac>']
-  - - SSC SSC[1,2] sp -D
-    - ['R SSC[1,2] C +SP:OK']
-  - - SSC SSC[1,2] sp -I
-    - ['R SSC[1,2] C +SP:OK']
-  force restore cmd set:
-  - ''
-  - - SSC SSC[1,2] reboot
-    - ['R SSC[1,2] C !!!ready!!!']
-  - - SSC SSC[1,2] op -S -o 3
-    - ['R SSC[1,2] C +MODE:OK']
-  - - SSC SSC[1,2] mac -S -m <target[1,2]_ap_mac> -o 2
-    - ['R SSC[1,2] C +MAC:AP,OK']
-  - - SSC SSC[1,2] mac -S -m <target[1,2]_mac> -o 1
-    - ['R SSC[1,2] C +MAC:STA,OK']
-  - - SSC SSC[1,2] op -S -o [2,1]
-    - ['R SSC[1,2] C +MODE:OK']
-  - - SSC SSC[1,2] sp -D
-    - ['R SSC[1,2] C +SP:OK']
-  - - SSC SSC[1,2] sp -I
-    - ['R SSC[1,2] C +SP:OK']
-  initial condition detail: target1 in AP mode, target2 in STA mode, two targets de-init
-    and init simple pair
-  restore cmd set:
-  - ''
-  - - SSC SSC[1,2] op -S -o 3
-    - ['R SSC[1,2] C +MODE:OK']
-  - - SSC SSC[1,2] mac -S -m <target[1,2]_ap_mac> -o 2
-    - ['R SSC[1,2] C +MAC:AP,OK']
-  - - SSC SSC[1,2] mac -S -m <target[1,2]_mac> -o 1
-    - ['R SSC[1,2] C +MAC:STA,OK']
-  - - SSC SSC[1,2] op -S -o [2,1]
-    - ['R SSC[1,2] C +MODE:OK']
-  - - SSC SSC[1,2] sp -D
-    - ['R SSC[1,2] C +SP:OK']
-  - - SSC SSC[1,2] sp -I
-    - ['R SSC[1,2] C +SP:OK']
-  restore post cmd set:
-  - ''
-  - - SSC SSC1 ram
-    - ['R SSC1 A <heap_size>:(\d+)']
-  script path: InitCondBase.py
-  start: 38.0
-  tag: PAIR2
-  test script: InitCondBase
-- check cmd set:
-  - ''
-  - - SSC SSC[1,2] op -Q
-    - ['R SSC[1,2] C +MODE:[3,3]']
-  - - SSC SSC[1,2] mac -Q -o 3
-    - ['R SSC[1,2] P <target[1,2]_ap_mac> P <target[1,2]_mac>']
-  - - SSC SSC[1,2] sp -D
-    - ['R SSC[1,2] C +SP:OK']
-  - - SSC SSC[1,2] sp -I
-    - ['R SSC[1,2] C +SP:OK']
-  force restore cmd set:
-  - ''
-  - - SSC SSC[1,2] reboot
-    - ['R SSC[1,2] C !!!ready!!!']
-  - - SSC SSC[1,2] op -S -o [3,3]
-    - ['R SSC[1,2] C +MODE:OK']
-  - - SSC SSC[1,2] mac -S -m <target[1,2]_ap_mac> -o 2
-    - ['R SSC[1,2] C +MAC:AP,OK']
-  - - SSC SSC[1,2] mac -S -m <target[1,2]_mac> -o 1
-    - ['R SSC[1,2] C +MAC:STA,OK']
-  - - SSC SSC[1,2] sp -D
-    - ['R SSC[1,2] C +SP:OK']
-  - - SSC SSC[1,2] sp -I
-    - ['R SSC[1,2] C +SP:OK']
-  initial condition detail: target1 and target2 in STA+AP mode, two targets de-init
-    and init simple pair
-  restore cmd set:
-  - ''
-  - - SSC SSC[1,2] op -S -o [3,3]
-    - ['R SSC[1,2] C +MODE:OK']
-  - - SSC SSC[1,2] mac -S -m <target[1,2]_ap_mac> -o 2
-    - ['R SSC[1,2] C +MAC:AP,OK']
-  - - SSC SSC[1,2] mac -S -m <target[1,2]_mac> -o 1
-    - ['R SSC[1,2] C +MAC:STA,OK']
-  - - SSC SSC[1,2] sp -D
-    - ['R SSC[1,2] C +SP:OK']
-  - - SSC SSC[1,2] sp -I
-    - ['R SSC[1,2] C +SP:OK']
-  restore post cmd set:
-  - ''
-  - - SSC SSC1 ram
-    - ['R SSC1 A <heap_size>:(\d+)']
-  script path: InitCondBase.py
-  start: 45.0
-  tag: PAIR3
-  test script: InitCondBase
-- check cmd set:
-  - ''
-  - - SSC SSC1 op -Q
-    - ['R SSC1 C +CURMODE:3']
-  - - SSC SSC1 sta -D
-    - ['R SSC1 C +QAP:']
-  - - SSC SSC1 dhcp -Q -o 1
-    - ['R SSC1 C +DHCP:STA,STARTED']
-  - - SSC SSC1 mac -Q -o 1
-    - [R SSC1 P <target_mac>]
-  force restore cmd set:
-  - ''
-  - - SSC SSC1 reboot
-    - [R SSC1 C !!!ready!!!]
-  - - SSC SSC1 op -S -o 3
-    - ['R SSC1 C +MODE:OK']
-  - - SSC SSC1 sta -D
-    - ['R SSC1 C +QAP:']
-  - - SSC SSC1 dhcp -S -o 1
-    - [R SSC1 C +DHCP]
-  - - SSC SSC1 mac -S -o 1 -m <target_mac>
-    - ['R SSC1 C +MAC:STA,OK']
-  initial condition detail: testing sta on sta + ap mode, quit AP (autogen by STAM1)
-  restore cmd set:
-  - ''
-  - - SSC SSC1 op -S -o 3
-    - ['R SSC1 C +MODE:OK']
-  - - SSC SSC1 sta -D
-    - ['R SSC1 C +QAP:']
-  - - SSC SSC1 dhcp -S -o 1
-    - [R SSC1 C +DHCP]
-  - - SSC SSC1 mac -S -o 1 -m <target_mac>
-    - ['R SSC1 C +MAC:STA,OK']
-  restore post cmd set:
-  - ''
-  - - SSC SSC1 soc -T
-    - [R SSC1 C +CLOSEALL]
-  - - SSC SSC1 ram
-    - ['R SSC1 C +FREEHEAP:']
-  script path: InitCondBase.py
-  start: 45.0
-  tag: STAAP1
-  test script: InitCondBase
-- check cmd set:
-  - ''
-  - - SSC SSC1 op -Q
-    - ['R SSC1 C +CURMODE:3']
-  - - SSC SSC1 sta -Q
-    - ['R SSC1 RE "\+JAP:CONNECTED,%%s"%%(<ap_ssid>)']
-  - - SSC SSC1 dhcp -Q -o 1
-    - ['R SSC1 C +DHCP:STA,STARTED']
-  - - SSC SSC1 mac -Q -o 1
-    - [R SSC1 P <target_mac>]
-  force restore cmd set:
-  - ''
-  - - SSC SSC1 reboot
-    - [R SSC1 C !!!ready!!!]
-  - - SSC SSC1 op -S -o 3
-    - ['R SSC1 C +MODE:OK']
-  - - SSC SSC1 dhcp -S -o 1
-    - [R SSC1 C +DHCP]
-  - - SSC SSC1 mac -S -o 1 -m <target_mac>
-    - ['R SSC1 C +MAC:STA,OK']
-  - - SSC SSC1 sta -C -s <ap_ssid> -p <ap_password>
-    - ['R SSC1 RE "\+JAP:CONNECTED,%%s"%%(<ap_ssid>)']
-  initial condition detail: testing sta on sta + ap mode,  join AP, DHCP on (autogen
-    by STAM2)
-  restore cmd set:
-  - ''
-  - - SSC SSC1 op -S -o 3
-    - ['R SSC1 C +MODE:OK']
-  - - SSC SSC1 dhcp -S -o 1
-    - [R SSC1 C +DHCP]
-  - - SSC SSC1 mac -S -o 1 -m <target_mac>
-    - ['R SSC1 C +MAC:STA,OK']
-  - - SSC SSC1 sta -C -s <ap_ssid> -p <ap_password>
-    - ['R SSC1 RE "\+JAP:CONNECTED,%%s"%%(<ap_ssid>)']
-  restore post cmd set:
-  - ''
-  - - SSC SSC1 soc -T
-    - [R SSC1 C +CLOSEALL]
-  - - SSC SSC1 ram
-    - ['R SSC1 C +FREEHEAP:']
-  script path: InitCondBase.py
-  start: 52.0
-  tag: STAAP2
-  test script: InitCondBase
-- check cmd set:
-  - ''
-  - - SSC SSC1 upgrade -Q -t 1
-    - ['R SSC1 C BIN_ID,0']
-  - - SSC SSC1 upgrade -Q -t 2 -b 0
-    - ['R SSC1 C BIN_INFO,0']
-  - - SSC SSC1 op -S -o 3
-    - ['R SSC1 C +MODE:OK']
-  - - SSC SSC1 dhcp -S -o 1
-    - [R SSC1 C +DHCP]
-  - - SSC SSC1 sta -C -s <ap_ssid> -p <ap_password>
-    - ['R SSC1 RE "\+JAP:CONNECTED,%%s"%%(<ap_ssid>)']
-  force restore cmd set:
-  - ''
-  - - SSC SSC1 upgrade -R -r 1 -s <ota_bin_size>
-    - [R SSC1 NC ERROR C !!!ready!!!]
-  - - SSC SSC1 op -S -o 3
-    - ['R SSC1 C +MODE:OK']
-  - - SSC SSC1 dhcp -S -o 1
-    - [R SSC1 C +DHCP]
-  - - SSC SSC1 sta -C -s <ap_ssid> -p <ap_password>
-    - ['R SSC1 RE "\+JAP:CONNECTED,%%s"%%(<ap_ssid>)']
-  - - SOC SOC1 ULISTEN <test_tcp_port1> <pc_ip>
-    - [R SOC_COM L OK]
-  - - SOC SOC1 SETOPT REPLY BIN
-    - [R SOC_COM C OK]
-  - - SSC SSC1 upgrade -I -b 0 -f 0
-    - ['P SSC1 C +UPGRADE:OK']
-  - - SSC SSC1 upgrade -U -i <pc_ip> -p <test_tcp_port1> -u <ota_bin>
-    - ['P SSC1 C +UPGRADE:SUCCEED']
-  - - SSC SSC1 upgrade -R -b 0
-    - [R SSC1 C !!!ready!!!]
-  - - SSC SSC1 dhcp -S -o 1
-    - [R SSC1 C +DHCP]
-  - - SSC SSC1 sta -C -s <ap_ssid> -p <ap_password>
-    - ['R SSC1 RE "\+JAP:CONNECTED,%%s"%%(<ap_ssid>)']
-  initial condition detail: APSTA mode, connected to AP, running BIN0 (located on
-    flash id 0)
-  restore cmd set:
-  - ''
-  - - SSC SSC1 upgrade -Q -t 2 -b 0
-    - ['R SSC1 C BIN_INFO,0']
-  - - SSC SSC1 upgrade -R -b 0
-    - [R SSC1 C !!!ready!!!]
-  - - SSC SSC1 op -S -o 3
-    - ['R SSC1 C +MODE:OK']
-  - - SSC SSC1 dhcp -S -o 1
-    - [R SSC1 C +DHCP]
-  - - SSC SSC1 sta -C -s <ap_ssid> -p <ap_password>
-    - ['R SSC1 RE "\+JAP:CONNECTED,%%s"%%(<ap_ssid>)']
-  restore post cmd set:
-  - ''
-  - - SSC SSC1 upgrade -D
-    - ['R SSC1 C +UPGRADE:OK']
-  - - SSC SSC1 ram
-    - ['R SSC1 A <heap_size>:(\d+)']
-  script path: InitCondBase.py
-  start: 24.0
-  tag: STAAPBIN0
-  test script: InitCondBase
-- check cmd set:
-  - ''
-  - - SSC SSC1 op -Q
-    - ['R SSC1 C +CURMODE:1']
-  - - SSC SSC1 sta -D
-    - ['R SSC1 C +QAP:']
-  - - SSC SSC1 dhcp -Q -o 1
-    - ['R SSC1 C +DHCP:STA,STARTED']
-  - - SSC SSC1 mac -Q -o 1
-    - [R SSC1 P <target_mac>]
-  force restore cmd set:
-  - ''
-  - - SSC SSC1 reboot
-    - [R SSC1 C !!!ready!!!]
-  - - SSC SSC1 op -S -o 1
-    - ['R SSC1 C +MODE:OK']
-  - - SSC SSC1 sta -D
-    - ['R SSC1 C +QAP:']
-  - - SSC SSC1 dhcp -S -o 1
-    - [R SSC1 C +DHCP]
-  - - SSC SSC1 mac -S -o 1 -m <target_mac>
-    - ['R SSC1 C +MAC:STA,OK']
-  initial condition detail: sta mode, quit AP, DHCP on, will autogen a TC with initial
-    condition STAAP1
-  restore cmd set:
-  - ''
-  - - SSC SSC1 op -S -o 1
-    - ['R SSC1 C +MODE:OK']
-  - - SSC SSC1 sta -D
-    - ['R SSC1 C +QAP:']
-  - - SSC SSC1 dhcp -S -o 1
-    - [R SSC1 C +DHCP]
-  - - SSC SSC1 mac -S -o 1 -m <target_mac>
-    - ['R SSC1 C +MAC:STA,OK']
-  restore post cmd set:
-  - ''
-  - - SSC SSC1 soc -T
-    - [R SSC1 C +CLOSEALL]
-  - - SSC SSC1 ram
-    - ['R SSC1 C +FREEHEAP:']
-  script path: InitCondBase.py
-  start: 17.0
-  tag: STAM1
-  test script: InitCondBase
-- check cmd set:
-  - ''
-  - - SSC SSC1 op -Q
-    - ['R SSC1 C +CURMODE:1']
-  - - SSC SSC1 sta -Q
-    - ['R SSC1 RE "\+JAP:CONNECTED,%%s"%%(<ap_ssid>)']
-  - - SSC SSC1 dhcp -Q -o 1
-    - ['R SSC1 C +DHCP:STA,STARTED']
-  - - SSC SSC1 mac -Q -o 1
-    - [R SSC1 P <target_mac>]
-  force restore cmd set:
-  - ''
-  - - SSC SSC1 reboot
-    - [R SSC1 C !!!ready!!!]
-  - - SSC SSC1 op -S -o 1
-    - ['R SSC1 C +MODE:OK']
-  - - SSC SSC1 dhcp -S -o 1
-    - [R SSC1 C +DHCP]
-  - - SSC SSC1 mac -S -o 1 -m <target_mac>
-    - ['R SSC1 C +MAC:STA,OK']
-  - - SSC SSC1 sta -C -s <ap_ssid> -p <ap_password>
-    - ['R SSC1 RE "\+JAP:CONNECTED,%%s"%%(<ap_ssid>)']
-  initial condition detail: sta mode, join AP, DHCP on, will autogen a TC with initial
-    condition STAAP2
-  restore cmd set:
-  - ''
-  - - SSC SSC1 op -S -o 1
-    - ['R SSC1 C +MODE:OK']
-  - - SSC SSC1 dhcp -S -o 1
-    - [R SSC1 C +DHCP]
-  - - SSC SSC1 mac -S -o 1 -m <target_mac>
-    - ['R SSC1 C +MAC:STA,OK']
-  - - SSC SSC1 sta -C -s <ap_ssid> -p <ap_password>
-    - ['R SSC1 RE "\+JAP:CONNECTED,%%s"%%(<ap_ssid>)']
-  restore post cmd set:
-  - ''
-  - - SSC SSC1 soc -T
-    - [R SSC1 C +CLOSEALL]
-  - - SSC SSC1 ram
-    - ['R SSC1 C +FREEHEAP:']
-  script path: InitCondBase.py
-  start: 24.0
-  tag: STAM2
-  test script: InitCondBase
-- check cmd set:
-  - ''
-  - - SSC SSC1 upgrade -Q -t 1
-    - ['R SSC1 C BIN_ID,0']
-  - - SSC SSC1 upgrade -Q -t 2 -b 0
-    - ['R SSC1 C BIN_INFO,0']
-  - - SSC SSC1 op -S -o 1
-    - ['R SSC1 C +MODE:OK']
-  - - SSC SSC1 dhcp -S -o 1
-    - [R SSC1 C +DHCP]
-  - - SSC SSC1 sta -C -s <ap_ssid> -p <ap_password>
-    - ['R SSC1 RE "\+JAP:CONNECTED,%%s"%%(<ap_ssid>)']
-  force restore cmd set:
-  - ''
-  - - SSC SSC1 upgrade -R -r 1 -s <ota_bin_size>
-    - [R SSC1 NC ERROR C !!!ready!!!]
-  - - SSC SSC1 op -S -o 1
-    - ['R SSC1 C +MODE:OK']
-  - - SSC SSC1 dhcp -S -o 1
-    - [R SSC1 C +DHCP]
-  - - SSC SSC1 sta -C -s <ap_ssid> -p <ap_password>
-    - ['R SSC1 RE "\+JAP:CONNECTED,%%s"%%(<ap_ssid>)']
-  - - SOC SOC1 ULISTEN <test_tcp_port1> <pc_ip>
-    - [R SOC_COM L OK]
-  - - SOC SOC1 SETOPT REPLY BIN
-    - [R SOC_COM C OK]
-  - - SSC SSC1 upgrade -I -b 0 -f 0
-    - ['P SSC1 C +UPGRADE:OK']
-  - - SSC SSC1 upgrade -U -i <pc_ip> -p <test_tcp_port1> -u <ota_bin>
-    - ['P SSC1 C +UPGRADE:SUCCEED']
-  - - SSC SSC1 upgrade -R -b 0
-    - [R SSC1 C !!!ready!!!]
-  - - SSC SSC1 dhcp -S -o 1
-    - [R SSC1 C +DHCP]
-  - - SSC SSC1 sta -C -s <ap_ssid> -p <ap_password>
-    - ['R SSC1 RE "\+JAP:CONNECTED,%%s"%%(<ap_ssid>)']
-  initial condition detail: STA mode, connected to AP, running BIN0 (located on flash
-    id 0)
-  restore cmd set:
-  - ''
-  - - SSC SSC1 upgrade -Q -t 2 -b 0
-    - ['R SSC1 C BIN_INFO,0']
-  - - SSC SSC1 upgrade -R -b 0
-    - [R SSC1 C !!!ready!!!]
-  - - SSC SSC1 op -S -o 1
-    - ['R SSC1 C +MODE:OK']
-  - - SSC SSC1 dhcp -S -o 1
-    - [R SSC1 C +DHCP]
-  - - SSC SSC1 sta -C -s <ap_ssid> -p <ap_password>
-    - ['R SSC1 RE "\+JAP:CONNECTED,%%s"%%(<ap_ssid>)']
-  restore post cmd set:
-  - ''
-  - - SSC SSC1 upgrade -D
-    - ['R SSC1 C +UPGRADE:OK']
-  - - SSC SSC1 ram
-    - ['R SSC1 A <heap_size>:(\d+)']
-  script path: InitCondBase.py
-  start: 17.0
-  tag: STAMBIN0
-  test script: InitCondBase
-- check cmd set:
-  - ''
-  - - SSC SSC1 op -Q
-    - ['R SSC1 C +CURMODE:1']
-  - - SSC SSC1 sta -D
-    - ['R SSC1 C +QAP:']
-  - - SSC SSC1 dhcp -Q -o 1
-    - ['R SSC1 C +DHCP:STA,STARTED']
-  - - SSC SSC1 mac -Q -o 1
-    - [R SSC1 P <target_mac>]
-  force restore cmd set:
-  - ''
-  - - SSC SSC1 reboot
-    - [R SSC1 C !!!ready!!!]
-  - - SSC SSC1 op -S -o 1
-    - ['R SSC1 C +MODE:OK']
-  - - SSC SSC1 sta -D
-    - ['R SSC1 C +QAP:']
-  - - SSC SSC1 dhcp -S -o 1
-    - [R SSC1 C +DHCP]
-  - - SSC SSC1 mac -S -o 1 -m <target_mac>
-    - ['R SSC1 C +MAC:STA,OK']
-  initial condition detail: sta mode, quit AP, will NOT autogen a TC with initial
-    condition STAAP1
-  restore cmd set:
-  - ''
-  - - SSC SSC1 op -S -o 1
-    - ['R SSC1 C +MODE:OK']
-  - - SSC SSC1 sta -D
-    - ['R SSC1 C +QAP:']
-  - - SSC SSC1 dhcp -S -o 1
-    - [R SSC1 C +DHCP]
-  - - SSC SSC1 mac -S -o 1 -m <target_mac>
-    - ['R SSC1 C +MAC:STA,OK']
-  restore post cmd set:
-  - ''
-  - - SSC SSC1 soc -T
-    - [R SSC1 C +CLOSEALL]
-  - - SSC SSC1 ram
-    - ['R SSC1 C +FREEHEAP:']
-  script path: InitCondBase.py
-  start: 17.0
-  tag: STAO1
-  test script: InitCondBase
-- check cmd set:
-  - ''
-  - - SSC SSC1 op -Q
-    - ['R SSC1 C +CURMODE:1']
-  - - SSC SSC1 sta -Q
-    - ['R SSC1 RE "\+JAP:CONNECTED,%%s"%%(<ap_ssid>)']
-  - - SSC SSC1 dhcp -Q -o 1
-    - ['R SSC1 C +DHCP:STA,STARTED']
-  - - SSC SSC1 mac -Q -o 1
-    - [R SSC1 P <target_mac>]
-  force restore cmd set:
-  - ''
-  - - SSC SSC1 reboot
-    - [R SSC1 C !!!ready!!!]
-  - - SSC SSC1 op -S -o 1
-    - ['R SSC1 C +MODE:OK']
-  - - SSC SSC1 dhcp -S -o 1
-    - [R SSC1 C +DHCP]
-  - - SSC SSC1 mac -S -o 1 -m <target_mac>
-    - ['R SSC1 C +MAC:STA,OK']
-  - - SSC SSC1 sta -C -s <ap_ssid> -p <ap_password>
-    - ['R SSC1 RE "\+JAP:CONNECTED,%%s"%%(<ap_ssid>)']
-  initial condition detail: sta mode, join AP, DHCP on, will NOT autogen a TC with
-    initial condition STAAP2
-  restore cmd set:
-  - ''
-  - - SSC SSC1 op -S -o 1
-    - ['R SSC1 C +MODE:OK']
-  - - SSC SSC1 dhcp -S -o 1
-    - [R SSC1 C +DHCP]
-  - - SSC SSC1 mac -S -o 1 -m <target_mac>
-    - ['R SSC1 C +MAC:STA,OK']
-  - - SSC SSC1 sta -C -s <ap_ssid> -p <ap_password>
-    - ['R SSC1 RE "\+JAP:CONNECTED,%%s"%%(<ap_ssid>)']
-  restore post cmd set:
-  - ''
-  - - SSC SSC1 soc -T
-    - [R SSC1 C +CLOSEALL]
-  - - SSC SSC1 ram
-    - ['R SSC1 C +FREEHEAP:']
-  script path: InitCondBase.py
-  start: 24.0
-  tag: STAO2
-  test script: InitCondBase
-- check cmd set:
-  - ''
-  - - SSC SSC1 op -Q
-    - ['R SSC1 C +CURMODE:2']
-  - - SSC SSC2 op -Q
-    - ['R SSC2 C +CURMODE:1']
-  - - SSC SSC2 sta -D
-    - ['R SSC2 C +QAP:']
-  - - SSC SSC2 soc -T
-    - ['']
-  - - SSC SSC1 dhcp -Q -o 2
-    - ['R SSC1 C +DHCP:AP,STARTED']
-  - - SSC SSC2 dhcp -Q -o 1
-    - ['R SSC2 C +DHCP:STA,STARTED']
-  - - SSC SSC1 mac -Q -o 2
-    - [R SSC1 P <target_ap_mac>]
-  - - SSC SSC2 mac -Q -o 1
-    - [R SSC2 P <target2_mac>]
-  force restore cmd set:
-  - ''
-  - - SSC SSC1 reboot
-    - [R SSC1 C !!!ready!!!]
-  - - SSC SSC2 reboot
-    - [R SSC2 C !!!ready!!!]
-  - - SSC SSC1 op -S -o 2
-    - ['R SSC1 C +MODE:OK']
-  - - SSC SSC2 op -S -o 1
-    - ['R SSC2 C +MODE:OK']
-  - - SSC SSC2 sta -D
-    - ['R SSC2 C +QAP:']
-  - - SSC SSC2 soc -T
-    - ['']
-  - - SSC SSC1 dhcp -S -o 2
-    - [R SSC1 C +DHCP]
-  - - SSC SSC2 dhcp -S -o 1
-    - [R SSC2 C +DHCP]
-  - - SSC SSC1 mac -S -o 2 -m <target_ap_mac>
-    - ['R SSC1 C +MAC:AP,OK']
-  - - SSC SSC2 mac -S -o 1 -m <target2_mac>
-    - ['R SSC2 C +MAC:STA,OK']
-  initial condition detail: same as T2_1 but will NOT autogen a TC with initial condition
-    T2_2
-  restore cmd set:
-  - ''
-  - - SSC SSC1 op -S -o 2
-    - ['R SSC1 C +MODE:OK']
-  - - SSC SSC2 op -S -o 1
-    - ['R SSC2 C +MODE:OK']
-  - - SSC SSC2 sta -D
-    - ['R SSC2 C +QAP:']
-  - - SSC SSC2 soc -T
-    - ['']
-  - - SSC SSC1 dhcp -S -o 2
-    - [R SSC1 C +DHCP]
-  - - SSC SSC2 dhcp -S -o 1
-    - [R SSC2 C +DHCP]
-  - - SSC SSC1 mac -S -o 2 -m <target_ap_mac>
-    - ['R SSC1 C +MAC:AP,OK']
-  - - SSC SSC2 mac -S -o 1 -m <target2_mac>
-    - ['R SSC2 C +MAC:STA,OK']
-  restore post cmd set:
-  - ''
-  - - SSC SSC1 soc -T
-    - [R SSC1 C +CLOSEALL]
-  - - SSC SSC1 ram
-    - ['R SSC1 C +FREEHEAP:']
-  script path: InitCondBase.py
-  start: 73.0
-  tag: T2O_1
-  test script: InitCondBase
-- check cmd set:
-  - ''
-  - - SSC SSC1 op -Q
-    - ['R SSC1 C +CURMODE:2']
-  - - SSC SSC2 op -Q
-    - ['R SSC2 C +CURMODE:1']
-  - - SSC SSC2 sta -D
-    - ['R SSC2 C +QAP:']
-  - - SSC SSC2 soc -T
-    - ['']
-  - - SSC SSC1 dhcp -Q -o 2
-    - ['R SSC1 C +DHCP:AP,STARTED']
-  - - SSC SSC2 dhcp -Q -o 1
-    - ['R SSC2 C +DHCP:STA,STARTED']
-  - - SSC SSC1 mac -Q -o 2
-    - [R SSC1 P <target_ap_mac>]
-  - - SSC SSC2 mac -Q -o 1
-    - [R SSC2 P <target2_mac>]
-  force restore cmd set:
-  - ''
-  - - SSC SSC1 reboot
-    - [R SSC1 C !!!ready!!!]
-  - - SSC SSC2 reboot
-    - [R SSC2 C !!!ready!!!]
-  - - SSC SSC1 op -S -o 2
-    - ['R SSC1 C +MODE:OK']
-  - - SSC SSC2 op -S -o 1
-    - ['R SSC2 C +MODE:OK']
-  - - SSC SSC2 sta -D
-    - ['R SSC2 C +QAP:']
-  - - SSC SSC2 soc -T
-    - ['']
-  - - SSC SSC1 dhcp -S -o 2
-    - [R SSC1 C +DHCP]
-  - - SSC SSC2 dhcp -S -o 1
-    - [R SSC2 C +DHCP]
-  - - SSC SSC1 mac -S -o 2 -m <target_ap_mac>
-    - ['R SSC1 C +MAC:AP,OK']
-  - - SSC SSC2 mac -S -o 1 -m <target2_mac>
-    - ['R SSC2 C +MAC:STA,OK']
-  initial condition detail: target 1 as SoftAP, target 2 as STA, will autogen a TC
-    with initial condition T2_2
-  restore cmd set:
-  - ''
-  - - SSC SSC1 op -S -o 2
-    - ['R SSC1 C +MODE:OK']
-  - - SSC SSC2 op -S -o 1
-    - ['R SSC2 C +MODE:OK']
-  - - SSC SSC2 sta -D
-    - ['R SSC2 C +QAP:']
-  - - SSC SSC2 soc -T
-    - ['']
-  - - SSC SSC1 dhcp -S -o 2
-    - [R SSC1 C +DHCP]
-  - - SSC SSC2 dhcp -S -o 1
-    - [R SSC2 C +DHCP]
-  - - SSC SSC1 mac -S -o 2 -m <target_ap_mac>
-    - ['R SSC1 C +MAC:AP,OK']
-  - - SSC SSC2 mac -S -o 1 -m <target2_mac>
-    - ['R SSC2 C +MAC:STA,OK']
-  restore post cmd set:
-  - ''
-  - - SSC SSC1 soc -T
-    - [R SSC1 C +CLOSEALL]
-  - - SSC SSC1 ram
-    - ['R SSC1 C +FREEHEAP:']
-  script path: InitCondBase.py
-  start: 73.0
-  tag: T2_1
-  test script: InitCondBase
-- check cmd set:
-  - ''
-  - - SSC SSC1 op -Q
-    - ['R SSC1 C +CURMODE:3']
-  - - SSC SSC2 op -Q
-    - ['R SSC2 C +CURMODE:3']
-  - - SSC SSC2 sta -D
-    - ['R SSC2 C +QAP:']
-  - - SSC SSC2 soc -T
-    - [R SSC2 C +CLOSEALL]
-  - - SSC SSC1 dhcp -Q -o 2
-    - ['R SSC1 C +DHCP:AP,STARTED']
-  - - SSC SSC2 dhcp -Q -o 1
-    - ['R SSC2 C +DHCP:STA,STARTED']
-  - - SSC SSC1 mac -Q -o 2
-    - [R SSC1 P <target_ap_mac>]
-  - - SSC SSC2 mac -Q -o 1
-    - [R SSC2 P <target2_mac>]
-  force restore cmd set:
-  - ''
-  - - SSC SSC1 reboot
-    - [R SSC1 C !!!ready!!!]
-  - - SSC SSC2 reboot
-    - [R SSC2 C !!!ready!!!]
-  - - SSC SSC1 op -S -o 3
-    - ['R SSC1 C +MODE:OK']
-  - - SSC SSC2 op -S -o 3
-    - ['R SSC2 C +MODE:OK']
-  - - SSC SSC2 sta -D
-    - ['R SSC2 C +QAP:']
-  - - SSC SSC2 soc -T
-    - [R SSC2 C +CLOSEALL]
-  - - SSC SSC1 dhcp -S -o 2
-    - [R SSC1 C +DHCP]
-  - - SSC SSC2 dhcp -S -o 1
-    - [R SSC2 C +DHCP]
-  - - SSC SSC1 mac -S -o 2 -m <target_ap_mac>
-    - ['R SSC1 C +MAC:AP,OK']
-  - - SSC SSC2 mac -S -o 1 -m <target2_mac>
-    - ['R SSC2 C +MAC:STA,OK']
-  initial condition detail: target 1 as AP+STA, target 2 as AP+STA (autogen)
-  restore cmd set:
-  - ''
-  - - SSC SSC1 op -S -o 3
-    - ['R SSC1 C +MODE:OK']
-  - - SSC SSC2 op -S -o 3
-    - ['R SSC2 C +MODE:OK']
-  - - SSC SSC2 sta -D
-    - ['R SSC2 C +QAP:']
-  - - SSC SSC2 soc -T
-    - [R SSC2 C +CLOSEALL]
-  - - SSC SSC1 dhcp -S -o 2
-    - [R SSC1 C +DHCP]
-  - - SSC SSC2 dhcp -S -o 1
-    - [R SSC2 C +DHCP]
-  - - SSC SSC1 mac -S -o 2 -m <target_ap_mac>
-    - ['R SSC1 C +MAC:AP,OK']
-  - - SSC SSC2 mac -S -o 1 -m <target2_mac>
-    - ['R SSC2 C +MAC:STA,OK']
-  restore post cmd set:
-  - ''
-  - - SSC SSC1 soc -T
-    - [R SSC1 C +CLOSEALL]
-  - - SSC SSC1 ram
-    - ['R SSC1 C +FREEHEAP:']
-  script path: InitCondBase.py
-  start: 80.0
-  tag: T2_2
-  test script: InitCondBase
-- check cmd set:
-  - ''
-  - - SSC SSC[1-3] op -Q
-    - ['R SSC[1-3] C +CURMODE:3']
-  - - SSC SSC[1-3] phy -Q -o 3
-    - ['R SSC[1-3] C STA,n,40 C AP,n,40']
-  force restore cmd set:
-  - ''
-  - - SSC SSC[1-3] reboot
-    - ['R SSC[1-3] C !!!ready!!!']
-  - - SSC SSC[1-3] op -S -o 3
-    - ['R SSC[1-3] C +MODE:OK']
-  - - SSC SSC[1-3] phy -S -o 3 -m n -b 40
-    - ['R SSC[1-3] C +PHY:OK']
-  initial condition detail: '1. target 1 and target 2 set to AP+STA mode, target 3
-    set to STA mode
-
-    2. all interface of target 2,3 set to 11n ht40
-
-    3. config softAP of target 1 and target 2'
-  restore cmd set:
-  - ''
-  - - SSC SSC[1-3] op -S -o 3
-    - ['R SSC[1-3] C +MODE:OK']
-  - - SSC SSC[1-3] phy -S -o 3 -m n -b 40
-    - ['R SSC[1-3] C +PHY:OK']
-  restore post cmd set:
-  - ''
-  - - SSC SSC1 soc -T
-    - [R SSC1 C +CLOSEALL]
-  - - SSC SSC1 sta -R -r 1
-    - [R SSC1 C OK]
-  - - SSC SSC1 ram
-    - ['R SSC1 A <heap_size>:(\d+)']
-  script path: InitCondBase.py
-  start: 87.0
-  tag: T3_PHY1
-  test script: InitCondBase
-- check cmd set:
-  - ''
-  - - FREBOOT UT1
-    - ['R UT1 C Press%20ENTER%20to%20see%20the%20list%20of%20tests']
-  force restore cmd set:
-  - ''
-  - - FREBOOT UT1
-    - ['R UT1 C Press%20ENTER%20to%20see%20the%20list%20of%20tests']
-  initial condition detail: At UT menu page
-  restore cmd set:
-  - ''
-  - - FREBOOT UT1
-    - ['R UT1 C Press%20ENTER%20to%20see%20the%20list%20of%20tests']
-  restore post cmd set:
-  - ''
-  - - DELAY 0.1
-    - ['']
-  script path: InitCondBase.py
-  tag: UTINIT1
-  test script: InitCondBase

+ 0 - 1
components/idf_test/unit_test/TestCaseScript/IDFUnitTest/__init__.py

@@ -1 +0,0 @@
-__all__ = ["UnitTest"]

+ 0 - 292
components/idf_test/unit_test/TestEnvAll.yml

@@ -1,292 +0,0 @@
-test environment:
-- {PC OS: '', Special: N, Target Count: 1.0, script path: EnvBase.py, tag: AT_T1_1,
-  test environment detail: 'PC has 2 wired NIC connected to AP.
-
-    PC has 1 WiFi NIC.
-
-    1 AT target connect with PC by UART (AT and LOG port).', test script: EnvBase}
-- {PC OS: '', Special: N, Target Count: 1.0, script path: EnvBase.py, tag: AT_T1_2,
-  test environment detail: 'PC has 1 WiFi NIC.
-
-    1 AT target connect with PC by UART (AT and LOG port).', test script: EnvBase}
-- {PC OS: '', Special: N, Target Count: 1.0, script path: EnvBase.py, tag: AT_T1_3,
-  test environment detail: 'Able to access WAN after connect to AP.
-
-    1 AT target connect with PC by UART (AT and LOG port).', test script: EnvBase}
-- {PC OS: '', Special: Y, Target Count: 1.0, script path: EnvBase.py, tag: AT_T1_ADC,
-  test environment detail: 'PC has 1 wired NIC connected to AP.
-
-    Analog input connect to AT1 TOUT.
-
-    Multimeter connect to input, able to measure input voltage.
-
-    1 AT target connect with PC by UART (AT and LOG port).', test script: EnvBase}
-- {PC OS: '', Special: Y, Target Count: 1.0, script path: EnvBase.py, tag: AT_T1_APC1,
-  test environment detail: "PC has 1 wired NIC connected to AP.\nPC has 1 wired NIC\
-    \ connected to APC (static IP within the same subnet with APC). \nAPC control\
-    \ AP power supply. \nPC has 1 WiFi NIC. \n1 AT target connect with PC by UART\
-    \ (AT and LOG port).", test script: EnvBase}
-- {PC OS: '', Special: Y, Target Count: 1.0, script path: EnvBase.py, tag: AT_T1_APC2,
-  test environment detail: "Able to access WAN after connect to AP.\nPC has 1 wired\
-    \ NIC connected to APC (static IP within the same subnet with APC). \nAPC control\
-    \ AP power supply.\nPC has 1 WiFi NIC.\n1 AT target connect with PC by UART (AT\
-    \ and LOG port).", test script: EnvBase}
-- {PC OS: '', Special: Y, Target Count: 1.0, script path: EnvBase.py, tag: AT_T1_HighSpeedUART,
-  test environment detail: 'PC has 2 wired NIC connected to AP.
-
-    PC has 1 WiFi NIC.
-
-    1 AT target connect with PC by high speed UART (AT and LOG port).', test script: EnvBase}
-- {PC OS: '', Special: Y, Target Count: 1.0, script path: EnvBase.py, tag: AT_T1_SmartConfigIOT,
-  test environment detail: '1 AT target connect with PC by UART (AT and LOG port).
-
-    PC has 1 wired NIC connect to Common AP.
-
-    Several AP are placed near AT target.
-
-    Several smart phone installed test APK are placed near AT target.', test script: EnvBase}
-- {PC OS: '', Special: N, Target Count: 2.0, script path: EnvBase.py, tag: AT_T2_1,
-  test environment detail: 'PC has 1 wired NIC connected to AP.
-
-    PC has 1 WiFi NIC.
-
-    2 AT target connect with PC by UART (AT and LOG port).', test script: EnvBase}
-- {PC OS: '', Special: Y, Target Count: 2.0, script path: EnvBase.py, tag: AT_T2_JAP,
-  test environment detail: "Several AP are placed near AT target.\nPC has 1 wired\
-    \ NIC connected to APC (static IP within the same subnet with APC).\nAPC control\
-    \ power supply for all APs. \n2 AT target connect with PC by UART (AT and LOG\
-    \ port).", test script: EnvBase}
-- {PC OS: '', Special: Y, Target Count: 2.0, script path: EnvBase.py, tag: AT_T2_Sleep,
-  test environment detail: 'AP support DTIM placed with AT target.
-
-    2 AT target connect with PC by UART (AT and LOG port).
-
-    Multimeter connect with PC via GPIB.
-
-    Series multimeter between GND and VCC of AT1.
-
-    AT1''s light sleep wakeup pin and wakeup indication connect with AT2''s GPIO.',
-  test script: EnvBase}
-- {PC OS: '', Special: N, Target Count: 2.0, script path: EnvBase.py, tag: AT_T2_SmartConfig,
-  test environment detail: '2 AT target connect with PC by UART (AT and LOG port).
-
-    PC has 1 WiFi NIC.
-
-    One HT20 AP and One HT40 AP are placed near target.', test script: EnvBase}
-- {PC OS: '', Special: Y, Target Count: 1.0, UART ports: 'SSC1
-
-    SSC2', additional param list: '', basic param list: '', script path: EnvBase.py,
-  tag: IR_T2_1, test environment detail: '[TBD] 本测试为非自动测试, 红外能够做到数据收发吻合即可通过', test script: EnvBase}
-- {PC OS: '', Special: Y, Target Count: 2.0, script path: EnvBase.py, tag: NVS_T1_1,
-  test environment detail: '1 NVS target connect with PC by UART.
-
-    1 SSC target connect with PC by UART.
-
-    SSC2 GPIO connect to NVS1 power control pin.', test script: EnvBase}
-- {PC OS: '', Special: Y, Target Count: 1.0, UART ports: SSC_1, additional param list: '',
-  basic param list: '', script path: EnvBase.py, tag: PWM_T1_1, test environment detail: "[TBD]\
-    \ 1. PWM OS SDK 以及 Non-OS SDK的测试建议分开进行, 放在不同的文件夹, 防止文件命名混淆\n2. 分析CSV文件的Python脚本只能分析单个channel\
-    \ \n3. 如果Init脚本打印\"Network Error\" 检查TCP Server是不是正常发送data", test script: EnvBase}
-- {PC OS: '', Special: N, Target Count: 1.0, script path: EnvBase.py, tag: SSC_T1_1,
-  test environment detail: 'PC has 2 wired NIC connected to AP.
-
-    PC has 1 WiFi NIC.
-
-    1 SSC target connect with PC by UART.', test script: EnvBase}
-- {PC OS: '', Special: N, Target Count: 1.0, script path: EnvBase.py, tag: SSC_T1_2,
-  test environment detail: 'Able to access WAN after connect to AP.
-
-    1 SSC target connect with PC by UART.', test script: EnvBase}
-- {PC OS: '', Special: Y, Target Count: 1.0, script path: EnvBase.py, tag: SSC_T1_8089,
-  test environment detail: 'PC has 1 wired NIC connected to AP.
-
-    1 8089 tablet able to run iperf test placed near SSC1.
-
-    1 SSC target connect with PC by UART.', test script: EnvBase}
-- {PC OS: '', Special: Y, Target Count: 1.0, script path: EnvBase.py, tag: SSC_T1_ADC,
-  test environment detail: 'PC has 1 wired NIC connected to AP.
-
-    Analog input connect to SSC1 TOUT.
-
-    Multimeter connect to input, able to measure input voltage.
-
-    1 SSC target connect with PC by UART.', test script: EnvBase}
-- {PC OS: '', Special: Y, Target Count: 1.0, script path: EnvBase.py, tag: SSC_T1_APC,
-  test environment detail: "PC has 1 wired NIC connected to AP.\nPC has 1 wired NIC\
-    \ connected to APC (static IP within the same subnet with APC). \nAPC control\
-    \ AP power supply. \nPC has 1 WiFi NIC. \n1 SSC target connect with PC by UART.",
-  test script: EnvBase}
-- {PC OS: '', Special: Y, Target Count: 1.0, script path: EnvBase.py, tag: SSC_T1_Enterprise,
-  test environment detail: "AP use WPA2-Etherprise is placed near SSC1. \n1 SSC target\
-    \ connect with PC by UART.", test script: EnvBase}
-- {PC OS: '', Special: Y, Target Count: 1.0, script path: EnvBase.py, tag: SSC_T1_IOT1,
-  test environment detail: 'PC has 1 WiFi NIC.
-
-    1 SSC target connect with PC by UART.
-
-    AP todo IOT test are placed near SSC1.', test script: EnvBase}
-- {PC OS: '', Special: Y, Target Count: 2.0, script path: EnvBase.py, tag: SSC_T1_InitData,
-  test environment detail: '2 SSC target connect with PC by UART.
-
-    SSC1 use 40M crystal oscillator.
-
-    SSC2 use normal 26M crystal oscillator.
-
-    SSC2 GPIO connect to SSC1 power control pin.', test script: EnvBase}
-- {PC OS: '', Special: Y, Target Count: 1.0, script path: EnvBase.py, tag: SSC_T1_ShieldBox,
-  test environment detail: 'refer to figure.
-
-    All APs and APC should be set to the same IP subnet.
-
-    PC wired NIC should set static IP address within the same subnet with AP.
-
-    Must use onboard wired NIC.', test script: EnvBase}
-- {PC OS: '', Special: Y, Target Count: 1.0, script path: EnvBase.py, tag: SSC_T1_Sleep1,
-  test environment detail: 'AP support DTIM placed with AT target.
-
-    SSC target connect with Raspberry Pi by UART.
-
-    Multimeter connect with Raspberry Pi via GPIB.
-
-    Series multimeter between GND and VCC of SSC1.
-
-    SSC1''s light sleep wakeup pin and wakeup indication connect with Raspberry Pi''s
-    GPIO.
-
-    SSC1''s XPD connect with RSTB.', test script: EnvBase}
-- {PC OS: '', Special: Y, Target Count: 1.0, script path: EnvBase.py, tag: SSC_T1_Sleep2,
-  test environment detail: 'AP support DTIM placed with AT target.
-
-    SSC target connect with Raspberry Pi by UART.
-
-    Multimeter connect with Raspberry Pi via GPIB.
-
-    Series multimeter between GND and VCC of SSC1.
-
-    SSC1''s RSTB pin connect with Raspberry Pi''s GPIO.', test script: EnvBase}
-- {PC OS: '', Special: Y, Target Count: 1.0, script path: EnvBase.py, tag: SSC_T1_TempBox,
-  test environment detail: '1 SSC target connect with PC by UART.
-
-    Put SSC target to temperature box.', test script: EnvBase}
-- {PC OS: '', Special: Y, Target Count: 1.0, UART ports: SSC_1, additional param list: '',
-  basic param list: '', script path: EnvBase.py, tag: SSC_T1_Timer, test environment detail: '[TBD]
-    通过串口工具调节Timer, 将GPIO_13端口连接到逻辑分析仪', test script: EnvBase}
-- {PC OS: '', Special: Y, Target Count: 1.0, script path: EnvBase.py, tag: SSC_T1_VDD33,
-  test environment detail: '1 SSC target connect with PC by UART.
-
-    Multimeter connect to VDD33, able to measure voltage.', test script: EnvBase}
-- {PC OS: '', Special: N, Target Count: 1.0, script path: EnvBase.py, tag: SSC_T1_WEP,
-  test environment detail: '1 SSC target connect with PC by UART.
-
-    One WEP share key AP placed near SSC1.', test script: EnvBase}
-- {PC OS: '', Special: N, Target Count: 2.0, script path: EnvBase.py, tag: SSC_T2_1,
-  test environment detail: 'PC has 1 wired NIC connected to AP.
-
-    PC has 1 WiFi NIC.
-
-    2 SSC target connect with PC by UART.', test script: EnvBase}
-- {PC OS: '', Special: Y, Target Count: 2.0, UART ports: 'SSC1
-
-    SSC2', additional param list: '', basic param list: '', script path: EnvBase.py,
-  tag: SSC_T2_GPIO1, test environment detail: '[TBD] 2个ESP_8266通过UART连到PC, ESP_8266的
-    GPIO_6相连', test script: EnvBase}
-- {PC OS: '', Special: Y, Target Count: 2.0, UART ports: 'SSC1
-
-    SSC2', additional param list: '', basic param list: '', script path: EnvBase.py,
-  tag: SSC_T2_GPIO2, test environment detail: '[TBD] 1. 2个ESP_8266通过UART连到PC, ESP_8266的
-    GPIO_15通过面包板相连
-
-    2. 可借助面包板, 将GPIO_15, 以及中断函数被打开的8266板的GPIO_2 相连', test script: EnvBase}
-- {PC OS: '', Special: Y, Target Count: 2.0, UART ports: 'SSC1
-
-    SSC2', additional param list: '', basic param list: '', script path: EnvBase.py,
-  tag: SSC_T2_GPIO3, test environment detail: '[TBD] 2个ESP_8266通过UART连到PC, ESP_8266之间需要测试的Target_GPIO相连',
-  test script: EnvBase}
-- {PC OS: '', Special: N, Target Count: 2.0, script path: EnvBase.py, tag: SSC_T2_JAP,
-  test environment detail: 'PC has 1 wired NIC connected to APC.
-
-    APC control the power supply of multiple APs.
-
-    2 SSC target connect with PC by UART.', test script: EnvBase}
-- {PC OS: '', Special: N, Target Count: 2.0, script path: EnvBase.py, tag: SSC_T2_PhyMode,
-  test environment detail: '2 SSC target connect with PC by UART.
-
-    PC has one WiFi NIC support capture wlan packet using libpcap.
-
-    Set 4 AP with phy mode 11b, 11g, 11n HT20, 11n HT40.
-
-    Put 4 APs near SSC targets.', test script: EnvBase}
-- {PC OS: '', Special: Y, Target Count: 2.0, script path: EnvBase.py, tag: SSC_T2_ShieldBox,
-  test environment detail: '2 SSC target connect with PC by UART.
-
-    Put them to Shield box.', test script: EnvBase}
-- {PC OS: '', Special: N, Target Count: 2.0, script path: EnvBase.py, tag: SSC_T2_SmartConfig,
-  test environment detail: '2 SSC target connect with PC by UART.
-
-    PC has 1 WiFi NIC.
-
-    One HT20 AP and One HT40 AP are placed near target.', test script: EnvBase}
-- {PC OS: '', Special: N, Target Count: 3.0, script path: EnvBase.py, tag: SSC_T3_PhyMode,
-  test environment detail: '3 SSC target connect with PC by UART.
-
-    PC has one WiFi NIC support capture wlan packet using libpcap.
-
-    Set 4 AP with (HT20, channel1), (HT20, channel2), (HT40, channel1), (HT40, channel2).
-
-    Put 4 APs near SSC targets.', test script: EnvBase}
-- {PC OS: '', Special: N, Target Count: 5.0, script path: EnvBase.py, tag: SSC_T5_1,
-  test environment detail: 5 SSC target connect with PC by UART., test script: EnvBase}
-- {PC OS: '', Special: Y, Target Count: 5.0, script path: EnvBase.py, tag: SSC_T5_IOT1,
-  test environment detail: '5 SSC targets connect with PC by UART.
-
-    some Android smart phone are placed near SSC targets.', test script: EnvBase}
-- {PC OS: '', Special: N, Target Count: 1.0, script path: EnvBase.py, tag: SSC_T6_1,
-  test environment detail: 'PC has 1 wired NIC connected to AP.
-
-    PC has 1 WiFi NIC.
-
-    6 SSC target connect with PC by UART.', test script: EnvBase}
-- {PC OS: '', Special: Y, Target Count: 1.0, script path: EnvBase.py, tag: TempSensor_T1_1,
-  test environment detail: 'Tempeture sensor target connect with PC by UART.
-
-    AP support DTIM placed with AT target.
-
-    Multimeter connect with PC via GPIB.
-
-    Series multimeter between GND and VCC of TempSensor1.
-
-    PC has 1 wired NIC connected to switch.
-
-    APC, AP also connect with swtich.
-
-    All devices connected with switch use the same IP subnet.
-
-    APC control AP power supply.', test script: EnvBase}
-- {PC OS: '', Special: Y, Target Count: 1.0, UART ports: SSC_1, additional param list: '',
-  basic param list: '', script path: EnvBase.py, tag: UART_T1_1, test environment detail: '[TBD]
-    将ESP_8266通过UART连到PC', test script: EnvBase}
-- {PC OS: '', Special: Y, Target Count: 1.0, UART ports: 'SSC1
-
-    SSC2', additional param list: '', basic param list: '', script path: EnvBase.py,
-  tag: UART_T1_2, test environment detail: '[TBD] ESP_8266通过UART_0通过USB, UART_1 TXD
-    通过 TTLcable 连到PC', test script: EnvBase}
-- {PC OS: '', Special: N, Target Count: 1.0, script path: EnvBase.py, tag: UT_T1_1,
-  test environment detail: Environment for running ESP32 unit tests, test script: EnvBase}
-- {PC OS: '', Special: N, Target Count: 1.0, script path: EnvBase.py, tag: UT_T1_SDMODE,
-  test environment detail: Environment for running sd card sd mode unit tests, test script: EnvBase}
-- {PC OS: '', Special: N, Target Count: 1.0, script path: EnvBase.py, tag: UT_T1_SPIMODE,
-  test environment detail: Environment for running sd card spi mode unit tests, test script: EnvBase}
-- {PC OS: linux, Special: Y, Target Count: 1.0, script path: EnvBase.py, tag: WebServer_T1_1,
-  test environment detail: 'Web Server target connect with PC by UART.
-
-    PC has 1 wired NIC connected to switch.
-
-    APC, AP also connect with swtich.
-
-    All devices connected with switch use same IP subnet.
-
-    APC control AP power supply.', test script: EnvBase}
-- {PC OS: linux, Special: Y, Target Count: 1.0, script path: EnvBase.py, tag: WebServer_T1_2,
-  test environment detail: 'Web Server target connect with PC by UART.
-
-    4 PC with WiFi NIC placed near WebServer1.', test script: EnvBase}

+ 7 - 20
tools/ci/build_examples.sh

@@ -48,9 +48,6 @@ die() {
 
 echo "build_examples running in ${PWD}"
 
-# only 0 or 1 arguments
-[ $# -le 1 ] || die "Have to run as $(basename $0) [<JOB_NAME>]"
-
 export BATCH_BUILD=1
 export V=0 # only build verbose if there's an error
 
@@ -65,26 +62,14 @@ SDKCONFIG_DEFAULTS_CI=sdkconfig.ci
 
 EXAMPLE_PATHS=$( find ${IDF_PATH}/examples/ -type f -name Makefile | grep -v "/build_system/cmake/" | sort )
 
-if [ $# -eq 0 ]
+if [ -z {CI_NODE_TOTAL} ]
 then
     START_NUM=0
     END_NUM=999
 else
-    JOB_NAME=$1
-
-    # parse text prefix at the beginning of string 'some_your_text_NUM'
-    # (will be 'some_your_text' without last '_')
-    JOB_PATTERN=$( echo ${JOB_NAME} | sed -n -r 's/^(.*)_[0-9]+$/\1/p' )
-    [ -z ${JOB_PATTERN} ] && die "JOB_PATTERN is bad"
-
-    # parse number 'NUM' at the end of string 'some_your_text_NUM'
-    # NOTE: Getting rid of the leading zero to get the decimal
-    JOB_NUM=$( echo ${JOB_NAME} | sed -n -r 's/^.*_0*([0-9]+)$/\1/p' )
-    [ -z ${JOB_NUM} ] && die "JOB_NUM is bad"
-
+    JOB_NUM=${CI_NODE_INDEX}
     # count number of the jobs
-    NUM_OF_JOBS=$( grep -c -E "^${JOB_PATTERN}_[0-9]+:$" "${IDF_PATH}/.gitlab-ci.yml" )
-    [ -z ${NUM_OF_JOBS} ] && die "NUM_OF_JOBS is bad"
+    NUM_OF_JOBS=${CI_NODE_TOTAL}
 
     # count number of examples
     NUM_OF_EXAMPLES=$( echo "${EXAMPLE_PATHS}" | wc -l )
@@ -96,10 +81,10 @@ else
     [ -z ${NUM_OF_EX_PER_JOB} ] && die "NUM_OF_EX_PER_JOB is bad"
 
     # ex.: [0; 12); [12; 24); [24; 36); [36; 48); [48; 60)
-    START_NUM=$(( ${JOB_NUM} * ${NUM_OF_EX_PER_JOB} ))
+    START_NUM=$(( (${JOB_NUM} - 1) * ${NUM_OF_EX_PER_JOB} ))
     [ -z ${START_NUM} ] && die "START_NUM is bad"
 
-    END_NUM=$(( (${JOB_NUM} + 1) * ${NUM_OF_EX_PER_JOB} ))
+    END_NUM=$(( ${JOB_NUM} * ${NUM_OF_EX_PER_JOB} ))
     [ -z ${END_NUM} ] && die "END_NUM is bad"
 fi
 
@@ -168,6 +153,8 @@ build_example () {
 
 EXAMPLE_NUM=0
 
+echo "Current job will build example ${START_NUM} - ${END_NUM}"
+
 for EXAMPLE_PATH in ${EXAMPLE_PATHS}
 do
     if [[ $EXAMPLE_NUM -lt $START_NUM || $EXAMPLE_NUM -ge $END_NUM ]]

+ 7 - 17
tools/ci/build_examples_cmake.sh

@@ -68,26 +68,14 @@ SDKCONFIG_DEFAULTS_CI=sdkconfig.ci
 
 EXAMPLE_PATHS=$( find ${IDF_PATH}/examples/ -type f -name CMakeLists.txt | grep -v "/components/" | grep -v "/common_components/" | grep -v "/main/" | grep -v "/idf_as_lib/stubs/" | sort )
 
-if [ $# -eq 0 ]
+if [ -z {CI_NODE_TOTAL} ]
 then
     START_NUM=0
     END_NUM=999
 else
-    JOB_NAME=$1
-
-    # parse text prefix at the beginning of string 'some_your_text_NUM'
-    # (will be 'some_your_text' without last '_')
-    JOB_PATTERN=$( echo ${JOB_NAME} | sed -n -r 's/^(.*)_[0-9]+$/\1/p' )
-    [ -z ${JOB_PATTERN} ] && die "JOB_PATTERN is bad"
-
-    # parse number 'NUM' at the end of string 'some_your_text_NUM'
-    # NOTE: Getting rid of the leading zero to get the decimal
-    JOB_NUM=$( echo ${JOB_NAME} | sed -n -r 's/^.*_0*([0-9]+)$/\1/p' )
-    [ -z ${JOB_NUM} ] && die "JOB_NUM is bad"
-
+    JOB_NUM=${CI_NODE_INDEX}
     # count number of the jobs
-    NUM_OF_JOBS=$( grep -c -E "^${JOB_PATTERN}_[0-9]+:$" "${IDF_PATH}/.gitlab-ci.yml" )
-    [ -z ${NUM_OF_JOBS} ] && die "NUM_OF_JOBS is bad"
+    NUM_OF_JOBS=${CI_NODE_TOTAL}
 
     # count number of examples
     NUM_OF_EXAMPLES=$( echo "${EXAMPLE_PATHS}" | wc -l )
@@ -99,10 +87,10 @@ else
     [ -z ${NUM_OF_EX_PER_JOB} ] && die "NUM_OF_EX_PER_JOB is bad"
 
     # ex.: [0; 12); [12; 24); [24; 36); [36; 48); [48; 60)
-    START_NUM=$(( ${JOB_NUM} * ${NUM_OF_EX_PER_JOB} ))
+    START_NUM=$(( (${JOB_NUM} - 1) * ${NUM_OF_EX_PER_JOB} ))
     [ -z ${START_NUM} ] && die "START_NUM is bad"
 
-    END_NUM=$(( (${JOB_NUM} + 1) * ${NUM_OF_EX_PER_JOB} ))
+    END_NUM=$(( ${JOB_NUM} * ${NUM_OF_EX_PER_JOB} ))
     [ -z ${END_NUM} ] && die "END_NUM is bad"
 fi
 
@@ -156,6 +144,8 @@ build_example () {
 
 EXAMPLE_NUM=0
 
+echo "Current job will build example ${START_NUM} - ${END_NUM}"
+
 for EXAMPLE_PATH in ${EXAMPLE_PATHS}
 do
     if [[ $EXAMPLE_NUM -lt $START_NUM || $EXAMPLE_NUM -ge $END_NUM ]]

+ 14 - 1
tools/tiny-test-fw/Utility/CIAssignTest.py

@@ -134,6 +134,19 @@ class AssignTest(object):
         self.jobs = self._parse_gitlab_ci_config(ci_config_file)
         self.case_group = case_group
 
+    @staticmethod
+    def _handle_parallel_attribute(job_name, job):
+        jobs_out = []
+        try:
+            for i in range(job["parallel"]):
+                jobs_out.append(GitlabCIJob.Job(job, job_name + "_{}".format(i + 1)))
+        except KeyError:
+            # Gitlab don't allow to set parallel to 1.
+            # to make test job name same ($CI_JOB_NAME_$CI_NODE_INDEX),
+            # we append "_" to jobs don't have parallel attribute
+            jobs_out.append(GitlabCIJob.Job(job, job_name + "_"))
+        return jobs_out
+
     def _parse_gitlab_ci_config(self, ci_config_file):
 
         with open(ci_config_file, "r") as f:
@@ -142,7 +155,7 @@ class AssignTest(object):
         job_list = list()
         for job_name in ci_config:
             if self.CI_TEST_JOB_PATTERN.search(job_name) is not None:
-                job_list.append(GitlabCIJob.Job(ci_config[job_name], job_name))
+                job_list.extend(self._handle_parallel_attribute(job_name, ci_config[job_name]))
         job_list.sort(key=lambda x: x["name"])
         return job_list
 

+ 8 - 3
tools/unit-test-app/tools/UnitTestParser.py

@@ -28,8 +28,8 @@ TEST_CASE_PATTERN = {
 class Parser(object):
     """ parse unit test cases from build files and create files for test bench """
 
-    TAG_PATTERN = re.compile("([^=]+)(=)?(.+)?")
-    DESCRIPTION_PATTERN = re.compile("\[([^]\[]+)\]")  # noqa: W605 - regular expression
+    TAG_PATTERN = re.compile(r"([^=]+)(=)?(.+)?")
+    DESCRIPTION_PATTERN = re.compile(r"\[([^]\[]+)\]")
     CONFIG_PATTERN = re.compile(r"{([^}]+)}")
     TEST_GROUPS_PATTERN = re.compile(r"TEST_GROUPS=(.*)$")
 
@@ -261,7 +261,12 @@ class Parser(object):
         dump parsed test cases to YAML file for test bench input
         :param test_cases: parsed test cases
         """
-        with open(os.path.join(self.idf_path, self.TEST_CASE_FILE), "w+") as f:
+        filename = os.path.join(self.idf_path, self.TEST_CASE_FILE)
+        try:
+            os.mkdir(os.path.dirname(filename))
+        except OSError:
+            pass
+        with open(os.path.join(filename), "w+") as f:
             yaml.dump({"test cases": test_cases}, f, allow_unicode=True, default_flow_style=False)
 
     def copy_module_def_file(self):