103 lines
3.6 KiB
Python
103 lines
3.6 KiB
Python
# Lint as: python2, python3
|
|
# Copyright 2017 The Chromium OS Authors. All rights reserved.
|
|
# Use of this source code is governed by a BSD-style license that can be
|
|
# found in the LICENSE file.
|
|
|
|
from __future__ import absolute_import
|
|
from __future__ import division
|
|
from __future__ import print_function
|
|
|
|
import os
|
|
import unittest
|
|
|
|
import common
|
|
from autotest_lib.client.bin.result_tools import result_info
|
|
from autotest_lib.client.bin.result_tools import throttler_lib
|
|
from autotest_lib.client.bin.result_tools import unittest_lib
|
|
from autotest_lib.client.bin.result_tools import utils_lib
|
|
from six.moves import range
|
|
|
|
|
|
# This unittest doesn't care about the size, so the size info can be shared to
|
|
# make the code cleaner.
|
|
FILE_SIZE_DICT = {utils_lib.ORIGINAL_SIZE_BYTES: unittest_lib.SIZE}
|
|
|
|
SAMPLE_SUMMARY = {
|
|
'': {utils_lib.ORIGINAL_SIZE_BYTES: 7 * unittest_lib.SIZE,
|
|
utils_lib.DIRS: [
|
|
{'file1': FILE_SIZE_DICT},
|
|
{'file2.tar': {utils_lib.ORIGINAL_SIZE_BYTES: 2 * unittest_lib.SIZE}},
|
|
{'file.deleted': {utils_lib.ORIGINAL_SIZE_BYTES: unittest_lib.SIZE,
|
|
utils_lib.TRIMMED_SIZE_BYTES: 0}},
|
|
{'keyval': FILE_SIZE_DICT},
|
|
{'sysinfo':
|
|
{utils_lib.ORIGINAL_SIZE_BYTES: 2 * unittest_lib.SIZE,
|
|
utils_lib.DIRS: [
|
|
{'file3': FILE_SIZE_DICT},
|
|
{'var':
|
|
{utils_lib.ORIGINAL_SIZE_BYTES: unittest_lib.SIZE,
|
|
utils_lib.DIRS: [
|
|
{'log': {utils_lib.ORIGINAL_SIZE_BYTES: unittest_lib.SIZE,
|
|
utils_lib.DIRS: [
|
|
{'file4': FILE_SIZE_DICT}
|
|
],
|
|
}
|
|
}
|
|
],
|
|
},
|
|
}
|
|
],
|
|
}
|
|
},
|
|
],
|
|
}
|
|
}
|
|
|
|
EXPECTED_FILES = [
|
|
['', 'sysinfo', 'var', 'log', 'file4'],
|
|
['', 'sysinfo', 'file3'],
|
|
['', 'file2.tar'],
|
|
['', 'file1'],
|
|
['', 'keyval'],
|
|
['', 'file.deleted'],
|
|
]
|
|
|
|
EXPECTED_THROTTABLE_FILES = [
|
|
['', 'sysinfo', 'var', 'log', 'file4'],
|
|
['', 'sysinfo', 'file3'],
|
|
['', 'file2.tar'],
|
|
]
|
|
|
|
class ThrottlerLibTest(unittest.TestCase):
|
|
"""Test class for methods in throttler_lib."""
|
|
|
|
def testSortResultFiles(self):
|
|
"""Test method sort_result_files"""
|
|
summary = result_info.ResultInfo(parent_dir='',
|
|
original_info=SAMPLE_SUMMARY)
|
|
sorted_files, _ = throttler_lib.sort_result_files(summary)
|
|
self.assertEqual(len(EXPECTED_FILES), len(sorted_files))
|
|
for i in range(len(EXPECTED_FILES)):
|
|
self.assertEqual(os.path.join(*EXPECTED_FILES[i]),
|
|
sorted_files[i].path)
|
|
|
|
def testGetThrottableFiles(self):
|
|
"""Test method get_throttleable_files"""
|
|
summary = result_info.ResultInfo(parent_dir='',
|
|
original_info=SAMPLE_SUMMARY)
|
|
sorted_files, _ = throttler_lib.sort_result_files(summary)
|
|
throttleables = throttler_lib.get_throttleable_files(
|
|
sorted_files, ['.*file1'])
|
|
|
|
throttleables = list(throttleables)
|
|
self.assertEqual(len(EXPECTED_THROTTABLE_FILES), len(throttleables))
|
|
for i in range(len(EXPECTED_THROTTABLE_FILES)):
|
|
self.assertEqual(os.path.join(*EXPECTED_THROTTABLE_FILES[i]),
|
|
throttleables[i].path)
|
|
|
|
|
|
# this is so the test can be run in standalone mode
|
|
if __name__ == '__main__':
|
|
"""Main"""
|
|
unittest.main()
|