214 lines
8.1 KiB
Python
Executable File
214 lines
8.1 KiB
Python
Executable File
# Copyright 2016 Google Inc.
|
|
#
|
|
# 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.
|
|
|
|
import os
|
|
import shutil
|
|
import tempfile
|
|
import unittest
|
|
from unittest import mock
|
|
|
|
from mobly import logger
|
|
import pytz
|
|
|
|
|
|
class LoggerTest(unittest.TestCase):
|
|
"""Verifies code in mobly.logger module."""
|
|
|
|
def setUp(self):
|
|
self.log_dir = tempfile.mkdtemp()
|
|
|
|
def tearDown(self):
|
|
shutil.rmtree(self.log_dir)
|
|
|
|
def test_epoch_to_log_line_timestamp(self):
|
|
actual_stamp = logger.epoch_to_log_line_timestamp(1469134262116,
|
|
time_zone=pytz.utc)
|
|
self.assertEqual("07-21 20:51:02.116", actual_stamp)
|
|
|
|
def test_is_valid_logline_timestamp(self):
|
|
self.assertTrue(logger.is_valid_logline_timestamp("06-21 17:44:42.336"))
|
|
|
|
def test_is_valid_logline_timestamp_when_wrong_length(self):
|
|
self.assertFalse(logger.is_valid_logline_timestamp(" 06-21 17:44:42.336"))
|
|
|
|
def test_is_valid_logline_timestamp_when_invalid_content(self):
|
|
self.assertFalse(logger.is_valid_logline_timestamp("------------------"))
|
|
|
|
@mock.patch('mobly.utils.create_alias')
|
|
def test_create_latest_log_alias(self, mock_create_alias):
|
|
logger.create_latest_log_alias('fake_path', alias='latest')
|
|
mock_create_alias.assert_called_once_with('fake_path', 'latest')
|
|
|
|
@mock.patch('mobly.logger._setup_test_logger')
|
|
@mock.patch('mobly.logger.create_latest_log_alias')
|
|
def test_setup_test_logger_creates_log_alias(self,
|
|
mock_create_latest_log_alias,
|
|
mock__setup_test_logger):
|
|
logger.setup_test_logger(self.log_dir)
|
|
mock__setup_test_logger.assert_called_once_with(self.log_dir, None)
|
|
mock_create_latest_log_alias.assert_called_once_with(self.log_dir,
|
|
alias='latest')
|
|
|
|
@mock.patch('mobly.logger._setup_test_logger')
|
|
@mock.patch('mobly.logger.create_latest_log_alias')
|
|
def test_setup_test_logger_creates_log_alias_with_custom_value(
|
|
self, mock_create_latest_log_alias, mock__setup_test_logger):
|
|
mock_alias = mock.MagicMock()
|
|
logger.setup_test_logger(self.log_dir, alias=mock_alias)
|
|
|
|
mock_create_latest_log_alias.assert_called_once_with(self.log_dir,
|
|
alias=mock_alias)
|
|
|
|
def test_sanitize_filename_when_valid(self):
|
|
fake_filename = 'logcat.txt'
|
|
expected_filename = 'logcat.txt'
|
|
self.assertEqual(logger.sanitize_filename(fake_filename), expected_filename)
|
|
|
|
def test_sanitize_filename_when_valid_with_path(self):
|
|
fake_filename = os.path.join('dir', 'logs', 'logcat.txt')
|
|
expected_filename = os.path.join('dir', 'logs', 'logcat.txt')
|
|
self.assertEqual(logger.sanitize_filename(fake_filename), expected_filename)
|
|
|
|
def test_sanitize_filename_when_random_spaces(self):
|
|
fake_filename = 'log cat file.txt'
|
|
expected_filename = 'log_cat_file.txt'
|
|
self.assertEqual(logger.sanitize_filename(fake_filename), expected_filename)
|
|
|
|
def test_sanitize_filename_when_over_max_characters(self):
|
|
fake_filename = 'l' * 300
|
|
expected_filename = 'l' * 237
|
|
self.assertEqual(len(logger.sanitize_filename(fake_filename)), 237)
|
|
self.assertEqual(logger.sanitize_filename(fake_filename), expected_filename)
|
|
|
|
def test_sanitize_filename_when_over_max_characters_with_extension(self):
|
|
fake_filename = 'l' * 300 + '.txt'
|
|
expected_filename = 'l' * 233 + '.txt'
|
|
self.assertEqual(len(logger.sanitize_filename(fake_filename)), 237)
|
|
self.assertEqual(logger.sanitize_filename(fake_filename), expected_filename)
|
|
|
|
def test_sanitize_filename_when_extension_at_max_characters(self):
|
|
fake_filename = 'l' * 300 + '.' + 't' * 236
|
|
expected_filename = '.' + 't' * 236
|
|
self.assertEqual(len(logger.sanitize_filename(fake_filename)), 237)
|
|
self.assertEqual(logger.sanitize_filename(fake_filename), expected_filename)
|
|
|
|
def test_sanitize_filename_when_extension_over_max_characters(self):
|
|
fake_filename = 'l' * 300 + '.' + 't' * 300
|
|
expected_filename = 'l' * 237
|
|
self.assertEqual(len(logger.sanitize_filename(fake_filename)), 237)
|
|
self.assertEqual(logger.sanitize_filename(fake_filename), expected_filename)
|
|
|
|
def test__sanitize_windows_filename_when_path_characters(self):
|
|
fake_filename = '/\\'
|
|
expected_filename = '__'
|
|
self.assertEqual(logger._sanitize_windows_filename(fake_filename),
|
|
expected_filename)
|
|
|
|
def test_sanitize_filename_when_specical_characters(self):
|
|
fake_filename = '<>:"|?*\x00'
|
|
expected_filename = '---_,,,0'
|
|
self.assertEqual(logger.sanitize_filename(fake_filename), expected_filename)
|
|
|
|
def test_sanitize_filename_when_con(self):
|
|
for fake_filename, expected_filename in [
|
|
('con', 'mobly_con'),
|
|
('CON', 'mobly_CON'),
|
|
('con.txt', 'mobly_con.txt'),
|
|
('connections.log', 'connections.log'),
|
|
]:
|
|
self.assertEqual(logger.sanitize_filename(fake_filename),
|
|
expected_filename)
|
|
|
|
def test_sanitize_filename_when_prn(self):
|
|
for fake_filename, expected_filename in [
|
|
('prn', 'mobly_prn'),
|
|
('PRN', 'mobly_PRN'),
|
|
('prn.txt', 'mobly_prn.txt'),
|
|
('prnters.log', 'prnters.log'),
|
|
]:
|
|
self.assertEqual(logger.sanitize_filename(fake_filename),
|
|
expected_filename)
|
|
|
|
def test_sanitize_filename_when_aux(self):
|
|
for fake_filename, expected_filename in [
|
|
('aux', 'mobly_aux'),
|
|
('AUX', 'mobly_AUX'),
|
|
('aux.txt', 'mobly_aux.txt'),
|
|
('auxiliaries.log', 'auxiliaries.log'),
|
|
]:
|
|
self.assertEqual(logger.sanitize_filename(fake_filename),
|
|
expected_filename)
|
|
|
|
def test_sanitize_filename_when_nul(self):
|
|
for fake_filename, expected_filename in [
|
|
('nul', 'mobly_nul'),
|
|
('NUL', 'mobly_NUL'),
|
|
('nul.txt', 'mobly_nul.txt'),
|
|
('nullptrs.log', 'nullptrs.log'),
|
|
]:
|
|
self.assertEqual(logger.sanitize_filename(fake_filename),
|
|
expected_filename)
|
|
|
|
def test_sanitize_filename_when_com(self):
|
|
for fake_filename, expected_filename in [
|
|
('com', 'com'),
|
|
('COM0', 'mobly_COM0'),
|
|
('com1', 'mobly_com1'),
|
|
('COM2', 'mobly_COM2'),
|
|
('com3', 'mobly_com3'),
|
|
('COM4', 'mobly_COM4'),
|
|
('com5', 'mobly_com5'),
|
|
('COM6', 'mobly_COM6'),
|
|
('com7', 'mobly_com7'),
|
|
('COM8', 'mobly_COM8'),
|
|
('com9', 'mobly_com9'),
|
|
('com0.log', 'mobly_com0.log'),
|
|
('com0files.log', 'com0files.log'),
|
|
]:
|
|
self.assertEqual(logger.sanitize_filename(fake_filename),
|
|
expected_filename)
|
|
|
|
def test_sanitize_filename_when_lpt(self):
|
|
for fake_filename, expected_filename in [
|
|
('lpt', 'lpt'),
|
|
('LPT0', 'mobly_LPT0'),
|
|
('lpt1', 'mobly_lpt1'),
|
|
('LPT2', 'mobly_LPT2'),
|
|
('lpt3', 'mobly_lpt3'),
|
|
('LPT4', 'mobly_LPT4'),
|
|
('lpt5', 'mobly_lpt5'),
|
|
('LPT6', 'mobly_LPT6'),
|
|
('lpt7', 'mobly_lpt7'),
|
|
('LPT8', 'mobly_LPT8'),
|
|
('lpt9', 'mobly_lpt9'),
|
|
('lpt3.txt', 'mobly_lpt3.txt'),
|
|
('lpt3_file.txt', 'lpt3_file.txt'),
|
|
]:
|
|
self.assertEqual(logger.sanitize_filename(fake_filename),
|
|
expected_filename)
|
|
|
|
def test_sanitize_filename_when_ends_with_space(self):
|
|
fake_filename = 'logcat.txt '
|
|
expected_filename = 'logcat.txt_'
|
|
self.assertEqual(logger.sanitize_filename(fake_filename), expected_filename)
|
|
|
|
def test_sanitize_filename_when_ends_with_period(self):
|
|
fake_filename = 'logcat.txt.'
|
|
expected_filename = 'logcat.txt_'
|
|
self.assertEqual(logger.sanitize_filename(fake_filename), expected_filename)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|