test-runner/utilities.py (36 lines of code) (raw):
# Copyright (c) Microsoft. All rights reserved.
# Licensed under the MIT license. See LICENSE file in the project root for
# full license information.
import ast
import random
import string
default_length = 64
def random_string(prefix=None, length=default_length):
if prefix:
s = prefix + ":"
else:
s = ""
return (
s
+ "".join(
random.choice(string.ascii_uppercase + string.digits) for _ in range(length)
)[:length]
)
def json_is_same(a, b):
if a == b:
return True
else:
# If either parameter is a string, convert it to an object.
# use ast.literal_eval because they might be single-quote delimited which fails with json.loads.
if isinstance(a, str):
a = ast.literal_eval(a)
if isinstance(b, str):
b = ast.literal_eval(b)
return a == b
def assert_json_equality(a, b):
assert json_is_same(a, b)
_index = {}
def next_integer(prefix):
"""
return the next integer in the sequence using the given prefix as an index
"""
global _index
if prefix in _index:
_index[prefix] += 1
else:
_index[prefix] = 1
return _index[prefix]
def next_random_string(prefix, length=default_length):
"""
return a random string with the given prefix
"""
return random_string("{} {}".format(prefix, next_integer(prefix)), length=length)