From: Sjur Brændeland <sjur.brandel...@stericsson.com>

- Remove tests for CAIF Character device. Character devices are depreceated
and replaced with Sockets.
- Add RTNL Tests for creating and removing CAIF GPRS Network Interface.
---
 Makefile.am      |    4 +-
 unit/test-caif.c |  108 +++++++++++++++++++++++++++++++++++++-----------------
 2 files changed, 77 insertions(+), 35 deletions(-)

diff --git a/Makefile.am b/Makefile.am
index f841b4c..e505a39 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -474,7 +474,9 @@ unit_objects += $(unit_test_mux_OBJECTS)
 
 unit_test_caif_SOURCES = unit/test-caif.c $(gatchat_sources) \
                                        drivers/stemodem/caif_socket.h \
-                                       drivers/stemodem/if_caif.h 
+                                       drivers/stemodem/caif_rtnl.c \
+                                       drivers/stemodem/caif_rtnl.h \
+                                       drivers/stemodem/if_caif.h
 unit_test_caif_LDADD = @GLIB_LIBS@
 unit_objects += $(unit_test_caif_OBJECTS)
 
diff --git a/unit/test-caif.c b/unit/test-caif.c
index 51e29bc..fdcdc3e 100644
--- a/unit/test-caif.c
+++ b/unit/test-caif.c
@@ -3,6 +3,7 @@
  *  oFono - Open Source Telephony
  *
  *  Copyright (C) 2008-2010  Intel Corporation. All rights reserved.
+ *  Copyright (C) 2010 ST-Ericsson AB.
  *
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License version 2 as
@@ -28,28 +29,26 @@
 #include <unistd.h>
 #include <stdlib.h>
 #include <string.h>
+#include <net/if.h>
 
 #include <glib.h>
 #include <glib/gprintf.h>
 
 #include <gatchat.h>
-
+#include <ofono/log.h>
 #include <drivers/stemodem/caif_socket.h>
 #include <drivers/stemodem/if_caif.h>
+#include <drivers/stemodem/caif_rtnl.h>
 
 static GMainLoop *mainloop;
 
-static int do_open(void)
+void ofono_debug(const char *format, ...)
 {
-       int fd;
-
-       fd = open("/dev/chnlat11", O_RDWR);
-       if (fd < 0) {
-               g_printerr("Open of chnlat11 failed (%d)\n", errno);
-               return -EIO;
-       }
-
-       return fd;
+       va_list ap;
+       va_start(ap, format);
+       if (g_test_verbose())
+               vprintf(format, ap);
+       va_end(ap);
 }
 
 static int do_connect(void)
@@ -58,7 +57,7 @@ static int do_connect(void)
        int sk, err;
 
        /* Create a CAIF socket for AT Service */
-       sk = socket(AF_CAIF, SOCK_SEQPACKET, CAIFPROTO_AT);
+       sk = socket(AF_CAIF, SOCK_STREAM, CAIFPROTO_AT);
        if (sk < 0) {
                g_printerr("CAIF socket creation failed (%d)\n", errno);
                return -EIO;
@@ -81,7 +80,8 @@ static int do_connect(void)
 
 static void caif_debug(const char *str, void *data)
 {
-       g_print("%s\n", str);
+       if (g_test_verbose())
+               g_print("CAIF:%s\n", str);
 }
 
 static void caif_init(gboolean ok, GAtResult *result, gpointer data)
@@ -100,18 +100,15 @@ static void caif_init(gboolean ok, GAtResult *result, 
gpointer data)
        g_main_loop_quit(mainloop);
 }
 
-static void test_connect(gboolean use_socket)
+static void test_connect()
 {
        GIOChannel *io;
        GAtChat *chat;
        GAtSyntax *syntax;
        int fd;
 
-       if (use_socket == TRUE)
-               fd = do_connect();
-       else
-               fd = do_open();
 
+       fd = do_connect();
        if (fd < 0)
                return;
 
@@ -138,34 +135,77 @@ static void test_connect(gboolean use_socket)
        g_main_loop_unref(mainloop);
 }
 
-static void test_basic(void)
+/* Storage for rtnl_callback data */
+static int rtnl_result;
+static int rtnl_ifi;
+static char rtnl_ifname[16];
+static void *rtnl_user_data;
+
+static void rtnl_create_cb(int ifindex, const char *ifname, void *user_data)
 {
-       if (g_test_trap_fork(60 * 1000 * 1000, 0) == TRUE) {
-               test_connect(TRUE);
-               exit(0);
-       }
+       strcpy(rtnl_ifname, ifname);
+       rtnl_ifi = ifindex;
+       rtnl_user_data = user_data;
+}
+
+static void test_rtnl_normal()
+{
+       int res;
+       int connid = 1;
+
+       res = caif_rtnl_init();
+       res = caif_rtnl_create_interface(IFLA_CAIF_IPV4_CONNID, connid, FALSE,
+                                               rtnl_create_cb,
+                                               (void *)0xbaadf00d);
+       g_assert_cmpint(0, ==, res);
+
+       g_main_iteration(TRUE);
 
-       g_test_trap_assert_passed();
-       //g_test_trap_assert_stderr("failed");
+       g_assert_cmpint(0, ==, rtnl_result);
+       g_assert((void *)0xbaadf00d == rtnl_user_data);
+
+       res = caif_rtnl_delete_interface(rtnl_ifi);
+
+       g_main_iteration(TRUE);
+       g_assert_cmpint(0, ==, res);
+
+       caif_rtnl_exit();
 }
 
-static void test_chnlat(void)
+static void test_rtnl_bad_delete()
 {
-       if (g_test_trap_fork(60 * 1000 * 1000, 0) == TRUE) {
-               test_connect(FALSE);
-               exit(0);
-       }
+       int res;
 
-       g_test_trap_assert_passed();
-       //g_test_trap_assert_stderr("failed");
+       res = caif_rtnl_init();
+       res = caif_rtnl_delete_interface(1000);
+       g_assert_cmpint(0, ==, res);
+
+       caif_rtnl_exit();
+}
+
+static void test_rtnl_einval()
+{
+       int res = caif_rtnl_init();
+
+       res = caif_rtnl_create_interface(__IFLA_CAIF_MAX, 0, FALSE, NULL,
+                                               (void *)0xbaadf00d);
+
+       g_assert_cmpint(-EINVAL, ==, res);
+
+       caif_rtnl_exit();
 }
 
 int main(int argc, char **argv)
 {
+
+       g_print("This test must run as root (netadm capability)\n");
+
        g_test_init(&argc, &argv, NULL);
 
-       g_test_add_func("/testcaif/basic", test_basic);
-       g_test_add_func("/testcaif/chnlat", test_chnlat);
+       g_test_add_func("/testcaif/basic", test_connect);
+       g_test_add_func("/testcaif/basic", test_rtnl_normal);
+       g_test_add_func("/testcaif/basic", test_rtnl_bad_delete);
+       g_test_add_func("/testcaif/basic", test_rtnl_einval);
 
        return g_test_run();
 }
-- 
1.7.0.4

_______________________________________________
ofono mailing list
ofono@ofono.org
http://lists.ofono.org/listinfo/ofono

Reply via email to