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);
|