]> granicus.if.org Git - esp-idf/commitdiff
ethernet: enable unit test
authorsuda-morris <362953310@qq.com>
Thu, 19 Sep 2019 03:27:42 +0000 (11:27 +0800)
committersuda-morris <362953310@qq.com>
Thu, 10 Oct 2019 02:42:48 +0000 (10:42 +0800)
components/esp_eth/test/test_emac.c
tools/ci/config/target-test.yml

index d38c3ac9c254f30fff97bb732933b288e9ff1cd9..f5d1557c6a9b53f662a85a515cd943f6ab02dfdc 100644 (file)
@@ -1,31 +1,47 @@
 #include <stdio.h>
 #include <string.h>
+#include "sdkconfig.h"
 #include "freertos/FreeRTOS.h"
 #include "freertos/task.h"
+#include "freertos/event_groups.h"
 #include "tcpip_adapter.h"
-#include "esp_event.h"
 #include "unity.h"
 #include "test_utils.h"
+#include "esp_event.h"
 #include "esp_eth.h"
 #include "esp_log.h"
-#include "sdkconfig.h"
 
 static const char *TAG = "esp_eth_test";
+
+#define ETH_START_BIT BIT(0)
+#define ETH_STOP_BIT BIT(1)
+#define ETH_CONNECT_BIT BIT(2)
+#define ETH_GOT_IP_BIT BIT(3)
+
+#define ETH_START_TIMEOUT_MS (10000)
+#define ETH_CONNECT_TIMEOUT_MS (40000)
+#define ETH_STOP_TIMEOUT_MS (10000)
+#define ETH_GET_IP_TIMEOUT_MS (60000)
+
 /** Event handler for Ethernet events */
 static void eth_event_handler(void *arg, esp_event_base_t event_base,
                               int32_t event_id, void *event_data)
 {
+    EventGroupHandle_t eth_event_group = (EventGroupHandle_t)arg;
     switch (event_id) {
     case ETHERNET_EVENT_CONNECTED:
+        xEventGroupSetBits(eth_event_group, ETH_CONNECT_BIT);
         ESP_LOGI(TAG, "Ethernet Link Up");
         break;
     case ETHERNET_EVENT_DISCONNECTED:
         ESP_LOGI(TAG, "Ethernet Link Down");
         break;
     case ETHERNET_EVENT_START:
+        xEventGroupSetBits(eth_event_group, ETH_START_BIT);
         ESP_LOGI(TAG, "Ethernet Started");
         break;
     case ETHERNET_EVENT_STOP:
+        xEventGroupSetBits(eth_event_group, ETH_STOP_BIT);
         ESP_LOGI(TAG, "Ethernet Stopped");
         break;
     default:
@@ -37,6 +53,7 @@ static void eth_event_handler(void *arg, esp_event_base_t event_base,
 static void got_ip_event_handler(void *arg, esp_event_base_t event_base,
                                  int32_t event_id, void *event_data)
 {
+    EventGroupHandle_t eth_event_group = (EventGroupHandle_t)arg;
     ip_event_got_ip_t *event = (ip_event_got_ip_t *)event_data;
     const tcpip_adapter_ip_info_t *ip_info = &event->ip_info;
 
@@ -46,27 +63,31 @@ static void got_ip_event_handler(void *arg, esp_event_base_t event_base,
     ESP_LOGI(TAG, "ETHMASK:" IPSTR, IP2STR(&ip_info->netmask));
     ESP_LOGI(TAG, "ETHGW:" IPSTR, IP2STR(&ip_info->gw));
     ESP_LOGI(TAG, "~~~~~~~~~~~");
+    xEventGroupSetBits(eth_event_group, ETH_GOT_IP_BIT);
 }
 
-TEST_CASE("esp32 emac io test", "[ethernet][ignore]")
+TEST_CASE("esp32 ethernet io test", "[ethernet][test_env=UT_T2_Ethernet]")
 {
     TEST_ESP_OK(esp_event_loop_create_default());
     eth_mac_config_t mac_config = ETH_MAC_DEFAULT_CONFIG();
     esp_eth_mac_t *mac = esp_eth_mac_new_esp32(&mac_config);
     eth_phy_config_t phy_config = ETH_PHY_DEFAULT_CONFIG();
     esp_eth_phy_t *phy = esp_eth_phy_new_ip101(&phy_config);
-    esp_eth_config_t config = ETH_DEFAULT_CONFIG(mac, phy);
+    esp_eth_config_t eth_config = ETH_DEFAULT_CONFIG(mac, phy);
     esp_eth_handle_t eth_handle = NULL;
-    TEST_ESP_OK(esp_eth_driver_install(&config, &eth_handle));
+    TEST_ESP_OK(esp_eth_driver_install(&eth_config, &eth_handle));
     vTaskDelay(pdMS_TO_TICKS(1000));
     /* get MAC address */
     uint8_t mac_addr[6];
     memset(mac_addr, 0, sizeof(mac_addr));
     TEST_ESP_OK(esp_eth_ioctl(eth_handle, ETH_CMD_G_MAC_ADDR, mac_addr));
+    ESP_LOGI(TAG, "Ethernet MAC Address: %d:%d:%d:%d:%d:%d",
+             mac_addr[0], mac_addr[1], mac_addr[2], mac_addr[3], mac_addr[4], mac_addr[5]);
     TEST_ASSERT(mac_addr[0] != 0);
     /* get PHY address */
     int phy_addr = -1;
     TEST_ESP_OK(esp_eth_ioctl(eth_handle, ETH_CMD_G_PHY_ADDR, &phy_addr));
+    ESP_LOGI(TAG, "Ethernet PHY Address: %d", phy_addr);
     TEST_ASSERT(phy_addr >= 0 && phy_addr <= 31);
     TEST_ESP_OK(esp_eth_driver_uninstall(eth_handle));
     TEST_ESP_OK(phy->del(phy));
@@ -74,21 +95,65 @@ TEST_CASE("esp32 emac io test", "[ethernet][ignore]")
     TEST_ESP_OK(esp_event_loop_delete_default());
 }
 
-TEST_CASE("ethernet tcpip_adapter", "[ethernet][ignore]")
+TEST_CASE("esp32 ethernet event test", "[ethernet][test_env=UT_T2_Ethernet]")
+{
+    EventBits_t bits = 0;
+    EventGroupHandle_t eth_event_group = xEventGroupCreate();
+    TEST_ASSERT(eth_event_group != NULL);
+    TEST_ESP_OK(esp_event_loop_create_default());
+    TEST_ESP_OK(esp_event_handler_register(ETH_EVENT, ESP_EVENT_ANY_ID, &eth_event_handler, eth_event_group));
+    eth_mac_config_t mac_config = ETH_MAC_DEFAULT_CONFIG();
+    esp_eth_mac_t *mac = esp_eth_mac_new_esp32(&mac_config);
+    eth_phy_config_t phy_config = ETH_PHY_DEFAULT_CONFIG();
+    esp_eth_phy_t *phy = esp_eth_phy_new_ip101(&phy_config);
+    esp_eth_config_t eth_config = ETH_DEFAULT_CONFIG(mac, phy);
+    esp_eth_handle_t eth_handle = NULL;
+    TEST_ESP_OK(esp_eth_driver_install(&eth_config, &eth_handle));
+    /* wait for connection start */
+    bits = xEventGroupWaitBits(eth_event_group, ETH_START_BIT, true, true, pdMS_TO_TICKS(ETH_START_TIMEOUT_MS));
+    TEST_ASSERT((bits & ETH_START_BIT) == ETH_START_BIT);
+    /* wait for connection establish */
+    bits = xEventGroupWaitBits(eth_event_group, ETH_CONNECT_BIT, true, true, pdMS_TO_TICKS(ETH_CONNECT_TIMEOUT_MS));
+    TEST_ASSERT((bits & ETH_CONNECT_BIT) == ETH_CONNECT_BIT);
+    TEST_ESP_OK(esp_eth_driver_uninstall(eth_handle));
+    /* wait for connection stop */
+    bits = xEventGroupWaitBits(eth_event_group, ETH_STOP_BIT, true, true, pdMS_TO_TICKS(ETH_STOP_TIMEOUT_MS));
+    TEST_ASSERT((bits & ETH_STOP_BIT) == ETH_STOP_BIT);
+    // "check link timer callback" might owned the reference of phy object, make sure it has release it
+    vTaskDelay(pdMS_TO_TICKS(2000));
+    TEST_ESP_OK(phy->del(phy));
+    TEST_ESP_OK(mac->del(mac));
+    TEST_ESP_OK(esp_event_handler_unregister(ETH_EVENT, ESP_EVENT_ANY_ID, eth_event_handler));
+    TEST_ESP_OK(esp_event_loop_delete_default());
+    vEventGroupDelete(eth_event_group);
+}
+
+TEST_CASE("esp32 ethernet dhcp test", "[ethernet][test_env=UT_T2_Ethernet]")
 {
+    EventBits_t bits = 0;
+    EventGroupHandle_t eth_event_group = xEventGroupCreate();
+    TEST_ASSERT(eth_event_group != NULL);
     test_case_uses_tcpip();
     TEST_ESP_OK(esp_event_loop_create_default());
     TEST_ESP_OK(tcpip_adapter_set_default_eth_handlers());
-    TEST_ESP_OK(esp_event_handler_register(ETH_EVENT, ESP_EVENT_ANY_ID, &eth_event_handler, NULL));
-    TEST_ESP_OK(esp_event_handler_register(IP_EVENT, IP_EVENT_ETH_GOT_IP, &got_ip_event_handler, NULL));
+    TEST_ESP_OK(esp_event_handler_register(IP_EVENT, IP_EVENT_ETH_GOT_IP, &got_ip_event_handler, eth_event_group));
     eth_mac_config_t mac_config = ETH_MAC_DEFAULT_CONFIG();
     esp_eth_mac_t *mac = esp_eth_mac_new_esp32(&mac_config);
     eth_phy_config_t phy_config = ETH_PHY_DEFAULT_CONFIG();
     esp_eth_phy_t *phy = esp_eth_phy_new_ip101(&phy_config);
-    esp_eth_config_t config = ETH_DEFAULT_CONFIG(mac, phy);
+    esp_eth_config_t eth_config = ETH_DEFAULT_CONFIG(mac, phy);
     esp_eth_handle_t eth_handle = NULL;
-    TEST_ESP_OK(esp_eth_driver_install(&config, &eth_handle));
-    vTaskDelay(portMAX_DELAY);
+    TEST_ESP_OK(esp_eth_driver_install(&eth_config, &eth_handle));
+    /* wait for IP lease */
+    bits = xEventGroupWaitBits(eth_event_group, ETH_GOT_IP_BIT, true, true, pdMS_TO_TICKS(ETH_GET_IP_TIMEOUT_MS));
+    TEST_ASSERT((bits & ETH_GOT_IP_BIT) == ETH_GOT_IP_BIT);
+    TEST_ESP_OK(esp_eth_driver_uninstall(eth_handle));
+    TEST_ESP_OK(phy->del(phy));
+    TEST_ESP_OK(mac->del(mac));
+    TEST_ESP_OK(esp_event_handler_unregister(IP_EVENT, IP_EVENT_ETH_GOT_IP, got_ip_event_handler));
+    TEST_ESP_OK(tcpip_adapter_clear_default_eth_handlers());
+    TEST_ESP_OK(esp_event_loop_delete_default());
+    vEventGroupDelete(eth_event_group);
 }
 
 #if CONFIG_ETH_USE_SPI_ETHERNET
index 4609f10be17525e8f6bf2c1acb428d46a460f423..61cf8dd0986212b267db38d03c9c5d3bb631f05b 100644 (file)
@@ -424,6 +424,20 @@ UT_031:
     - ESP32_IDF
     - UT_T1_FlashEncryption
 
+UT_032:
+  extends: .unit_test_template
+  parallel: 4
+  tags:
+    - ESP32_IDF
+    - UT_T2_Ethernet
+
+UT_033:
+  extends: .unit_test_template
+  tags:
+    - ESP32_IDF
+    - UT_T2_Ethernet
+    - psram
+
 nvs_compatible_test:
   extends: .test_template
   artifacts: