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

Side by Side Diff: webkit/fileapi/syncable/local_file_sync_context_unittest.cc

Issue 11090019: Add LocalFileSyncContext class which wires up profile-owned service and FileSystemContext(s) (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: addressed comments #4 Created 8 years, 2 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
« no previous file with comments | « webkit/fileapi/syncable/local_file_sync_context.cc ('k') | webkit/fileapi/webkit_fileapi.gypi » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright (c) 2012 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 "webkit/fileapi/syncable/local_file_sync_context.h"
6
7 #include "base/bind.h"
8 #include "base/file_path.h"
9 #include "base/message_loop.h"
10 #include "base/single_thread_task_runner.h"
11 #include "base/threading/thread.h"
12 #include "testing/gtest/include/gtest/gtest.h"
13 #include "webkit/fileapi/file_system_context.h"
14 #include "webkit/fileapi/isolated_context.h"
15 #include "webkit/fileapi/syncable/canned_syncable_file_system.h"
16 #include "webkit/fileapi/syncable/local_file_change_tracker.h"
17 #include "webkit/fileapi/syncable/sync_status_code.h"
18 #include "webkit/fileapi/syncable/syncable_file_system_util.h"
19
20 namespace fileapi {
21
22 namespace {
23 const char kOrigin1[] = "http://example.com";
24 const char kOrigin2[] = "http://chromium.org";
25 const char kServiceName[] = "test";
26 const FileSystemType kSyncableType = kFileSystemTypeSyncable;
27 }
28
29 class LocalFileSyncContextTest : public testing::Test {
30 protected:
31 LocalFileSyncContextTest()
32 : status_(SYNC_FILE_ERROR_FAILED) {}
33
34 virtual void SetUp() OVERRIDE {
35 EXPECT_TRUE(fileapi::RegisterSyncableFileSystem(kServiceName));
36
37 io_thread_.reset(new base::Thread("Thread_IO"));
38 file_thread_.reset(new base::Thread("Thread_File"));
39 io_thread_->Start();
40 file_thread_->Start();
41
42 ui_task_runner_ = MessageLoop::current()->message_loop_proxy();
43 io_task_runner_ = io_thread_->message_loop_proxy();
44 file_task_runner_ = file_thread_->message_loop_proxy();
45 }
46
47 virtual void TearDown() OVERRIDE {
48 EXPECT_TRUE(fileapi::RevokeSyncableFileSystem(kServiceName));
49 io_thread_->Stop();
50 file_thread_->Stop();
51 }
52
53 // These need to remain until the very end.
54 scoped_ptr<base::Thread> io_thread_;
55 scoped_ptr<base::Thread> file_thread_;
56 MessageLoop loop_;
57
58 scoped_refptr<base::SingleThreadTaskRunner> io_task_runner_;
59 scoped_refptr<base::SingleThreadTaskRunner> file_task_runner_;
60 scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner_;
61
62 scoped_refptr<LocalFileSyncContext> sync_context_;
63
64 SyncStatusCode status_;
65 };
66
67 TEST_F(LocalFileSyncContextTest, ConstructAndDestruct) {
68 sync_context_ = new LocalFileSyncContext(
69 ui_task_runner_, io_task_runner_);
70 sync_context_->ShutdownOnUIThread();
71 }
72
73 TEST_F(LocalFileSyncContextTest, InitializeFileSystemContext) {
74 CannedSyncableFileSystem file_system(GURL(kOrigin1), kServiceName);
75 file_system.SetUp();
76
77 sync_context_ = new LocalFileSyncContext(ui_task_runner_, io_task_runner_);
78
79 // Initializes file_system using |sync_context_|.
80 EXPECT_EQ(SYNC_STATUS_OK,
81 file_system.MaybeInitializeFileSystemContext(sync_context_));
82
83 // Make sure everything's set up for file_system to be able to handle
84 // syncable file system operations.
85 EXPECT_TRUE(file_system.file_system_context()->sync_context() != NULL);
86 EXPECT_TRUE(file_system.file_system_context()->change_tracker() != NULL);
87 EXPECT_EQ(sync_context_.get(),
88 file_system.file_system_context()->sync_context());
89
90 // Calling MaybeInitialize for the same context multiple times must be ok.
91 EXPECT_EQ(SYNC_STATUS_OK,
92 file_system.MaybeInitializeFileSystemContext(sync_context_));
93 EXPECT_EQ(sync_context_.get(),
94 file_system.file_system_context()->sync_context());
95
96 // Opens the file_system, perform some operation and see if the change tracker
97 // correctly captures the change.
98 EXPECT_EQ(base::PLATFORM_FILE_OK, file_system.OpenFileSystem());
99
100 const FileSystemURL kURL(file_system.URL("foo"));
101 EXPECT_EQ(base::PLATFORM_FILE_OK, file_system.CreateFile(kURL));
102
103 std::vector<FileSystemURL> urls;
104 file_system.file_system_context()->change_tracker()->GetChangedURLs(&urls);
105 ASSERT_EQ(1U, urls.size());
106 EXPECT_EQ(kURL, urls[0]);
107
108 // Finishing the test.
109 sync_context_->ShutdownOnUIThread();
110 file_system.TearDown();
111 }
112
113 TEST_F(LocalFileSyncContextTest, MultipleFileSystemContexts) {
114 CannedSyncableFileSystem file_system1(GURL(kOrigin1), kServiceName);
115 CannedSyncableFileSystem file_system2(GURL(kOrigin2), kServiceName);
116 file_system1.SetUp();
117 file_system2.SetUp();
118
119 sync_context_ = new LocalFileSyncContext(ui_task_runner_, io_task_runner_);
120
121 // Initializes file_system1 and file_system2.
122 EXPECT_EQ(SYNC_STATUS_OK,
123 file_system1.MaybeInitializeFileSystemContext(sync_context_));
124 EXPECT_EQ(SYNC_STATUS_OK,
125 file_system2.MaybeInitializeFileSystemContext(sync_context_));
126
127 EXPECT_EQ(base::PLATFORM_FILE_OK, file_system1.OpenFileSystem());
128 EXPECT_EQ(base::PLATFORM_FILE_OK, file_system2.OpenFileSystem());
129
130 const FileSystemURL kURL1(file_system1.URL("foo"));
131 const FileSystemURL kURL2(file_system2.URL("bar"));
132
133 // Creates a file in file_system1.
134 EXPECT_EQ(base::PLATFORM_FILE_OK, file_system1.CreateFile(kURL1));
135
136 // file_system1's tracker must have recorded the change.
137 std::vector<FileSystemURL> urls;
138 file_system1.file_system_context()->change_tracker()->GetChangedURLs(&urls);
139 ASSERT_EQ(1U, urls.size());
140 EXPECT_EQ(kURL1, urls[0]);
141
142 // file_system1's tracker must have no change.
143 urls.clear();
144 file_system2.file_system_context()->change_tracker()->GetChangedURLs(&urls);
145 ASSERT_TRUE(urls.empty());
146
147 // Creates a directory in file_system2.
148 EXPECT_EQ(base::PLATFORM_FILE_OK, file_system2.CreateDirectory(kURL2));
149
150 // file_system1's tracker must have the change for kURL1 as before.
151 urls.clear();
152 file_system1.file_system_context()->change_tracker()->GetChangedURLs(&urls);
153 ASSERT_EQ(1U, urls.size());
154 EXPECT_EQ(kURL1, urls[0]);
155
156 // file_system2's tracker now must have the change for kURL2.
157 urls.clear();
158 file_system2.file_system_context()->change_tracker()->GetChangedURLs(&urls);
159 ASSERT_EQ(1U, urls.size());
160 EXPECT_EQ(kURL2, urls[0]);
161
162 sync_context_->ShutdownOnUIThread();
163
164 file_system1.TearDown();
165 file_system2.TearDown();
166 }
167
168 } // namespace fileapi
OLDNEW
« no previous file with comments | « webkit/fileapi/syncable/local_file_sync_context.cc ('k') | webkit/fileapi/webkit_fileapi.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698