J. Richard Barnette | c9b7933 | 2014-09-22 13:14:33 -0700 | [diff] [blame] | 1 | #!/usr/bin/env python |
| 2 | # Copyright 2014 The Chromium OS Authors. All rights reserved. |
| 3 | # Use of this source code is governed by a BSD-style license that can be |
| 4 | # found in the LICENSE file. |
| 5 | |
Richard Barnette | 73fa120 | 2016-12-19 13:55:24 -0800 | [diff] [blame^] | 6 | import mock |
J. Richard Barnette | c9b7933 | 2014-09-22 13:14:33 -0700 | [diff] [blame] | 7 | import time |
| 8 | import unittest |
| 9 | |
| 10 | import common |
| 11 | |
| 12 | from autotest_lib.client.common_lib import time_utils |
| 13 | from autotest_lib.site_utils import dut_status |
| 14 | |
| 15 | |
| 16 | class TimeOptionTests(unittest.TestCase): |
| 17 | """Test the --since, --until, and --destination options. |
| 18 | |
| 19 | The options are allowed in these seven combinations: |
| 20 | * No options - use the default end time and duration. |
| 21 | * --since - use the given start time and the default end time. |
| 22 | * --until - use the given end time and the default duration. |
| 23 | * --duration - use the given duration and the default end time. |
| 24 | * --since --until - use the given start and end times. |
| 25 | * --since --duration - use the given start time and duration. |
| 26 | * --until --duration - use the given end time and duration. |
| 27 | |
| 28 | It's an error to use all three options together. |
| 29 | |
| 30 | """ |
| 31 | |
Richard Barnette | 73fa120 | 2016-12-19 13:55:24 -0800 | [diff] [blame^] | 32 | def setUp(self): |
| 33 | self.test_time = time.time() |
J. Richard Barnette | c9b7933 | 2014-09-22 13:14:33 -0700 | [diff] [blame] | 34 | |
Richard Barnette | 73fa120 | 2016-12-19 13:55:24 -0800 | [diff] [blame^] | 35 | def _try_parse(self, options): |
| 36 | with mock.patch('time.time', return_value=self.test_time): |
| 37 | arguments = dut_status._parse_command( |
| 38 | ['mumble.py'] + options + ['hostname']) |
| 39 | dut_status._validate_time_range(arguments) |
| 40 | return arguments |
J. Richard Barnette | c9b7933 | 2014-09-22 13:14:33 -0700 | [diff] [blame] | 41 | |
| 42 | def _check_duration(self, arguments, duration): |
| 43 | start_time = (arguments.until - duration * 3600) |
Richard Barnette | 73fa120 | 2016-12-19 13:55:24 -0800 | [diff] [blame^] | 44 | self.assertEqual(arguments.since, start_time) |
J. Richard Barnette | c9b7933 | 2014-09-22 13:14:33 -0700 | [diff] [blame] | 45 | |
| 46 | def test_default_time_bounds(self): |
| 47 | """Test time bounds when no options are supplied.""" |
Richard Barnette | 73fa120 | 2016-12-19 13:55:24 -0800 | [diff] [blame^] | 48 | end_time = int(self.test_time) |
J. Richard Barnette | c9b7933 | 2014-09-22 13:14:33 -0700 | [diff] [blame] | 49 | arguments = self._try_parse([]) |
Richard Barnette | 73fa120 | 2016-12-19 13:55:24 -0800 | [diff] [blame^] | 50 | self.assertEqual(arguments.until, end_time) |
J. Richard Barnette | c9b7933 | 2014-09-22 13:14:33 -0700 | [diff] [blame] | 51 | self._check_duration(arguments, dut_status._DEFAULT_DURATION) |
| 52 | |
J. Richard Barnette | c9b7933 | 2014-09-22 13:14:33 -0700 | [diff] [blame] | 53 | def test_start_only(self): |
| 54 | """Test time bounds with --since only. |
| 55 | |
| 56 | Also tests that --since and -s are equivalent. |
J. Richard Barnette | c9b7933 | 2014-09-22 13:14:33 -0700 | [diff] [blame] | 57 | """ |
Richard Barnette | 73fa120 | 2016-12-19 13:55:24 -0800 | [diff] [blame^] | 58 | end_time = int(self.test_time) |
Richard Barnette | 7412fa8 | 2016-10-21 15:29:51 -0700 | [diff] [blame] | 59 | start_time = end_time - 3600 |
| 60 | start_time_string = time_utils.epoch_time_to_date_string(start_time) |
J. Richard Barnette | c9b7933 | 2014-09-22 13:14:33 -0700 | [diff] [blame] | 61 | for option in ['--since', '-s']: |
J. Richard Barnette | c9b7933 | 2014-09-22 13:14:33 -0700 | [diff] [blame] | 62 | arguments = self._try_parse([option, start_time_string]) |
Richard Barnette | 73fa120 | 2016-12-19 13:55:24 -0800 | [diff] [blame^] | 63 | self.assertEqual(arguments.until, end_time) |
| 64 | self.assertEqual(arguments.since, start_time) |
J. Richard Barnette | c9b7933 | 2014-09-22 13:14:33 -0700 | [diff] [blame] | 65 | |
| 66 | def test_end_only(self): |
| 67 | """Test time bounds with --until only. |
| 68 | |
| 69 | Also tests that --until and -u are equivalent. |
J. Richard Barnette | c9b7933 | 2014-09-22 13:14:33 -0700 | [diff] [blame] | 70 | """ |
Richard Barnette | 73fa120 | 2016-12-19 13:55:24 -0800 | [diff] [blame^] | 71 | end_time = int(self.test_time) - 3600 |
Richard Barnette | 7412fa8 | 2016-10-21 15:29:51 -0700 | [diff] [blame] | 72 | end_time_string = time_utils.epoch_time_to_date_string(end_time) |
J. Richard Barnette | c9b7933 | 2014-09-22 13:14:33 -0700 | [diff] [blame] | 73 | for option in ['--until', '-u']: |
J. Richard Barnette | c9b7933 | 2014-09-22 13:14:33 -0700 | [diff] [blame] | 74 | arguments = self._try_parse([option, end_time_string]) |
Richard Barnette | 73fa120 | 2016-12-19 13:55:24 -0800 | [diff] [blame^] | 75 | self.assertEqual(arguments.until, end_time) |
J. Richard Barnette | c9b7933 | 2014-09-22 13:14:33 -0700 | [diff] [blame] | 76 | self._check_duration(arguments, dut_status._DEFAULT_DURATION) |
| 77 | |
J. Richard Barnette | c9b7933 | 2014-09-22 13:14:33 -0700 | [diff] [blame] | 78 | def test_duration_only(self): |
| 79 | """Test time bounds with --duration only. |
| 80 | |
| 81 | Also tests that --duration and -d are equivalent. |
J. Richard Barnette | c9b7933 | 2014-09-22 13:14:33 -0700 | [diff] [blame] | 82 | """ |
| 83 | for option in ['--duration', '-d']: |
| 84 | duration = 4 |
| 85 | duration_string = '%d' % duration |
Richard Barnette | 73fa120 | 2016-12-19 13:55:24 -0800 | [diff] [blame^] | 86 | end_time = int(self.test_time) |
J. Richard Barnette | c9b7933 | 2014-09-22 13:14:33 -0700 | [diff] [blame] | 87 | arguments = self._try_parse([option, duration_string]) |
Richard Barnette | 73fa120 | 2016-12-19 13:55:24 -0800 | [diff] [blame^] | 88 | self.assertEqual(arguments.until, end_time) |
J. Richard Barnette | c9b7933 | 2014-09-22 13:14:33 -0700 | [diff] [blame] | 89 | self._check_duration(arguments, duration) |
| 90 | |
J. Richard Barnette | c9b7933 | 2014-09-22 13:14:33 -0700 | [diff] [blame] | 91 | def test_start_and_end(self): |
| 92 | """Test time bounds with --since and --until.""" |
Richard Barnette | 73fa120 | 2016-12-19 13:55:24 -0800 | [diff] [blame^] | 93 | start_time = int(self.test_time) - 5 * 3600 |
J. Richard Barnette | c9b7933 | 2014-09-22 13:14:33 -0700 | [diff] [blame] | 94 | start_time_string = time_utils.epoch_time_to_date_string(start_time) |
| 95 | end_time = start_time + 4 * 3600 |
| 96 | end_time_string = time_utils.epoch_time_to_date_string(end_time) |
Richard Barnette | 73fa120 | 2016-12-19 13:55:24 -0800 | [diff] [blame^] | 97 | arguments = self._try_parse(['-s', start_time_string, |
| 98 | '-u', end_time_string]) |
| 99 | self.assertEqual(arguments.since, start_time) |
| 100 | self.assertEqual(arguments.until, end_time) |
J. Richard Barnette | c9b7933 | 2014-09-22 13:14:33 -0700 | [diff] [blame] | 101 | |
| 102 | def test_start_and_duration(self): |
| 103 | """Test time bounds with --since and --duration.""" |
Richard Barnette | 73fa120 | 2016-12-19 13:55:24 -0800 | [diff] [blame^] | 104 | start_time = int(self.test_time) - 5 * 3600 |
J. Richard Barnette | c9b7933 | 2014-09-22 13:14:33 -0700 | [diff] [blame] | 105 | start_time_string = time_utils.epoch_time_to_date_string(start_time) |
| 106 | duration = 4 |
| 107 | duration_string = '%d' % duration |
Richard Barnette | 7412fa8 | 2016-10-21 15:29:51 -0700 | [diff] [blame] | 108 | arguments = self._try_parse(['-s', start_time_string, |
| 109 | '-d', duration_string]) |
Richard Barnette | 73fa120 | 2016-12-19 13:55:24 -0800 | [diff] [blame^] | 110 | self.assertEqual(arguments.since, start_time) |
J. Richard Barnette | c9b7933 | 2014-09-22 13:14:33 -0700 | [diff] [blame] | 111 | self._check_duration(arguments, duration) |
| 112 | |
J. Richard Barnette | c9b7933 | 2014-09-22 13:14:33 -0700 | [diff] [blame] | 113 | def test_end_and_duration(self): |
| 114 | """Test time bounds with --until and --duration.""" |
Richard Barnette | 73fa120 | 2016-12-19 13:55:24 -0800 | [diff] [blame^] | 115 | end_time = int(self.test_time) - 5 * 3600 |
J. Richard Barnette | c9b7933 | 2014-09-22 13:14:33 -0700 | [diff] [blame] | 116 | end_time_string = time_utils.epoch_time_to_date_string(end_time) |
| 117 | duration = 4 |
| 118 | duration_string = '%d' % duration |
Richard Barnette | 7412fa8 | 2016-10-21 15:29:51 -0700 | [diff] [blame] | 119 | arguments = self._try_parse(['-u', end_time_string, |
| 120 | '-d', duration_string]) |
Richard Barnette | 73fa120 | 2016-12-19 13:55:24 -0800 | [diff] [blame^] | 121 | self.assertEqual(arguments.until, end_time) |
J. Richard Barnette | c9b7933 | 2014-09-22 13:14:33 -0700 | [diff] [blame] | 122 | self._check_duration(arguments, duration) |
| 123 | |
J. Richard Barnette | c9b7933 | 2014-09-22 13:14:33 -0700 | [diff] [blame] | 124 | def test_all_options(self): |
| 125 | """Test that all three options are a fatal error.""" |
Richard Barnette | 73fa120 | 2016-12-19 13:55:24 -0800 | [diff] [blame^] | 126 | start_time = int(self.test_time) - 5 * 3600 |
J. Richard Barnette | c9b7933 | 2014-09-22 13:14:33 -0700 | [diff] [blame] | 127 | start_time_string = time_utils.epoch_time_to_date_string(start_time) |
| 128 | duration = 4 |
| 129 | duration_string = '%d' % duration |
| 130 | end_time = start_time + duration * 3600 |
| 131 | end_time_string = time_utils.epoch_time_to_date_string(end_time) |
| 132 | with self.assertRaises(SystemExit): |
Richard Barnette | 7412fa8 | 2016-10-21 15:29:51 -0700 | [diff] [blame] | 133 | self._try_parse(['-s', start_time_string, |
| 134 | '-u', end_time_string, |
| 135 | '-d', duration_string]) |
J. Richard Barnette | c9b7933 | 2014-09-22 13:14:33 -0700 | [diff] [blame] | 136 | |
| 137 | |
| 138 | if __name__ == '__main__': |
| 139 | unittest.main() |