summaryrefslogtreecommitdiff
path: root/src/third_party/wiredtiger/test/suite/test_index02.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/third_party/wiredtiger/test/suite/test_index02.py')
-rw-r--r--src/third_party/wiredtiger/test/suite/test_index02.py71
1 files changed, 60 insertions, 11 deletions
diff --git a/src/third_party/wiredtiger/test/suite/test_index02.py b/src/third_party/wiredtiger/test/suite/test_index02.py
index 9f39df003b1..4f424e5d3d2 100644
--- a/src/third_party/wiredtiger/test/suite/test_index02.py
+++ b/src/third_party/wiredtiger/test/suite/test_index02.py
@@ -27,20 +27,26 @@
# OTHER DEALINGS IN THE SOFTWARE.
import wiredtiger, wttest
+from wtscenario import make_scenarios
# test_index02.py
# test search_near in indices
class test_index02(wttest.WiredTigerTestCase):
'''Test search_near in indices'''
+ scenarios = make_scenarios([
+ ('index', dict(indexconfig='columns=(v)', ncol=1)),
+ ('index-with-key', dict(indexconfig='columns=(v,k)', ncol=2)),
+ ])
+
basename = 'test_index02'
tablename = 'table:' + basename
indexname = 'index:' + basename + ":inverse"
- def test_search_near(self):
- '''Create a table, look for a nonexistent key'''
+ def test_search_near_exists(self):
+ '''Create a table, look for an existing key'''
self.session.create(self.tablename, 'key_format=r,value_format=Q,columns=(k,v)')
- self.session.create(self.indexname, 'columns=(v)')
+ self.session.create(self.indexname, self.indexconfig)
cur = self.session.open_cursor(self.tablename, None, "append")
cur.set_value(1)
cur.insert()
@@ -52,17 +58,60 @@ class test_index02(wttest.WiredTigerTestCase):
cur.insert()
cur.set_value(10)
cur.insert()
+ cur.close()
+
+ # Retry after reopening
+ for runs in xrange(2):
+ # search near should find a match
+ cur = self.session.open_cursor(self.indexname, None, None)
+ if self.ncol == 1:
+ cur.set_key(5)
+ else:
+ cur.set_key(5, 3)
+ self.assertEqual(cur.search_near(), 0)
+
+ # Retry after reopening
+ self.reopen_conn()
+
+ def test_search_near_between(self):
+ '''Create a table, look for a non-existing key'''
+ self.session.create(self.tablename, 'key_format=i,value_format=i,columns=(k,v)')
+ self.session.create(self.indexname, self.indexconfig)
+ cur = self.session.open_cursor(self.tablename)
+ for k in xrange(3):
+ cur[k] = 5 * k + 10
+ cur.close()
+
+ search_keys = [ 1, 11, 15, 19, 21 ]
# search near should find a match
- cur2 = self.session.open_cursor(self.indexname, None, None)
- cur2.set_key(5)
- self.assertEqual(cur2.search_near(), 0)
+ for runs in xrange(2):
+ cur = self.session.open_cursor(self.indexname, None, None)
+ for k in search_keys:
+ if self.ncol == 1:
+ cur.set_key(k)
+ else:
+ cur.set_key(k, 1) # [15,1] will completely match
+ exact = cur.search_near()
+ if self.ncol == 1:
+ found_key = cur.get_key()
+ else:
+ [ found_key, index ] = cur.get_key()
+ self.pr("search_near for " + str(k) + " found " + str(found_key) + " with exact " + str(exact))
+ self.assertEqual(exact, cmp(found_key, k), "for key " + str(k))
+ self.reopen_conn()
- # Retry after reopening
- self.reopen_conn()
- cur3 = self.session.open_cursor(self.indexname, None, None)
- cur3.set_key(5)
- self.assertEqual(cur3.search_near(), 0)
+ def test_search_near_empty(self):
+ '''Create an empty table, look for a key'''
+ self.session.create(self.tablename, 'key_format=i,value_format=i,columns=(k,v)')
+ self.session.create(self.indexname, self.indexconfig)
+
+ cur = self.session.open_cursor(self.indexname, None, None)
+ if self.ncol == 1:
+ cur.set_key(3)
+ else:
+ cur.set_key(3, 1)
+ self.assertEqual(cur.search_near(), wiredtiger.WT_NOTFOUND)
if __name__ == '__main__':
wttest.run()