diff options
author | cjihrig <cjihrig@gmail.com> | 2017-07-06 19:12:45 -0400 |
---|---|---|
committer | cjihrig <cjihrig@gmail.com> | 2017-07-13 11:25:10 -0400 |
commit | 462b2466b34724ce194b4249a3e241083eb753d3 (patch) | |
tree | 4b80e9f2431ae14a0c01e4621e7cb14c19256466 /deps/uv/test/test-ipc.c | |
parent | 31417b68822abeced64eeb120f064d37bc133f7c (diff) | |
download | android-node-v8-462b2466b34724ce194b4249a3e241083eb753d3.tar.gz android-node-v8-462b2466b34724ce194b4249a3e241083eb753d3.tar.bz2 android-node-v8-462b2466b34724ce194b4249a3e241083eb753d3.zip |
deps: upgrade libuv to 1.13.1
PR-URL: https://github.com/nodejs/node/pull/14117
Reviewed-By: Refael Ackermann <refack@gmail.com>
Reviewed-By: Daniel Bevenius <daniel.bevenius@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
Diffstat (limited to 'deps/uv/test/test-ipc.c')
-rw-r--r-- | deps/uv/test/test-ipc.c | 96 |
1 files changed, 96 insertions, 0 deletions
diff --git a/deps/uv/test/test-ipc.c b/deps/uv/test/test-ipc.c index a2fda24585..88d63d4dc6 100644 --- a/deps/uv/test/test-ipc.c +++ b/deps/uv/test/test-ipc.c @@ -44,6 +44,7 @@ static int close_cb_called; static int connection_accepted; static int tcp_conn_read_cb_called; static int tcp_conn_write_cb_called; +static int closed_handle_data_read; typedef struct { uv_connect_t conn_req; @@ -53,6 +54,7 @@ typedef struct { #define CONN_COUNT 100 #define BACKLOG 128 +#define LARGE_SIZE 1000000 static void close_server_conn_cb(uv_handle_t* handle) { @@ -395,6 +397,26 @@ static void on_read_connection(uv_stream_t* handle, } +#ifndef _WIN32 +static void on_read_closed_handle(uv_stream_t* handle, + ssize_t nread, + const uv_buf_t* buf) { + if (nread == 0 || nread == UV_EOF) { + free(buf->base); + return; + } + + if (nread < 0) { + printf("error recving on channel: %s\n", uv_strerror(nread)); + abort(); + } + + closed_handle_data_read += nread; + free(buf->base); +} +#endif + + static int run_ipc_test(const char* helper, uv_read_cb read_cb) { uv_process_t process; int r; @@ -448,6 +470,15 @@ TEST_IMPL(ipc_tcp_connection) { return r; } +#ifndef _WIN32 +TEST_IMPL(ipc_closed_handle) { + int r; + r = run_ipc_test("ipc_helper_closed_handle", on_read_closed_handle); + ASSERT(r == 0); + return 0; +} +#endif + #ifdef _WIN32 TEST_IMPL(listen_with_simultaneous_accepts) { @@ -536,6 +567,17 @@ static void tcp_connection_write_cb(uv_write_t* req, int status) { } +static void closed_handle_large_write_cb(uv_write_t* req, int status) { + ASSERT(status == 0); + ASSERT(closed_handle_data_read = LARGE_SIZE); +} + + +static void closed_handle_write_cb(uv_write_t* req, int status) { + ASSERT(status == UV_EBADF); +} + + static void on_tcp_child_process_read(uv_stream_t* tcp, ssize_t nread, const uv_buf_t* buf) { @@ -742,6 +784,60 @@ int ipc_helper_tcp_connection(void) { return 0; } + +int ipc_helper_closed_handle(void) { + int r; + struct sockaddr_in addr; + uv_write_t write_req; + uv_write_t write_req2; + uv_buf_t buf; + char buffer[LARGE_SIZE]; + + r = uv_pipe_init(uv_default_loop(), &channel, 1); + ASSERT(r == 0); + + uv_pipe_open(&channel, 0); + + ASSERT(1 == uv_is_readable((uv_stream_t*) &channel)); + ASSERT(1 == uv_is_writable((uv_stream_t*) &channel)); + ASSERT(0 == uv_is_closing((uv_handle_t*) &channel)); + + memset(buffer, '.', LARGE_SIZE); + buf = uv_buf_init(buffer, LARGE_SIZE); + + r = uv_tcp_init(uv_default_loop(), &tcp_server); + ASSERT(r == 0); + + ASSERT(0 == uv_ip4_addr("0.0.0.0", TEST_PORT, &addr)); + + r = uv_tcp_bind(&tcp_server, (const struct sockaddr*) &addr, 0); + ASSERT(r == 0); + + r = uv_write(&write_req, + (uv_stream_t*)&channel, + &buf, + 1, + closed_handle_large_write_cb); + ASSERT(r == 0); + + r = uv_write2(&write_req2, + (uv_stream_t*)&channel, + &buf, + 1, + (uv_stream_t*)&tcp_server, + closed_handle_write_cb); + ASSERT(r == 0); + + uv_close((uv_handle_t*)&tcp_server, NULL); + + r = uv_run(uv_default_loop(), UV_RUN_DEFAULT); + ASSERT(r == 0); + + MAKE_VALGRIND_HAPPY(); + return 0; +} + + int ipc_helper_bind_twice(void) { /* * This is launched from test-ipc.c. stdin is a duplex channel |