コード例 #1
0
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);
}
コード例 #2
0
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);
}
コード例 #3
0
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);
}
コード例 #4
0
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;
}