From 872e2ad541478597191ca9e31872d5c8e2bbb832 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Sat, 3 Mar 2007 01:20:36 +0000 Subject: [PATCH] r21671: Add initial simple tests for socket wrapper --- source/lib/socket_wrapper/socket_wrapper.c | 2 +- source/lib/socket_wrapper/socket_wrapper.h | 1 + source/lib/socket_wrapper/testsuite.c | 82 ++++++++++++++++++++++++++++++ source/torture/local/config.mk | 1 + source/torture/local/local.c | 1 + 5 files changed, 86 insertions(+), 1 deletion(-) create mode 100644 source/lib/socket_wrapper/testsuite.c diff --git a/source/lib/socket_wrapper/socket_wrapper.c b/source/lib/socket_wrapper/socket_wrapper.c index 3f2020d2662..8eff6a49ac8 100644 --- a/source/lib/socket_wrapper/socket_wrapper.c +++ b/source/lib/socket_wrapper/socket_wrapper.c @@ -187,7 +187,7 @@ struct socket_info static struct socket_info *sockets; -static const char *socket_wrapper_dir(void) +const char *socket_wrapper_dir(void) { const char *s = getenv("SOCKET_WRAPPER_DIR"); if (s == NULL) { diff --git a/source/lib/socket_wrapper/socket_wrapper.h b/source/lib/socket_wrapper/socket_wrapper.h index 1d8dac17632..fd1e48610b7 100644 --- a/source/lib/socket_wrapper/socket_wrapper.h +++ b/source/lib/socket_wrapper/socket_wrapper.h @@ -36,6 +36,7 @@ #ifndef __SOCKET_WRAPPER_H__ #define __SOCKET_WRAPPER_H__ +const char *socket_wrapper_dir(void); int swrap_socket(int family, int type, int protocol); int swrap_accept(int s, struct sockaddr *addr, socklen_t *addrlen); int swrap_connect(int s, const struct sockaddr *serv_addr, socklen_t addrlen); diff --git a/source/lib/socket_wrapper/testsuite.c b/source/lib/socket_wrapper/testsuite.c new file mode 100644 index 00000000000..a3e65804092 --- /dev/null +++ b/source/lib/socket_wrapper/testsuite.c @@ -0,0 +1,82 @@ +/* + Unix SMB/CIFS implementation. + + local testing of the socket wrapper + + Copyright (C) Jelmer Vernooij 2007 + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +*/ + +#include "includes.h" +#include "system/network.h" +#include "lib/socket_wrapper/socket_wrapper.h" +#include "torture/torture.h" + +static char *old_dir = NULL; + +static void backup_env(void) +{ + old_dir = getenv("SOCKET_WRAPPER_DIR"); +} + +static void restore_env(void) +{ + setenv("SOCKET_WRAPPER_DIR", old_dir, 1); +} + +static bool test_socket_wrapper_dir(struct torture_context *tctx) +{ + backup_env(); + + setenv("SOCKET_WRAPPER_DIR", "foo", 1); + torture_assert_str_equal(tctx, socket_wrapper_dir(), "foo", "setting failed"); + setenv("SOCKET_WRAPPER_DIR", "./foo", 1); + torture_assert_str_equal(tctx, socket_wrapper_dir(), "foo", "setting failed"); + unsetenv("SOCKET_WRAPPER_DIR"); + torture_assert_str_equal(tctx, socket_wrapper_dir(), NULL, "resetting failed"); + + restore_env(); + + return true; +} + +static bool test_swrap_socket(struct torture_context *tctx) +{ + backup_env(); + setenv("SOCKET_WRAPPER_DIR", "foo", 1); + + torture_assert_int_equal(tctx, swrap_socket(1337, 1337, 0), -1, "unknown address family fails"); + torture_assert_int_equal(tctx, errno, EAFNOSUPPORT, "correct errno set"); + torture_assert_int_equal(tctx, swrap_socket(AF_INET, 1337, 0), -1, "unknown type fails"); + torture_assert_int_equal(tctx, errno, EPROTONOSUPPORT, "correct errno set"); + torture_assert_int_equal(tctx, swrap_socket(AF_INET, SOCK_DGRAM, 10), -1, "unknown protocol fails"); + torture_assert_int_equal(tctx, errno, EPROTONOSUPPORT, "correct errno set"); + + restore_env(); + + return true; +} + +struct torture_suite *torture_local_socket_wrapper(TALLOC_CTX *mem_ctx) +{ + struct torture_suite *suite = torture_suite_create(mem_ctx, + "SOCKET-WRAPPER"); + + torture_suite_add_simple_test(suite, "socket_wrapper_dir", test_socket_wrapper_dir); + torture_suite_add_simple_test(suite, "socket", test_swrap_socket); + + return suite; +} diff --git a/source/torture/local/config.mk b/source/torture/local/config.mk index b323e996e25..c150aeda712 100644 --- a/source/torture/local/config.mk +++ b/source/torture/local/config.mk @@ -19,6 +19,7 @@ OBJ_FILES = \ ../../librpc/tests/binding_string.o \ ../../lib/util/tests/idtree.o \ ../../lib/socket/testsuite.o \ + ../../lib/socket_wrapper/testsuite.o \ irpc.o \ ../../lib/registry/tests/generic.o \ resolve.o \ diff --git a/source/torture/local/local.c b/source/torture/local/local.c index c2107830288..fbf89b6e4e4 100644 --- a/source/torture/local/local.c +++ b/source/torture/local/local.c @@ -37,6 +37,7 @@ torture_local_idtree, torture_local_iconv, torture_local_socket, + torture_local_socket_wrapper, torture_pac, torture_registry, torture_local_resolve, -- 2.11.4.GIT