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

Side by Side Diff: chrome/browser/sync/syncable/syncable_unittest.cc

Issue 340055: String cleanup in sync code (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 11 years, 1 month 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) 2009 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2009 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/syncable/syncable.h" 5 #include "chrome/browser/sync/syncable/syncable.h"
6 6
7 #include "build/build_config.h" 7 #include "build/build_config.h"
8 8
9 #include <sys/types.h> 9 #include <sys/types.h>
10 10
(...skipping 12 matching lines...) Expand all
23 #if !defined(OS_WIN) 23 #if !defined(OS_WIN)
24 #define MAX_PATH PATH_MAX 24 #define MAX_PATH PATH_MAX
25 #include <ostream> 25 #include <ostream>
26 #include <stdio.h> 26 #include <stdio.h>
27 #include <sys/ipc.h> 27 #include <sys/ipc.h>
28 #include <sys/sem.h> 28 #include <sys/sem.h>
29 #include <sys/times.h> 29 #include <sys/times.h>
30 #endif // !defined(OS_WIN) 30 #endif // !defined(OS_WIN)
31 31
32 #include "base/at_exit.h" 32 #include "base/at_exit.h"
33 #include "base/file_path.h"
34 #include "base/file_util.h"
33 #include "base/logging.h" 35 #include "base/logging.h"
34 #include "base/platform_thread.h" 36 #include "base/platform_thread.h"
35 #include "base/scoped_ptr.h" 37 #include "base/scoped_ptr.h"
36 #include "chrome/browser/sync/syncable/directory_backing_store.h" 38 #include "chrome/browser/sync/syncable/directory_backing_store.h"
37 #include "chrome/browser/sync/syncable/directory_manager.h" 39 #include "chrome/browser/sync/syncable/directory_manager.h"
38 #include "chrome/browser/sync/util/closure.h" 40 #include "chrome/browser/sync/util/closure.h"
39 #include "chrome/browser/sync/util/compat_file.h"
40 #include "chrome/browser/sync/util/event_sys-inl.h" 41 #include "chrome/browser/sync/util/event_sys-inl.h"
41 #include "chrome/browser/sync/util/path_helpers.h" 42 #include "chrome/browser/sync/util/path_helpers.h"
42 #include "chrome/browser/sync/util/query_helpers.h" 43 #include "chrome/browser/sync/util/query_helpers.h"
43 #include "chrome/test/sync/engine/test_id_factory.h" 44 #include "chrome/test/sync/engine/test_id_factory.h"
44 #include "testing/gtest/include/gtest/gtest.h" 45 #include "testing/gtest/include/gtest/gtest.h"
45 #include "third_party/sqlite/preprocessed/sqlite3.h" 46 #include "third_party/sqlite/preprocessed/sqlite3.h"
46 47
47 using browser_sync::TestIdFactory; 48 using browser_sync::TestIdFactory;
48 using std::cout; 49 using std::cout;
49 using std::endl; 50 using std::endl;
(...skipping 21 matching lines...) Expand all
71 ExtendedAttributeKey key(e->Get(META_HANDLE), PSTR("DATA")); 72 ExtendedAttributeKey key(e->Get(META_HANDLE), PSTR("DATA"));
72 ExtendedAttribute attr(trans, GET_BY_HANDLE, key); 73 ExtendedAttribute attr(trans, GET_BY_HANDLE, key);
73 EXPECT_FALSE(attr.is_deleted()); 74 EXPECT_FALSE(attr.is_deleted());
74 EXPECT_EQ(expected_value, attr.value()); 75 EXPECT_EQ(expected_value, attr.value());
75 } 76 }
76 77
77 78
78 TEST(Syncable, General) { 79 TEST(Syncable, General) {
79 remove("SimpleTest.sqlite3"); 80 remove("SimpleTest.sqlite3");
80 Directory dir; 81 Directory dir;
81 dir.Open(PSTR("SimpleTest.sqlite3"), PSTR("SimpleTest")); 82 FilePath test_db(FILE_PATH_LITERAL("SimpleTest.sqlite3"));
83 dir.Open(test_db, PSTR("SimpleTest"));
82 bool entry_exists = false; 84 bool entry_exists = false;
83 int64 metahandle; 85 int64 metahandle;
84 const Id id = TestIdFactory::FromNumber(99); 86 const Id id = TestIdFactory::FromNumber(99);
85 // Test simple read operations. 87 // Test simple read operations.
86 { 88 {
87 ReadTransaction rtrans(&dir, __FILE__, __LINE__); 89 ReadTransaction rtrans(&dir, __FILE__, __LINE__);
88 Entry e(&rtrans, GET_BY_ID, id); 90 Entry e(&rtrans, GET_BY_ID, id);
89 if (e.good()) { 91 if (e.good()) {
90 entry_exists = true; 92 entry_exists = true;
91 metahandle = e.Get(META_HANDLE); 93 metahandle = e.Get(META_HANDLE);
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
169 } 171 }
170 172
171 namespace { 173 namespace {
172 174
173 // A Directory whose backing store always fails SaveChanges by returning false. 175 // A Directory whose backing store always fails SaveChanges by returning false.
174 class TestUnsaveableDirectory : public Directory { 176 class TestUnsaveableDirectory : public Directory {
175 public: 177 public:
176 class UnsaveableBackingStore : public DirectoryBackingStore { 178 class UnsaveableBackingStore : public DirectoryBackingStore {
177 public: 179 public:
178 UnsaveableBackingStore(const PathString& dir_name, 180 UnsaveableBackingStore(const PathString& dir_name,
179 const PathString& backing_filepath) 181 const FilePath& backing_filepath)
180 : DirectoryBackingStore(dir_name, backing_filepath) { } 182 : DirectoryBackingStore(dir_name, backing_filepath) { }
181 virtual bool SaveChanges(const Directory::SaveChangesSnapshot& snapshot) { 183 virtual bool SaveChanges(const Directory::SaveChangesSnapshot& snapshot) {
182 return false; 184 return false;
183 } 185 }
184 }; 186 };
185 virtual DirectoryBackingStore* CreateBackingStore( 187 virtual DirectoryBackingStore* CreateBackingStore(
186 const PathString& dir_name, const PathString& backing_filepath) { 188 const PathString& dir_name, const FilePath& backing_filepath) {
187 return new UnsaveableBackingStore(dir_name, backing_filepath); 189 return new UnsaveableBackingStore(dir_name, backing_filepath);
188 } 190 }
189 }; 191 };
190 192
191 // Test suite for syncable::Directory. 193 // Test suite for syncable::Directory.
192 class SyncableDirectoryTest : public testing::Test { 194 class SyncableDirectoryTest : public testing::Test {
193 protected: 195 protected:
194 static const PathString kFilePath; 196 static const FilePath::CharType kFilePath[];
195 static const PathString kName; 197 static const PathString kName;
196 static const PathChar* kSqlite3File;
197 static const Id kId; 198 static const Id kId;
198 199
199 // SetUp() is called before each test case is run. 200 // SetUp() is called before each test case is run.
200 // The sqlite3 DB is deleted before each test is run. 201 // The sqlite3 DB is deleted before each test is run.
201 virtual void SetUp() { 202 virtual void SetUp() {
202 PathRemove(PathString(kSqlite3File)); 203 file_path_ = FilePath(kFilePath);
204 file_util::Delete(file_path_, true);
203 dir_.reset(new Directory()); 205 dir_.reset(new Directory());
204 ASSERT_TRUE(dir_.get()); 206 ASSERT_TRUE(dir_.get());
205 ASSERT_TRUE(OPENED == dir_->Open(kFilePath, kName)); 207 ASSERT_TRUE(OPENED == dir_->Open(file_path_, kName));
206 ASSERT_TRUE(dir_->good()); 208 ASSERT_TRUE(dir_->good());
207 } 209 }
208 210
209 virtual void TearDown() { 211 virtual void TearDown() {
210 // This also closes file handles. 212 // This also closes file handles.
211 dir_->SaveChanges(); 213 dir_->SaveChanges();
212 dir_.reset(); 214 dir_.reset();
213 PathRemove(PathString(kSqlite3File)); 215 file_util::Delete(file_path_, true);
214 } 216 }
215 217
216 scoped_ptr<Directory> dir_; 218 scoped_ptr<Directory> dir_;
219 FilePath file_path_;
217 220
218 // Creates an empty entry and sets the ID field to the default kId. 221 // Creates an empty entry and sets the ID field to the default kId.
219 void CreateEntry(const PathString &entryname) { 222 void CreateEntry(const PathString &entryname) {
220 CreateEntry(entryname, kId); 223 CreateEntry(entryname, kId);
221 } 224 }
222 225
223 // Creates an empty entry and sets the ID field to id. 226 // Creates an empty entry and sets the ID field to id.
224 void CreateEntry(const PathString &entryname, const int id) { 227 void CreateEntry(const PathString &entryname, const int id) {
225 CreateEntry(entryname, TestIdFactory::FromNumber(id)); 228 CreateEntry(entryname, TestIdFactory::FromNumber(id));
226 } 229 }
227 void CreateEntry(const PathString &entryname, Id id) { 230 void CreateEntry(const PathString &entryname, Id id) {
228 WriteTransaction wtrans(dir_.get(), UNITTEST, __FILE__, __LINE__); 231 WriteTransaction wtrans(dir_.get(), UNITTEST, __FILE__, __LINE__);
229 MutableEntry me(&wtrans, CREATE, wtrans.root_id(), entryname); 232 MutableEntry me(&wtrans, CREATE, wtrans.root_id(), entryname);
230 ASSERT_TRUE(me.good()); 233 ASSERT_TRUE(me.good());
231 me.Put(ID, id); 234 me.Put(ID, id);
232 me.Put(IS_UNSYNCED, true); 235 me.Put(IS_UNSYNCED, true);
233 } 236 }
234 237
235 void ValidateEntry(BaseTransaction* trans, int64 id, bool check_name, 238 void ValidateEntry(BaseTransaction* trans, int64 id, bool check_name,
236 PathString name, int64 base_version, int64 server_version, bool is_del); 239 PathString name, int64 base_version, int64 server_version, bool is_del);
237 void CreateAndCheck(WriteTransaction* trans, int64 parent_id, int64 id, 240 void CreateAndCheck(WriteTransaction* trans, int64 parent_id, int64 id,
238 PathString name, PathString server_name, int64 version, 241 PathString name, PathString server_name, int64 version,
239 bool set_server_fields, bool is_dir, bool add_to_lru, int64 *meta_handle); 242 bool set_server_fields, bool is_dir, bool add_to_lru, int64 *meta_handle);
240 }; 243 };
241 244
242 const PathString SyncableDirectoryTest::kFilePath(PSTR("Test.sqlite3")); 245 const FilePath::CharType SyncableDirectoryTest::kFilePath[] =
243 const PathChar* SyncableDirectoryTest::kSqlite3File(PSTR("Test.sqlite3")); 246 FILE_PATH_LITERAL("Test.sqlite3");
244 const PathString SyncableDirectoryTest::kName(PSTR("Foo")); 247 const PathString SyncableDirectoryTest::kName(PSTR("Foo"));
245 const Id SyncableDirectoryTest::kId(TestIdFactory::FromNumber(-99)); 248 const Id SyncableDirectoryTest::kId(TestIdFactory::FromNumber(-99));
246 249
247 TEST_F(SyncableDirectoryTest, TestBasicLookupNonExistantID) { 250 TEST_F(SyncableDirectoryTest, TestBasicLookupNonExistantID) {
248 ReadTransaction rtrans(dir_.get(), __FILE__, __LINE__); 251 ReadTransaction rtrans(dir_.get(), __FILE__, __LINE__);
249 Entry e(&rtrans, GET_BY_ID, kId); 252 Entry e(&rtrans, GET_BY_ID, kId);
250 ASSERT_FALSE(e.good()); 253 ASSERT_FALSE(e.good());
251 } 254 }
252 255
253 TEST_F(SyncableDirectoryTest, TestBasicLookupValidID) { 256 TEST_F(SyncableDirectoryTest, TestBasicLookupValidID) {
(...skipping 30 matching lines...) Expand all
284 ASSERT_FALSE(e1.Put(IS_DEL, false)); 287 ASSERT_FALSE(e1.Put(IS_DEL, false));
285 ASSERT_FALSE(e2.Put(IS_DEL, false)); 288 ASSERT_FALSE(e2.Put(IS_DEL, false));
286 ASSERT_TRUE(e3.Put(IS_DEL, true)); 289 ASSERT_TRUE(e3.Put(IS_DEL, true));
287 290
288 ASSERT_TRUE(e1.Put(IS_DEL, false)); 291 ASSERT_TRUE(e1.Put(IS_DEL, false));
289 ASSERT_FALSE(e2.Put(IS_DEL, false)); 292 ASSERT_FALSE(e2.Put(IS_DEL, false));
290 ASSERT_FALSE(e3.Put(IS_DEL, false)); 293 ASSERT_FALSE(e3.Put(IS_DEL, false));
291 ASSERT_TRUE(e1.Put(IS_DEL, true)); 294 ASSERT_TRUE(e1.Put(IS_DEL, true));
292 } 295 }
293 296
294 TEST_F(SyncableDirectoryTest, TestGetFullPathNeverCrashes) {
295 PathString dirname = PSTR("honey"),
296 childname = PSTR("jelly");
297 WriteTransaction trans(dir_.get(), UNITTEST, __FILE__, __LINE__);
298 MutableEntry e1(&trans, CREATE, trans.root_id(), dirname);
299 ASSERT_TRUE(e1.good());
300 ASSERT_TRUE(e1.Put(IS_DIR, true));
301 MutableEntry e2(&trans, CREATE, e1.Get(ID), childname);
302 ASSERT_TRUE(e2.good());
303 PathString path = GetFullPath(&trans, e2);
304 ASSERT_FALSE(path.empty());
305 // Give the child a parent that doesn't exist.
306 e2.Put(PARENT_ID, TestIdFactory::FromNumber(42));
307 path = GetFullPath(&trans, e2);
308 ASSERT_TRUE(path.empty());
309 // Done testing, make sure CheckTreeInvariants doesn't choke.
310 e2.Put(PARENT_ID, e1.Get(ID));
311 e2.Put(IS_DEL, true);
312 e1.Put(IS_DEL, true);
313 }
314
315 TEST_F(SyncableDirectoryTest, TestGetUnsynced) { 297 TEST_F(SyncableDirectoryTest, TestGetUnsynced) {
316 Directory::UnsyncedMetaHandles handles; 298 Directory::UnsyncedMetaHandles handles;
317 int64 handle1, handle2; 299 int64 handle1, handle2;
318 { 300 {
319 WriteTransaction trans(dir_.get(), UNITTEST, __FILE__, __LINE__); 301 WriteTransaction trans(dir_.get(), UNITTEST, __FILE__, __LINE__);
320 302
321 dir_->GetUnsyncedMetaHandles(&trans, &handles); 303 dir_->GetUnsyncedMetaHandles(&trans, &handles);
322 ASSERT_TRUE(0 == handles.size()); 304 ASSERT_TRUE(0 == handles.size());
323 305
324 MutableEntry e1(&trans, CREATE, trans.root_id(), PSTR("abba")); 306 MutableEntry e1(&trans, CREATE, trans.root_id(), PSTR("abba"));
(...skipping 391 matching lines...) Expand 10 before | Expand all | Expand 10 after
716 ASSERT_TRUE(e1.good()); 698 ASSERT_TRUE(e1.good());
717 handle1 = e1.Get(META_HANDLE); 699 handle1 = e1.Get(META_HANDLE);
718 e1.Put(BASE_VERSION, 1); 700 e1.Put(BASE_VERSION, 1);
719 e1.Put(IS_DIR, true); 701 e1.Put(IS_DIR, true);
720 e1.Put(ID, TestIdFactory::FromNumber(101)); 702 e1.Put(ID, TestIdFactory::FromNumber(101));
721 } 703 }
722 ASSERT_TRUE(dir_->SaveChanges()); 704 ASSERT_TRUE(dir_->SaveChanges());
723 705
724 dir_.reset(new TestUnsaveableDirectory()); 706 dir_.reset(new TestUnsaveableDirectory());
725 ASSERT_TRUE(dir_.get()); 707 ASSERT_TRUE(dir_.get());
726 ASSERT_TRUE(OPENED == dir_->Open(kFilePath, kName)); 708 ASSERT_TRUE(OPENED == dir_->Open(FilePath(kFilePath), kName));
727 ASSERT_TRUE(dir_->good()); 709 ASSERT_TRUE(dir_->good());
728 int64 handle2 = 0; 710 int64 handle2 = 0;
729 { 711 {
730 WriteTransaction trans(dir_.get(), UNITTEST, __FILE__, __LINE__); 712 WriteTransaction trans(dir_.get(), UNITTEST, __FILE__, __LINE__);
731 713
732 MutableEntry aguilera(&trans, GET_BY_HANDLE, handle1); 714 MutableEntry aguilera(&trans, GET_BY_HANDLE, handle1);
733 ASSERT_TRUE(aguilera.good()); 715 ASSERT_TRUE(aguilera.good());
734 aguilera.Put(NAME, PSTR("christina")); 716 aguilera.Put(NAME, PSTR("christina"));
735 ASSERT_TRUE(aguilera.GetKernelCopy().dirty[NAME]); 717 ASSERT_TRUE(aguilera.GetKernelCopy().dirty[NAME]);
736 718
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
768 Entry e(trans, GET_BY_ID, TestIdFactory::FromNumber(id)); 750 Entry e(trans, GET_BY_ID, TestIdFactory::FromNumber(id));
769 ASSERT_TRUE(e.good()); 751 ASSERT_TRUE(e.good());
770 if (check_name) 752 if (check_name)
771 ASSERT_TRUE(name == e.Get(NAME)); 753 ASSERT_TRUE(name == e.Get(NAME));
772 ASSERT_TRUE(base_version == e.Get(BASE_VERSION)); 754 ASSERT_TRUE(base_version == e.Get(BASE_VERSION));
773 ASSERT_TRUE(server_version == e.Get(SERVER_VERSION)); 755 ASSERT_TRUE(server_version == e.Get(SERVER_VERSION));
774 ASSERT_TRUE(is_del == e.Get(IS_DEL)); 756 ASSERT_TRUE(is_del == e.Get(IS_DEL));
775 } 757 }
776 758
777 TEST(SyncableDirectoryManager, TestFileRelease) { 759 TEST(SyncableDirectoryManager, TestFileRelease) {
778 DirectoryManager dm(PSTR(".")); 760 DirectoryManager dm(FilePath(FILE_PATH_LITERAL(".")));
779 ASSERT_TRUE(dm.Open(PSTR("ScopeTest"))); 761 ASSERT_TRUE(dm.Open(PSTR("ScopeTest")));
780 { 762 {
781 ScopedDirLookup(&dm, PSTR("ScopeTest")); 763 ScopedDirLookup(&dm, PSTR("ScopeTest"));
782 } 764 }
783 dm.Close(PSTR("ScopeTest")); 765 dm.Close(PSTR("ScopeTest"));
784 ASSERT_TRUE(0 == PathRemove(dm.GetSyncDataDatabasePath())); 766 ASSERT_TRUE(file_util::Delete(dm.GetSyncDataDatabasePath(), true));
785 } 767 }
786 768
787 class ThreadOpenTestDelegate : public PlatformThread::Delegate { 769 class ThreadOpenTestDelegate : public PlatformThread::Delegate {
788 public: 770 public:
789 explicit ThreadOpenTestDelegate(DirectoryManager* dm) 771 explicit ThreadOpenTestDelegate(DirectoryManager* dm)
790 : directory_manager_(dm) {} 772 : directory_manager_(dm) {}
791 DirectoryManager* const directory_manager_; 773 DirectoryManager* const directory_manager_;
792 774
793 private: 775 private:
794 // PlatformThread::Delegate methods: 776 // PlatformThread::Delegate methods:
795 virtual void ThreadMain() { 777 virtual void ThreadMain() {
796 CHECK(directory_manager_->Open(PSTR("Open"))); 778 CHECK(directory_manager_->Open(PSTR("Open")));
797 } 779 }
798 780
799 DISALLOW_COPY_AND_ASSIGN(ThreadOpenTestDelegate); 781 DISALLOW_COPY_AND_ASSIGN(ThreadOpenTestDelegate);
800 }; 782 };
801 783
802 TEST(SyncableDirectoryManager, ThreadOpenTest) { 784 TEST(SyncableDirectoryManager, ThreadOpenTest) {
803 DirectoryManager dm(PSTR(".")); 785 DirectoryManager dm(FilePath(FILE_PATH_LITERAL(".")));
804 PlatformThreadHandle thread_handle; 786 PlatformThreadHandle thread_handle;
805 ThreadOpenTestDelegate test_delegate(&dm); 787 ThreadOpenTestDelegate test_delegate(&dm);
806 ASSERT_TRUE(PlatformThread::Create(0, &test_delegate, &thread_handle)); 788 ASSERT_TRUE(PlatformThread::Create(0, &test_delegate, &thread_handle));
807 PlatformThread::Join(thread_handle); 789 PlatformThread::Join(thread_handle);
808 { 790 {
809 ScopedDirLookup dir(&dm, PSTR("Open")); 791 ScopedDirLookup dir(&dm, PSTR("Open"));
810 ASSERT_TRUE(dir.good()); 792 ASSERT_TRUE(dir.good());
811 } 793 }
812 dm.Close(PSTR("Open")); 794 dm.Close(PSTR("Open"));
813 ScopedDirLookup dir(&dm, PSTR("Open")); 795 ScopedDirLookup dir(&dm, PSTR("Open"));
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
874 step_->condvar.Signal(); 856 step_->condvar.Signal();
875 } 857 }
876 } 858 }
877 859
878 DISALLOW_COPY_AND_ASSIGN(ThreadBugDelegate); 860 DISALLOW_COPY_AND_ASSIGN(ThreadBugDelegate);
879 }; 861 };
880 862
881 TEST(SyncableDirectoryManager, ThreadBug1) { 863 TEST(SyncableDirectoryManager, ThreadBug1) {
882 Step step; 864 Step step;
883 step.number = 0; 865 step.number = 0;
884 DirectoryManager dirman(PSTR(".")); 866 DirectoryManager dirman(FilePath(FILE_PATH_LITERAL(".")));
885 ThreadBugDelegate thread_delegate_1(0, &step, &dirman); 867 ThreadBugDelegate thread_delegate_1(0, &step, &dirman);
886 ThreadBugDelegate thread_delegate_2(1, &step, &dirman); 868 ThreadBugDelegate thread_delegate_2(1, &step, &dirman);
887 869
888 PlatformThreadHandle thread_handle_1; 870 PlatformThreadHandle thread_handle_1;
889 PlatformThreadHandle thread_handle_2; 871 PlatformThreadHandle thread_handle_2;
890 872
891 ASSERT_TRUE(PlatformThread::Create(0, &thread_delegate_1, &thread_handle_1)); 873 ASSERT_TRUE(PlatformThread::Create(0, &thread_delegate_1, &thread_handle_1));
892 ASSERT_TRUE(PlatformThread::Create(0, &thread_delegate_2, &thread_handle_2)); 874 ASSERT_TRUE(PlatformThread::Create(0, &thread_delegate_2, &thread_handle_2));
893 875
894 PlatformThread::Join(thread_handle_1); 876 PlatformThread::Join(thread_handle_1);
(...skipping 16 matching lines...) Expand all
911 AutoLock scoped_lock(step_->mutex); 893 AutoLock scoped_lock(step_->mutex);
912 894
913 while (step_->number < 4) { 895 while (step_->number < 4) {
914 while (step_->number % 2 != role_) { 896 while (step_->number % 2 != role_) {
915 step_->condvar.Wait(); 897 step_->condvar.Wait();
916 } 898 }
917 switch (step_->number) { 899 switch (step_->number) {
918 case 0: 900 case 0:
919 { 901 {
920 // Clean up remnants of earlier test runs. 902 // Clean up remnants of earlier test runs.
921 PathRemove(directory_manager_->GetSyncDataDatabasePath()); 903 file_util::Delete(directory_manager_->GetSyncDataDatabasePath(),
904 true);
922 // Test. 905 // Test.
923 directory_manager_->Open(dirname); 906 directory_manager_->Open(dirname);
924 ScopedDirLookup dir(directory_manager_, dirname); 907 ScopedDirLookup dir(directory_manager_, dirname);
925 CHECK(dir.good()); 908 CHECK(dir.good());
926 WriteTransaction trans(dir, UNITTEST, __FILE__, __LINE__); 909 WriteTransaction trans(dir, UNITTEST, __FILE__, __LINE__);
927 MutableEntry me(&trans, CREATE, trans.root_id(), PSTR("Jeff")); 910 MutableEntry me(&trans, CREATE, trans.root_id(), PSTR("Jeff"));
928 me.Put(BASE_VERSION, 1); 911 me.Put(BASE_VERSION, 1);
929 me.Put(ID, TestIdFactory::FromNumber(100)); 912 me.Put(ID, TestIdFactory::FromNumber(100));
930 PutDataAsExtendedAttribute(&trans, &me, test_bytes, 913 PutDataAsExtendedAttribute(&trans, &me, test_bytes,
931 sizeof(test_bytes)); 914 sizeof(test_bytes));
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
967 step_->condvar.Signal(); 950 step_->condvar.Signal();
968 } 951 }
969 } 952 }
970 953
971 DISALLOW_COPY_AND_ASSIGN(DirectoryKernelStalenessBugDelegate); 954 DISALLOW_COPY_AND_ASSIGN(DirectoryKernelStalenessBugDelegate);
972 }; 955 };
973 956
974 TEST(SyncableDirectoryManager, DirectoryKernelStalenessBug) { 957 TEST(SyncableDirectoryManager, DirectoryKernelStalenessBug) {
975 Step step; 958 Step step;
976 959
977 DirectoryManager dirman(PSTR(".")); 960 DirectoryManager dirman(FilePath(FILE_PATH_LITERAL(".")));
978 DirectoryKernelStalenessBugDelegate thread_delegate_1(0, &step, &dirman); 961 DirectoryKernelStalenessBugDelegate thread_delegate_1(0, &step, &dirman);
979 DirectoryKernelStalenessBugDelegate thread_delegate_2(1, &step, &dirman); 962 DirectoryKernelStalenessBugDelegate thread_delegate_2(1, &step, &dirman);
980 963
981 PlatformThreadHandle thread_handle_1; 964 PlatformThreadHandle thread_handle_1;
982 PlatformThreadHandle thread_handle_2; 965 PlatformThreadHandle thread_handle_2;
983 966
984 ASSERT_TRUE(PlatformThread::Create(0, &thread_delegate_1, &thread_handle_1)); 967 ASSERT_TRUE(PlatformThread::Create(0, &thread_delegate_1, &thread_handle_1));
985 ASSERT_TRUE(PlatformThread::Create(0, &thread_delegate_2, &thread_handle_2)); 968 ASSERT_TRUE(PlatformThread::Create(0, &thread_delegate_2, &thread_handle_2));
986 969
987 PlatformThread::Join(thread_handle_1); 970 PlatformThread::Join(thread_handle_1);
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
1027 e.Get(ID).ServerKnows() && !e.Get(ID).IsRoot()) 1010 e.Get(ID).ServerKnows() && !e.Get(ID).IsRoot())
1028 e.Put(BASE_VERSION, 1); 1011 e.Put(BASE_VERSION, 1);
1029 } 1012 }
1030 } 1013 }
1031 } 1014 }
1032 1015
1033 DISALLOW_COPY_AND_ASSIGN(StressTransactionsDelegate); 1016 DISALLOW_COPY_AND_ASSIGN(StressTransactionsDelegate);
1034 }; 1017 };
1035 1018
1036 TEST(SyncableDirectory, StressTransactions) { 1019 TEST(SyncableDirectory, StressTransactions) {
1037 DirectoryManager dirman(PSTR(".")); 1020 DirectoryManager dirman(FilePath(FILE_PATH_LITERAL(".")));
1038 PathString dirname = PSTR("stress"); 1021 PathString dirname = PSTR("stress");
1039 PathRemove(dirman.GetSyncDataDatabasePath()); 1022 file_util::Delete(dirman.GetSyncDataDatabasePath(), true);
1040 dirman.Open(dirname); 1023 dirman.Open(dirname);
1041 1024
1042 const int kThreadCount = 7; 1025 const int kThreadCount = 7;
1043 PlatformThreadHandle threads[kThreadCount]; 1026 PlatformThreadHandle threads[kThreadCount];
1044 scoped_ptr<StressTransactionsDelegate> thread_delegates[kThreadCount]; 1027 scoped_ptr<StressTransactionsDelegate> thread_delegates[kThreadCount];
1045 1028
1046 for (int i = 0; i < kThreadCount; ++i) { 1029 for (int i = 0; i < kThreadCount; ++i) {
1047 thread_delegates[i].reset( 1030 thread_delegates[i].reset(
1048 new StressTransactionsDelegate(&dirman, dirname, i)); 1031 new StressTransactionsDelegate(&dirman, dirname, i));
1049 ASSERT_TRUE( 1032 ASSERT_TRUE(
1050 PlatformThread::Create(0, thread_delegates[i].get(), &threads[i])); 1033 PlatformThread::Create(0, thread_delegates[i].get(), &threads[i]));
1051 } 1034 }
1052 1035
1053 for (int i = 0; i < kThreadCount; ++i) { 1036 for (int i = 0; i < kThreadCount; ++i) {
1054 PlatformThread::Join(threads[i]); 1037 PlatformThread::Join(threads[i]);
1055 } 1038 }
1056 1039
1057 dirman.Close(dirname); 1040 dirman.Close(dirname);
1058 PathRemove(dirman.GetSyncDataDatabasePath()); 1041 file_util::Delete(dirman.GetSyncDataDatabasePath(), true);
1059 } 1042 }
1060 1043
1061 TEST(Syncable, ComparePathNames) { 1044 TEST(Syncable, ComparePathNames) {
1062 struct { 1045 struct {
1063 char a; 1046 char a;
1064 char b; 1047 char b;
1065 int expected_result; 1048 int expected_result;
1066 } tests[] = { 1049 } tests[] = {
1067 { 'A', 'A', 0 }, 1050 { 'A', 'A', 0 },
1068 { 'A', 'a', 0 }, 1051 { 'A', 'a', 0 },
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
1134 Blob value_blob(value, value + arraysize(value)); 1117 Blob value_blob(value, value + arraysize(value));
1135 ext.mutable_value()->swap(value_blob); 1118 ext.mutable_value()->swap(value_blob);
1136 ext.delete_attribute(); 1119 ext.delete_attribute();
1137 } 1120 }
1138 // This call to SaveChanges used to CHECK fail. 1121 // This call to SaveChanges used to CHECK fail.
1139 dir_.get()->SaveChanges(); 1122 dir_.get()->SaveChanges();
1140 } 1123 }
1141 1124
1142 } // namespace 1125 } // namespace
1143 } // namespace syncable 1126 } // namespace syncable
OLDNEW
« no previous file with comments | « chrome/browser/sync/syncable/syncable.cc ('k') | chrome/browser/sync/util/character_set_converters.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698