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