lib/socket_wrapper/tests: add missing #include "torture/local/proto.h"
[obnox/samba/samba-obnox.git] / lib / socket_wrapper / testsuite.c
1 /* 
2    Unix SMB/CIFS implementation.
3
4    local testing of the socket wrapper
5
6    Copyright (C) Jelmer Vernooij 2007
7    
8    This program is free software; you can redistribute it and/or modify
9    it under the terms of the GNU General Public License as published by
10    the Free Software Foundation; either version 3 of the License, or
11    (at your option) any later version.
12    
13    This program is distributed in the hope that it will be useful,
14    but WITHOUT ANY WARRANTY; without even the implied warranty of
15    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16    GNU General Public License for more details.
17    
18    You should have received a copy of the GNU General Public License
19    along with this program.  If not, see <http://www.gnu.org/licenses/>.
20 */
21
22 #include "includes.h"
23 #include "system/network.h"
24 #include "../socket_wrapper/socket_wrapper.h"
25 #include "torture/torture.h"
26 #include "torture/local/proto.h"
27
28 static char *old_dir = NULL;
29 static char *old_iface = NULL;
30
31 static void backup_env(void)
32 {
33         old_dir = getenv("SOCKET_WRAPPER_DIR");
34         old_iface = getenv("SOCKET_WRAPPER_DEFAULT_IFACE");
35 }
36
37 static void restore_env(void)
38 {
39         if (old_dir == NULL)
40                 unsetenv("SOCKET_WRAPPER_DIR");
41         else
42                 setenv("SOCKET_WRAPPER_DIR", old_dir, 1);
43         if (old_iface == NULL)
44                 unsetenv("SOCKET_WRAPPER_DEFAULT_IFACE");
45         else
46                 setenv("SOCKET_WRAPPER_DEFAULT_IFACE", old_iface, 1);
47 }
48
49 static bool test_socket_wrapper_dir(struct torture_context *tctx)
50 {
51         backup_env();
52
53         setenv("SOCKET_WRAPPER_DIR", "foo", 1);
54         torture_assert_str_equal(tctx, socket_wrapper_dir(), "foo", "setting failed");
55         setenv("SOCKET_WRAPPER_DIR", "./foo", 1);
56         torture_assert_str_equal(tctx, socket_wrapper_dir(), "foo", "setting failed");
57         unsetenv("SOCKET_WRAPPER_DIR");
58         torture_assert_str_equal(tctx, socket_wrapper_dir(), NULL, "resetting failed");
59
60         restore_env();
61
62         return true;
63 }
64
65 static bool test_swrap_socket(struct torture_context *tctx)
66 {
67         backup_env();
68         setenv("SOCKET_WRAPPER_DIR", "foo", 1);
69
70         torture_assert_int_equal(tctx, swrap_socket(1337, 1337, 0), -1, "unknown address family fails");
71         torture_assert_int_equal(tctx, errno, EAFNOSUPPORT, "correct errno set");
72         torture_assert_int_equal(tctx, swrap_socket(AF_INET, 1337, 0), -1, "unknown type fails");
73         torture_assert_int_equal(tctx, errno, EPROTONOSUPPORT, "correct errno set");
74         torture_assert_int_equal(tctx, swrap_socket(AF_INET, SOCK_DGRAM, 10), -1, "unknown protocol fails");
75         torture_assert_int_equal(tctx, errno, EPROTONOSUPPORT, "correct errno set");
76
77         restore_env();
78
79         return true;
80 }
81
82 unsigned int socket_wrapper_default_iface(void);
83 static bool test_socket_wrapper_default_iface(struct torture_context *tctx)
84 {
85         backup_env();
86         unsetenv("SOCKET_WRAPPER_DEFAULT_IFACE");
87         torture_assert_int_equal(tctx, socket_wrapper_default_iface(), 1, "unset");
88         setenv("SOCKET_WRAPPER_DEFAULT_IFACE", "2", 1);
89         torture_assert_int_equal(tctx, socket_wrapper_default_iface(), 2, "unset");
90         setenv("SOCKET_WRAPPER_DEFAULT_IFACE", "bla", 1);
91         torture_assert_int_equal(tctx, socket_wrapper_default_iface(), 1, "unset");
92         restore_env();
93         return true;
94 }
95
96 struct torture_suite *torture_local_socket_wrapper(TALLOC_CTX *mem_ctx)
97 {
98         struct torture_suite *suite = torture_suite_create(mem_ctx, 
99                                                                                                            "socket-wrapper");
100
101         torture_suite_add_simple_test(suite, "socket_wrapper_dir", test_socket_wrapper_dir);
102         torture_suite_add_simple_test(suite, "socket", test_swrap_socket);
103         torture_suite_add_simple_test(suite, "socket_wrapper_default_iface", test_socket_wrapper_default_iface);
104
105         return suite;
106 }