OLD | NEW |
---|---|
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/sync_file_system/drive_backend/sync_engine.h" | 5 #include "chrome/browser/sync_file_system/drive_backend/sync_engine.h" |
6 | 6 |
7 #include "base/files/scoped_temp_dir.h" | 7 #include "base/files/scoped_temp_dir.h" |
8 #include "base/run_loop.h" | 8 #include "base/run_loop.h" |
9 #include "base/strings/stringprintf.h" | |
9 #include "chrome/browser/drive/fake_drive_service.h" | 10 #include "chrome/browser/drive/fake_drive_service.h" |
11 #include "chrome/browser/extensions/test_extension_service.h" | |
10 #include "chrome/browser/sync_file_system/drive_backend/metadata_database.h" | 12 #include "chrome/browser/sync_file_system/drive_backend/metadata_database.h" |
11 #include "chrome/browser/sync_file_system/drive_backend/metadata_database.pb.h" | 13 #include "chrome/browser/sync_file_system/drive_backend/metadata_database.pb.h" |
12 #include "chrome/browser/sync_file_system/sync_file_system_test_util.h" | 14 #include "chrome/browser/sync_file_system/sync_file_system_test_util.h" |
13 #include "content/public/test/test_browser_thread_bundle.h" | 15 #include "content/public/test/test_browser_thread_bundle.h" |
14 #include "extensions/common/extension.h" | 16 #include "extensions/common/extension.h" |
17 #include "extensions/common/extension_builder.h" | |
18 #include "extensions/common/value_builder.h" | |
15 #include "testing/gtest/include/gtest/gtest.h" | 19 #include "testing/gtest/include/gtest/gtest.h" |
16 | 20 |
17 namespace sync_file_system { | 21 namespace sync_file_system { |
18 namespace drive_backend { | 22 namespace drive_backend { |
19 | 23 |
20 namespace { | 24 namespace { |
21 | 25 |
22 const char kAppID[] = "app_id"; | 26 const char kAppID[] = "app_id"; |
23 | 27 |
24 } // namespace | 28 } // namespace |
25 | 29 |
30 class MockExtensionService : public TestExtensionService { | |
31 public: | |
32 MockExtensionService() {} | |
33 virtual ~MockExtensionService() {} | |
34 | |
35 virtual const ExtensionSet* extensions() const OVERRIDE { | |
36 return &extensions_; | |
37 } | |
38 | |
39 virtual const ExtensionSet* disabled_extensions() const OVERRIDE { | |
40 return &disabled_extensions_; | |
41 } | |
42 | |
43 virtual void AddExtension(const extensions::Extension* extension) OVERRIDE { | |
44 extensions_.Insert(make_scoped_refptr(extension)); | |
45 } | |
46 | |
47 virtual void UninstallExtension(std::string extension_id) { | |
kinuko
2013/11/18 08:56:18
This one's not for TestExtensionService overrides,
nhiroki
2013/11/18 09:09:52
Can you make |extension_id| const-ref?
keishi
2013/11/18 09:15:32
Done.
| |
48 extensions_.Remove(extension_id); | |
49 disabled_extensions_.Remove(extension_id); | |
50 } | |
51 | |
52 virtual const extensions::Extension* GetInstalledExtension( | |
53 const std::string& extension_id) const OVERRIDE { | |
54 return extensions_.GetByID(extension_id); | |
55 } | |
56 | |
57 virtual bool IsExtensionEnabled( | |
58 const std::string& extension_id) const OVERRIDE { | |
59 return extensions_.Contains(extension_id) && | |
60 !disabled_extensions_.Contains(extension_id); | |
61 } | |
62 | |
63 virtual void DisableExtension(const std::string& extension_id) { | |
64 if (!IsExtensionEnabled(extension_id)) | |
65 return; | |
66 const extensions::Extension* extension = extensions_.GetByID(extension_id); | |
67 disabled_extensions_.Insert(make_scoped_refptr(extension)); | |
68 } | |
69 | |
70 private: | |
71 ExtensionSet extensions_; | |
72 ExtensionSet disabled_extensions_; | |
73 | |
74 DISALLOW_COPY_AND_ASSIGN(MockExtensionService); | |
75 }; | |
76 | |
26 class SyncEngineTest : public testing::Test { | 77 class SyncEngineTest : public testing::Test { |
27 public: | 78 public: |
28 SyncEngineTest() {} | 79 SyncEngineTest() {} |
29 virtual ~SyncEngineTest() {} | 80 virtual ~SyncEngineTest() {} |
30 | 81 |
31 virtual void SetUp() OVERRIDE { | 82 virtual void SetUp() OVERRIDE { |
32 ASSERT_TRUE(profile_dir_.CreateUniqueTempDir()); | 83 ASSERT_TRUE(profile_dir_.CreateUniqueTempDir()); |
84 extension_service_.reset(new MockExtensionService); | |
33 scoped_ptr<drive::FakeDriveService> fake_drive_service( | 85 scoped_ptr<drive::FakeDriveService> fake_drive_service( |
34 new drive::FakeDriveService); | 86 new drive::FakeDriveService); |
35 | 87 |
36 ASSERT_TRUE(fake_drive_service->LoadAccountMetadataForWapi( | 88 ASSERT_TRUE(fake_drive_service->LoadAccountMetadataForWapi( |
37 "sync_file_system/account_metadata.json")); | 89 "sync_file_system/account_metadata.json")); |
38 ASSERT_TRUE(fake_drive_service->LoadResourceListForWapi( | 90 ASSERT_TRUE(fake_drive_service->LoadResourceListForWapi( |
39 "gdata/empty_feed.json")); | 91 "gdata/empty_feed.json")); |
40 sync_engine_.reset(new drive_backend::SyncEngine( | 92 sync_engine_.reset(new drive_backend::SyncEngine( |
41 profile_dir_.path(), | 93 profile_dir_.path(), |
42 base::MessageLoopProxy::current(), | 94 base::MessageLoopProxy::current(), |
43 fake_drive_service.PassAs<drive::DriveServiceInterface>(), | 95 fake_drive_service.PassAs<drive::DriveServiceInterface>(), |
44 NULL, NULL)); | 96 NULL, |
97 extension_service_.get())); | |
45 sync_engine_->Initialize(); | 98 sync_engine_->Initialize(); |
46 base::RunLoop().RunUntilIdle(); | 99 base::RunLoop().RunUntilIdle(); |
47 } | 100 } |
48 | 101 |
49 virtual void TearDown() OVERRIDE { | 102 virtual void TearDown() OVERRIDE { |
50 sync_engine_.reset(); | 103 sync_engine_.reset(); |
104 extension_service_.reset(); | |
51 base::RunLoop().RunUntilIdle(); | 105 base::RunLoop().RunUntilIdle(); |
52 } | 106 } |
53 | 107 |
108 MockExtensionService* extension_service() { return extension_service_.get(); } | |
54 SyncEngine* sync_engine() { return sync_engine_.get(); } | 109 SyncEngine* sync_engine() { return sync_engine_.get(); } |
55 | 110 |
111 void UpdateRegisteredApps() { | |
112 sync_engine_->UpdateRegisteredApps(); | |
113 } | |
114 | |
56 private: | 115 private: |
57 content::TestBrowserThreadBundle browser_threads_; | 116 content::TestBrowserThreadBundle browser_threads_; |
58 base::ScopedTempDir profile_dir_; | 117 base::ScopedTempDir profile_dir_; |
59 | 118 |
119 scoped_ptr<MockExtensionService> extension_service_; | |
60 scoped_ptr<drive_backend::SyncEngine> sync_engine_; | 120 scoped_ptr<drive_backend::SyncEngine> sync_engine_; |
61 | 121 |
62 DISALLOW_COPY_AND_ASSIGN(SyncEngineTest); | 122 DISALLOW_COPY_AND_ASSIGN(SyncEngineTest); |
63 }; | 123 }; |
64 | 124 |
65 TEST_F(SyncEngineTest, EnableOrigin) { | 125 TEST_F(SyncEngineTest, EnableOrigin) { |
66 FileTracker tracker; | 126 FileTracker tracker; |
67 SyncStatusCode sync_status = SYNC_STATUS_UNKNOWN; | 127 SyncStatusCode sync_status = SYNC_STATUS_UNKNOWN; |
68 MetadataDatabase* metadata_database = sync_engine()->GetMetadataDatabase(); | 128 MetadataDatabase* metadata_database = sync_engine()->GetMetadataDatabase(); |
69 GURL origin = extensions::Extension::GetBaseURLFromExtensionId(kAppID); | 129 GURL origin = extensions::Extension::GetBaseURLFromExtensionId(kAppID); |
(...skipping 18 matching lines...) Expand all Loading... | |
88 | 148 |
89 sync_engine()->UninstallOrigin( | 149 sync_engine()->UninstallOrigin( |
90 origin, | 150 origin, |
91 RemoteFileSyncService::UNINSTALL_AND_KEEP_REMOTE, | 151 RemoteFileSyncService::UNINSTALL_AND_KEEP_REMOTE, |
92 CreateResultReceiver(&sync_status)); | 152 CreateResultReceiver(&sync_status)); |
93 base::RunLoop().RunUntilIdle(); | 153 base::RunLoop().RunUntilIdle(); |
94 EXPECT_EQ(SYNC_STATUS_OK, sync_status); | 154 EXPECT_EQ(SYNC_STATUS_OK, sync_status); |
95 ASSERT_FALSE(metadata_database->FindAppRootTracker(kAppID, &tracker)); | 155 ASSERT_FALSE(metadata_database->FindAppRootTracker(kAppID, &tracker)); |
96 } | 156 } |
97 | 157 |
158 TEST_F(SyncEngineTest, UpdateRegisteredApps) { | |
159 SyncStatusCode sync_status = SYNC_STATUS_UNKNOWN; | |
160 for (int i = 0; i < 3; i++) { | |
161 scoped_refptr<const extensions::Extension> extension = | |
162 extensions::ExtensionBuilder() | |
163 .SetManifest(extensions::DictionaryBuilder() | |
164 .Set("name", "foo") | |
165 .Set("version", "1.0") | |
166 .Set("manifest_version", 2)) | |
167 .SetID(base::StringPrintf("app_%d", i)) | |
168 .Build(); | |
169 extension_service()->AddExtension(extension.get()); | |
170 GURL origin = extensions::Extension::GetBaseURLFromExtensionId( | |
171 extension->id()); | |
172 DLOG(INFO) << origin.spec(); | |
kinuko
2013/11/18 08:56:18
nit: can we reset sync_status to UNKNOWN each time
keishi
2013/11/18 09:15:32
Done.
| |
173 sync_engine()->RegisterOrigin(origin, CreateResultReceiver(&sync_status)); | |
174 base::RunLoop().RunUntilIdle(); | |
175 EXPECT_EQ(SYNC_STATUS_OK, sync_status); | |
176 } | |
177 | |
178 MetadataDatabase* metadata_database = sync_engine()->GetMetadataDatabase(); | |
179 FileTracker tracker; | |
180 | |
181 ASSERT_TRUE(metadata_database->FindAppRootTracker("app_0", &tracker)); | |
182 EXPECT_EQ(TRACKER_KIND_APP_ROOT, tracker.tracker_kind()); | |
183 | |
184 ASSERT_TRUE(metadata_database->FindAppRootTracker("app_1", &tracker)); | |
185 EXPECT_EQ(TRACKER_KIND_APP_ROOT, tracker.tracker_kind()); | |
186 | |
187 ASSERT_TRUE(metadata_database->FindAppRootTracker("app_2", &tracker)); | |
188 EXPECT_EQ(TRACKER_KIND_APP_ROOT, tracker.tracker_kind()); | |
189 | |
190 extension_service()->DisableExtension("app_1"); | |
191 extension_service()->UninstallExtension("app_2"); | |
192 ASSERT_FALSE(extension_service()->GetInstalledExtension("app_2")); | |
193 UpdateRegisteredApps(); | |
194 base::RunLoop().RunUntilIdle(); | |
195 | |
196 ASSERT_TRUE(metadata_database->FindAppRootTracker("app_0", &tracker)); | |
197 EXPECT_EQ(TRACKER_KIND_APP_ROOT, tracker.tracker_kind()); | |
198 | |
199 ASSERT_TRUE(metadata_database->FindAppRootTracker("app_1", &tracker)); | |
200 EXPECT_EQ(TRACKER_KIND_DISABLED_APP_ROOT, tracker.tracker_kind()); | |
201 | |
202 ASSERT_FALSE(metadata_database->FindAppRootTracker("app_2", &tracker)); | |
203 } | |
204 | |
98 } // namespace drive_backend | 205 } // namespace drive_backend |
99 } // namespace sync_file_system | 206 } // namespace sync_file_system |
OLD | NEW |