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

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

Powered by Google App Engine
This is Rietveld 408576698