Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 # Copyright 2013 The Chromium Authors. All rights reserved. | 1 # Copyright 2013 The Chromium Authors. All rights reserved. |
| 2 # Use of this source code is governed by a BSD-style license that can be | 2 # Use of this source code is governed by a BSD-style license that can be |
| 3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
| 4 | 4 |
| 5 """Base class for host-driven test cases. | 5 """Base class for host-driven test cases. |
| 6 | 6 |
| 7 This test case is intended to serve as the base class for any host-driven | 7 This test case is intended to serve as the base class for any host-driven |
| 8 test cases. It is similar to the Python unitttest module in that test cases | 8 test cases. It is similar to the Python unitttest module in that test cases |
| 9 inherit from this class and add methods which will be run as tests. | 9 inherit from this class and add methods which will be run as tests. |
| 10 | 10 |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 69 | 69 |
| 70 def GetOutDir(self): | 70 def GetOutDir(self): |
| 71 return os.path.join(os.environ['CHROME_SRC'], 'out', | 71 return os.path.join(os.environ['CHROME_SRC'], 'out', |
| 72 constants.GetBuildType()) | 72 constants.GetBuildType()) |
| 73 | 73 |
| 74 def Run(self): | 74 def Run(self): |
| 75 logging.info('Running host-driven test: %s', self.tagged_name) | 75 logging.info('Running host-driven test: %s', self.tagged_name) |
| 76 # Get the test method on the derived class and execute it | 76 # Get the test method on the derived class and execute it |
| 77 return getattr(self, self.test_name)() | 77 return getattr(self, self.test_name)() |
| 78 | 78 |
| 79 def __RunJavaTest(self, package_name, test_case, test_method): | 79 def __RunJavaTest(self, test, test_pkg): |
| 80 """Runs a single Java test method with a Java TestRunner. | 80 """Runs a single Java test in a Java TestRunner. |
| 81 | 81 |
| 82 Args: | 82 Args: |
| 83 package_name: Package name in which the java tests live | 83 test: Fully qualified test name (ex. foo.bar.TestClass#testMethod) |
| 84 (e.g. foo.bar.baz.tests) | 84 test_pkg: TestPackage object. |
| 85 test_case: Name of the Java test case (e.g. FooTest) | |
| 86 test_method: Name of the test method to run (e.g. testFooBar) | |
| 87 | 85 |
| 88 Returns: | 86 Returns: |
| 89 TestRunResults object with a single test result. | 87 TestRunResults object with a single test result. |
| 90 """ | 88 """ |
| 91 test = '%s.%s#%s' % (package_name, test_case, test_method) | |
| 92 test_pkg = test_package.TestPackage( | |
| 93 self.instrumentation_options.test_apk_path, | |
| 94 self.instrumentation_options.test_apk_jar_path) | |
| 95 java_test_runner = test_runner.TestRunner(self.instrumentation_options, | 89 java_test_runner = test_runner.TestRunner(self.instrumentation_options, |
| 96 self.device_id, | 90 self.device_id, |
| 97 self.shard_index, test_pkg, | 91 self.shard_index, test_pkg, |
| 98 self.ports_to_forward) | 92 self.ports_to_forward) |
| 99 try: | 93 try: |
| 100 java_test_runner.SetUp() | 94 java_test_runner.SetUp() |
| 101 return java_test_runner.RunTest(test)[0] | 95 return java_test_runner.RunTest(test)[0] |
| 102 finally: | 96 finally: |
| 103 java_test_runner.TearDown() | 97 java_test_runner.TearDown() |
| 104 | 98 |
| 105 def _RunJavaTests(self, package_name, tests): | 99 def _RunJavaTests(self, test_filters): |
|
bulach
2013/08/20 11:08:07
we should probably do this two-sided? keep the oth
gkanwar1
2013/08/20 15:45:33
By two-sided do you mean:
* Upstream: Create a new
bulach
2013/08/20 15:53:10
the former :)
requires less coordination between y
gkanwar
2013/08/20 16:01:57
Yeah, the only other problem I had with the former
| |
| 106 """Calls a list of tests and stops at the first test failure. | 100 """Calls a list of tests and stops at the first test failure. |
| 107 | 101 |
| 108 This method iterates until either it encounters a non-passing test or it | 102 This method iterates until either it encounters a non-passing test or it |
| 109 exhausts the list of tests. Then it returns the appropriate overall result. | 103 exhausts the list of tests. Then it returns the appropriate overall result. |
| 110 | 104 |
| 111 Test cases may make use of this method internally to assist in running | 105 Test cases may make use of this method internally to assist in running |
| 112 instrumentation tests. This function relies on instrumentation_options | 106 instrumentation tests. This function relies on instrumentation_options |
| 113 being defined. | 107 being defined. |
| 114 | 108 |
| 115 Args: | 109 Args: |
| 116 package_name: Package name in which the java tests live | 110 test_filters: A list of Java test filters. |
| 117 (e.g. foo.bar.baz.tests) | |
| 118 tests: A list of Java test names which will be run | |
| 119 | 111 |
| 120 Returns: | 112 Returns: |
| 121 A TestRunResults object containing an overall result for this set of Java | 113 A TestRunResults object containing an overall result for this set of Java |
| 122 tests. If any Java tests do not pass, this is a fail overall. | 114 tests. If any Java tests do not pass, this is a fail overall. |
| 123 """ | 115 """ |
| 124 test_type = base_test_result.ResultType.PASS | 116 test_type = base_test_result.ResultType.PASS |
| 125 log = '' | 117 log = '' |
| 126 | 118 |
| 119 test_pkg = test_package.TestPackage( | |
| 120 self.instrumentation_options.test_apk_path, | |
| 121 self.instrumentation_options.test_apk_jar_path) | |
| 122 | |
| 127 start_ms = int(time.time()) * 1000 | 123 start_ms = int(time.time()) * 1000 |
| 128 for test in tests: | 124 done = False |
| 129 # We're only running one test at a time, so this TestRunResults object | 125 for test_filter in test_filters: |
| 130 # will hold only one result. | 126 tests = test_pkg._GetAllMatchingTests(None, None, test_filter) |
| 131 suite, test_name = test.split('.') | 127 # Filters should always result in >= 1 test. |
| 132 java_result = self.__RunJavaTest(package_name, suite, test_name) | 128 if len(tests) == 0: |
| 133 assert len(java_result.GetAll()) == 1 | 129 raise Exception('Java test filter "%s" returned no tests.' |
| 134 if not java_result.DidRunPass(): | 130 % test_filter) |
| 135 result = java_result.GetNotPass().pop() | 131 for test in tests: |
| 136 log = result.GetLog() | 132 # We're only running one test at a time, so this TestRunResults object |
| 137 test_type = result.GetType() | 133 # will hold only one result. |
| 134 java_result = self.__RunJavaTest(test, test_pkg) | |
| 135 assert len(java_result.GetAll()) == 1 | |
| 136 if not java_result.DidRunPass(): | |
| 137 result = java_result.GetNotPass().pop() | |
| 138 log = result.GetLog() | |
| 139 test_type = result.GetType() | |
| 140 done = True | |
| 141 break | |
| 142 if done: | |
| 138 break | 143 break |
| 139 duration_ms = int(time.time()) * 1000 - start_ms | 144 duration_ms = int(time.time()) * 1000 - start_ms |
| 140 | 145 |
| 141 overall_result = base_test_result.TestRunResults() | 146 overall_result = base_test_result.TestRunResults() |
| 142 overall_result.AddResult( | 147 overall_result.AddResult( |
| 143 test_result.InstrumentationTestResult( | 148 test_result.InstrumentationTestResult( |
| 144 self.tagged_name, test_type, start_ms, duration_ms, log=log)) | 149 self.tagged_name, test_type, start_ms, duration_ms, log=log)) |
| 145 return overall_result | 150 return overall_result |
| 146 | 151 |
| 147 def __str__(self): | 152 def __str__(self): |
| 148 return self.tagged_name | 153 return self.tagged_name |
| 149 | 154 |
| 150 def __repr__(self): | 155 def __repr__(self): |
| 151 return self.tagged_name | 156 return self.tagged_name |
| OLD | NEW |