1#!/usr/bin/env vpython 2# Copyright 2016 The Chromium 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 6# pylint: disable=protected-access 7 8import unittest 9 10from pylib.base import base_test_result 11from pylib.local.device import local_device_test_run 12 13import mock # pylint: disable=import-error 14 15 16class SubstituteDeviceRootTest(unittest.TestCase): 17 18 def testNoneDevicePath(self): 19 self.assertEquals( 20 '/fake/device/root', 21 local_device_test_run.SubstituteDeviceRoot( 22 None, '/fake/device/root')) 23 24 def testStringDevicePath(self): 25 self.assertEquals( 26 '/another/fake/device/path', 27 local_device_test_run.SubstituteDeviceRoot( 28 '/another/fake/device/path', '/fake/device/root')) 29 30 def testListWithNoneDevicePath(self): 31 self.assertEquals( 32 '/fake/device/root/subpath', 33 local_device_test_run.SubstituteDeviceRoot( 34 [None, 'subpath'], '/fake/device/root')) 35 36 def testListWithoutNoneDevicePath(self): 37 self.assertEquals( 38 '/another/fake/device/path', 39 local_device_test_run.SubstituteDeviceRoot( 40 ['/', 'another', 'fake', 'device', 'path'], 41 '/fake/device/root')) 42 43 44class TestLocalDeviceTestRun(local_device_test_run.LocalDeviceTestRun): 45 46 # pylint: disable=abstract-method 47 48 def __init__(self): 49 super(TestLocalDeviceTestRun, self).__init__( 50 mock.MagicMock(), mock.MagicMock()) 51 52 53class TestLocalDeviceNonStringTestRun( 54 local_device_test_run.LocalDeviceTestRun): 55 56 # pylint: disable=abstract-method 57 58 def __init__(self): 59 super(TestLocalDeviceNonStringTestRun, self).__init__( 60 mock.MagicMock(), mock.MagicMock()) 61 62 def _GetUniqueTestName(self, test): 63 return test['name'] 64 65 66class LocalDeviceTestRunTest(unittest.TestCase): 67 68 def testGetTestsToRetry_allTestsPassed(self): 69 results = [ 70 base_test_result.BaseTestResult( 71 'Test1', base_test_result.ResultType.PASS), 72 base_test_result.BaseTestResult( 73 'Test2', base_test_result.ResultType.PASS), 74 ] 75 76 tests = [r.GetName() for r in results] 77 try_results = base_test_result.TestRunResults() 78 try_results.AddResults(results) 79 80 test_run = TestLocalDeviceTestRun() 81 tests_to_retry = test_run._GetTestsToRetry(tests, try_results) 82 self.assertEquals(0, len(tests_to_retry)) 83 84 def testGetTestsToRetry_testFailed(self): 85 results = [ 86 base_test_result.BaseTestResult( 87 'Test1', base_test_result.ResultType.FAIL), 88 base_test_result.BaseTestResult( 89 'Test2', base_test_result.ResultType.PASS), 90 ] 91 92 tests = [r.GetName() for r in results] 93 try_results = base_test_result.TestRunResults() 94 try_results.AddResults(results) 95 96 test_run = TestLocalDeviceTestRun() 97 tests_to_retry = test_run._GetTestsToRetry(tests, try_results) 98 self.assertEquals(1, len(tests_to_retry)) 99 self.assertIn('Test1', tests_to_retry) 100 101 def testGetTestsToRetry_testUnknown(self): 102 results = [ 103 base_test_result.BaseTestResult( 104 'Test2', base_test_result.ResultType.PASS), 105 ] 106 107 tests = ['Test1'] + [r.GetName() for r in results] 108 try_results = base_test_result.TestRunResults() 109 try_results.AddResults(results) 110 111 test_run = TestLocalDeviceTestRun() 112 tests_to_retry = test_run._GetTestsToRetry(tests, try_results) 113 self.assertEquals(1, len(tests_to_retry)) 114 self.assertIn('Test1', tests_to_retry) 115 116 def testGetTestsToRetry_wildcardFilter_allPass(self): 117 results = [ 118 base_test_result.BaseTestResult( 119 'TestCase.Test1', base_test_result.ResultType.PASS), 120 base_test_result.BaseTestResult( 121 'TestCase.Test2', base_test_result.ResultType.PASS), 122 ] 123 124 tests = ['TestCase.*'] 125 try_results = base_test_result.TestRunResults() 126 try_results.AddResults(results) 127 128 test_run = TestLocalDeviceTestRun() 129 tests_to_retry = test_run._GetTestsToRetry(tests, try_results) 130 self.assertEquals(0, len(tests_to_retry)) 131 132 def testGetTestsToRetry_wildcardFilter_oneFails(self): 133 results = [ 134 base_test_result.BaseTestResult( 135 'TestCase.Test1', base_test_result.ResultType.PASS), 136 base_test_result.BaseTestResult( 137 'TestCase.Test2', base_test_result.ResultType.FAIL), 138 ] 139 140 tests = ['TestCase.*'] 141 try_results = base_test_result.TestRunResults() 142 try_results.AddResults(results) 143 144 test_run = TestLocalDeviceTestRun() 145 tests_to_retry = test_run._GetTestsToRetry(tests, try_results) 146 self.assertEquals(1, len(tests_to_retry)) 147 self.assertIn('TestCase.*', tests_to_retry) 148 149 def testGetTestsToRetry_nonStringTests(self): 150 results = [ 151 base_test_result.BaseTestResult( 152 'TestCase.Test1', base_test_result.ResultType.PASS), 153 base_test_result.BaseTestResult( 154 'TestCase.Test2', base_test_result.ResultType.FAIL), 155 ] 156 157 tests = [ 158 {'name': 'TestCase.Test1'}, 159 {'name': 'TestCase.Test2'}, 160 ] 161 try_results = base_test_result.TestRunResults() 162 try_results.AddResults(results) 163 164 test_run = TestLocalDeviceNonStringTestRun() 165 tests_to_retry = test_run._GetTestsToRetry(tests, try_results) 166 self.assertEquals(1, len(tests_to_retry)) 167 self.assertIsInstance(tests_to_retry[0], dict) 168 self.assertEquals(tests[1], tests_to_retry[0]) 169 170 171if __name__ == '__main__': 172 unittest.main(verbosity=2) 173