summary refs log tree commit diff
path: root/src/rdisc/tests/test-rdisc-fake.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/rdisc/tests/test-rdisc-fake.c')
-rw-r--r--src/rdisc/tests/test-rdisc-fake.c181
1 files changed, 109 insertions, 72 deletions
diff --git a/src/rdisc/tests/test-rdisc-fake.c b/src/rdisc/tests/test-rdisc-fake.c
index 1c514b90..02ffb510 100644
--- a/src/rdisc/tests/test-rdisc-fake.c
+++ b/src/rdisc/tests/test-rdisc-fake.c
@@ -28,7 +28,7 @@
 
 #include "nm-fake-platform.h"
 
-#include "nm-test-utils.h"
+#include "nm-test-utils-core.h"
 
 static NMFakeRDisc *
 rdisc_new (void)
@@ -46,11 +46,17 @@ rdisc_new (void)
 }
 
 static void
-match_gateway (GArray *array, guint idx, const char *addr, guint32 ts, guint32 lt, NMRDiscPreference pref)
+match_gateway (const NMRDiscData *rdata, guint idx, const char *addr, guint32 ts, guint32 lt, NMRDiscPreference pref)
 {
-	NMRDiscGateway *gw = &g_array_index (array, NMRDiscGateway, idx);
+	const NMRDiscGateway *gw;
 	char buf[INET6_ADDRSTRLEN];
 
+	g_assert (rdata);
+	g_assert_cmpint (idx, <, rdata->gateways_n);
+	g_assert (rdata->gateways);
+
+	gw = &rdata->gateways[idx];
+
 	g_assert_cmpstr (inet_ntop (AF_INET6, &gw->address, buf, sizeof (buf)), ==, addr);
 	g_assert_cmpint (gw->timestamp, ==, ts);
 	g_assert_cmpint (gw->lifetime, ==, lt);
@@ -58,11 +64,17 @@ match_gateway (GArray *array, guint idx, const char *addr, guint32 ts, guint32 l
 }
 
 static void
-match_address (GArray *array, guint idx, const char *addr, guint32 ts, guint32 lt, guint32 preferred)
+match_address (const NMRDiscData *rdata, guint idx, const char *addr, guint32 ts, guint32 lt, guint32 preferred)
 {
-	NMRDiscAddress *a = &g_array_index (array, NMRDiscAddress, idx);
+	const NMRDiscAddress *a;
 	char buf[INET6_ADDRSTRLEN];
 
+	g_assert (rdata);
+	g_assert_cmpint (idx, <, rdata->addresses_n);
+	g_assert (rdata->addresses);
+
+	a = &rdata->addresses[idx];
+
 	g_assert_cmpstr (inet_ntop (AF_INET6, &a->address, buf, sizeof (buf)), ==, addr);
 	g_assert_cmpint (a->timestamp, ==, ts);
 	g_assert_cmpint (a->lifetime, ==, lt);
@@ -70,13 +82,20 @@ match_address (GArray *array, guint idx, const char *addr, guint32 ts, guint32 l
 }
 
 static void
-match_route (GArray *array, guint idx, const char *nw, int plen, const char *gw, guint32 ts, guint32 lt, NMRDiscPreference pref)
+match_route (const NMRDiscData *rdata, guint idx, const char *nw, int plen, const char *gw, guint32 ts, guint32 lt, NMRDiscPreference pref)
 {
-	NMRDiscRoute *route = &g_array_index (array, NMRDiscRoute, idx);
+	const NMRDiscRoute *route;
 	char buf[INET6_ADDRSTRLEN];
 
+	g_assert (rdata);
+	g_assert_cmpint (idx, <, rdata->routes_n);
+	g_assert (rdata->routes);
+	g_assert (plen > 0 && plen <= 128);
+
+	route = &rdata->routes[idx];
+
 	g_assert_cmpstr (inet_ntop (AF_INET6, &route->network, buf, sizeof (buf)), ==, nw);
-	g_assert_cmpint (route->plen, ==, plen);
+	g_assert_cmpint ((int) route->plen, ==, plen);
 	g_assert_cmpstr (inet_ntop (AF_INET6, &route->gateway, buf, sizeof (buf)), ==, gw);
 	g_assert_cmpint (route->timestamp, ==, ts);
 	g_assert_cmpint (route->lifetime, ==, lt);
@@ -84,20 +103,32 @@ match_route (GArray *array, guint idx, const char *nw, int plen, const char *gw,
 }
 
 static void
-match_dns_server (GArray *array, guint idx, const char *addr, guint32 ts, guint32 lt)
+match_dns_server (const NMRDiscData *rdata, guint idx, const char *addr, guint32 ts, guint32 lt)
 {
-	NMRDiscDNSServer *dns = &g_array_index (array, NMRDiscDNSServer, idx);
+	const NMRDiscDNSServer *dns;
 	char buf[INET6_ADDRSTRLEN];
 
+	g_assert (rdata);
+	g_assert_cmpint (idx, <, rdata->dns_servers_n);
+	g_assert (rdata->dns_servers);
+
+	dns = &rdata->dns_servers[idx];
+
 	g_assert_cmpstr (inet_ntop (AF_INET6, &dns->address, buf, sizeof (buf)), ==, addr);
 	g_assert_cmpint (dns->timestamp, ==, ts);
 	g_assert_cmpint (dns->lifetime, ==, lt);
 }
 
 static void
-match_dns_domain (GArray *array, guint idx, const char *domain, guint32 ts, guint32 lt)
+match_dns_domain (const NMRDiscData *rdata, guint idx, const char *domain, guint32 ts, guint32 lt)
 {
-	NMRDiscDNSDomain *dns = &g_array_index (array, NMRDiscDNSDomain, idx);
+	const NMRDiscDNSDomain *dns;
+
+	g_assert (rdata);
+	g_assert_cmpint (idx, <, rdata->dns_domains_n);
+	g_assert (rdata->dns_domains);
+
+	dns = &rdata->dns_domains[idx];
 
 	g_assert_cmpstr (dns->domain, ==, domain);
 	g_assert_cmpint (dns->timestamp, ==, ts);
@@ -114,8 +145,10 @@ typedef struct {
 } TestData;
 
 static void
-test_simple_changed (NMRDisc *rdisc, NMRDiscConfigMap changed, TestData *data)
+test_simple_changed (NMRDisc *rdisc, const NMRDiscData *rdata, guint changed_int, TestData *data)
 {
+	NMRDiscConfigMap changed = changed_int;
+
 	g_assert_cmpint (changed, ==, NM_RDISC_CONFIG_DHCP_LEVEL |
 	                              NM_RDISC_CONFIG_GATEWAYS |
 	                              NM_RDISC_CONFIG_ADDRESSES |
@@ -124,12 +157,12 @@ test_simple_changed (NMRDisc *rdisc, NMRDiscConfigMap changed, TestData *data)
 	                              NM_RDISC_CONFIG_DNS_DOMAINS |
 	                              NM_RDISC_CONFIG_HOP_LIMIT |
 	                              NM_RDISC_CONFIG_MTU);
-	g_assert_cmpint (rdisc->dhcp_level, ==, NM_RDISC_DHCP_LEVEL_OTHERCONF);
-	match_gateway (rdisc->gateways, 0, "fe80::1", data->timestamp1, 10, NM_RDISC_PREFERENCE_MEDIUM);
-	match_address (rdisc->addresses, 0, "2001:db8:a:a::1", data->timestamp1, 10, 10);
-	match_route (rdisc->routes, 0, "2001:db8:a:a::", 64, "fe80::1", data->timestamp1, 10, 10);
-	match_dns_server (rdisc->dns_servers, 0, "2001:db8:c:c::1", data->timestamp1, 10);
-	match_dns_domain (rdisc->dns_domains, 0, "foobar.com", data->timestamp1, 10);
+	g_assert_cmpint (rdata->dhcp_level, ==, NM_RDISC_DHCP_LEVEL_OTHERCONF);
+	match_gateway (rdata, 0, "fe80::1", data->timestamp1, 10, NM_RDISC_PREFERENCE_MEDIUM);
+	match_address (rdata, 0, "2001:db8:a:a::1", data->timestamp1, 10, 10);
+	match_route (rdata, 0, "2001:db8:a:a::", 64, "fe80::1", data->timestamp1, 10, 10);
+	match_dns_server (rdata, 0, "2001:db8:c:c::1", data->timestamp1, 10);
+	match_dns_domain (rdata, 0, "foobar.com", data->timestamp1, 10);
 
 	g_assert (nm_fake_rdisc_done (NM_FAKE_RDISC (rdisc)));
 	data->counter++;
@@ -172,40 +205,42 @@ test_everything_rs_sent (NMRDisc *rdisc, TestData *data)
 }
 
 static void
-test_everything_changed (NMRDisc *rdisc, NMRDiscConfigMap changed, TestData *data)
+test_everything_changed (NMRDisc *rdisc, const NMRDiscData *rdata, guint changed_int, TestData *data)
 {
+	NMRDiscConfigMap changed = changed_int;
+
 	if (data->counter == 0) {
 		g_assert_cmpint (data->rs_counter, ==, 1);
 		g_assert_cmpint (changed, ==, NM_RDISC_CONFIG_DHCP_LEVEL |
-			                          NM_RDISC_CONFIG_GATEWAYS |
-			                          NM_RDISC_CONFIG_ADDRESSES |
-			                          NM_RDISC_CONFIG_ROUTES |
-			                          NM_RDISC_CONFIG_DNS_SERVERS |
-			                          NM_RDISC_CONFIG_DNS_DOMAINS |
-			                          NM_RDISC_CONFIG_HOP_LIMIT |
-			                          NM_RDISC_CONFIG_MTU);
-		match_gateway (rdisc->gateways, 0, "fe80::1", data->timestamp1, 10, NM_RDISC_PREFERENCE_MEDIUM);
-		match_address (rdisc->addresses, 0, "2001:db8:a:a::1", data->timestamp1, 10, 10);
-		match_route (rdisc->routes, 0, "2001:db8:a:a::", 64, "fe80::1", data->timestamp1, 10, 10);
-		match_dns_server (rdisc->dns_servers, 0, "2001:db8:c:c::1", data->timestamp1, 10);
-		match_dns_domain (rdisc->dns_domains, 0, "foobar.com", data->timestamp1, 10);
+		                              NM_RDISC_CONFIG_GATEWAYS |
+		                              NM_RDISC_CONFIG_ADDRESSES |
+		                              NM_RDISC_CONFIG_ROUTES |
+		                              NM_RDISC_CONFIG_DNS_SERVERS |
+		                              NM_RDISC_CONFIG_DNS_DOMAINS |
+		                              NM_RDISC_CONFIG_HOP_LIMIT |
+		                              NM_RDISC_CONFIG_MTU);
+		match_gateway (rdata, 0, "fe80::1", data->timestamp1, 10, NM_RDISC_PREFERENCE_MEDIUM);
+		match_address (rdata, 0, "2001:db8:a:a::1", data->timestamp1, 10, 10);
+		match_route (rdata, 0, "2001:db8:a:a::", 64, "fe80::1", data->timestamp1, 10, 10);
+		match_dns_server (rdata, 0, "2001:db8:c:c::1", data->timestamp1, 10);
+		match_dns_domain (rdata, 0, "foobar.com", data->timestamp1, 10);
 	} else if (data->counter == 1) {
 		g_assert_cmpint (changed, ==, NM_RDISC_CONFIG_GATEWAYS |
-			                          NM_RDISC_CONFIG_ADDRESSES |
-			                          NM_RDISC_CONFIG_ROUTES |
-			                          NM_RDISC_CONFIG_DNS_SERVERS |
-			                          NM_RDISC_CONFIG_DNS_DOMAINS);
-
-		g_assert_cmpint (rdisc->gateways->len, ==, 1);
-		match_gateway (rdisc->gateways, 0, "fe80::2", data->timestamp1, 10, NM_RDISC_PREFERENCE_MEDIUM);
-		g_assert_cmpint (rdisc->addresses->len, ==, 1);
-		match_address (rdisc->addresses, 0, "2001:db8:a:b::1", data->timestamp1, 10, 10);
-		g_assert_cmpint (rdisc->routes->len, ==, 1);
-		match_route (rdisc->routes, 0, "2001:db8:a:b::", 64, "fe80::2", data->timestamp1, 10, 10);
-		g_assert_cmpint (rdisc->dns_servers->len, ==, 1);
-		match_dns_server (rdisc->dns_servers, 0, "2001:db8:c:c::2", data->timestamp1, 10);
-		g_assert_cmpint (rdisc->dns_domains->len, ==, 1);
-		match_dns_domain (rdisc->dns_domains, 0, "foobar2.com", data->timestamp1, 10);
+		                              NM_RDISC_CONFIG_ADDRESSES |
+		                              NM_RDISC_CONFIG_ROUTES |
+		                              NM_RDISC_CONFIG_DNS_SERVERS |
+		                              NM_RDISC_CONFIG_DNS_DOMAINS);
+
+		g_assert_cmpint (rdata->gateways_n, ==, 1);
+		match_gateway (rdata, 0, "fe80::2", data->timestamp1, 10, NM_RDISC_PREFERENCE_MEDIUM);
+		g_assert_cmpint (rdata->addresses_n, ==, 1);
+		match_address (rdata, 0, "2001:db8:a:b::1", data->timestamp1, 10, 10);
+		g_assert_cmpint (rdata->routes_n, ==, 1);
+		match_route (rdata, 0, "2001:db8:a:b::", 64, "fe80::2", data->timestamp1, 10, 10);
+		g_assert_cmpint (rdata->dns_servers_n, ==, 1);
+		match_dns_server (rdata, 0, "2001:db8:c:c::2", data->timestamp1, 10);
+		g_assert_cmpint (rdata->dns_domains_n, ==, 1);
+		match_dns_domain (rdata, 0, "foobar2.com", data->timestamp1, 10);
 
 		g_assert (nm_fake_rdisc_done (NM_FAKE_RDISC (rdisc)));
 		g_main_loop_quit (data->loop);
@@ -263,35 +298,37 @@ test_everything (void)
 }
 
 static void
-test_preference_changed (NMRDisc *rdisc, NMRDiscConfigMap changed, TestData *data)
+test_preference_changed (NMRDisc *rdisc, const NMRDiscData *rdata, guint changed_int, TestData *data)
 {
+	NMRDiscConfigMap changed = changed_int;
+
 	if (data->counter == 1) {
 		g_assert_cmpint (changed, ==, NM_RDISC_CONFIG_GATEWAYS |
-			                          NM_RDISC_CONFIG_ADDRESSES |
-			                          NM_RDISC_CONFIG_ROUTES);
-		g_assert_cmpint (rdisc->gateways->len, ==, 2);
-		match_gateway (rdisc->gateways, 0, "fe80::2", data->timestamp1 + 1, 10, NM_RDISC_PREFERENCE_MEDIUM);
-		match_gateway (rdisc->gateways, 1, "fe80::1", data->timestamp1, 10, NM_RDISC_PREFERENCE_LOW);
-		g_assert_cmpint (rdisc->addresses->len, ==, 2);
-		match_address (rdisc->addresses, 0, "2001:db8:a:a::1", data->timestamp1, 10, 10);
-		match_address (rdisc->addresses, 1, "2001:db8:a:b::1", data->timestamp1 + 1, 10, 10);
-		g_assert_cmpint (rdisc->routes->len, ==, 2);
-		match_route (rdisc->routes, 0, "2001:db8:a:b::", 64, "fe80::2", data->timestamp1 + 1, 10, 10);
-		match_route (rdisc->routes, 1, "2001:db8:a:a::", 64, "fe80::1", data->timestamp1, 10, 5);
+		                              NM_RDISC_CONFIG_ADDRESSES |
+		                              NM_RDISC_CONFIG_ROUTES);
+		g_assert_cmpint (rdata->gateways_n, ==, 2);
+		match_gateway (rdata, 0, "fe80::2", data->timestamp1 + 1, 10, NM_RDISC_PREFERENCE_MEDIUM);
+		match_gateway (rdata, 1, "fe80::1", data->timestamp1, 10, NM_RDISC_PREFERENCE_LOW);
+		g_assert_cmpint (rdata->addresses_n, ==, 2);
+		match_address (rdata, 0, "2001:db8:a:a::1", data->timestamp1, 10, 10);
+		match_address (rdata, 1, "2001:db8:a:b::1", data->timestamp1 + 1, 10, 10);
+		g_assert_cmpint (rdata->routes_n, ==, 2);
+		match_route (rdata, 0, "2001:db8:a:b::", 64, "fe80::2", data->timestamp1 + 1, 10, 10);
+		match_route (rdata, 1, "2001:db8:a:a::", 64, "fe80::1", data->timestamp1, 10, 5);
 	} else if (data->counter == 2) {
 		g_assert_cmpint (changed, ==, NM_RDISC_CONFIG_GATEWAYS |
-			                          NM_RDISC_CONFIG_ADDRESSES |
-			                          NM_RDISC_CONFIG_ROUTES);
-
-		g_assert_cmpint (rdisc->gateways->len, ==, 2);
-		match_gateway (rdisc->gateways, 0, "fe80::1", data->timestamp1 + 2, 10, NM_RDISC_PREFERENCE_HIGH);
-		match_gateway (rdisc->gateways, 1, "fe80::2", data->timestamp1 + 1, 10, NM_RDISC_PREFERENCE_MEDIUM);
-		g_assert_cmpint (rdisc->addresses->len, ==, 2);
-		match_address (rdisc->addresses, 0, "2001:db8:a:a::1", data->timestamp1 + 2, 10, 10);
-		match_address (rdisc->addresses, 1, "2001:db8:a:b::1", data->timestamp1 + 1, 10, 10);
-		g_assert_cmpint (rdisc->routes->len, ==, 2);
-		match_route (rdisc->routes, 0, "2001:db8:a:a::", 64, "fe80::1", data->timestamp1 + 2, 10, 15);
-		match_route (rdisc->routes, 1, "2001:db8:a:b::", 64, "fe80::2", data->timestamp1 + 1, 10, 10);
+		                              NM_RDISC_CONFIG_ADDRESSES |
+		                              NM_RDISC_CONFIG_ROUTES);
+
+		g_assert_cmpint (rdata->gateways_n, ==, 2);
+		match_gateway (rdata, 0, "fe80::1", data->timestamp1 + 2, 10, NM_RDISC_PREFERENCE_HIGH);
+		match_gateway (rdata, 1, "fe80::2", data->timestamp1 + 1, 10, NM_RDISC_PREFERENCE_MEDIUM);
+		g_assert_cmpint (rdata->addresses_n, ==, 2);
+		match_address (rdata, 0, "2001:db8:a:a::1", data->timestamp1 + 2, 10, 10);
+		match_address (rdata, 1, "2001:db8:a:b::1", data->timestamp1 + 1, 10, 10);
+		g_assert_cmpint (rdata->routes_n, ==, 2);
+		match_route (rdata, 0, "2001:db8:a:a::", 64, "fe80::1", data->timestamp1 + 2, 10, 15);
+		match_route (rdata, 1, "2001:db8:a:b::", 64, "fe80::2", data->timestamp1 + 1, 10, 10);
 
 		g_assert (nm_fake_rdisc_done (NM_FAKE_RDISC (rdisc)));
 		g_main_loop_quit (data->loop);
@@ -342,7 +379,7 @@ test_preference (void)
 }
 
 static void
-test_dns_solicit_loop_changed (NMRDisc *rdisc, NMRDiscConfigMap changed, TestData *data)
+test_dns_solicit_loop_changed (NMRDisc *rdisc, const NMRDiscData *rdata, guint changed_int, TestData *data)
 {
 	data->counter++;
 }