blob: d6b4873d88c6f8c3406e6d2caf83c62bae5600a6 [file] [log] [blame]
Kun Yi9747d632018-06-22 15:32:05 -07001#include <assert.h>
2#include <stdlib.h>
3#include <stdint.h>
4#include <stdio.h>
5
Andrew Jefferyd0a85562023-04-18 06:22:39 +09306#ifndef SYSCONFDIR
Kun Yi9747d632018-06-22 15:32:05 -07007// Bypass compilation error due to -DSYSCONFDIR not provided
8#define SYSCONFDIR
Andrew Jefferyd0a85562023-04-18 06:22:39 +09309#endif
Kun Yi9747d632018-06-22 15:32:05 -070010
11#include "config.c"
Kun Yi9747d632018-06-22 15:32:05 -070012
13struct test_parse_size_unit {
14 const char *test_str;
15 size_t expected_size;
16 int expected_rc;
17};
18
19void test_config_parse_logsize(void)
20{
21 const struct test_parse_size_unit test_data[] = {
22 {"0", 0, -1},
23 {"1", 1, 0},
24 {"4k", 4*1024, 0},
25 {"6M", (6ul << 20), 0},
26 {"4095M", (4095ul << 20), 0},
27 {"2G", (2ul << 30), 0},
28 {"8M\n", (8ul << 20), 0}, /* Suffix ignored */
29 {" 10k", 10*1024, 0}, /* Leading spaces trimmed */
30 {"10k ", 10*1024, 0}, /* Trailing spaces trimmed */
31 {"\r\t10k \r\t",10*1024, 0}, /* Spaces trimmed */
32 {" 10 kB ", 10*1024, 0}, /* Spaces trimmed */
33 {"11G", 0, -1}, /* Overflow */
34 {"4294967296", 0, -1}, /* Overflow */
35 {"4096M", 0, -1}, /* Overflow */
36 {"65535G", 0, -1}, /* Overflow */
37 {"xyz", 0, -1}, /* Invalid */
38 {"000", 0, -1}, /* Invalid */
39 {"0.1", 0, -1}, /* Invalid */
40 {"9T", 0, -1}, /* Invalid suffix */
41 };
42 const size_t num_tests = sizeof(test_data) /
43 sizeof(struct test_parse_size_unit);
44 size_t size;
Andrew Jeffery8f548f62023-04-18 11:48:49 +093045 size_t i;
46 int rc;
Kun Yi9747d632018-06-22 15:32:05 -070047
48 for (i = 0; i < num_tests; i++) {
49 rc = config_parse_logsize(test_data[i].test_str, &size);
50
Andrew Jeffery4f79c0a2023-04-18 16:58:16 +093051 if (rc == -1 && rc != test_data[i].expected_rc) {
52 warn("[%zu] Str %s expected rc %d, got rc %d\n",
53 i,
54 test_data[i].test_str,
55 test_data[i].expected_rc,
56 rc);
57 } else if (rc == 0 && test_data[i].expected_size != size) {
58 warn("[%zu] Str %s expected size %lu, got size %lu\n",
Kun Yi9747d632018-06-22 15:32:05 -070059 i,
60 test_data[i].test_str,
61 test_data[i].expected_size,
Andrew Jeffery4f79c0a2023-04-18 16:58:16 +093062 size);
Kun Yi9747d632018-06-22 15:32:05 -070063 }
64 assert(rc == test_data[i].expected_rc);
65 if (rc == 0)
66 assert(size == test_data[i].expected_size);
67 }
68}
69
70int main(void)
71{
72 test_config_parse_logsize();
73 return EXIT_SUCCESS;
74}