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 #include "base/file_util.h" | 5 #include "base/file_util.h" |
6 #include "base/files/scoped_temp_dir.h" | 6 #include "base/files/scoped_temp_dir.h" |
7 #include "base/message_loop/message_loop.h" | 7 #include "base/message_loop/message_loop.h" |
8 #include "base/run_loop.h" | 8 #include "base/run_loop.h" |
9 #include "chrome/browser/extensions/api/image_writer_private/error_messages.h" | 9 #include "chrome/browser/extensions/api/image_writer_private/error_messages.h" |
10 #include "chrome/browser/extensions/api/image_writer_private/operation.h" | 10 #include "chrome/browser/extensions/api/image_writer_private/operation.h" |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
64 }; | 64 }; |
65 | 65 |
66 class ImageWriterOperationTest : public ImageWriterUnitTestBase { | 66 class ImageWriterOperationTest : public ImageWriterUnitTestBase { |
67 protected: | 67 protected: |
68 ImageWriterOperationTest() | 68 ImageWriterOperationTest() |
69 : profile_(new TestingProfile), manager_(profile_.get()) {} | 69 : profile_(new TestingProfile), manager_(profile_.get()) {} |
70 virtual void SetUp() OVERRIDE { | 70 virtual void SetUp() OVERRIDE { |
71 ImageWriterUnitTestBase::SetUp(); | 71 ImageWriterUnitTestBase::SetUp(); |
72 | 72 |
73 // Create the zip file. | 73 // Create the zip file. |
74 base::FilePath image_dir = temp_dir_.path().AppendASCII("zip"); | 74 base::FilePath image_dir = test_utils_.GetTempDir().AppendASCII("zip"); |
75 ASSERT_TRUE(base::CreateDirectory(image_dir)); | 75 ASSERT_TRUE(base::CreateDirectory(image_dir)); |
76 ASSERT_TRUE(base::CreateTemporaryFileInDir(image_dir, &image_path_)); | 76 ASSERT_TRUE(base::CreateTemporaryFileInDir(image_dir, &image_path_)); |
77 | 77 |
78 FillFile(image_path_, kImagePattern, kTestFileSize); | 78 test_utils_.FillFile(image_path_, kImagePattern, kTestFileSize); |
79 | 79 |
80 zip_file_ = temp_dir_.path().AppendASCII("test_image.zip"); | 80 zip_file_ = test_utils_.GetTempDir().AppendASCII("test_image.zip"); |
81 ASSERT_TRUE(zip::Zip(image_dir, zip_file_, true)); | 81 ASSERT_TRUE(zip::Zip(image_dir, zip_file_, true)); |
82 | 82 |
83 // Operation setup. | 83 // Operation setup. |
84 operation_ = new OperationForTest(manager_.AsWeakPtr(), | 84 operation_ = |
85 kDummyExtensionId, | 85 new OperationForTest(manager_.AsWeakPtr(), |
86 test_device_path_.AsUTF8Unsafe()); | 86 kDummyExtensionId, |
87 client_ = FakeImageWriterClient::Create(); | 87 test_utils_.GetDevicePath().AsUTF8Unsafe()); |
88 operation_->SetImagePath(test_image_path_); | 88 operation_->SetImagePath(test_utils_.GetImagePath()); |
89 } | 89 } |
90 | 90 |
91 virtual void TearDown() OVERRIDE { | 91 virtual void TearDown() OVERRIDE { |
92 // Ensure all callbacks have been destroyed and cleanup occurs. | 92 // Ensure all callbacks have been destroyed and cleanup occurs. |
93 client_->Shutdown(); | |
94 operation_->Cancel(); | 93 operation_->Cancel(); |
95 | 94 |
96 ImageWriterUnitTestBase::TearDown(); | 95 ImageWriterUnitTestBase::TearDown(); |
97 } | 96 } |
98 | 97 |
99 base::FilePath image_path_; | 98 base::FilePath image_path_; |
100 base::FilePath zip_file_; | 99 base::FilePath zip_file_; |
101 | 100 |
102 scoped_ptr<TestingProfile> profile_; | 101 scoped_ptr<TestingProfile> profile_; |
103 | 102 |
104 MockOperationManager manager_; | 103 MockOperationManager manager_; |
105 scoped_refptr<FakeImageWriterClient> client_; | |
106 scoped_refptr<OperationForTest> operation_; | 104 scoped_refptr<OperationForTest> operation_; |
107 }; | 105 }; |
108 | 106 |
109 } // namespace | 107 } // namespace |
110 | 108 |
111 // Unizpping a non-zip should do nothing. | 109 // Unizpping a non-zip should do nothing. |
112 TEST_F(ImageWriterOperationTest, UnzipNonZipFile) { | 110 TEST_F(ImageWriterOperationTest, UnzipNonZipFile) { |
113 EXPECT_CALL(manager_, OnProgress(kDummyExtensionId, _, _)).Times(0); | 111 EXPECT_CALL(manager_, OnProgress(kDummyExtensionId, _, _)).Times(0); |
114 | 112 |
115 EXPECT_CALL(manager_, OnError(kDummyExtensionId, _, _, _)).Times(0); | 113 EXPECT_CALL(manager_, OnError(kDummyExtensionId, _, _, _)).Times(0); |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
147 base::Bind( | 145 base::Bind( |
148 &OperationForTest::Unzip, operation_, base::Bind(&base::DoNothing))); | 146 &OperationForTest::Unzip, operation_, base::Bind(&base::DoNothing))); |
149 | 147 |
150 base::RunLoop().RunUntilIdle(); | 148 base::RunLoop().RunUntilIdle(); |
151 | 149 |
152 EXPECT_TRUE(base::ContentsEqual(image_path_, operation_->GetImagePath())); | 150 EXPECT_TRUE(base::ContentsEqual(image_path_, operation_->GetImagePath())); |
153 } | 151 } |
154 | 152 |
155 #if defined(OS_LINUX) | 153 #if defined(OS_LINUX) |
156 TEST_F(ImageWriterOperationTest, WriteImageToDevice) { | 154 TEST_F(ImageWriterOperationTest, WriteImageToDevice) { |
157 #if !defined(OS_CHROMEOS) | |
158 operation_->SetUtilityClientForTesting(client_); | |
159 #endif | |
160 | |
161 EXPECT_CALL(manager_, OnError(kDummyExtensionId, _, _, _)).Times(0); | 155 EXPECT_CALL(manager_, OnError(kDummyExtensionId, _, _, _)).Times(0); |
162 EXPECT_CALL(manager_, | 156 EXPECT_CALL(manager_, |
163 OnProgress(kDummyExtensionId, image_writer_api::STAGE_WRITE, _)) | 157 OnProgress(kDummyExtensionId, image_writer_api::STAGE_WRITE, _)) |
164 .Times(AtLeast(1)); | 158 .Times(AtLeast(1)); |
165 EXPECT_CALL(manager_, | 159 EXPECT_CALL(manager_, |
166 OnProgress(kDummyExtensionId, image_writer_api::STAGE_WRITE, 0)) | 160 OnProgress(kDummyExtensionId, image_writer_api::STAGE_WRITE, 0)) |
167 .Times(AtLeast(1)); | 161 .Times(AtLeast(1)); |
168 EXPECT_CALL(manager_, | 162 EXPECT_CALL(manager_, |
169 OnProgress(kDummyExtensionId, image_writer_api::STAGE_WRITE, 100)) | 163 OnProgress(kDummyExtensionId, image_writer_api::STAGE_WRITE, 100)) |
170 .Times(AtLeast(1)); | 164 .Times(AtLeast(1)); |
171 | 165 |
172 operation_->Start(); | 166 operation_->Start(); |
173 content::BrowserThread::PostTask( | 167 content::BrowserThread::PostTask( |
174 content::BrowserThread::FILE, | 168 content::BrowserThread::FILE, |
175 FROM_HERE, | 169 FROM_HERE, |
176 base::Bind( | 170 base::Bind( |
177 &OperationForTest::Write, operation_, base::Bind(&base::DoNothing))); | 171 &OperationForTest::Write, operation_, base::Bind(&base::DoNothing))); |
178 | 172 |
179 base::RunLoop().RunUntilIdle(); | 173 base::RunLoop().RunUntilIdle(); |
180 | 174 |
181 #if !defined(OS_CHROMEOS) | 175 #if !defined(OS_CHROMEOS) |
182 client_->Progress(0); | 176 test_utils_.GetUtilityClient()->Progress(0); |
183 client_->Progress(kTestFileSize / 2); | 177 test_utils_.GetUtilityClient()->Progress(kTestFileSize / 2); |
184 client_->Progress(kTestFileSize); | 178 test_utils_.GetUtilityClient()->Progress(kTestFileSize); |
185 client_->Success(); | 179 test_utils_.GetUtilityClient()->Success(); |
186 | 180 |
187 base::RunLoop().RunUntilIdle(); | 181 base::RunLoop().RunUntilIdle(); |
188 #endif | 182 #endif |
189 } | 183 } |
190 #endif | 184 #endif |
191 | 185 |
192 #if !defined(OS_CHROMEOS) | 186 #if !defined(OS_CHROMEOS) |
193 // Chrome OS doesn't support verification in the ImageBurner, so these two tests | 187 // Chrome OS doesn't support verification in the ImageBurner, so these two tests |
194 // are skipped. | 188 // are skipped. |
195 | 189 |
196 TEST_F(ImageWriterOperationTest, VerifyFileSuccess) { | 190 TEST_F(ImageWriterOperationTest, VerifyFileSuccess) { |
197 operation_->SetUtilityClientForTesting(client_); | |
198 | |
199 EXPECT_CALL(manager_, OnError(kDummyExtensionId, _, _, _)).Times(0); | 191 EXPECT_CALL(manager_, OnError(kDummyExtensionId, _, _, _)).Times(0); |
200 EXPECT_CALL( | 192 EXPECT_CALL( |
201 manager_, | 193 manager_, |
202 OnProgress(kDummyExtensionId, image_writer_api::STAGE_VERIFYWRITE, _)) | 194 OnProgress(kDummyExtensionId, image_writer_api::STAGE_VERIFYWRITE, _)) |
203 .Times(AtLeast(1)); | 195 .Times(AtLeast(1)); |
204 EXPECT_CALL( | 196 EXPECT_CALL( |
205 manager_, | 197 manager_, |
206 OnProgress(kDummyExtensionId, image_writer_api::STAGE_VERIFYWRITE, 0)) | 198 OnProgress(kDummyExtensionId, image_writer_api::STAGE_VERIFYWRITE, 0)) |
207 .Times(AtLeast(1)); | 199 .Times(AtLeast(1)); |
208 EXPECT_CALL( | 200 EXPECT_CALL( |
209 manager_, | 201 manager_, |
210 OnProgress(kDummyExtensionId, image_writer_api::STAGE_VERIFYWRITE, 100)) | 202 OnProgress(kDummyExtensionId, image_writer_api::STAGE_VERIFYWRITE, 100)) |
211 .Times(AtLeast(1)); | 203 .Times(AtLeast(1)); |
212 | 204 |
213 FillFile(test_device_path_, kImagePattern, kTestFileSize); | 205 test_utils_.FillFile( |
| 206 test_utils_.GetDevicePath(), kImagePattern, kTestFileSize); |
214 | 207 |
215 operation_->Start(); | 208 operation_->Start(); |
216 content::BrowserThread::PostTask(content::BrowserThread::FILE, | 209 content::BrowserThread::PostTask(content::BrowserThread::FILE, |
217 FROM_HERE, | 210 FROM_HERE, |
218 base::Bind(&OperationForTest::VerifyWrite, | 211 base::Bind(&OperationForTest::VerifyWrite, |
219 operation_, | 212 operation_, |
220 base::Bind(&base::DoNothing))); | 213 base::Bind(&base::DoNothing))); |
221 | 214 |
222 base::RunLoop().RunUntilIdle(); | 215 base::RunLoop().RunUntilIdle(); |
223 | 216 |
224 client_->Progress(0); | 217 #if !defined(OS_CHROMEOS) |
225 client_->Progress(kTestFileSize / 2); | 218 test_utils_.GetUtilityClient()->Progress(0); |
226 client_->Progress(kTestFileSize); | 219 test_utils_.GetUtilityClient()->Progress(kTestFileSize / 2); |
227 client_->Success(); | 220 test_utils_.GetUtilityClient()->Progress(kTestFileSize); |
| 221 test_utils_.GetUtilityClient()->Success(); |
| 222 #endif |
228 | 223 |
229 base::RunLoop().RunUntilIdle(); | 224 base::RunLoop().RunUntilIdle(); |
230 } | 225 } |
231 | 226 |
232 TEST_F(ImageWriterOperationTest, VerifyFileFailure) { | 227 TEST_F(ImageWriterOperationTest, VerifyFileFailure) { |
233 operation_->SetUtilityClientForTesting(client_); | |
234 | |
235 EXPECT_CALL( | 228 EXPECT_CALL( |
236 manager_, | 229 manager_, |
237 OnProgress(kDummyExtensionId, image_writer_api::STAGE_VERIFYWRITE, _)) | 230 OnProgress(kDummyExtensionId, image_writer_api::STAGE_VERIFYWRITE, _)) |
238 .Times(AnyNumber()); | 231 .Times(AnyNumber()); |
239 EXPECT_CALL( | 232 EXPECT_CALL( |
240 manager_, | 233 manager_, |
241 OnProgress(kDummyExtensionId, image_writer_api::STAGE_VERIFYWRITE, 100)) | 234 OnProgress(kDummyExtensionId, image_writer_api::STAGE_VERIFYWRITE, 100)) |
242 .Times(0); | 235 .Times(0); |
243 EXPECT_CALL(manager_, OnComplete(kDummyExtensionId)).Times(0); | 236 EXPECT_CALL(manager_, OnComplete(kDummyExtensionId)).Times(0); |
244 EXPECT_CALL( | 237 EXPECT_CALL( |
245 manager_, | 238 manager_, |
246 OnError(kDummyExtensionId, image_writer_api::STAGE_VERIFYWRITE, _, _)) | 239 OnError(kDummyExtensionId, image_writer_api::STAGE_VERIFYWRITE, _, _)) |
247 .Times(1); | 240 .Times(1); |
248 | 241 |
249 FillFile(test_device_path_, kDevicePattern, kTestFileSize); | 242 test_utils_.FillFile( |
| 243 test_utils_.GetDevicePath(), kDevicePattern, kTestFileSize); |
250 | 244 |
251 operation_->Start(); | 245 operation_->Start(); |
252 content::BrowserThread::PostTask(content::BrowserThread::FILE, | 246 content::BrowserThread::PostTask(content::BrowserThread::FILE, |
253 FROM_HERE, | 247 FROM_HERE, |
254 base::Bind(&OperationForTest::VerifyWrite, | 248 base::Bind(&OperationForTest::VerifyWrite, |
255 operation_, | 249 operation_, |
256 base::Bind(&base::DoNothing))); | 250 base::Bind(&base::DoNothing))); |
257 | 251 |
258 base::RunLoop().RunUntilIdle(); | 252 base::RunLoop().RunUntilIdle(); |
259 | 253 |
260 client_->Progress(0); | 254 test_utils_.GetUtilityClient()->Progress(0); |
261 client_->Progress(kTestFileSize / 2); | 255 test_utils_.GetUtilityClient()->Progress(kTestFileSize / 2); |
262 client_->Error(error::kVerificationFailed); | 256 test_utils_.GetUtilityClient()->Error(error::kVerificationFailed); |
263 | 257 |
264 base::RunLoop().RunUntilIdle(); | 258 base::RunLoop().RunUntilIdle(); |
265 } | 259 } |
266 #endif | 260 #endif |
267 | 261 |
268 // Tests that on creation the operation_ has the expected state. | 262 // Tests that on creation the operation_ has the expected state. |
269 TEST_F(ImageWriterOperationTest, Creation) { | 263 TEST_F(ImageWriterOperationTest, Creation) { |
270 EXPECT_EQ(0, operation_->GetProgress()); | 264 EXPECT_EQ(0, operation_->GetProgress()); |
271 EXPECT_EQ(image_writer_api::STAGE_UNKNOWN, operation_->GetStage()); | 265 EXPECT_EQ(image_writer_api::STAGE_UNKNOWN, operation_->GetStage()); |
272 } | 266 } |
273 | 267 |
274 } // namespace image_writer | 268 } // namespace image_writer |
275 } // namespace extensions | 269 } // namespace extensions |
OLD | NEW |