| OLD | NEW |
| 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 "sync/syncable/directory_unittest.h" | 5 #include "sync/syncable/directory_unittest.h" |
| 6 | 6 |
| 7 #include "base/run_loop.h" |
| 7 #include "base/strings/stringprintf.h" | 8 #include "base/strings/stringprintf.h" |
| 8 #include "base/test/values_test_util.h" | 9 #include "base/test/values_test_util.h" |
| 9 #include "sync/internal_api/public/base/attachment_id_proto.h" | 10 #include "sync/internal_api/public/base/attachment_id_proto.h" |
| 10 #include "sync/syncable/syncable_proto_util.h" | 11 #include "sync/syncable/syncable_proto_util.h" |
| 11 #include "sync/syncable/syncable_util.h" | 12 #include "sync/syncable/syncable_util.h" |
| 12 #include "sync/syncable/syncable_write_transaction.h" | 13 #include "sync/syncable/syncable_write_transaction.h" |
| 13 #include "sync/test/engine/test_syncable_utils.h" | 14 #include "sync/test/engine/test_syncable_utils.h" |
| 14 #include "sync/test/test_directory_backing_store.h" | 15 #include "sync/test/test_directory_backing_store.h" |
| 15 #include "sync/util/mock_unrecoverable_error_handler.h" | 16 #include "sync/util/mock_unrecoverable_error_handler.h" |
| 16 | 17 |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 66 void SyncableDirectoryTest::TearDown() { | 67 void SyncableDirectoryTest::TearDown() { |
| 67 if (dir_) | 68 if (dir_) |
| 68 dir_->SaveChanges(); | 69 dir_->SaveChanges(); |
| 69 dir_.reset(); | 70 dir_.reset(); |
| 70 } | 71 } |
| 71 | 72 |
| 72 DirOpenResult SyncableDirectoryTest::ReopenDirectory() { | 73 DirOpenResult SyncableDirectoryTest::ReopenDirectory() { |
| 73 // Use a TestDirectoryBackingStore and sql::Connection so we can have test | 74 // Use a TestDirectoryBackingStore and sql::Connection so we can have test |
| 74 // data persist across Directory object lifetimes while getting the | 75 // data persist across Directory object lifetimes while getting the |
| 75 // performance benefits of not writing to disk. | 76 // performance benefits of not writing to disk. |
| 76 dir_.reset( | 77 dir_.reset(new Directory( |
| 77 new Directory(new TestDirectoryBackingStore(kDirectoryName, &connection_), | 78 new TestDirectoryBackingStore(kDirectoryName, &connection_), |
| 78 &handler_, base::Closure(), NULL, NULL)); | 79 MakeWeakHandle(handler_.GetWeakPtr()), base::Closure(), NULL, NULL)); |
| 79 | 80 |
| 80 DirOpenResult open_result = | 81 DirOpenResult open_result = |
| 81 dir_->Open(kDirectoryName, &delegate_, NullTransactionObserver()); | 82 dir_->Open(kDirectoryName, &delegate_, NullTransactionObserver()); |
| 82 | 83 |
| 83 if (open_result != OPENED) { | 84 if (open_result != OPENED) { |
| 84 dir_.reset(); | 85 dir_.reset(); |
| 85 } | 86 } |
| 86 | 87 |
| 87 return open_result; | 88 return open_result; |
| 88 } | 89 } |
| (...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 197 } | 198 } |
| 198 | 199 |
| 199 DirectoryChangeDelegate* SyncableDirectoryTest::directory_change_delegate() { | 200 DirectoryChangeDelegate* SyncableDirectoryTest::directory_change_delegate() { |
| 200 return &delegate_; | 201 return &delegate_; |
| 201 } | 202 } |
| 202 | 203 |
| 203 Encryptor* SyncableDirectoryTest::encryptor() { | 204 Encryptor* SyncableDirectoryTest::encryptor() { |
| 204 return &encryptor_; | 205 return &encryptor_; |
| 205 } | 206 } |
| 206 | 207 |
| 207 UnrecoverableErrorHandler* | 208 |
| 209 TestUnrecoverableErrorHandler* |
| 208 SyncableDirectoryTest::unrecoverable_error_handler() { | 210 SyncableDirectoryTest::unrecoverable_error_handler() { |
| 209 return &handler_; | 211 return &handler_; |
| 210 } | 212 } |
| 211 | 213 |
| 212 void SyncableDirectoryTest::ValidateEntry(BaseTransaction* trans, | 214 void SyncableDirectoryTest::ValidateEntry(BaseTransaction* trans, |
| 213 int64 id, | 215 int64 id, |
| 214 bool check_name, | 216 bool check_name, |
| 215 const std::string& name, | 217 const std::string& name, |
| 216 int64 base_version, | 218 int64 base_version, |
| 217 int64 server_version, | 219 int64 server_version, |
| (...skipping 1812 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2030 snapshot.delete_journals_to_purge.insert(1); | 2032 snapshot.delete_journals_to_purge.insert(1); |
| 2031 EXPECT_TRUE(snapshot.HasUnsavedMetahandleChanges()); | 2033 EXPECT_TRUE(snapshot.HasUnsavedMetahandleChanges()); |
| 2032 snapshot.delete_journals_to_purge.clear(); | 2034 snapshot.delete_journals_to_purge.clear(); |
| 2033 } | 2035 } |
| 2034 | 2036 |
| 2035 // Verify that Directory triggers an unrecoverable error when a catastrophic | 2037 // Verify that Directory triggers an unrecoverable error when a catastrophic |
| 2036 // DirectoryBackingStore error is detected. | 2038 // DirectoryBackingStore error is detected. |
| 2037 TEST_F(SyncableDirectoryTest, CatastrophicError) { | 2039 TEST_F(SyncableDirectoryTest, CatastrophicError) { |
| 2038 MockUnrecoverableErrorHandler unrecoverable_error_handler; | 2040 MockUnrecoverableErrorHandler unrecoverable_error_handler; |
| 2039 Directory dir(new InMemoryDirectoryBackingStore("catastrophic_error"), | 2041 Directory dir(new InMemoryDirectoryBackingStore("catastrophic_error"), |
| 2040 &unrecoverable_error_handler, base::Closure(), nullptr, | 2042 MakeWeakHandle(unrecoverable_error_handler.GetWeakPtr()), |
| 2041 nullptr); | 2043 base::Closure(), nullptr, nullptr); |
| 2042 ASSERT_EQ(OPENED, dir.Open(kDirectoryName, directory_change_delegate(), | 2044 ASSERT_EQ(OPENED, dir.Open(kDirectoryName, directory_change_delegate(), |
| 2043 NullTransactionObserver())); | 2045 NullTransactionObserver())); |
| 2044 ASSERT_EQ(0, unrecoverable_error_handler.invocation_count()); | 2046 ASSERT_EQ(0, unrecoverable_error_handler.invocation_count()); |
| 2045 | 2047 |
| 2046 // Fire off two catastrophic errors. Call it twice to ensure Directory is | 2048 // Fire off two catastrophic errors. Call it twice to ensure Directory is |
| 2047 // tolerant of multiple invocations since that may happen in the real world. | 2049 // tolerant of multiple invocations since that may happen in the real world. |
| 2048 dir.OnCatastrophicError(); | 2050 dir.OnCatastrophicError(); |
| 2049 dir.OnCatastrophicError(); | 2051 dir.OnCatastrophicError(); |
| 2050 | 2052 |
| 2053 base::RunLoop().RunUntilIdle(); |
| 2054 |
| 2051 // See that the unrecoverable error handler has been invoked twice. | 2055 // See that the unrecoverable error handler has been invoked twice. |
| 2052 ASSERT_EQ(2, unrecoverable_error_handler.invocation_count()); | 2056 ASSERT_EQ(2, unrecoverable_error_handler.invocation_count()); |
| 2053 } | 2057 } |
| 2054 | 2058 |
| 2055 bool EntitySpecificsValuesAreSame(const sync_pb::EntitySpecifics& v1, | 2059 bool EntitySpecificsValuesAreSame(const sync_pb::EntitySpecifics& v1, |
| 2056 const sync_pb::EntitySpecifics& v2) { | 2060 const sync_pb::EntitySpecifics& v2) { |
| 2057 return &v1 == &v2; | 2061 return &v1 == &v2; |
| 2058 } | 2062 } |
| 2059 | 2063 |
| 2060 // Verifies that server and client specifics are shared when their values | 2064 // Verifies that server and client specifics are shared when their values |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2102 EXPECT_FALSE(EntitySpecificsValuesAreSame(item.GetServerSpecifics(), | 2106 EXPECT_FALSE(EntitySpecificsValuesAreSame(item.GetServerSpecifics(), |
| 2103 item.GetBaseServerSpecifics())); | 2107 item.GetBaseServerSpecifics())); |
| 2104 item.PutBaseServerSpecifics(specifics3); | 2108 item.PutBaseServerSpecifics(specifics3); |
| 2105 EXPECT_TRUE(EntitySpecificsValuesAreSame(item.GetServerSpecifics(), | 2109 EXPECT_TRUE(EntitySpecificsValuesAreSame(item.GetServerSpecifics(), |
| 2106 item.GetBaseServerSpecifics())); | 2110 item.GetBaseServerSpecifics())); |
| 2107 } | 2111 } |
| 2108 | 2112 |
| 2109 } // namespace syncable | 2113 } // namespace syncable |
| 2110 | 2114 |
| 2111 } // namespace syncer | 2115 } // namespace syncer |
| OLD | NEW |