blob: b15a3a4db33f37311cecb1a4045d63e3d2c32cf7 [file] [log] [blame]
J. Richard Barnettec9b79332014-09-22 13:14:33 -07001#!/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 Barnette73fa1202016-12-19 13:55:24 -08006import mock
J. Richard Barnettec9b79332014-09-22 13:14:33 -07007import time
8import unittest
9
10import common
11
12from autotest_lib.client.common_lib import time_utils
13from autotest_lib.site_utils import dut_status
14
15
16class 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 Barnette73fa1202016-12-19 13:55:24 -080032 def setUp(self):
33 self.test_time = time.time()
J. Richard Barnettec9b79332014-09-22 13:14:33 -070034
Richard Barnette73fa1202016-12-19 13:55:24 -080035 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 Barnettec9b79332014-09-22 13:14:33 -070041
42 def _check_duration(self, arguments, duration):
43 start_time = (arguments.until - duration * 3600)
Richard Barnette73fa1202016-12-19 13:55:24 -080044 self.assertEqual(arguments.since, start_time)
J. Richard Barnettec9b79332014-09-22 13:14:33 -070045
46 def test_default_time_bounds(self):
47 """Test time bounds when no options are supplied."""
Richard Barnette73fa1202016-12-19 13:55:24 -080048 end_time = int(self.test_time)
J. Richard Barnettec9b79332014-09-22 13:14:33 -070049 arguments = self._try_parse([])
Richard Barnette73fa1202016-12-19 13:55:24 -080050 self.assertEqual(arguments.until, end_time)
J. Richard Barnettec9b79332014-09-22 13:14:33 -070051 self._check_duration(arguments, dut_status._DEFAULT_DURATION)
52
J. Richard Barnettec9b79332014-09-22 13:14:33 -070053 def test_start_only(self):
54 """Test time bounds with --since only.
55
56 Also tests that --since and -s are equivalent.
J. Richard Barnettec9b79332014-09-22 13:14:33 -070057 """
Richard Barnette73fa1202016-12-19 13:55:24 -080058 end_time = int(self.test_time)
Richard Barnette7412fa82016-10-21 15:29:51 -070059 start_time = end_time - 3600
60 start_time_string = time_utils.epoch_time_to_date_string(start_time)
J. Richard Barnettec9b79332014-09-22 13:14:33 -070061 for option in ['--since', '-s']:
J. Richard Barnettec9b79332014-09-22 13:14:33 -070062 arguments = self._try_parse([option, start_time_string])
Richard Barnette73fa1202016-12-19 13:55:24 -080063 self.assertEqual(arguments.until, end_time)
64 self.assertEqual(arguments.since, start_time)
J. Richard Barnettec9b79332014-09-22 13:14:33 -070065
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 Barnettec9b79332014-09-22 13:14:33 -070070 """
Richard Barnette73fa1202016-12-19 13:55:24 -080071 end_time = int(self.test_time) - 3600
Richard Barnette7412fa82016-10-21 15:29:51 -070072 end_time_string = time_utils.epoch_time_to_date_string(end_time)
J. Richard Barnettec9b79332014-09-22 13:14:33 -070073 for option in ['--until', '-u']:
J. Richard Barnettec9b79332014-09-22 13:14:33 -070074 arguments = self._try_parse([option, end_time_string])
Richard Barnette73fa1202016-12-19 13:55:24 -080075 self.assertEqual(arguments.until, end_time)
J. Richard Barnettec9b79332014-09-22 13:14:33 -070076 self._check_duration(arguments, dut_status._DEFAULT_DURATION)
77
J. Richard Barnettec9b79332014-09-22 13:14:33 -070078 def test_duration_only(self):
79 """Test time bounds with --duration only.
80
81 Also tests that --duration and -d are equivalent.
J. Richard Barnettec9b79332014-09-22 13:14:33 -070082 """
83 for option in ['--duration', '-d']:
84 duration = 4
85 duration_string = '%d' % duration
Richard Barnette73fa1202016-12-19 13:55:24 -080086 end_time = int(self.test_time)
J. Richard Barnettec9b79332014-09-22 13:14:33 -070087 arguments = self._try_parse([option, duration_string])
Richard Barnette73fa1202016-12-19 13:55:24 -080088 self.assertEqual(arguments.until, end_time)
J. Richard Barnettec9b79332014-09-22 13:14:33 -070089 self._check_duration(arguments, duration)
90
J. Richard Barnettec9b79332014-09-22 13:14:33 -070091 def test_start_and_end(self):
92 """Test time bounds with --since and --until."""
Richard Barnette73fa1202016-12-19 13:55:24 -080093 start_time = int(self.test_time) - 5 * 3600
J. Richard Barnettec9b79332014-09-22 13:14:33 -070094 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 Barnette73fa1202016-12-19 13:55:24 -080097 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 Barnettec9b79332014-09-22 13:14:33 -0700101
102 def test_start_and_duration(self):
103 """Test time bounds with --since and --duration."""
Richard Barnette73fa1202016-12-19 13:55:24 -0800104 start_time = int(self.test_time) - 5 * 3600
J. Richard Barnettec9b79332014-09-22 13:14:33 -0700105 start_time_string = time_utils.epoch_time_to_date_string(start_time)
106 duration = 4
107 duration_string = '%d' % duration
Richard Barnette7412fa82016-10-21 15:29:51 -0700108 arguments = self._try_parse(['-s', start_time_string,
109 '-d', duration_string])
Richard Barnette73fa1202016-12-19 13:55:24 -0800110 self.assertEqual(arguments.since, start_time)
J. Richard Barnettec9b79332014-09-22 13:14:33 -0700111 self._check_duration(arguments, duration)
112
J. Richard Barnettec9b79332014-09-22 13:14:33 -0700113 def test_end_and_duration(self):
114 """Test time bounds with --until and --duration."""
Richard Barnette73fa1202016-12-19 13:55:24 -0800115 end_time = int(self.test_time) - 5 * 3600
J. Richard Barnettec9b79332014-09-22 13:14:33 -0700116 end_time_string = time_utils.epoch_time_to_date_string(end_time)
117 duration = 4
118 duration_string = '%d' % duration
Richard Barnette7412fa82016-10-21 15:29:51 -0700119 arguments = self._try_parse(['-u', end_time_string,
120 '-d', duration_string])
Richard Barnette73fa1202016-12-19 13:55:24 -0800121 self.assertEqual(arguments.until, end_time)
J. Richard Barnettec9b79332014-09-22 13:14:33 -0700122 self._check_duration(arguments, duration)
123
J. Richard Barnettec9b79332014-09-22 13:14:33 -0700124 def test_all_options(self):
125 """Test that all three options are a fatal error."""
Richard Barnette73fa1202016-12-19 13:55:24 -0800126 start_time = int(self.test_time) - 5 * 3600
J. Richard Barnettec9b79332014-09-22 13:14:33 -0700127 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 Barnette7412fa82016-10-21 15:29:51 -0700133 self._try_parse(['-s', start_time_string,
134 '-u', end_time_string,
135 '-d', duration_string])
J. Richard Barnettec9b79332014-09-22 13:14:33 -0700136
137
138if __name__ == '__main__':
139 unittest.main()