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

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

Issue 10966003: Add LocalFileChangeTracker database to record non-synced dirty files (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Reflect comments Created 8 years, 3 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 (c) 2012 The Chromium Authors. All rights reserved. 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 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 "webkit/fileapi/syncable/local_file_change_tracker.h" 5 #include "webkit/fileapi/syncable/local_file_change_tracker.h"
6 6
7 #include "base/basictypes.h" 7 #include "base/basictypes.h"
8 #include "base/memory/scoped_ptr.h" 8 #include "base/memory/scoped_ptr.h"
9 #include "base/message_loop.h" 9 #include "base/message_loop.h"
10 #include "base/message_loop_proxy.h" 10 #include "base/message_loop_proxy.h"
11 #include "base/scoped_temp_dir.h"
11 #include "testing/gtest/include/gtest/gtest.h" 12 #include "testing/gtest/include/gtest/gtest.h"
13 #include "webkit/fileapi/isolated_context.h"
12 #include "webkit/fileapi/syncable/local_file_change_tracker.h" 14 #include "webkit/fileapi/syncable/local_file_change_tracker.h"
13 #include "webkit/fileapi/syncable/local_file_sync_status.h" 15 #include "webkit/fileapi/syncable/local_file_sync_status.h"
14 16
15 namespace fileapi { 17 namespace fileapi {
16 18
17 namespace { 19 namespace {
18 20
19 // Test URLs (no parent/child relationships, as we test such cases 21 // Test URLs (no parent/child relationships, as we test such cases
20 // mainly in LocalFileSyncStatusTest). 22 // mainly in LocalFileSyncStatusTest).
21 const char kURL0[] = "filesystem:http://foo.com/test/dir a/file"; 23 const char kURL0[] = "filesystem:http://foo.com/test/dir a/file";
22 const char kURL1[] = "filesystem:http://foo.com/test/dir b"; 24 const char kURL1[] = "filesystem:http://foo.com/test/dir b";
23 const char kURL2[] = "filesystem:http://foo.com/test/foo.txt"; 25 const char kURL2[] = "filesystem:http://foo.com/test/foo.txt";
24 const char kURL3[] = "filesystem:http://foo.com/test/bar"; 26 const char kURL3[] = "filesystem:http://foo.com/test/bar";
25 const char kURL4[] = "filesystem:http://foo.com/temporary/dir a"; 27 const char kURL4[] = "filesystem:http://foo.com/temporary/dir a";
26 28
29 const char kExternalFileSystemID[] = "drive";
30
27 FileSystemURL URL(const char* spec) { 31 FileSystemURL URL(const char* spec) {
28 return FileSystemURL(GURL(spec)); 32 return FileSystemURL(GURL(spec));
29 } 33 }
30 34
31 } // namespace 35 } // namespace
32 36
33 class LocalFileChangeTrackerTest : public testing::Test { 37 class LocalFileChangeTrackerTest : public testing::Test {
34 public: 38 public:
35 LocalFileChangeTrackerTest() 39 LocalFileChangeTrackerTest()
36 : sync_status_(new LocalFileSyncStatus), 40 : sync_status_(new LocalFileSyncStatus) {}
37 change_tracker_(new LocalFileChangeTracker( 41
38 sync_status_.get(), base::MessageLoopProxy::current())) {} 42 virtual void SetUp() OVERRIDE {
43 EXPECT_TRUE(data_dir_.CreateUniqueTempDir());
44 change_tracker_.reset(new LocalFileChangeTracker(
45 sync_status_.get(),
46 data_dir_.path(),
47 base::MessageLoopProxy::current()));
48 IsolatedContext::GetInstance()->RegisterExternalFileSystem(
49 kExternalFileSystemID,
50 kFileSystemTypeSyncable,
51 FilePath());
52 }
39 53
40 protected: 54 protected:
41 LocalFileSyncStatus* sync_status() const { 55 LocalFileSyncStatus* sync_status() const {
42 return sync_status_.get(); 56 return sync_status_.get();
43 } 57 }
44 58
45 LocalFileChangeTracker* change_tracker() const { 59 LocalFileChangeTracker* change_tracker() const {
46 return change_tracker_.get(); 60 return change_tracker_.get();
47 } 61 }
48 62
63 std::string SerializeExternalFileSystemURL(const FileSystemURL& url) {
64 return change_tracker_->SerializeExternalFileSystemURL(url);
65 }
66
67 FileSystemURL DeserializeExternalFileSystemURL(const std::string& url) {
68 return change_tracker_->DeserializeExternalFileSystemURL(url);
69 }
70
49 void VerifyChange(const FileSystemURL& url, 71 void VerifyChange(const FileSystemURL& url,
50 const FileChange& expected_change) { 72 const FileChange& expected_change) {
51 SCOPED_TRACE(testing::Message() << url.spec() << 73 SCOPED_TRACE(testing::Message() << url.spec() <<
52 " expecting:" << expected_change.DebugString()); 74 " expecting:" << expected_change.DebugString());
53 // Writes need to be disabled before calling GetChangesForURL(). 75 // Writes need to be disabled before calling GetChangesForURL().
54 ASSERT_TRUE(sync_status()->TryDisableWriting(url)); 76 ASSERT_TRUE(sync_status()->TryDisableWriting(url));
55 77
56 // Get the changes for URL and verify. 78 // Get the changes for URL and verify.
57 FileChangeList changes; 79 FileChangeList changes;
58 change_tracker()->GetChangesForURL(url, &changes); 80 change_tracker()->GetChangesForURL(url, &changes);
59 SCOPED_TRACE(testing::Message() << url.spec() << 81 SCOPED_TRACE(testing::Message() << url.spec() <<
60 " actual:" << changes.DebugString()); 82 " actual:" << changes.DebugString());
61 EXPECT_EQ(1U, changes.size()); 83 EXPECT_EQ(1U, changes.size());
62 EXPECT_EQ(expected_change, changes.list()[0]); 84 EXPECT_EQ(expected_change, changes.list()[0]);
63 85
64 // Finish sync for URL to enable writing. 86 // Finish sync for URL to enable writing.
65 EXPECT_FALSE(sync_status()->IsWritable(url)); 87 EXPECT_FALSE(sync_status()->IsWritable(url));
66 change_tracker()->FinalizeSyncForURL(url); 88 change_tracker()->FinalizeSyncForURL(url);
67 EXPECT_TRUE(sync_status()->IsWritable(url)); 89 EXPECT_TRUE(sync_status()->IsWritable(url));
68 90
69 // See if the changes for URL are reset. 91 // See if the changes for URL are reset.
70 ASSERT_TRUE(sync_status()->TryDisableWriting(url)); 92 ASSERT_TRUE(sync_status()->TryDisableWriting(url));
71 change_tracker()->GetChangesForURL(url, &changes); 93 change_tracker()->GetChangesForURL(url, &changes);
72 EXPECT_TRUE(changes.empty()); 94 EXPECT_TRUE(changes.empty());
73 } 95 }
74 96
75 private: 97 private:
98 ScopedTempDir data_dir_;
76 MessageLoop message_loop_; 99 MessageLoop message_loop_;
77 scoped_ptr<LocalFileSyncStatus> sync_status_; 100 scoped_ptr<LocalFileSyncStatus> sync_status_;
78 scoped_ptr<LocalFileChangeTracker> change_tracker_; 101 scoped_ptr<LocalFileChangeTracker> change_tracker_;
79 }; 102 };
80 103
81 TEST_F(LocalFileChangeTrackerTest, GetChanges) { 104 TEST_F(LocalFileChangeTrackerTest, GetChanges) {
82 change_tracker()->OnCreateFile(URL(kURL0)); 105 change_tracker()->OnCreateFile(URL(kURL0));
83 change_tracker()->OnRemoveFile(URL(kURL0)); // Offset the create. 106 change_tracker()->OnRemoveFile(URL(kURL0)); // Offset the create.
84 change_tracker()->OnRemoveDirectory(URL(kURL1)); 107 change_tracker()->OnRemoveDirectory(URL(kURL1));
85 change_tracker()->OnCreateDirectory(URL(kURL2)); 108 change_tracker()->OnCreateDirectory(URL(kURL2));
(...skipping 21 matching lines...) Expand all
107 FileChange(FileChange::FILE_CHANGE_ADD, 130 FileChange(FileChange::FILE_CHANGE_ADD,
108 FileChange::FILE_TYPE_DIRECTORY)); 131 FileChange::FILE_TYPE_DIRECTORY));
109 VerifyChange(URL(kURL3), 132 VerifyChange(URL(kURL3),
110 FileChange(FileChange::FILE_CHANGE_DELETE, 133 FileChange(FileChange::FILE_CHANGE_DELETE,
111 FileChange::FILE_TYPE_FILE)); 134 FileChange::FILE_TYPE_FILE));
112 VerifyChange(URL(kURL4), 135 VerifyChange(URL(kURL4),
113 FileChange(FileChange::FILE_CHANGE_UPDATE, 136 FileChange(FileChange::FILE_CHANGE_UPDATE,
114 FileChange::FILE_TYPE_FILE)); 137 FileChange::FILE_TYPE_FILE));
115 } 138 }
116 139
140 TEST_F(LocalFileChangeTrackerTest, SerializeExternalFileSystemURL) {
141 const std::string kFileSystemRootURI = "filesystem:http://foo.com/external/";
142 const std::string kExternalFileSystemURL =
143 kFileSystemRootURI + kExternalFileSystemID + "/dir a/file";
144 FileSystemURL url = FileSystemURL(GURL(kExternalFileSystemURL));
kinuko 2012/09/21 08:12:32 Maybe if this file system gets mature we might add
nhiroki 2012/09/24 07:01:40 Okay, I filed it (http://crbug.com/151876), and I'
145
146 std::string serialized = SerializeExternalFileSystemURL(url);
147 EXPECT_EQ(kExternalFileSystemURL, serialized);
148 EXPECT_EQ(url, DeserializeExternalFileSystemURL(serialized));
149 }
150
151 // TODO(nhiroki): add unittests to ensure the database works successfully.
152
117 } // namespace fileapi 153 } // namespace fileapi
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698