LCOV - code coverage report
Current view: top level - app/test - test_ethdev_link.c (source / functions) Hit Total Coverage
Test: Code coverage Lines: 47 47 100.0 %
Date: 2025-11-01 17:50:34 Functions: 6 6 100.0 %
Legend: Lines: hit not hit | Branches: + taken - not taken # not executed Branches: 16 30 53.3 %

           Branch data     Line data    Source code
       1                 :            : /* SPDX-License-Identifier: BSD-3-Clause
       2                 :            :  * Copyright (c) 2020 Samsung Electronics Co., Ltd All Rights Reserved
       3                 :            :  */
       4                 :            : 
       5                 :            : #include <rte_log.h>
       6                 :            : #include <rte_ethdev.h>
       7                 :            : 
       8                 :            : #include <rte_test.h>
       9                 :            : #include "test.h"
      10                 :            : 
      11                 :            : 
      12                 :            : static int32_t
      13                 :          1 : test_link_status_up_default(void)
      14                 :            : {
      15                 :            :         int ret = 0;
      16                 :          1 :         struct rte_eth_link link_status = {
      17                 :            :                 .link_speed = RTE_ETH_SPEED_NUM_2_5G,
      18                 :            :                 .link_status = RTE_ETH_LINK_UP,
      19                 :            :                 .link_autoneg = RTE_ETH_LINK_AUTONEG,
      20                 :            :                 .link_duplex = RTE_ETH_LINK_FULL_DUPLEX,
      21                 :            :                 .link_connector = RTE_ETH_LINK_CONNECTOR_OTHER,
      22                 :            :         };
      23                 :            :         char text[RTE_ETH_LINK_MAX_STR_LEN];
      24                 :            : 
      25                 :          1 :         ret = rte_eth_link_to_str(text, sizeof(text), &link_status);
      26         [ -  + ]:          1 :         RTE_TEST_ASSERT(ret > 0, "Failed to format default string\n");
      27                 :            :         printf("Default link up #1: %s\n", text);
      28         [ -  + ]:          1 :         TEST_ASSERT_BUFFERS_ARE_EQUAL("Link up at 2.5 Gbps FDX Autoneg Other",
      29                 :            :                 text, strlen(text), "Invalid default link status string");
      30                 :            : 
      31                 :          1 :         link_status.link_duplex = RTE_ETH_LINK_HALF_DUPLEX;
      32                 :          1 :         link_status.link_autoneg = RTE_ETH_LINK_FIXED;
      33                 :          1 :         link_status.link_speed = RTE_ETH_SPEED_NUM_10M;
      34                 :          1 :         link_status.link_connector = RTE_ETH_LINK_CONNECTOR_SGMII;
      35                 :          1 :         ret = rte_eth_link_to_str(text, sizeof(text), &link_status);
      36                 :            :         printf("Default link up #2: %s\n", text);
      37         [ -  + ]:          1 :         RTE_TEST_ASSERT(ret > 0, "Failed to format default string\n");
      38         [ -  + ]:          1 :         TEST_ASSERT_BUFFERS_ARE_EQUAL("Link up at 10 Mbps HDX Fixed SGMII",
      39                 :            :                 text, strlen(text), "Invalid default link status "
      40                 :            :                 "string with HDX");
      41                 :            : 
      42                 :          1 :         link_status.link_speed = RTE_ETH_SPEED_NUM_UNKNOWN;
      43                 :          1 :         ret = rte_eth_link_to_str(text, sizeof(text), &link_status);
      44                 :            :         printf("Default link up #3: %s\n", text);
      45         [ -  + ]:          1 :         RTE_TEST_ASSERT(ret > 0, "Failed to format default string\n");
      46         [ -  + ]:          1 :         TEST_ASSERT_BUFFERS_ARE_EQUAL("Link up at Unknown HDX Fixed SGMII",
      47                 :            :                 text, strlen(text), "Invalid default link status "
      48                 :            :                 "string with HDX");
      49                 :            : 
      50                 :          1 :         link_status.link_speed = RTE_ETH_SPEED_NUM_NONE;
      51                 :          1 :         ret = rte_eth_link_to_str(text, sizeof(text), &link_status);
      52                 :            :         printf("Default link up #3: %s\n", text);
      53         [ -  + ]:          1 :         RTE_TEST_ASSERT(ret > 0, "Failed to format default string\n");
      54         [ -  + ]:          1 :         TEST_ASSERT_BUFFERS_ARE_EQUAL("Link up at None HDX Fixed SGMII",
      55                 :            :                 text, strlen(text), "Invalid default link status "
      56                 :            :                 "string with HDX");
      57                 :            : 
      58                 :            :         /* test max str len */
      59                 :          1 :         link_status.link_speed = RTE_ETH_SPEED_NUM_800G;
      60                 :          1 :         link_status.link_duplex = RTE_ETH_LINK_HALF_DUPLEX;
      61                 :          1 :         link_status.link_autoneg = RTE_ETH_LINK_AUTONEG;
      62                 :          1 :         link_status.link_connector = RTE_ETH_LINK_CONNECTOR_GAUI;
      63                 :          1 :         ret = rte_eth_link_to_str(text, sizeof(text), &link_status);
      64                 :            :         printf("Default link up #4:len = %d, %s\n", ret, text);
      65         [ -  + ]:          1 :         RTE_TEST_ASSERT(ret < RTE_ETH_LINK_MAX_STR_LEN,
      66                 :            :                 "String length exceeds max allowed value\n");
      67                 :            :         return TEST_SUCCESS;
      68                 :            : }
      69                 :            : 
      70                 :            : static int32_t
      71                 :          1 : test_link_status_down_default(void)
      72                 :            : {
      73                 :            :         int ret = 0;
      74                 :          1 :         struct rte_eth_link link_status = {
      75                 :            :                 .link_speed = RTE_ETH_SPEED_NUM_2_5G,
      76                 :            :                 .link_status = RTE_ETH_LINK_DOWN,
      77                 :            :                 .link_autoneg = RTE_ETH_LINK_AUTONEG,
      78                 :            :                 .link_duplex = RTE_ETH_LINK_FULL_DUPLEX
      79                 :            :         };
      80                 :            :         char text[RTE_ETH_LINK_MAX_STR_LEN];
      81                 :            : 
      82                 :          1 :         ret = rte_eth_link_to_str(text, sizeof(text), &link_status);
      83         [ -  + ]:          1 :         RTE_TEST_ASSERT(ret > 0, "Failed to format default string\n");
      84         [ -  + ]:          1 :         TEST_ASSERT_BUFFERS_ARE_EQUAL("Link down",
      85                 :            :                 text, strlen(text), "Invalid default link status string");
      86                 :            : 
      87                 :            :         return TEST_SUCCESS;
      88                 :            : }
      89                 :            : 
      90                 :            : static int32_t
      91                 :          1 : test_link_status_invalid(void)
      92                 :            : {
      93                 :            :         int ret = 0;
      94                 :          1 :         struct rte_eth_link link_status = {
      95                 :            :                 .link_speed = 55555,
      96                 :            :                 .link_status = RTE_ETH_LINK_UP,
      97                 :            :                 .link_autoneg = RTE_ETH_LINK_AUTONEG,
      98                 :            :                 .link_duplex = RTE_ETH_LINK_FULL_DUPLEX,
      99                 :            :                 .link_connector = RTE_ETH_LINK_CONNECTOR_OTHER,
     100                 :            :         };
     101                 :            :         char text[RTE_ETH_LINK_MAX_STR_LEN];
     102                 :            : 
     103                 :          1 :         ret = rte_eth_link_to_str(text, sizeof(text), &link_status);
     104         [ -  + ]:          1 :         RTE_TEST_ASSERT(ret < RTE_ETH_LINK_MAX_STR_LEN,
     105                 :            :                 "Failed to format invalid string\n");
     106                 :            :         printf("invalid link up #1: len=%d %s\n", ret, text);
     107         [ -  + ]:          1 :         TEST_ASSERT_BUFFERS_ARE_EQUAL("Link up at Invalid FDX Autoneg Other",
     108                 :            :                 text, strlen(text), "Incorrect invalid link status string");
     109                 :            : 
     110                 :            :         return TEST_SUCCESS;
     111                 :            : }
     112                 :            : 
     113                 :            : 
     114                 :            : static int32_t
     115                 :          1 : test_link_speed_all_values(void)
     116                 :            : {
     117                 :            :         const char *speed;
     118                 :            :         uint32_t i;
     119                 :            :         struct link_speed_t {
     120                 :            :                 const char *value;
     121                 :            :                 uint32_t link_speed;
     122                 :          1 :         } speed_str_map[] = {
     123                 :            :                 { "None",   RTE_ETH_SPEED_NUM_NONE },
     124                 :            :                 { "10 Mbps",  RTE_ETH_SPEED_NUM_10M },
     125                 :            :                 { "100 Mbps", RTE_ETH_SPEED_NUM_100M },
     126                 :            :                 { "1 Gbps",   RTE_ETH_SPEED_NUM_1G },
     127                 :            :                 { "2.5 Gbps", RTE_ETH_SPEED_NUM_2_5G },
     128                 :            :                 { "5 Gbps",   RTE_ETH_SPEED_NUM_5G },
     129                 :            :                 { "10 Gbps",  RTE_ETH_SPEED_NUM_10G },
     130                 :            :                 { "20 Gbps",  RTE_ETH_SPEED_NUM_20G },
     131                 :            :                 { "25 Gbps",  RTE_ETH_SPEED_NUM_25G },
     132                 :            :                 { "40 Gbps",  RTE_ETH_SPEED_NUM_40G },
     133                 :            :                 { "50 Gbps",  RTE_ETH_SPEED_NUM_50G },
     134                 :            :                 { "56 Gbps",  RTE_ETH_SPEED_NUM_56G },
     135                 :            :                 { "100 Gbps", RTE_ETH_SPEED_NUM_100G },
     136                 :            :                 { "200 Gbps", RTE_ETH_SPEED_NUM_200G },
     137                 :            :                 { "400 Gbps", RTE_ETH_SPEED_NUM_400G },
     138                 :            :                 { "800 Gbps", RTE_ETH_SPEED_NUM_800G },
     139                 :            :                 { "Unknown",  RTE_ETH_SPEED_NUM_UNKNOWN },
     140                 :            :                 { "Invalid",   50505 }
     141                 :            :         };
     142                 :            : 
     143         [ +  + ]:         19 :         for (i = 0; i < sizeof(speed_str_map) / sizeof(struct link_speed_t);
     144                 :         18 :                         i++) {
     145                 :         18 :                 speed = rte_eth_link_speed_to_str(speed_str_map[i].link_speed);
     146         [ -  + ]:         18 :                 TEST_ASSERT_BUFFERS_ARE_EQUAL(speed_str_map[i].value,
     147                 :            :                         speed, strlen(speed_str_map[i].value),
     148                 :            :                         "Invalid link speed string");
     149                 :            :         }
     150                 :            :         return TEST_SUCCESS;
     151                 :            : }
     152                 :            : 
     153                 :            : static struct unit_test_suite link_status_testsuite = {
     154                 :            :         .suite_name = "link status formatting",
     155                 :            :         .setup = NULL,
     156                 :            :         .teardown = NULL,
     157                 :            :         .unit_test_cases = {
     158                 :            :                 TEST_CASE(test_link_status_up_default),
     159                 :            :                 TEST_CASE(test_link_status_down_default),
     160                 :            :                 TEST_CASE(test_link_speed_all_values),
     161                 :            :                 TEST_CASE(test_link_status_invalid),
     162                 :            :                 TEST_CASES_END() /**< NULL terminate unit test array */
     163                 :            :         }
     164                 :            : };
     165                 :            : 
     166                 :            : static int
     167                 :          1 : test_link_status(void)
     168                 :            : {
     169                 :          1 :         rte_log_set_global_level(RTE_LOG_DEBUG);
     170                 :          1 :         rte_log_set_level(RTE_LOGTYPE_EAL, RTE_LOG_DEBUG);
     171                 :            : 
     172                 :          1 :         return unit_test_suite_runner(&link_status_testsuite);
     173                 :            : }
     174                 :            : 
     175                 :        253 : REGISTER_FAST_TEST(ethdev_link_status, true, true, test_link_status);

Generated by: LCOV version 1.14