aboutsummaryrefslogtreecommitdiffstats
path: root/build/plugins/_test_const.py
diff options
context:
space:
mode:
authorDevtools Arcadia <arcadia-devtools@yandex-team.ru>2022-02-07 18:08:42 +0300
committerDevtools Arcadia <arcadia-devtools@mous.vla.yp-c.yandex.net>2022-02-07 18:08:42 +0300
commit1110808a9d39d4b808aef724c861a2e1a38d2a69 (patch)
treee26c9fed0de5d9873cce7e00bc214573dc2195b7 /build/plugins/_test_const.py
downloadydb-1110808a9d39d4b808aef724c861a2e1a38d2a69.tar.gz
intermediate changes
ref:cde9a383711a11544ce7e107a78147fb96cc4029
Diffstat (limited to 'build/plugins/_test_const.py')
-rw-r--r--build/plugins/_test_const.py327
1 files changed, 327 insertions, 0 deletions
diff --git a/build/plugins/_test_const.py b/build/plugins/_test_const.py
new file mode 100644
index 00000000000..0d03cc3d179
--- /dev/null
+++ b/build/plugins/_test_const.py
@@ -0,0 +1,327 @@
+# coding: utf-8
+import re
+import sys
+
+
+RESTART_TEST_INDICATOR = '##restart-test##'
+INFRASTRUCTURE_ERROR_INDICATOR = '##infrastructure-error##'
+
+RESTART_TEST_INDICATORS = [
+ RESTART_TEST_INDICATOR,
+ "network error",
+]
+
+# testing
+BIN_DIRECTORY = 'bin'
+CANONIZATION_RESULT_FILE_NAME = "canonization_res.json"
+CONSOLE_SNIPPET_LIMIT = 5000
+LIST_NODE_LOG_FILE = "test_list.log"
+LIST_NODE_RESULT_FILE = "test_list.json"
+LIST_RESULT_NODE_LOG_FILE = "list_result.log"
+MAX_FILE_SIZE = 1024 * 1024 * 2 # 2 MB
+MAX_TEST_RESTART_COUNT = 3
+REPORT_SNIPPET_LIMIT = 10000
+SANITIZER_ERROR_RC = 100
+TEST_SUBTEST_SEPARATOR = '::'
+TESTING_OUT_DIR_NAME = "testing_out_stuff"
+TESTING_OUT_TAR_NAME = TESTING_OUT_DIR_NAME + ".tar"
+TIMESTAMP_FORMAT = "%Y-%m-%d %H:%M:%S.%f"
+TRACE_FILE_NAME = "ytest.report.trace"
+TRUNCATING_IGNORE_FILE_LIST = {TRACE_FILE_NAME, "run_test.log"}
+
+# kvm
+DEFAULT_RAM_REQUIREMENTS_FOR_KVM = 4
+MAX_RAM_REQUIREMENTS_FOR_KVM = 16
+
+# distbuild
+TEST_NODE_FINISHING_TIME = 5 * 60
+DEFAULT_TEST_NODE_TIMEOUT = 15 * 60
+
+# coverage
+COVERAGE_TESTS_TIMEOUT_FACTOR = 1.5
+COVERAGE_RESOLVED_FILE_NAME_PATTERN = "coverage_resolved.{}.json"
+CPP_COVERAGE_RESOLVED_FILE_NAME = COVERAGE_RESOLVED_FILE_NAME_PATTERN.format("cpp")
+JAVA_COVERAGE_RESOLVED_FILE_NAME = COVERAGE_RESOLVED_FILE_NAME_PATTERN.format("java")
+PYTHON_COVERAGE_RESOLVED_FILE_NAME = COVERAGE_RESOLVED_FILE_NAME_PATTERN.format("python")
+CLANG_COVERAGE_TEST_TYPES = ("unittest", "coverage_extractor", "pytest", "py3test", "gtest", "boost_test", "exectest")
+COVERAGE_TABLE_CHUNKS = 20
+COVERAGE_YT_PROXY = "hahn.yt.yandex.net"
+COVERAGE_YT_ROOT_PATH = "//home/codecoverage"
+COVERAGE_YT_TABLE_PREFIX = "datatable"
+
+# fuzzing
+CORPUS_DATA_FILE_NAME = 'corpus.json'
+CORPUS_DATA_ROOT_DIR = 'fuzzing'
+CORPUS_DIR_NAME = 'corpus'
+FUZZING_COMPRESSION_COEF = 1.1
+FUZZING_DEFAULT_TIMEOUT = 3600
+FUZZING_FINISHING_TIME = 600
+FUZZING_TIMEOUT_RE = re.compile(r'(^|\s)-max_total_time=(?P<max_time>\d+)')
+GENERATED_CORPUS_DIR_NAME = 'mined_corpus'
+MAX_CORPUS_RESOURCES_ALLOWED = 5
+
+TEST_TOOL_HOST = 'TEST_TOOL_HOST_RESOURCE_GLOBAL'
+TEST_TOOL_TARGET = 'TEST_TOOL_TARGET_RESOURCE_GLOBAL'
+TEST_TOOL_HOST_LOCAL = 'TEST_TOOL_HOST_LOCAL'
+TEST_TOOL_TARGET_LOCAL = 'TEST_TOOL_TARGET_LOCAL'
+XCODE_TOOLS_RESOURCE = 'XCODE_TOOLS_ROOT_RESOURCE_GLOBAL'
+GO_TOOLS_RESOURCE = 'GO_TOOLS_RESOURCE_GLOBAL'
+LLVM_COV9_RESOURCE = 'LLVM_COV9_RESOURCE_GLOBAL'
+PEP8_PY2_RESOURCE = 'PEP8_PY2_RESOURCE_GLOBAL'
+PEP8_PY3_RESOURCE = 'PEP8_PY3_RESOURCE_GLOBAL'
+FLAKES_PY2_RESOURCE = 'FLAKES_PY2_RESOURCE_GLOBAL'
+FLAKES_PY3_RESOURCE = 'FLAKES_PY3_RESOURCE_GLOBAL'
+FLAKE8_PY2_RESOURCE = 'FLAKE8_PY2_RESOURCE_GLOBAL'
+FLAKE8_PY3_RESOURCE = 'FLAKE8_PY3_RESOURCE_GLOBAL'
+
+
+class Enum(object):
+
+ @classmethod
+ def enumerate(cls):
+ return [v for k, v in cls.__dict__.items() if not k.startswith("_")]
+
+
+class TestRequirements(Enum):
+ Container = 'container'
+ Cpu = 'cpu'
+ DiskUsage = 'disk_usage'
+ Ram = 'ram'
+ RamDisk = 'ram_disk'
+ SbVault = 'sb_vault'
+ Network = 'network'
+ Dns = 'dns'
+ Kvm = 'kvm'
+
+
+class TestRequirementsConstants(Enum):
+ All = 'all'
+ AllCpuValue = 50
+ AllRamDiskValue = 50
+ MinCpu = 1
+ MinRam = 1
+ MinRamDisk = 0
+
+ @classmethod
+ def is_all_cpu(cls, value):
+ return value == cls.All
+
+ @classmethod
+ def get_cpu_value(cls, value):
+ return cls.AllCpuValue if cls.is_all_cpu(value) else value
+
+ @classmethod
+ def is_all_ram_disk(cls, value):
+ return value == cls.All
+
+ @classmethod
+ def get_ram_disk_value(cls, value):
+ return cls.AllRamDiskValue if cls.is_all_ram_disk(value) else value
+
+
+class TestSize(Enum):
+ Small = 'small'
+ Medium = 'medium'
+ Large = 'large'
+
+ DefaultTimeouts = {
+ Small: 60,
+ Medium: 600,
+ Large: 3600,
+ }
+
+ DefaultPriorities = {
+ Small: -1,
+ Medium: -2,
+ Large: -3,
+ }
+
+ DefaultRequirements = {
+ Small: {
+ TestRequirements.Cpu: 1,
+ TestRequirements.Ram: 32,
+ # TestRequirements.Ram: 2,
+ TestRequirements.RamDisk: 0,
+ },
+ Medium: {
+ TestRequirements.Cpu: 1,
+ TestRequirements.Ram: 32,
+ # TestRequirements.Ram: 4,
+ TestRequirements.RamDisk: 0,
+ },
+ Large: {
+ TestRequirements.Cpu: 1,
+ TestRequirements.Ram: 32,
+ # TestRequirements.Ram: 8,
+ TestRequirements.RamDisk: 0,
+ },
+ }
+
+ MaxRequirements = {
+ Small: {
+ TestRequirements.Cpu: 4,
+ TestRequirements.Ram: 32,
+ # TestRequirements.Ram: 4,
+ TestRequirements.RamDisk: 4,
+ },
+ Medium: {
+ TestRequirements.Cpu: 4,
+ # TestRequirements.Cpu: 8,
+ TestRequirements.Ram: 32,
+ # TestRequirements.Ram: 16,
+ TestRequirements.RamDisk: 4,
+ },
+ Large: {
+ TestRequirements.Cpu: 4,
+ TestRequirements.Ram: 32,
+ TestRequirements.RamDisk: 4,
+ },
+ }
+
+ @classmethod
+ def sizes(cls):
+ return cls.DefaultTimeouts.keys()
+
+ @classmethod
+ def get_default_timeout(cls, size):
+ if size in cls.DefaultTimeouts:
+ return cls.DefaultTimeouts[size]
+ raise Exception("Unknown test size '{}'".format(size))
+
+ @classmethod
+ def get_default_priorities(cls, size):
+ if size in cls.DefaultPriorities:
+ return cls.DefaultPriorities[size]
+ raise Exception("Unknown test size '{}'".format(size))
+
+ @classmethod
+ def get_default_requirements(cls, size):
+ if size in cls.DefaultRequirements:
+ return cls.DefaultRequirements[size]
+ raise Exception("Unknown test size '{}'".format(size))
+
+ @classmethod
+ def get_max_requirements(cls, size):
+ if size in cls.MaxRequirements:
+ return cls.MaxRequirements[size]
+ raise Exception("Unknown test size '{}'".format(size))
+
+
+class TestRunExitCode(Enum):
+ Skipped = 2
+ Failed = 3
+ TimeOut = 10
+ InfrastructureError = 12
+
+
+class YaTestTags(Enum):
+ Manual = "ya:manual"
+ Notags = "ya:notags"
+ Norestart = "ya:norestart"
+ Dirty = "ya:dirty"
+ Noretries = "ya:noretries"
+ Fat = "ya:fat"
+ RunWithAsserts = "ya:relwithdebinfo"
+ Privileged = "ya:privileged"
+ ExoticPlatform = "ya:exotic_platform"
+ NotAutocheck = "ya:not_autocheck"
+
+
+class Status(object):
+ GOOD, XFAIL, FAIL, XPASS, MISSING, CRASHED, TIMEOUT = range(1, 8)
+ SKIPPED = -100
+ NOT_LAUNCHED = -200
+ CANON_DIFF = -300
+ DESELECTED = -400
+ INTERNAL = -sys.maxint
+ FLAKY = -50
+ BY_NAME = {'good': GOOD, 'fail': FAIL, 'xfail': XFAIL, 'xpass': XPASS, 'missing': MISSING, 'crashed': CRASHED,
+ 'skipped': SKIPPED, 'flaky': FLAKY, 'not_launched': NOT_LAUNCHED, 'timeout': TIMEOUT, 'diff': CANON_DIFF,
+ 'internal': INTERNAL, 'deselected': DESELECTED}
+ TO_STR = {GOOD: 'good', FAIL: 'fail', XFAIL: 'xfail', XPASS: 'xpass', MISSING: 'missing', CRASHED: 'crashed',
+ SKIPPED: 'skipped', FLAKY: 'flaky', NOT_LAUNCHED: 'not_launched', TIMEOUT: 'timeout', CANON_DIFF: 'diff',
+ INTERNAL: 'internal', DESELECTED: 'deselected'}
+
+
+class _Colors(object):
+
+ _NAMES = [
+ "blue",
+ "cyan",
+ "default",
+ "green",
+ "grey",
+ "magenta",
+ "red",
+ "white",
+ "yellow",
+ ]
+ _PREFIXES = ["", "light", "dark"]
+
+ def __init__(self):
+ self._table = {}
+ for prefix in self._PREFIXES:
+ for value in self._NAMES:
+ name = value
+ if prefix:
+ name = "{}_{}".format(prefix, value)
+ value = "{}-{}".format(prefix, value)
+ self.__add_color(name.upper(), value)
+
+ def __add_color(self, name, value):
+ self._table[name] = value
+ self.__setattr__(name, value)
+
+
+Colors = _Colors()
+
+
+class _Highlight(object):
+
+ _MARKERS = {
+ # special
+ "RESET": "rst",
+
+ "IMPORTANT": "imp",
+ "UNIMPORTANT": "unimp",
+ "BAD": "bad",
+ "WARNING": "warn",
+ "GOOD": "good",
+ "PATH": "path",
+ "ALTERNATIVE1": "alt1",
+ "ALTERNATIVE2": "alt2",
+ "ALTERNATIVE3": "alt3",
+ }
+
+ def __init__(self):
+ # setting attributes because __getattr__ is much slower
+ for attr, value in self._MARKERS.items():
+ self.__setattr__(attr, value)
+
+
+Highlight = _Highlight()
+
+
+class _StatusColorMap(object):
+
+ _MAP = {
+ 'good': Highlight.GOOD,
+ 'fail': Highlight.BAD,
+ 'missing': Highlight.ALTERNATIVE1,
+ 'crashed': Highlight.WARNING,
+ 'skipped': Highlight.UNIMPORTANT,
+ 'not_launched': Highlight.BAD,
+ 'timeout': Highlight.BAD,
+ 'flaky': Highlight.ALTERNATIVE3,
+ 'xfail': Highlight.WARNING,
+ 'xpass': Highlight.WARNING,
+ 'diff': Highlight.BAD,
+ 'internal': Highlight.BAD,
+ 'deselected': Highlight.UNIMPORTANT,
+ }
+
+ def __getitem__(self, item):
+ return self._MAP[item]
+
+
+StatusColorMap = _StatusColorMap()