Update binding tester to use python3
This commit is contained in:
parent
6100d3274d
commit
aa0d99c15e
|
@ -1,4 +1,4 @@
|
|||
#!/usr/bin/env python
|
||||
#!/usr/bin/env python3
|
||||
#
|
||||
# bindingtester.py
|
||||
#
|
||||
|
@ -38,15 +38,13 @@ from functools import reduce
|
|||
|
||||
sys.path[:0] = [os.path.join(os.path.dirname(__file__), '..')]
|
||||
|
||||
import bindingtester
|
||||
|
||||
from bindingtester import FDB_API_VERSION
|
||||
from bindingtester import Result
|
||||
|
||||
from bindingtester import util
|
||||
from bindingtester.tests import Test, InstructionSet
|
||||
|
||||
from known_testers import Tester
|
||||
from bindingtester.known_testers import Tester
|
||||
|
||||
import fdb
|
||||
import fdb.tuple
|
||||
|
@ -110,9 +108,10 @@ class ResultSet(object):
|
|||
|
||||
# Fill in 'None' values for testers that didn't produce a result and generate an output string describing the results
|
||||
all_results = {i: results[i] if i in results else None for i in range(len(self.tester_results))}
|
||||
result_str = '\n'.join([' %-*s - %s' % (name_length, self.tester_results.keys()[i], r) for i, r in all_results.items()])
|
||||
result_keys = list(self.tester_results.keys())
|
||||
result_str = '\n'.join([' %-*s - %s' % (name_length, result_keys[i], r) for i, r in all_results.items()])
|
||||
|
||||
result_list = results.values()
|
||||
result_list = list(results.values())
|
||||
|
||||
# If any of our results matches the global error filter, we ignore the result
|
||||
if any(r.matches_global_error_filter(self.specification) for r in result_list):
|
||||
|
@ -264,19 +263,19 @@ class TestRunner(object):
|
|||
|
||||
if self.args.concurrency == 1:
|
||||
self.test.setup(self.args)
|
||||
test_instructions = {fdb.Subspace((self.args.instruction_prefix,)): self.test.generate(self.args, 0)}
|
||||
test_instructions = {fdb.Subspace((bytes(self.args.instruction_prefix, 'utf-8'),)): self.test.generate(self.args, 0)}
|
||||
else:
|
||||
test_instructions = {}
|
||||
main_thread = InstructionSet()
|
||||
for i in range(self.args.concurrency):
|
||||
# thread_spec = fdb.Subspace(('thread_spec', i))
|
||||
thread_spec = 'thread_spec%d' % i
|
||||
thread_spec = b'thread_spec%d' % i
|
||||
main_thread.push_args(thread_spec)
|
||||
main_thread.append('START_THREAD')
|
||||
self.test.setup(self.args)
|
||||
test_instructions[fdb.Subspace((thread_spec,))] = self.test.generate(self.args, i)
|
||||
|
||||
test_instructions[fdb.Subspace((self.args.instruction_prefix,))] = main_thread
|
||||
test_instructions[fdb.Subspace((bytes(self.args.instruction_prefix, 'utf-8'),))] = main_thread
|
||||
|
||||
return test_instructions
|
||||
|
||||
|
|
|
@ -186,7 +186,7 @@ function runScriptedTest()
|
|||
else
|
||||
local test="${1}"
|
||||
|
||||
if ! runCommand "Scripting ${test} ..." 'python' '-u' "${TESTFILE}" "${test}" --test-name scripted --logging-level "${LOGLEVEL}"
|
||||
if ! runCommand "Scripting ${test} ..." 'python3' '-u' "${TESTFILE}" "${test}" --test-name scripted --logging-level "${LOGLEVEL}"
|
||||
then
|
||||
let status="${status} + 1"
|
||||
fi
|
||||
|
@ -211,25 +211,25 @@ function runTest()
|
|||
fi
|
||||
|
||||
# API
|
||||
if ([[ "${TESTINDEX}" -eq 0 ]] || [[ "${TESTINDEX}" -eq "${TESTTOTAL}" ]]) && ([[ "${BREAKONERROR}" -eq 0 ]] || [[ "${status}" -eq 0 ]]) && ! runCommand " ${TESTTYPES[0]}" 'python' '-u' "${TESTFILE}" "${test}" --test-name api --compare --num-ops "${OPERATIONS}" --logging-level "${LOGLEVEL}"
|
||||
if ([[ "${TESTINDEX}" -eq 0 ]] || [[ "${TESTINDEX}" -eq "${TESTTOTAL}" ]]) && ([[ "${BREAKONERROR}" -eq 0 ]] || [[ "${status}" -eq 0 ]]) && ! runCommand " ${TESTTYPES[0]}" 'python3' '-u' "${TESTFILE}" "${test}" --test-name api --compare --num-ops "${OPERATIONS}" --logging-level "${LOGLEVEL}"
|
||||
then
|
||||
let status="${status} + 1"
|
||||
fi
|
||||
|
||||
# Concurrent API
|
||||
if ([[ "${TESTINDEX}" -eq 1 ]] || [[ "${TESTINDEX}" -eq "${TESTTOTAL}" ]]) && ([[ "${BREAKONERROR}" -eq 0 ]] || [[ "${status}" -eq 0 ]]) && ! runCommand " ${TESTTYPES[1]}" 'python' '-u' "${TESTFILE}" "${test}" --test-name api --concurrency "${CONCURRENCY}" --num-ops "${OPERATIONS}" --logging-level "${LOGLEVEL}"
|
||||
if ([[ "${TESTINDEX}" -eq 1 ]] || [[ "${TESTINDEX}" -eq "${TESTTOTAL}" ]]) && ([[ "${BREAKONERROR}" -eq 0 ]] || [[ "${status}" -eq 0 ]]) && ! runCommand " ${TESTTYPES[1]}" 'python3' '-u' "${TESTFILE}" "${test}" --test-name api --concurrency "${CONCURRENCY}" --num-ops "${OPERATIONS}" --logging-level "${LOGLEVEL}"
|
||||
then
|
||||
let status="${status} + 1"
|
||||
fi
|
||||
|
||||
# Directory
|
||||
if ([[ "${TESTINDEX}" -eq 2 ]] || [[ "${TESTINDEX}" -eq "${TESTTOTAL}" ]]) && ([[ "${BREAKONERROR}" -eq 0 ]] || [[ "${status}" -eq 0 ]]) && ! runCommand " ${TESTTYPES[2]}" 'python' '-u' "${TESTFILE}" "${test}" --test-name directory --compare --num-ops "${OPERATIONS}" --logging-level "${LOGLEVEL}"
|
||||
if ([[ "${TESTINDEX}" -eq 2 ]] || [[ "${TESTINDEX}" -eq "${TESTTOTAL}" ]]) && ([[ "${BREAKONERROR}" -eq 0 ]] || [[ "${status}" -eq 0 ]]) && ! runCommand " ${TESTTYPES[2]}" 'python3' '-u' "${TESTFILE}" "${test}" --test-name directory --compare --num-ops "${OPERATIONS}" --logging-level "${LOGLEVEL}"
|
||||
then
|
||||
let status="${status} + 1"
|
||||
fi
|
||||
|
||||
# Directory HCA
|
||||
if ([[ "${TESTINDEX}" -eq 3 ]] || [[ "${TESTINDEX}" -eq "${TESTTOTAL}" ]]) && ([[ "${BREAKONERROR}" -eq 0 ]] || [[ "${status}" -eq 0 ]]) && ! runCommand " ${TESTTYPES[3]}" 'python' '-u' "${TESTFILE}" "${test}" --test-name directory_hca --concurrency "${CONCURRENCY}" --num-ops "${HCAOPERATIONS}" --logging-level "${LOGLEVEL}"
|
||||
if ([[ "${TESTINDEX}" -eq 3 ]] || [[ "${TESTINDEX}" -eq "${TESTTOTAL}" ]]) && ([[ "${BREAKONERROR}" -eq 0 ]] || [[ "${status}" -eq 0 ]]) && ! runCommand " ${TESTTYPES[3]}" 'python3' '-u' "${TESTFILE}" "${test}" --test-name directory_hca --concurrency "${CONCURRENCY}" --num-ops "${HCAOPERATIONS}" --logging-level "${LOGLEVEL}"
|
||||
then
|
||||
let status="${status} + 1"
|
||||
fi
|
||||
|
|
|
@ -37,8 +37,8 @@ class ResultSpecification(object):
|
|||
self.ordering_index = ordering_index
|
||||
|
||||
if global_error_filter is not None:
|
||||
error_str = '|'.join(['%d' % e for e in global_error_filter])
|
||||
self.error_regex = re.compile(r'\x01+ERROR\x00\xff*\x01' + error_str + r'\x00')
|
||||
error_str = b'|'.join([b'%d' % e for e in global_error_filter])
|
||||
self.error_regex = re.compile(rb'\x01+ERROR\x00\xff*\x01' + error_str + rb'\x00')
|
||||
else:
|
||||
self.error_regex = None
|
||||
|
||||
|
@ -90,7 +90,7 @@ class Test(object):
|
|||
def versionstamp_value(self, raw_bytes, version_pos=0):
|
||||
if hasattr(self, 'api_version') and self.api_version < 520:
|
||||
if version_pos != 0:
|
||||
raise ValueError("unable to set non-zero version position before 520 in values")
|
||||
raise ValueError('unable to set non-zero version position before 520 in values')
|
||||
return raw_bytes
|
||||
else:
|
||||
return raw_bytes + struct.pack('<L', version_pos)
|
||||
|
@ -109,7 +109,7 @@ class Instruction(object):
|
|||
def __init__(self, operation):
|
||||
self.operation = operation
|
||||
self.argument = None
|
||||
self.value = fdb.tuple.pack((unicode(self.operation),))
|
||||
self.value = fdb.tuple.pack((self.operation,))
|
||||
|
||||
def to_value(self):
|
||||
return self.value
|
||||
|
@ -125,7 +125,7 @@ class PushInstruction(Instruction):
|
|||
def __init__(self, argument):
|
||||
self.operation = 'PUSH'
|
||||
self.argument = argument
|
||||
self.value = fdb.tuple.pack((unicode("PUSH"), argument))
|
||||
self.value = fdb.tuple.pack(('PUSH', argument))
|
||||
|
||||
def __str__(self):
|
||||
return '%s %s' % (self.operation, self.argument)
|
||||
|
|
|
@ -171,8 +171,8 @@ class ApiTest(Test):
|
|||
op_choices += resets
|
||||
op_choices += txn_sizes
|
||||
|
||||
idempotent_atomic_ops = [u'BIT_AND', u'BIT_OR', u'MAX', u'MIN', u'BYTE_MIN', u'BYTE_MAX']
|
||||
atomic_ops = idempotent_atomic_ops + [u'ADD', u'BIT_XOR', u'APPEND_IF_FITS']
|
||||
idempotent_atomic_ops = ['BIT_AND', 'BIT_OR', 'MAX', 'MIN', 'BYTE_MIN', 'BYTE_MAX']
|
||||
atomic_ops = idempotent_atomic_ops + ['ADD', 'BIT_XOR', 'APPEND_IF_FITS']
|
||||
|
||||
if args.concurrency > 1:
|
||||
self.max_keys = random.randint(100, 1000)
|
||||
|
@ -357,26 +357,26 @@ class ApiTest(Test):
|
|||
|
||||
split = random.randint(0, 70)
|
||||
prefix = self.random.random_string(20 + split)
|
||||
if prefix.endswith('\xff'):
|
||||
if prefix.endswith(b'\xff'):
|
||||
# Necessary to make sure that the SET_VERSIONSTAMPED_VALUE check
|
||||
# correctly finds where the version is supposed to fit in.
|
||||
prefix += '\x00'
|
||||
prefix += b'\x00'
|
||||
suffix = self.random.random_string(70 - split)
|
||||
rand_str2 = prefix + fdb.tuple.Versionstamp._UNSET_TR_VERSION + suffix
|
||||
key3 = self.versionstamped_keys.pack() + rand_str2
|
||||
index = len(self.versionstamped_keys.pack()) + len(prefix)
|
||||
key3 = self.versionstamp_key(key3, index)
|
||||
|
||||
instructions.push_args(u'SET_VERSIONSTAMPED_VALUE',
|
||||
instructions.push_args('SET_VERSIONSTAMPED_VALUE',
|
||||
key1,
|
||||
self.versionstamp_value(fdb.tuple.Versionstamp._UNSET_TR_VERSION + rand_str2))
|
||||
instructions.append('ATOMIC_OP')
|
||||
|
||||
if args.api_version >= 520:
|
||||
instructions.push_args(u'SET_VERSIONSTAMPED_VALUE', key2, self.versionstamp_value(rand_str2, len(prefix)))
|
||||
instructions.push_args('SET_VERSIONSTAMPED_VALUE', key2, self.versionstamp_value(rand_str2, len(prefix)))
|
||||
instructions.append('ATOMIC_OP')
|
||||
|
||||
instructions.push_args(u'SET_VERSIONSTAMPED_KEY', key3, rand_str1)
|
||||
instructions.push_args('SET_VERSIONSTAMPED_KEY', key3, rand_str1)
|
||||
instructions.append('ATOMIC_OP')
|
||||
self.can_use_key_selectors = False
|
||||
|
||||
|
@ -467,17 +467,17 @@ class ApiTest(Test):
|
|||
|
||||
instructions.push_args(rand_str)
|
||||
test_util.to_front(instructions, 1)
|
||||
instructions.push_args(u'SET_VERSIONSTAMPED_KEY')
|
||||
instructions.push_args('SET_VERSIONSTAMPED_KEY')
|
||||
instructions.append('ATOMIC_OP')
|
||||
|
||||
if self.api_version >= 520:
|
||||
version_value_key_2 = self.versionstamped_values_2.pack((rand_str,))
|
||||
versionstamped_value = self.versionstamp_value(fdb.tuple.pack(tup), first_incomplete - len(prefix))
|
||||
instructions.push_args(u'SET_VERSIONSTAMPED_VALUE', version_value_key_2, versionstamped_value)
|
||||
instructions.push_args('SET_VERSIONSTAMPED_VALUE', version_value_key_2, versionstamped_value)
|
||||
instructions.append('ATOMIC_OP')
|
||||
|
||||
version_value_key = self.versionstamped_values.pack((rand_str,))
|
||||
instructions.push_args(u'SET_VERSIONSTAMPED_VALUE', version_value_key,
|
||||
instructions.push_args('SET_VERSIONSTAMPED_VALUE', version_value_key,
|
||||
self.versionstamp_value(fdb.tuple.Versionstamp._UNSET_TR_VERSION + fdb.tuple.pack(tup)))
|
||||
instructions.append('ATOMIC_OP')
|
||||
self.can_use_key_selectors = False
|
||||
|
@ -500,8 +500,8 @@ class ApiTest(Test):
|
|||
|
||||
# Use SUB to test if integers are correctly unpacked
|
||||
elif op == 'SUB':
|
||||
a = self.random.random_int() / 2
|
||||
b = self.random.random_int() / 2
|
||||
a = self.random.random_int() // 2
|
||||
b = self.random.random_int() // 2
|
||||
instructions.push_args(0, a, b)
|
||||
instructions.append(op)
|
||||
instructions.push_args(1)
|
||||
|
@ -566,7 +566,7 @@ class ApiTest(Test):
|
|||
next_begin = None
|
||||
incorrect_versionstamps = 0
|
||||
for k, v in tr.get_range(begin_key, self.versionstamped_values.range().stop, limit=limit):
|
||||
next_begin = k + '\x00'
|
||||
next_begin = k + b'\x00'
|
||||
random_id = self.versionstamped_values.unpack(k)[0]
|
||||
versioned_value = v[10:].replace(fdb.tuple.Versionstamp._UNSET_TR_VERSION, v[:10], 1)
|
||||
|
||||
|
|
|
@ -54,13 +54,13 @@ class DirectoryTest(Test):
|
|||
|
||||
def generate_layer(self):
|
||||
if random.random() < 0.7:
|
||||
return ''
|
||||
return b''
|
||||
else:
|
||||
choice = random.randint(0, 3)
|
||||
if choice == 0:
|
||||
return 'partition'
|
||||
return b'partition'
|
||||
elif choice == 1:
|
||||
return 'test_layer'
|
||||
return b'test_layer'
|
||||
else:
|
||||
return self.random.random_string(random.randint(0, 5))
|
||||
|
||||
|
@ -98,7 +98,7 @@ class DirectoryTest(Test):
|
|||
|
||||
instructions.append('NEW_TRANSACTION')
|
||||
|
||||
default_path = unicode('default%d' % self.next_path)
|
||||
default_path = 'default%d' % self.next_path
|
||||
self.next_path += 1
|
||||
self.dir_list = directory_util.setup_directories(instructions, default_path, self.random)
|
||||
self.root = self.dir_list[0]
|
||||
|
@ -114,7 +114,7 @@ class DirectoryTest(Test):
|
|||
instructions.push_args(layer)
|
||||
instructions.push_args(*test_util.with_length(path))
|
||||
instructions.append('DIRECTORY_OPEN')
|
||||
self.dir_list.append(self.root.add_child(path, DirectoryStateTreeNode(True, True, has_known_prefix=False, is_partition=(layer=='partition'))))
|
||||
self.dir_list.append(self.root.add_child(path, DirectoryStateTreeNode(True, True, has_known_prefix=False, is_partition=(layer==b'partition'))))
|
||||
# print('%d. Selected %s, dir=%s, dir_id=%s, has_known_prefix=%s, dir_list_len=%d' \
|
||||
# % (len(instructions), 'DIRECTORY_OPEN', repr(self.dir_index), self.dir_list[-1].dir_id, False, len(self.dir_list)-1))
|
||||
|
||||
|
@ -199,7 +199,7 @@ class DirectoryTest(Test):
|
|||
|
||||
elif root_op == 'DIRECTORY_CREATE':
|
||||
layer = self.generate_layer()
|
||||
is_partition = layer == 'partition'
|
||||
is_partition = layer == b'partition'
|
||||
|
||||
prefix = generate_prefix(require_unique=is_partition and args.concurrency==1, is_partition=is_partition, min_length=0)
|
||||
|
||||
|
@ -256,7 +256,7 @@ class DirectoryTest(Test):
|
|||
self.dir_list.append(dir_entry.add_child(new_path, child_entry))
|
||||
|
||||
# Make sure that the default directory subspace still exists after moving the specified directory
|
||||
if dir_entry.state.is_directory and not dir_entry.state.is_subspace and old_path == (u'',):
|
||||
if dir_entry.state.is_directory and not dir_entry.state.is_subspace and old_path == ('',):
|
||||
self.ensure_default_directory_subspace(instructions, default_path)
|
||||
|
||||
elif root_op == 'DIRECTORY_MOVE_TO':
|
||||
|
@ -291,7 +291,7 @@ class DirectoryTest(Test):
|
|||
dir_entry.delete(path)
|
||||
|
||||
# Make sure that the default directory subspace still exists after removing the specified directory
|
||||
if path == () or (dir_entry.state.is_directory and not dir_entry.state.is_subspace and path == (u'',)):
|
||||
if path == () or (dir_entry.state.is_directory and not dir_entry.state.is_subspace and path == ('',)):
|
||||
self.ensure_default_directory_subspace(instructions, default_path)
|
||||
|
||||
elif root_op == 'DIRECTORY_LIST' or root_op == 'DIRECTORY_EXISTS':
|
||||
|
@ -392,15 +392,15 @@ def generate_path(min_length=0):
|
|||
path = ()
|
||||
for i in range(length):
|
||||
if random.random() < 0.05:
|
||||
path = path + (u'',)
|
||||
path = path + ('',)
|
||||
else:
|
||||
path = path + (random.choice([u'1', u'2', u'3']),)
|
||||
path = path + (random.choice(['1', '2', '3']),)
|
||||
|
||||
return path
|
||||
|
||||
|
||||
def generate_prefix(require_unique=False, is_partition=False, min_length=1):
|
||||
fixed_prefix = 'abcdefg'
|
||||
fixed_prefix = b'abcdefg'
|
||||
if not require_unique and min_length == 0 and random.random() < 0.8:
|
||||
return None
|
||||
elif require_unique or is_partition or min_length > len(fixed_prefix) or random.random() < 0.5:
|
||||
|
@ -409,13 +409,13 @@ def generate_prefix(require_unique=False, is_partition=False, min_length=1):
|
|||
|
||||
length = random.randint(min_length, min_length+5)
|
||||
if length == 0:
|
||||
return ''
|
||||
return b''
|
||||
|
||||
if not is_partition:
|
||||
first = chr(random.randint(ord('\x1d'), 255) % 255)
|
||||
return first + ''.join(chr(random.randrange(0, 256)) for i in range(0, length - 1))
|
||||
first = random.randint(ord('\x1d'), 255) % 255
|
||||
return bytes([first] + [random.randrange(0, 256) for i in range(0, length - 1)])
|
||||
else:
|
||||
return ''.join(chr(random.randrange(ord('\x02'), ord('\x14'))) for i in range(0, length))
|
||||
return bytes([random.randrange(ord('\x02'), ord('\x14')) for i in range(0, length)])
|
||||
else:
|
||||
prefix = fixed_prefix
|
||||
generated = prefix[0:random.randrange(min_length, len(prefix))]
|
||||
|
|
|
@ -40,7 +40,7 @@ class DirectoryHcaTest(Test):
|
|||
|
||||
def setup(self, args):
|
||||
self.random = test_util.RandomGenerator(args.max_int_bits, args.api_version, args.types)
|
||||
self.transactions = ['tr%d' % i for i in range(3)] # SOMEDAY: parameterize this number?
|
||||
self.transactions = [b'tr%d' % i for i in range(3)] # SOMEDAY: parameterize this number?
|
||||
self.barrier_num = 0
|
||||
|
||||
self.max_directories_per_transaction = 30
|
||||
|
@ -59,7 +59,7 @@ class DirectoryHcaTest(Test):
|
|||
|
||||
def barrier(self, instructions, thread_number, thread_ending=False):
|
||||
if not thread_ending:
|
||||
instructions.push_args(self.coordination[(self.barrier_num + 1)][thread_number].key(), '')
|
||||
instructions.push_args(self.coordination[(self.barrier_num + 1)][thread_number].key(), b'')
|
||||
instructions.append('SET_DATABASE')
|
||||
instructions.append('WAIT_FUTURE')
|
||||
|
||||
|
@ -76,7 +76,7 @@ class DirectoryHcaTest(Test):
|
|||
|
||||
instructions.append('NEW_TRANSACTION')
|
||||
|
||||
default_path = unicode('default%d' % self.next_path)
|
||||
default_path = 'default%d' % self.next_path
|
||||
self.next_path += 1
|
||||
dir_list = directory_util.setup_directories(instructions, default_path, self.random)
|
||||
num_dirs = len(dir_list)
|
||||
|
@ -102,7 +102,7 @@ class DirectoryHcaTest(Test):
|
|||
|
||||
for i in range(num_directories):
|
||||
path = (self.random.random_unicode_str(16),)
|
||||
op_args = test_util.with_length(path) + ('', None)
|
||||
op_args = test_util.with_length(path) + (b'', None)
|
||||
directory_util.push_instruction_and_record_prefix(instructions, 'DIRECTORY_CREATE',
|
||||
op_args, path, num_dirs, self.random, self.prefix_log)
|
||||
num_dirs += 1
|
||||
|
@ -121,7 +121,7 @@ class DirectoryHcaTest(Test):
|
|||
def pre_run(self, tr, args):
|
||||
if args.concurrency > 1:
|
||||
for i in range(args.concurrency):
|
||||
tr[self.coordination[0][i]] = ''
|
||||
tr[self.coordination[0][i]] = b''
|
||||
|
||||
def validate(self, db, args):
|
||||
errors = []
|
||||
|
|
|
@ -249,7 +249,7 @@ def run_test():
|
|||
# Test moving an entry
|
||||
assert not entry.state.has_known_prefix
|
||||
assert not entry.state.is_subspace
|
||||
assert entry.state.children.keys() == ['1']
|
||||
assert list(entry.state.children.keys()) == ['1']
|
||||
|
||||
for e in all_entries:
|
||||
validate_dir(e, root)
|
||||
|
|
|
@ -32,25 +32,25 @@ from bindingtester.tests.directory_state_tree import DirectoryStateTreeNode
|
|||
fdb.api_version(FDB_API_VERSION)
|
||||
|
||||
DEFAULT_DIRECTORY_INDEX = 4
|
||||
DEFAULT_DIRECTORY_PREFIX = 'default'
|
||||
DIRECTORY_ERROR_STRING = 'DIRECTORY_ERROR'
|
||||
DEFAULT_DIRECTORY_PREFIX = b'default'
|
||||
DIRECTORY_ERROR_STRING = b'DIRECTORY_ERROR'
|
||||
|
||||
def setup_directories(instructions, default_path, random):
|
||||
# Clients start with the default directory layer in the directory list
|
||||
DirectoryStateTreeNode.reset()
|
||||
dir_list = [DirectoryStateTreeNode.get_layer('\xfe')]
|
||||
dir_list = [DirectoryStateTreeNode.get_layer(b'\xfe')]
|
||||
|
||||
instructions.push_args(0, '\xfe')
|
||||
instructions.push_args(0, b'\xfe')
|
||||
instructions.append('DIRECTORY_CREATE_SUBSPACE')
|
||||
dir_list.append(DirectoryStateTreeNode(False, True))
|
||||
|
||||
instructions.push_args(0, '')
|
||||
instructions.push_args(0, b'')
|
||||
instructions.append('DIRECTORY_CREATE_SUBSPACE')
|
||||
dir_list.append(DirectoryStateTreeNode(False, True))
|
||||
|
||||
instructions.push_args(1, 2, 1)
|
||||
instructions.append('DIRECTORY_CREATE_LAYER')
|
||||
dir_list.append(DirectoryStateTreeNode.get_layer('\xfe'))
|
||||
dir_list.append(DirectoryStateTreeNode.get_layer(b'\xfe'))
|
||||
|
||||
create_default_directory_subspace(instructions, default_path, random)
|
||||
dir_list.append(dir_list[0].add_child((default_path,), DirectoryStateTreeNode(True, True, has_known_prefix=True)))
|
||||
|
@ -67,7 +67,7 @@ def create_default_directory_subspace(instructions, path, random):
|
|||
instructions.push_args(3)
|
||||
instructions.append('DIRECTORY_CHANGE')
|
||||
prefix = random.random_string(16)
|
||||
instructions.push_args(1, path, '', '%s-%s' % (DEFAULT_DIRECTORY_PREFIX, prefix))
|
||||
instructions.push_args(1, path, b'', b'%s-%s' % (DEFAULT_DIRECTORY_PREFIX, prefix))
|
||||
instructions.append('DIRECTORY_CREATE_DATABASE')
|
||||
|
||||
instructions.push_args(DEFAULT_DIRECTORY_INDEX)
|
||||
|
@ -88,14 +88,14 @@ def push_instruction_and_record_prefix(instructions, op, op_args, path, dir_inde
|
|||
instructions.push_args(dir_index)
|
||||
instructions.append('DIRECTORY_CHANGE')
|
||||
|
||||
instructions.push_args(1, '', random.random_string(16), '')
|
||||
instructions.push_args(1, b'', random.random_string(16), b'')
|
||||
instructions.append('DIRECTORY_PACK_KEY')
|
||||
test_util.to_front(instructions, 3) # move the existence result up to the front of the stack
|
||||
|
||||
t = util.subspace_to_tuple(subspace)
|
||||
instructions.push_args(len(t) + 3, *t)
|
||||
|
||||
instructions.append('TUPLE_PACK') # subspace[<exists>][<packed_key>][random.random_string(16)] = ''
|
||||
instructions.append('TUPLE_PACK') # subspace[<exists>][<packed_key>][random.random_string(16)] = b''
|
||||
instructions.append('SET')
|
||||
|
||||
instructions.push_args(DEFAULT_DIRECTORY_INDEX)
|
||||
|
@ -128,7 +128,7 @@ def check_for_duplicate_prefixes(db, subspace):
|
|||
|
||||
|
||||
def validate_hca_state(db):
|
||||
hca = fdb.Subspace(('\xfe', 'hca'), '\xfe')
|
||||
hca = fdb.Subspace((b'\xfe', b'hca'), b'\xfe')
|
||||
counters = hca[0]
|
||||
recent = hca[1]
|
||||
|
||||
|
|
|
@ -62,20 +62,20 @@ class ScriptedTest(Test):
|
|||
test_instructions = ThreadedInstructionSet()
|
||||
main_thread = test_instructions.create_thread()
|
||||
|
||||
foo = [self.workspace.pack(('foo%d' % i,)) for i in range(0, 6)]
|
||||
foo = [self.workspace.pack((b'foo%d' % i,)) for i in range(0, 6)]
|
||||
|
||||
main_thread.append('NEW_TRANSACTION')
|
||||
main_thread.push_args(1020)
|
||||
main_thread.append('ON_ERROR')
|
||||
self.add_result(main_thread, args, 'RESULT_NOT_PRESENT')
|
||||
self.add_result(main_thread, args, b'RESULT_NOT_PRESENT')
|
||||
main_thread.append('GET_READ_VERSION')
|
||||
main_thread.push_args(foo[1], 'bar')
|
||||
main_thread.push_args(foo[1], b'bar')
|
||||
main_thread.append('SET')
|
||||
main_thread.push_args(foo[1])
|
||||
main_thread.append('GET')
|
||||
self.add_result(main_thread, args, 'bar')
|
||||
self.add_result(main_thread, args, b'bar')
|
||||
test_util.blocking_commit(main_thread)
|
||||
self.add_result(main_thread, args, 'RESULT_NOT_PRESENT')
|
||||
self.add_result(main_thread, args, b'RESULT_NOT_PRESENT')
|
||||
|
||||
main_thread.push_args(2000)
|
||||
main_thread.append('ON_ERROR')
|
||||
|
@ -91,39 +91,39 @@ class ScriptedTest(Test):
|
|||
main_thread.append('DUP')
|
||||
main_thread.append('DUP')
|
||||
main_thread.append('GET')
|
||||
self.add_result(main_thread, args, 'bar')
|
||||
self.add_result(main_thread, args, b'bar')
|
||||
main_thread.append('CLEAR')
|
||||
main_thread.append('GET_SNAPSHOT')
|
||||
self.add_result(main_thread, args, 'RESULT_NOT_PRESENT')
|
||||
self.add_result(main_thread, args, b'RESULT_NOT_PRESENT')
|
||||
main_thread.push_args(foo[1])
|
||||
main_thread.append('GET_DATABASE')
|
||||
self.add_result(main_thread, args, 'bar')
|
||||
self.add_result(main_thread, args, b'bar')
|
||||
test_util.blocking_commit(main_thread)
|
||||
self.add_result(main_thread, args, 'RESULT_NOT_PRESENT')
|
||||
self.add_result(main_thread, args, b'RESULT_NOT_PRESENT')
|
||||
|
||||
main_thread.append('SET_READ_VERSION')
|
||||
main_thread.push_args(foo[1])
|
||||
main_thread.append('DUP')
|
||||
main_thread.append('GET')
|
||||
self.add_result(main_thread, args, 'RESULT_NOT_PRESENT')
|
||||
self.add_result(main_thread, args, b'RESULT_NOT_PRESENT')
|
||||
main_thread.append('CLEAR')
|
||||
test_util.blocking_commit(main_thread)
|
||||
self.add_result(main_thread, args, test_util.error_string(1020))
|
||||
|
||||
main_thread.push_args(foo[1])
|
||||
main_thread.append('GET_SNAPSHOT')
|
||||
self.add_result(main_thread, args, 'RESULT_NOT_PRESENT')
|
||||
self.add_result(main_thread, args, b'RESULT_NOT_PRESENT')
|
||||
main_thread.push_args(foo[1])
|
||||
main_thread.append('CLEAR')
|
||||
main_thread.append('COMMIT')
|
||||
main_thread.append('WAIT_FUTURE')
|
||||
self.add_result(main_thread, args, 'RESULT_NOT_PRESENT')
|
||||
self.add_result(main_thread, args, b'RESULT_NOT_PRESENT')
|
||||
main_thread.append('GET_COMMITTED_VERSION')
|
||||
main_thread.append('RESET')
|
||||
main_thread.append('EMPTY_STACK')
|
||||
|
||||
main_thread.append('NEW_TRANSACTION')
|
||||
main_thread.push_args(1, 'bar', foo[1], foo[2], 'bar2', foo[3], 'bar3', foo[4], 'bar4', foo[5], 'bar5')
|
||||
main_thread.push_args(1, b'bar', foo[1], foo[2], b'bar2', foo[3], b'bar3', foo[4], b'bar4', foo[5], b'bar5')
|
||||
main_thread.append('SWAP')
|
||||
main_thread.append('SET')
|
||||
main_thread.append('SET')
|
||||
|
@ -131,112 +131,112 @@ class ScriptedTest(Test):
|
|||
main_thread.append('SET')
|
||||
main_thread.append('SET_DATABASE')
|
||||
test_util.blocking_commit(main_thread)
|
||||
self.add_result(main_thread, args, 'RESULT_NOT_PRESENT')
|
||||
self.add_result(main_thread, args, b'RESULT_NOT_PRESENT')
|
||||
|
||||
main_thread.append('SET_READ_VERSION')
|
||||
main_thread.push_args(foo[2])
|
||||
main_thread.append('GET')
|
||||
self.add_result(main_thread, args, 'RESULT_NOT_PRESENT')
|
||||
self.add_result(main_thread, args, b'RESULT_NOT_PRESENT')
|
||||
|
||||
main_thread.append('NEW_TRANSACTION')
|
||||
main_thread.push_args('', 0, -1, '')
|
||||
main_thread.push_args(b'', 0, -1, b'')
|
||||
main_thread.append('GET_KEY')
|
||||
self.add_result(main_thread, args, '')
|
||||
self.add_result(main_thread, args, b'')
|
||||
|
||||
main_thread.append('NEW_TRANSACTION')
|
||||
main_thread.append('GET_READ_VERSION_SNAPSHOT')
|
||||
main_thread.push_args('random', foo[1], foo[3], 0, 1, 1)
|
||||
main_thread.push_args(b'random', foo[1], foo[3], 0, 1, 1)
|
||||
main_thread.append('POP')
|
||||
main_thread.append('GET_RANGE')
|
||||
self.add_result(main_thread, args, fdb.tuple.pack((foo[2], 'bar2', foo[1], 'bar')))
|
||||
self.add_result(main_thread, args, fdb.tuple.pack((foo[2], b'bar2', foo[1], b'bar')))
|
||||
main_thread.push_args(foo[1], foo[3], 1, 1, 0)
|
||||
main_thread.append('GET_RANGE_SNAPSHOT')
|
||||
self.add_result(main_thread, args, fdb.tuple.pack((foo[2], 'bar2')))
|
||||
self.add_result(main_thread, args, fdb.tuple.pack((foo[2], b'bar2')))
|
||||
main_thread.push_args(foo[1], foo[3], 0, 0, 4)
|
||||
main_thread.append('GET_RANGE_DATABASE')
|
||||
self.add_result(main_thread, args, fdb.tuple.pack((foo[1], 'bar', foo[2], 'bar2')))
|
||||
self.add_result(main_thread, args, fdb.tuple.pack((foo[1], b'bar', foo[2], b'bar2')))
|
||||
test_util.blocking_commit(main_thread)
|
||||
self.add_result(main_thread, args, 'RESULT_NOT_PRESENT')
|
||||
self.add_result(main_thread, args, b'RESULT_NOT_PRESENT')
|
||||
|
||||
main_thread.push_args(foo[3], foo[5])
|
||||
main_thread.append('CLEAR_RANGE')
|
||||
main_thread.push_args(foo[1], 0, 3, '')
|
||||
main_thread.push_args(foo[1], 0, 3, b'')
|
||||
main_thread.append('GET_KEY')
|
||||
self.add_result(main_thread, args, foo[5])
|
||||
main_thread.push_args(foo[1], 1, 2, '')
|
||||
main_thread.push_args(foo[1], 1, 2, b'')
|
||||
main_thread.append('GET_KEY_SNAPSHOT')
|
||||
self.add_result(main_thread, args, foo[5])
|
||||
main_thread.push_args(foo[5], 0, -2, '')
|
||||
main_thread.push_args(foo[5], 0, -2, b'')
|
||||
main_thread.append('GET_KEY_DATABASE')
|
||||
self.add_result(main_thread, args, foo[2])
|
||||
main_thread.push_args(self.workspace.key(), 2, 0, 2)
|
||||
main_thread.append('GET_RANGE_STARTS_WITH')
|
||||
self.add_result(main_thread, args, fdb.tuple.pack((foo[1], 'bar', foo[2], 'bar2')))
|
||||
self.add_result(main_thread, args, fdb.tuple.pack((foo[1], b'bar', foo[2], b'bar2')))
|
||||
main_thread.push_args(self.workspace.key(), 4, 0, 3)
|
||||
main_thread.append('GET_RANGE_STARTS_WITH_SNAPSHOT')
|
||||
self.add_result(main_thread, args, fdb.tuple.pack((foo[1], 'bar', foo[2], 'bar2', foo[5], 'bar5')))
|
||||
self.add_result(main_thread, args, fdb.tuple.pack((foo[1], b'bar', foo[2], b'bar2', foo[5], b'bar5')))
|
||||
main_thread.push_args(self.workspace.key(), 3, 1, -1)
|
||||
main_thread.append('GET_RANGE_STARTS_WITH_DATABASE')
|
||||
self.add_result(main_thread, args, fdb.tuple.pack((foo[5], 'bar5', foo[4], 'bar4', foo[3], 'bar3')))
|
||||
main_thread.push_args(foo[1], 0, 1, foo[1], 0, 3, 0, 0, -1, '')
|
||||
self.add_result(main_thread, args, fdb.tuple.pack((foo[5], b'bar5', foo[4], b'bar4', foo[3], b'bar3')))
|
||||
main_thread.push_args(foo[1], 0, 1, foo[1], 0, 3, 0, 0, -1, b'')
|
||||
main_thread.append('GET_RANGE_SELECTOR')
|
||||
self.add_result(main_thread, args, fdb.tuple.pack((foo[1], 'bar', foo[2], 'bar2')))
|
||||
main_thread.push_args(foo[1], 1, 0, foo[1], 1, 3, 0, 0, -1, '')
|
||||
self.add_result(main_thread, args, fdb.tuple.pack((foo[1], b'bar', foo[2], b'bar2')))
|
||||
main_thread.push_args(foo[1], 1, 0, foo[1], 1, 3, 0, 0, -1, b'')
|
||||
main_thread.append('GET_RANGE_SELECTOR_SNAPSHOT')
|
||||
self.add_result(main_thread, args, fdb.tuple.pack((foo[1], 'bar', foo[2], 'bar2', foo[5], 'bar5')))
|
||||
main_thread.push_args(foo[1], 0, 1, foo[1], 1, 3, 0, 0, -1, '')
|
||||
self.add_result(main_thread, args, fdb.tuple.pack((foo[1], b'bar', foo[2], b'bar2', foo[5], b'bar5')))
|
||||
main_thread.push_args(foo[1], 0, 1, foo[1], 1, 3, 0, 0, -1, b'')
|
||||
main_thread.append('GET_RANGE_SELECTOR_DATABASE')
|
||||
self.add_result(main_thread, args, fdb.tuple.pack((foo[1], 'bar', foo[2], 'bar2', foo[3], 'bar3')))
|
||||
self.add_result(main_thread, args, fdb.tuple.pack((foo[1], b'bar', foo[2], b'bar2', foo[3], b'bar3')))
|
||||
test_util.blocking_commit(main_thread)
|
||||
self.add_result(main_thread, args, 'RESULT_NOT_PRESENT')
|
||||
self.add_result(main_thread, args, b'RESULT_NOT_PRESENT')
|
||||
|
||||
main_thread.push_args(self.workspace.key())
|
||||
main_thread.append('CLEAR_RANGE_STARTS_WITH')
|
||||
main_thread.push_args(self.workspace.key(), 0, 0, -1)
|
||||
main_thread.append('GET_RANGE_STARTS_WITH')
|
||||
self.add_result(main_thread, args, '')
|
||||
self.add_result(main_thread, args, b'')
|
||||
test_util.blocking_commit(main_thread)
|
||||
self.add_result(main_thread, args, 'RESULT_NOT_PRESENT')
|
||||
self.add_result(main_thread, args, b'RESULT_NOT_PRESENT')
|
||||
|
||||
main_thread.append('SET_READ_VERSION')
|
||||
main_thread.push_args(foo[1])
|
||||
main_thread.append('GET')
|
||||
self.add_result(main_thread, args, 'bar')
|
||||
self.add_result(main_thread, args, b'bar')
|
||||
test_util.blocking_commit(main_thread)
|
||||
self.add_result(main_thread, args, 'RESULT_NOT_PRESENT')
|
||||
self.add_result(main_thread, args, b'RESULT_NOT_PRESENT')
|
||||
|
||||
main_thread.push_args(foo[1], 'bar', foo[2], 'bar2', foo[3], 'bar3', foo[4], 'bar4', foo[5], 'bar5')
|
||||
main_thread.push_args(foo[1], b'bar', foo[2], b'bar2', foo[3], b'bar3', foo[4], b'bar4', foo[5], b'bar5')
|
||||
main_thread.append('SET')
|
||||
main_thread.append('SET')
|
||||
main_thread.append('SET')
|
||||
main_thread.append('SET')
|
||||
main_thread.append('SET')
|
||||
test_util.blocking_commit(main_thread)
|
||||
self.add_result(main_thread, args, 'RESULT_NOT_PRESENT')
|
||||
self.add_result(main_thread, args, b'RESULT_NOT_PRESENT')
|
||||
|
||||
main_thread.push_args(foo[2])
|
||||
main_thread.append('CLEAR_DATABASE')
|
||||
main_thread.append('WAIT_FUTURE')
|
||||
main_thread.push_args(self.workspace.key(), 0, 0, -1)
|
||||
main_thread.append('GET_RANGE_STARTS_WITH_DATABASE')
|
||||
self.add_result(main_thread, args, fdb.tuple.pack((foo[1], 'bar', foo[3], 'bar3', foo[4], 'bar4', foo[5], 'bar5')))
|
||||
self.add_result(main_thread, args, fdb.tuple.pack((foo[1], b'bar', foo[3], b'bar3', foo[4], b'bar4', foo[5], b'bar5')))
|
||||
|
||||
main_thread.push_args(foo[3], foo[5])
|
||||
main_thread.append('CLEAR_RANGE_DATABASE')
|
||||
main_thread.append('WAIT_FUTURE')
|
||||
main_thread.push_args(self.workspace.key(), 0, 0, -1)
|
||||
main_thread.append('GET_RANGE_STARTS_WITH_DATABASE')
|
||||
self.add_result(main_thread, args, fdb.tuple.pack((foo[1], 'bar', foo[5], 'bar5')))
|
||||
self.add_result(main_thread, args, fdb.tuple.pack((foo[1], b'bar', foo[5], b'bar5')))
|
||||
|
||||
main_thread.push_args(self.workspace.key())
|
||||
main_thread.append('CLEAR_RANGE_STARTS_WITH_DATABASE')
|
||||
main_thread.append('WAIT_FUTURE')
|
||||
main_thread.push_args(self.workspace.key(), 0, 0, -1)
|
||||
main_thread.append('GET_RANGE_STARTS_WITH_DATABASE')
|
||||
self.add_result(main_thread, args, '')
|
||||
self.add_result(main_thread, args, b'')
|
||||
|
||||
test_util.blocking_commit(main_thread)
|
||||
self.add_result(main_thread, args, 'RESULT_NOT_PRESENT')
|
||||
self.add_result(main_thread, args, b'RESULT_NOT_PRESENT')
|
||||
|
||||
main_thread.append('NEW_TRANSACTION')
|
||||
main_thread.push_args(foo[1], foo[5], 0, 0, 0)
|
||||
|
@ -250,7 +250,7 @@ class ScriptedTest(Test):
|
|||
self.append_range_test(main_thread, args, 1000, 8)
|
||||
|
||||
main_thread.append('EMPTY_STACK')
|
||||
tup = (0, 'foo', -1093, u'unicode\u9348test', 0xffffffff + 100, 'bar\x00\xff')
|
||||
tup = (0, b'foo', -1093, 'unicode\u9348test', 0xffffffff + 100, b'bar\x00\xff')
|
||||
main_thread.push_args(*test_util.with_length(tup))
|
||||
main_thread.append('TUPLE_PACK')
|
||||
main_thread.append('DUP')
|
||||
|
@ -272,58 +272,58 @@ class ScriptedTest(Test):
|
|||
self.add_result(main_thread, args, rng.stop)
|
||||
self.add_result(main_thread, args, rng.start)
|
||||
|
||||
stampKey = 'stampedXXXXXXXXXXsuffix'
|
||||
stampKeyIndex = stampKey.find('XXXXXXXXXX')
|
||||
main_thread.push_args(u'SET_VERSIONSTAMPED_KEY', self.versionstamp_key(stampKey, stampKeyIndex), 'stampedBar')
|
||||
stampKey = b'stampedXXXXXXXXXXsuffix'
|
||||
stampKeyIndex = stampKey.find(b'XXXXXXXXXX')
|
||||
main_thread.push_args('SET_VERSIONSTAMPED_KEY', self.versionstamp_key(stampKey, stampKeyIndex), b'stampedBar')
|
||||
main_thread.append('ATOMIC_OP')
|
||||
main_thread.push_args(u'SET_VERSIONSTAMPED_VALUE', 'stampedValue', self.versionstamp_value('XXXXXXXXXX'))
|
||||
main_thread.push_args('SET_VERSIONSTAMPED_VALUE', b'stampedValue', self.versionstamp_value(b'XXXXXXXXXX'))
|
||||
main_thread.append('ATOMIC_OP')
|
||||
|
||||
if self.api_version >= 520:
|
||||
stampValue = 'stampedXXXXXXXXXXsuffix'
|
||||
stampValueIndex = stampValue.find('XXXXXXXXXX')
|
||||
main_thread.push_args(u'SET_VERSIONSTAMPED_VALUE', 'stampedValue2', self.versionstamp_value(stampValue, stampValueIndex))
|
||||
stampValue = b'stampedXXXXXXXXXXsuffix'
|
||||
stampValueIndex = stampValue.find(b'XXXXXXXXXX')
|
||||
main_thread.push_args('SET_VERSIONSTAMPED_VALUE', b'stampedValue2', self.versionstamp_value(stampValue, stampValueIndex))
|
||||
main_thread.append('ATOMIC_OP')
|
||||
|
||||
main_thread.push_args('suffix')
|
||||
main_thread.push_args(b'suffix')
|
||||
main_thread.append('GET_VERSIONSTAMP')
|
||||
test_util.blocking_commit(main_thread)
|
||||
self.add_result(main_thread, args, 'RESULT_NOT_PRESENT')
|
||||
main_thread.push_args('stamped')
|
||||
self.add_result(main_thread, args, b'RESULT_NOT_PRESENT')
|
||||
main_thread.push_args(b'stamped')
|
||||
main_thread.append('CONCAT')
|
||||
main_thread.append('CONCAT')
|
||||
main_thread.append('GET')
|
||||
self.add_result(main_thread, args, 'stampedBar')
|
||||
self.add_result(main_thread, args, b'stampedBar')
|
||||
|
||||
main_thread.push_args('stampedValue', 'suffix')
|
||||
main_thread.push_args(b'stampedValue', b'suffix')
|
||||
main_thread.append('GET')
|
||||
main_thread.push_args('stamped')
|
||||
main_thread.push_args(b'stamped')
|
||||
main_thread.append('CONCAT')
|
||||
main_thread.append('CONCAT')
|
||||
main_thread.append('GET')
|
||||
self.add_result(main_thread, args, 'stampedBar')
|
||||
self.add_result(main_thread, args, b'stampedBar')
|
||||
|
||||
if self.api_version >= 520:
|
||||
main_thread.push_args('stampedValue2')
|
||||
main_thread.push_args(b'stampedValue2')
|
||||
main_thread.append('GET')
|
||||
main_thread.append('GET')
|
||||
self.add_result(main_thread, args, 'stampedBar')
|
||||
self.add_result(main_thread, args, b'stampedBar')
|
||||
|
||||
main_thread.append('GET_VERSIONSTAMP')
|
||||
test_util.blocking_commit(main_thread)
|
||||
self.add_result(main_thread, args, 'RESULT_NOT_PRESENT')
|
||||
self.add_result(main_thread, args, b'RESULT_NOT_PRESENT')
|
||||
self.add_result(main_thread, args, test_util.error_string(2021))
|
||||
|
||||
main_thread.push_args('sentinel')
|
||||
main_thread.push_args(b'sentinel')
|
||||
main_thread.append('UNIT_TESTS')
|
||||
self.add_result(main_thread, args, 'sentinel')
|
||||
self.add_result(main_thread, args, b'sentinel')
|
||||
|
||||
if not args.no_threads:
|
||||
wait_key = 'waitKey'
|
||||
wait_key = b'waitKey'
|
||||
# threads = [self.thread_subspace[i] for i in range(0, 2)]
|
||||
threads = ['thread_spec%d' % i for i in range(0, 2)]
|
||||
threads = [b'thread_spec%d' % i for i in range(0, 2)]
|
||||
for thread_spec in threads:
|
||||
main_thread.push_args(self.workspace.pack((wait_key, thread_spec)), '')
|
||||
main_thread.push_args(self.workspace.pack((wait_key, thread_spec)), b'')
|
||||
main_thread.append('SET_DATABASE')
|
||||
main_thread.append('WAIT_FUTURE')
|
||||
|
||||
|
@ -333,7 +333,7 @@ class ScriptedTest(Test):
|
|||
main_thread.append('START_THREAD')
|
||||
thread = test_instructions.create_thread(fdb.Subspace((thread_spec,)))
|
||||
thread.append('NEW_TRANSACTION')
|
||||
thread.push_args(foo[1], foo[1], 'bar%s' % thread_spec, self.workspace.pack(
|
||||
thread.push_args(foo[1], foo[1], b'bar%s' % thread_spec, self.workspace.pack(
|
||||
(wait_key, thread_spec)), self.workspace.pack((wait_key, thread_spec)))
|
||||
thread.append('GET')
|
||||
thread.append('POP')
|
||||
|
@ -348,7 +348,7 @@ class ScriptedTest(Test):
|
|||
thread.append('NEW_TRANSACTION')
|
||||
thread.push_args(foo[1])
|
||||
thread.append('GET')
|
||||
self.add_result(thread, args, 'barthread_spec0', 'barthread_spec1')
|
||||
self.add_result(thread, args, b'barthread_spec0', b'barthread_spec1')
|
||||
|
||||
main_thread.append('EMPTY_STACK')
|
||||
# if len(main_thread) > args.num_ops:
|
||||
|
@ -372,7 +372,7 @@ class ScriptedTest(Test):
|
|||
|
||||
kvpairs = []
|
||||
for i in range(0, num_pairs * 2):
|
||||
kvpairs.append(self.workspace.pack(('foo', ''.join(chr(random.randint(0, 254)) for i in range(0, kv_length)))))
|
||||
kvpairs.append(self.workspace.pack((b'foo', bytes([random.randint(0, 254) for i in range(0, kv_length)]))))
|
||||
|
||||
kvpairs = list(set(kvpairs))
|
||||
if len(kvpairs) % 2 == 1:
|
||||
|
@ -380,24 +380,24 @@ class ScriptedTest(Test):
|
|||
kvpairs.sort()
|
||||
|
||||
instructions.push_args(*kvpairs)
|
||||
for i in range(0, len(kvpairs) / 2):
|
||||
for i in range(0, len(kvpairs) // 2):
|
||||
instructions.append('SET')
|
||||
if i % 100 == 99:
|
||||
test_util.blocking_commit(instructions)
|
||||
self.add_result(instructions, args, 'RESULT_NOT_PRESENT')
|
||||
self.add_result(instructions, args, b'RESULT_NOT_PRESENT')
|
||||
|
||||
foo_range = self.workspace.range(('foo',))
|
||||
foo_range = self.workspace.range((b'foo',))
|
||||
instructions.push_args(foo_range.start, foo_range.stop, 0, 0, -1)
|
||||
instructions.append('GET_RANGE')
|
||||
self.add_result(instructions, args, fdb.tuple.pack(tuple(kvpairs)))
|
||||
instructions.push_args(self.workspace.key(), 0, 0, -1)
|
||||
instructions.append('GET_RANGE_STARTS_WITH')
|
||||
self.add_result(instructions, args, fdb.tuple.pack(tuple(kvpairs)))
|
||||
instructions.push_args(foo_range.start, 0, 1, foo_range.stop, 0, 1, 0, 0, -1, '')
|
||||
instructions.push_args(foo_range.start, 0, 1, foo_range.stop, 0, 1, 0, 0, -1, b'')
|
||||
instructions.append('GET_RANGE_SELECTOR')
|
||||
self.add_result(instructions, args, fdb.tuple.pack(tuple(kvpairs)))
|
||||
test_util.blocking_commit(instructions)
|
||||
self.add_result(instructions, args, 'RESULT_NOT_PRESENT')
|
||||
self.add_result(instructions, args, b'RESULT_NOT_PRESENT')
|
||||
|
||||
def add_result(self, instructions, args, *values):
|
||||
key = self.results_subspace.pack((len(self.results),))
|
||||
|
|
|
@ -36,10 +36,10 @@ class RandomGenerator(object):
|
|||
def __init__(self, max_int_bits=64, api_version=FDB_API_VERSION, types=COMMON_TYPES):
|
||||
self.max_int_bits = max_int_bits
|
||||
self.api_version = api_version
|
||||
self.types = types
|
||||
self.types = list(types)
|
||||
|
||||
def random_unicode_str(self, length):
|
||||
return u''.join(self.random_unicode_char() for i in range(0, length))
|
||||
return ''.join(self.random_unicode_char() for i in range(0, length))
|
||||
|
||||
def random_int(self):
|
||||
num_bits = random.randint(0, self.max_int_bits) # This way, we test small numbers with higher probability
|
||||
|
@ -123,7 +123,7 @@ class RandomGenerator(object):
|
|||
smaller_size = random.randint(1, len(to_add))
|
||||
tuples.append(to_add[:smaller_size])
|
||||
else:
|
||||
non_empty = filter(lambda (_, x): (isinstance(x, list) or isinstance(x, tuple)) and len(x) > 0, enumerate(to_add))
|
||||
non_empty = [x for x in enumerate(to_add) if (isinstance(x[1], list) or isinstance(x[1], tuple)) and len(x[1]) > 0]
|
||||
if len(non_empty) > 0 and random.random() < 0.25:
|
||||
# Add a smaller list to test prefixes of nested structures.
|
||||
idx, choice = random.choice(non_empty)
|
||||
|
@ -153,24 +153,24 @@ class RandomGenerator(object):
|
|||
|
||||
def random_string(self, length):
|
||||
if length == 0:
|
||||
return ''
|
||||
return b''
|
||||
|
||||
return chr(random.randint(0, 254)) + ''.join(chr(random.randint(0, 255)) for i in range(0, length - 1))
|
||||
return bytes([random.randint(0, 254)] + [random.randint(0, 255) for i in range(0, length - 1)])
|
||||
|
||||
def random_unicode_char(self):
|
||||
while True:
|
||||
if random.random() < 0.05:
|
||||
# Choose one of these special character sequences.
|
||||
specials = [u'\U0001f4a9', u'\U0001f63c', u'\U0001f3f3\ufe0f\u200d\U0001f308', u'\U0001f1f5\U0001f1f2', u'\uf8ff',
|
||||
u'\U0002a2b2', u'\u05e9\u05dc\u05d5\u05dd']
|
||||
specials = ['\U0001f4a9', '\U0001f63c', '\U0001f3f3\ufe0f\u200d\U0001f308', '\U0001f1f5\U0001f1f2', '\uf8ff',
|
||||
'\U0002a2b2', '\u05e9\u05dc\u05d5\u05dd']
|
||||
return random.choice(specials)
|
||||
c = random.randint(0, 0xffff)
|
||||
if unicodedata.category(unichr(c))[0] in 'LMNPSZ':
|
||||
return unichr(c)
|
||||
if unicodedata.category(chr(c))[0] in 'LMNPSZ':
|
||||
return chr(c)
|
||||
|
||||
|
||||
def error_string(error_code):
|
||||
return fdb.tuple.pack(('ERROR', str(error_code)))
|
||||
return fdb.tuple.pack((b'ERROR', bytes(str(error_code), 'utf-8')))
|
||||
|
||||
|
||||
def blocking_commit(instructions):
|
||||
|
|
|
@ -29,15 +29,15 @@ import fdb
|
|||
def initialize_logger_level(logging_level):
|
||||
logger = get_logger()
|
||||
|
||||
assert logging_level in ["DEBUG", "INFO", "WARNING", "ERROR"]
|
||||
assert logging_level in ['DEBUG', 'INFO', 'WARNING', 'ERROR']
|
||||
|
||||
if logging_level == "DEBUG":
|
||||
if logging_level == 'DEBUG':
|
||||
logger.setLevel(logging.DEBUG)
|
||||
elif logging_level == "INFO":
|
||||
elif logging_level == 'INFO':
|
||||
logger.setLevel(logging.INFO)
|
||||
elif logging_level == "WARNING":
|
||||
elif logging_level == 'WARNING':
|
||||
logger.setLevel(logging.WARNING)
|
||||
elif logging_level == "ERROR":
|
||||
elif logging_level == 'ERROR':
|
||||
logger.setLevel(logging.ERROR)
|
||||
|
||||
|
||||
|
@ -49,7 +49,7 @@ def get_logger():
|
|||
def signal_number_to_name(signal_num):
|
||||
name = []
|
||||
for key in signal.__dict__.keys():
|
||||
if key.startswith("SIG") and getattr(signal, key) == signal_num:
|
||||
if key.startswith('SIG') and getattr(signal, key) == signal_num:
|
||||
name.append(key)
|
||||
if len(name) == 1:
|
||||
return name[0]
|
||||
|
|
Loading…
Reference in New Issue