mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-02-10 12:55:48 +01:00
glib/tests: add spawn-stderr-socket test
Check the spawn implementation behaviour when the stderr is a socket (mostly for win32). Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
This commit is contained in:
parent
a34a4e7844
commit
960ed2f906
@ -108,7 +108,9 @@ glib_tests = {
|
|||||||
'sort' : {},
|
'sort' : {},
|
||||||
'spawn-multithreaded' : {},
|
'spawn-multithreaded' : {},
|
||||||
'spawn-path-search' : {},
|
'spawn-path-search' : {},
|
||||||
'spawn-singlethread' : {},
|
'spawn-singlethread' : {
|
||||||
|
'dependencies' : [winsock2],
|
||||||
|
},
|
||||||
'spawn-test' : {},
|
'spawn-test' : {},
|
||||||
'strfuncs' : {},
|
'strfuncs' : {},
|
||||||
'string' : {},
|
'string' : {},
|
||||||
|
@ -32,11 +32,13 @@
|
|||||||
#ifdef G_OS_UNIX
|
#ifdef G_OS_UNIX
|
||||||
#include <glib-unix.h>
|
#include <glib-unix.h>
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
#include <sys/socket.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef G_OS_WIN32
|
#ifdef G_OS_WIN32
|
||||||
|
#include <winsock2.h>
|
||||||
#include <io.h>
|
#include <io.h>
|
||||||
#define LINEEND "\r\n"
|
#define LINEEND "\r\n"
|
||||||
#else
|
#else
|
||||||
@ -353,6 +355,56 @@ test_spawn_sync (void)
|
|||||||
g_free (joined_args_str);
|
g_free (joined_args_str);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
init_networking (void)
|
||||||
|
{
|
||||||
|
#ifdef G_OS_WIN32
|
||||||
|
WSADATA wsadata;
|
||||||
|
|
||||||
|
if (WSAStartup (MAKEWORD (2, 0), &wsadata) != 0)
|
||||||
|
g_error ("Windows Sockets could not be initialized");
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
test_spawn_stderr_socket (void)
|
||||||
|
{
|
||||||
|
GError *error = NULL;
|
||||||
|
GPtrArray *argv;
|
||||||
|
int estatus;
|
||||||
|
int fd;
|
||||||
|
|
||||||
|
g_test_summary ("Test calling g_spawn_sync() with its stderr FD set to a socket");
|
||||||
|
|
||||||
|
if (g_test_subprocess ())
|
||||||
|
{
|
||||||
|
init_networking ();
|
||||||
|
fd = socket (AF_INET, SOCK_STREAM, 0);
|
||||||
|
g_assert_cmpint (fd, >=, 0);
|
||||||
|
#ifdef G_OS_WIN32
|
||||||
|
fd = _open_osfhandle (fd, 0);
|
||||||
|
g_assert_cmpint (fd, >=, 0);
|
||||||
|
#endif
|
||||||
|
/* Set the socket as FD 2, stderr */
|
||||||
|
estatus = dup2 (fd, 2);
|
||||||
|
g_assert_cmpint (estatus, >=, 0);
|
||||||
|
|
||||||
|
argv = g_ptr_array_new ();
|
||||||
|
g_ptr_array_add (argv, echo_script_path);
|
||||||
|
g_ptr_array_add (argv, NULL);
|
||||||
|
|
||||||
|
g_spawn_sync (NULL, (char**) argv->pdata, NULL, 0, NULL, NULL, NULL, NULL, NULL, &error);
|
||||||
|
g_assert_no_error (error);
|
||||||
|
g_ptr_array_free (argv, TRUE);
|
||||||
|
g_close (fd, &error);
|
||||||
|
g_assert_no_error (error);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
g_test_trap_subprocess (NULL, 0, 0);
|
||||||
|
g_test_trap_assert_passed ();
|
||||||
|
}
|
||||||
|
|
||||||
/* Like test_spawn_sync but uses spawn flags that trigger the optimized
|
/* Like test_spawn_sync but uses spawn flags that trigger the optimized
|
||||||
* posix_spawn codepath.
|
* posix_spawn codepath.
|
||||||
*/
|
*/
|
||||||
@ -517,6 +569,7 @@ main (int argc,
|
|||||||
g_assert (g_file_test (echo_script_path, G_FILE_TEST_EXISTS));
|
g_assert (g_file_test (echo_script_path, G_FILE_TEST_EXISTS));
|
||||||
|
|
||||||
g_test_add_func ("/gthread/spawn-single-sync", test_spawn_sync);
|
g_test_add_func ("/gthread/spawn-single-sync", test_spawn_sync);
|
||||||
|
g_test_add_func ("/gthread/spawn-stderr-socket", test_spawn_stderr_socket);
|
||||||
g_test_add_func ("/gthread/spawn-single-async", test_spawn_async);
|
g_test_add_func ("/gthread/spawn-single-async", test_spawn_async);
|
||||||
g_test_add_func ("/gthread/spawn-single-async-with-fds", test_spawn_async_with_fds);
|
g_test_add_func ("/gthread/spawn-single-async-with-fds", test_spawn_async_with_fds);
|
||||||
g_test_add_func ("/gthread/spawn-script", test_spawn_script);
|
g_test_add_func ("/gthread/spawn-script", test_spawn_script);
|
||||||
|
@ -114,6 +114,9 @@ if cc.has_argument('-fno-strict-aliasing')
|
|||||||
add_project_arguments('-fno-strict-aliasing', language: 'c')
|
add_project_arguments('-fno-strict-aliasing', language: 'c')
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
# dummy/empty dependency() object to declare fallbacks and simpler dependencies
|
||||||
|
not_found = dependency('', required: false)
|
||||||
|
|
||||||
########################
|
########################
|
||||||
# Configuration begins #
|
# Configuration begins #
|
||||||
########################
|
########################
|
||||||
@ -2134,6 +2137,8 @@ endif
|
|||||||
|
|
||||||
if host_system == 'windows'
|
if host_system == 'windows'
|
||||||
winsock2 = cc.find_library('ws2_32')
|
winsock2 = cc.find_library('ws2_32')
|
||||||
|
else
|
||||||
|
winsock2 = not_found
|
||||||
endif
|
endif
|
||||||
|
|
||||||
selinux_dep = []
|
selinux_dep = []
|
||||||
|
Loading…
x
Reference in New Issue
Block a user