/* * Copyright (c) 2010-2012 Postgres-XC Development Group */ #include #include #include "gtm/libpq-fe.h" #include "gtm/gtm_c.h" #include "gtm/gtm_client.h" #include "gtm/register.h" #include "test_common.h" pthread_key_t threadinfo_key; void setUp() { connect1(); } void tearDown() { GTMPQfinish(conn); } void test_seq4_01() { int rc; GTM_SequenceKeyData seqkey; GTM_Sequence increment; GTM_Sequence minval; GTM_Sequence maxval; GTM_Sequence startval; bool cycle; GTM_Sequence cur; SETUP(); /* * open sequence */ seqkey.gsk_key = strdup("seq1"); seqkey.gsk_keylen = strlen(seqkey.gsk_key); seqkey.gsk_type = GTM_SEQ_FULL_NAME; increment = 1; minval = 0; maxval = 10000; startval = 0; cycle = true; rc = open_sequence(conn, &seqkey, increment, minval, maxval, startval, cycle); _ASSERT(rc >= 0); _ASSERT(grep_count(LOG_ACTIVE, "Opening sequence seq1") == 1); _ASSERT(grep_count(LOG_STANDBY, "Opening sequence seq1") == 1); /* * get current */ cur = get_current(conn, &seqkey); _ASSERT(cur == 0); _ASSERT(grep_count(LOG_ACTIVE, "Getting current value 0 for sequence seq1") == 1); _ASSERT(grep_count(LOG_STANDBY, "Getting current value 0 for sequence seq1") == 1); cur = get_current(conn, &seqkey); _ASSERT(cur == 0); _ASSERT(grep_count(LOG_ACTIVE, "Getting current value 0 for sequence seq1") == 2); _ASSERT(grep_count(LOG_STANDBY, "Getting current value 0 for sequence seq1") == 2); /* * get next */ cur = get_next(conn, &seqkey); _ASSERT(cur == 1); _ASSERT(grep_count(LOG_ACTIVE, "Getting next value 1 for sequence seq1") == 1); _ASSERT(grep_count(LOG_STANDBY, "Getting next value 1 for sequence seq1") == 1); cur = get_next(conn, &seqkey); _ASSERT(cur == 2); _ASSERT(grep_count(LOG_ACTIVE, "Getting next value 2 for sequence seq1") == 1); _ASSERT(grep_count(LOG_STANDBY, "Getting next value 2 for sequence seq1") == 1); cur = get_next(conn, &seqkey); _ASSERT(cur == 3); _ASSERT(grep_count(LOG_ACTIVE, "Getting next value 3 for sequence seq1") == 1); _ASSERT(grep_count(LOG_STANDBY, "Getting next value 3 for sequence seq1") == 1); /* * set value */ rc = set_val(conn, &seqkey, 13, true); _ASSERT(rc >= 0); _ASSERT(grep_count(LOG_ACTIVE, "Setting new value 13 for sequence seq1") == 1); _ASSERT(grep_count(LOG_STANDBY, "Setting new value 13 for sequence seq1") == 1); cur = get_next(conn, &seqkey); _ASSERT(cur == 14); _ASSERT(grep_count(LOG_ACTIVE, "Getting next value 14 for sequence seq1") == 1); _ASSERT(grep_count(LOG_STANDBY, "Getting next value 14 for sequence seq1") == 1); #ifdef NOT_USED /* FIXME: snaga \ /* \ * FIXME: When `iscalled' is false, set_val() does not affect the sequence value. \ */ rc = set_val(conn, &seqkey, 1000, false); #endif /* * reset */ rc = reset_sequence(conn, &seqkey); _ASSERT(cur >= 0); _ASSERT(grep_count(LOG_ACTIVE, "Resetting sequence seq1") == 1); _ASSERT(grep_count(LOG_STANDBY, "Resetting sequence seq1") == 1); cur = get_next(conn, &seqkey); _ASSERT(cur == 1); _ASSERT(grep_count(LOG_ACTIVE, "Getting next value 1 for sequence seq1") == 2); _ASSERT(grep_count(LOG_STANDBY, "Getting next value 1 for sequence seq1") == 2); /* * close */ rc = close_sequence(conn, &seqkey); _ASSERT(rc >= 0); _ASSERT(grep_count(LOG_ACTIVE, "Closing sequence seq1") == 1); _ASSERT(grep_count(LOG_STANDBY, "Closing sequence seq1") == 1); TEARDOWN(); } void test_seq4_02() { int rc; GTM_SequenceKeyData seqkey; GTM_SequenceKeyData newseqkey; GTM_Sequence increment; GTM_Sequence minval; GTM_Sequence maxval; GTM_Sequence startval; bool cycle; SETUP(); /* * create a sequence */ seqkey.gsk_key = strdup("seq1"); seqkey.gsk_keylen = strlen(seqkey.gsk_key); seqkey.gsk_type = GTM_SEQ_FULL_NAME; increment = 1; minval = 0; maxval = 10000; startval = 0; cycle = true; rc = open_sequence(conn, &seqkey, increment, minval, maxval, startval, cycle); _ASSERT(rc >= 0); /* create a new key */ newseqkey.gsk_key = strdup("seqnew"); newseqkey.gsk_keylen = strlen(newseqkey.gsk_key); newseqkey.gsk_type = GTM_SEQ_FULL_NAME; /* * rename key */ rc = rename_sequence(conn, &seqkey, &newseqkey); _ASSERT(rc >= 0); _ASSERT(grep_count(LOG_ACTIVE, "Renaming sequence seq1 to seqnew") == 1); _ASSERT(grep_count(LOG_STANDBY, "Renaming sequence seq1 to seqnew") == 1); rc = close_sequence(conn, &newseqkey); _ASSERT(rc >= 0); _ASSERT(grep_count(LOG_ACTIVE, "Closing sequence seqnew") == 1); _ASSERT(grep_count(LOG_STANDBY, "Closing sequence seqnew") == 1); TEARDOWN(); } void test_seq4_03() { int rc; GTM_SequenceKeyData seqkey; GTM_SequenceKeyData newseqkey; GTM_Sequence increment; GTM_Sequence minval; GTM_Sequence maxval; GTM_Sequence startval; bool cycle; GTM_Sequence cur; SETUP(); /* * create a sequence */ seqkey.gsk_key = strdup("seq2"); seqkey.gsk_keylen = strlen(seqkey.gsk_key); seqkey.gsk_type = GTM_SEQ_FULL_NAME; increment = 1; minval = 0; maxval = 10000; startval = 0; cycle = true; rc = open_sequence(conn, &seqkey, increment, minval, maxval, startval, cycle); _ASSERT(rc >= 0); { GTM_Sequence increment; GTM_Sequence minval; GTM_Sequence maxval; GTM_Sequence startval; bool cycle; increment = 1; minval = 100; maxval = 10000; startval = 100; cycle = true; rc = alter_sequence(conn, &seqkey, increment, minval, maxval, startval, 256, /* lastval */ cycle, true); _ASSERT(rc >= 0); _ASSERT(grep_count(LOG_ACTIVE, "Altering sequence key seq2") == 1); _ASSERT(grep_count(LOG_STANDBY, "Altering sequence key seq2") == 1); } cur = get_current(conn, &seqkey); _ASSERT(cur == 100); _ASSERT(grep_count(LOG_ACTIVE, "Getting current value 100 for sequence seq2") == 1); _ASSERT(grep_count(LOG_STANDBY, "Getting current value 100 for sequence seq2") == 1); cur = get_next(conn, &seqkey); _ASSERT(cur == 101); _ASSERT(grep_count(LOG_ACTIVE, "Getting next value 101 for sequence seq2") == 1); _ASSERT(grep_count(LOG_STANDBY, "Getting next value 101 for sequence seq2") == 1); TEARDOWN(); } int main(int argc, char* argv[]) { system("./stop.sh"); system("./clean.sh"); system("./start.sh"); test_seq4_01(); test_seq4_02(); /* rename */ test_seq4_03(); /* alter */ return 0; }