96 lines
3.5 KiB
C
96 lines
3.5 KiB
C
#include <thrift/c_glib/protocol/thrift_binary_protocol.h>
|
|
#include <thrift/c_glib/protocol/thrift_protocol.h>
|
|
#include <thrift/c_glib/transport/thrift_memory_buffer.h>
|
|
#include <thrift/c_glib/transport/thrift_transport.h>
|
|
#include "gen-c_glib/t_test_debug_proto_test_types.h"
|
|
#include "gen-c_glib/t_test_enum_test_types.h"
|
|
|
|
static void enum_constants_read_write() {
|
|
GError* error = NULL;
|
|
ThriftTransport* transport
|
|
= THRIFT_TRANSPORT(g_object_new(THRIFT_TYPE_MEMORY_BUFFER, "buf_size", 1024, NULL));
|
|
ThriftProtocol* protocol
|
|
= THRIFT_PROTOCOL(g_object_new(THRIFT_TYPE_BINARY_PROTOCOL, "transport", transport, NULL));
|
|
TTestEnumTestStruct* src = T_TEST_ENUM_TEST;
|
|
TTestEnumTestStruct* dst = g_object_new(T_TEST_TYPE_ENUM_TEST_STRUCT, NULL);
|
|
TTestEnumTestStructClass* cls = T_TEST_ENUM_TEST_STRUCT_GET_CLASS(src);
|
|
int write_len;
|
|
int read_len;
|
|
|
|
write_len = THRIFT_STRUCT_CLASS(cls)->write(THRIFT_STRUCT(src), protocol, &error);
|
|
g_assert(!error);
|
|
g_assert(write_len > 0);
|
|
|
|
read_len = THRIFT_STRUCT_CLASS(cls)->read(THRIFT_STRUCT(dst), protocol, &error);
|
|
g_assert(!error);
|
|
g_assert_cmpint(write_len, ==, read_len);
|
|
|
|
g_object_unref(dst);
|
|
g_object_unref(protocol);
|
|
g_object_unref(transport);
|
|
}
|
|
|
|
static void struct_constants_read_write() {
|
|
GError* error = NULL;
|
|
ThriftTransport* transport
|
|
= THRIFT_TRANSPORT(g_object_new(THRIFT_TYPE_MEMORY_BUFFER, "buf_size", 4096, NULL));
|
|
ThriftProtocol* protocol
|
|
= THRIFT_PROTOCOL(g_object_new(THRIFT_TYPE_BINARY_PROTOCOL, "transport", transport, NULL));
|
|
TTestCompactProtoTestStruct* src = T_TEST_COMPACT_TEST;
|
|
TTestCompactProtoTestStruct* dst = g_object_new(T_TEST_TYPE_COMPACT_PROTO_TEST_STRUCT, NULL);
|
|
TTestCompactProtoTestStructClass* cls = T_TEST_COMPACT_PROTO_TEST_STRUCT_GET_CLASS(src);
|
|
int write_len;
|
|
int read_len;
|
|
|
|
write_len = THRIFT_STRUCT_CLASS(cls)->write(THRIFT_STRUCT(src), protocol, &error);
|
|
g_assert(!error);
|
|
g_assert(write_len > 0);
|
|
|
|
read_len = THRIFT_STRUCT_CLASS(cls)->read(THRIFT_STRUCT(dst), protocol, &error);
|
|
g_assert(!error);
|
|
g_assert_cmpint(write_len, ==, read_len);
|
|
|
|
g_object_unref(dst);
|
|
g_object_unref(protocol);
|
|
g_object_unref(transport);
|
|
}
|
|
|
|
static void struct_read_write_length_should_equal() {
|
|
GError* error = NULL;
|
|
ThriftTransport* transport
|
|
= THRIFT_TRANSPORT(g_object_new(THRIFT_TYPE_MEMORY_BUFFER, "buf_size", 2048, NULL));
|
|
ThriftProtocol* protocol
|
|
= THRIFT_PROTOCOL(g_object_new(THRIFT_TYPE_BINARY_PROTOCOL, "transport", transport, NULL));
|
|
TTestBonk* src = g_object_new(T_TEST_TYPE_BONK, NULL);
|
|
TTestBonk* dst = g_object_new(T_TEST_TYPE_BONK, NULL);
|
|
TTestBonkClass* cls = T_TEST_BONK_GET_CLASS(src);
|
|
int write_len;
|
|
int read_len;
|
|
|
|
write_len = THRIFT_STRUCT_CLASS(cls)->write(THRIFT_STRUCT(src), protocol, &error);
|
|
g_assert(!error);
|
|
g_assert(write_len > 0);
|
|
|
|
read_len = THRIFT_STRUCT_CLASS(cls)->read(THRIFT_STRUCT(dst), protocol, &error);
|
|
g_assert(!error);
|
|
g_assert_cmpint(write_len, ==, read_len);
|
|
|
|
g_object_unref(dst);
|
|
g_object_unref(src);
|
|
g_object_unref(protocol);
|
|
g_object_unref(transport);
|
|
}
|
|
|
|
int main(int argc, char* argv[]) {
|
|
#if (!GLIB_CHECK_VERSION(2, 36, 0))
|
|
g_type_init();
|
|
#endif
|
|
g_test_init(&argc, &argv, NULL);
|
|
|
|
g_test_add_func("/testserialization/StructReadWriteLengthShouldEqual",
|
|
struct_read_write_length_should_equal);
|
|
g_test_add_func("/testserialization/StructConstants", struct_constants_read_write);
|
|
g_test_add_func("/testserialization/EnumConstants", enum_constants_read_write);
|
|
return g_test_run();
|
|
}
|