Revision dbd56c149072e656ca8d6a43a59588f3e7513da2 authored by Hubert Kario on 29 September 2021, 13:05:34 UTC, committed by GitHub on 29 September 2021, 13:05:34 UTC
ExpectAlert - add __repr__
test_tlsfuzzer_utils_log.py
# Author: Jan Koscielniak, (c) 2020
# Released under Gnu GPL v2.0, see LICENSE file for details
try:
import unittest2 as unittest
except ImportError:
import unittest
try:
import mock
except ImportError:
import unittest.mock as mock
from tlsfuzzer.utils.log import Log
class TestLog(unittest.TestCase):
def setUp(self):
self.logfile = "test.log"
self.log = Log(self.logfile)
@staticmethod
def _mock_open(*args, **kwargs):
"""Fix mock not supporting iterators in all Python versions."""
mock_open = mock.mock_open(*args, **kwargs)
mock_open.return_value.__iter__ = lambda s: iter(s.readline, '')
return mock_open
def test_write_classes(self):
with mock.patch('__main__.__builtins__.open', self._mock_open()) as mock_file:
self.log.start_log(["A", "B", "C"])
self.log.write()
mock_file.return_value.write.assert_called_once_with("A,B,C\r\n")
mock_file.return_value.close.assert_called_once_with()
def test_read_classes(self):
with mock.patch('__main__.__builtins__.open', self._mock_open(read_data="A,B,C\r\n")):
classes = self.log.get_classes()
self.assertEqual(classes, ["A", "B", "C"])
def test_add_run(self):
with mock.patch('__main__.__builtins__.open', self._mock_open()) as mock_file:
classes = ["A", "B", "C"]
self.log.start_log(classes)
mock_file.return_value.write.assert_called_with("A,B,C\r\n")
# add regular runs
runs = [0, 2, 1, 2, 0, 1, 2, 1, 0]
self.log.add_run(runs[0:3])
mock_file.return_value.write.assert_called_with("0,2,1\r\n")
self.log.add_run(runs[3:6])
mock_file.return_value.write.assert_called_with("2,0,1\r\n")
self.log.add_run(runs[6:9])
mock_file.return_value.write.assert_called_with("2,1,0\r\n")
self.log.write()
mock_file.return_value.close.assert_called_once()
def test_read_run(self):
runs = [0, 2, 1, 2, 0, 1, 2, 1, 0]
i = 0
with mock.patch('__main__.__builtins__.open',
self._mock_open(read_data="A,B,C\r\n0,2,1\r\n2,0,1\r\n2,1,0\r\n")):
for index in self.log.iterate_log():
self.assertEqual(index, runs[i])
i += 1
self.assertEqual(i, len(runs))
def test_shuffled_run(self):
def check_indexes(class_count, line):
indexes = line.strip().split(',')
self.assertTrue(all(indexes) in range(0, class_count))
with mock.patch('__main__.__builtins__.open', self._mock_open()) as mock_file:
classes = ["A", "B", "C"]
self.log.start_log(classes)
mock_file.return_value.write.side_effect = lambda s: check_indexes(len(classes), s)
num = 3
for _ in range(num):
self.log.shuffle_new_run()
self.assertEqual(mock_file.return_value.write.call_count, 4)

Computing file changes ...