OpenVAS Scanner 23.40.3
ipc_openvas_tests.c
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2023 Greenbone AG
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later
4 */
5
6#include "ipc_openvas.c"
7
8#include <cgreen/cgreen.h>
9#include <cgreen/mocks.h>
10
11Describe (ipc_openvas);
12BeforeEach (ipc_openvas)
13{
14}
15AfterEach (ipc_openvas)
16{
17}
18
19Ensure (ipc_openvas, ipc_data_from_json_ua_ok)
20{
21 ipc_data_t *data_s = NULL;
22 ipc_data_t *data_r = NULL;
23 gchar *ua = "localhost";
24
25 // Preapre data to be sent
26 data_s = g_malloc0 (sizeof (ipc_data_t));
27 data_s = ipc_data_type_from_user_agent (ua, strlen (ua));
28
29 const char *json = ipc_data_to_json (data_s);
30 ipc_data_destroy (&data_s);
31 assert_that (data_s, is_null);
32
33 // Read received data
34 data_r = g_malloc0 (sizeof (ipc_data_t));
35 data_r = ipc_data_from_json (json, strlen (json));
36 assert_that (ipc_get_user_agent_from_data (data_r),
37 is_equal_to_string ("localhost"));
38
39 ipc_data_destroy (&data_r);
40 assert_that (data_s, is_null);
41}
42
43Ensure (ipc_openvas, ipc_data_from_json_hostname_ok)
44{
45 ipc_data_t *data_s = NULL;
46 ipc_data_t *data_r = NULL;
47 gchar *hn = "localhost";
48 gchar *hns = "TLS certificate";
49
50 // Preapre data to be sent
51 data_s = g_malloc0 (sizeof (ipc_data_t));
52 data_s = ipc_data_type_from_hostname (hns, strlen (hns), hn, strlen (hn));
53
54 const char *json = ipc_data_to_json (data_s);
55 ipc_data_destroy (&data_s);
56 assert_that (data_s, is_null);
57
58 // Read received data
59 data_r = g_malloc0 (sizeof (ipc_data_t));
60 data_r = ipc_data_from_json (json, strlen (json));
61 assert_that (ipc_get_hostname_from_data (data_r),
62 is_equal_to_string ("localhost"));
63 assert_that (ipc_get_hostname_source_from_data (data_r),
64 is_equal_to_string ("TLS certificate"));
65
66 ipc_data_destroy (&data_r);
67 assert_that (data_r, is_null);
68}
69
70Ensure (ipc_openvas, ipc_data_from_json_parse_error)
71{
72 ipc_data_t *data_r = NULL;
73 // malformed json string
74 char json_fake[1024] =
75 "{\"type\":2,\"user-agent\":\"Mozilla/5.0 [en] (X11, U; Greenbone OS "
76 "22.04.4)\"}{\"type\":2,\"user-agent\":\"Mozilla/5.0 [en] (X11, U; "
77 "Greenbone OS 22.04.4)\"}{\"type\":2,\"user-agent\":\"Mozilla/5.0 [en] "
78 "(X11, U; Greenbone OS 22.04.4)\"}{\"type\":2,\"user-agent\":\"Mozilla/5.0 "
79 "[en] (X11, U; Greenbone OS "
80 "22.04.4)\"}{\"type\":2,\"user-agent\":\"Mozilla/5.0 [en] (X11, U; "
81 "Greenbone OS 22.04.4)\"}{\"type\":2,\"user-agent\":\"Mozilla/5.0 [en] "
82 "(X11, U; Greenbone OS 22.04.4)\"}{\"type\":2,\"user-agent\":\"Mozilla/5.0 "
83 "[en] (X11, U; Greenbone OS "
84 "22.04.4)\"}{\"type\":2,\"user-agent\":\"Mozilla/5.0 [en] (X11, U; "
85 "Greenbone OS 22.04.4)\"}{\"type\":2,\"user-agent\":\"Mozilla/5.0 [en] "
86 "(X11, U; Greenbone OS 22.04.4)\"}{\"type\":2,\"user-agent\":\"Mozilla/5.0 "
87 "[en] (X11, U; Greenbone OS "
88 "22.04.4)\"}{\"type\":2,\"user-agent\":\"Mozilla/5.0 [en] (X11, U; "
89 "Greenbone OS 22.04.4)\"}{\"type\":2,\"user-agent\":\"Mozilla/5.0 [en] "
90 "(X11, U; Greenbone OS 22.04.4)\"}{\"type\":2,\"user-agent\":\"Mozilla/5.0 "
91 "[en] (X11, U; Greenbone OS 22.04.4)\"}{\"type\":";
92
93 // Read received data
94 data_r = g_malloc0 (sizeof (ipc_data_t));
95 data_r = ipc_data_from_json (json_fake, strlen (json_fake));
96 assert_that (ipc_get_hostname_from_data (data_r), is_null);
97 assert_that (ipc_get_hostname_source_from_data (data_r), is_null);
98 assert_that (data_r, is_null);
99}
100
101Ensure (ipc_openvas, ipc_data_from_json_parse_many_objects)
102{
103 ipc_data_t *data_r = NULL;
104 int len = 0;
105 int pos = 0;
106
107 // json string with more than one objects
108 char json_fake[256] =
109 "{\"type\":1,\"source\":\"TLS "
110 "certificate\",\"hostname\":\"localhost\"}{\"type\":2,\"user-agent\":"
111 "\"Mozilla/5.0 [en] (X11, U; Greenbone OS 22.04.4)\"}";
112
113 for (int i = 0; json_fake[i] != '\0'; i++)
114 {
115 if (json_fake[i] == '}')
116 {
117 gchar *message = NULL;
118 len = i - pos + 1;
119
120 message = g_malloc0 (sizeof (gchar) * (len + 1));
121 memcpy (message, &json_fake[pos], len);
122 printf ("\n\nel mensaje %s\n\n", message);
123 pos = i + 1;
124 len = 0;
125 data_r = g_malloc0 (sizeof (ipc_data_t));
126 data_r = ipc_data_from_json (message, strlen (message));
128 {
129 assert_that (ipc_get_hostname_from_data (data_r),
130 is_equal_to_string ("localhost"));
131 assert_that (ipc_get_hostname_source_from_data (data_r),
132 is_equal_to_string ("TLS certificate"));
133
134 ipc_data_destroy (&data_r);
135 }
136 else
137 {
138 assert_that (
140 is_equal_to_string (
141 "Mozilla/5.0 [en] (X11, U; Greenbone OS 22.04.4)"));
142 ipc_data_destroy (&data_r);
143 }
144 g_free (message);
145 }
146 }
147 assert_that (data_r, is_null);
148}
149
150int
151main (int argc, char **argv)
152{
153 int ret;
154 TestSuite *suite;
155
156 suite = create_test_suite ();
157
158 add_test_with_context (suite, ipc_openvas, ipc_data_from_json_ua_ok);
159 add_test_with_context (suite, ipc_openvas, ipc_data_from_json_hostname_ok);
160 add_test_with_context (suite, ipc_openvas, ipc_data_from_json_parse_error);
161 add_test_with_context (suite, ipc_openvas,
162 ipc_data_from_json_parse_many_objects);
163
164 if (argc > 1)
165 ret = run_single_test (suite, argv[1], create_text_reporter ());
166 else
167 ret = run_test_suite (suite, create_text_reporter ());
168
169 destroy_test_suite (suite);
170
171 return ret;
172}
ipc_data_t * ipc_data_from_json(const char *json, size_t len)
transforms json string to a ipc_data struct
gchar * ipc_get_hostname_from_data(ipc_data_t *data)
Get the hostname from IPC data.
Definition ipc_openvas.c:82
enum ipc_data_type ipc_get_data_type_from_data(ipc_data_t *data)
Get the data type in data.
Definition ipc_openvas.c:67
void ipc_data_destroy(ipc_data_t **data)
destroys ipc_data.
const char * ipc_data_to_json(ipc_data_t *data)
transforms ipc_data to a json string
gchar * ipc_get_user_agent_from_data(ipc_data_t *data)
Get the User-Agent from IPC data.
ipc_data_t * ipc_data_type_from_user_agent(const char *user_agent, size_t user_agent_len)
initializes ipc_data for the User-Agent.
gchar * ipc_get_hostname_source_from_data(ipc_data_t *data)
Get the vhost hostname source from IPC data.
Definition ipc_openvas.c:98
ipc_data_t * ipc_data_type_from_hostname(const char *source, size_t source_len, const char *hostname, size_t hostname_len)
initializes ipc_data for a hostname data.
struct ipc_data ipc_data_t
Definition ipc_openvas.h:23
@ IPC_DT_HOSTNAME
Definition ipc_openvas.h:18
AfterEach(ipc_openvas)
int main(int argc, char **argv)
Describe(ipc_openvas)
BeforeEach(ipc_openvas)
Ensure(ipc_openvas, ipc_data_from_json_ua_ok)
uint8_t len