diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 26d42b77f..45e4d28db 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -418,6 +418,38 @@ assign_test: CONFIG_FILE: "$CI_PROJECT_DIR/components/idf_test/unit_test/CIConfigs/$CI_JOB_NAME.yml" IDF_PATH: "$CI_PROJECT_DIR" +nvs_compatible_test: + <<: *test_template + artifacts: + when: always + paths: + - $LOG_PATH + - $IDF_PATH/nvs_wifi.bin + expire_in: 6 mos + tags: + - ESP32_IDF + - NVS_Compatible + script: + # remove artifacts from last stage (UT logs) + - rm -rf $LOG_PATH + # add gitlab ssh key + - mkdir -p ~/.ssh + - chmod 700 ~/.ssh + - echo -n $GITLAB_KEY > ~/.ssh/id_rsa_base64 + - base64 --decode --ignore-garbage ~/.ssh/id_rsa_base64 > ~/.ssh/id_rsa + - chmod 600 ~/.ssh/id_rsa + - echo -e "Host gitlab.espressif.cn\n\tStrictHostKeyChecking no\n" >> ~/.ssh/config + # clone local test env configs + - git clone $TEST_ENV_CONFIG_REPOSITORY + # clone test bench + - git clone $TEST_SCRIPT_REPOSITORY + - cd auto_test_script + - git checkout ${CI_COMMIT_REF_NAME} || echo "Using default branch..." + # prepare nvs bins + - ./Tools/prepare_nvs_bin.sh + # 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 + UT_001_01: <<: *unit_test_template tags: diff --git a/components/idf_test/integration_test/CIConfigs/nvs_compatible_test.yml b/components/idf_test/integration_test/CIConfigs/nvs_compatible_test.yml new file mode 100644 index 000000000..ac552ad0c --- /dev/null +++ b/components/idf_test/integration_test/CIConfigs/nvs_compatible_test.yml @@ -0,0 +1,11 @@ +BinPath: + path: test_bins/ESP32_IDF/SSC_BLE + test app: SSC_BLE + +DUT: [SSC1] + +Filter: +- Add: + SDK: ESP32_IDF + Test App: SSC_BLE + summary: 'use old NVS data WIFI function test' diff --git a/components/idf_test/integration_test/TestCaseAll.yml b/components/idf_test/integration_test/TestCaseAll.yml index f60721512..9bfd9c580 100644 --- a/components/idf_test/integration_test/TestCaseAll.yml +++ b/components/idf_test/integration_test/TestCaseAll.yml @@ -8432,4 +8432,35 @@ test cases: 2 SSC target connect with PC by UART.' test point 1: interaction test point 2: Scan interact with other WiFi operation - version: v1 (2015-8-15) \ No newline at end of file + version: v1 (2015-8-15) +- ID: SYS_NVS_01001 + SDK: ESP32_IDF + Test App: SSC_BLE + auto test: 'Yes' + category: Function + test point 1: compatiable test + test point 2: test if latest SDK work with pervious version of NVS data + summary: use old NVS data WIFI function test + steps: | + 1. get NVS data from earlier released branches and last master + 2. download each NVS data to target + 3. check if auto connected to the same AP + 4. check if SoftAP config is correct + expected result: | + 1. succeed + 2. succeed + 3. succeed + 4. succeed + initial condition: None + test environment: SSC_T1_1 + execution time: 0 + module: System + sub module: NVS + version: v1 (2017-06-01) + CI ready: 'SpecialJob' + level: Integration + allow fail: '' + cmd set: + - "NVSTest/NVSCompatibleWiFi" + - - nvs_path = "nvs_bin_folder" + - [''] diff --git a/components/idf_test/integration_test/TestCaseScript/NVSTest/NVSCompatibleWiFi.py b/components/idf_test/integration_test/TestCaseScript/NVSTest/NVSCompatibleWiFi.py new file mode 100644 index 000000000..c9d577fa1 --- /dev/null +++ b/components/idf_test/integration_test/TestCaseScript/NVSTest/NVSCompatibleWiFi.py @@ -0,0 +1,98 @@ +import os +import time + +from TCAction import TCActionBase +from TCAction import PerformanceTCBase +from NativeLog import NativeLog + + +SOFTAP_SSID = "SoftAPSSID4NVSCompatibleTest" +SOFTAP_PASSWORD = "SoftAPPassword4NVSCompatibleTest" + +NVS_FILE_NAME = "nvs_wifi.bin" + + +class TestCase(PerformanceTCBase.PerformanceTCBase): + + def __init__(self, test_case, test_env, timeout=30, log_path=TCActionBase.LOG_PATH): + PerformanceTCBase.PerformanceTCBase.__init__(self, test_case, test_env, timeout=timeout, log_path=log_path) + self.nvs_path = "" + # load param from excel + cmd_set = test_case["cmd set"] + for i in range(1, len(cmd_set)): + if cmd_set[i][0] != "dummy": + cmd_string = "self." + cmd_set[i][0] + exec cmd_string + + def get_nvs_bins(self): + if os.path.exists(self.nvs_path) is False: + NativeLog.add_trace_critical("NVS path is not correct") + files = [] + else: + files = [os.path.join(self.nvs_path, x) for x in os.listdir(self.nvs_path)] + return filter(lambda f: NVS_FILE_NAME in f, files) + + def check_nvs(self, nvs_bin): + branch_name = os.path.basename(nvs_bin) + branch_name.replace("___", "/") + result = True + + ssc1_port = self.test_env.get_port_by_name("SSC1") + ap_ssid = self.get_parameter("ap_ssid") + + self.flush_data("SSC1") + + # first download + ssc1_port.flash_nvs(nvs_bin) + self.check_response("SSC1", "ready!!!") + # set to sta mode and join ap + if self.check_response("SSC1", "+JAP:CONNECTED,%s" % ap_ssid, timeout=15) is False: + NativeLog.add_trace_critical("Failed to join AP on: " + branch_name) + result = False + + self.serial_write_line("SSC1", "op -Q") + if self.check_response("SSC1", "+CURMODE:3") is False: + NativeLog.add_trace_critical("Failed on verifying WIFI mode on: " + branch_name) + result = False + + self.serial_write_line("SSC1", "ap -Q") + if self.check_response("SSC1", "+APCONFIG:%s,%s" % (SOFTAP_SSID, SOFTAP_PASSWORD)) is False: + NativeLog.add_trace_critical("Failed on verifying SoftAP config on: " + branch_name) + result = False + return result + + def dump_nvs(self): + ssc1_port = self.test_env.get_port_by_name("SSC1") + ap_ssid = self.get_parameter("ap_ssid") + ap_password = self.get_parameter("ap_password") + + # first erase NVS + ssc1_port.flash_nvs(None) + + self.check_response("SSC1", "ready!!!") + + self.serial_write_line("SSC1", "op -S -o 3") + self.check_response("SSC1", "+MODE:OK") + self.serial_write_line("SSC1", "sta -C -s %s -p %s" % (ap_ssid, ap_password)) + self.check_response("SSC1", "+JAP:CONNECTED,%s" % ap_ssid, timeout=20) + self.serial_write_line("SSC1", "ap -S -s %s -p %s -t 3" % (SOFTAP_SSID, SOFTAP_PASSWORD)) + self.check_response("SSC1", "+SAP:OK") + time.sleep(1) + + idf_path = os.getenv("IDF_PATH") + + ssc1_port.dump_nvs(os.path.join(idf_path, NVS_FILE_NAME)) + + def cleanup(self): + # make sure dump nvs will be executed + self.dump_nvs() + + def process(self): + result = True + nvs_bins = self.get_nvs_bins() + + for nvs_bin in nvs_bins: + result = result and self.check_nvs(nvs_bin) + + if result is True: + self.set_result("Succeed") diff --git a/components/idf_test/integration_test/TestCaseScript/NVSTest/__init__.py b/components/idf_test/integration_test/TestCaseScript/NVSTest/__init__.py new file mode 100644 index 000000000..e69de29bb