#include #include #include #include "gtm/gtm_c.h" #include "gtm/elog.h" #include "gtm/palloc.h" #include "gtm/gtm.h" #include "gtm/gtm_txn.h" #include "gtm/assert.h" #include "gtm/stringinfo.h" #include "gtm/register.h" #include "gtm/libpq.h" #include "gtm/pqformat.h" #include "gtm/gtm_msg.h" #include "test_common.h" pthread_key_t threadinfo_key; void setUp() {} void tearDown() {} int test_snapshotdata_1(void) { GTM_SnapshotData *data, *data2; char* buf; int buflen; SETUP(); /* build a dummy GTM_SnapshotData data. */ data = (GTM_SnapshotData*)malloc(sizeof(GTM_SnapshotData)); data->sn_xmin = 128; data->sn_xmax = 256; data->sn_recent_global_xmin = 512; data->sn_xcnt = 1024; data->sn_xip = 2048; printf("sn_xmin=%d, sn_xmax=%d, sn_recent_global_xmin=%d, sn_xcnt=%d, sn_xip=%d\n", data->sn_xmin, data->sn_xmax, data->sn_recent_global_xmin, data->sn_xcnt, data->sn_xip); /* serialize */ buflen = sizeof(GTM_SnapshotData); buf = (char*)malloc(buflen); gtm_serialize_snapshotdata(data, buf, buflen); /* destroy old buf */ memset(data, 0, sizeof(GTM_SnapshotData)); free(data); /* deserialize */ data2 = (GTM_SnapshotData*)malloc(sizeof(GTM_SnapshotData)); gtm_deserialize_snapshotdata(data2, buf, buflen); printf("sn_xmin=%d, sn_xmax=%d, sn_recent_global_xmin=%d, sn_xcnt=%d, sn_xip=%d\n", data2->sn_xmin, data2->sn_xmax, data2->sn_recent_global_xmin, data2->sn_xcnt, data2->sn_xip); TEARDOWN(); return 0; } GTM_TransactionInfo* build_dummy_gtm_transactioninfo() { GTM_TransactionInfo* data; data = (GTM_TransactionInfo*)malloc(sizeof(GTM_TransactionInfo)); data->gti_handle = 3; data->gti_backend_id = 13; data->gti_datanodecount = 0; data->gti_datanodes = NULL; data->gti_coordcount = 0; data->gti_coordinators = NULL; data->gti_gid = "hoge"; data->gti_current_snapshot.sn_xmin = 128; data->gti_current_snapshot.sn_xmax = 256; data->gti_current_snapshot.sn_recent_global_xmin = 512; data->gti_current_snapshot.sn_xcnt = 1024; data->gti_current_snapshot.sn_xip = 2048; return data; } int test_transactioninfo_1(void) { GTM_TransactionInfo *data, *data2; char* buf; int buflen; int k; char datanode[3][NI_MAXHOST]; char coordnode[5][NI_MAXHOST]; k = 0; strcpy(datanode[k++], "DN_1"); strcpy(datanode[k++], "DN_2"); strcpy(datanode[k++], "DN_3"); k = 0; strcpy(coordnode[k++], "CN_1"); strcpy(coordnode[k++], "CN_2"); strcpy(coordnode[k++], "CN_3"); strcpy(coordnode[k++], "CN_4"); strcpy(coordnode[k++], "CN_5"); SETUP(); /* build a dummy GTM_SnapshotData data. */ data = build_dummy_gtm_transactioninfo(); data->gti_datanodecount = 3; data->gti_datanodes = datanode; data->gti_coordcount = 5; data->gti_coordinators = coordnode; /* serialize */ buflen = sizeof(GTM_TransactionInfo); buf = (char*)malloc(buflen); gtm_serialize_transactioninfo(data, buf, buflen); /* destroy old buf */ memset(data, 0, sizeof(GTM_TransactionInfo)); free(data); /* deserialize */ data2 = (GTM_TransactionInfo*)malloc(sizeof(GTM_TransactionInfo)); gtm_deserialize_transactioninfo(data2, buf, buflen); printf("deserialized.\n"); _ASSERT(data2->gti_handle == 3); _ASSERT(data2->gti_backend_id == 13); _ASSERT(data2->gti_datanodecount == 3); _ASSERT(data2->gti_coordcount == 5); _ASSERT(data2->gti_current_snapshot.sn_xmin == 128); _ASSERT(data2->gti_current_snapshot.sn_xmax == 256); _ASSERT(data2->gti_current_snapshot.sn_recent_global_xmin == 512); _ASSERT(data2->gti_current_snapshot.sn_xcnt == 1024); _ASSERT(data2->gti_current_snapshot.sn_xip == 2048); TEARDOWN(); return 0; } int test_transactions_1(void) { GTM_Transactions *data, *data2; GTM_TransactionInfo* d; char* buf; int buflen; int k; char datanode[3][NI_MAXHOST]; char coordnode[5][NI_MAXHOST]; k = 0; strcpy(datanode[k++], "DN_1"); strcpy(datanode[k++], "DN_2"); strcpy(datanode[k++], "DN_3"); k = 0; strcpy(coordnode[k++], "CN_1"); strcpy(coordnode[k++], "CN_2"); strcpy(coordnode[k++], "CN_3"); strcpy(coordnode[k++], "CN_4"); strcpy(coordnode[k++], "CN_5"); SETUP(); data = (GTM_Transactions*)malloc(sizeof(GTM_Transactions)); data->gt_lastslot = 13; /* build a dummy GTM_TransactionInfo data. */ d = build_dummy_gtm_transactioninfo(); d->gti_datanodecount = 3; d->gti_datanodes = datanode; d->gti_coordcount = 5; d->gti_coordinators = coordnode; memcpy(&data->gt_transactions_array[0], d, sizeof(data->gt_transactions_array[0])); printf("gt_lastslot=%d\n", data->gt_lastslot); /* serialize */ buflen = gtm_get_transactions_size(data); buf = (char*)malloc(buflen); if (!gtm_serialize_transactions(data, buf, buflen)) { printf("error.\n"); exit(1); } /* destroy old buf */ memset(data, 0, sizeof(GTM_Transactions)); free(data); /* deserialize */ data2 = (GTM_Transactions*)malloc(sizeof(GTM_Transactions)); gtm_deserialize_transactions(data2, buf, buflen); printf("deserialized.\n"); printf("gt_lastslot=%d\n", data2->gt_lastslot); printf("gti_handle=%d, gti_backend_id=%d\n", data2->gt_transactions_array[0].gti_handle, data2->gt_transactions_array[0].gti_backend_id); TEARDOWN(); return 0; } void test_pgxcnodeinfo_1() { GTM_PGXCNodeInfo *data, *data2; char* buf; size_t buflen; SETUP(); data = (GTM_PGXCNodeInfo*)malloc(sizeof(GTM_PGXCNodeInfo)); data->type = 2; data->nodename = "three"; data->port = 7; data->ipaddress = "foo"; data->datafolder = "bar"; printf("type=%d, nodename=%s, port=%d, ipaddress=%s, datafolder=%s\n", data->type, data->nodename, data->port, data->ipaddress, data->datafolder); /* serialize */ buflen = gtm_get_pgxcnodeinfo_size(data); buf = (char*)malloc(buflen); if (!gtm_serialize_pgxcnodeinfo(data, buf, buflen)) { printf("error.\n"); exit(1); } /* destroy old buf */ memset(data, 0, sizeof(GTM_PGXCNodeInfo)); free(data); /* deserialize */ data2 = (GTM_PGXCNodeInfo*)malloc(sizeof(GTM_PGXCNodeInfo)); gtm_deserialize_pgxcnodeinfo(data2, buf, buflen); printf("deserialized.\n"); printf("type=%d, nodename=%s, port=%d, ipaddress=%s, datafolder=%s\n", data2->type, data2->nodename, data2->port, data2->ipaddress, data2->datafolder); TEARDOWN(); return 0; } int test_seqinfo_1(void) { GTM_SeqInfo *d1, *d2; char* buf; int buflen; GTM_SequenceKeyData gs_key; SETUP(); /* build a dummy GTM_SnapshotData data. */ d1 = (GTM_SeqInfo*)malloc(sizeof(GTM_SeqInfo)); gs_key.gsk_keylen = 0; gs_key.gsk_key = ""; gs_key.gsk_type = GTM_SEQ_DB_NAME; d1->gs_key = &gs_key; d1->gs_value = 3; d1->gs_init_value = 5; d1->gs_last_value = 7; d1->gs_increment_by = 11; d1->gs_min_value = 13; d1->gs_max_value = 17; d1->gs_cycle = true; d1->gs_called = true; d1->gs_ref_count = 19; d1->gs_state = 23; /* serialize */ buflen = gtm_get_sequence_size(d1); buf = (char*)malloc(buflen); gtm_serialize_sequence(d1, buf, buflen); /* destroy old buf */ memset(d1, 0, sizeof(GTM_SeqInfo)); free(d1); /* deserialize */ // d2 = (GTM_SeqInfo *)malloc(sizeof(GTM_SeqInfo)); d2 = gtm_deserialize_sequence(buf, buflen); _ASSERT(d2->gs_key->gsk_keylen == 0); _ASSERT(strcmp(d2->gs_key->gsk_key, "") == 0); _ASSERT(d2->gs_key->gsk_type == GTM_SEQ_DB_NAME); TEARDOWN(); return 0; } int main(void) { test_snapshotdata_1(); test_transactioninfo_1(); test_transactions_1(); test_pgxcnodeinfo_1(); test_seqinfo_1(); return 0; }