Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(765)

Side by Side Diff: chrome/browser/extensions/api/image_writer_private/operation_unittest.cc

Issue 92873003: Adds asynchronous unzip functions to ZipReader (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fixes callback types and removes unnecessary message posting. Created 7 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 "chrome/browser/extensions/api/image_writer_private/error_messages.h" 5 #include "base/file_util.h"
6 #include "base/files/scoped_temp_dir.h"
7 #include "base/message_loop/message_loop.h"
8 #include "base/run_loop.h"
6 #include "chrome/browser/extensions/api/image_writer_private/operation.h" 9 #include "chrome/browser/extensions/api/image_writer_private/operation.h"
7 #include "chrome/browser/extensions/api/image_writer_private/test_utils.h" 10 #include "chrome/browser/extensions/api/image_writer_private/operation_manager.h "
11 #include "chrome/test/base/testing_profile.h"
12 #include "content/public/browser/browser_thread.h"
13 #include "content/public/test/test_browser_thread_bundle.h"
14 #include "testing/gmock/include/gmock/gmock.h"
15 #include "testing/gtest/include/gtest/gtest.h"
16 #include "third_party/zlib/google/zip.h"
8 17
9 namespace extensions { 18 namespace extensions {
10 namespace image_writer { 19 namespace image_writer {
11 20
12 class ImageWriterOperationTest : public ImageWriterUnitTestBase { 21 namespace {
22
23 using testing::_;
24 using testing::AnyNumber;
25 using testing::AtLeast;
26 using testing::Gt;
27 using testing::Lt;
28
29 static const char kDummyExtensionId[] = "Dummy Extension";
30 static unsigned int kTestFileSize = 1024 * 1024; // 1 MB
31 static unsigned char kTestPattern = 0x55; // 1 MB
32
33 // This class gives us access to the protected methods of Operation so that we
34 // can call them directly.
35 class OperationForTest : public Operation {
36 public:
37 OperationForTest(base::WeakPtr<OperationManager> manager,
38 const ExtensionId& extension_id,
39 const std::string& storage_unit_id)
40 : Operation(manager, extension_id, storage_unit_id) {}
41
42 virtual void Start() OVERRIDE {
43 }
44
45 void UnzipStart(scoped_ptr<base::FilePath> zip_file) {
46 Operation::UnzipStart(zip_file.Pass());
47 }
48
49 void WriteStart() {
50 Operation::WriteStart();
51 }
52
53 void VerifyWriteStart() {
54 Operation::Start();
55 }
56
57 void Finish() {
58 Operation::Finish();
59 }
60 private:
61 virtual ~OperationForTest() {};
13 }; 62 };
14 63
15 class DummyOperation : public Operation { 64 // A mock for OperationManager
65 class MockManager : public OperationManager {
16 public: 66 public:
17 DummyOperation(base::WeakPtr<OperationManager> manager, 67 explicit MockManager(Profile* profile) : OperationManager(profile) {}
18 const ExtensionId& extension_id, 68
19 const std::string& storage_unit_id) 69 MOCK_METHOD3(OnProgress, void(const ExtensionId&,
20 : Operation(manager, extension_id, storage_unit_id) {}; 70 image_writer_api::Stage,
21 virtual void Start() OVERRIDE {}; 71 int));
22 private: 72 MOCK_METHOD1(OnComplete, void(const ExtensionId&));
23 virtual ~DummyOperation() {}; 73 MOCK_METHOD4(OnError, void(const ExtensionId&,
74 image_writer_api::Stage,
75 int,
76 const std::string&));
24 }; 77 };
25 78
79 class ImageWriterOperationTest : public testing::Test {
80 protected:
81 virtual void SetUp() OVERRIDE {
82 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir());
83 ASSERT_TRUE(base::CreateTemporaryFileInDir(temp_dir_.path(),
84 &image_file_));
85 ASSERT_TRUE(base::CreateTemporaryFile(&device_file_));
86 ASSERT_TRUE(base::CreateTemporaryFile(&zip_file_));
87
88 char buffer[kTestFileSize];
89 memset(buffer, kTestPattern, kTestFileSize);
90 file_util::WriteFile(image_file_, buffer, kTestFileSize);
91
92 zip::Zip(temp_dir_.path(), zip_file_, true);
93 }
94
95 virtual void TearDown() OVERRIDE {
96 }
97
98 base::FilePath zip_file_;
99 base::FilePath image_file_;
100 base::FilePath device_file_;
101 TestingProfile test_profile_;
102 base::ScopedTempDir temp_dir_;
103
104 private:
105 content::TestBrowserThreadBundle thread_bundle_;
106 };
107
108 } // namespace
109
110 // Tests a successful unzip.
111 TEST_F(ImageWriterOperationTest, TestUnzip) {
112 MockManager manager(&test_profile_);
113
114 scoped_refptr<OperationForTest> operation(
115 new OperationForTest(manager.AsWeakPtr(),
116 kDummyExtensionId,
117 device_file_.AsUTF8Unsafe()));
118
119 scoped_ptr<base::FilePath> zip_file(new base::FilePath(zip_file_));
120
121 // At least one progress report > 0% and < 100%.
122 EXPECT_CALL(manager, OnProgress(kDummyExtensionId,
123 image_writer_api::STAGE_UNZIP,
124 Lt(100))).Times(AtLeast(1));
125 // At least one progress report at 100%.
126 EXPECT_CALL(manager, OnProgress(kDummyExtensionId,
127 image_writer_api::STAGE_UNZIP,
128 100)).Times(AtLeast(1));
129 // At least one progress report at 0%.
130 EXPECT_CALL(manager, OnProgress(kDummyExtensionId,
131 image_writer_api::STAGE_UNZIP,
132 0)).Times(AtLeast(1));
133 // Any number of additional progress calls in later stages.
134 EXPECT_CALL(manager, OnProgress(kDummyExtensionId,
135 Gt(image_writer_api::STAGE_UNZIP),
136 _)).Times(AnyNumber());
137 // One completion call.
138 EXPECT_CALL(manager, OnComplete(kDummyExtensionId)).Times(1);
139 // No errors
140 EXPECT_CALL(manager, OnError(_, _, _, _)).Times(0);
141
142 content::BrowserThread::PostTask(content::BrowserThread::FILE,
143 FROM_HERE,
144 base::Bind(&OperationForTest::UnzipStart,
145 operation,
146 base::Passed(&zip_file)));
147
148 base::RunLoop().RunUntilIdle();
149
150 EXPECT_TRUE(base::ContentsEqual(image_file_, device_file_));
151 }
152
26 TEST_F(ImageWriterOperationTest, Create) { 153 TEST_F(ImageWriterOperationTest, Create) {
27 MockOperationManager manager; 154 MockManager manager(&test_profile_);
28 scoped_refptr<Operation> op(new DummyOperation(manager.AsWeakPtr(), 155 scoped_refptr<Operation> op(
29 kDummyExtensionId, 156 new OperationForTest(manager.AsWeakPtr(),
30 test_device_.AsUTF8Unsafe())); 157 kDummyExtensionId,
158 device_file_.AsUTF8Unsafe()));
31 159
32 EXPECT_EQ(0, op->GetProgress()); 160 EXPECT_EQ(0, op->GetProgress());
33 EXPECT_EQ(image_writer_api::STAGE_UNKNOWN, op->GetStage()); 161 EXPECT_EQ(image_writer_api::STAGE_UNKNOWN, op->GetStage());
34 } 162 }
35 163
36 } // namespace image_writer 164 } // namespace image_writer
37 } // namespace extensions 165 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698