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
3 // found in the LICENSE file.
5 #include "chrome/browser/extensions/api/image_writer_private/test_utils.h"
7 #if defined(OS_CHROMEOS)
8 #include "chromeos/dbus/dbus_thread_manager.h"
9 #include "chromeos/dbus/fake_dbus_thread_manager.h"
10 #include "chromeos/dbus/fake_image_burner_client.h"
13 namespace extensions {
14 namespace image_writer {
16 #if defined(OS_CHROMEOS)
19 class ImageWriterFakeImageBurnerClient
20 : public chromeos::FakeImageBurnerClient {
22 ImageWriterFakeImageBurnerClient() {}
23 virtual ~ImageWriterFakeImageBurnerClient() {}
25 virtual void SetEventHandlers(
26 const BurnFinishedHandler& burn_finished_handler,
27 const BurnProgressUpdateHandler& burn_progress_update_handler) OVERRIDE {
28 burn_finished_handler_ = burn_finished_handler;
29 burn_progress_update_handler_ = burn_progress_update_handler;
32 virtual void BurnImage(const std::string& from_path,
33 const std::string& to_path,
34 const ErrorCallback& error_callback) OVERRIDE {
35 base::MessageLoop::current()->PostTask(FROM_HERE,
36 base::Bind(burn_progress_update_handler_, to_path, 0, 100));
37 base::MessageLoop::current()->PostTask(FROM_HERE,
38 base::Bind(burn_progress_update_handler_, to_path, 50, 100));
39 base::MessageLoop::current()->PostTask(FROM_HERE,
40 base::Bind(burn_progress_update_handler_, to_path, 100, 100));
41 base::MessageLoop::current()->PostTask(FROM_HERE,
42 base::Bind(burn_finished_handler_, to_path, true, ""));
46 BurnFinishedHandler burn_finished_handler_;
47 BurnProgressUpdateHandler burn_progress_update_handler_;
53 MockOperationManager::MockOperationManager() : OperationManager(NULL) {}
54 MockOperationManager::MockOperationManager(content::BrowserContext* context)
55 : OperationManager(context) {}
56 MockOperationManager::~MockOperationManager() {}
58 #if defined(OS_CHROMEOS)
59 FakeDiskMountManager::FakeDiskMountManager() {}
60 FakeDiskMountManager::~FakeDiskMountManager() {}
62 void FakeDiskMountManager::UnmountDeviceRecursively(
63 const std::string& device_path,
64 const UnmountDeviceRecursivelyCallbackType& callback) {
65 base::MessageLoop::current()->PostTask(FROM_HERE, base::Bind(callback, true));
69 FakeImageWriterClient::FakeImageWriterClient() {}
70 FakeImageWriterClient::~FakeImageWriterClient() {}
72 void FakeImageWriterClient::Write(const ProgressCallback& progress_callback,
73 const SuccessCallback& success_callback,
74 const ErrorCallback& error_callback,
75 const base::FilePath& source,
76 const base::FilePath& target) {
77 progress_callback_ = progress_callback;
78 success_callback_ = success_callback;
79 error_callback_ = error_callback;
81 if (!write_callback_.is_null())
82 write_callback_.Run();
85 void FakeImageWriterClient::Verify(const ProgressCallback& progress_callback,
86 const SuccessCallback& success_callback,
87 const ErrorCallback& error_callback,
88 const base::FilePath& source,
89 const base::FilePath& target) {
90 progress_callback_ = progress_callback;
91 success_callback_ = success_callback;
92 error_callback_ = error_callback;
94 if (!verify_callback_.is_null())
95 verify_callback_.Run();
98 void FakeImageWriterClient::Cancel(const CancelCallback& cancel_callback) {
99 cancel_callback_ = cancel_callback;
102 void FakeImageWriterClient::Shutdown() {
103 // Clear handlers to not hold any reference to the caller.
104 success_callback_.Reset();
105 progress_callback_.Reset();
106 error_callback_.Reset();
107 cancel_callback_.Reset();
109 write_callback_.Reset();
110 verify_callback_.Reset();
113 void FakeImageWriterClient::SetWriteCallback(
114 const base::Closure& write_callback) {
115 write_callback_ = write_callback;
118 void FakeImageWriterClient::SetVerifyCallback(
119 const base::Closure& verify_callback) {
120 verify_callback_ = verify_callback;
123 void FakeImageWriterClient::Progress(int64 progress) {
124 if (!progress_callback_.is_null())
125 progress_callback_.Run(progress);
128 void FakeImageWriterClient::Success() {
129 if (!success_callback_.is_null())
130 success_callback_.Run();
133 void FakeImageWriterClient::Error(const std::string& message) {
134 if (!error_callback_.is_null())
135 error_callback_.Run(message);
138 void FakeImageWriterClient::Cancel() {
139 if (!cancel_callback_.is_null())
140 cancel_callback_.Run();
143 ImageWriterTestUtils::ImageWriterTestUtils() {
145 ImageWriterTestUtils::~ImageWriterTestUtils() {
148 void ImageWriterTestUtils::SetUp() {
152 void ImageWriterTestUtils::SetUp(bool is_browser_test) {
153 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir());
154 ASSERT_TRUE(base::CreateTemporaryFileInDir(temp_dir_.path(),
156 ASSERT_TRUE(base::CreateTemporaryFileInDir(temp_dir_.path(),
157 &test_device_path_));
159 ASSERT_TRUE(FillFile(test_image_path_, kImagePattern, kTestFileSize));
160 ASSERT_TRUE(FillFile(test_device_path_, kDevicePattern, kTestFileSize));
162 #if defined(OS_CHROMEOS)
163 if (!chromeos::DBusThreadManager::IsInitialized()) {
164 chromeos::FakeDBusThreadManager* fake_dbus_thread_manager =
165 new chromeos::FakeDBusThreadManager;
166 fake_dbus_thread_manager->SetFakeClients();
167 scoped_ptr<chromeos::ImageBurnerClient>
168 image_burner_fake(new ImageWriterFakeImageBurnerClient());
169 fake_dbus_thread_manager->SetImageBurnerClient(image_burner_fake.Pass());
171 if (is_browser_test) {
172 chromeos::DBusThreadManager::SetInstanceForTesting(
173 fake_dbus_thread_manager);
175 chromeos::DBusThreadManager::InitializeForTesting(
176 fake_dbus_thread_manager);
180 FakeDiskMountManager* disk_manager = new FakeDiskMountManager();
181 chromeos::disks::DiskMountManager::InitializeForTesting(disk_manager);
183 // Adds a disk entry for test_device_path_ with the same device and file path.
184 disk_manager->CreateDiskEntryForMountDevice(
185 chromeos::disks::DiskMountManager::MountPointInfo(
186 test_device_path_.value(),
188 chromeos::MOUNT_TYPE_DEVICE,
189 chromeos::disks::MOUNT_CONDITION_NONE),
194 chromeos::DEVICE_TYPE_USB,
200 disk_manager->SetupDefaultReplies();
202 client_ = new FakeImageWriterClient();
203 image_writer::Operation::SetUtilityClientForTesting(client_);
207 void ImageWriterTestUtils::TearDown() {
208 #if defined(OS_CHROMEOS)
209 if (chromeos::DBusThreadManager::IsInitialized()) {
210 chromeos::DBusThreadManager::Shutdown();
212 chromeos::disks::DiskMountManager::Shutdown();
214 image_writer::Operation::SetUtilityClientForTesting(NULL);
219 const base::FilePath& ImageWriterTestUtils::GetTempDir() {
220 return temp_dir_.path();
223 const base::FilePath& ImageWriterTestUtils::GetImagePath() {
224 return test_image_path_;
227 const base::FilePath& ImageWriterTestUtils::GetDevicePath() {
228 return test_device_path_;
231 #if !defined(OS_CHROMEOS)
232 FakeImageWriterClient* ImageWriterTestUtils::GetUtilityClient() {
233 return client_.get();
237 bool ImageWriterTestUtils::ImageWrittenToDevice() {
238 scoped_ptr<char[]> image_buffer(new char[kTestFileSize]);
239 scoped_ptr<char[]> device_buffer(new char[kTestFileSize]);
241 int image_bytes_read =
242 ReadFile(test_image_path_, image_buffer.get(), kTestFileSize);
244 if (image_bytes_read < 0)
247 int device_bytes_read =
248 ReadFile(test_device_path_, device_buffer.get(), kTestFileSize);
250 if (image_bytes_read != device_bytes_read)
253 return memcmp(image_buffer.get(), device_buffer.get(), image_bytes_read) == 0;
256 bool ImageWriterTestUtils::FillFile(const base::FilePath& file,
259 scoped_ptr<char[]> buffer(new char[length]);
260 memset(buffer.get(), pattern, length);
262 return base::WriteFile(file, buffer.get(), length) == length;
265 ImageWriterUnitTestBase::ImageWriterUnitTestBase()
266 : thread_bundle_(content::TestBrowserThreadBundle::IO_MAINLOOP) {
268 ImageWriterUnitTestBase::~ImageWriterUnitTestBase() {
271 void ImageWriterUnitTestBase::SetUp() {
272 testing::Test::SetUp();
276 void ImageWriterUnitTestBase::TearDown() {
277 testing::Test::TearDown();
278 test_utils_.TearDown();
281 } // namespace image_writer
282 } // namespace extensions