Greenbone Vulnerability Management Libraries 22.32.0
settings_tests.c
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2025 Greenbone AG
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later
4 */
5
6#include "settings.c"
7
8#include <cgreen/cgreen.h>
9#include <cgreen/mocks.h>
10#include <glib.h>
11#include <glib/gstdio.h>
12#include <stdio.h>
13#include <unistd.h>
14
15Describe (settings);
16
17BeforeEach (settings)
18{
19}
20
21AfterEach (settings)
22{
23}
24
25Ensure (settings, init_settings_iterator_from_file_with_null_params)
26{
27 settings_iterator_t iterator;
28 int ret;
29
30 // Test with NULL filename
31 ret = init_settings_iterator_from_file (&iterator, NULL, "group");
32 assert_that (ret, is_equal_to (-1));
33
34 // Test with NULL group
35 ret = init_settings_iterator_from_file (&iterator, "filename", NULL);
36 assert_that (ret, is_equal_to (-1));
37
38 // Test with both NULL
39 ret = init_settings_iterator_from_file (&iterator, NULL, NULL);
40 assert_that (ret, is_equal_to (-1));
41}
42
43Ensure (settings, init_settings_iterator_from_nonexistent_file)
44{
45 settings_iterator_t iterator;
46 int ret;
47
48 ret = init_settings_iterator_from_file (&iterator, "missing.conf", "group");
49 assert_that (ret, is_equal_to (-1));
50}
51
52Ensure (settings, init_settings_iterator_from_valid_file)
53{
54 settings_iterator_t iterator;
55 int ret;
56 gchar *config_file = "test_settings.conf";
57 FILE *file;
58
59 // Create a temporary configuration file
60 file = fopen (config_file, "w");
61 assert_that (file, is_not_null);
62 fprintf (file, "key1=value1\nkey2=value2\nkey3=value3\n");
63 fclose (file);
64
65 // Initialize iterator from file
66 ret = init_settings_iterator_from_file (&iterator, config_file, "Misc");
67 assert_that (ret, is_equal_to (0));
68
69 // Clean up
70 cleanup_settings_iterator (&iterator);
71 g_remove (config_file);
72}
73
74Ensure (settings, settings_iterator_operations)
75{
76 settings_iterator_t iterator;
77 int ret;
78 gchar *config_file = "test_settings.conf";
79 FILE *file;
80 const gchar *name;
81 gchar *value;
82
83 // Create a temporary configuration file
84 file = fopen (config_file, "w");
85 assert_that (file, is_not_null);
86 fprintf (file, "key1=value1\nkey2=value2\nkey3=value3\n");
87 fclose (file);
88
89 // Initialize iterator from file
90 ret = init_settings_iterator_from_file (&iterator, config_file, "Misc");
91 assert_that (ret, is_equal_to (0));
92
93 // Test iteration
94 assert_that (settings_iterator_next (&iterator), is_true);
95 name = settings_iterator_name (&iterator);
96 value = settings_iterator_value (&iterator);
97 assert_that (name, is_equal_to_string ("key1"));
98 assert_that (value, is_equal_to_string ("value1"));
99 g_free (value);
100
101 assert_that (settings_iterator_next (&iterator), is_true);
102 name = settings_iterator_name (&iterator);
103 value = settings_iterator_value (&iterator);
104 assert_that (name, is_equal_to_string ("key2"));
105 assert_that (value, is_equal_to_string ("value2"));
106 g_free (value);
107
108 assert_that (settings_iterator_next (&iterator), is_true);
109 name = settings_iterator_name (&iterator);
110 value = settings_iterator_value (&iterator);
111 assert_that (name, is_equal_to_string ("key3"));
112 assert_that (value, is_equal_to_string ("value3"));
113 g_free (value);
114
115 // No more items
116 assert_that (settings_iterator_next (&iterator), is_false);
117
118 // Clean up
119 cleanup_settings_iterator (&iterator);
120 g_remove (config_file);
121}
122
123Ensure (settings, settings_group_handling)
124{
125 settings_iterator_t iterator;
126 int ret;
127 gchar *config_file = "test_group_settings.conf";
128 FILE *file;
129 const gchar *name;
130 gchar *value;
131
132 // Create a temporary configuration file with multiple groups
133 file = fopen (config_file, "w");
134 assert_that (file, is_not_null);
135 fprintf (file, "[group1]\n"
136 "key1=value1\nkey2=value2\n\n"
137 "[group2]\n"
138 "key3=value3\nkey4=value4\n");
139 fclose (file);
140
141 // Initialize iterator from file for group1
142 ret = init_settings_iterator_from_file (&iterator, config_file, "group1");
143 assert_that (ret, is_equal_to (0));
144
145 // Test iteration for group1
146 assert_that (settings_iterator_next (&iterator), is_true);
147 name = settings_iterator_name (&iterator);
148 value = settings_iterator_value (&iterator);
149 assert_that (name, is_equal_to_string ("key1"));
150 assert_that (value, is_equal_to_string ("value1"));
151 g_free (value);
152
153 assert_that (settings_iterator_next (&iterator), is_true);
154 name = settings_iterator_name (&iterator);
155 value = settings_iterator_value (&iterator);
156 assert_that (name, is_equal_to_string ("key2"));
157 assert_that (value, is_equal_to_string ("value2"));
158 g_free (value);
159
160 // No more items in group1
161 assert_that (settings_iterator_next (&iterator), is_false);
162
163 // Clean up iterator
164 cleanup_settings_iterator (&iterator);
165
166 // Initialize iterator from file for group2
167 ret = init_settings_iterator_from_file (&iterator, config_file, "group2");
168 assert_that (ret, is_equal_to (0));
169
170 // Test iteration for group2
171 assert_that (settings_iterator_next (&iterator), is_true);
172 name = settings_iterator_name (&iterator);
173 value = settings_iterator_value (&iterator);
174 assert_that (name, is_equal_to_string ("key3"));
175 assert_that (value, is_equal_to_string ("value3"));
176 g_free (value);
177
178 assert_that (settings_iterator_next (&iterator), is_true);
179 name = settings_iterator_name (&iterator);
180 value = settings_iterator_value (&iterator);
181 assert_that (name, is_equal_to_string ("key4"));
182 assert_that (value, is_equal_to_string ("value4"));
183 g_free (value);
184
185 // No more items in group2
186 assert_that (settings_iterator_next (&iterator), is_false);
187
188 // Clean up
189 cleanup_settings_iterator (&iterator);
190 g_remove (config_file);
191}
192
193Ensure (settings, settings_cleanup_function)
194{
195 settings_t settings;
196 settings.file_name = g_strdup ("test.conf");
197 settings.group_name = g_strdup ("test_group");
198 settings.key_file = g_key_file_new ();
199
200 // This should not crash
201 settings_cleanup (&settings);
202}
203
204int
205main (int argc, char **argv)
206{
207 int ret;
208 TestSuite *suite;
209
210 suite = create_test_suite ();
211
212 add_test_with_context (suite, settings,
213 init_settings_iterator_from_file_with_null_params);
214 add_test_with_context (suite, settings,
215 init_settings_iterator_from_nonexistent_file);
216 add_test_with_context (suite, settings,
217 init_settings_iterator_from_valid_file);
218 add_test_with_context (suite, settings, settings_iterator_operations);
219 add_test_with_context (suite, settings, settings_group_handling);
220 add_test_with_context (suite, settings, settings_cleanup_function);
221
222 if (argc > 1)
223 ret = run_single_test (suite, argv[1], create_text_reporter ());
224 else
225 ret = run_test_suite (suite, create_text_reporter ());
226
227 destroy_test_suite (suite);
228
229 return ret;
230}
Implementation of API to handle configuration file management.
gboolean settings_iterator_next(settings_iterator_t *iterator)
Increment an iterator.
Definition settings.c:150
void settings_cleanup(settings_t *settings)
Cleanup a settings structure.
Definition settings.c:81
void cleanup_settings_iterator(settings_iterator_t *iterator)
Cleanup a settings iterator.
Definition settings.c:136
int init_settings_iterator_from_file(settings_iterator_t *iterator, const gchar *filename, const gchar *group)
Initialise a settings iterator from a file.
Definition settings.c:98
gchar * settings_iterator_value(settings_iterator_t *iterator)
Get the value from a settings iterator.
Definition settings.c:179
const gchar * settings_iterator_name(settings_iterator_t *iterator)
Get the name from a settings iterator.
Definition settings.c:166
BeforeEach(settings)
int main(int argc, char **argv)
Describe(settings)
Ensure(settings, init_settings_iterator_from_file_with_null_params)
AfterEach(settings)
Struct holding options to iterate over a GKeyFile.
Definition settings.h:36
Struct holding options for settings taken from a key-value config file.
Definition settings.h:23
GKeyFile * key_file
Definition settings.h:26
gchar * group_name
Definition settings.h:25
gchar * file_name
Definition settings.h:24