From f802d3e9cf8a3d1ab306fe9a6133f64a57692165 Mon Sep 17 00:00:00 2001 From: Vasiliy Soshnikov Date: Tue, 8 Dec 2015 00:05:58 +0300 Subject: [PATCH] #9 compatibility with Tarantool > 1.6.6 issue resolved; update tests; --- Makefile | 6 +++++- test/client.py | 6 +++++- test/nginx-tnt.sh | 48 ++++++++++++++++++++++++++++++++--------------- third_party/tp.h | 26 +++++++++++++++++-------- 4 files changed, 61 insertions(+), 25 deletions(-) diff --git a/Makefile b/Makefile index e2fc5f4..131f121 100644 --- a/Makefile +++ b/Makefile @@ -57,10 +57,14 @@ tp_dump: -o misc/tp_dump \ -lyajl_s -test: utils build +test-dev: utils build $(CUR_PATH)/test/transcode.sh $(CUR_PATH)/test/nginx-tnt.sh +test: utils build + $(CUR_PATH)/test/transcode.sh + $(CUR_PATH)/test/client.py + clean: $(MAKE) -C $(NGX_PATH) clean 2>1 || echo "pass" rm -f misc/tp_{send,dump} misc/json2tp diff --git a/test/client.py b/test/client.py index 46103f9..21a45ff 100755 --- a/test/client.py +++ b/test/client.py @@ -82,6 +82,7 @@ def batch_cases(): } ]) + assert(rc == 200), 'expected 200' assert(len(res) == 2), 'expected 2 elements, got %i' % len(res) assert(get_result_i(res, 0)[1] == '101234567891234567') @@ -130,12 +131,15 @@ def batch_cases(): ]) assert(rc == 200), 'expected 200' for rr in res: - if rr['id'] == 1 or rr['id'] == 3: + if rr['id'] == 3: assert('error' in rr or 'message' in rr), \ 'expected %s returns error/message, got %s' % (rr['id'], rr) elif rr['id'] == 2: rr_ = get_result(rr) assert(rr_[1] == '101234567891234567') + elif rr['id'] == 1: + rr_ = get_result(rr) + assert(rr_ == [{"first":1}, {"second":2}]) else: assert False, "unexpected id %s" % rr['id'] diff --git a/test/nginx-tnt.sh b/test/nginx-tnt.sh index 0651736..52ff31c 100755 --- a/test/nginx-tnt.sh +++ b/test/nginx-tnt.sh @@ -6,6 +6,25 @@ WORK_DIR=$PWD/test NGINX_PREFIX=$PWD/test-root NGINX="$PWD/nginx/objs/nginx -p $NGINX_PREFIX" +cleanup() +{ + `$NGINX -s stop` + + rm -f $WORK_DIR/*.xlog $WORK_DIR/*.snap >/dev/null + + for job in `jobs -p`; do + kill -s TERM $job + done + for job in `jobs -p`; do + wait $job + done + + echo '[+] Done.' +} +trap cleanup EXIT + +rm -f $WORK_DIR/*.xlog $WORK_DIR/*.snap >/dev/null + ## Env if [ -e $NGINX_PREFIX/logs/nginx.pid ]; then `$NGINX -s stop` 2> /dev/null @@ -13,29 +32,28 @@ fi `$NGINX` cd $WORK_DIR 1> /dev/null -tarantool test.lua 2> /dev/null & +tarantool test.lua > /dev/null & cd - 1> /dev/null -sleep 1 +sleep 2 -## Test echo "[+] Testing ..." -for i in {1..50}; do + +## Tests +for i in {1..10}; do + echo "[+] try: $i" $WORK_DIR/client.py 1> /dev/null || ( - echo "[-] $WORK_DIR/client.py failed, at: $i" && exit 1 + echo "[-] $WORK_DIR/client.py failed" && exit 1 ) done -## Clean up -`$NGINX -s stop` - -rm -f $WORK_DIR/*.xlog $WORK_DIR/*.snap >/dev/null -for job in `jobs -p`; do - kill -s TERM $job +clients_pids= +for i in {1..3}; do + `$WORK_DIR/client.py 1> /dev/null || ( + echo "[-] $WORK_DIR/client.py failed" && exit 1 + )` & + clients_pids="$clients_pids $!" done -for job in `jobs -p`; do +for job in $clients_pids; do wait $job done -echo "[+] OK" - -exit 0 diff --git a/third_party/tp.h b/third_party/tp.h index f16615f..15e6585 100644 --- a/third_party/tp.h +++ b/third_party/tp.h @@ -59,8 +59,12 @@ enum tp_type { /* header */ enum tp_header_key_t { - TP_CODE = 0x00, - TP_SYNC = 0x01 + TP_CODE = 0x00, + TP_SYNC = 0x01, + TP_SERVER_ID = 0x02, + TP_LSN = 0x03, + TP_TIMESTAMP = 0x04, + TP_SCHEMA_ID = 0x05 }; /* request body */ @@ -70,17 +74,16 @@ enum tp_body_key_t { TP_LIMIT = 0x12, TP_OFFSET = 0x13, TP_ITERATOR = 0x14, + TP_INDEX_BASE = 0x15, TP_KEY = 0x20, TP_TUPLE = 0x21, TP_FUNCTION = 0x22, TP_USERNAME = 0x23, - TP_EXPRESSION = 0x27, - TP_SERVER_ID = 0x02, - TP_LSN = 0x03, - TP_TIMESTAMP = 0x04, TP_SERVER_UUID = 0x24, TP_CLUSTER_UUID = 0x25, - TP_VCLOCK = 0x26 + TP_VCLOCK = 0x26, + TP_EXPRESSION = 0x27, + TP_OPS = 0x28 }; /* response body */ @@ -195,6 +198,7 @@ struct tpresponse { const char *buf; /* points to beginning of buffer */ uint32_t code; /* response code (0 is success, or errno if not) */ uint32_t sync; /* synchronization id */ + uint32_t schema_id; /* schema id */ const char *error; /* error message (NULL if not present) */ const char *error_end; /* end of error message (NULL if not present) */ const char *data; /* tuple data (NULL if not present) */ @@ -1738,8 +1742,14 @@ tp_reply(struct tpresponse *r, const char * const buf, size_t size) return -1; r->code = mp_decode_uint(&p); break; + case TP_SCHEMA_ID: + if (mp_typeof(*p) != MP_UINT) + return -1; + r->schema_id = mp_decode_uint(&p); + break; default: - return -1; + mp_next(&p); + break; } r->bitmap |= (1ULL << key); }