You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
141 lines
4.6 KiB
141 lines
4.6 KiB
4 months ago
|
#!/usr/bin/env python3
|
||
|
#
|
||
|
# Copyright 2019, The Android Open Source Project
|
||
|
#
|
||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||
|
# you may not use this file except in compliance with the License.
|
||
|
# You may obtain a copy of the License at
|
||
|
#
|
||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||
|
#
|
||
|
# Unless required by applicable law or agreed to in writing, software
|
||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||
|
# See the License for the specific language governing permissions and
|
||
|
# limitations under the License.
|
||
|
|
||
|
"""Unittests for bug_detector."""
|
||
|
|
||
|
# pylint: disable=line-too-long
|
||
|
|
||
|
import datetime
|
||
|
import json
|
||
|
import os
|
||
|
import unittest
|
||
|
|
||
|
from unittest import mock
|
||
|
|
||
|
import bug_detector
|
||
|
import constants
|
||
|
import unittest_constants as uc
|
||
|
|
||
|
TEST_DICT = {
|
||
|
'test1': {
|
||
|
'latest_exit_code': 5,
|
||
|
'updated_at': ''
|
||
|
},
|
||
|
'test2': {
|
||
|
'latest_exit_code': 0,
|
||
|
'updated_at': ''
|
||
|
}
|
||
|
}
|
||
|
|
||
|
class BugDetectorUnittest(unittest.TestCase):
|
||
|
"""Unit test for bug_detector.py"""
|
||
|
|
||
|
def setUp(self):
|
||
|
"""Set up stuff for testing."""
|
||
|
self.history_file = os.path.join(uc.TEST_DATA_DIR, 'bug_detector.json')
|
||
|
self.detector = bug_detector.BugDetector(['test1'], 5, self.history_file)
|
||
|
self._reset_history_file()
|
||
|
self.history_file2 = os.path.join(uc.TEST_DATA_DIR, 'bug_detector2.json')
|
||
|
|
||
|
def tearDown(self):
|
||
|
"""Run after execution of every test"""
|
||
|
if os.path.isfile(self.history_file):
|
||
|
os.remove(self.history_file)
|
||
|
if os.path.isfile(self.history_file2):
|
||
|
os.remove(self.history_file2)
|
||
|
|
||
|
def _reset_history_file(self):
|
||
|
"""Reset test history file."""
|
||
|
with open(self.history_file, 'w') as outfile:
|
||
|
json.dump(TEST_DICT, outfile)
|
||
|
|
||
|
def _make_test_file(self, file_size):
|
||
|
temp_history = {}
|
||
|
for i in range(file_size):
|
||
|
latest_bug = {
|
||
|
i: {
|
||
|
'latest_exit_code': i,
|
||
|
'updated_at': datetime.datetime.now().isoformat()
|
||
|
}
|
||
|
}
|
||
|
temp_history.update(latest_bug)
|
||
|
with open(self.history_file2, 'w') as outfile:
|
||
|
json.dump(temp_history, outfile, indent=0)
|
||
|
|
||
|
@mock.patch.object(bug_detector.BugDetector, 'update_history')
|
||
|
def test_get_detect_key(self, _):
|
||
|
"""Test get_detect_key."""
|
||
|
# argv without -v
|
||
|
argv = ['test2', 'test1']
|
||
|
want_key = 'test1 test2'
|
||
|
dtr = bug_detector.BugDetector(argv, 0)
|
||
|
self.assertEqual(dtr.get_detect_key(argv), want_key)
|
||
|
|
||
|
# argv with -v
|
||
|
argv = ['-v', 'test2', 'test1']
|
||
|
want_key = 'test1 test2'
|
||
|
dtr = bug_detector.BugDetector(argv, 0)
|
||
|
self.assertEqual(dtr.get_detect_key(argv), want_key)
|
||
|
|
||
|
# argv with --verbose
|
||
|
argv = ['--verbose', 'test2', 'test3', 'test1']
|
||
|
want_key = 'test1 test2 test3'
|
||
|
dtr = bug_detector.BugDetector(argv, 0)
|
||
|
self.assertEqual(dtr.get_detect_key(argv), want_key)
|
||
|
|
||
|
def test_get_history(self):
|
||
|
"""Test get_history."""
|
||
|
self.assertEqual(self.detector.get_history(), TEST_DICT)
|
||
|
|
||
|
@mock.patch.object(bug_detector.BugDetector, 'update_history')
|
||
|
def test_detect_bug_caught(self, _):
|
||
|
"""Test detect_bug_caught."""
|
||
|
self._reset_history_file()
|
||
|
dtr = bug_detector.BugDetector(['test1'], 0, self.history_file)
|
||
|
success = 1
|
||
|
self.assertEqual(dtr.detect_bug_caught(), success)
|
||
|
|
||
|
def test_update_history(self):
|
||
|
"""Test update_history."""
|
||
|
constants.UPPER_LIMIT = 10
|
||
|
constants.TRIM_TO_SIZE = 3
|
||
|
|
||
|
mock_file_size = 0
|
||
|
self._make_test_file(mock_file_size)
|
||
|
dtr = bug_detector.BugDetector(['test1'], 0, self.history_file2)
|
||
|
self.assertTrue('test1' in dtr.history)
|
||
|
|
||
|
# History is larger than constants.UPPER_LIMIT. Trim to size.
|
||
|
mock_file_size = 10
|
||
|
self._make_test_file(mock_file_size)
|
||
|
dtr = bug_detector.BugDetector(['test1'], 0, self.history_file2)
|
||
|
self.assertEqual(len(dtr.history), constants.TRIM_TO_SIZE)
|
||
|
keys = ['test1', '9', '8']
|
||
|
for key in keys:
|
||
|
self.assertTrue(key in dtr.history)
|
||
|
|
||
|
# History is not larger than constants.UPPER_LIMIT.
|
||
|
mock_file_size = 5
|
||
|
self._make_test_file(mock_file_size)
|
||
|
dtr = bug_detector.BugDetector(['test1'], 0, self.history_file2)
|
||
|
self.assertEqual(len(dtr.history), mock_file_size+1)
|
||
|
keys = ['test1', '4', '3', '2', '1', '0']
|
||
|
for key in keys:
|
||
|
self.assertTrue(key in dtr.history)
|
||
|
|
||
|
if __name__ == '__main__':
|
||
|
unittest.main()
|