Greenbone Vulnerability Management Libraries 22.32.0
versionutils_tests.c
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2019-2023 Greenbone AG
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later
4 */
5
6#include "versionutils.c"
7
8#include <cgreen/cgreen.h>
9#include <cgreen/mocks.h>
10
11Describe (versionutils);
12BeforeEach (versionutils)
13{
14}
15
16AfterEach (versionutils)
17{
18}
19
20/* cmp_versions */
21
22Ensure (versionutils, cmp_versions_handles_null_inputs)
23{
24 int result;
25
26 result = cmp_versions (NULL, "test");
27 assert_that (result, is_equal_to (-5));
28
29 result = cmp_versions ("test", NULL);
30 assert_that (result, is_equal_to (-5));
31
32 result = cmp_versions (NULL, NULL);
33 assert_that (result, is_equal_to (-5));
34}
35
36Ensure (versionutils, cmp_versions_different_release_states)
37{
38 char *version1, *version2;
39 int result;
40
41 version1 = "test-1.0-alpha";
42 version2 = "test-1.0-dev";
43 result = cmp_versions (version1, version2);
44 assert_that (result, is_greater_than (0));
45 result = cmp_versions (version2, version1);
46 assert_that (result, is_less_than (0));
47
48 version1 = "test-1.0-beta";
49 version2 = "test-1.0-alpha";
50 result = cmp_versions (version1, version2);
51 assert_that (result, is_greater_than (0));
52 result = cmp_versions (version2, version1);
53 assert_that (result, is_less_than (0));
54
55 version1 = "test-1.0-rc";
56 version2 = "test-1.0-beta";
57 result = cmp_versions (version1, version2);
58 assert_that (result, is_greater_than (0));
59 result = cmp_versions (version2, version1);
60 assert_that (result, is_less_than (0));
61
62 version1 = "test-1.0";
63 version2 = "test-1.0-rc";
64 result = cmp_versions (version1, version2);
65 assert_that (result, is_greater_than (0));
66 result = cmp_versions (version2, version1);
67 assert_that (result, is_less_than (0));
68
69 version1 = "test-2.0";
70 version2 = "test-1.0";
71 result = cmp_versions (version1, version2);
72 assert_that (result, is_greater_than (0));
73 result = cmp_versions (version2, version1);
74 assert_that (result, is_less_than (0));
75}
76
77Ensure (versionutils, cmp_versions_dev_vs_development_equivalence)
78{
79 char *version1, *version2;
80 int result;
81
82 version1 = "test-1.0-dev";
83 version2 = "test-1.0-development";
84 result = cmp_versions (version1, version2);
85 assert_that (result, is_equal_to (0));
86}
87
88Ensure (versionutils, cmp_versions_identical_versions)
89{
90 char *version1, *version2;
91 int result;
92
93 version1 = "test-1.0";
94 version2 = "test-1.0";
95 result = cmp_versions (version1, version2);
96 assert_that (result, is_equal_to (0));
97}
98
99Ensure (versionutils, cmp_versions_basic_format_differences)
100{
101 char *version1, *version2;
102 int result;
103
104 version1 = "test";
105 version2 = "test-1";
106 result = cmp_versions (version1, version2);
107 assert_that (result, is_less_than (0));
108 assert_that (result, is_greater_than (-5));
109}
110
111Ensure (versionutils, cmp_versions_text_vs_numeric_parts)
112{
113 char *version1, *version2;
114 int result;
115
116 version1 = "beta-test-2";
117 version2 = "test_1";
118 result = cmp_versions (version1, version2);
119 assert_that (result, is_greater_than (0));
120}
121
122Ensure (versionutils, cmp_versions_equivalent_formats)
123{
124 char *version1, *version2;
125 int result;
126
127 version1 = "beta-test-2";
128 version2 = "test-2.beta";
129 result = cmp_versions (version1, version2);
130 assert_that (result, is_equal_to (0));
131}
132
133Ensure (versionutils, cmp_versions_undefined_text_parts)
134{
135 char *version1, *version2;
136 int result;
137
138 version1 = "test-2.beta";
139 version2 = "test-2.a";
140 result = cmp_versions (version1, version2);
141 assert_that (result, is_equal_to (-5));
142}
143
144Ensure (versionutils, cmp_versions_text_vs_numeric)
145{
146 char *version1, *version2;
147 int result;
148
149 version1 = "test-2.beta";
150 version2 = "test-2.1";
151 result = cmp_versions (version1, version2);
152 assert_that (result, is_equal_to (-1));
153}
154
155Ensure (versionutils, cmp_versions_release_candidate_vs_release)
156{
157 char *version1, *version2;
158 int result;
159
160 version1 = "test-2.release_candidate";
161 version2 = "test-2";
162 result = cmp_versions (version1, version2);
163 assert_that (result, is_equal_to (-1));
164}
165
166Ensure (versionutils, cmp_versions_release_candidate_numeric_comparison)
167{
168 char *version1, *version2;
169 int result;
170
171 version1 = "test-2.release_candidate2";
172 version2 = "test-2.release_candidate1";
173 result = cmp_versions (version1, version2);
174 assert_that (result, is_greater_than (0));
175}
176
177Ensure (versionutils, cmp_versions_release_candidate_text_comparison)
178{
179 char *version1, *version2;
180 int result;
181
182 version1 = "test-2.release_candidatea";
183 version2 = "test-2.release_candidateb";
184 result = cmp_versions (version1, version2);
185 assert_that (result, is_equal_to (-5));
186}
187
188Ensure (versionutils, cmp_versions_date_format)
189{
190 char *version1, *version2;
191 int result;
192
193 version1 = "2024-06-24";
194 version2 = "2024-06-23";
195 result = cmp_versions (version1, version2);
196 assert_that (result, is_greater_than (0));
197}
198
199Ensure (versionutils, cmp_versions_additional_numeric_comparison)
200{
201 char *version1, *version2;
202 int result;
203
204 version1 = "test-2.5";
205 version2 = "test-2.3";
206 result = cmp_versions (version1, version2);
207 assert_that (result, is_greater_than (0));
208
209 version1 = "test-2.22";
210 version2 = "test-2.1";
211 result = cmp_versions (version1, version2);
212 assert_that (result, is_greater_than (0));
213}
214
215/* Test suite. */
216
217int
218main (int argc, char **argv)
219{
220 int ret;
221 TestSuite *suite;
222
223 suite = create_test_suite ();
224
225 add_test_with_context (suite, versionutils, cmp_versions_handles_null_inputs);
226 add_test_with_context (suite, versionutils, cmp_versions_identical_versions);
227 add_test_with_context (suite, versionutils,
228 cmp_versions_different_release_states);
229 add_test_with_context (suite, versionutils,
230 cmp_versions_dev_vs_development_equivalence);
231 add_test_with_context (suite, versionutils,
232 cmp_versions_basic_format_differences);
233 add_test_with_context (suite, versionutils,
234 cmp_versions_text_vs_numeric_parts);
235 add_test_with_context (suite, versionutils, cmp_versions_equivalent_formats);
236 add_test_with_context (suite, versionutils,
237 cmp_versions_undefined_text_parts);
238 add_test_with_context (suite, versionutils, cmp_versions_text_vs_numeric);
239 add_test_with_context (suite, versionutils,
240 cmp_versions_release_candidate_vs_release);
241 add_test_with_context (suite, versionutils,
242 cmp_versions_release_candidate_numeric_comparison);
243 add_test_with_context (suite, versionutils,
244 cmp_versions_release_candidate_text_comparison);
245 add_test_with_context (suite, versionutils, cmp_versions_date_format);
246 add_test_with_context (suite, versionutils,
247 cmp_versions_additional_numeric_comparison);
248
249 if (argc > 1)
250 ret = run_single_test (suite, argv[1], create_text_reporter ());
251 else
252 ret = run_test_suite (suite, create_text_reporter ());
253
254 destroy_test_suite (suite);
255
256 return ret;
257}
Functions to handle version numbers / version strings.
int cmp_versions(const char *version1, const char *version2)
Compare two version strings representing a software version to decide which version is newer.
Ensure(versionutils, cmp_versions_handles_null_inputs)
int main(int argc, char **argv)
Describe(versionutils)
BeforeEach(versionutils)
AfterEach(versionutils)