| OLD | NEW |
| 1 # Copyright (c) 2011 The Chromium OS Authors. All rights reserved. | 1 # Copyright (c) 2011 The Chromium OS 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 """Module containing a test suite that is run to test auto updates.""" | 5 """Module containing a test suite that is run to test auto updates.""" |
| 6 | 6 |
| 7 import os | 7 import os |
| 8 import tempfile | 8 import tempfile |
| 9 import time | 9 import time |
| 10 import unittest | 10 import unittest |
| (...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 124 def tearDown(self): | 124 def tearDown(self): |
| 125 """Overrides unittest.TestCase.tearDown and called after every test.""" | 125 """Overrides unittest.TestCase.tearDown and called after every test.""" |
| 126 self.worker.CleanUp() | 126 self.worker.CleanUp() |
| 127 | 127 |
| 128 def testUpdateKeepStateful(self): | 128 def testUpdateKeepStateful(self): |
| 129 """Tests if we can update normally. | 129 """Tests if we can update normally. |
| 130 | 130 |
| 131 This test checks that we can update by updating the stateful partition | 131 This test checks that we can update by updating the stateful partition |
| 132 rather than wiping it. | 132 rather than wiping it. |
| 133 """ | 133 """ |
| 134 self.worker.InitializeResultsDirectory() | 134 self.worker.Initialize(9222) |
| 135 # Just make sure some tests pass on original image. Some old images |
| 136 # don't pass many tests. |
| 135 self.worker.PrepareBase(self.base_image_path) | 137 self.worker.PrepareBase(self.base_image_path) |
| 136 | 138 |
| 137 # Update to | 139 # Update to |
| 138 self.worker.PerformUpdate(self.target_image_path, self.base_image_path) | 140 self.worker.PerformUpdate(self.target_image_path, self.base_image_path) |
| 139 self.worker.VerifyImage(self) | 141 self.worker.VerifyImage(self) |
| 140 | 142 |
| 141 # Update from | 143 # Update from |
| 142 self.worker.PerformUpdate(self.target_image_path, self.target_image_path) | 144 self.worker.PerformUpdate(self.target_image_path, self.target_image_path) |
| 143 self.worker.VerifyImage(self) | 145 self.worker.VerifyImage(self) |
| 144 | 146 |
| 145 def testUpdateWipeStateful(self): | 147 def testUpdateWipeStateful(self): |
| 146 """Tests if we can update after cleaning the stateful partition. | 148 """Tests if we can update after cleaning the stateful partition. |
| 147 | 149 |
| 148 This test checks that we can update successfully after wiping the | 150 This test checks that we can update successfully after wiping the |
| 149 stateful partition. | 151 stateful partition. |
| 150 """ | 152 """ |
| 151 self.worker.InitializeResultsDirectory() | 153 self.worker.Initialize(9223) |
| 154 # Just make sure some tests pass on original image. Some old images |
| 155 # don't pass many tests. |
| 152 self.worker.PrepareBase(self.base_image_path) | 156 self.worker.PrepareBase(self.base_image_path) |
| 153 | 157 |
| 154 # Update to | 158 # Update to |
| 155 self.worker.PerformUpdate(self.target_image_path, self.base_image_path, | 159 self.worker.PerformUpdate(self.target_image_path, self.base_image_path, |
| 156 'clean') | 160 'clean') |
| 157 self.worker.VerifyImage(self) | 161 self.worker.VerifyImage(self) |
| 158 | 162 |
| 159 # Update from | 163 # Update from |
| 160 self.worker.PerformUpdate(self.target_image_path, self.target_image_path, | 164 self.worker.PerformUpdate(self.target_image_path, self.target_image_path, |
| 161 'clean') | 165 'clean') |
| (...skipping 24 matching lines...) Expand all Loading... |
| 186 outbound will be closed. | 190 outbound will be closed. |
| 187 """ | 191 """ |
| 188 if self.close_count < 3: | 192 if self.close_count < 3: |
| 189 if self.data_size > (2 * 1024 * 1024): | 193 if self.data_size > (2 * 1024 * 1024): |
| 190 self.close_count += 1 | 194 self.close_count += 1 |
| 191 return None | 195 return None |
| 192 | 196 |
| 193 self.data_size += len(data) | 197 self.data_size += len(data) |
| 194 return data | 198 return data |
| 195 | 199 |
| 196 self.worker.InitializeResultsDirectory() | 200 self.worker.Initialize(9224) |
| 197 self.AttemptUpdateWithFilter(InterruptionFilter(), proxy_port=8082) | 201 self.AttemptUpdateWithFilter(InterruptionFilter(), proxy_port=8082) |
| 198 | 202 |
| 199 def testDelayedUpdate(self): | 203 def testDelayedUpdate(self): |
| 200 """Tests what happens if some data is delayed during update delivery""" | 204 """Tests what happens if some data is delayed during update delivery""" |
| 201 | 205 |
| 202 class DelayedFilter(cros_test_proxy.Filter): | 206 class DelayedFilter(cros_test_proxy.Filter): |
| 203 """Causes intermittent delays in data transmission. | 207 """Causes intermittent delays in data transmission. |
| 204 | 208 |
| 205 It does this by inserting 3 20 second delays when transmitting | 209 It does this by inserting 3 20 second delays when transmitting |
| 206 data after 2M has been sent. | 210 data after 2M has been sent. |
| (...skipping 10 matching lines...) Expand all Loading... |
| 217 are delayed by 20 seconds. | 221 are delayed by 20 seconds. |
| 218 """ | 222 """ |
| 219 if self.delay_count < 3: | 223 if self.delay_count < 3: |
| 220 if self.data_size > (2 * 1024 * 1024): | 224 if self.data_size > (2 * 1024 * 1024): |
| 221 self.delay_count += 1 | 225 self.delay_count += 1 |
| 222 time.sleep(20) | 226 time.sleep(20) |
| 223 | 227 |
| 224 self.data_size += len(data) | 228 self.data_size += len(data) |
| 225 return data | 229 return data |
| 226 | 230 |
| 227 self.worker.InitializeResultsDirectory() | 231 self.worker.Initialize(9225) |
| 228 self.AttemptUpdateWithFilter(DelayedFilter(), proxy_port=8083) | 232 self.AttemptUpdateWithFilter(DelayedFilter(), proxy_port=8083) |
| 229 | 233 |
| 230 def SimpleTest(self): | 234 def SimpleTest(self): |
| 231 """A simple update that updates once from a base image to a target. | 235 """A simple update that updates once from a base image to a target. |
| 232 | 236 |
| 233 We explicitly don't use test prefix so that isn't run by default. Can be | 237 We explicitly don't use test prefix so that isn't run by default. Can be |
| 234 run using test_prefix option. | 238 run using test_prefix option. |
| 235 """ | 239 """ |
| 236 self.worker.InitializeResultsDirectory() | 240 self.worker.Initialize(9226) |
| 237 self.worker.PrepareBase(self.base_image_path) | 241 self.worker.PrepareBase(self.base_image_path) |
| 238 self.worker.PerformUpdate(self.target_image_path, self.base_image_path) | 242 self.worker.PerformUpdate(self.target_image_path, self.base_image_path) |
| 239 self.worker.VerifyImage(self) | 243 self.worker.VerifyImage(self) |
| 240 | 244 |
| 241 # --- DISABLED TESTS --- | 245 # --- DISABLED TESTS --- |
| 242 | 246 |
| 243 # TODO(sosa): Get test to work with verbose. | 247 # TODO(sosa): Get test to work with verbose. |
| 244 def NotestPartialUpdate(self): | 248 def NotestPartialUpdate(self): |
| 245 """Tests what happens if we attempt to update with a truncated payload.""" | 249 """Tests what happens if we attempt to update with a truncated payload.""" |
| 246 self.worker.InitializeResultsDirectory() | 250 self.worker.Initialize(9227) |
| 247 # Preload with the version we are trying to test. | 251 # Preload with the version we are trying to test. |
| 248 self.worker.PrepareBase(self.target_image_path) | 252 self.worker.PrepareBase(self.target_image_path) |
| 249 | 253 |
| 250 # Image can be updated at: | 254 # Image can be updated at: |
| 251 # ~chrome-eng/chromeos/localmirror/autest-images | 255 # ~chrome-eng/chromeos/localmirror/autest-images |
| 252 url = 'http://gsdview.appspot.com/chromeos-localmirror/' \ | 256 url = 'http://gsdview.appspot.com/chromeos-localmirror/' \ |
| 253 'autest-images/truncated_image.gz' | 257 'autest-images/truncated_image.gz' |
| 254 payload = os.path.join(self.download_folder, 'truncated_image.gz') | 258 payload = os.path.join(self.download_folder, 'truncated_image.gz') |
| 255 | 259 |
| 256 # Read from the URL and write to the local file | 260 # Read from the URL and write to the local file |
| 257 urllib.urlretrieve(url, payload) | 261 urllib.urlretrieve(url, payload) |
| 258 | 262 |
| 259 expected_msg = 'download_hash_data == update_check_response_hash failed' | 263 expected_msg = 'download_hash_data == update_check_response_hash failed' |
| 260 self.AttemptUpdateWithPayloadExpectedFailure(payload, expected_msg) | 264 self.AttemptUpdateWithPayloadExpectedFailure(payload, expected_msg) |
| 261 | 265 |
| 262 # TODO(sosa): Get test to work with verbose. | 266 # TODO(sosa): Get test to work with verbose. |
| 263 def NotestCorruptedUpdate(self): | 267 def NotestCorruptedUpdate(self): |
| 264 """Tests what happens if we attempt to update with a corrupted payload.""" | 268 """Tests what happens if we attempt to update with a corrupted payload.""" |
| 265 self.worker.InitializeResultsDirectory() | 269 self.worker.Initialize(9228) |
| 266 # Preload with the version we are trying to test. | 270 # Preload with the version we are trying to test. |
| 267 self.worker.PrepareBase(self.target_image_path) | 271 self.worker.PrepareBase(self.target_image_path) |
| 268 | 272 |
| 269 # Image can be updated at: | 273 # Image can be updated at: |
| 270 # ~chrome-eng/chromeos/localmirror/autest-images | 274 # ~chrome-eng/chromeos/localmirror/autest-images |
| 271 url = 'http://gsdview.appspot.com/chromeos-localmirror/' \ | 275 url = 'http://gsdview.appspot.com/chromeos-localmirror/' \ |
| 272 'autest-images/corrupted_image.gz' | 276 'autest-images/corrupted_image.gz' |
| 273 payload = os.path.join(self.download_folder, 'corrupted.gz') | 277 payload = os.path.join(self.download_folder, 'corrupted.gz') |
| 274 | 278 |
| 275 # Read from the URL and write to the local file | 279 # Read from the URL and write to the local file |
| 276 urllib.urlretrieve(url, payload) | 280 urllib.urlretrieve(url, payload) |
| 277 | 281 |
| 278 # This update is expected to fail... | 282 # This update is expected to fail... |
| 279 expected_msg = 'zlib inflate() error:-3' | 283 expected_msg = 'zlib inflate() error:-3' |
| 280 self.AttemptUpdateWithPayloadExpectedFailure(payload, expected_msg) | 284 self.AttemptUpdateWithPayloadExpectedFailure(payload, expected_msg) |
| OLD | NEW |