Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / extensions / api / image_writer_private / test_utils.cc
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.
4
5 #include "chrome/browser/extensions/api/image_writer_private/test_utils.h"
6
7 #if defined(OS_CHROMEOS)
8 #include "chromeos/dbus/dbus_thread_manager.h"
9 #include "chromeos/dbus/fake_image_burner_client.h"
10 #endif
11
12 namespace extensions {
13 namespace image_writer {
14
15 #if defined(OS_CHROMEOS)
16 namespace {
17
18 class ImageWriterFakeImageBurnerClient
19     : public chromeos::FakeImageBurnerClient {
20  public:
21   ImageWriterFakeImageBurnerClient() {}
22   virtual ~ImageWriterFakeImageBurnerClient() {}
23
24   virtual void SetEventHandlers(
25       const BurnFinishedHandler& burn_finished_handler,
26       const BurnProgressUpdateHandler& burn_progress_update_handler) OVERRIDE {
27     burn_finished_handler_ = burn_finished_handler;
28     burn_progress_update_handler_ = burn_progress_update_handler;
29   }
30
31   virtual void BurnImage(const std::string& from_path,
32                          const std::string& to_path,
33                          const ErrorCallback& error_callback) OVERRIDE {
34     base::MessageLoop::current()->PostTask(FROM_HERE,
35         base::Bind(burn_progress_update_handler_, to_path, 0, 100));
36     base::MessageLoop::current()->PostTask(FROM_HERE,
37         base::Bind(burn_progress_update_handler_, to_path, 50, 100));
38     base::MessageLoop::current()->PostTask(FROM_HERE,
39         base::Bind(burn_progress_update_handler_, to_path, 100, 100));
40     base::MessageLoop::current()->PostTask(FROM_HERE,
41         base::Bind(burn_finished_handler_, to_path, true, ""));
42   }
43
44  private:
45   BurnFinishedHandler burn_finished_handler_;
46   BurnProgressUpdateHandler burn_progress_update_handler_;
47 };
48
49 } // namespace
50 #endif
51
52 MockOperationManager::MockOperationManager() : OperationManager(NULL) {}
53 MockOperationManager::MockOperationManager(content::BrowserContext* context)
54     : OperationManager(context) {}
55 MockOperationManager::~MockOperationManager() {}
56
57 #if defined(OS_CHROMEOS)
58 FakeDiskMountManager::FakeDiskMountManager() {}
59 FakeDiskMountManager::~FakeDiskMountManager() {}
60
61 void FakeDiskMountManager::UnmountDeviceRecursively(
62     const std::string& device_path,
63     const UnmountDeviceRecursivelyCallbackType& callback) {
64   base::MessageLoop::current()->PostTask(FROM_HERE, base::Bind(callback, true));
65 }
66 #endif
67
68 FakeImageWriterClient::FakeImageWriterClient() {}
69 FakeImageWriterClient::~FakeImageWriterClient() {}
70
71 void FakeImageWriterClient::Write(const ProgressCallback& progress_callback,
72                                   const SuccessCallback& success_callback,
73                                   const ErrorCallback& error_callback,
74                                   const base::FilePath& source,
75                                   const base::FilePath& target) {
76   progress_callback_ = progress_callback;
77   success_callback_ = success_callback;
78   error_callback_ = error_callback;
79
80   if (!write_callback_.is_null())
81     write_callback_.Run();
82 }
83
84 void FakeImageWriterClient::Verify(const ProgressCallback& progress_callback,
85                                    const SuccessCallback& success_callback,
86                                    const ErrorCallback& error_callback,
87                                    const base::FilePath& source,
88                                    const base::FilePath& target) {
89   progress_callback_ = progress_callback;
90   success_callback_ = success_callback;
91   error_callback_ = error_callback;
92
93   if (!verify_callback_.is_null())
94     verify_callback_.Run();
95 }
96
97 void FakeImageWriterClient::Cancel(const CancelCallback& cancel_callback) {
98   cancel_callback_ = cancel_callback;
99 }
100
101 void FakeImageWriterClient::Shutdown() {
102   // Clear handlers to not hold any reference to the caller.
103   success_callback_.Reset();
104   progress_callback_.Reset();
105   error_callback_.Reset();
106   cancel_callback_.Reset();
107
108   write_callback_.Reset();
109   verify_callback_.Reset();
110 }
111
112 void FakeImageWriterClient::SetWriteCallback(
113     const base::Closure& write_callback) {
114   write_callback_ = write_callback;
115 }
116
117 void FakeImageWriterClient::SetVerifyCallback(
118     const base::Closure& verify_callback) {
119   verify_callback_ = verify_callback;
120 }
121
122 void FakeImageWriterClient::Progress(int64 progress) {
123   if (!progress_callback_.is_null())
124     progress_callback_.Run(progress);
125 }
126
127 void FakeImageWriterClient::Success() {
128   if (!success_callback_.is_null())
129     success_callback_.Run();
130 }
131
132 void FakeImageWriterClient::Error(const std::string& message) {
133   if (!error_callback_.is_null())
134     error_callback_.Run(message);
135 }
136
137 void FakeImageWriterClient::Cancel() {
138   if (!cancel_callback_.is_null())
139     cancel_callback_.Run();
140 }
141
142 ImageWriterTestUtils::ImageWriterTestUtils() {
143 }
144 ImageWriterTestUtils::~ImageWriterTestUtils() {
145 }
146
147 void ImageWriterTestUtils::SetUp() {
148   SetUp(false);
149 }
150
151 void ImageWriterTestUtils::SetUp(bool is_browser_test) {
152   ASSERT_TRUE(temp_dir_.CreateUniqueTempDir());
153   ASSERT_TRUE(base::CreateTemporaryFileInDir(temp_dir_.path(),
154                                              &test_image_path_));
155   ASSERT_TRUE(base::CreateTemporaryFileInDir(temp_dir_.path(),
156                                              &test_device_path_));
157
158   ASSERT_TRUE(FillFile(test_image_path_, kImagePattern, kTestFileSize));
159   ASSERT_TRUE(FillFile(test_device_path_, kDevicePattern, kTestFileSize));
160
161 #if defined(OS_CHROMEOS)
162   if (!chromeos::DBusThreadManager::IsInitialized()) {
163     scoped_ptr<chromeos::DBusThreadManagerSetter> dbus_setter =
164         chromeos::DBusThreadManager::GetSetterForTesting();
165     scoped_ptr<chromeos::ImageBurnerClient>
166         image_burner_fake(new ImageWriterFakeImageBurnerClient());
167     dbus_setter->SetImageBurnerClient(image_burner_fake.Pass());
168   }
169
170   FakeDiskMountManager* disk_manager = new FakeDiskMountManager();
171   chromeos::disks::DiskMountManager::InitializeForTesting(disk_manager);
172
173   // Adds a disk entry for test_device_path_ with the same device and file path.
174   disk_manager->CreateDiskEntryForMountDevice(
175       chromeos::disks::DiskMountManager::MountPointInfo(
176           test_device_path_.value(),
177           "/dummy/mount",
178           chromeos::MOUNT_TYPE_DEVICE,
179           chromeos::disks::MOUNT_CONDITION_NONE),
180       "device_id",
181       "device_label",
182       "Vendor",
183       "Product",
184       chromeos::DEVICE_TYPE_USB,
185       kTestFileSize,
186       true,
187       true,
188       true,
189       false);
190   disk_manager->SetupDefaultReplies();
191 #else
192   client_ = new FakeImageWriterClient();
193   image_writer::Operation::SetUtilityClientForTesting(client_);
194 #endif
195 }
196
197 void ImageWriterTestUtils::TearDown() {
198 #if defined(OS_CHROMEOS)
199   if (chromeos::DBusThreadManager::IsInitialized()) {
200     chromeos::DBusThreadManager::Shutdown();
201   }
202   chromeos::disks::DiskMountManager::Shutdown();
203 #else
204   image_writer::Operation::SetUtilityClientForTesting(NULL);
205   client_->Shutdown();
206 #endif
207 }
208
209 const base::FilePath& ImageWriterTestUtils::GetTempDir() {
210   return temp_dir_.path();
211 }
212
213 const base::FilePath& ImageWriterTestUtils::GetImagePath() {
214   return test_image_path_;
215 }
216
217 const base::FilePath& ImageWriterTestUtils::GetDevicePath() {
218   return test_device_path_;
219 }
220
221 #if !defined(OS_CHROMEOS)
222 FakeImageWriterClient* ImageWriterTestUtils::GetUtilityClient() {
223   return client_.get();
224 }
225 #endif
226
227 bool ImageWriterTestUtils::ImageWrittenToDevice() {
228   scoped_ptr<char[]> image_buffer(new char[kTestFileSize]);
229   scoped_ptr<char[]> device_buffer(new char[kTestFileSize]);
230
231   int image_bytes_read =
232       ReadFile(test_image_path_, image_buffer.get(), kTestFileSize);
233
234   if (image_bytes_read < 0)
235     return false;
236
237   int device_bytes_read =
238       ReadFile(test_device_path_, device_buffer.get(), kTestFileSize);
239
240   if (image_bytes_read != device_bytes_read)
241     return false;
242
243   return memcmp(image_buffer.get(), device_buffer.get(), image_bytes_read) == 0;
244 }
245
246 bool ImageWriterTestUtils::FillFile(const base::FilePath& file,
247                                     const int pattern,
248                                     const int length) {
249   scoped_ptr<char[]> buffer(new char[length]);
250   memset(buffer.get(), pattern, length);
251
252   return base::WriteFile(file, buffer.get(), length) == length;
253 }
254
255 ImageWriterUnitTestBase::ImageWriterUnitTestBase()
256     : thread_bundle_(content::TestBrowserThreadBundle::IO_MAINLOOP) {
257 }
258 ImageWriterUnitTestBase::~ImageWriterUnitTestBase() {
259 }
260
261 void ImageWriterUnitTestBase::SetUp() {
262   testing::Test::SetUp();
263   test_utils_.SetUp();
264 }
265
266 void ImageWriterUnitTestBase::TearDown() {
267   testing::Test::TearDown();
268   test_utils_.TearDown();
269 }
270
271 }  // namespace image_writer
272 }  // namespace extensions