From: Daniel Wagner <[email protected]>

We add them to the iptables file because we interacct with the
iptables API too.
---
 Makefile.am           |   3 +-
 tools/iptables-unit.c | 160 ++++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 162 insertions(+), 1 deletion(-)

diff --git a/Makefile.am b/Makefile.am
index a132678..66816ab 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -313,7 +313,8 @@ tools_session_test_LDADD = @GLIB_LIBS@ @DBUS_LIBS@ -ldl
 tools_iptables_unit_CFLAGS = @DBUS_CFLAGS@ @GLIB_CFLAGS@ @XTABLES_CFLAGS@ \
                -DIPTABLES_SAVE=\""${IPTABLES_SAVE}"\"
 tools_iptables_unit_SOURCES = $(gdbus_sources) src/log.c \
-                src/iptables.c src/firewall.c src/nat.c tools/iptables-unit.c
+               src/iptables.c src/firewall.c src/nat.c src/netfilter.c \
+               src/nfacct.c tools/iptables-unit.c
 tools_iptables_unit_LDADD = @GLIB_LIBS@ @DBUS_LIBS@ @XTABLES_LIBS@ -ldl
 
 endif
diff --git a/tools/iptables-unit.c b/tools/iptables-unit.c
index d1b40c3..cca0128 100644
--- a/tools/iptables-unit.c
+++ b/tools/iptables-unit.c
@@ -485,6 +485,158 @@ static void test_firewall_basic2(void)
        __connman_firewall_destroy(ctx);
 }
 
+struct nfacct_fix {
+       GMainLoop *mainloop;
+};
+
+static int setup_flush_cb(int error, void *user_data)
+{
+       struct nfacct_fix *fix = user_data;
+
+       g_assert(error == 0);
+
+       g_main_loop_quit(fix->mainloop);
+
+       return 0;
+}
+
+static void nfacct_setup(struct nfacct_fix *fix, gconstpointer data)
+{
+       __connman_netfilter_init();
+       fix->mainloop = g_main_loop_new(NULL, FALSE);
+
+       __connman_nfacct_flush(setup_flush_cb, fix);
+       g_main_loop_run(fix->mainloop);
+}
+
+static void nfacct_teardown(struct nfacct_fix *fix, gconstpointer data)
+{
+       g_main_loop_unref(fix->mainloop);
+}
+
+static void basic0_del_cb(int error, void *user_data)
+{
+       struct nfacct_fix *fix = user_data;
+
+       g_assert(error == 0);
+
+       g_main_loop_quit(fix->mainloop);
+}
+
+static void basic0_get_cb(int error, const char *name,
+                       uint64_t packets, uint64_t bytes,
+                       void *user_data)
+{
+       g_assert(error == 0);
+       g_assert_cmpstr(name, ==, "foo");
+
+       __connman_netfilter_acct_del("foo", basic0_del_cb, user_data);
+}
+
+static void basic0_new_cb(int error, void *user_data)
+{
+       g_assert(error == 0);
+
+       __connman_netfilter_acct_get("foo", FALSE, basic0_get_cb, user_data);
+}
+
+static void test_nfacct_basic0(struct nfacct_fix *fix, gconstpointer data)
+{
+       __connman_netfilter_acct_new("foo", basic0_new_cb, fix);
+
+       g_main_loop_run(fix->mainloop);
+}
+
+static void basic1_dump_cb(int error, const char *name, uint64_t packets,
+                       uint64_t bytes, void *user_data)
+{
+       struct nfacct_fix *fix = user_data;
+
+       g_assert(error == 0);
+
+       if (g_strcmp0(name, "bar") == 0)
+               g_main_loop_quit(fix->mainloop);
+
+}
+
+static void basic1_new_foo_cb(int error, void *user_data)
+{
+       g_assert(error == 0);
+}
+
+static void basic1_new_bar_cb(int error, void *user_data)
+{
+       g_assert(error == 0);
+
+       __connman_netfilter_acct_dump(FALSE, basic1_dump_cb, user_data);
+}
+
+static void test_nfacct_basic1(struct nfacct_fix *fix, gconstpointer data)
+{
+       __connman_netfilter_acct_new("foo", basic1_new_foo_cb, fix);
+       __connman_netfilter_acct_new("bar", basic1_new_bar_cb, fix);
+
+       g_main_loop_run(fix->mainloop);
+}
+
+static void ctx0_stats_cb(struct nfacct_context *ctx,
+                                       uint64_t packets,
+                                       uint64_t bytes,
+                                       void *user_data)
+{
+       DBG("");
+}
+
+static void ctx0_disable_cb(int error, struct nfacct_context *ctx,
+                               void *user_data)
+{
+       struct nfacct_fix *fix = user_data;
+
+       DBG("");
+
+       g_assert(error == 0);
+
+       __connman_nfacct_destroy_context(ctx);
+
+       g_main_loop_quit(fix->mainloop);
+}
+
+static void ctx0_enable_cb(int error, struct nfacct_context *ctx,
+                               void *user_data)
+{
+       int err;
+
+       DBG("");
+
+       g_assert(error == 0);
+
+       err = __connman_nfacct_disable(ctx, ctx0_disable_cb, user_data);
+       g_assert(err == 0);
+}
+
+static void test_nfacct_ctx0(struct nfacct_fix *fix, gconstpointer data)
+{
+       struct nfacct_context *ctx;
+       int err;
+
+       ctx = __connman_nfacct_create_context();
+       g_assert(ctx);
+
+       err = __connman_nfacct_add(ctx, "foo", ctx0_stats_cb, fix);
+       g_assert(err == 0);
+
+       err = __connman_nfacct_add(ctx, "bar", ctx0_stats_cb, fix);
+       g_assert(err == 0);
+
+       err = __connman_nfacct_add(ctx, "baz", ctx0_stats_cb, fix);
+       g_assert(err == 0);
+
+       err = __connman_nfacct_enable(ctx, ctx0_enable_cb, fix);
+       g_assert(err == 0);
+
+       g_main_loop_run(fix->mainloop);
+}
+
 static gchar *option_debug = NULL;
 
 static gboolean parse_debug(const char *key, const char *value,
@@ -533,6 +685,7 @@ int main(int argc, char *argv[])
        __connman_iptables_init();
        __connman_firewall_init();
        __connman_nat_init();
+       __connman_netfilter_init();
 
        g_test_add_func("/iptables/chain0", test_iptables_chain0);
        g_test_add_func("/iptables/chain1", test_iptables_chain1);
@@ -547,9 +700,16 @@ int main(int argc, char *argv[])
        g_test_add_func("/firewall/basic0", test_firewall_basic0);
        g_test_add_func("/firewall/basic1", test_firewall_basic1);
        g_test_add_func("/firewall/basic2", test_firewall_basic2);
+       g_test_add("/nfacct/basic0", struct nfacct_fix, NULL, nfacct_setup,
+               test_nfacct_basic0, nfacct_teardown);
+       g_test_add("/nfacct/basic1", struct nfacct_fix, NULL, nfacct_setup,
+               test_nfacct_basic1, nfacct_teardown);
+       g_test_add("/nfacct/ctx0", struct nfacct_fix, NULL, nfacct_setup,
+               test_nfacct_ctx0, nfacct_teardown);
 
        err = g_test_run();
 
+       __connman_netfilter_cleanup();
        __connman_nat_cleanup();
        __connman_firewall_cleanup();
        __connman_iptables_cleanup();
-- 
1.8.2.rc3.16.gce432ca

_______________________________________________
connman mailing list
[email protected]
http://lists.connman.net/listinfo/connman

Reply via email to