summaryrefslogtreecommitdiff
path: root/test/suite
diff options
context:
space:
mode:
authorAlex Gorrod <alexander.gorrod@mongodb.com>2016-08-04 16:07:16 +1000
committerAlex Gorrod <alexander.gorrod@mongodb.com>2016-08-04 16:07:16 +1000
commita9e96961abc9dd20d464bdeb120d792166ee4cf9 (patch)
treeaa569dc7ba001747a4c10902dcad759ae0999ae0 /test/suite
parentd8fb874fc40989cb9675e56ca80b3b64e6fa2ee3 (diff)
parent034ecbf55bb22d05c137aa8ef62a070964bf2748 (diff)
downloadmongo-a9e96961abc9dd20d464bdeb120d792166ee4cf9.tar.gz
Merge branch 'develop' into mongodb-3.4
Diffstat (limited to 'test/suite')
-rw-r--r--test/suite/helper.py43
-rw-r--r--test/suite/run.py41
-rw-r--r--test/suite/test_async01.py4
-rw-r--r--test/suite/test_async02.py4
-rw-r--r--test/suite/test_backup02.py4
-rw-r--r--test/suite/test_backup03.py36
-rw-r--r--test/suite/test_backup04.py4
-rw-r--r--test/suite/test_backup05.py1
-rw-r--r--test/suite/test_base02.py4
-rw-r--r--test/suite/test_base05.py4
-rw-r--r--test/suite/test_bug003.py4
-rw-r--r--test/suite/test_bug006.py4
-rw-r--r--test/suite/test_bug008.py4
-rw-r--r--test/suite/test_bug009.py1
-rw-r--r--test/suite/test_bug011.py2
-rw-r--r--test/suite/test_bug016.py109
-rw-r--r--test/suite/test_bulk01.py4
-rw-r--r--test/suite/test_bulk02.py7
-rw-r--r--test/suite/test_checkpoint01.py14
-rw-r--r--test/suite/test_checkpoint02.py4
-rw-r--r--test/suite/test_colgap.py6
-rw-r--r--test/suite/test_collator.py1
-rw-r--r--test/suite/test_compact01.py4
-rw-r--r--test/suite/test_compact02.py7
-rw-r--r--test/suite/test_compress01.py4
-rw-r--r--test/suite/test_config03.py7
-rw-r--r--test/suite/test_cursor01.py4
-rw-r--r--test/suite/test_cursor02.py4
-rw-r--r--test/suite/test_cursor03.py4
-rw-r--r--test/suite/test_cursor04.py4
-rw-r--r--test/suite/test_cursor06.py4
-rw-r--r--test/suite/test_cursor07.py4
-rw-r--r--test/suite/test_cursor08.py12
-rw-r--r--test/suite/test_cursor09.py4
-rw-r--r--test/suite/test_cursor_compare.py4
-rw-r--r--test/suite/test_cursor_pin.py4
-rw-r--r--test/suite/test_cursor_random.py8
-rw-r--r--test/suite/test_cursor_random02.py4
-rw-r--r--test/suite/test_drop.py4
-rw-r--r--test/suite/test_dump.py11
-rw-r--r--test/suite/test_dupc.py4
-rw-r--r--test/suite/test_durability01.py1
-rw-r--r--test/suite/test_empty.py4
-rw-r--r--test/suite/test_encrypt01.py5
-rw-r--r--test/suite/test_encrypt02.py4
-rw-r--r--test/suite/test_encrypt03.py4
-rw-r--r--test/suite/test_encrypt04.py5
-rw-r--r--test/suite/test_encrypt05.py5
-rw-r--r--test/suite/test_encrypt06.py4
-rw-r--r--test/suite/test_encrypt07.py1
-rw-r--r--test/suite/test_excl.py4
-rw-r--r--test/suite/test_huffman01.py4
-rw-r--r--test/suite/test_huffman02.py4
-rw-r--r--test/suite/test_index02.py68
-rw-r--r--test/suite/test_inmem01.py88
-rw-r--r--test/suite/test_intpack.py35
-rw-r--r--test/suite/test_join01.py10
-rw-r--r--test/suite/test_join02.py4
-rw-r--r--test/suite/test_join03.py1
-rw-r--r--test/suite/test_join04.py1
-rw-r--r--test/suite/test_join05.py1
-rw-r--r--test/suite/test_join06.py4
-rw-r--r--test/suite/test_join07.py4
-rw-r--r--test/suite/test_join08.py1
-rw-r--r--test/suite/test_jsondump01.py50
-rw-r--r--test/suite/test_lsm01.py8
-rw-r--r--test/suite/test_metadata_cursor01.py4
-rw-r--r--test/suite/test_nsnap01.py1
-rw-r--r--test/suite/test_nsnap02.py1
-rw-r--r--test/suite/test_nsnap03.py1
-rw-r--r--test/suite/test_nsnap04.py1
-rw-r--r--test/suite/test_overwrite.py4
-rw-r--r--test/suite/test_perf001.py4
-rw-r--r--test/suite/test_readonly01.py5
-rw-r--r--test/suite/test_rebalance.py4
-rw-r--r--test/suite/test_reconfig01.py19
-rw-r--r--test/suite/test_reconfig02.py33
-rw-r--r--test/suite/test_rename.py4
-rw-r--r--test/suite/test_schema02.py4
-rw-r--r--test/suite/test_schema03.py15
-rw-r--r--test/suite/test_schema04.py4
-rw-r--r--test/suite/test_schema05.py4
-rw-r--r--test/suite/test_schema06.py5
-rw-r--r--test/suite/test_split.py1
-rw-r--r--test/suite/test_stat01.py4
-rw-r--r--test/suite/test_stat02.py35
-rw-r--r--test/suite/test_stat03.py4
-rw-r--r--test/suite/test_stat04.py10
-rw-r--r--test/suite/test_stat05.py13
-rw-r--r--test/suite/test_stat_log01.py16
-rw-r--r--test/suite/test_sweep01.py4
-rw-r--r--test/suite/test_sweep03.py4
-rw-r--r--test/suite/test_truncate01.py13
-rw-r--r--test/suite/test_truncate02.py5
-rw-r--r--test/suite/test_txn01.py4
-rw-r--r--test/suite/test_txn02.py12
-rw-r--r--test/suite/test_txn03.py4
-rw-r--r--test/suite/test_txn04.py4
-rw-r--r--test/suite/test_txn05.py5
-rw-r--r--test/suite/test_txn06.py1
-rw-r--r--test/suite/test_txn07.py5
-rw-r--r--test/suite/test_txn08.py1
-rw-r--r--test/suite/test_txn09.py9
-rw-r--r--test/suite/test_txn10.py1
-rw-r--r--test/suite/test_txn12.py1
-rw-r--r--test/suite/test_txn13.py4
-rw-r--r--test/suite/test_txn14.py4
-rw-r--r--test/suite/test_txn15.py4
-rw-r--r--test/suite/test_upgrade.py4
-rw-r--r--test/suite/test_util02.py4
-rw-r--r--test/suite/test_util03.py4
-rw-r--r--test/suite/test_util13.py4
-rw-r--r--test/suite/wtscenario.py36
-rw-r--r--test/suite/wttest.py6
114 files changed, 658 insertions, 407 deletions
diff --git a/test/suite/helper.py b/test/suite/helper.py
index f85d708880f..9f34b566b3c 100644
--- a/test/suite/helper.py
+++ b/test/suite/helper.py
@@ -179,6 +179,49 @@ def simple_populate_check(self, uri, rows):
simple_populate_check_cursor(self, cursor, rows)
cursor.close()
+# population of a simple object, with a single index
+# uri: object
+# config: prefix of the session.create configuration string (defaults
+# to string value formats)
+# rows: entries to insert
+def simple_index_populate(self, uri, config, rows):
+ self.pr('simple_index_populate: ' + uri + ' with ' + str(rows) + ' rows')
+ self.session.create(uri, 'value_format=S,columns=(key0,value0),' + config)
+ indxname = 'index:' + uri.split(":")[1]
+ self.session.create(indxname + ':index1', 'columns=(value0,key0)')
+ cursor = self.session.open_cursor(uri, None)
+ for i in range(1, rows + 1):
+ cursor[key_populate(cursor, i)] = value_populate(cursor, i)
+ cursor.close()
+
+def simple_index_populate_check_cursor(self, cursor, rows):
+ i = 0
+ for key,val in cursor:
+ i += 1
+ self.assertEqual(key, key_populate(cursor, i))
+ if cursor.value_format == '8t' and val == 0: # deleted
+ continue
+ self.assertEqual(val, value_populate(cursor, i))
+ self.assertEqual(i, rows)
+
+def simple_index_populate_check(self, uri, rows):
+ self.pr('simple_index_populate_check: ' + uri)
+
+ # Check values in the main table.
+ cursor = self.session.open_cursor(uri, None)
+ simple_index_populate_check_cursor(self, cursor, rows)
+
+ # Check values in the index.
+ indxname = 'index:' + uri.split(":")[1]
+ idxcursor = self.session.open_cursor(indxname + ':index1')
+ for i in range(1, rows + 1):
+ k = key_populate(cursor, i)
+ v = value_populate(cursor, i)
+ ik = (v,k) # The index key is columns=(v,k).
+ self.assertEqual(v, idxcursor[ik])
+ idxcursor.close()
+ cursor.close()
+
# Return the value stored in a complex object.
def complex_value_populate(cursor, i):
return [str(i) + ': abcdefghijklmnopqrstuvwxyz'[0:i%26],
diff --git a/test/suite/run.py b/test/suite/run.py
index 6e7421b8b96..c37093a2a55 100644
--- a/test/suite/run.py
+++ b/test/suite/run.py
@@ -87,6 +87,7 @@ Options:\n\
-j N | --parallel N run all tests in parallel using N processes\n\
-l | --long run the entire test suite\n\
-p | --preserve preserve output files in WT_TEST/<testname>\n\
+ -s N | --scenario N use scenario N (N can be number or symbolic)\n\
-t | --timestamp name WT_TEST according to timestamp\n\
-v N | --verbose N set verboseness to N (0<=N<=3, default=1)\n\
\n\
@@ -95,15 +96,27 @@ Tests:\n\
may be a subsuite name (e.g. \'base\' runs test_base*.py)\n\
\n\
When -C or -c are present, there may not be any tests named.\n\
+ When -s is present, there must be a test named.\n\
'
# capture the category (AKA 'subsuite') part of a test name,
# e.g. test_util03 -> util
reCatname = re.compile(r"test_([^0-9]+)[0-9]*")
-def addScenarioTests(tests, loader, testname):
+def restrictScenario(testcases, restrict):
+ if restrict == '':
+ return testcases
+ elif restrict.isdigit():
+ s = int(restrict)
+ return [t for t in testcases
+ if hasattr(t, 'scenario_number') and t.scenario_number == s]
+ else:
+ return [t for t in testcases
+ if hasattr(t, 'scenario_name') and t.scenario_name == restrict]
+
+def addScenarioTests(tests, loader, testname, scenario):
loaded = loader.loadTestsFromName(testname)
- tests.addTests(generate_scenarios(loaded))
+ tests.addTests(restrictScenario(generate_scenarios(loaded), scenario))
def configRecord(cmap, tup):
"""
@@ -195,20 +208,20 @@ def configApply(suites, configfilename, configwrite):
json.dump(configmap, f, sort_keys=True, indent=4)
return newsuite
-def testsFromArg(tests, loader, arg):
+def testsFromArg(tests, loader, arg, scenario):
# If a group of test is mentioned, do all tests in that group
# e.g. 'run.py base'
groupedfiles = glob.glob(suitedir + os.sep + 'test_' + arg + '*.py')
if len(groupedfiles) > 0:
for file in groupedfiles:
- testsFromArg(tests, loader, os.path.basename(file))
+ testsFromArg(tests, loader, os.path.basename(file), scenario)
return
# Explicit test class names
if not arg[0].isdigit():
if arg.endswith('.py'):
arg = arg[:-3]
- addScenarioTests(tests, loader, arg)
+ addScenarioTests(tests, loader, arg, scenario)
return
# Deal with ranges
@@ -217,7 +230,7 @@ def testsFromArg(tests, loader, arg):
else:
start, end = int(arg), int(arg)
for t in xrange(start, end+1):
- addScenarioTests(tests, loader, 'test%03d' % t)
+ addScenarioTests(tests, loader, 'test%03d' % t, scenario)
if __name__ == '__main__':
tests = unittest.TestSuite()
@@ -228,6 +241,7 @@ if __name__ == '__main__':
configfile = None
configwrite = False
dirarg = None
+ scenario = ''
verbose = 1
args = sys.argv[1:]
testargs = []
@@ -265,6 +279,12 @@ if __name__ == '__main__':
if option == '-preserve' or option == 'p':
preserve = True
continue
+ if option == '-scenario' or option == 's':
+ if scenario != '' or len(args) == 0:
+ usage()
+ sys.exit(2)
+ scenario = args.pop(0)
+ continue
if option == '-timestamp' or option == 't':
timestamp = True
continue
@@ -303,15 +323,20 @@ if __name__ == '__main__':
# Without any tests listed as arguments, do discovery
if len(testargs) == 0:
+ if scenario != '':
+ sys.stderr.write(
+ 'run.py: specifying a scenario requires a test name\n')
+ usage()
+ sys.exit(2)
from discover import defaultTestLoader as loader
suites = loader.discover(suitedir)
suites = sorted(suites, key=lambda c: str(list(c)[0]))
if configfile != None:
suites = configApply(suites, configfile, configwrite)
- tests.addTests(generate_scenarios(suites))
+ tests.addTests(restrictScenario(generate_scenarios(suites), ''))
else:
for arg in testargs:
- testsFromArg(tests, loader, arg)
+ testsFromArg(tests, loader, arg, scenario)
if debug:
import pdb
diff --git a/test/suite/test_async01.py b/test/suite/test_async01.py
index 71a18a68121..9322748c30f 100644
--- a/test/suite/test_async01.py
+++ b/test/suite/test_async01.py
@@ -29,7 +29,7 @@
import sys, threading, wiredtiger, wttest
from suite_subprocess import suite_subprocess
from wiredtiger import WiredTigerError
-from wtscenario import check_scenarios
+from wtscenario import make_scenarios
# TODO - tmp code
def tty_pr(s):
@@ -122,7 +122,7 @@ class test_async01(wttest.WiredTigerTestCase, suite_subprocess):
async_threads = 3
current = {}
- scenarios = check_scenarios([
+ scenarios = make_scenarios([
('file-col', dict(tablekind='col',uri='file')),
('file-fix', dict(tablekind='fix',uri='file')),
('file-row', dict(tablekind='row',uri='file')),
diff --git a/test/suite/test_async02.py b/test/suite/test_async02.py
index 7aa1b85a2f3..bc6b389fc27 100644
--- a/test/suite/test_async02.py
+++ b/test/suite/test_async02.py
@@ -29,7 +29,7 @@
import sys, threading, wiredtiger, wttest
from suite_subprocess import suite_subprocess
from wiredtiger import WiredTigerError
-from wtscenario import check_scenarios
+from wtscenario import make_scenarios
class Callback(wiredtiger.AsyncCallback):
def __init__(self, current):
@@ -119,7 +119,7 @@ class test_async02(wttest.WiredTigerTestCase, suite_subprocess):
async_threads = 3
current = {}
- scenarios = check_scenarios([
+ scenarios = make_scenarios([
('file-col', dict(tablekind='col',uri='file')),
('file-fix', dict(tablekind='fix',uri='file')),
('file-row', dict(tablekind='row',uri='file')),
diff --git a/test/suite/test_backup02.py b/test/suite/test_backup02.py
index 095bfbe404a..398d55abd7a 100644
--- a/test/suite/test_backup02.py
+++ b/test/suite/test_backup02.py
@@ -30,13 +30,13 @@ import Queue
import threading, time, wiredtiger, wttest
from helper import key_populate, simple_populate
from wtthread import backup_thread, checkpoint_thread, op_thread
-from wtscenario import check_scenarios
+from wtscenario import make_scenarios
# test_backup02.py
# Run background checkpoints and backsups repeatedly while doing inserts
# in another thread
class test_backup02(wttest.WiredTigerTestCase):
- scenarios = check_scenarios([
+ scenarios = make_scenarios([
('table', dict(uri='table:test',fmt='L',dsize=100,nops=200,nthreads=1,time=30)),
])
diff --git a/test/suite/test_backup03.py b/test/suite/test_backup03.py
index e810a2ec714..053009c6edb 100644
--- a/test/suite/test_backup03.py
+++ b/test/suite/test_backup03.py
@@ -28,7 +28,7 @@
import glob, os, shutil, string
from suite_subprocess import suite_subprocess
-from wtscenario import multiply_scenarios, number_scenarios
+from wtscenario import make_scenarios
import wiredtiger, wttest
from helper import compare_files,\
complex_populate, complex_populate_lsm, simple_populate
@@ -56,25 +56,25 @@ class test_backup_target(wttest.WiredTigerTestCase, suite_subprocess):
('table:' + pfx + '.4', complex_populate_lsm, 3),
]
list = [
- ( '1', dict(big=0,list=[0])), # Target objects individually
- ( '2', dict(big=1,list=[1])),
- ( '3', dict(big=2,list=[2])),
- ( '4', dict(big=3,list=[3])),
- ('5a', dict(big=0,list=[0,2])), # Target groups of objects
- ('5b', dict(big=2,list=[0,2])),
- ('6a', dict(big=1,list=[1,3])),
- ('6b', dict(big=3,list=[1,3])),
- ('7a', dict(big=0,list=[0,1,2])),
- ('7b', dict(big=1,list=[0,1,2])),
- ('7c', dict(big=2,list=[0,1,2])),
- ('8a', dict(big=0,list=[0,1,2,3])),
- ('8b', dict(big=1,list=[0,1,2,3])),
- ('8c', dict(big=2,list=[0,1,2,3])),
- ('8d', dict(big=3,list=[0,1,2,3])),
- ( '9', dict(big=3,list=[])), # Backup everything
+ ( 'backup_1', dict(big=0,list=[0])), # Target objects individually
+ ( 'backup_2', dict(big=1,list=[1])),
+ ( 'backup_3', dict(big=2,list=[2])),
+ ( 'backup_4', dict(big=3,list=[3])),
+ ('backup_5a', dict(big=0,list=[0,2])), # Target groups of objects
+ ('backup_5b', dict(big=2,list=[0,2])),
+ ('backup_6a', dict(big=1,list=[1,3])),
+ ('backup_6b', dict(big=3,list=[1,3])),
+ ('backup_7a', dict(big=0,list=[0,1,2])),
+ ('backup_7b', dict(big=1,list=[0,1,2])),
+ ('backup_7c', dict(big=2,list=[0,1,2])),
+ ('backup_8a', dict(big=0,list=[0,1,2,3])),
+ ('backup_8b', dict(big=1,list=[0,1,2,3])),
+ ('backup_8c', dict(big=2,list=[0,1,2,3])),
+ ('backup_8d', dict(big=3,list=[0,1,2,3])),
+ ('backup_9', dict(big=3,list=[])), # Backup everything
]
- scenarios = number_scenarios(multiply_scenarios('.', list))
+ scenarios = make_scenarios(list)
# Create a large cache, otherwise this test runs quite slowly.
conn_config = 'cache_size=1G'
diff --git a/test/suite/test_backup04.py b/test/suite/test_backup04.py
index 852a22c1e0c..866e673dccb 100644
--- a/test/suite/test_backup04.py
+++ b/test/suite/test_backup04.py
@@ -30,7 +30,7 @@ import Queue
import threading, time, wiredtiger, wttest
import glob, os, shutil
from suite_subprocess import suite_subprocess
-from wtscenario import check_scenarios
+from wtscenario import make_scenarios
from wtthread import op_thread
from helper import compare_files, key_populate
@@ -54,7 +54,7 @@ class test_backup_target(wttest.WiredTigerTestCase, suite_subprocess):
# and that is not what we want here.
#
pfx = 'test_backup'
- scenarios = check_scenarios([
+ scenarios = make_scenarios([
('table', dict(uri='table:test',dsize=100,nops=2000,nthreads=1,time=30)),
])
diff --git a/test/suite/test_backup05.py b/test/suite/test_backup05.py
index fbe219d8de8..131732e9a89 100644
--- a/test/suite/test_backup05.py
+++ b/test/suite/test_backup05.py
@@ -35,7 +35,6 @@
import fnmatch, os, shutil, time
from suite_subprocess import suite_subprocess
-from wtscenario import multiply_scenarios, number_scenarios, prune_scenarios
from helper import copy_wiredtiger_home
import wiredtiger, wttest
diff --git a/test/suite/test_base02.py b/test/suite/test_base02.py
index 70117573241..2b51fe1b530 100644
--- a/test/suite/test_base02.py
+++ b/test/suite/test_base02.py
@@ -32,14 +32,14 @@
import json
import wiredtiger, wttest
-from wtscenario import check_scenarios
+from wtscenario import make_scenarios
# Test configuration strings.
class test_base02(wttest.WiredTigerTestCase):
name = 'test_base02a'
extra_config = ''
- scenarios = check_scenarios([
+ scenarios = make_scenarios([
('file', dict(uri='file:')),
('table', dict(uri='table:')),
('lsm', dict(uri='lsm:')),
diff --git a/test/suite/test_base05.py b/test/suite/test_base05.py
index f191f23561f..4bee0efcfe2 100644
--- a/test/suite/test_base05.py
+++ b/test/suite/test_base05.py
@@ -27,7 +27,7 @@
# OTHER DEALINGS IN THE SOFTWARE.
import wiredtiger, wttest
-from wtscenario import check_scenarios
+from wtscenario import make_scenarios
# test_base05.py
# Cursor operations
@@ -40,7 +40,7 @@ class test_base05(wttest.WiredTigerTestCase):
table_name1 = 'test_base05a'
table_name2 = 'test_base05b'
nentries = 1000
- scenarios = check_scenarios([
+ scenarios = make_scenarios([
('no_huffman', dict(extraconfig='')),
('huffman_key', dict(extraconfig='huffman_key="english"')),
('huffman_val', dict(extraconfig='huffman_value="english"')),
diff --git a/test/suite/test_bug003.py b/test/suite/test_bug003.py
index 739279a0141..28d71a534e2 100644
--- a/test/suite/test_bug003.py
+++ b/test/suite/test_bug003.py
@@ -30,7 +30,7 @@
# Regression tests.
import wiredtiger, wttest
-from wtscenario import multiply_scenarios, number_scenarios
+from wtscenario import make_scenarios
# Regression tests.
class test_bug003(wttest.WiredTigerTestCase):
@@ -43,7 +43,7 @@ class test_bug003(wttest.WiredTigerTestCase):
('yes', dict(name=1)),
]
- scenarios = number_scenarios(multiply_scenarios('.', types, ckpt))
+ scenarios = make_scenarios(types, ckpt)
# Confirm bulk-load isn't stopped by checkpoints.
def test_bug003(self):
diff --git a/test/suite/test_bug006.py b/test/suite/test_bug006.py
index e522cdf96f7..314ba57038f 100644
--- a/test/suite/test_bug006.py
+++ b/test/suite/test_bug006.py
@@ -31,13 +31,13 @@
import wiredtiger, wttest
from helper import key_populate, value_populate
-from wtscenario import check_scenarios
+from wtscenario import make_scenarios
# Check that verify and salvage both raise exceptions if there is an open
# cursor.
class test_bug006(wttest.WiredTigerTestCase):
name = 'test_bug006'
- scenarios = check_scenarios([
+ scenarios = make_scenarios([
('file', dict(uri='file:')),
('table', dict(uri='table:')),
])
diff --git a/test/suite/test_bug008.py b/test/suite/test_bug008.py
index 0243887e258..c4fa411f55e 100644
--- a/test/suite/test_bug008.py
+++ b/test/suite/test_bug008.py
@@ -31,13 +31,13 @@
import wiredtiger, wttest
from helper import simple_populate, key_populate, value_populate
-from wtscenario import check_scenarios
+from wtscenario import make_scenarios
# Test search/search-near operations, including invisible values and keys
# past the end of the table.
class test_bug008(wttest.WiredTigerTestCase):
uri = 'file:test_bug008' # This is a btree layer test.
- scenarios = check_scenarios([
+ scenarios = make_scenarios([
('fix', dict(fmt='key_format=r,value_format=8t', empty=1, colvar=0)),
('row', dict(fmt='key_format=S', empty=0, colvar=0)),
('var', dict(fmt='key_format=r', empty=0, colvar=1))
diff --git a/test/suite/test_bug009.py b/test/suite/test_bug009.py
index 4d10e4391d9..2bdfb7dec52 100644
--- a/test/suite/test_bug009.py
+++ b/test/suite/test_bug009.py
@@ -33,7 +33,6 @@
import wiredtiger, wttest
from wiredtiger import stat
-from wtscenario import multiply_scenarios, number_scenarios
class test_bug009(wttest.WiredTigerTestCase):
name = 'test_bug009'
diff --git a/test/suite/test_bug011.py b/test/suite/test_bug011.py
index 50dba1c48be..fceb7a22ddb 100644
--- a/test/suite/test_bug011.py
+++ b/test/suite/test_bug011.py
@@ -42,7 +42,7 @@ class test_bug011(wttest.WiredTigerTestCase):
nops = 10000
# Add connection configuration for this test.
def conn_config(self, dir):
- return 'cache_size=10MB,hazard_max=' + str(self.ntables / 2)
+ return 'cache_size=10MB,eviction_dirty_target=99,eviction_dirty_trigger=99,hazard_max=' + str(self.ntables / 2)
def test_eviction(self):
cursors = []
diff --git a/test/suite/test_bug016.py b/test/suite/test_bug016.py
new file mode 100644
index 00000000000..f7cb3c32559
--- /dev/null
+++ b/test/suite/test_bug016.py
@@ -0,0 +1,109 @@
+#!/usr/bin/env python
+#
+# Public Domain 2014-2016 MongoDB, Inc.
+# Public Domain 2008-2014 WiredTiger, Inc.
+#
+# This is free and unencumbered software released into the public domain.
+#
+# Anyone is free to copy, modify, publish, use, compile, sell, or
+# distribute this software, either in source code form or as a compiled
+# binary, for any purpose, commercial or non-commercial, and by any
+# means.
+#
+# In jurisdictions that recognize copyright laws, the author or authors
+# of this software dedicate any and all copyright interest in the
+# software to the public domain. We make this dedication for the benefit
+# of the public at large and to the detriment of our heirs and
+# successors. We intend this dedication to be an overt act of
+# relinquishment in perpetuity of all present and future rights to this
+# software under copyright law.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+# IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+# OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+# ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+# OTHER DEALINGS IN THE SOFTWARE.
+
+import wiredtiger, wttest
+
+# test_bug016.py
+# WT-2757: WT_CURSOR.get_key() fails after WT_CURSOR.insert unless the
+# cursor has a record number key with append configured.
+class test_bug016(wttest.WiredTigerTestCase):
+
+ # Insert a row into a simple column-store table configured to append.
+ # WT_CURSOR.get_key should succeed.
+ def test_simple_column_store_append(self):
+ uri='file:bug016'
+ self.session.create(uri, 'key_format=r,value_format=S')
+ cursor = self.session.open_cursor(uri, None, 'append')
+ cursor.set_value('value')
+ cursor.insert()
+ self.assertEquals(cursor.get_key(), 1)
+
+ # Insert a row into a simple column-store table.
+ # WT_CURSOR.get_key should fail.
+ def test_simple_column_store(self):
+ uri='file:bug016'
+ self.session.create(uri, 'key_format=r,value_format=S')
+ cursor = self.session.open_cursor(uri, None)
+ cursor.set_key(37)
+ cursor.set_value('value')
+ cursor.insert()
+ self.assertRaisesWithMessage(wiredtiger.WiredTigerError,
+ lambda: cursor.get_key(), "/requires key be set/")
+
+ # Insert a row into a simple row-store table.
+ # WT_CURSOR.get_key should fail.
+ def test_simple_row_store(self):
+ uri='file:bug016'
+ self.session.create(uri, 'key_format=S,value_format=S')
+ cursor = self.session.open_cursor(uri, None)
+ cursor.set_key('key')
+ cursor.set_value('value')
+ cursor.insert()
+ self.assertRaisesWithMessage(wiredtiger.WiredTigerError,
+ lambda: cursor.get_key(), "/requires key be set/")
+
+ # Insert a row into a complex column-store table configured to append.
+ # WT_CURSOR.get_key should succeed.
+ def test_complex_column_store_append(self):
+ uri='table:bug016'
+ self.session.create(
+ uri, 'key_format=r,value_format=S,columns=(key,value)')
+ cursor = self.session.open_cursor(uri, None, 'append')
+ cursor.set_value('value')
+ cursor.insert()
+ self.assertEquals(cursor.get_key(), 1)
+
+ # Insert a row into a complex column-store table.
+ # WT_CURSOR.get_key should fail.
+ def test_complex_column_store(self):
+ uri='table:bug016'
+ self.session.create(
+ uri, 'key_format=r,value_format=S,columns=(key,value)')
+ cursor = self.session.open_cursor(uri, None)
+ cursor.set_key(37)
+ cursor.set_value('value')
+ cursor.insert()
+ self.assertRaisesWithMessage(wiredtiger.WiredTigerError,
+ lambda: cursor.get_key(), "/requires key be set/")
+
+ # Insert a row into a complex row-store table.
+ # WT_CURSOR.get_key should fail.
+ def test_complex_row_store(self):
+ uri='table:bug016'
+ self.session.create(
+ uri, 'key_format=S,value_format=S,columns=(key,value)')
+ cursor = self.session.open_cursor(uri, None)
+ cursor.set_key('key')
+ cursor.set_value('value')
+ cursor.insert()
+ self.assertRaisesWithMessage(wiredtiger.WiredTigerError,
+ lambda: cursor.get_key(), "/requires key be set/")
+
+
+if __name__ == '__main__':
+ wttest.run()
diff --git a/test/suite/test_bulk01.py b/test/suite/test_bulk01.py
index 1add11af26b..5bacfafaa20 100644
--- a/test/suite/test_bulk01.py
+++ b/test/suite/test_bulk01.py
@@ -32,7 +32,7 @@
import wiredtiger, wttest
from helper import key_populate, value_populate
-from wtscenario import check_scenarios, multiply_scenarios, number_scenarios
+from wtscenario import make_scenarios
# Smoke test bulk-load.
class test_bulk_load(wttest.WiredTigerTestCase):
@@ -52,7 +52,7 @@ class test_bulk_load(wttest.WiredTigerTestCase):
('integer', dict(valfmt='i')),
('string', dict(valfmt='S')),
]
- scenarios = number_scenarios(multiply_scenarios('.', types, keyfmt, valfmt))
+ scenarios = make_scenarios(types, keyfmt, valfmt)
# Test a simple bulk-load
def test_bulk_load(self):
diff --git a/test/suite/test_bulk02.py b/test/suite/test_bulk02.py
index fe8118209f2..af0b6d4485d 100644
--- a/test/suite/test_bulk02.py
+++ b/test/suite/test_bulk02.py
@@ -32,7 +32,7 @@
import shutil, os
from helper import confirm_empty, key_populate, value_populate
from suite_subprocess import suite_subprocess
-from wtscenario import multiply_scenarios, number_scenarios
+from wtscenario import make_scenarios
import wiredtiger, wttest
# test_bulkload_checkpoint
@@ -47,7 +47,7 @@ class test_bulkload_checkpoint(wttest.WiredTigerTestCase, suite_subprocess):
('unnamed', dict(ckpt_type='unnamed')),
]
- scenarios = number_scenarios(multiply_scenarios('.', types, ckpt_type))
+ scenarios = make_scenarios(types, ckpt_type)
# Bulk-load handles are skipped by checkpoints.
# Named and unnamed checkpoint versions.
@@ -90,8 +90,7 @@ class test_bulkload_backup(wttest.WiredTigerTestCase, suite_subprocess):
('different', dict(session_type='different')),
('same', dict(session_type='same')),
]
- scenarios = number_scenarios(
- multiply_scenarios('.', types, ckpt_type, session_type))
+ scenarios = make_scenarios(types, ckpt_type, session_type)
# Backup a set of chosen tables/files using the wt backup command.
# The only files are bulk-load files, so they shouldn't be copied.
diff --git a/test/suite/test_checkpoint01.py b/test/suite/test_checkpoint01.py
index 6e1ad7814ed..78754dc82fa 100644
--- a/test/suite/test_checkpoint01.py
+++ b/test/suite/test_checkpoint01.py
@@ -28,7 +28,7 @@
import wiredtiger, wttest
from helper import key_populate, complex_populate_lsm, simple_populate
-from wtscenario import check_scenarios
+from wtscenario import make_scenarios
# test_checkpoint01.py
# Checkpoint tests
@@ -36,7 +36,7 @@ from wtscenario import check_scenarios
# with a set of checkpoints, then confirm the checkpoint's values are correct,
# including after other checkpoints are dropped.
class test_checkpoint(wttest.WiredTigerTestCase):
- scenarios = check_scenarios([
+ scenarios = make_scenarios([
('file', dict(uri='file:checkpoint',fmt='S')),
('table', dict(uri='table:checkpoint',fmt='S'))
])
@@ -139,7 +139,7 @@ class test_checkpoint(wttest.WiredTigerTestCase):
# Check some specific cursor checkpoint combinations.
class test_checkpoint_cursor(wttest.WiredTigerTestCase):
- scenarios = check_scenarios([
+ scenarios = make_scenarios([
('file', dict(uri='file:checkpoint',fmt='S')),
('table', dict(uri='table:checkpoint',fmt='S'))
])
@@ -205,7 +205,7 @@ class test_checkpoint_cursor(wttest.WiredTigerTestCase):
# Check that you can checkpoint targets.
class test_checkpoint_target(wttest.WiredTigerTestCase):
- scenarios = check_scenarios([
+ scenarios = make_scenarios([
('file', dict(uri='file:checkpoint',fmt='S')),
('table', dict(uri='table:checkpoint',fmt='S'))
])
@@ -252,7 +252,7 @@ class test_checkpoint_target(wttest.WiredTigerTestCase):
# Check that you can't write checkpoint cursors.
class test_checkpoint_cursor_update(wttest.WiredTigerTestCase):
- scenarios = check_scenarios([
+ scenarios = make_scenarios([
('file-r', dict(uri='file:checkpoint',fmt='r')),
('file-S', dict(uri='file:checkpoint',fmt='S')),
('table-r', dict(uri='table:checkpoint',fmt='r')),
@@ -277,7 +277,7 @@ class test_checkpoint_cursor_update(wttest.WiredTigerTestCase):
# Check that WiredTigerCheckpoint works as a checkpoint specifier.
class test_checkpoint_last(wttest.WiredTigerTestCase):
- scenarios = check_scenarios([
+ scenarios = make_scenarios([
('file', dict(uri='file:checkpoint',fmt='S')),
('table', dict(uri='table:checkpoint',fmt='S'))
])
@@ -343,7 +343,7 @@ class test_checkpoint_lsm_name(wttest.WiredTigerTestCase):
class test_checkpoint_empty(wttest.WiredTigerTestCase):
- scenarios = check_scenarios([
+ scenarios = make_scenarios([
('file', dict(uri='file:checkpoint')),
('table', dict(uri='table:checkpoint')),
])
diff --git a/test/suite/test_checkpoint02.py b/test/suite/test_checkpoint02.py
index 71c8792359c..ac57499a9e4 100644
--- a/test/suite/test_checkpoint02.py
+++ b/test/suite/test_checkpoint02.py
@@ -30,13 +30,13 @@ import Queue
import threading, time, wiredtiger, wttest
from helper import key_populate, simple_populate
from wtthread import checkpoint_thread, op_thread
-from wtscenario import check_scenarios
+from wtscenario import make_scenarios
# test_checkpoint02.py
# Run background checkpoints repeatedly while doing inserts and other
# operations in another thread
class test_checkpoint02(wttest.WiredTigerTestCase):
- scenarios = check_scenarios([
+ scenarios = make_scenarios([
('table-100', dict(uri='table:test',fmt='L',dsize=100,nops=50000,nthreads=10)),
('table-10', dict(uri='table:test',fmt='L',dsize=10,nops=50000,nthreads=30))
])
diff --git a/test/suite/test_colgap.py b/test/suite/test_colgap.py
index 46682c23167..5cc363dbd4a 100644
--- a/test/suite/test_colgap.py
+++ b/test/suite/test_colgap.py
@@ -28,7 +28,7 @@
import wiredtiger, wttest
from helper import simple_populate, key_populate, value_populate
-from wtscenario import check_scenarios, multiply_scenarios, number_scenarios
+from wtscenario import make_scenarios
# test_colgap.py
# Test variable-length column-store gap performance.
@@ -149,8 +149,8 @@ class test_colmax(wttest.WiredTigerTestCase):
('not-single', dict(single=0)),
]
- scenarios = number_scenarios(multiply_scenarios(\
- '.', types, valfmt, record_number, bulk, reopen, single))
+ scenarios = make_scenarios(\
+ types, valfmt, record_number, bulk, reopen, single)
# Test that variable-length column-store correctly/efficiently handles big
# records (if it's not efficient, we'll just hang).
diff --git a/test/suite/test_collator.py b/test/suite/test_collator.py
index 34b5c20247f..a8103fb3671 100644
--- a/test/suite/test_collator.py
+++ b/test/suite/test_collator.py
@@ -28,7 +28,6 @@
import os
import wiredtiger, wttest, run
-from wtscenario import check_scenarios, number_scenarios
# test_collator.py
# Test indices using a custom extractor and collator.
diff --git a/test/suite/test_compact01.py b/test/suite/test_compact01.py
index 3af550708ed..183d75f9d31 100644
--- a/test/suite/test_compact01.py
+++ b/test/suite/test_compact01.py
@@ -30,7 +30,7 @@ import wiredtiger, wttest
from helper import complex_populate, simple_populate, key_populate
from suite_subprocess import suite_subprocess
from wiredtiger import stat
-from wtscenario import multiply_scenarios, number_scenarios
+from wtscenario import make_scenarios
# test_compact.py
# session level compact operation
@@ -53,7 +53,7 @@ class test_compact(wttest.WiredTigerTestCase, suite_subprocess):
('method_reopen', dict(utility=0,reopen=1)),
('utility', dict(utility=1,reopen=0)),
]
- scenarios = number_scenarios(multiply_scenarios('.', types, compact))
+ scenarios = make_scenarios(types, compact)
# We want a large cache so that eviction doesn't happen
# (which could skew our compaction results).
conn_config = 'cache_size=250MB,statistics=(all)'
diff --git a/test/suite/test_compact02.py b/test/suite/test_compact02.py
index 7ad05cd2536..eb21817bd90 100644
--- a/test/suite/test_compact02.py
+++ b/test/suite/test_compact02.py
@@ -32,7 +32,7 @@
import wiredtiger, wttest
from wiredtiger import stat
-from wtscenario import multiply_scenarios, number_scenarios
+from wtscenario import make_scenarios
# Test basic compression
class test_compact02(wttest.WiredTigerTestCase):
@@ -57,8 +57,7 @@ class test_compact02(wttest.WiredTigerTestCase):
('64KB', dict(fileConfig='leaf_page_max=64KB')),
('128KB', dict(fileConfig='leaf_page_max=128KB')),
]
- scenarios = \
- number_scenarios(multiply_scenarios('.', types, cacheSize, fileConfig))
+ scenarios = make_scenarios(types, cacheSize, fileConfig)
# We want about 22K records that total about 130Mb. That is an average
# of 6196 bytes per record. Half the records should be smaller, about
@@ -97,7 +96,7 @@ class test_compact02(wttest.WiredTigerTestCase):
self.home = '.'
conn_params = 'create,' + \
cacheSize + ',error_prefix="%s: ",' % self.shortid() + \
- 'statistics=(fast)'
+ 'statistics=(fast),eviction_dirty_target=99,eviction_dirty_trigger=99'
try:
self.conn = wiredtiger.wiredtiger_open(self.home, conn_params)
except wiredtiger.WiredTigerError as e:
diff --git a/test/suite/test_compress01.py b/test/suite/test_compress01.py
index 94c748fc3e5..2a7e2a7e1a8 100644
--- a/test/suite/test_compress01.py
+++ b/test/suite/test_compress01.py
@@ -32,7 +32,7 @@
import os, run
import wiredtiger, wttest
-from wtscenario import multiply_scenarios, number_scenarios
+from wtscenario import make_scenarios
# Test basic compression
class test_compress01(wttest.WiredTigerTestCase):
@@ -46,7 +46,7 @@ class test_compress01(wttest.WiredTigerTestCase):
('snappy', dict(compress='snappy')),
('none', dict(compress=None)),
]
- scenarios = number_scenarios(multiply_scenarios('.', types, compress))
+ scenarios = make_scenarios(types, compress)
nrecords = 10000
bigvalue = "abcdefghij" * 1000
diff --git a/test/suite/test_config03.py b/test/suite/test_config03.py
index e91c5de62f8..88ca6ae3f39 100644
--- a/test/suite/test_config03.py
+++ b/test/suite/test_config03.py
@@ -69,14 +69,11 @@ class test_config03(test_base03.test_base03):
'eviction_trigger', 'hazard_max', 'multiprocess',
'session_max', 'verbose' ]
- all_scenarios = wtscenario.multiply_scenarios('_',
+ scenarios = wtscenario.make_scenarios(
cache_size_scenarios, create_scenarios, error_prefix_scenarios,
eviction_target_scenarios, eviction_trigger_scenarios,
hazard_max_scenarios, multiprocess_scenarios, session_max_scenarios,
- transactional_scenarios, verbose_scenarios)
-
- scenarios = wtscenario.prune_scenarios(all_scenarios, 1000)
- scenarios = wtscenario.number_scenarios(scenarios)
+ transactional_scenarios, verbose_scenarios, prune=1000)
#wttest.WiredTigerTestCase.printVerbose(2, 'test_config03: running ' + \
# str(len(scenarios)) + ' of ' + \
diff --git a/test/suite/test_cursor01.py b/test/suite/test_cursor01.py
index cf39d4a4ba4..8c66042eec0 100644
--- a/test/suite/test_cursor01.py
+++ b/test/suite/test_cursor01.py
@@ -27,7 +27,7 @@
# OTHER DEALINGS IN THE SOFTWARE.
import wiredtiger, wttest
-from wtscenario import check_scenarios
+from wtscenario import make_scenarios
# test_cursor01.py
# Cursor operations
@@ -41,7 +41,7 @@ class test_cursor01(wttest.WiredTigerTestCase):
table_name1 = 'test_cursor01'
nentries = 10
- scenarios = check_scenarios([
+ scenarios = make_scenarios([
('file-col', dict(tablekind='col',uri='file')),
('file-fix', dict(tablekind='fix',uri='file')),
('file-row', dict(tablekind='row',uri='file')),
diff --git a/test/suite/test_cursor02.py b/test/suite/test_cursor02.py
index eb1ba4dfc41..a83d30def47 100644
--- a/test/suite/test_cursor02.py
+++ b/test/suite/test_cursor02.py
@@ -28,7 +28,7 @@
import wiredtiger
from test_cursor_tracker import TestCursorTracker
-from wtscenario import check_scenarios
+from wtscenario import make_scenarios
# test_cursor02.py
# Cursor operations on small tables.
@@ -39,7 +39,7 @@ class test_cursor02(TestCursorTracker):
key/value content and to track/verify content
after inserts and removes.
"""
- scenarios = check_scenarios([
+ scenarios = make_scenarios([
('row', dict(tablekind='row', uri='table')),
('lsm-row', dict(tablekind='row', uri='lsm')),
('col', dict(tablekind='col', uri='table')),
diff --git a/test/suite/test_cursor03.py b/test/suite/test_cursor03.py
index 63237f942ca..b4598483c12 100644
--- a/test/suite/test_cursor03.py
+++ b/test/suite/test_cursor03.py
@@ -28,7 +28,7 @@
import wiredtiger
from test_cursor_tracker import TestCursorTracker
-from wtscenario import multiply_scenarios
+from wtscenario import make_scenarios
# test_cursor03.py
# Cursor operations on tables of various sizes, with key/values of various
@@ -40,7 +40,7 @@ class test_cursor03(TestCursorTracker):
key/value content and to track/verify content
after inserts and removes.
"""
- scenarios = multiply_scenarios('.', [
+ scenarios = make_scenarios([
('row', dict(tablekind='row', keysize=None, valsize=None, uri='table')),
('lsm-row', dict(tablekind='row', keysize=None, valsize=None, uri='lsm')),
('col', dict(tablekind='col', keysize=None, valsize=None, uri='table')),
diff --git a/test/suite/test_cursor04.py b/test/suite/test_cursor04.py
index 6576c623f8a..8cbf922b5eb 100644
--- a/test/suite/test_cursor04.py
+++ b/test/suite/test_cursor04.py
@@ -27,7 +27,7 @@
# OTHER DEALINGS IN THE SOFTWARE.
import wiredtiger, wttest
-from wtscenario import check_scenarios
+from wtscenario import make_scenarios
# test_base04.py
# Cursor operations
@@ -38,7 +38,7 @@ class test_cursor04(wttest.WiredTigerTestCase):
table_name1 = 'test_cursor04'
nentries = 20
- scenarios = check_scenarios([
+ scenarios = make_scenarios([
('row', dict(tablekind='row', uri='table')),
('lsm-row', dict(tablekind='row', uri='lsm')),
('col', dict(tablekind='col', uri='table')),
diff --git a/test/suite/test_cursor06.py b/test/suite/test_cursor06.py
index 5545c862dd7..3a6240bc6c7 100644
--- a/test/suite/test_cursor06.py
+++ b/test/suite/test_cursor06.py
@@ -29,13 +29,13 @@
import wiredtiger, wttest
from helper import key_populate, value_populate, simple_populate
from helper import complex_value_populate, complex_populate
-from wtscenario import check_scenarios
+from wtscenario import make_scenarios
# test_cursor06.py
# Test cursor reconfiguration.
class test_cursor06(wttest.WiredTigerTestCase):
name = 'reconfigure'
- scenarios = check_scenarios([
+ scenarios = make_scenarios([
('file-r', dict(type='file:', config='key_format=r', complex=0)),
('file-S', dict(type='file:', config='key_format=S', complex=0)),
('lsm-S', dict(type='lsm:', config='key_format=S', complex=0)),
diff --git a/test/suite/test_cursor07.py b/test/suite/test_cursor07.py
index d8de0874d7f..d6078183fc1 100644
--- a/test/suite/test_cursor07.py
+++ b/test/suite/test_cursor07.py
@@ -33,7 +33,7 @@
import fnmatch, os, shutil, run, time
from suite_subprocess import suite_subprocess
from wiredtiger import stat
-from wtscenario import check_scenarios
+from wtscenario import make_scenarios
import wttest
class test_cursor07(wttest.WiredTigerTestCase, suite_subprocess):
@@ -44,7 +44,7 @@ class test_cursor07(wttest.WiredTigerTestCase, suite_subprocess):
# test that scenario for log cursors.
nkeys = 7000
- scenarios = check_scenarios([
+ scenarios = make_scenarios([
('regular', dict(reopen=False)),
('reopen', dict(reopen=True))
])
diff --git a/test/suite/test_cursor08.py b/test/suite/test_cursor08.py
index 1a379518224..3f8f50defa7 100644
--- a/test/suite/test_cursor08.py
+++ b/test/suite/test_cursor08.py
@@ -33,7 +33,7 @@
import fnmatch, os, shutil, run, time
from suite_subprocess import suite_subprocess
from wiredtiger import stat, WiredTigerError
-from wtscenario import multiply_scenarios, number_scenarios, check_scenarios
+from wtscenario import make_scenarios
import wttest
class test_cursor08(wttest.WiredTigerTestCase, suite_subprocess):
@@ -42,17 +42,17 @@ class test_cursor08(wttest.WiredTigerTestCase, suite_subprocess):
uri = 'table:' + tablename
nkeys = 500
- reopens = check_scenarios([
+ reopens = [
('regular', dict(reopen=False)),
('reopen', dict(reopen=True))
- ])
- compress = check_scenarios([
+ ]
+ compress = [
('nop', dict(compress='nop')),
('snappy', dict(compress='snappy')),
('zlib', dict(compress='zlib')),
('none', dict(compress='none')),
- ])
- scenarios = number_scenarios(multiply_scenarios('.', reopens, compress))
+ ]
+ scenarios = make_scenarios(reopens, compress)
# Load the compression extension, and enable it for logging.
def conn_config(self, dir):
return 'log=(archive=false,enabled,file_max=%s,' % self.logmax + \
diff --git a/test/suite/test_cursor09.py b/test/suite/test_cursor09.py
index b77336bc1d7..a05caea4f1f 100644
--- a/test/suite/test_cursor09.py
+++ b/test/suite/test_cursor09.py
@@ -29,12 +29,12 @@
import wiredtiger, wttest
from helper import key_populate, value_populate, simple_populate
from helper import complex_populate, complex_value_populate
-from wtscenario import check_scenarios
+from wtscenario import make_scenarios
# test_cursor09.py
# JIRA WT-2217: insert resets key/value "set".
class test_cursor09(wttest.WiredTigerTestCase):
- scenarios = check_scenarios([
+ scenarios = make_scenarios([
('file-r', dict(type='file:', config='key_format=r', complex=0)),
('file-S', dict(type='file:', config='key_format=S', complex=0)),
('lsm-S', dict(type='lsm:', config='key_format=S', complex=0)),
diff --git a/test/suite/test_cursor_compare.py b/test/suite/test_cursor_compare.py
index 130f4e8ca96..179e20682d2 100644
--- a/test/suite/test_cursor_compare.py
+++ b/test/suite/test_cursor_compare.py
@@ -29,7 +29,7 @@
import wiredtiger, wttest, exceptions
from helper import complex_populate, simple_populate, key_populate
from helper import complex_populate_index_name
-from wtscenario import multiply_scenarios, number_scenarios
+from wtscenario import make_scenarios
# Test cursor comparisons.
class test_cursor_comparison(wttest.WiredTigerTestCase):
@@ -45,7 +45,7 @@ class test_cursor_comparison(wttest.WiredTigerTestCase):
('recno', dict(keyfmt='r')),
('string', dict(keyfmt='S'))
]
- scenarios = number_scenarios(multiply_scenarios('.', types, keyfmt))
+ scenarios = make_scenarios(types, keyfmt)
def test_cursor_comparison(self):
uri = self.type + 'compare'
diff --git a/test/suite/test_cursor_pin.py b/test/suite/test_cursor_pin.py
index 329759d8fc8..1aea49c32b0 100644
--- a/test/suite/test_cursor_pin.py
+++ b/test/suite/test_cursor_pin.py
@@ -28,7 +28,7 @@
import wiredtiger, wttest
from helper import simple_populate, key_populate, value_populate
-from wtscenario import check_scenarios
+from wtscenario import make_scenarios
# test_cursor_pin.py
# Smoke-test fast-path searching for pinned pages before re-descending
@@ -37,7 +37,7 @@ class test_cursor_pin(wttest.WiredTigerTestCase):
uri = 'file:cursor_pin'
nentries = 10000
config = 'allocation_size=512,leaf_page_max=512,value_format=S,key_format='
- scenarios = check_scenarios([
+ scenarios = make_scenarios([
('recno', dict(keyfmt='r')),
('string', dict(keyfmt='S')),
])
diff --git a/test/suite/test_cursor_random.py b/test/suite/test_cursor_random.py
index 16ce5cae685..8d7c230043b 100644
--- a/test/suite/test_cursor_random.py
+++ b/test/suite/test_cursor_random.py
@@ -29,7 +29,7 @@
import wiredtiger, wttest
from helper import complex_populate, simple_populate
from helper import key_populate, value_populate
-from wtscenario import check_scenarios, multiply_scenarios, number_scenarios
+from wtscenario import make_scenarios
# test_cursor_random.py
# Cursor next_random operations
@@ -42,7 +42,7 @@ class test_cursor_random(wttest.WiredTigerTestCase):
('sample', dict(config='next_random=true,next_random_sample_size=35')),
('not-sample', dict(config='next_random=true'))
]
- scenarios =number_scenarios(multiply_scenarios('.', types, config))
+ scenarios = make_scenarios(types, config)
# Check that opening a random cursor on a row-store returns not-supported
# for methods other than next, reconfigure and reset, and next returns
@@ -136,7 +136,7 @@ class test_cursor_random(wttest.WiredTigerTestCase):
# Check that opening a random cursor on column-store returns not-supported.
class test_cursor_random_column(wttest.WiredTigerTestCase):
- scenarios = check_scenarios([
+ scenarios = make_scenarios([
('file', dict(uri='file:random')),
('table', dict(uri='table:random'))
])
@@ -159,7 +159,7 @@ class test_cursor_random_invisible(wttest.WiredTigerTestCase):
('sample', dict(config='next_random=true,next_random_sample_size=35')),
('not-sample', dict(config='next_random=true'))
]
- scenarios =number_scenarios(multiply_scenarios('.', types, config))
+ scenarios = make_scenarios(types, config)
def test_cursor_random_invisible_all(self):
uri = self.type
diff --git a/test/suite/test_cursor_random02.py b/test/suite/test_cursor_random02.py
index 84ac0279fc4..93aa97f2282 100644
--- a/test/suite/test_cursor_random02.py
+++ b/test/suite/test_cursor_random02.py
@@ -29,7 +29,7 @@
import wiredtiger, wttest
from helper import complex_populate, simple_populate
from helper import key_populate, value_populate
-from wtscenario import check_scenarios, multiply_scenarios, number_scenarios
+from wtscenario import make_scenarios
# test_cursor_random02.py
# Cursor next_random operations
@@ -46,7 +46,7 @@ class test_cursor_random02(wttest.WiredTigerTestCase):
('10000', dict(records=10000)),
('50000', dict(records=50000)),
]
- scenarios = number_scenarios(multiply_scenarios('.', config, records))
+ scenarios = make_scenarios(config, records)
# Check that next_random works in the presence of a larger set of values,
# where the values are in an insert list.
diff --git a/test/suite/test_drop.py b/test/suite/test_drop.py
index 52ea7251ab5..a3e80214295 100644
--- a/test/suite/test_drop.py
+++ b/test/suite/test_drop.py
@@ -30,7 +30,7 @@ import os, time
import wiredtiger, wttest
from helper import confirm_does_not_exist, complex_populate, \
complex_populate_index_name, simple_populate
-from wtscenario import check_scenarios
+from wtscenario import make_scenarios
# test_drop.py
# session level drop operation
@@ -38,7 +38,7 @@ class test_drop(wttest.WiredTigerTestCase):
name = 'test_drop'
extra_config = ''
- scenarios = check_scenarios([
+ scenarios = make_scenarios([
('file', dict(uri='file:')),
('table', dict(uri='table:')),
('table-lsm', dict(uri='table:', extra_config=',type=lsm')),
diff --git a/test/suite/test_dump.py b/test/suite/test_dump.py
index 85196174c1b..280d5870359 100644
--- a/test/suite/test_dump.py
+++ b/test/suite/test_dump.py
@@ -30,9 +30,10 @@ import os, shutil
import wiredtiger, wttest
from helper import \
complex_populate, complex_populate_check, \
- simple_populate, simple_populate_check
+ simple_populate, simple_populate_check, \
+ simple_index_populate, simple_index_populate_check
from suite_subprocess import suite_subprocess
-from wtscenario import multiply_scenarios, number_scenarios
+from wtscenario import make_scenarios
# test_dump.py
# Utilities: wt dump
@@ -64,6 +65,9 @@ class test_dump(wttest.WiredTigerTestCase, suite_subprocess):
('table-simple', dict(uri='table:', config='', lsm=False,
populate=simple_populate,
populate_check=simple_populate_check)),
+ ('table-index', dict(uri='table:', config='', lsm=False,
+ populate=simple_index_populate,
+ populate_check=simple_index_populate_check)),
('table-simple-lsm', dict(uri='table:', config='type=lsm', lsm=True,
populate=simple_populate,
populate_check=simple_populate_check)),
@@ -74,8 +78,7 @@ class test_dump(wttest.WiredTigerTestCase, suite_subprocess):
populate=complex_populate,
populate_check=complex_populate_check))
]
- scenarios = number_scenarios(
- multiply_scenarios('.', types, keyfmt, dumpfmt))
+ scenarios = make_scenarios(types, keyfmt, dumpfmt)
# Extract the values lines from the dump output.
def value_lines(self, fname):
diff --git a/test/suite/test_dupc.py b/test/suite/test_dupc.py
index ec55a36df4c..12b18f1ba79 100644
--- a/test/suite/test_dupc.py
+++ b/test/suite/test_dupc.py
@@ -33,7 +33,7 @@
import os, time
import wiredtiger, wttest
from helper import complex_populate, key_populate, simple_populate
-from wtscenario import check_scenarios
+from wtscenario import make_scenarios
# Test session.open_cursor with cursor duplication.
class test_duplicate_cursor(wttest.WiredTigerTestCase):
@@ -42,7 +42,7 @@ class test_duplicate_cursor(wttest.WiredTigerTestCase):
config = 'key_format='
- scenarios = check_scenarios([
+ scenarios = make_scenarios([
('file-r', dict(uri='file:', fmt='r')),
('file-S', dict(uri='file:', fmt='S')),
('table-r', dict(uri='table:', fmt='r')),
diff --git a/test/suite/test_durability01.py b/test/suite/test_durability01.py
index f578a79baf1..32cdd795914 100644
--- a/test/suite/test_durability01.py
+++ b/test/suite/test_durability01.py
@@ -34,7 +34,6 @@
import fnmatch, os, shutil, time
from helper import copy_wiredtiger_home
from suite_subprocess import suite_subprocess
-from wtscenario import multiply_scenarios, number_scenarios, prune_scenarios
import wttest
class test_durability01(wttest.WiredTigerTestCase, suite_subprocess):
diff --git a/test/suite/test_empty.py b/test/suite/test_empty.py
index 50b79db70e4..9fe88107412 100644
--- a/test/suite/test_empty.py
+++ b/test/suite/test_empty.py
@@ -29,14 +29,14 @@
import os
import wiredtiger, wttest
from helper import key_populate
-from wtscenario import check_scenarios
+from wtscenario import make_scenarios
# test_empty.py
# Test that empty objects don't write anything other than a single sector.
class test_empty(wttest.WiredTigerTestCase):
name = 'test_empty'
- scenarios = check_scenarios([
+ scenarios = make_scenarios([
('file-r', dict(type='file:', fmt='r')),
('file-S', dict(type='file:', fmt='S')),
('table-r', dict(type='table:', fmt='r')),
diff --git a/test/suite/test_encrypt01.py b/test/suite/test_encrypt01.py
index 0f2782204d2..d48605aaa83 100644
--- a/test/suite/test_encrypt01.py
+++ b/test/suite/test_encrypt01.py
@@ -32,7 +32,7 @@
import os, run, random
import wiredtiger, wttest
-from wtscenario import multiply_scenarios, number_scenarios
+from wtscenario import make_scenarios
# Test basic encryption
class test_encrypt01(wttest.WiredTigerTestCase):
@@ -60,8 +60,7 @@ class test_encrypt01(wttest.WiredTigerTestCase):
('none-snappy', dict(log_compress=None, block_compress='snappy')),
('snappy-lz4', dict(log_compress='snappy', block_compress='lz4')),
]
- scenarios = number_scenarios(multiply_scenarios('.', types,
- encrypt, compress))
+ scenarios = make_scenarios(types, encrypt, compress)
nrecords = 5000
bigvalue = "abcdefghij" * 1001 # len(bigvalue) = 10010
diff --git a/test/suite/test_encrypt02.py b/test/suite/test_encrypt02.py
index 0376b3e42e4..648686274c4 100644
--- a/test/suite/test_encrypt02.py
+++ b/test/suite/test_encrypt02.py
@@ -33,7 +33,7 @@
import os, run, random
import wiredtiger, wttest
from suite_subprocess import suite_subprocess
-from wtscenario import multiply_scenarios, number_scenarios
+from wtscenario import make_scenarios
# Test basic encryption
class test_encrypt02(wttest.WiredTigerTestCase, suite_subprocess):
@@ -48,7 +48,7 @@ class test_encrypt02(wttest.WiredTigerTestCase, suite_subprocess):
('keyid-pass', dict( encrypt='rotn', encrypt_args='name=rotn,keyid=11',
secret_arg='ABC')),
]
- scenarios = number_scenarios(encrypt_type)
+ scenarios = make_scenarios(encrypt_type)
nrecords = 5000
bigvalue = "abcdefghij" * 1001 # len(bigvalue) = 10010
diff --git a/test/suite/test_encrypt03.py b/test/suite/test_encrypt03.py
index 702d0a2369f..0dc1755d6eb 100644
--- a/test/suite/test_encrypt03.py
+++ b/test/suite/test_encrypt03.py
@@ -32,7 +32,7 @@
import os, run, random
import wiredtiger, wttest
-from wtscenario import multiply_scenarios, number_scenarios
+from wtscenario import make_scenarios
# Test basic encryption
class test_encrypt03(wttest.WiredTigerTestCase):
@@ -48,7 +48,7 @@ class test_encrypt03(wttest.WiredTigerTestCase):
#('noname', dict( sys_encrypt='rotn', sys_encrypt_args=',keyid=11',
# file_encrypt='none', file_encrypt_args=',keyid=13')),
]
- scenarios = number_scenarios(multiply_scenarios('.', types, encrypt))
+ scenarios = make_scenarios(types, encrypt)
# Override WiredTigerTestCase, we have extensions.
def setUpConnectionOpen(self, dir):
diff --git a/test/suite/test_encrypt04.py b/test/suite/test_encrypt04.py
index d7c12d2cba8..97d2cee03a0 100644
--- a/test/suite/test_encrypt04.py
+++ b/test/suite/test_encrypt04.py
@@ -32,7 +32,7 @@
import os, run, random
import wiredtiger, wttest
-from wtscenario import multiply_scenarios, number_scenarios
+from wtscenario import make_scenarios
from suite_subprocess import suite_subprocess
# Test basic encryption with mismatched configuration
@@ -69,8 +69,7 @@ class test_encrypt04(wttest.WiredTigerTestCase, suite_subprocess):
('rotn11xyz_and_clear', dict( name2='rotn', keyid2='11',
secretkey2='XYZ', fileinclear2=True))
]
- scenarios = number_scenarios(multiply_scenarios \
- ('.', encrypt_scen_1, encrypt_scen_2))
+ scenarios = make_scenarios(encrypt_scen_1, encrypt_scen_2)
nrecords = 5000
bigvalue = "abcdefghij" * 1001 # len(bigvalue) = 10010
diff --git a/test/suite/test_encrypt05.py b/test/suite/test_encrypt05.py
index afd8a8103f9..19a3522b3d5 100644
--- a/test/suite/test_encrypt05.py
+++ b/test/suite/test_encrypt05.py
@@ -32,7 +32,7 @@
import os, run, random
import wiredtiger, wttest
-from wtscenario import multiply_scenarios, number_scenarios
+from wtscenario import make_scenarios
# Test raw compression with encryption
class test_encrypt05(wttest.WiredTigerTestCase):
@@ -44,8 +44,7 @@ class test_encrypt05(wttest.WiredTigerTestCase):
compress = [
('zlib', dict(log_compress='zlib', block_compress='zlib')),
]
- scenarios = number_scenarios(multiply_scenarios('.',
- encrypt, compress))
+ scenarios = make_scenarios(encrypt, compress)
nrecords = 500
bigvalue = 'a' * 500 # we use values that will definitely give compression
diff --git a/test/suite/test_encrypt06.py b/test/suite/test_encrypt06.py
index 5c88b698aeb..9300583d099 100644
--- a/test/suite/test_encrypt06.py
+++ b/test/suite/test_encrypt06.py
@@ -32,7 +32,7 @@
import os, run, random
import wiredtiger, wttest
-from wtscenario import multiply_scenarios, number_scenarios
+from wtscenario import make_scenarios
# Test encryption, when on, does not leak any information
class test_encrypt06(wttest.WiredTigerTestCase):
@@ -86,7 +86,7 @@ class test_encrypt06(wttest.WiredTigerTestCase):
file0_encrypt='rotn', file0_encrypt_args=key13, encrypt0=True,
file1_encrypt='none', file1_encrypt_args='', encrypt1=False)),
]
- scenarios = number_scenarios(multiply_scenarios('.', encrypt, storagetype))
+ scenarios = make_scenarios(encrypt, storagetype)
nrecords = 1000
# Override WiredTigerTestCase, we have extensions.
diff --git a/test/suite/test_encrypt07.py b/test/suite/test_encrypt07.py
index 30f28e096a8..97ab1987d4f 100644
--- a/test/suite/test_encrypt07.py
+++ b/test/suite/test_encrypt07.py
@@ -32,7 +32,6 @@
import os, run, string, codecs
import wiredtiger, wttest
-from wtscenario import multiply_scenarios, number_scenarios
import test_salvage
# Run the regular salvage test, but with encryption on
diff --git a/test/suite/test_excl.py b/test/suite/test_excl.py
index 90926f51877..cea5756dfbb 100644
--- a/test/suite/test_excl.py
+++ b/test/suite/test_excl.py
@@ -27,11 +27,11 @@
# OTHER DEALINGS IN THE SOFTWARE.
import wiredtiger, wttest
-from wtscenario import check_scenarios
+from wtscenario import make_scenarios
# Test session.create with the exclusive configuration.
class test_create_excl(wttest.WiredTigerTestCase):
- scenarios = check_scenarios([
+ scenarios = make_scenarios([
('file', dict(type='file:')),
('table', dict(type='table:'))
])
diff --git a/test/suite/test_huffman01.py b/test/suite/test_huffman01.py
index d71198e3151..be307550f2e 100644
--- a/test/suite/test_huffman01.py
+++ b/test/suite/test_huffman01.py
@@ -28,7 +28,7 @@
import os
from suite_subprocess import suite_subprocess
-from wtscenario import multiply_scenarios, number_scenarios
+from wtscenario import make_scenarios
import wiredtiger, wttest
# test_huffman01.py
@@ -52,7 +52,7 @@ class test_huffman01(wttest.WiredTigerTestCase, suite_subprocess):
('utf8', dict(huffval=',huffman_value=utf8t8file',vfile='t8file')),
('utf16', dict(huffval=',huffman_value=utf16t16file',vfile='t16file')),
]
- scenarios = number_scenarios(multiply_scenarios('.', huffkey, huffval))
+ scenarios = make_scenarios(huffkey, huffval)
def test_huffman(self):
dir = self.conn.get_home()
diff --git a/test/suite/test_huffman02.py b/test/suite/test_huffman02.py
index aa4329415a4..d74704daf58 100644
--- a/test/suite/test_huffman02.py
+++ b/test/suite/test_huffman02.py
@@ -28,7 +28,7 @@
import os
from suite_subprocess import suite_subprocess
-from wtscenario import multiply_scenarios, number_scenarios
+from wtscenario import make_scenarios
import wiredtiger, wttest
# test_huffman02.py
@@ -48,7 +48,7 @@ class test_huffman02(wttest.WiredTigerTestCase, suite_subprocess):
('file', dict(uri='file:huff')),
('table', dict(uri='table:huff')),
]
- scenarios = number_scenarios(multiply_scenarios('.',type,huffkey, huffval))
+ scenarios = make_scenarios(type, huffkey, huffval)
def test_huffman(self):
if self.keybad or self.valbad:
diff --git a/test/suite/test_index02.py b/test/suite/test_index02.py
new file mode 100644
index 00000000000..9f39df003b1
--- /dev/null
+++ b/test/suite/test_index02.py
@@ -0,0 +1,68 @@
+#!/usr/bin/env python
+#
+# Public Domain 2014-2016 MongoDB, Inc.
+# Public Domain 2008-2014 WiredTiger, Inc.
+#
+# This is free and unencumbered software released into the public domain.
+#
+# Anyone is free to copy, modify, publish, use, compile, sell, or
+# distribute this software, either in source code form or as a compiled
+# binary, for any purpose, commercial or non-commercial, and by any
+# means.
+#
+# In jurisdictions that recognize copyright laws, the author or authors
+# of this software dedicate any and all copyright interest in the
+# software to the public domain. We make this dedication for the benefit
+# of the public at large and to the detriment of our heirs and
+# successors. We intend this dedication to be an overt act of
+# relinquishment in perpetuity of all present and future rights to this
+# software under copyright law.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+# IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+# OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+# ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+# OTHER DEALINGS IN THE SOFTWARE.
+
+import wiredtiger, wttest
+
+# test_index02.py
+# test search_near in indices
+class test_index02(wttest.WiredTigerTestCase):
+ '''Test search_near in indices'''
+
+ basename = 'test_index02'
+ tablename = 'table:' + basename
+ indexname = 'index:' + basename + ":inverse"
+
+ def test_search_near(self):
+ '''Create a table, look for a nonexistent key'''
+ self.session.create(self.tablename, 'key_format=r,value_format=Q,columns=(k,v)')
+ self.session.create(self.indexname, 'columns=(v)')
+ cur = self.session.open_cursor(self.tablename, None, "append")
+ cur.set_value(1)
+ cur.insert()
+ cur.set_value(5)
+ cur.insert()
+ cur.set_value(5)
+ cur.insert()
+ cur.set_value(5)
+ cur.insert()
+ cur.set_value(10)
+ cur.insert()
+
+ # 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)
+
+ # 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)
+
+if __name__ == '__main__':
+ wttest.run()
diff --git a/test/suite/test_inmem01.py b/test/suite/test_inmem01.py
index 875ebb2bfa7..c6ae7ff6c4b 100644
--- a/test/suite/test_inmem01.py
+++ b/test/suite/test_inmem01.py
@@ -30,95 +30,73 @@ import wiredtiger, wttest
from time import sleep
from helper import simple_populate, simple_populate_check
from helper import key_populate, value_populate
-from wtscenario import check_scenarios
+from wtscenario import make_scenarios
# test_inmem01.py
# Test in-memory configuration.
class test_inmem01(wttest.WiredTigerTestCase):
- name = 'inmem01'
- """
- In memory configuration still creates files on disk, but has limits
- in terms of how much data can be written.
- Test various scenarios including:
- - Add a small amount of data, ensure it is present.
- - Add more data than would fit into the configured cache.
- - Fill the cache with data, remove some data, ensure more data can be
- inserted (after a reasonable amount of time for space to be reclaimed)
- - Run queries after adding, removing and re-inserting data.
- - Try out keeping a cursor open while adding new data.
- """
- scenarios = check_scenarios([
- ('col', dict(tablekind='col')),
- # Fixed length is very slow, disable it for now
- #('fix', dict(tablekind='fix')),
- ('row', dict(tablekind='row'))
- ])
-
- # create an in-memory database
- conn_config = 'cache_size=5MB,' + \
- 'file_manager=(close_idle_time=0),in_memory=true'
+ uri = 'table:inmem01'
+ conn_config = \
+ 'cache_size=5MB,file_manager=(close_idle_time=0),in_memory=true'
+ table_config = ',memory_page_max=32k,leaf_page_max=4k'
- def get_table_config(self):
- kf = 'key_format='
- vf = 'value_format='
- if self.tablekind == 'row':
- kf = kf + 'S'
- else:
- kf = kf + 'r' # record format
- if self.tablekind == 'fix':
- vf = vf + '8t'
- else:
- vf = vf + 'S'
- return 'memory_page_max=32k,leaf_page_max=4k,' + kf + ',' + vf
+ scenarios = make_scenarios([
+ ('col', dict(fmt='key_format=r,value_format=S')),
+ ('fix', dict(fmt='key_format=r,value_format=8t')),
+ ('row', dict(fmt='key_format=S,value_format=S'))
+ ])
+ # Smoke-test in-memory configurations, add a small amount of data and
+ # ensure it's visible.
def test_insert(self):
- table_config = self.get_table_config()
- simple_populate(self,
- "table:" + self.name, table_config, 1000)
- # Ensure the data is visible.
- simple_populate_check(self, 'table:' + self.name, 1000)
+ config = self.fmt + self.table_config
+ simple_populate(self, self.uri, config, 1000)
+ simple_populate_check(self, self.uri, 1000)
+ # Add more data than fits into the configured cache and verify it fails.
def test_insert_over_capacity(self):
- table_config = self.get_table_config()
+ config = self.fmt + self.table_config
msg = '/WT_CACHE_FULL.*/'
self.assertRaisesHavingMessage(wiredtiger.WiredTigerError,
- lambda:simple_populate(self,
- "table:" + self.name, table_config, 10000000), msg)
+ lambda:simple_populate(self, self.uri, config, 10000000), msg)
- # Figure out the last key we inserted.
- cursor = self.session.open_cursor('table:' + self.name, None)
+ # Figure out the last key we successfully inserted, and check all
+ # previous inserts are still there.
+ cursor = self.session.open_cursor(self.uri, None)
cursor.prev()
last_key = int(cursor.get_key())
- simple_populate_check(self, 'table:' + self.name, last_key)
+ simple_populate_check(self, self.uri, last_key)
+ # Fill the cache with data, remove some data, ensure more data can be
+ # inserted (after a reasonable amount of time for space to be reclaimed).
def test_insert_over_delete(self):
- table_config = self.get_table_config()
+ config = self.fmt + self.table_config
msg = '/WT_CACHE_FULL.*/'
self.assertRaisesHavingMessage(wiredtiger.WiredTigerError,
- lambda:simple_populate(self,
- "table:" + self.name, table_config, 10000000), msg)
+ lambda:simple_populate(self, self.uri, config, 10000000), msg)
# Now that the database contains as much data as will fit into
# the configured cache, verify removes succeed.
- cursor = self.session.open_cursor('table:' + self.name, None)
+ cursor = self.session.open_cursor(self.uri, None)
for i in range(1, 100):
cursor.set_key(key_populate(cursor, i))
cursor.remove()
+ # Run queries after adding, removing and re-inserting data.
+ # Try out keeping a cursor open while adding new data.
def test_insert_over_delete_replace(self):
- table_config = self.get_table_config()
+ config = self.fmt + self.table_config
msg = '/WT_CACHE_FULL.*/'
self.assertRaisesHavingMessage(wiredtiger.WiredTigerError,
- lambda:simple_populate(self,
- "table:" + self.name, table_config, 10000000), msg)
+ lambda:simple_populate(self, self.uri, config, 10000000), msg)
- cursor = self.session.open_cursor('table:' + self.name, None)
+ cursor = self.session.open_cursor(self.uri, None)
cursor.prev()
last_key = int(cursor.get_key())
# Now that the database contains as much data as will fit into
# the configured cache, verify removes succeed.
- cursor = self.session.open_cursor('table:' + self.name, None)
+ cursor = self.session.open_cursor(self.uri, None)
for i in range(1, last_key / 4, 1):
cursor.set_key(key_populate(cursor, i))
cursor.remove()
diff --git a/test/suite/test_intpack.py b/test/suite/test_intpack.py
index 187b2d7f579..b0cece09494 100644
--- a/test/suite/test_intpack.py
+++ b/test/suite/test_intpack.py
@@ -31,7 +31,7 @@
#
import wiredtiger, wttest
-from wtscenario import check_scenarios, number_scenarios
+from wtscenario import make_scenarios
class PackTester:
def __init__(self, formatcode, validlow, validhigh, equals):
@@ -126,22 +126,27 @@ class PackTester:
class test_intpack(wttest.WiredTigerTestCase):
name = 'test_intpack'
- scenarios = check_scenarios([
- ('b', dict(formatcode='b', low=-128, high=127, nbits=8)),
- ('B', dict(formatcode='B', low=0, high=255, nbits=8)),
- ('8t', dict(formatcode='8t', low=0, high=255, nbits=8)),
- ('5t', dict(formatcode='5t', low=0, high=31, nbits=5)),
- ('h', dict(formatcode='h', low=-32768, high=32767, nbits=16)),
- ('H', dict(formatcode='H', low=0, high=65535, nbits=16)),
- ('i', dict(formatcode='i', low=-2147483648, high=2147483647, nbits=32)),
- ('I', dict(formatcode='I', low=0, high=4294967295, nbits=32)),
- ('l', dict(formatcode='l', low=-2147483648, high=2147483647, nbits=32)),
- ('L', dict(formatcode='L', low=0, high=4294967295, nbits=32)),
- ('q', dict(formatcode='q', low=-9223372036854775808,
+ # We have to be a bit verbose here with naming, as there can be problems with
+ # case insensitive test names:w
+
+ scenarios = make_scenarios([
+ ('int8_t_b', dict(formatcode='b', low=-128, high=127, nbits=8)),
+ ('uint8_t_B', dict(formatcode='B', low=0, high=255, nbits=8)),
+ ('fix_len_8t', dict(formatcode='8t', low=0, high=255, nbits=8)),
+ ('fix_len_5t', dict(formatcode='5t', low=0, high=31, nbits=5)),
+ ('int16_t_h', dict(formatcode='h', low=-32768, high=32767, nbits=16)),
+ ('uint16_t_H', dict(formatcode='H', low=0, high=65535, nbits=16)),
+ ('int32_t_i', dict(formatcode='i', low=-2147483648, high=2147483647,
+ nbits=32)),
+ ('uint32_t_I', dict(formatcode='I', low=0, high=4294967295, nbits=32)),
+ ('int32_t_l', dict(formatcode='l', low=-2147483648, high=2147483647,
+ nbits=32)),
+ ('uint32_t_L', dict(formatcode='L', low=0, high=4294967295, nbits=32)),
+ ('int64_t_q', dict(formatcode='q', low=-9223372036854775808,
high=9223372036854775807, nbits=64)),
- ('Q', dict(formatcode='Q', low=0, high=18446744073709551615, nbits=64)),
+ ('uint64_t_Q', dict(formatcode='Q', low=0, high=18446744073709551615,
+ nbits=64)),
])
- scenarios = check_scenarios(number_scenarios(scenarios))
def test_packing(self):
pt = PackTester(self.formatcode, self.low, self.high, self.assertEquals)
diff --git a/test/suite/test_join01.py b/test/suite/test_join01.py
index f8d96a2718a..f3b13026896 100644
--- a/test/suite/test_join01.py
+++ b/test/suite/test_join01.py
@@ -27,7 +27,7 @@
# OTHER DEALINGS IN THE SOFTWARE.
import wiredtiger, wttest
-from wtscenario import check_scenarios, multiply_scenarios, number_scenarios
+from wtscenario import make_scenarios
# test_join01.py
# Join operations
@@ -67,11 +67,9 @@ class test_join01(wttest.WiredTigerTestCase):
('order=2', dict(join_order=2)),
('order=3', dict(join_order=3)),
]
- scenarios = number_scenarios(multiply_scenarios('.', type_scen,
- bloom0_scen, bloom1_scen,
- projection_scen,
- nested_scen, stats_scen,
- order_scen))
+ scenarios = make_scenarios(type_scen, bloom0_scen, bloom1_scen,
+ projection_scen, nested_scen, stats_scen,
+ order_scen)
# We need statistics for these tests.
conn_config = 'statistics=(all)'
diff --git a/test/suite/test_join02.py b/test/suite/test_join02.py
index a691c499cf6..db11ed01039 100644
--- a/test/suite/test_join02.py
+++ b/test/suite/test_join02.py
@@ -27,7 +27,7 @@
# OTHER DEALINGS IN THE SOFTWARE.
import wiredtiger, wttest, suite_random
-from wtscenario import check_scenarios, multiply_scenarios, number_scenarios
+from wtscenario import make_scenarios
# test_join02.py
# Join operations
@@ -48,7 +48,7 @@ class test_join02(wttest.WiredTigerTestCase):
('nobloom', dict(usebloom=False))
]
- scenarios = number_scenarios(multiply_scenarios('.', keyscen, bloomscen))
+ scenarios = make_scenarios(keyscen, bloomscen)
# Start our range from 1, since WT record numbers start at 1,
# it makes things work out nicer.
diff --git a/test/suite/test_join03.py b/test/suite/test_join03.py
index 613d2396b07..af19d934d70 100644
--- a/test/suite/test_join03.py
+++ b/test/suite/test_join03.py
@@ -28,7 +28,6 @@
import os
import wiredtiger, wttest, run
-from wtscenario import check_scenarios, multiply_scenarios, number_scenarios
# test_join03.py
# Join operations
diff --git a/test/suite/test_join04.py b/test/suite/test_join04.py
index 7e2afb15285..b270cb7a21c 100644
--- a/test/suite/test_join04.py
+++ b/test/suite/test_join04.py
@@ -28,7 +28,6 @@
import os
import wiredtiger, wttest, run
-from wtscenario import check_scenarios, multiply_scenarios, number_scenarios
# test_join04.py
# Join operations
diff --git a/test/suite/test_join05.py b/test/suite/test_join05.py
index ef2be4c6460..7dcb3e08911 100644
--- a/test/suite/test_join05.py
+++ b/test/suite/test_join05.py
@@ -27,7 +27,6 @@
# OTHER DEALINGS IN THE SOFTWARE.
import wiredtiger, wttest
-from wtscenario import check_scenarios, multiply_scenarios, number_scenarios
# test_join05.py
# Tests based on JIRA reports
diff --git a/test/suite/test_join06.py b/test/suite/test_join06.py
index 9af6f93792f..5fedd365712 100644
--- a/test/suite/test_join06.py
+++ b/test/suite/test_join06.py
@@ -28,7 +28,7 @@
import os
import wiredtiger, wttest, run
-from wtscenario import check_scenarios, multiply_scenarios, number_scenarios
+from wtscenario import make_scenarios
# test_join06.py
# Join operations
@@ -46,7 +46,7 @@ class test_join06(wttest.WiredTigerTestCase):
('nobloom', dict(bloom=False))
]
- scenarios = number_scenarios(multiply_scenarios('.', isoscen, bloomscen))
+ scenarios = make_scenarios(isoscen, bloomscen)
def gen_values(self, i):
s = str(i) # 345 => "345"
diff --git a/test/suite/test_join07.py b/test/suite/test_join07.py
index 36e91361329..2a32e678d72 100644
--- a/test/suite/test_join07.py
+++ b/test/suite/test_join07.py
@@ -28,7 +28,7 @@
import os, re, run
import wiredtiger, wttest, suite_random
-from wtscenario import check_scenarios, multiply_scenarios, number_scenarios
+from wtscenario import make_scenarios
class ParseException(Exception):
def __init__(self, msg):
@@ -198,7 +198,7 @@ class test_join07(wttest.WiredTigerTestCase):
('noextractor', dict(extractor=False))
]
- scenarios = number_scenarios(extractscen)
+ scenarios = make_scenarios(extractscen)
# Return the wiredtiger_open extension argument for a shared library.
def extensionArg(self, exts):
diff --git a/test/suite/test_join08.py b/test/suite/test_join08.py
index 6d674ab8193..d389fad706b 100644
--- a/test/suite/test_join08.py
+++ b/test/suite/test_join08.py
@@ -27,7 +27,6 @@
# OTHER DEALINGS IN THE SOFTWARE.
import wiredtiger, wttest
-from wtscenario import check_scenarios, multiply_scenarios, number_scenarios
# test_join08.py
# Test join error paths
diff --git a/test/suite/test_jsondump01.py b/test/suite/test_jsondump01.py
index 10262edc777..dc8027c2115 100644
--- a/test/suite/test_jsondump01.py
+++ b/test/suite/test_jsondump01.py
@@ -29,10 +29,12 @@
import os, json
import wiredtiger, wttest
from helper import \
- complex_populate, complex_populate_check_cursor,\
- simple_populate, simple_populate_check_cursor
+ complex_populate, complex_populate_check, complex_populate_check_cursor,\
+ simple_populate, simple_populate_check, simple_populate_check_cursor, \
+ simple_index_populate, simple_index_populate_check, \
+ simple_index_populate_check_cursor, compare_files
from suite_subprocess import suite_subprocess
-from wtscenario import multiply_scenarios, number_scenarios
+from wtscenario import make_scenarios
# A 'fake' cursor based on a set of rows.
# It emulates a WT cursor well enough for the *_check_cursor methods.
@@ -79,25 +81,34 @@ class test_jsondump01(wttest.WiredTigerTestCase, suite_subprocess):
types = [
('file', dict(uri='file:', config='', lsm=False,
populate=simple_populate,
- populate_check=simple_populate_check_cursor)),
+ populate_check=simple_populate_check,
+ populate_check_cursor=simple_populate_check_cursor)),
('lsm', dict(uri='lsm:', config='', lsm=True,
populate=simple_populate,
- populate_check=simple_populate_check_cursor)),
+ populate_check=simple_populate_check,
+ populate_check_cursor=simple_populate_check_cursor)),
('table-simple', dict(uri='table:', config='', lsm=False,
populate=simple_populate,
- populate_check=simple_populate_check_cursor)),
+ populate_check=simple_populate_check,
+ populate_check_cursor=simple_populate_check_cursor)),
+ ('table-index', dict(uri='table:', config='', lsm=False,
+ populate=simple_index_populate,
+ populate_check=simple_index_populate_check,
+ populate_check_cursor=simple_index_populate_check_cursor)),
('table-simple-lsm', dict(uri='table:', config='type=lsm', lsm=True,
populate=simple_populate,
- populate_check=simple_populate_check_cursor)),
+ populate_check=simple_populate_check,
+ populate_check_cursor=simple_populate_check_cursor)),
('table-complex', dict(uri='table:', config='', lsm=False,
populate=complex_populate,
- populate_check=complex_populate_check_cursor)),
+ populate_check=complex_populate_check,
+ populate_check_cursor=complex_populate_check_cursor)),
('table-complex-lsm', dict(uri='table:', config='type=lsm', lsm=True,
populate=complex_populate,
- populate_check=complex_populate_check_cursor))
+ populate_check=complex_populate_check,
+ populate_check_cursor=complex_populate_check_cursor))
]
- scenarios = number_scenarios(
- multiply_scenarios('.', types, keyfmt))
+ scenarios = make_scenarios(types, keyfmt)
# Dump using util, re-load using python's JSON, and do a content comparison.
def test_jsondump_util(self):
@@ -132,7 +143,7 @@ class test_jsondump01(wttest.WiredTigerTestCase, suite_subprocess):
cursor = self.session.open_cursor(uri, None)
fake = FakeCursor(cursor.key_format, cursor.value_format, data)
cursor.close()
- self.populate_check(self, fake, self.nentries)
+ self.populate_check_cursor(self, fake, self.nentries)
# Dump using util, re-load using python's JSON, and do a content comparison.
def test_jsonload_util(self):
@@ -153,9 +164,18 @@ class test_jsondump01(wttest.WiredTigerTestCase, suite_subprocess):
loadcmd.append('-a')
self.runWt(loadcmd)
- # check the contents of the data we read.
- cursor = self.session.open_cursor(uri2, None)
- self.populate_check(self, cursor, self.nentries)
+ # Check the contents of the data we read.
+ self.populate_check(self, uri2, self.nentries)
+
+ # Reload into the original uri, and dump into another file.
+ self.session.drop(uri, None)
+ self.session.drop(uri2, None)
+ self.runWt(['load', '-jf', 'jsondump.out'])
+ self.runWt(['dump', '-j', uri], outfilename='jsondump2.out')
+
+ # Compare the two outputs, and check the content again.
+ compare_files(self, 'jsondump.out', 'jsondump2.out')
+ self.populate_check(self, uri, self.nentries)
if __name__ == '__main__':
wttest.run()
diff --git a/test/suite/test_lsm01.py b/test/suite/test_lsm01.py
index 1f89cf38d77..f6cee20e896 100644
--- a/test/suite/test_lsm01.py
+++ b/test/suite/test_lsm01.py
@@ -54,12 +54,10 @@ class test_lsm01(wttest.WiredTigerTestCase):
config_vars = [ 'chunk_size', 'merge_max', 'bloom',
'bloom_bit_count', 'bloom_hash_count' ]
- all_scenarios = wtscenario.multiply_scenarios('_',
+ scenarios = wtscenario.make_scenarios(
chunk_size_scenarios, merge_max_scenarios, bloom_scenarios,
- bloom_bit_scenarios, bloom_hash_scenarios, record_count_scenarios)
-
- scenarios = wtscenario.prune_scenarios(all_scenarios, 500)
- scenarios = wtscenario.number_scenarios(scenarios)
+ bloom_bit_scenarios, bloom_hash_scenarios, record_count_scenarios,
+ prune=500)
# Test drop of an object.
def test_lsm(self):
diff --git a/test/suite/test_metadata_cursor01.py b/test/suite/test_metadata_cursor01.py
index e759c14f846..7802f89f174 100644
--- a/test/suite/test_metadata_cursor01.py
+++ b/test/suite/test_metadata_cursor01.py
@@ -27,7 +27,7 @@
# OTHER DEALINGS IN THE SOFTWARE.
import wiredtiger, wttest
-from wtscenario import check_scenarios
+from wtscenario import make_scenarios
# test_metadata_cursor01.py
# Metadata cursor operations
@@ -39,7 +39,7 @@ class test_metadata_cursor01(wttest.WiredTigerTestCase):
"""
table_name1 = 'test_metadata_cursor01'
- scenarios = check_scenarios([
+ scenarios = make_scenarios([
('plain', {'metauri' : 'metadata:'}),
('create', {'metauri' : 'metadata:create'}),
])
diff --git a/test/suite/test_nsnap01.py b/test/suite/test_nsnap01.py
index 5207b577ba4..7e8951750f8 100644
--- a/test/suite/test_nsnap01.py
+++ b/test/suite/test_nsnap01.py
@@ -30,7 +30,6 @@
# Named snapshots: basic API
from suite_subprocess import suite_subprocess
-from wtscenario import multiply_scenarios, number_scenarios
from helper import simple_populate
import wiredtiger, wttest
diff --git a/test/suite/test_nsnap02.py b/test/suite/test_nsnap02.py
index e4ed65ef72a..510c9d421ef 100644
--- a/test/suite/test_nsnap02.py
+++ b/test/suite/test_nsnap02.py
@@ -30,7 +30,6 @@
# Named snapshots: Combinations of dropping snapshots
from suite_subprocess import suite_subprocess
-from wtscenario import multiply_scenarios, number_scenarios
from helper import simple_populate
import wiredtiger, wttest
diff --git a/test/suite/test_nsnap03.py b/test/suite/test_nsnap03.py
index 0e853522940..3986c0c1a0a 100644
--- a/test/suite/test_nsnap03.py
+++ b/test/suite/test_nsnap03.py
@@ -30,7 +30,6 @@
# Named snapshots: Access and create from multiple sessions
from suite_subprocess import suite_subprocess
-from wtscenario import multiply_scenarios, number_scenarios
from helper import simple_populate
import wiredtiger, wttest
diff --git a/test/suite/test_nsnap04.py b/test/suite/test_nsnap04.py
index e8a5c9b6140..f9ef26b5600 100644
--- a/test/suite/test_nsnap04.py
+++ b/test/suite/test_nsnap04.py
@@ -30,7 +30,6 @@
# Named snapshots: Create snapshot from running transaction
from suite_subprocess import suite_subprocess
-from wtscenario import multiply_scenarios, number_scenarios
from helper import simple_populate
import wiredtiger, wttest
diff --git a/test/suite/test_overwrite.py b/test/suite/test_overwrite.py
index e22cdab4dea..4972a016bec 100644
--- a/test/suite/test_overwrite.py
+++ b/test/suite/test_overwrite.py
@@ -28,13 +28,13 @@
import wiredtiger, wttest
from helper import key_populate, simple_populate
-from wtscenario import check_scenarios
+from wtscenario import make_scenarios
# test_overwrite.py
# cursor overwrite configuration method
class test_overwrite(wttest.WiredTigerTestCase):
name = 'overwrite'
- scenarios = check_scenarios([
+ scenarios = make_scenarios([
('file-r', dict(type='file:',keyfmt='r')),
('file-S', dict(type='file:',keyfmt='S')),
('lsm-S', dict(type='lsm:',keyfmt='S')),
diff --git a/test/suite/test_perf001.py b/test/suite/test_perf001.py
index 1280639c9dd..b22ed2baeb0 100644
--- a/test/suite/test_perf001.py
+++ b/test/suite/test_perf001.py
@@ -32,13 +32,13 @@
import wiredtiger, wttest
import random
from time import clock, time
-from wtscenario import check_scenarios
+from wtscenario import make_scenarios
# Test performance of inserting into a table with an index.
class test_perf001(wttest.WiredTigerTestCase):
table_name = 'test_perf001'
- scenarios = check_scenarios([
+ scenarios = make_scenarios([
#('file-file', dict(tabletype='file',indextype='file')),
('file-lsm', dict(tabletype='file',indextype='lsm')),
#('lsm-file', dict(tabletype='lsm',indextype='file')),
diff --git a/test/suite/test_readonly01.py b/test/suite/test_readonly01.py
index 59e9743ab7e..e4b431ca1da 100644
--- a/test/suite/test_readonly01.py
+++ b/test/suite/test_readonly01.py
@@ -32,7 +32,7 @@
import fnmatch, os, shutil, time
from suite_subprocess import suite_subprocess
-from wtscenario import multiply_scenarios, number_scenarios, prune_scenarios
+from wtscenario import make_scenarios
import wttest
class test_readonly01(wttest.WiredTigerTestCase, suite_subprocess):
@@ -73,8 +73,7 @@ class test_readonly01(wttest.WiredTigerTestCase, suite_subprocess):
create_params = 'key_format=r,value_format=8t')),
]
- scenarios = multiply_scenarios('.',
- basecfg_list, dir_list, log_list, types)
+ scenarios = make_scenarios(basecfg_list, dir_list, log_list, types)
def conn_config(self, dir):
self.home = dir
diff --git a/test/suite/test_rebalance.py b/test/suite/test_rebalance.py
index f2167e864c9..98bd81de602 100644
--- a/test/suite/test_rebalance.py
+++ b/test/suite/test_rebalance.py
@@ -29,7 +29,7 @@
import os, time
import wiredtiger, wttest
from helper import complex_populate, simple_populate
-from wtscenario import check_scenarios
+from wtscenario import make_scenarios
# test_rebalance.py
# session level rebalance operation
@@ -41,7 +41,7 @@ class test_rebalance(wttest.WiredTigerTestCase):
config = 'key_format=S,allocation_size=512,internal_page_max=512' + \
',leaf_page_max=1k,lsm=(chunk_size=512k,merge_min=10)'
- scenarios = check_scenarios([
+ scenarios = make_scenarios([
('file', dict(uri='file:')),
('table', dict(uri='table:')),
('lsm', dict(uri='lsm:'))
diff --git a/test/suite/test_reconfig01.py b/test/suite/test_reconfig01.py
index 876de1fe5af..fb3fb7edac6 100644
--- a/test/suite/test_reconfig01.py
+++ b/test/suite/test_reconfig01.py
@@ -92,22 +92,25 @@ class test_reconfig01(wttest.WiredTigerTestCase):
self.conn.reconfigure("checkpoint=(wait=5)")
self.conn.reconfigure("checkpoint=(log_size=0)")
self.conn.reconfigure("checkpoint=(log_size=1M)")
- self.conn.reconfigure("checkpoint=(wait=0,name=hi)")
- self.conn.reconfigure("checkpoint=(wait=5,name=hi)")
- def test_reconfig_stat_log(self):
+ # Statistics logging: reconfigure the things we can reconfigure.
+ def test_reconfig_statistics_log_ok(self):
self.conn.reconfigure("statistics=[all],statistics_log=(wait=0)")
self.conn.reconfigure("statistics_log=(wait=0)")
- self.conn.reconfigure("statistics_log=(wait=2)")
+ self.conn.reconfigure("statistics_log=(wait=2,json=true)")
+ self.conn.reconfigure("statistics_log=(wait=0)")
+ self.conn.reconfigure("statistics_log=(wait=2,on_close=true)")
self.conn.reconfigure("statistics_log=(wait=0)")
self.conn.reconfigure("statistics_log=(wait=2,sources=[lsm:])")
self.conn.reconfigure("statistics_log=(wait=0)")
self.conn.reconfigure("statistics_log=(wait=2,timestamp=\"t%b %d\")")
self.conn.reconfigure("statistics_log=(wait=0)")
- self.conn.reconfigure("statistics_log=(wait=2,path=\"wts.%d.%H\")")
- self.conn.reconfigure("statistics_log=(wait=0)")
- self.conn.reconfigure(
- "statistics_log=(wait=2,sources=[lsm:],timestamp=\"%b\")")
+
+ # Statistics logging: reconfigure the things we can't reconfigure.
+ def test_reconfig_statistics_log_fail(self):
+ msg = '/unknown configuration key/'
+ self.assertRaisesWithMessage(wiredtiger.WiredTigerError,
+ lambda: self.conn.reconfigure("log=(path=foo)"), msg)
def test_file_manager(self):
self.conn.reconfigure("file_manager=(close_scan_interval=3)")
diff --git a/test/suite/test_reconfig02.py b/test/suite/test_reconfig02.py
index 85a9ceb2a34..9d9ac220aa7 100644
--- a/test/suite/test_reconfig02.py
+++ b/test/suite/test_reconfig02.py
@@ -41,24 +41,29 @@ class test_reconfig02(wttest.WiredTigerTestCase):
self.conn_config = self.init_config
return wttest.WiredTigerTestCase.setUpConnectionOpen(self, dir)
- # Call reconfigure for zero filling a file. There is nothing
- # we can actually look for to confirm it did anything.
- # Also changing the log file size is a no-op, but should not fail.
+ # Logging: reconfigure the things we can reconfigure.
def test_reconfig02_simple(self):
+ self.conn.reconfigure("log=(archive=false)")
+ self.conn.reconfigure("log=(prealloc=false)")
+ self.conn.reconfigure("log=(zero_fill=false)")
+
+ self.conn.reconfigure("log=(archive=true)")
+ self.conn.reconfigure("log=(prealloc=true)")
self.conn.reconfigure("log=(zero_fill=true)")
- self.conn.reconfigure("log=(file_max=1MB)")
- # Test that we get an error if we try to turn logging off.
+ # Logging: reconfigure the things we can't reconfigure.
def test_reconfig02_disable(self):
- msg = 'Invalid argument'
- gotException = False
- try:
- self.conn.reconfigure("log=(enabled=false)")
- except wiredtiger.WiredTigerError as e:
- gotException = True
- self.pr('got exception: ' + str(e))
- self.assertTrue(str(e).find(msg) >= 0)
- self.assertTrue(gotException)
+ msg = '/unknown configuration key/'
+ self.assertRaisesWithMessage(wiredtiger.WiredTigerError,
+ lambda: self.conn.reconfigure("log=(enabled=true)"), msg)
+ self.assertRaisesWithMessage(wiredtiger.WiredTigerError,
+ lambda: self.conn.reconfigure("log=(compressor=foo)"), msg)
+ self.assertRaisesWithMessage(wiredtiger.WiredTigerError,
+ lambda: self.conn.reconfigure("log=(file_max=1MB)"), msg)
+ self.assertRaisesWithMessage(wiredtiger.WiredTigerError,
+ lambda: self.conn.reconfigure("log=(path=foo)"), msg)
+ self.assertRaisesWithMessage(wiredtiger.WiredTigerError,
+ lambda: self.conn.reconfigure("log=(recovery=true)"), msg)
# Logging starts on, but prealloc is off. Verify it is off.
# Reconfigure it on and run again, making sure that log files
diff --git a/test/suite/test_rename.py b/test/suite/test_rename.py
index af968a4a38d..1979bbb802a 100644
--- a/test/suite/test_rename.py
+++ b/test/suite/test_rename.py
@@ -31,7 +31,7 @@ import wiredtiger, wttest
from helper import confirm_does_not_exist,\
complex_populate, complex_populate_check,\
simple_populate, simple_populate_check
-from wtscenario import check_scenarios
+from wtscenario import make_scenarios
# test_rename.py
# session level rename operation
@@ -39,7 +39,7 @@ class test_rename(wttest.WiredTigerTestCase):
name1 = 'test_rename1'
name2 = 'test_rename2'
- scenarios = check_scenarios([
+ scenarios = make_scenarios([
('file', dict(uri='file:')),
('table', dict(uri='table:'))
])
diff --git a/test/suite/test_schema02.py b/test/suite/test_schema02.py
index b404261c066..bccc7dfc728 100644
--- a/test/suite/test_schema02.py
+++ b/test/suite/test_schema02.py
@@ -27,7 +27,7 @@
# OTHER DEALINGS IN THE SOFTWARE.
import wiredtiger, wttest
-from wtscenario import check_scenarios
+from wtscenario import make_scenarios
# test_schema02.py
# Columns, column groups, indexes
@@ -37,7 +37,7 @@ class test_schema02(wttest.WiredTigerTestCase):
"""
nentries = 1000
- scenarios = check_scenarios([
+ scenarios = make_scenarios([
('normal', { 'idx_config' : '' }),
('lsm', { 'idx_config' : ',type=lsm' }),
])
diff --git a/test/suite/test_schema03.py b/test/suite/test_schema03.py
index f48bfdf3cf8..81556393e78 100644
--- a/test/suite/test_schema03.py
+++ b/test/suite/test_schema03.py
@@ -29,7 +29,7 @@
import os
import suite_random
import wiredtiger, wtscenario, wttest
-from wtscenario import check_scenarios
+from wtscenario import make_scenarios
try:
# Windows does not getrlimit/setrlimit so we must catch the resource
@@ -249,7 +249,7 @@ class test_schema03(wttest.WiredTigerTestCase):
# but boost it up to this limit anyway.
OPEN_FILE_LIMIT = 1000
- restart_scenarios = check_scenarios([('table', dict(s_restart=['table'],P=0.3)),
+ restart_scenarios = [('table', dict(s_restart=['table'],P=0.3)),
('colgroup0', dict(s_restart=['colgroup0'],P=0.3)),
('index0', dict(s_restart=['index0'],P=0.3)),
('colgroup1', dict(s_restart=['colgroup1'],P=0.3)),
@@ -259,7 +259,7 @@ class test_schema03(wttest.WiredTigerTestCase):
('populate1', dict(s_restart=['populate1'],P=0.3)),
('ipop', dict(s_restart=['index0','populate0'],P=0.3)),
('all', dict(s_restart=['table','colgroup0','index0','colgroup1','index1','populate0','index2','populate1'],P=1.0)),
- ])
+ ]
ntable_scenarios = wtscenario.quick_scenarios('s_ntable',
[1,2,5,8], [1.0,0.4,0.5,0.5])
@@ -272,11 +272,10 @@ class test_schema03(wttest.WiredTigerTestCase):
table_args_scenarios = wtscenario.quick_scenarios('s_extra_table_args',
['', ',type=file', ',type=lsm'], [0.5, 0.3, 0.2])
- all_scenarios = wtscenario.multiply_scenarios('_', restart_scenarios, ntable_scenarios, ncolgroup_scenarios, nindex_scenarios, idx_args_scenarios, table_args_scenarios)
-
- # Prune the scenarios according to the probabilities given above.
- scenarios = wtscenario.prune_scenarios(all_scenarios, 30)
- scenarios = wtscenario.number_scenarios(scenarios)
+ scenarios = wtscenario.make_scenarios(
+ restart_scenarios, ntable_scenarios, ncolgroup_scenarios,
+ nindex_scenarios, idx_args_scenarios, table_args_scenarios,
+ prune=30)
# Note: the set can be reduced here for debugging, e.g.
# scenarios = scenarios[40:44]
diff --git a/test/suite/test_schema04.py b/test/suite/test_schema04.py
index cd41138deb0..8ac81690819 100644
--- a/test/suite/test_schema04.py
+++ b/test/suite/test_schema04.py
@@ -28,7 +28,7 @@
import os
import wiredtiger, wttest, run
-from wtscenario import check_scenarios, number_scenarios
+from wtscenario import make_scenarios
# test_schema04.py
# Test indices with duplicates
@@ -47,7 +47,7 @@ class test_schema04(wttest.WiredTigerTestCase):
"""
nentries = 100
- scenarios = number_scenarios([
+ scenarios = make_scenarios([
('index-before', { 'create_index' : 0 }),
('index-during', { 'create_index' : 1 }),
('index-after', { 'create_index' : 2 }),
diff --git a/test/suite/test_schema05.py b/test/suite/test_schema05.py
index 89722d5f89a..89484cfc7bd 100644
--- a/test/suite/test_schema05.py
+++ b/test/suite/test_schema05.py
@@ -28,7 +28,7 @@
import os
import wiredtiger, wttest, run
-from wtscenario import check_scenarios, number_scenarios
+from wtscenario import make_scenarios
# test_schema05.py
# Test indices using a custom extractor.
@@ -51,7 +51,7 @@ class test_schema05(wttest.WiredTigerTestCase):
nentries = 1000
nindices = 6
- scenarios = number_scenarios([
+ scenarios = make_scenarios([
('index-before', { 'create_index' : 0 }),
('index-during', { 'create_index' : 1 }),
('index-after', { 'create_index' : 2 }),
diff --git a/test/suite/test_schema06.py b/test/suite/test_schema06.py
index e72959edf2a..e0eec189137 100644
--- a/test/suite/test_schema06.py
+++ b/test/suite/test_schema06.py
@@ -27,6 +27,7 @@
# OTHER DEALINGS IN THE SOFTWARE.
import wiredtiger, wttest
+from wtscenario import make_scenarios
# test_schema06.py
# Repeatedly create and drop indices
@@ -36,10 +37,10 @@ class test_schema06(wttest.WiredTigerTestCase):
"""
nentries = 1000
- scenarios = [
+ scenarios = make_scenarios([
('normal', { 'idx_config' : '' }),
('lsm', { 'idx_config' : ',type=lsm' }),
- ]
+ ])
def flip(self, inum, val):
"""
diff --git a/test/suite/test_split.py b/test/suite/test_split.py
index d09613e1c52..28bf6bc59b0 100644
--- a/test/suite/test_split.py
+++ b/test/suite/test_split.py
@@ -35,7 +35,6 @@ from wiredtiger import stat
from helper import confirm_empty,\
key_populate, value_populate, simple_populate,\
complex_populate, complex_value_populate
-from wtscenario import multiply_scenarios, number_scenarios
# Test splits
class test_split(wttest.WiredTigerTestCase):
diff --git a/test/suite/test_stat01.py b/test/suite/test_stat01.py
index 5c3259696eb..1ad51ee9882 100644
--- a/test/suite/test_stat01.py
+++ b/test/suite/test_stat01.py
@@ -29,7 +29,7 @@
import helper, wiredtiger, wttest
from wiredtiger import stat
from helper import key_populate, simple_populate
-from wtscenario import multiply_scenarios, number_scenarios
+from wtscenario import make_scenarios
# test_stat01.py
# Statistics operations
@@ -49,7 +49,7 @@ class test_stat01(wttest.WiredTigerTestCase):
('recno', dict(keyfmt='r')),
('string', dict(keyfmt='S')),
]
- scenarios = number_scenarios(multiply_scenarios('.', types, keyfmt))
+ scenarios = make_scenarios(types, keyfmt)
conn_config = 'statistics=(all)'
diff --git a/test/suite/test_stat02.py b/test/suite/test_stat02.py
index 88371947b5b..ef3907e54b1 100644
--- a/test/suite/test_stat02.py
+++ b/test/suite/test_stat02.py
@@ -28,7 +28,7 @@
import itertools, wiredtiger, wttest
from suite_subprocess import suite_subprocess
-from wtscenario import multiply_scenarios, number_scenarios
+from wtscenario import make_scenarios
from wiredtiger import stat
from helper import complex_populate, complex_populate_lsm, simple_populate
@@ -57,8 +57,7 @@ class test_stat_cursor_config(wttest.WiredTigerTestCase):
('size', dict(cursor_config='size'))
]
- scenarios = number_scenarios(
- multiply_scenarios('.', uri, data_config, cursor_config))
+ scenarios = make_scenarios(uri, data_config, cursor_config)
# Turn on statistics for this test.
def conn_config(self, dir):
@@ -106,13 +105,13 @@ class test_stat_cursor_dsrc_clear(wttest.WiredTigerTestCase):
pfx = 'test_stat_cursor_dsrc_clear'
uri = [
- ('1', dict(uri='file:' + pfx, pop=simple_populate)),
- ('2', dict(uri='table:' + pfx, pop=simple_populate)),
- ('3', dict(uri='table:' + pfx, pop=complex_populate)),
- ('4', dict(uri='table:' + pfx, pop=complex_populate_lsm))
+ ('dsrc_clear_1', dict(uri='file:' + pfx, pop=simple_populate)),
+ ('dsrc_clear_2', dict(uri='table:' + pfx, pop=simple_populate)),
+ ('dsrc_clear_3', dict(uri='table:' + pfx, pop=complex_populate)),
+ ('dsrc_clear_4', dict(uri='table:' + pfx, pop=complex_populate_lsm))
]
- scenarios = number_scenarios(multiply_scenarios('.', uri))
+ scenarios = make_scenarios(uri)
conn_config = 'statistics=(all)'
def test_stat_cursor_dsrc_clear(self):
@@ -136,13 +135,13 @@ class test_stat_cursor_fast(wttest.WiredTigerTestCase):
pfx = 'test_stat_cursor_fast'
uri = [
- ('1', dict(uri='file:' + pfx, pop=simple_populate)),
- ('2', dict(uri='table:' + pfx, pop=simple_populate)),
- ('3', dict(uri='table:' + pfx, pop=complex_populate)),
- ('4', dict(uri='table:' + pfx, pop=complex_populate_lsm))
+ ('fast_1', dict(uri='file:' + pfx, pop=simple_populate)),
+ ('fast_2', dict(uri='table:' + pfx, pop=simple_populate)),
+ ('fast_3', dict(uri='table:' + pfx, pop=complex_populate)),
+ ('fast_4', dict(uri='table:' + pfx, pop=complex_populate_lsm))
]
- scenarios = number_scenarios(multiply_scenarios('.', uri))
+ scenarios = make_scenarios(uri)
conn_config = 'statistics=(all)'
def test_stat_cursor_fast(self):
@@ -180,13 +179,13 @@ class test_stat_cursor_dsrc_error(wttest.WiredTigerTestCase):
pfx = 'test_stat_cursor_dsrc_error'
uri = [
- ('1', dict(uri='file:' + pfx, pop=simple_populate)),
- ('2', dict(uri='table:' + pfx, pop=simple_populate)),
- ('3', dict(uri='table:' + pfx, pop=complex_populate)),
- ('4', dict(uri='table:' + pfx, pop=complex_populate_lsm))
+ ('dsrc_error_1', dict(uri='file:' + pfx, pop=simple_populate)),
+ ('dsrc_error_2', dict(uri='table:' + pfx, pop=simple_populate)),
+ ('dsrc_error_3', dict(uri='table:' + pfx, pop=complex_populate)),
+ ('dsrc_error_4', dict(uri='table:' + pfx, pop=complex_populate_lsm))
]
- scenarios = number_scenarios(multiply_scenarios('.', uri))
+ scenarios = make_scenarios(uri)
conn_config = 'statistics=(all)'
def test_stat_cursor_dsrc_error(self):
diff --git a/test/suite/test_stat03.py b/test/suite/test_stat03.py
index 039ad1f7f8d..b17fe6eb91c 100644
--- a/test/suite/test_stat03.py
+++ b/test/suite/test_stat03.py
@@ -34,7 +34,7 @@ from helper import complex_populate, complex_populate_lsm, simple_populate
from helper import key_populate, complex_value_populate, value_populate
from helper import complex_populate_colgroup_count, complex_populate_index_count
from helper import complex_populate_colgroup_name, complex_populate_index_name
-from wtscenario import multiply_scenarios, number_scenarios
+from wtscenario import make_scenarios
# test_stat03.py
# Statistics reset test.
@@ -51,7 +51,7 @@ class test_stat_cursor_reset(wttest.WiredTigerTestCase):
dict(uri='table:' + pfx, pop=complex_populate_lsm)),
]
- scenarios = number_scenarios(multiply_scenarios('.', uri))
+ scenarios = make_scenarios(uri)
conn_config = 'statistics=(all)'
def stat_cursor(self, uri):
diff --git a/test/suite/test_stat04.py b/test/suite/test_stat04.py
index e7c39371f80..b5309efff37 100644
--- a/test/suite/test_stat04.py
+++ b/test/suite/test_stat04.py
@@ -28,7 +28,7 @@
import os, struct
from suite_subprocess import suite_subprocess
-from wtscenario import number_scenarios, multiply_scenarios
+from wtscenario import make_scenarios
import wiredtiger, wttest
from wiredtiger import stat
@@ -49,7 +49,7 @@ class test_stat04(wttest.WiredTigerTestCase, suite_subprocess):
('large', dict(nentries=100000, valuesize=1)),
('jumboval', dict(nentries=100, valuesize=4200000)),
]
- scenarios = number_scenarios(multiply_scenarios('.', keyfmt, nentries))
+ scenarios = make_scenarios(keyfmt, nentries)
conn_config = 'statistics=(all)'
def init_test(self):
@@ -91,6 +91,7 @@ class test_stat04(wttest.WiredTigerTestCase, suite_subprocess):
self.checkcount(uri, count)
cursor[self.genkey(i)] = self.genvalue(i)
count += 1
+
# Remove a number of entries, at each step checking that stats match.
for i in range(0, self.nentries / 37):
cursor.set_key(self.genkey(i*11 % self.nentries))
@@ -99,5 +100,10 @@ class test_stat04(wttest.WiredTigerTestCase, suite_subprocess):
self.checkcount(uri, count)
cursor.close()
+ # Confirm the count is correct after writing to the backing file,
+ # that tests the on-disk format as well as the in-memory format.
+ self.reopen_conn()
+ self.checkcount(uri, count)
+
if __name__ == '__main__':
wttest.run()
diff --git a/test/suite/test_stat05.py b/test/suite/test_stat05.py
index 9bcedd65089..62562f78ed6 100644
--- a/test/suite/test_stat05.py
+++ b/test/suite/test_stat05.py
@@ -28,7 +28,7 @@
import itertools, wiredtiger, wttest
from suite_subprocess import suite_subprocess
-from wtscenario import multiply_scenarios, number_scenarios
+from wtscenario import make_scenarios
from wiredtiger import stat
from helper import complex_populate, complex_populate_lsm, simple_populate
from helper import complex_value_populate, key_populate, value_populate
@@ -43,16 +43,18 @@ class test_stat_cursor_config(wttest.WiredTigerTestCase):
('file', dict(uri='file:' + pfx, pop=simple_populate, cfg='')),
('table', dict(uri='table:' + pfx, pop=simple_populate, cfg='')),
('inmem', dict(uri='table:' + pfx, pop=simple_populate, cfg='',
- conn_config='in_memory,statistics=(fast)')),
+ conn_config = 'in_memory,statistics=(fast)')),
('table-lsm', dict(uri='table:' + pfx, pop=simple_populate,
- cfg=',type=lsm,lsm=(chunk_size=1MB,merge_min=2)')),
+ cfg=',type=lsm,lsm=(chunk_size=1MB,merge_min=2)',
+ conn_config = 'statistics=(fast),eviction_dirty_target=99,eviction_dirty_trigger=99')),
('complex', dict(uri='table:' + pfx, pop=complex_populate, cfg='')),
('complex-lsm',
dict(uri='table:' + pfx, pop=complex_populate_lsm,
- cfg=',lsm=(chunk_size=1MB,merge_min=2)')),
+ cfg=',lsm=(chunk_size=1MB,merge_min=2)',
+ conn_config = 'statistics=(fast),eviction_dirty_target=99,eviction_dirty_trigger=99')),
]
- scenarios = number_scenarios(uri)
+ scenarios = make_scenarios(uri)
def openAndWalkStatCursor(self):
c = self.session.open_cursor(
@@ -62,7 +64,6 @@ class test_stat_cursor_config(wttest.WiredTigerTestCase):
count += 1
c.close()
-
# Open a size-only statistics cursor on various table types. Ensure that
# the cursor open succeeds. Insert enough data that LSM tables to need to
# switch and merge.
diff --git a/test/suite/test_stat_log01.py b/test/suite/test_stat_log01.py
index f6033d940c5..65ce80dfe7d 100644
--- a/test/suite/test_stat_log01.py
+++ b/test/suite/test_stat_log01.py
@@ -51,9 +51,10 @@ class test_stat_log01(wttest.WiredTigerTestCase):
None, "create,statistics=(fast),statistics_log=(wait=1)")
# Wait for the default interval, to ensure stats have been written.
time.sleep(2)
- self.check_stats_file("WiredTigerStat")
+ self.check_stats_file(".")
def test_stats_log_name(self):
+ os.mkdir("foo")
self.conn = self.wiredtiger_open(
None, "create,statistics=(fast),statistics_log=(wait=1,path=foo)")
# Wait for the default interval, to ensure stats have been written.
@@ -66,21 +67,18 @@ class test_stat_log01(wttest.WiredTigerTestCase):
# Wait for the default interval, to ensure stats have been written.
time.sleep(2)
self.close_conn()
- self.check_stats_file("WiredTigerStat")
+ self.check_stats_file(".")
def test_stats_log_on_close(self):
self.conn = self.wiredtiger_open(None,
"create,statistics=(fast),statistics_log=(on_close=true)")
# Close the connection to ensure the statistics get generated.
self.close_conn()
- self.check_stats_file("WiredTigerStat")
+ self.check_stats_file(".")
- def check_stats_file(self, filename):
- if filename == "WiredTigerStat":
- files = glob.glob(filename + '.[0-9]*')
- self.assertTrue(files)
- else:
- self.assertTrue(os.path.isfile(filename))
+ def check_stats_file(self, dir):
+ files = glob.glob(dir + '/' + 'WiredTigerStat.[0-9]*')
+ self.assertTrue(files)
if __name__ == '__main__':
wttest.run()
diff --git a/test/suite/test_sweep01.py b/test/suite/test_sweep01.py
index bccd2bce012..71f8fcb180e 100644
--- a/test/suite/test_sweep01.py
+++ b/test/suite/test_sweep01.py
@@ -33,8 +33,8 @@
import fnmatch, os, shutil, run, time
from suite_subprocess import suite_subprocess
+from wtscenario import make_scenarios
from wiredtiger import stat
-from wtscenario import multiply_scenarios, number_scenarios, prune_scenarios
import wttest
class test_sweep01(wttest.WiredTigerTestCase, suite_subprocess):
@@ -55,7 +55,7 @@ class test_sweep01(wttest.WiredTigerTestCase, suite_subprocess):
create_params = 'key_format=r,value_format=8t')),
]
- scenarios = types
+ scenarios = make_scenarios(types)
def test_ops(self):
#
diff --git a/test/suite/test_sweep03.py b/test/suite/test_sweep03.py
index 061c2f5b37b..61078fa96b5 100644
--- a/test/suite/test_sweep03.py
+++ b/test/suite/test_sweep03.py
@@ -33,7 +33,7 @@
import fnmatch, os, shutil, run, time
from suite_subprocess import suite_subprocess
from wiredtiger import stat
-from wtscenario import multiply_scenarios, number_scenarios, prune_scenarios
+from wtscenario import make_scenarios
import wttest
class test_sweep03(wttest.WiredTigerTestCase, suite_subprocess):
@@ -54,7 +54,7 @@ class test_sweep03(wttest.WiredTigerTestCase, suite_subprocess):
create_params = 'key_format=r,value_format=8t')),
]
- scenarios = types
+ scenarios = make_scenarios(types)
def test_disable_idle_timeout1(self):
#
diff --git a/test/suite/test_truncate01.py b/test/suite/test_truncate01.py
index 77a476e40c1..9a3518c6984 100644
--- a/test/suite/test_truncate01.py
+++ b/test/suite/test_truncate01.py
@@ -34,13 +34,13 @@ import wiredtiger, wttest
from helper import confirm_empty,\
key_populate, value_populate, simple_populate,\
complex_populate, complex_value_populate
-from wtscenario import check_scenarios, multiply_scenarios, number_scenarios
+from wtscenario import make_scenarios
# Test truncation arguments.
class test_truncate_arguments(wttest.WiredTigerTestCase):
name = 'test_truncate'
- scenarios = check_scenarios([
+ scenarios = make_scenarios([
('file', dict(type='file:')),
('table', dict(type='table:'))
])
@@ -80,7 +80,7 @@ class test_truncate_arguments(wttest.WiredTigerTestCase):
# Test truncation of an object using its URI.
class test_truncate_uri(wttest.WiredTigerTestCase):
name = 'test_truncate'
- scenarios = check_scenarios([
+ scenarios = make_scenarios([
('file', dict(type='file:')),
('table', dict(type='table:'))
])
@@ -115,7 +115,7 @@ class test_truncate_cursor_order(wttest.WiredTigerTestCase):
('recno', dict(keyfmt='r')),
('string', dict(keyfmt='S')),
]
- scenarios = number_scenarios(multiply_scenarios('.', types, keyfmt))
+ scenarios = make_scenarios(types, keyfmt)
# Test an illegal order, then confirm that equal cursors works.
def test_truncate_cursor_order(self):
@@ -146,7 +146,7 @@ class test_truncate_cursor_end(wttest.WiredTigerTestCase):
('recno', dict(keyfmt='r')),
('string', dict(keyfmt='S')),
]
- scenarios = number_scenarios(multiply_scenarios('.', types, keyfmt))
+ scenarios = make_scenarios(types, keyfmt)
# Test truncation of cursors past the end of the object.
def test_truncate_cursor_order(self):
@@ -205,8 +205,7 @@ class test_truncate_cursor(wttest.WiredTigerTestCase):
('big', dict(nentries=1000,skip=37)),
]
- scenarios = number_scenarios(
- multiply_scenarios('.', types, keyfmt, size, reopen))
+ scenarios = make_scenarios(types, keyfmt, size, reopen)
# Set a cursor key.
def cursorKey(self, uri, key):
diff --git a/test/suite/test_truncate02.py b/test/suite/test_truncate02.py
index 6c11302787c..e57a65d2f97 100644
--- a/test/suite/test_truncate02.py
+++ b/test/suite/test_truncate02.py
@@ -32,7 +32,7 @@
import wiredtiger, wttest
from helper import key_populate, value_populate, simple_populate
-from wtscenario import multiply_scenarios, number_scenarios
+from wtscenario import make_scenarios
# test_truncate_fast_delete
# When deleting leaf pages that aren't in memory, we set transactional
@@ -86,8 +86,7 @@ class test_truncate_fast_delete(wttest.WiredTigerTestCase):
('txn2', dict(commit=False)),
]
- scenarios = number_scenarios(
- multiply_scenarios('.', types, keyfmt, overflow, reads, writes, txn))
+ scenarios = make_scenarios(types, keyfmt, overflow, reads, writes, txn)
# Return the number of records visible to the cursor; test both forward
# and backward iteration, they are different code paths in this case.
diff --git a/test/suite/test_txn01.py b/test/suite/test_txn01.py
index eb6963791fd..1ba74461088 100644
--- a/test/suite/test_txn01.py
+++ b/test/suite/test_txn01.py
@@ -27,13 +27,13 @@
# OTHER DEALINGS IN THE SOFTWARE.
import wiredtiger, wttest
-from wtscenario import check_scenarios
+from wtscenario import make_scenarios
# test_txn01.py
# Transactions: basic functionality
class test_txn01(wttest.WiredTigerTestCase):
nentries = 1000
- scenarios = check_scenarios([
+ scenarios = make_scenarios([
('col-f', dict(uri='file:text_txn01',key_format='r',value_format='S')),
('col-t', dict(uri='table:text_txn01',key_format='r',value_format='S')),
('fix-f', dict(uri='file:text_txn01',key_format='r',value_format='8t')),
diff --git a/test/suite/test_txn02.py b/test/suite/test_txn02.py
index fccf123d3bc..a0c2c12a47c 100644
--- a/test/suite/test_txn02.py
+++ b/test/suite/test_txn02.py
@@ -32,7 +32,7 @@
import fnmatch, os, shutil, time
from suite_subprocess import suite_subprocess
-from wtscenario import multiply_scenarios, number_scenarios, prune_scenarios
+from wtscenario import make_scenarios
import wttest
class test_txn02(wttest.WiredTigerTestCase, suite_subprocess):
@@ -81,22 +81,18 @@ class test_txn02(wttest.WiredTigerTestCase, suite_subprocess):
txn3s = [('t3c', dict(txn3='commit')), ('t3r', dict(txn3='rollback'))]
txn4s = [('t4c', dict(txn4='commit')), ('t4r', dict(txn4='rollback'))]
- all_scenarios = multiply_scenarios('.', types,
- op1s, txn1s, op2s, txn2s, op3s, txn3s, op4s, txn4s)
-
# This test generates thousands of potential scenarios.
# For default runs, we'll use a small subset of them, for
# long runs (when --long is set) we'll set a much larger limit.
- scenarios = number_scenarios(prune_scenarios(all_scenarios, 20, 5000))
+ scenarios = make_scenarios(types,
+ op1s, txn1s, op2s, txn2s, op3s, txn3s, op4s, txn4s,
+ prune=20, prunelong=5000)
# Each check_log() call takes a second, so we don't call it for
# every scenario, we'll limit it to the value of checklog_calls.
checklog_calls = 100 if wttest.islongtest() else 2
checklog_mod = (len(scenarios) / checklog_calls + 1)
- # scenarios = number_scenarios(multiply_scenarios('.', types,
- # op1s, txn1s, op2s, txn2s, op3s, txn3s, op4s, txn4s)) [:3]
- # Overrides WiredTigerTestCase
def setUpConnectionOpen(self, dir):
self.home = dir
# Cycle through the different transaction_sync values in a
diff --git a/test/suite/test_txn03.py b/test/suite/test_txn03.py
index 97180a75949..18a0e096767 100644
--- a/test/suite/test_txn03.py
+++ b/test/suite/test_txn03.py
@@ -31,7 +31,7 @@
#
import wiredtiger, wttest
-from wtscenario import check_scenarios
+from wtscenario import make_scenarios
class test_txn03(wttest.WiredTigerTestCase):
tablename = 'test_txn03'
@@ -42,7 +42,7 @@ class test_txn03(wttest.WiredTigerTestCase):
data_str2 = "TEST_VAL1"
nentries = 1000
- scenarios = check_scenarios([
+ scenarios = make_scenarios([
('var', dict(create_params = "key_format=S,value_format=S")),
])
diff --git a/test/suite/test_txn04.py b/test/suite/test_txn04.py
index 9d9d2db62c6..ade39272f84 100644
--- a/test/suite/test_txn04.py
+++ b/test/suite/test_txn04.py
@@ -32,7 +32,7 @@
import shutil, os
from suite_subprocess import suite_subprocess
-from wtscenario import multiply_scenarios, number_scenarios
+from wtscenario import make_scenarios
import wttest
class test_txn04(wttest.WiredTigerTestCase, suite_subprocess):
@@ -62,7 +62,7 @@ class test_txn04(wttest.WiredTigerTestCase, suite_subprocess):
]
txn1s = [('t1c', dict(txn1='commit')), ('t1r', dict(txn1='rollback'))]
- scenarios = number_scenarios(multiply_scenarios('.', types, op1s, txn1s))
+ scenarios = make_scenarios(types, op1s, txn1s)
# Overrides WiredTigerTestCase
def setUpConnectionOpen(self, dir):
self.home = dir
diff --git a/test/suite/test_txn05.py b/test/suite/test_txn05.py
index bb68034ca04..9e84fe7d3fe 100644
--- a/test/suite/test_txn05.py
+++ b/test/suite/test_txn05.py
@@ -32,7 +32,7 @@
import fnmatch, os, shutil, time
from suite_subprocess import suite_subprocess
-from wtscenario import multiply_scenarios, number_scenarios
+from wtscenario import make_scenarios
import wttest
class test_txn05(wttest.WiredTigerTestCase, suite_subprocess):
@@ -63,8 +63,7 @@ class test_txn05(wttest.WiredTigerTestCase, suite_subprocess):
]
txn1s = [('t1c', dict(txn1='commit')), ('t1r', dict(txn1='rollback'))]
- scenarios = number_scenarios(multiply_scenarios('.', types, op1s, txn1s))
- # scenarios = number_scenarios(multiply_scenarios('.', types, op1s, txn1s))[:3]
+ scenarios = make_scenarios(types, op1s, txn1s)
# Overrides WiredTigerTestCase
def setUpConnectionOpen(self, dir):
self.home = dir
diff --git a/test/suite/test_txn06.py b/test/suite/test_txn06.py
index 9c1d0335d47..e4636e40e2e 100644
--- a/test/suite/test_txn06.py
+++ b/test/suite/test_txn06.py
@@ -30,7 +30,6 @@
# Transactions: test long-running snapshots
from suite_subprocess import suite_subprocess
-from wtscenario import multiply_scenarios, number_scenarios
from helper import simple_populate
import wiredtiger, wttest
diff --git a/test/suite/test_txn07.py b/test/suite/test_txn07.py
index f74120e3590..8dd8238343d 100644
--- a/test/suite/test_txn07.py
+++ b/test/suite/test_txn07.py
@@ -33,7 +33,7 @@
import fnmatch, os, shutil, run, time
from suite_subprocess import suite_subprocess
from wiredtiger import stat
-from wtscenario import multiply_scenarios, number_scenarios
+from wtscenario import make_scenarios
import wttest
class test_txn07(wttest.WiredTigerTestCase, suite_subprocess):
@@ -70,8 +70,7 @@ class test_txn07(wttest.WiredTigerTestCase, suite_subprocess):
('none', dict(compress='')),
]
- scenarios = number_scenarios(multiply_scenarios('.', types, op1s, txn1s,
- compress))
+ scenarios = make_scenarios(types, op1s, txn1s, compress)
# Overrides WiredTigerTestCase
def setUpConnectionOpen(self, dir):
self.home = dir
diff --git a/test/suite/test_txn08.py b/test/suite/test_txn08.py
index 36253856285..f0cdf08df07 100644
--- a/test/suite/test_txn08.py
+++ b/test/suite/test_txn08.py
@@ -33,7 +33,6 @@
import fnmatch, os, shutil, run, time
from suite_subprocess import suite_subprocess
from wiredtiger import stat
-from wtscenario import multiply_scenarios, number_scenarios
import wttest
class test_txn08(wttest.WiredTigerTestCase, suite_subprocess):
diff --git a/test/suite/test_txn09.py b/test/suite/test_txn09.py
index f536d65205d..cfad8270ab1 100644
--- a/test/suite/test_txn09.py
+++ b/test/suite/test_txn09.py
@@ -32,7 +32,7 @@
import fnmatch, os, shutil, time
from suite_subprocess import suite_subprocess
-from wtscenario import multiply_scenarios, number_scenarios, prune_scenarios
+from wtscenario import make_scenarios
import wttest
class test_txn09(wttest.WiredTigerTestCase, suite_subprocess):
@@ -73,13 +73,12 @@ class test_txn09(wttest.WiredTigerTestCase, suite_subprocess):
txn3s = [('t3c', dict(txn3='commit')), ('t3r', dict(txn3='rollback'))]
txn4s = [('t4c', dict(txn4='commit')), ('t4r', dict(txn4='rollback'))]
- all_scenarios = multiply_scenarios('.', types,
- op1s, txn1s, op2s, txn2s, op3s, txn3s, op4s, txn4s)
-
# This test generates thousands of potential scenarios.
# For default runs, we'll use a small subset of them, for
# long runs (when --long is set) we'll set a much larger limit.
- scenarios = number_scenarios(prune_scenarios(all_scenarios, 20, 5000))
+ scenarios = make_scenarios(types,
+ op1s, txn1s, op2s, txn2s, op3s, txn3s, op4s, txn4s,
+ prune=20, prunelong=5000)
# Overrides WiredTigerTestCase
def setUpConnectionOpen(self, dir):
diff --git a/test/suite/test_txn10.py b/test/suite/test_txn10.py
index cf9c11dd4ab..a4745e60066 100644
--- a/test/suite/test_txn10.py
+++ b/test/suite/test_txn10.py
@@ -32,7 +32,6 @@
import fnmatch, os, shutil, time
from suite_subprocess import suite_subprocess
-from wtscenario import multiply_scenarios, number_scenarios, prune_scenarios
import wttest
class test_txn10(wttest.WiredTigerTestCase, suite_subprocess):
diff --git a/test/suite/test_txn12.py b/test/suite/test_txn12.py
index 8ae9df33990..32c058bea85 100644
--- a/test/suite/test_txn12.py
+++ b/test/suite/test_txn12.py
@@ -29,7 +29,6 @@
import wiredtiger, wttest
from suite_subprocess import suite_subprocess
from wiredtiger import stat
-from wtscenario import multiply_scenarios, number_scenarios
# test_txn12.py
# test of commit following failed op in a read only transaction.
diff --git a/test/suite/test_txn13.py b/test/suite/test_txn13.py
index dd6a6dbcd6d..ae0250c06e8 100644
--- a/test/suite/test_txn13.py
+++ b/test/suite/test_txn13.py
@@ -33,7 +33,7 @@
#import fnmatch, os, shutil, run, time
from suite_subprocess import suite_subprocess
-from wtscenario import check_scenarios
+from wtscenario import make_scenarios
import wiredtiger, wttest
class test_txn13(wttest.WiredTigerTestCase, suite_subprocess):
@@ -43,7 +43,7 @@ class test_txn13(wttest.WiredTigerTestCase, suite_subprocess):
nops = 1024
create_params = 'key_format=i,value_format=S'
- scenarios = check_scenarios([
+ scenarios = make_scenarios([
('1gb', dict(expect_err=False, valuesize=1048576)),
('2gb', dict(expect_err=False, valuesize=2097152)),
('4gb', dict(expect_err=True, valuesize=4194304))
diff --git a/test/suite/test_txn14.py b/test/suite/test_txn14.py
index 371f4402567..f9ccabaab8b 100644
--- a/test/suite/test_txn14.py
+++ b/test/suite/test_txn14.py
@@ -32,7 +32,7 @@
import fnmatch, os, shutil, time
from suite_subprocess import suite_subprocess
-from wtscenario import multiply_scenarios, number_scenarios, prune_scenarios
+from wtscenario import make_scenarios
import wttest
class test_txn14(wttest.WiredTigerTestCase, suite_subprocess):
@@ -47,7 +47,7 @@ class test_txn14(wttest.WiredTigerTestCase, suite_subprocess):
('sync', dict(sync='on')),
('bg', dict(sync='background')),
]
- scenarios = multiply_scenarios('.', sync_list)
+ scenarios = make_scenarios(sync_list)
def simulate_crash_restart(self, olddir, newdir):
''' Simulate a crash from olddir and restart in newdir. '''
diff --git a/test/suite/test_txn15.py b/test/suite/test_txn15.py
index 809dce4ebfa..c061c093b02 100644
--- a/test/suite/test_txn15.py
+++ b/test/suite/test_txn15.py
@@ -33,7 +33,7 @@
import fnmatch, os, shutil, time
from suite_subprocess import suite_subprocess
from wiredtiger import stat
-from wtscenario import multiply_scenarios, number_scenarios, prune_scenarios
+from wtscenario import make_scenarios
import wttest
class test_txn15(wttest.WiredTigerTestCase, suite_subprocess):
@@ -71,7 +71,7 @@ class test_txn15(wttest.WiredTigerTestCase, suite_subprocess):
('c_none', dict(commit_sync=None)),
('c_off', dict(commit_sync='sync=off')),
]
- scenarios = multiply_scenarios('.', conn_sync_enabled, conn_sync_method,
+ scenarios = make_scenarios(conn_sync_enabled, conn_sync_method,
begin_sync, commit_sync)
# Given the different configuration settings determine if this group
diff --git a/test/suite/test_upgrade.py b/test/suite/test_upgrade.py
index 357e437f14d..e4f92f8f8d8 100644
--- a/test/suite/test_upgrade.py
+++ b/test/suite/test_upgrade.py
@@ -29,14 +29,14 @@
import os, time
import wiredtiger, wttest
from helper import complex_populate, simple_populate
-from wtscenario import check_scenarios
+from wtscenario import make_scenarios
# test_upgrade.py
# session level upgrade operation
class test_upgrade(wttest.WiredTigerTestCase):
name = 'test_upgrade'
- scenarios = check_scenarios([
+ scenarios = make_scenarios([
('file', dict(uri='file:')),
('table', dict(uri='table:'))
])
diff --git a/test/suite/test_util02.py b/test/suite/test_util02.py
index 475e856052a..421b0104484 100644
--- a/test/suite/test_util02.py
+++ b/test/suite/test_util02.py
@@ -29,7 +29,7 @@
import string, os
import wiredtiger, wttest
from suite_subprocess import suite_subprocess
-from wtscenario import check_scenarios
+from wtscenario import make_scenarios
from helper import complex_populate
# test_util02.py
@@ -44,7 +44,7 @@ class test_util02(wttest.WiredTigerTestCase, suite_subprocess):
nentries = 1000
stringclass = ''.__class__
- scenarios = check_scenarios([
+ scenarios = make_scenarios([
('SS', dict(key_format='S',value_format='S')),
('rS', dict(key_format='r',value_format='S')),
('ri', dict(key_format='r',value_format='i')),
diff --git a/test/suite/test_util03.py b/test/suite/test_util03.py
index c3ea48b8f5e..e341c79ff9e 100644
--- a/test/suite/test_util03.py
+++ b/test/suite/test_util03.py
@@ -28,7 +28,7 @@
from suite_subprocess import suite_subprocess
import wiredtiger, wttest
-from wtscenario import check_scenarios
+from wtscenario import make_scenarios
# test_util03.py
# Utilities: wt create
@@ -36,7 +36,7 @@ class test_util03(wttest.WiredTigerTestCase, suite_subprocess):
tablename = 'test_util03.a'
nentries = 1000
- scenarios = check_scenarios([
+ scenarios = make_scenarios([
('none', dict(key_format=None,value_format=None)),
('SS', dict(key_format='S',value_format='S')),
('rS', dict(key_format='r',value_format='S')),
diff --git a/test/suite/test_util13.py b/test/suite/test_util13.py
index 222f42cd7f1..9804dc700ba 100644
--- a/test/suite/test_util13.py
+++ b/test/suite/test_util13.py
@@ -33,7 +33,7 @@ import itertools, wiredtiger, wttest
from helper import complex_populate_cgconfig, complex_populate_cgconfig_lsm
from helper import simple_populate
from helper import complex_populate_check, simple_populate_check
-from wtscenario import multiply_scenarios, number_scenarios
+from wtscenario import make_scenarios
# test_util13.py
# Utilities: wt dump, as well as the dump cursor
@@ -73,7 +73,7 @@ class test_util13(wttest.WiredTigerTestCase, suite_subprocess):
cfg='merge_max=5')),
]
- scenarios = number_scenarios(multiply_scenarios('.', types))
+ scenarios = make_scenarios(types)
def compare_config(self, expected_cfg, actual_cfg):
# Replace '(' characters so configuration groups don't break parsing.
diff --git a/test/suite/wtscenario.py b/test/suite/wtscenario.py
index 7fad7c228fb..8576b3ac876 100644
--- a/test/suite/wtscenario.py
+++ b/test/suite/wtscenario.py
@@ -64,11 +64,37 @@ def log2chr(val):
megabyte = 1024 * 1024
+def make_scenarios(*args, **kwargs):
+ """
+ The standard way to create scenarios for WT tests.
+ Scenarios can be combined by listing them all as arguments.
+ A final prune= and/or prunelong= argument may be given that
+ forces the list of entries in the scenario to be pruned.
+ The result is a (combined) scenario that has been checked
+ for name duplicates and has been given names and numbers.
+ """
+ scenes = multiply_scenarios('.', *args)
+ pruneval = None
+ prunelong = None
+ for key in kwargs:
+ if key == 'prune':
+ pruneval = kwargs[key]
+ elif key == 'prunelong':
+ prunelong = kwargs[key]
+ else:
+ raise AssertionError(
+ 'make_scenarios: unexpected named arg: ' + key)
+ if pruneval != None or prunelong != None:
+ pruneval = pruneval if pruneval != None else -1
+ prunelong = prunelong if prunelong != None else -1
+ scenes = prune_scenarios(scenes, pruneval, prunelong)
+ return number_scenarios(scenes)
+
def check_scenarios(scenes):
"""
- Make sure all scenarios have unique names
+ Make sure all scenarios have unique case insensitive names
"""
- assert len(scenes) == len(dict(scenes))
+ assert len(scenes) == len(dict((k.lower(), v) for k, v in scenes))
return scenes
def multiply_scenarios(sep, *args):
@@ -81,8 +107,8 @@ def multiply_scenarios(sep, *args):
result = scenes
else:
total = []
- for scena in scenes:
- for scenb in result:
+ for scena in result:
+ for scenb in scenes:
# Create a merged scenario with a concatenated name
name = scena[0] + sep + scenb[0]
tdict = {}
@@ -235,7 +261,7 @@ class wtscenario:
scen.lmax = lmax
scen.cache_size = cache
s.append((scen.shortName(), dict(session_create_scenario=scen)))
- return s
+ return make_scenarios(s)
def shortName(self):
"""
diff --git a/test/suite/wttest.py b/test/suite/wttest.py
index 9e430fcdba7..788dd5d0307 100644
--- a/test/suite/wttest.py
+++ b/test/suite/wttest.py
@@ -212,8 +212,8 @@ class WiredTigerTestCase(unittest.TestCase):
# help distinguish tests.
scen = ''
if hasattr(self, 'scenario_number') and hasattr(self, 'scenario_name'):
- scen = '(scenario ' + str(self.scenario_number) + \
- ': ' + self.scenario_name + ')'
+ scen = ' -s ' + str(self.scenario_number) + \
+ ' (' + self.scenario_name + ')'
return self.simpleName() + scen
def simpleName(self):
@@ -293,6 +293,8 @@ class WiredTigerTestCase(unittest.TestCase):
raise Exception(self.testdir + ": cannot remove directory")
os.makedirs(self.testdir)
os.chdir(self.testdir)
+ with open('testname.txt', 'w+') as namefile:
+ namefile.write(str(self) + '\n')
self.fdSetUp()
# tearDown needs a conn field, set it here in case the open fails.
self.conn = None