aboutsummaryrefslogtreecommitdiff
path: root/deps/uv/test/test-ipc.c
diff options
context:
space:
mode:
authorcjihrig <cjihrig@gmail.com>2017-07-06 19:12:45 -0400
committercjihrig <cjihrig@gmail.com>2017-07-13 11:25:10 -0400
commit462b2466b34724ce194b4249a3e241083eb753d3 (patch)
tree4b80e9f2431ae14a0c01e4621e7cb14c19256466 /deps/uv/test/test-ipc.c
parent31417b68822abeced64eeb120f064d37bc133f7c (diff)
downloadandroid-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.c96
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