Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def test_multi_fnmatch(self):
"""Test multi_fnmatch function"""
patterns = "example.py example*.py [0-9]*.py [0-9]_*_exmple.py"
self.assertTrue(koji.util.multi_fnmatch('example.py', patterns))
self.assertTrue(koji.util.multi_fnmatch('example.py', patterns.split()))
self.assertTrue(koji.util.multi_fnmatch('01.py', patterns.split()))
self.assertTrue(koji.util.multi_fnmatch('01_koji:util_example.py', patterns.split()))
self.assertTrue(koji.util.multi_fnmatch('example_01.py', patterns.split()))
self.assertFalse(koji.util.multi_fnmatch('sample.py', patterns.split()))
def test_maven_config_opt_adapter(self):
"""Test class MavenConfigOptAdapter"""
conf = mock.MagicMock()
section = 'section'
adapter = koji.util.MavenConfigOptAdapter(conf, section)
self.assertIs(adapter._conf, conf)
self.assertIs(adapter._section, section)
conf.has_option.return_value = True
adapter.goals
adapter.properties
adapter.someattr
conf.has_option.return_value = False
with self.assertRaises(AttributeError) as cm:
adapter.noexistsattr
self.assertEquals(cm.exception.args[0], 'noexistsattr')
self.assertEquals(conf.mock_calls, [call.has_option(section, 'goals'),
call.get(section, 'goals'),
call.get().split(),
call.has_option(section, 'properties'),
call.get(section, 'properties'),
call.get().splitlines(),
def test_LazyRecord(self):
"""Test LazyRecord object"""
# create a list object with lazy attribute
lobj = koji.util.LazyRecord(list)
six.assertRaisesRegex(
self, TypeError, 'object does not support lazy attributes',
koji.util.lazysetattr, self, 'value', lambda x: x, (100,))
base, init, inc = 10, 1, 0
koji.util.lazysetattr(
lobj, 'lz_value',
lambda x, offset=0: base + x + inc,
(init, ),
{'offset': inc},
cache=True)
self.assertEqual(base + init + inc, lobj.lz_value)
# try to access non exist attribute data, AttributeError should raise
self.assertRaises(AttributeError, getattr, lobj, 'data')
def test_parseTime(self):
"""Test parseTime function"""
now = datetime.now()
now_ts = int(calendar.timegm(now.timetuple()))
self.assertEqual(1507593600, koji.util.parseTime('2017-10-10'))
self.assertEqual(1507638896, koji.util.parseTime('2017-10-10 12:34:56'))
self.assertEqual(0, koji.util.parseTime('1970-01-01 00:00:00'))
self.assertNotEqual(now_ts, koji.util.parseTime(now.strftime("%Y-%m-%d")))
self.assertEqual(now_ts, koji.util.parseTime(now.strftime("%Y-%m-%d %H:%M:%S")))
# non time format string
self.assertEqual(None, koji.util.parseTime('not-a-time-format'))
time_tests = {
# invalid month
'2000-13-32': 'month must be in 1..12',
# invalid day
'2000-12-32': 'day is out of range for month',
# invalid hour
'2000-12-31 24:61:61': 'hour must be in 0..23',
# invalid minute
'2000-12-31 23:61:61': 'minute must be in 0..59',
def test_valid_relative(self, symlink, safer_move, ensuredir):
koji.util.move_and_symlink('/a/src', '/b/dst', relative=True, create_dir=False)
safer_move.assert_called_once_with('/a/src', '/b/dst')
symlink.assert_called_once_with('../b/dst', '/a/src')
ensuredir.assert_not_called()
# existing dst
exists.return_value = True
with self.assertRaises(koji.GenericError):
koji.util.safer_move(src, dst)
exists.assert_called_once_with(dst)
move.assert_not_called()
move.reset_mock()
islink.reset_mock()
exists.reset_mock()
# symlink dst
exists.return_value = False
islink.return_value = True
with self.assertRaises(koji.GenericError):
koji.util.safer_move(src, dst)
exists.assert_called_once_with(dst)
islink.assert_called_once_with(dst)
move.assert_not_called()
def test_LazyString(self):
"""Test LazyString object"""
fmt = '[{timestamp}] {greeting} {0}'
timestamp = int(time.time())
lstr = koji.util.LazyString(
lambda fmt, *args, **kwargs:
fmt.format(*args, timestamp=timestamp, **kwargs),
(fmt, 'koji'),
{'greeting': 'hello'})
self.assertEqual(
fmt.format('koji', timestamp=timestamp, greeting='hello'),
str(lstr))
# non cached string should be different
prev_str = str(lstr)
timestamp += 100
self.assertNotEqual(prev_str, str(lstr))
# enable caching
lstr = koji.util.LazyString(
def test_filedigestAlgo(self):
"""Test filedigestAlgo function"""
hdr = {koji.RPM_TAG_FILEDIGESTALGO: None}
self.assertEqual('md5', koji.util.filedigestAlgo(hdr))
hdr = {koji.RPM_TAG_FILEDIGESTALGO: 2}
self.assertEqual('sha1', koji.util.filedigestAlgo(hdr))
hdr = {koji.RPM_TAG_FILEDIGESTALGO: 4}
self.assertEqual('unknown', koji.util.filedigestAlgo(hdr))
opts = {}
for name, dtype, default in self.cfgmap:
key = ('web', name)
if config and config.has_option(*key):
if dtype == 'integer':
opts[name] = config.getint(*key)
elif dtype == 'boolean':
opts[name] = config.getboolean(*key)
elif dtype == 'list':
opts[name] = [x.strip() for x in config.get(*key).split(',')]
else:
opts[name] = config.get(*key)
else:
opts[name] = default
opts['Secret'] = koji.util.HiddenValue(opts['Secret'])
self.options = opts
return opts
def _setup(self, environ):
global kojiweb_handlers
global kojiweb
options = self.load_config(environ)
if 'LibPath' in options and os.path.exists(options['LibPath']):
sys.path.insert(0, options['LibPath'])
# figure out our location and try to load index.py from same dir
scriptsdir = os.path.dirname(environ['SCRIPT_FILENAME'])
environ['koji.scriptsdir'] = scriptsdir
sys.path.insert(0, scriptsdir)
import index as kojiweb_handlers
import kojiweb
self.find_handlers()
self.setup_logging2(environ)
koji.util.setup_rlimits(options)
# TODO - plugins?