Fix CID 1491401 and 1491402: (possible) modulo by zero.
[claws.git] / src / common / tests / utils_get_serverportfp_from_filename_test.c
1 #include <stdio.h>
2 #include <glib.h>
3
4 #include "utils.h"
5
6 #include "mock_prefs_common_get_use_shred.h"
7 #include "mock_prefs_common_get_flush_metadata.h"
8
9 struct td {
10         gchar *str;
11         gboolean ret;
12         gchar *assertmsg;
13         gchar *host;
14         gchar *port;
15         gchar *fp;
16 };
17
18 #define ASSERTMSG_NULLINPUT "*CRITICAL* 'str != NULL' failed*"
19 #define ASSERTMSG_FAILED "*could not parse filename*"
20
21 struct td td_null = {
22         NULL,
23         FALSE, ASSERTMSG_NULLINPUT,
24         NULL, NULL, NULL
25 };
26 struct td td_empty = {
27         "",
28         FALSE, ASSERTMSG_FAILED,
29         NULL, NULL, NULL
30 };
31 struct td td_suffixonly = {
32         ".cert",
33         FALSE, ASSERTMSG_FAILED,
34         NULL, NULL, NULL
35 };
36 struct td td_hostonly = {
37         "foo.cert",
38         FALSE, ASSERTMSG_FAILED,
39         "foo", NULL, NULL
40 };
41 struct td td_short_nofp = {
42         "shorthost.10.cert",
43         TRUE, NULL,
44         "shorthost", "10", NULL
45 };
46 struct td td_short_fp = {
47         "shorthost.10.ab:cd:ef:gh.cert",
48         TRUE, NULL,
49         "shorthost", "10", "ab:cd:ef:gh"
50 };
51 struct td td_ip_nofp = {
52         "10.20.30.40.10.cert",
53         TRUE, NULL,
54         "10.20.30.40", "10", NULL
55 };
56 struct td td_ip_fp = {
57         "10.20.30.40.10.ab:cd:ef:gh.cert",
58         TRUE, NULL,
59         "10.20.30.40", "10", "ab:cd:ef:gh"
60 };
61 struct td td_long_nofp = {
62         "longer.host.name.10.cert",
63         TRUE, NULL,
64         "longer.host.name", "10", NULL
65 };
66 struct td td_long_fp = {
67         "longer.host.name.10.ab:cd:ef:gh.cert",
68         TRUE, NULL,
69         "longer.host.name", "10", "ab:cd:ef:gh"
70 };
71 struct td td_cert_starts_with_digits = {
72         "longer.host.name.10.20:cd:ef:gh.cert",
73         TRUE, NULL,
74         "longer.host.name", "10", "20:cd:ef:gh"
75 };
76
77 void
78 test_utils_get_serverportfp_from_filename_nulloutput()
79 {
80         if (!g_test_undefined())
81                 return;
82
83         if (g_test_subprocess()) {
84                 gboolean ret = get_serverportfp_from_filename("valid.host.10.ab:cd:ef:gh.cert",
85                                 NULL, NULL, NULL);
86                 g_assert_true(ret);
87                 return;
88         }
89
90         g_test_trap_subprocess(NULL, 0, 0);
91         g_test_trap_assert_failed();
92 }
93
94 void
95 test_utils_get_serverportfp_from_filename(gconstpointer user_data)
96 {
97         const struct td *data = (const struct td *)user_data;
98
99         if (!g_test_undefined())
100                 return;
101
102         if (g_test_subprocess()) {
103                 gchar *host, *port, *fp;
104                 gboolean ret = get_serverportfp_from_filename(data->str, &host, &port, &fp);
105
106                 g_assert_true(ret == data->ret);
107                 g_assert_cmpstr(host, ==, data->host);
108                 g_assert_cmpstr(port, ==, data->port);
109                 g_assert_cmpstr(fp, ==, data->fp);
110                 return;
111         }
112
113         g_test_trap_subprocess(NULL, 0, 0);
114
115         if (!data->ret && data->assertmsg != NULL) {
116                 g_test_trap_assert_stderr(data->assertmsg);
117                 g_test_trap_assert_failed();
118         } else {
119                 g_test_trap_assert_passed();
120         }
121 }
122
123 int
124 main(int argc, char *argv[])
125 {
126         g_test_init(&argc, &argv, NULL);
127
128         g_test_add_func("/common/utils/get_serverportfp_from_filename/nulloutput",
129                         test_utils_get_serverportfp_from_filename_nulloutput);
130
131         g_test_add_data_func("/common/utils/get_serverportfp_from_filename/null",
132                         &td_null, test_utils_get_serverportfp_from_filename);
133         g_test_add_data_func("/common/utils/get_serverportfp_from_filename/empty",
134                         &td_empty, test_utils_get_serverportfp_from_filename);
135         g_test_add_data_func("/common/utils/get_serverportfp_from_filename/suffixonly",
136                         &td_suffixonly, test_utils_get_serverportfp_from_filename);
137         g_test_add_data_func("/common/utils/get_serverportfp_from_filename/hostonly",
138                         &td_hostonly, test_utils_get_serverportfp_from_filename);
139         g_test_add_data_func("/common/utils/get_serverportfp_from_filename/short_nofp",
140                         &td_short_nofp, test_utils_get_serverportfp_from_filename);
141         g_test_add_data_func("/common/utils/get_serverportfp_from_filename/short_fp",
142                         &td_short_fp, test_utils_get_serverportfp_from_filename);
143         g_test_add_data_func("/common/utils/get_serverportfp_from_filename/ip_nofp",
144                         &td_ip_nofp, test_utils_get_serverportfp_from_filename);
145         g_test_add_data_func("/common/utils/get_serverportfp_from_filename/ip_fp",
146                         &td_ip_fp, test_utils_get_serverportfp_from_filename);
147         g_test_add_data_func("/common/utils/get_serverportfp_from_filename/long_nofp",
148                         &td_long_nofp, test_utils_get_serverportfp_from_filename);
149         g_test_add_data_func("/common/utils/get_serverportfp_from_filename/long_fp",
150                         &td_long_fp, test_utils_get_serverportfp_from_filename);
151         g_test_add_data_func("/common/utils/get_serverportfp_from_filename/cert_starts_with_digits",
152                         &td_cert_starts_with_digits, test_utils_get_serverportfp_from_filename);
153
154         return g_test_run();
155 }