From d3259d7e724354531943a62766fbf500d23a125e Mon Sep 17 00:00:00 2001
From: Roman Tsisyk <roman@tsisyk.com>
Date: Mon, 19 May 2014 16:34:47 +0400
Subject: [PATCH] Fix #273: IPROTO_ITERATOR ignored in network protocol

---
 src/iproto_constants.h     |  4 ++--
 test/box/protocol.result   | 47 ++++++++++++++++++++++++++++++++++++++
 test/box/protocol.test.lua | 18 +++++++++++++++
 3 files changed, 67 insertions(+), 2 deletions(-)
 create mode 100644 test/box/protocol.result
 create mode 100644 test/box/protocol.test.lua

diff --git a/src/iproto_constants.h b/src/iproto_constants.h
index 07b0180ac7..e6f6241e2e 100644
--- a/src/iproto_constants.h
+++ b/src/iproto_constants.h
@@ -78,8 +78,8 @@ enum iproto_key {
 
 #define IPROTO_HEAD_BMAP (bit(CODE) | bit(SYNC) | bit(NODE_ID) | bit(LSN))
 #define IPROTO_BODY_BMAP (bit(SPACE_ID) | bit(INDEX_ID) | bit(LIMIT) |\
-			  bit(OFFSET) | bit(KEY) | bit(TUPLE) | \
-			  bit(FUNCTION_NAME) | bit(USER_NAME))
+			  bit(OFFSET) | bit(ITERATOR) | bit(KEY) | \
+			  bit(TUPLE) | bit(FUNCTION_NAME) | bit(USER_NAME))
 static inline bool
 iproto_header_has_key(const char *pos, const char *end)
 {
diff --git a/test/box/protocol.result b/test/box/protocol.result
new file mode 100644
index 0000000000..2a2f36c19a
--- /dev/null
+++ b/test/box/protocol.result
@@ -0,0 +1,47 @@
+box.schema.user.grant('guest', 'read,write,execute', 'universe')
+---
+...
+--------------------------------------------------------------------------------
+-- Test case for #273: IPROTO_ITERATOR ignored in network protocol
+--------------------------------------------------------------------------------
+space = box.schema.create_space('tweedledum')
+---
+...
+space:create_index('primary', { type = 'tree'})
+---
+...
+for i=1,5 do space:insert{i} end
+---
+...
+conn = box.net.box.new('127.0.0.1', tonumber(box.cfg.primary_port))
+---
+...
+conn:select(space.n, 3, { iterator = 'GE' })
+---
+- - [3]
+  - [4]
+  - [5]
+...
+conn:select(space.n, 3, { iterator = 'LE' })
+---
+- - [3]
+  - [2]
+  - [1]
+...
+conn:select(space.n, 3, { iterator = 'GT' })
+---
+- - [4]
+  - [5]
+...
+conn:select(space.n, 3, { iterator = 'LT' })
+---
+- - [2]
+  - [1]
+...
+conn:close()
+---
+- true
+...
+space:drop()
+---
+...
diff --git a/test/box/protocol.test.lua b/test/box/protocol.test.lua
new file mode 100644
index 0000000000..ccddac4f7c
--- /dev/null
+++ b/test/box/protocol.test.lua
@@ -0,0 +1,18 @@
+box.schema.user.grant('guest', 'read,write,execute', 'universe')
+
+--------------------------------------------------------------------------------
+-- Test case for #273: IPROTO_ITERATOR ignored in network protocol
+--------------------------------------------------------------------------------
+
+space = box.schema.create_space('tweedledum')
+space:create_index('primary', { type = 'tree'})
+for i=1,5 do space:insert{i} end
+
+conn = box.net.box.new('127.0.0.1', tonumber(box.cfg.primary_port))
+conn:select(space.n, 3, { iterator = 'GE' })
+conn:select(space.n, 3, { iterator = 'LE' })
+conn:select(space.n, 3, { iterator = 'GT' })
+conn:select(space.n, 3, { iterator = 'LT' })
+conn:close()
+
+space:drop()
-- 
GitLab