1 /* Copyright (C) 2020 Greenbone Networks GmbH
2  *
3  * SPDX-License-Identifier: AGPL-3.0-or-later
4  *
5  * This program is free software: you can redistribute it and/or modify
6  * it under the terms of the GNU Affero General Public License as
7  * published by the Free Software Foundation, either version 3 of the
8  * License, or (at your option) any later version.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  * GNU Affero General Public License for more details.
14  *
15  * You should have received a copy of the GNU Affero General Public License
16  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
17  */
18 
19 #include "manage_sql.c"
20 
21 #include <cgreen/cgreen.h>
22 
23 Describe (manage_sql);
BeforeEach(manage_sql)24 BeforeEach (manage_sql) {}
AfterEach(manage_sql)25 AfterEach (manage_sql) {}
26 
27 /* truncate_text */
28 
29 #define PASS(port) assert_that (validate_results_port (port), is_equal_to (0))
30 #define FAIL(port) assert_that (validate_results_port (port), is_equal_to (1))
31 
Ensure(manage_sql,validate_results_port_validates)32 Ensure (manage_sql, validate_results_port_validates)
33 {
34   PASS ("cpe:/a:.joomclan:com_joomclip");
35   PASS ("cpe:two");
36   PASS ("general/tcp");
37   PASS ("general/udp");
38   PASS ("general/Host_Details");
39   PASS ("20/udp");
40   PASS ("20/UDP");
41   PASS ("20/dccp");
42   PASS ("1/tcp");
43   PASS ("8080/tcp");
44   PASS ("65535/tcp");
45 
46   FAIL (NULL);
47   FAIL ("cpe:/a:.joomclan:com_joomclip cpe:two");
48   FAIL ("0/tcp");
49   FAIL ("65536/tcp");
50   FAIL ("20/tcp (IANA: ftp-data)");
51   FAIL ("20/tcp,21/tcp");
52   FAIL ("20/tcp;21/tcp");
53   FAIL ("20/tcp 21/tcp");
54   FAIL ("20-21/tcp");
55   FAIL ("20/tcp-21/tcp");
56   FAIL ("-1/tcp");
57   FAIL ("ftp-data (20/tcp)");
58   FAIL ("80");
59   FAIL ("ftp-data");
60   FAIL ("udp");
61 }
62 
63 #define CMP(one, two, ret) assert_that (streq_ignore_ws (one, two), is_equal_to (ret))
64 
65 #define EQ2(one, two) CMP(one, two, 1); CMP(two, one, 1)
66 #define EQ(string) CMP(string, string, 1)
67 
Ensure(manage_sql,streq_ignore_ws_finds_equal)68 Ensure (manage_sql, streq_ignore_ws_finds_equal)
69 {
70   EQ ("abc");
71   EQ (" abc");
72   EQ ("abc ");
73   EQ ("ab c");
74   EQ ("");
75   EQ (".");
76   EQ (" abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+-=_)(*&^%$#@!~\"':}{<>?");
77   EQ ("three little words");
78 }
79 
Ensure(manage_sql,streq_ignore_ws_finds_equal_despite_ws)80 Ensure (manage_sql, streq_ignore_ws_finds_equal_despite_ws)
81 {
82   EQ2 ("abc", " abc");
83   EQ2 ("abc", "abc ");
84   EQ2 ("abc", "ab c");
85   EQ2 ("abc", " a b    c ");
86 
87   EQ2 ("abc", "\nabc");
88   EQ2 ("abc", "abc\n");
89   EQ2 ("abc", "ab\nc");
90   EQ2 ("abc", "\na\nb\n\n\n\nc\n");
91 
92   EQ2 ("abc", "\tabc");
93   EQ2 ("abc", "abc\t");
94   EQ2 ("abc", "ab\tc");
95   EQ2 ("abc", "\ta\tb\t\t\t\tc\t");
96 
97   EQ2 ("abcd", "\ta\nb \t\nc  \t\t\n\nd\t\n ");
98 
99   EQ2 ("", " ");
100   EQ2 ("", "\t");
101   EQ2 ("", "\n");
102   EQ2 ("", "  ");
103   EQ2 ("", "\t\t");
104   EQ2 ("", "\n\n");
105   EQ2 ("", " \n\t  \n\n\t\t");
106 
107   EQ2 (" \n\t  \n\n\t\t", " \n\t  \n\n\t\t");
108 }
109 
110 #define DIFF(one, two) CMP(one, two, 0); CMP(two, one, 0)
111 
Ensure(manage_sql,streq_ignore_ws_finds_diff)112 Ensure (manage_sql, streq_ignore_ws_finds_diff)
113 {
114   DIFF ("abc", "abcd");
115   DIFF ("abc", "dabc");
116   DIFF ("abc", "abdc");
117   DIFF ("abc", "xyz");
118   DIFF ("abc", "");
119   DIFF ("abc", ".");
120   DIFF ("abc", "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+-=_)(*&^%$#@!~\"':}{<>?");
121 }
122 
Ensure(manage_sql,streq_ignore_ws_finds_diff_incl_ws)123 Ensure (manage_sql, streq_ignore_ws_finds_diff_incl_ws)
124 {
125   DIFF ("zabc", " abc");
126   DIFF ("zabc", "abc ");
127   DIFF ("zabc", "ab c");
128   DIFF ("zabc", " a b    c ");
129 
130   DIFF ("zabc", "\nabc");
131   DIFF ("zabc", "abc\n");
132   DIFF ("zabc", "ab\nc");
133   DIFF ("zabc", "\na\nb\n\n\n\nc\n");
134 
135   DIFF ("zabc", "\tabc");
136   DIFF ("zabc", "abc\t");
137   DIFF ("zabc", "ab\tc");
138   DIFF ("zabc", "\ta\tb\t\t\t\tc\t");
139 
140   DIFF ("zabcd", "\ta\nb \t\nc  \t\t\n\nd\t\n ");
141 
142   DIFF ("a", " ");
143   DIFF ("a", "\t");
144   DIFF ("a", "\n");
145   DIFF ("a", "  ");
146   DIFF ("a", "\t\t");
147   DIFF ("a", "\n\n");
148   DIFF ("a", " \n\t  \n\n\t\t");
149 
150   DIFF ("a \n\t  \n\n\t\t", " \n\t  \n\n\t\t");
151   DIFF (" \n\t  \na\n\t\t", " \n\t  \n\n\t\t");
152   DIFF (" \n\t  \n\n\t\ta", " \n\t  \n\n\t\t");
153 }
154 
Ensure(manage_sql,streq_ignore_ws_handles_null)155 Ensure (manage_sql, streq_ignore_ws_handles_null)
156 {
157   EQ (NULL);
158   DIFF ("abc", NULL);
159 }
160 
161 /* Test suite. */
162 
163 int
main(int argc,char ** argv)164 main (int argc, char **argv)
165 {
166   TestSuite *suite;
167 
168   suite = create_test_suite ();
169 
170   add_test_with_context (suite, manage_sql, validate_results_port_validates);
171 
172   add_test_with_context (suite, manage_sql, streq_ignore_ws_finds_equal);
173   add_test_with_context (suite, manage_sql, streq_ignore_ws_finds_equal_despite_ws);
174   add_test_with_context (suite, manage_sql, streq_ignore_ws_finds_diff);
175   add_test_with_context (suite, manage_sql, streq_ignore_ws_finds_diff_incl_ws);
176   add_test_with_context (suite, manage_sql, streq_ignore_ws_handles_null);
177 
178   if (argc > 1)
179     return run_single_test (suite, argv[1], create_text_reporter ());
180 
181   return run_test_suite (suite, create_text_reporter ());
182 }
183