blob: e6e5dda10ad92953800bc71a4f9fdd8962e0a120 [file] [edit]
# SPDX-License-Identifier: GPL-2.0-only
"""Validate KCONFIG_PROBABILITY without changing the supported distributions."""
def test_malformed_warns(conf):
probabilities = [
'invalid', ' ', '50%', '50 ', '0x32', '10 20', '10:20x',
'10:20:invalid', '10:20:30x',
':50', '50:', '10::20', '10:20:', '10:20:30:', '10:20:30:40',
'-0', '+0', '+', '-', '+100:0', ' \t100:0', '0: \t100:0',
]
for probability in probabilities:
assert conf._run_conf('--randconfig', extra_env={
'KCONFIG_PROBABILITY': probability,
'KCONFIG_SEED': '0',
}) == 0, repr(probability)
assert ('warning: KCONFIG_PROBABILITY has malformed format' in
conf.stderr), repr(probability)
assert conf.stderr.count('warning:') == 1, repr(probability)
assert conf.config is not None, repr(probability)
def test_malformed_preserves_config(conf):
probabilities = [('50%', '50:0:0'), ('-0', '0')]
for seed in range(20):
for probability, equivalent in probabilities:
context = 'probability={!r}, equivalent={!r}, seed={}'.format(
probability, equivalent, seed)
assert conf._run_conf('--randconfig', extra_env={
'KCONFIG_PROBABILITY': probability,
'KCONFIG_SEED': hex(seed),
}) == 0, context
assert ('warning: KCONFIG_PROBABILITY has malformed format' in
conf.stderr), context
assert conf.stderr.count('warning:') == 1, context
malformed = conf.config
assert conf._run_conf('--randconfig', extra_env={
'KCONFIG_PROBABILITY': equivalent,
'KCONFIG_SEED': hex(seed),
}) == 0, context
assert 'warning:' not in conf.stderr, context
assert conf.config == malformed, context
def test_werror(conf):
probabilities = [
('', 0), ('50', 0), ('50%', 1), ('-0', 1), ('10:20:30:40', 1),
]
for probability, status in probabilities:
for werror in ['', '0', '1']:
context = 'probability={!r}, werror={!r}'.format(
probability, werror)
assert conf._run_conf('--randconfig', extra_env={
'KCONFIG_PROBABILITY': probability,
'KCONFIG_SEED': '0',
'KCONFIG_WERROR': werror,
}) == status, context
if status:
assert ('warning: KCONFIG_PROBABILITY has malformed format' in
conf.stderr), context
assert conf.stderr.count('warning:') == 1, context
else:
assert 'warning:' not in conf.stderr, context
def test_out_of_range(conf):
probabilities = [
'-1', '101', '+101', '0:101', '0:0:101', '60:41', '0:60:41',
'4294967296', '-4294967296',
'999999999999999999999999', '-999999999999999999999999',
]
for probability in probabilities:
assert conf._run_conf('--randconfig', extra_env={
'KCONFIG_PROBABILITY': probability,
'KCONFIG_SEED': '0',
}) == 1, repr(probability)
assert 'KCONFIG_PROBABILITY:' in conf.stderr, repr(probability)
def test_valid(conf):
probabilities = [
('0', 'n', 'n'),
('0:0', 'n', 'n'),
('100:0', 'y', 'y'),
('0:100', 'y', 'm'),
('100:0:0', 'y', 'n'),
('0:100:0', 'n', 'y'),
('0:0:100', 'n', 'm'),
('000:000:100', 'n', 'm'),
]
for probability, boolean, tristate in probabilities:
assert conf._run_conf('--randconfig', extra_env={
'KCONFIG_PROBABILITY': probability,
'KCONFIG_SEED': '0',
}) == 0, repr(probability)
assert 'warning:' not in conf.stderr, repr(probability)
for symbol, value in [('BOOL', boolean), ('TRI', tristate)]:
if value == 'n':
expected = '# CONFIG_{} is not set'.format(symbol)
else:
expected = 'CONFIG_{}={}'.format(symbol, value)
assert expected in conf.config.splitlines(), repr(probability)
def test_single_probability_matches_tristate_split(conf):
for seed in range(20):
context = 'seed={}'.format(seed)
assert conf._run_conf('--randconfig', extra_env={
'KCONFIG_PROBABILITY': '50',
'KCONFIG_SEED': hex(seed),
}) == 0, context
assert 'warning:' not in conf.stderr, context
single = conf.config
# 50% boolean y; 25% tristate y, 25% m, and 50% n.
assert conf._run_conf('--randconfig', extra_env={
'KCONFIG_PROBABILITY': '50:25:25',
'KCONFIG_SEED': hex(seed),
}) == 0, context
assert 'warning:' not in conf.stderr, context
assert conf.config == single, context
def test_empty(conf):
assert conf._run_conf('--randconfig', extra_env={
'KCONFIG_PROBABILITY': '',
'KCONFIG_SEED': '0',
}) == 0
assert 'warning:' not in conf.stderr