|
8 | 8 | #include <srs_app_config.hpp> |
9 | 9 | #include <srs_app_fragment.hpp> |
10 | 10 | #include <srs_app_hls.hpp> |
| 11 | +#include <srs_app_http_api.hpp> |
11 | 12 | #include <srs_app_http_hooks.hpp> |
12 | 13 | #include <srs_app_rtc_source.hpp> |
13 | 14 | #include <srs_app_server.hpp> |
|
21 | 22 | #include <srs_protocol_utility.hpp> |
22 | 23 | #include <srs_utest_manual_kernel.hpp> |
23 | 24 | #include <srs_utest_manual_mock.hpp> |
| 25 | +#include <srs_utest_ai16.hpp> |
24 | 26 |
|
25 | 27 | #ifdef SRS_FFMPEG_FIT |
26 | 28 | #include <srs_app_rtc_codec.hpp> |
@@ -1311,3 +1313,106 @@ VOID TEST(SdpTest, ParseLibdatachannelSdpFromIssue4570) |
1311 | 1313 | } |
1312 | 1314 | EXPECT_TRUE(found_audio_ssrc); |
1313 | 1315 | } |
| 1316 | + |
| 1317 | +// Test: srs_api_parse_pagination with various input scenarios |
| 1318 | +VOID TEST(HttpApiPaginationTest, ParsePagination) |
| 1319 | +{ |
| 1320 | + int start, count; |
| 1321 | + |
| 1322 | + // Test 1: Default values (no query parameters) |
| 1323 | + if (true) { |
| 1324 | + MockHttpMessageForApiResponse mock_msg; |
| 1325 | + srs_api_parse_pagination(&mock_msg, start, count); |
| 1326 | + EXPECT_EQ(0, start); |
| 1327 | + EXPECT_EQ(10, count); |
| 1328 | + } |
| 1329 | + |
| 1330 | + // Test 2: Valid start and count |
| 1331 | + if (true) { |
| 1332 | + MockHttpMessageForApiResponse mock_msg; |
| 1333 | + mock_msg.query_params_["start"] = "5"; |
| 1334 | + mock_msg.query_params_["count"] = "20"; |
| 1335 | + srs_api_parse_pagination(&mock_msg, start, count); |
| 1336 | + EXPECT_EQ(5, start); |
| 1337 | + EXPECT_EQ(20, count); |
| 1338 | + } |
| 1339 | + |
| 1340 | + // Test 3: Zero count (should use minimum 1) |
| 1341 | + if (true) { |
| 1342 | + MockHttpMessageForApiResponse mock_msg; |
| 1343 | + mock_msg.query_params_["start"] = "0"; |
| 1344 | + mock_msg.query_params_["count"] = "0"; |
| 1345 | + srs_api_parse_pagination(&mock_msg, start, count); |
| 1346 | + EXPECT_EQ(0, start); |
| 1347 | + EXPECT_EQ(1, count); |
| 1348 | + } |
| 1349 | + |
| 1350 | + // Test 4: Negative start (should use minimum 0) |
| 1351 | + if (true) { |
| 1352 | + MockHttpMessageForApiResponse mock_msg; |
| 1353 | + mock_msg.query_params_["start"] = "-10"; |
| 1354 | + mock_msg.query_params_["count"] = "5"; |
| 1355 | + srs_api_parse_pagination(&mock_msg, start, count); |
| 1356 | + EXPECT_EQ(0, start); |
| 1357 | + EXPECT_EQ(5, count); |
| 1358 | + } |
| 1359 | + |
| 1360 | + // Test 5: Negative count (should use minimum 1) |
| 1361 | + if (true) { |
| 1362 | + MockHttpMessageForApiResponse mock_msg; |
| 1363 | + mock_msg.query_params_["start"] = "10"; |
| 1364 | + mock_msg.query_params_["count"] = "-5"; |
| 1365 | + srs_api_parse_pagination(&mock_msg, start, count); |
| 1366 | + EXPECT_EQ(10, start); |
| 1367 | + EXPECT_EQ(1, count); |
| 1368 | + } |
| 1369 | + |
| 1370 | + // Test 6: Empty count string (should use default 10) |
| 1371 | + if (true) { |
| 1372 | + MockHttpMessageForApiResponse mock_msg; |
| 1373 | + mock_msg.query_params_["start"] = "5"; |
| 1374 | + mock_msg.query_params_["count"] = ""; |
| 1375 | + srs_api_parse_pagination(&mock_msg, start, count); |
| 1376 | + EXPECT_EQ(5, start); |
| 1377 | + EXPECT_EQ(10, count); |
| 1378 | + } |
| 1379 | + |
| 1380 | + // Test 7: Only start parameter |
| 1381 | + if (true) { |
| 1382 | + MockHttpMessageForApiResponse mock_msg; |
| 1383 | + mock_msg.query_params_["start"] = "15"; |
| 1384 | + srs_api_parse_pagination(&mock_msg, start, count); |
| 1385 | + EXPECT_EQ(15, start); |
| 1386 | + EXPECT_EQ(10, count); |
| 1387 | + } |
| 1388 | + |
| 1389 | + // Test 8: Only count parameter |
| 1390 | + if (true) { |
| 1391 | + MockHttpMessageForApiResponse mock_msg; |
| 1392 | + mock_msg.query_params_["count"] = "25"; |
| 1393 | + srs_api_parse_pagination(&mock_msg, start, count); |
| 1394 | + EXPECT_EQ(0, start); |
| 1395 | + EXPECT_EQ(25, count); |
| 1396 | + } |
| 1397 | + |
| 1398 | + // Test 9: Invalid (non-numeric) values |
| 1399 | + if (true) { |
| 1400 | + MockHttpMessageForApiResponse mock_msg; |
| 1401 | + mock_msg.query_params_["start"] = "abc"; |
| 1402 | + mock_msg.query_params_["count"] = "xyz"; |
| 1403 | + srs_api_parse_pagination(&mock_msg, start, count); |
| 1404 | + // atoi returns 0 for invalid strings |
| 1405 | + EXPECT_EQ(0, start); |
| 1406 | + EXPECT_EQ(1, count); // minimum enforced since atoi returns 0 |
| 1407 | + } |
| 1408 | + |
| 1409 | + // Test 10: Large values |
| 1410 | + if (true) { |
| 1411 | + MockHttpMessageForApiResponse mock_msg; |
| 1412 | + mock_msg.query_params_["start"] = "1000000"; |
| 1413 | + mock_msg.query_params_["count"] = "500"; |
| 1414 | + srs_api_parse_pagination(&mock_msg, start, count); |
| 1415 | + EXPECT_EQ(1000000, start); |
| 1416 | + EXPECT_EQ(500, count); |
| 1417 | + } |
| 1418 | +} |
0 commit comments