aboutsummaryrefslogtreecommitdiff
path: root/tests/mobly/base_test_test.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/mobly/base_test_test.py')
-rwxr-xr-xtests/mobly/base_test_test.py162
1 files changed, 162 insertions, 0 deletions
diff --git a/tests/mobly/base_test_test.py b/tests/mobly/base_test_test.py
index 4fcc853..a720752 100755
--- a/tests/mobly/base_test_test.py
+++ b/tests/mobly/base_test_test.py
@@ -2237,6 +2237,134 @@ class BaseTestTest(unittest.TestCase):
'mock_controller: Some failure')
self.assertEqual(record.details, expected_msg)
+ def test_repeat_invalid_count(self):
+
+ with self.assertRaisesRegex(
+ ValueError, 'The `count` for `repeat` must be larger than 1, got "1".'):
+
+ class MockBaseTest(base_test.BaseTestClass):
+
+ @base_test.repeat(count=1)
+ def test_something(self):
+ pass
+
+ def test_repeat(self):
+ repeat_count = 3
+
+ class MockBaseTest(base_test.BaseTestClass):
+
+ @base_test.repeat(count=repeat_count)
+ def test_something(self):
+ pass
+
+ bt_cls = MockBaseTest(self.mock_test_cls_configs)
+ bt_cls.run()
+ self.assertEqual(repeat_count, len(bt_cls.results.passed))
+ for i, record in enumerate(bt_cls.results.passed):
+ self.assertEqual(record.test_name, f'test_something_{i}')
+
+ def test_repeat_with_failures(self):
+ repeat_count = 3
+ mock_action = mock.MagicMock()
+ mock_action.side_effect = [None, Exception('Something failed'), None]
+
+ class MockBaseTest(base_test.BaseTestClass):
+
+ @base_test.repeat(count=repeat_count)
+ def test_something(self):
+ mock_action()
+
+ bt_cls = MockBaseTest(self.mock_test_cls_configs)
+ bt_cls.run()
+ self.assertEqual(repeat_count, len(bt_cls.results.executed))
+ self.assertEqual(1, len(bt_cls.results.error))
+ self.assertEqual(2, len(bt_cls.results.passed))
+ iter_2 = bt_cls.results.error[0]
+ iter_1, iter_3 = bt_cls.results.passed
+ self.assertEqual(iter_2.test_name, 'test_something_1')
+ self.assertEqual(iter_1.test_name, 'test_something_0')
+ self.assertEqual(iter_3.test_name, 'test_something_2')
+
+ def test_retry_invalid_count(self):
+
+ with self.assertRaisesRegex(
+ ValueError,
+ 'The `max_count` for `retry` must be larger than 1, got "1".'):
+
+ class MockBaseTest(base_test.BaseTestClass):
+
+ @base_test.retry(max_count=1)
+ def test_something(self):
+ pass
+
+ def test_retry_first_pass(self):
+ max_count = 3
+ mock_action = mock.MagicMock()
+
+ class MockBaseTest(base_test.BaseTestClass):
+
+ @base_test.retry(max_count=max_count)
+ def test_something(self):
+ mock_action()
+
+ bt_cls = MockBaseTest(self.mock_test_cls_configs)
+ bt_cls.run()
+ self.assertEqual(1, len(bt_cls.results.executed))
+ self.assertEqual(1, len(bt_cls.results.passed))
+ pass_record = bt_cls.results.passed[0]
+ self.assertEqual(pass_record.test_name, f'test_something')
+ self.assertEqual(0, len(bt_cls.results.error))
+
+ def test_retry_last_pass(self):
+ max_count = 3
+ mock_action = mock.MagicMock()
+ mock_action.side_effect = [Exception('Fail 1'), Exception('Fail 2'), None]
+
+ class MockBaseTest(base_test.BaseTestClass):
+
+ @base_test.retry(max_count=max_count)
+ def test_something(self):
+ mock_action()
+
+ bt_cls = MockBaseTest(self.mock_test_cls_configs)
+ bt_cls.run()
+ self.assertEqual(3, len(bt_cls.results.executed))
+ self.assertEqual(1, len(bt_cls.results.passed))
+ pass_record = bt_cls.results.passed[0]
+ self.assertEqual(pass_record.test_name, f'test_something_retry_2')
+ self.assertEqual(2, len(bt_cls.results.error))
+ error_record_1, error_record_2 = bt_cls.results.error
+ self.assertEqual(error_record_1.test_name, 'test_something')
+ self.assertEqual(error_record_2.test_name, 'test_something_retry_1')
+ self.assertEqual(error_record_1.signature, error_record_2.retry_parent)
+ self.assertEqual(error_record_2.signature, pass_record.retry_parent)
+
+ def test_retry_all_fail(self):
+ max_count = 3
+ mock_action = mock.MagicMock()
+ mock_action.side_effect = [
+ Exception('Fail 1'),
+ Exception('Fail 2'),
+ Exception('Fail 3')
+ ]
+
+ class MockBaseTest(base_test.BaseTestClass):
+
+ @base_test.retry(max_count=max_count)
+ def test_something(self):
+ mock_action()
+
+ bt_cls = MockBaseTest(self.mock_test_cls_configs)
+ bt_cls.run()
+ self.assertEqual(3, len(bt_cls.results.executed))
+ self.assertEqual(3, len(bt_cls.results.error))
+ error_record_1, error_record_2, error_record_3 = bt_cls.results.error
+ self.assertEqual(error_record_1.test_name, 'test_something')
+ self.assertEqual(error_record_2.test_name, 'test_something_retry_1')
+ self.assertEqual(error_record_3.test_name, 'test_something_retry_2')
+ self.assertEqual(error_record_1.signature, error_record_2.retry_parent)
+ self.assertEqual(error_record_2.signature, error_record_3.retry_parent)
+
def test_uid(self):
class MockBaseTest(base_test.BaseTestClass):
@@ -2271,6 +2399,40 @@ class BaseTestTest(unittest.TestCase):
def not_a_test(self):
pass
+ def test_repeat_with_uid(self):
+ repeat_count = 3
+
+ class MockBaseTest(base_test.BaseTestClass):
+
+ @base_test.repeat(count=repeat_count)
+ @records.uid('some-uid')
+ def test_something(self):
+ pass
+
+ bt_cls = MockBaseTest(self.mock_test_cls_configs)
+ bt_cls.run()
+ self.assertEqual(repeat_count, len(bt_cls.results.passed))
+ for i, record in enumerate(bt_cls.results.passed):
+ self.assertEqual(record.test_name, f'test_something_{i}')
+ self.assertEqual(record.uid, 'some-uid')
+
+ def test_uid_with_repeat(self):
+ repeat_count = 3
+
+ class MockBaseTest(base_test.BaseTestClass):
+
+ @records.uid('some-uid')
+ @base_test.repeat(count=repeat_count)
+ def test_something(self):
+ pass
+
+ bt_cls = MockBaseTest(self.mock_test_cls_configs)
+ bt_cls.run()
+ self.assertEqual(repeat_count, len(bt_cls.results.passed))
+ for i, record in enumerate(bt_cls.results.passed):
+ self.assertEqual(record.test_name, f'test_something_{i}')
+ self.assertEqual(record.uid, 'some-uid')
+
def test_log_stage_always_logs_end_statement(self):
instance = base_test.BaseTestClass(self.mock_test_cls_configs)
instance.current_test_info = mock.Mock()