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

Generated by: LCOV version 1.14