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

Side by Side Diff: chrome/browser/chromeos/file_system_provider/service_unittest.cc

Issue 194693002: [fsp] Add requestUnmount() method together with the request manager. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Removed some too strict thread checks. Created 6 years, 8 months 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 | Annotate | Revision Log
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 <string> 5 #include <string>
6 #include <vector>
6 7
8 #include "base/files/file.h"
7 #include "base/memory/scoped_ptr.h" 9 #include "base/memory/scoped_ptr.h"
8 #include "base/memory/scoped_vector.h"
9 #include "chrome/browser/chromeos/file_system_provider/observer.h" 10 #include "chrome/browser/chromeos/file_system_provider/observer.h"
10 #include "chrome/browser/chromeos/file_system_provider/provided_file_system.h" 11 #include "chrome/browser/chromeos/file_system_provider/provided_file_system.h"
11 #include "chrome/browser/chromeos/file_system_provider/service.h" 12 #include "chrome/browser/chromeos/file_system_provider/service.h"
12 #include "chrome/browser/chromeos/login/fake_user_manager.h" 13 #include "chrome/browser/chromeos/login/fake_user_manager.h"
13 #include "chrome/test/base/testing_profile.h" 14 #include "chrome/test/base/testing_profile.h"
14 #include "content/public/test/test_browser_thread_bundle.h" 15 #include "content/public/test/test_browser_thread_bundle.h"
15 #include "testing/gtest/include/gtest/gtest.h" 16 #include "testing/gtest/include/gtest/gtest.h"
16 #include "webkit/browser/fileapi/external_mount_points.h" 17 #include "webkit/browser/fileapi/external_mount_points.h"
17 18
18 namespace chromeos { 19 namespace chromeos {
19 namespace file_system_provider { 20 namespace file_system_provider {
20 namespace { 21 namespace {
21 22
22 const char kExtensionId[] = "mbflcebpggnecokmikipoihdbecnjfoj"; 23 const char kExtensionId[] = "mbflcebpggnecokmikipoihdbecnjfoj";
23 const char kFileSystemName[] = "Camera Pictures"; 24 const char kFileSystemName[] = "Camera Pictures";
24 25
25 // Utility observer, logging events from file_system_provider::Service. 26 // Utility observer, logging events from file_system_provider::Service.
26 class LoggingObserver : public Observer { 27 class LoggingObserver : public Observer {
27 public: 28 public:
29 class Event {
30 public:
31 Event(const ProvidedFileSystem& file_system, base::File::Error error)
32 : file_system_(file_system), error_(error) {}
33 ~Event() {}
34
35 const ProvidedFileSystem& file_system() { return file_system_; }
36 base::File::Error error() { return error_; }
37
38 private:
39 ProvidedFileSystem file_system_;
40 base::File::Error error_;
41 };
42
28 LoggingObserver() {} 43 LoggingObserver() {}
29 virtual ~LoggingObserver() {} 44 virtual ~LoggingObserver() {}
30 45
31 // file_system_provider::Observer overrides. 46 // file_system_provider::Observer overrides.
32 virtual void OnProvidedFileSystemRegistered( 47 virtual void OnProvidedFileSystemMount(const ProvidedFileSystem& file_system,
33 const ProvidedFileSystem& file_system) OVERRIDE { 48 base::File::Error error) OVERRIDE {
34 registered.push_back(new const ProvidedFileSystem(file_system)); 49 mounts.push_back(Event(file_system, error));
35 } 50 }
36 51
37 virtual void OnProvidedFileSystemUnregistered( 52 virtual void OnProvidedFileSystemUnmount(
38 const ProvidedFileSystem& file_system) OVERRIDE { 53 const ProvidedFileSystem& file_system,
39 unregistered.push_back(new const ProvidedFileSystem(file_system)); 54 base::File::Error error) OVERRIDE {
55 unmounts.push_back(Event(file_system, error));
40 } 56 }
41 57
42 ScopedVector<const ProvidedFileSystem> registered; 58 std::vector<Event> mounts;
43 ScopedVector<const ProvidedFileSystem> unregistered; 59 std::vector<Event> unmounts;
44 }; 60 };
45 61
46 } // namespace 62 } // namespace
47 63
48 class FileSystemProviderServiceTest : public testing::Test { 64 class FileSystemProviderServiceTest : public testing::Test {
49 protected: 65 protected:
50 FileSystemProviderServiceTest() {} 66 FileSystemProviderServiceTest() {}
51 virtual ~FileSystemProviderServiceTest() {} 67 virtual ~FileSystemProviderServiceTest() {}
52 68
53 virtual void SetUp() OVERRIDE { 69 virtual void SetUp() OVERRIDE {
54 user_manager_ = new FakeUserManager(); 70 user_manager_ = new FakeUserManager();
55 user_manager_enabler_.reset(new ScopedUserManagerEnabler(user_manager_)); 71 user_manager_enabler_.reset(new ScopedUserManagerEnabler(user_manager_));
56 profile_.reset(new TestingProfile); 72 profile_.reset(new TestingProfile);
57 user_manager_->AddUser(profile_->GetProfileName()); 73 user_manager_->AddUser(profile_->GetProfileName());
58 file_system_provider_service_.reset(new Service(profile_.get())); 74 file_system_provider_service_.reset(new Service(profile_.get()));
59 } 75 }
60 76
61 virtual void TearDown() { 77 virtual void TearDown() {
62 fileapi::ExternalMountPoints::GetSystemInstance()->RevokeAllFileSystems(); 78 fileapi::ExternalMountPoints::GetSystemInstance()->RevokeAllFileSystems();
63 } 79 }
64 80
65 content::TestBrowserThreadBundle thread_bundle_; 81 content::TestBrowserThreadBundle thread_bundle_;
66 scoped_ptr<TestingProfile> profile_; 82 scoped_ptr<TestingProfile> profile_;
67 scoped_ptr<ScopedUserManagerEnabler> user_manager_enabler_; 83 scoped_ptr<ScopedUserManagerEnabler> user_manager_enabler_;
68 FakeUserManager* user_manager_; 84 FakeUserManager* user_manager_;
69 scoped_ptr<Service> file_system_provider_service_; 85 scoped_ptr<Service> file_system_provider_service_;
70 }; 86 };
71 87
72 TEST_F(FileSystemProviderServiceTest, RegisterFileSystem) { 88 TEST_F(FileSystemProviderServiceTest, MountFileSystem) {
73 LoggingObserver observer; 89 LoggingObserver observer;
74 file_system_provider_service_->AddObserver(&observer); 90 file_system_provider_service_->AddObserver(&observer);
75 91
76 int file_system_id = file_system_provider_service_->RegisterFileSystem( 92 int file_system_id = file_system_provider_service_->MountFileSystem(
77 kExtensionId, kFileSystemName); 93 kExtensionId, kFileSystemName);
78 94
79 EXPECT_LT(0, file_system_id); 95 EXPECT_LT(0, file_system_id);
80 ASSERT_EQ(1u, observer.registered.size()); 96 ASSERT_EQ(1u, observer.mounts.size());
81 EXPECT_EQ(kExtensionId, observer.registered[0]->extension_id()); 97 EXPECT_EQ(kExtensionId, observer.mounts[0].file_system().extension_id());
82 EXPECT_EQ(1, observer.registered[0]->file_system_id()); 98 EXPECT_EQ(1, observer.mounts[0].file_system().file_system_id());
83 EXPECT_EQ("/provided/mbflcebpggnecokmikipoihdbecnjfoj-1-testing_profile-hash", 99 EXPECT_EQ("/provided/mbflcebpggnecokmikipoihdbecnjfoj-1-testing_profile-hash",
84 observer.registered[0]->mount_path().AsUTF8Unsafe()); 100 observer.mounts[0].file_system().mount_path().AsUTF8Unsafe());
85 EXPECT_EQ(kFileSystemName, observer.registered[0]->file_system_name()); 101 EXPECT_EQ(kFileSystemName,
86 ASSERT_EQ(0u, observer.unregistered.size()); 102 observer.mounts[0].file_system().file_system_name());
103 EXPECT_EQ(base::File::FILE_OK, observer.mounts[0].error());
104 ASSERT_EQ(0u, observer.unmounts.size());
87 105
88 std::vector<ProvidedFileSystem> provided_file_systems = 106 std::vector<ProvidedFileSystem> provided_file_systems =
89 file_system_provider_service_->GetRegisteredFileSystems(); 107 file_system_provider_service_->GetMountedFileSystems();
90 ASSERT_EQ(1u, provided_file_systems.size()); 108 ASSERT_EQ(1u, provided_file_systems.size());
91 109
92 file_system_provider_service_->RemoveObserver(&observer); 110 file_system_provider_service_->RemoveObserver(&observer);
93 } 111 }
94 112
95 TEST_F(FileSystemProviderServiceTest, RegisterFileSystem_UniqueIds) { 113 TEST_F(FileSystemProviderServiceTest, MountFileSystem_UniqueIds) {
96 LoggingObserver observer; 114 LoggingObserver observer;
97 file_system_provider_service_->AddObserver(&observer); 115 file_system_provider_service_->AddObserver(&observer);
98 116
99 int file_system_first_id = file_system_provider_service_->RegisterFileSystem( 117 int file_system_first_id = file_system_provider_service_->MountFileSystem(
100 kExtensionId, kFileSystemName); 118 kExtensionId, kFileSystemName);
101 ASSERT_LT(0, file_system_first_id); 119 EXPECT_LT(0, file_system_first_id);
102 120
103 int file_system_second_id = file_system_provider_service_->RegisterFileSystem( 121 int file_system_second_id = file_system_provider_service_->MountFileSystem(
104 kExtensionId, kFileSystemName); 122 kExtensionId, kFileSystemName);
105 ASSERT_LT(0, file_system_second_id); 123 EXPECT_LT(0, file_system_second_id);
106 124
107 ASSERT_NE(file_system_first_id, file_system_second_id); 125 EXPECT_NE(file_system_first_id, file_system_second_id);
108 ASSERT_EQ(2u, observer.registered.size()); 126 ASSERT_EQ(2u, observer.mounts.size());
127 EXPECT_EQ(base::File::FILE_OK, observer.mounts[0].error());
128 EXPECT_EQ(base::File::FILE_OK, observer.mounts[1].error());
109 129
110 std::vector<ProvidedFileSystem> provided_file_systems = 130 std::vector<ProvidedFileSystem> provided_file_systems =
111 file_system_provider_service_->GetRegisteredFileSystems(); 131 file_system_provider_service_->GetMountedFileSystems();
112 ASSERT_EQ(2u, provided_file_systems.size()); 132 ASSERT_EQ(2u, provided_file_systems.size());
113 133
114 file_system_provider_service_->RemoveObserver(&observer); 134 file_system_provider_service_->RemoveObserver(&observer);
115 } 135 }
116 136
117 TEST_F(FileSystemProviderServiceTest, RegisterFileSystem_StressTest) { 137 TEST_F(FileSystemProviderServiceTest, MountFileSystem_StressTest) {
118 LoggingObserver observer; 138 LoggingObserver observer;
119 file_system_provider_service_->AddObserver(&observer); 139 file_system_provider_service_->AddObserver(&observer);
120 140
121 const size_t kMaxFileSystems = 16; 141 const size_t kMaxFileSystems = 16;
122 for (size_t i = 0; i < kMaxFileSystems; ++i) { 142 for (size_t i = 0; i < kMaxFileSystems; ++i) {
123 int file_system_id = file_system_provider_service_->RegisterFileSystem( 143 int file_system_id = file_system_provider_service_->MountFileSystem(
124 kExtensionId, kFileSystemName); 144 kExtensionId, kFileSystemName);
125 ASSERT_LT(0, file_system_id); 145 EXPECT_LT(0, file_system_id);
126 } 146 }
127 ASSERT_EQ(kMaxFileSystems, observer.registered.size()); 147 ASSERT_EQ(kMaxFileSystems, observer.mounts.size());
128 148
129 // The next file system is out of limit, and registering it should fail. 149 // The next file system is out of limit, and registering it should fail.
130 int file_system_id = file_system_provider_service_->RegisterFileSystem( 150 int file_system_id = file_system_provider_service_->MountFileSystem(
131 kExtensionId, kFileSystemName); 151 kExtensionId, kFileSystemName);
132 ASSERT_EQ(0, file_system_id); 152 EXPECT_EQ(0, file_system_id);
133 ASSERT_EQ(kMaxFileSystems, observer.registered.size()); 153
154 ASSERT_EQ(kMaxFileSystems + 1, observer.mounts.size());
155 EXPECT_EQ(base::File::FILE_ERROR_TOO_MANY_OPENED,
156 observer.mounts[kMaxFileSystems].error());
157 ASSERT_EQ(kMaxFileSystems,
158 file_system_provider_service_->GetMountedFileSystems().size());
134 159
135 std::vector<ProvidedFileSystem> provided_file_systems = 160 std::vector<ProvidedFileSystem> provided_file_systems =
136 file_system_provider_service_->GetRegisteredFileSystems(); 161 file_system_provider_service_->GetMountedFileSystems();
137 ASSERT_EQ(kMaxFileSystems, provided_file_systems.size()); 162 ASSERT_EQ(kMaxFileSystems, provided_file_systems.size());
138 163
139 file_system_provider_service_->RemoveObserver(&observer); 164 file_system_provider_service_->RemoveObserver(&observer);
140 } 165 }
141 166
142 TEST_F(FileSystemProviderServiceTest, UnregisterFileSystem) { 167 TEST_F(FileSystemProviderServiceTest, UnmountFileSystem) {
143 LoggingObserver observer; 168 LoggingObserver observer;
144 file_system_provider_service_->AddObserver(&observer); 169 file_system_provider_service_->AddObserver(&observer);
145 170
146 int file_system_id = file_system_provider_service_->RegisterFileSystem( 171 int file_system_id = file_system_provider_service_->MountFileSystem(
147 kExtensionId, kFileSystemName); 172 kExtensionId, kFileSystemName);
148 ASSERT_LT(0, file_system_id); 173 EXPECT_LT(0, file_system_id);
149 ASSERT_EQ(1u, observer.registered.size()); 174 ASSERT_EQ(1u, observer.mounts.size());
150 175
151 const bool result = file_system_provider_service_->UnregisterFileSystem( 176 const bool result = file_system_provider_service_->UnmountFileSystem(
152 kExtensionId, file_system_id); 177 kExtensionId, file_system_id);
153 ASSERT_TRUE(result); 178 EXPECT_TRUE(result);
154 ASSERT_EQ(1u, observer.unregistered.size()); 179 ASSERT_EQ(1u, observer.unmounts.size());
180 EXPECT_EQ(base::File::FILE_OK, observer.unmounts[0].error());
155 181
156 EXPECT_EQ(kExtensionId, observer.unregistered[0]->extension_id()); 182 EXPECT_EQ(kExtensionId, observer.unmounts[0].file_system().extension_id());
157 EXPECT_EQ(1, observer.unregistered[0]->file_system_id()); 183 EXPECT_EQ(1, observer.unmounts[0].file_system().file_system_id());
158 EXPECT_EQ("/provided/mbflcebpggnecokmikipoihdbecnjfoj-1-testing_profile-hash", 184 EXPECT_EQ("/provided/mbflcebpggnecokmikipoihdbecnjfoj-1-testing_profile-hash",
159 observer.unregistered[0]->mount_path().AsUTF8Unsafe()); 185 observer.unmounts[0].file_system().mount_path().AsUTF8Unsafe());
160 EXPECT_EQ(kFileSystemName, observer.unregistered[0]->file_system_name()); 186 EXPECT_EQ(kFileSystemName,
187 observer.unmounts[0].file_system().file_system_name());
161 188
162 std::vector<ProvidedFileSystem> provided_file_systems = 189 std::vector<ProvidedFileSystem> provided_file_systems =
163 file_system_provider_service_->GetRegisteredFileSystems(); 190 file_system_provider_service_->GetMountedFileSystems();
164 ASSERT_EQ(0u, provided_file_systems.size()); 191 ASSERT_EQ(0u, provided_file_systems.size());
165 192
166 file_system_provider_service_->RemoveObserver(&observer); 193 file_system_provider_service_->RemoveObserver(&observer);
167 } 194 }
168 195
169 TEST_F(FileSystemProviderServiceTest, UnregisterFileSystem_WrongExtensionId) { 196 TEST_F(FileSystemProviderServiceTest, UnmountFileSystem_WrongExtensionId) {
170 LoggingObserver observer; 197 LoggingObserver observer;
171 file_system_provider_service_->AddObserver(&observer); 198 file_system_provider_service_->AddObserver(&observer);
172 199
173 const std::string kWrongExtensionId = "helloworldhelloworldhelloworldhe"; 200 const std::string kWrongExtensionId = "helloworldhelloworldhelloworldhe";
174 201
175 int file_system_id = file_system_provider_service_->RegisterFileSystem( 202 int file_system_id = file_system_provider_service_->MountFileSystem(
176 kExtensionId, kFileSystemName); 203 kExtensionId, kFileSystemName);
177 ASSERT_LT(0, file_system_id); 204 EXPECT_LT(0, file_system_id);
178 ASSERT_EQ(1u, observer.registered.size()); 205 ASSERT_EQ(1u, observer.mounts.size());
206 ASSERT_EQ(1u, file_system_provider_service_->GetMountedFileSystems().size());
179 207
180 const bool result = file_system_provider_service_->UnregisterFileSystem( 208 const bool result = file_system_provider_service_->UnmountFileSystem(
181 kWrongExtensionId, file_system_id); 209 kWrongExtensionId, file_system_id);
182 ASSERT_FALSE(result); 210 EXPECT_FALSE(result);
183 ASSERT_EQ(0u, observer.unregistered.size()); 211 ASSERT_EQ(1u, observer.unmounts.size());
212 EXPECT_EQ(base::File::FILE_ERROR_NOT_FOUND, observer.unmounts[0].error());
213 ASSERT_EQ(1u, file_system_provider_service_->GetMountedFileSystems().size());
184 214
185 std::vector<ProvidedFileSystem> provided_file_systems = 215 std::vector<ProvidedFileSystem> provided_file_systems =
186 file_system_provider_service_->GetRegisteredFileSystems(); 216 file_system_provider_service_->GetMountedFileSystems();
187 ASSERT_EQ(1u, provided_file_systems.size()); 217 ASSERT_EQ(1u, provided_file_systems.size());
188 218
189 file_system_provider_service_->RemoveObserver(&observer); 219 file_system_provider_service_->RemoveObserver(&observer);
190 } 220 }
191 221
192 } // namespace file_system_provider 222 } // namespace file_system_provider
193 } // namespace chromeos 223 } // namespace chromeos
OLDNEW
« no previous file with comments | « chrome/browser/chromeos/file_system_provider/service.cc ('k') | chrome/chrome_browser_chromeos.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698