123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327 |
- # 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()
|