Exemplo n.º 1
0
static void
test_read_and_write(void)
{
  int status;
  pid_t pid;
  ThriftSocket *tsocket = NULL;
  ThriftTransport *transport = NULL;
  int port = 51199;
  guchar buf[10] = TEST_DATA; /* a buffer */

  pid = fork ();
  g_assert ( pid >= 0 );

  if ( pid == 0 )
    {
      /* child listens */
      thrift_server (port);
      exit (0);
    } else {
	/* parent connects, wait a bit for the socket to be created */
	sleep (1);

	tsocket = g_object_new (THRIFT_TYPE_SOCKET, "hostname", "localhost",
				"port", port, NULL);
	transport = g_object_new (THRIFT_TYPE_FRAMED_TRANSPORT,
				  "transport", THRIFT_TRANSPORT (tsocket),
				  "w_buf_size", 4, NULL);

	g_assert (thrift_framed_transport_open (transport, NULL) == TRUE);
	g_assert (thrift_framed_transport_is_open (transport));

	/* write 10 bytes */
	thrift_framed_transport_write (transport, buf, 10, NULL);
	thrift_framed_transport_flush (transport, NULL);

	thrift_framed_transport_write (transport, buf, 1, NULL);
	thrift_framed_transport_flush (transport, NULL);

	thrift_framed_transport_write (transport, buf, 10, NULL);
	thrift_framed_transport_flush (transport, NULL);

	thrift_framed_transport_write (transport, buf, 10, NULL);
	thrift_framed_transport_flush (transport, NULL);

	thrift_framed_transport_write_end (transport, NULL);
	thrift_framed_transport_flush (transport, NULL);
	thrift_framed_transport_close (transport, NULL);

	g_object_unref (transport);
	g_object_unref (tsocket);

	g_assert ( wait (&status) == pid );
	g_assert ( status == 0 );
    }
}
Exemplo n.º 2
0
static void
test_open_and_close(void)
{
  ThriftSocket *tsocket = NULL;
  ThriftTransport *transport = NULL;
  GError *err = NULL;
  pid_t pid;
  int port = 51199;
  int status;

  pid = fork ();
  g_assert ( pid >= 0 );

  if ( pid == 0 )
    {
      /* child listens */
      thrift_socket_server_open (port,1);
      exit (0);
    } else {
	/* parent connects, wait a bit for the socket to be created */
	sleep (1);
	/* create a ThriftSocket */
	tsocket = g_object_new (THRIFT_TYPE_SOCKET, "hostname", "localhost",
				"port", port, NULL);

	/* create a BufferedTransport wrapper of the Socket */
	transport = g_object_new (THRIFT_TYPE_FRAMED_TRANSPORT,
				  "transport", THRIFT_TRANSPORT (tsocket), NULL);

	/* this shouldn't work */
	g_assert (thrift_framed_transport_open (transport, NULL) == TRUE);
	g_assert (thrift_framed_transport_is_open (transport) == TRUE);
	g_assert (thrift_framed_transport_close (transport, NULL) == TRUE);
	g_object_unref (transport);
	g_object_unref (tsocket);

	/* try and underlying socket failure */
	tsocket = g_object_new (THRIFT_TYPE_SOCKET, "hostname", "localhost.broken",
				NULL);

	/* create a BufferedTransport wrapper of the Socket */
	transport = g_object_new (THRIFT_TYPE_FRAMED_TRANSPORT,
				  "transport", THRIFT_TRANSPORT (tsocket), NULL);

	g_assert (thrift_framed_transport_open (transport, &err) == FALSE);
	g_object_unref (transport);
	g_object_unref (tsocket);
	g_error_free (err);
	err = NULL;

	g_assert ( wait (&status) == pid );
	g_assert ( status == 0 );
    }
}
Exemplo n.º 3
0
static void
thrift_server (const int port)
{
  int bytes = 0;
  ThriftServerTransport *transport = NULL;
  ThriftTransport *client = NULL;
  guchar buf[12]; /* a buffer */
  guchar match[10] = TEST_DATA;

  ThriftServerSocket *tsocket = g_object_new (THRIFT_TYPE_SERVER_SOCKET,
					      "port", port, NULL);

  transport = THRIFT_SERVER_TRANSPORT (tsocket);
  thrift_server_transport_listen (transport, NULL);

  /* wrap the client in a BufferedTransport */
  client = g_object_new (THRIFT_TYPE_FRAMED_TRANSPORT, "transport",
			 thrift_server_transport_accept (transport, NULL),
			 "r_buf_size", 5, NULL);
  g_assert (client != NULL);

  /* read 10 bytes */
  bytes = thrift_framed_transport_read (client, buf, 10, NULL);
  g_assert (bytes == 10); /* make sure we've read 10 bytes */
  g_assert ( memcmp (buf, match, 10) == 0 ); /* make sure what we got matches */

  bytes = thrift_framed_transport_read (client, buf, 6, NULL);
  bytes = thrift_framed_transport_read (client, buf, 5, NULL);
  bytes = thrift_framed_transport_read (client, buf, 1, NULL);

  bytes = thrift_framed_transport_read (client, buf, 12, NULL);

  thrift_framed_transport_read_end (client, NULL);
  thrift_framed_transport_close (client, NULL);
  g_object_unref (client);
  g_object_unref (tsocket);
}
Exemplo n.º 4
0
static void
test_open_and_close(void)
{
  ThriftSocket *tsocket = NULL;
  ThriftTransport *transport = NULL;
  GError *err = NULL;

  /* create a ThriftSocket */
  tsocket = g_object_new (THRIFT_TYPE_SOCKET, "hostname", "localhost",
                          "port", 51188, NULL); 

  /* create a BufferedTransport wrapper of the Socket */
  transport = g_object_new (THRIFT_TYPE_FRAMED_TRANSPORT,
                            "transport", THRIFT_TRANSPORT (tsocket), NULL);

  /* this shouldn't work */
  assert (thrift_framed_transport_open (transport, NULL) == FALSE);
  assert (thrift_framed_transport_is_open (transport) == TRUE);
  assert (thrift_framed_transport_close (transport, NULL) == TRUE);
  g_object_unref (transport);
  g_object_unref (tsocket);

  /* try and underlying socket failure */
  tsocket = g_object_new (THRIFT_TYPE_SOCKET, "hostname", "localhost.broken",
                          NULL);

  /* create a BufferedTransport wrapper of the Socket */
  transport = g_object_new (THRIFT_TYPE_FRAMED_TRANSPORT,
                            "transport", THRIFT_TRANSPORT (tsocket), NULL);

  assert (thrift_framed_transport_open (transport, &err) == FALSE);
  g_object_unref (transport);
  g_object_unref (tsocket);
  g_error_free (err);
  err = NULL;
}