static void test_mongoc_buffer_basic (void) { mongoc_stream_t *stream; mongoc_buffer_t buf; uint8_t *data = bson_malloc0(1024); bson_error_t error = { 0 }; ssize_t r; mongoc_fd_t fd; fd = mongoc_open("tests/binary/reply1.dat", O_RDONLY); ASSERT(mongoc_fd_is_valid(fd)); stream = mongoc_stream_unix_new(fd); ASSERT(stream); _mongoc_buffer_init(&buf, data, 1024, bson_realloc); r = _mongoc_buffer_fill(&buf, stream, 537, 0, &error); ASSERT_CMPINT((int)r, ==, -1); r = _mongoc_buffer_fill(&buf, stream, 536, 0, &error); ASSERT_CMPINT((int)r, ==, 536); ASSERT(buf.len == 536); _mongoc_buffer_destroy(&buf); _mongoc_buffer_destroy(&buf); _mongoc_buffer_destroy(&buf); _mongoc_buffer_destroy(&buf); mongoc_stream_destroy(stream); }
static void test_mongoc_buffer_basic (void) { mongoc_stream_t *stream; mongoc_buffer_t buf; bson_uint8_t *data = bson_malloc0(1024); bson_error_t error = { 0 }; bson_bool_t r; int fd; fd = open("tests/binary/reply1.dat", O_RDONLY); assert(fd >= 0); stream = mongoc_stream_unix_new(fd); assert(stream); _mongoc_buffer_init(&buf, data, 1024, bson_realloc); r = _mongoc_buffer_fill(&buf, stream, 537, 0, &error); assert_cmpint(r, ==, -1); r = _mongoc_buffer_fill(&buf, stream, 536, 0, &error); assert_cmpint(r, ==, 536); assert(buf.len == 536); _mongoc_buffer_destroy(&buf); _mongoc_buffer_destroy(&buf); _mongoc_buffer_destroy(&buf); _mongoc_buffer_destroy(&buf); mongoc_stream_destroy(stream); }
static void test_buffered_basic (void) { mongoc_stream_t *stream; mongoc_stream_t *buffered; ssize_t r; struct iovec iov; char buf[16236]; mongoc_fd_t fd; fd = mongoc_open("tests/binary/reply2.dat", O_RDONLY); assert(mongoc_fd_is_valid(fd)); /* stream assumes ownership of fd */ stream = mongoc_stream_unix_new(fd); /* buffered assumes ownership of stream */ buffered = mongoc_stream_buffered_new(stream, 1024); /* try to read large chunk larger than buffer. */ iov.iov_len = sizeof buf; iov.iov_base = buf; r = mongoc_stream_readv(buffered, &iov, 1, iov.iov_len, -1); BSON_ASSERT(r == iov.iov_len); /* cleanup */ mongoc_stream_destroy(buffered); }
int mock_server_run (mock_server_t *server) { struct sockaddr_in saddr; mongoc_stream_t *stream; mongoc_thread_t thread; void **closure; int optval; mongoc_fd_t sd; mongoc_fd_t cd; bson_return_val_if_fail(server, -1); bson_return_val_if_fail(! mongoc_fd_is_valid(server->socket), -1); sd = mongoc_socket(AF_INET, SOCK_STREAM, 0); if (! mongoc_fd_is_valid(sd)) { perror("Failed to create socket."); return -1; } optval = 1; mongoc_setsockopt(sd, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof optval); memset(&saddr, 0, sizeof saddr); saddr.sin_family = AF_INET; saddr.sin_port = htons(server->port); /* * TODO: Parse server->address. */ saddr.sin_addr.s_addr = htonl(INADDR_ANY); if (-1 == mongoc_bind(sd, (struct sockaddr *)&saddr, sizeof saddr)) { perror("Failed to bind socket"); return -1; } if (-1 == mongoc_listen(sd, 10)) { perror("Failed to put socket into listen mode"); return 3; } server->socket = sd; for (;;) { cd = mongoc_accept(server->socket, NULL, NULL); if (! mongoc_fd_is_valid(cd)) { perror("Failed to accept client socket"); return -1; } stream = mongoc_stream_unix_new(cd); closure = bson_malloc0(sizeof(void*) * 2); closure[0] = server; closure[1] = stream; mongoc_thread_create(&thread, mock_server_worker, closure); } mongoc_close(server->socket); server->socket = MONGOC_FD_INVALID; return 0; }