OLD | NEW |
---|---|
(Empty) | |
1 // Copyright (c) 2017 The Chromium Authors. All rights reserved. | |
sky
2017/03/01 04:15:24
no (c) (see style guide)
Gang Wu
2017/03/02 05:41:12
Done.
| |
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 "components/history/core/browser/typed_url_sync_metadata_database.h" | |
6 | |
7 #include "base/files/file_path.h" | |
8 #include "base/files/scoped_temp_dir.h" | |
9 #include "components/sync/protocol/model_type_state.pb.h" | |
10 #include "sql/statement.h" | |
11 #include "testing/gtest/include/gtest/gtest.h" | |
12 | |
13 using sync_pb::EntityMetadata; | |
14 using sync_pb::ModelTypeState; | |
15 using syncer::EntityMetadataMap; | |
16 using syncer::MetadataBatch; | |
17 | |
18 namespace history { | |
19 | |
20 class TypedURLSyncMetadataDatabaseTest : public testing::Test, | |
21 public TypedURLSyncMetadataDatabase { | |
22 public: | |
23 TypedURLSyncMetadataDatabaseTest() {} | |
24 ~TypedURLSyncMetadataDatabaseTest() override {} | |
25 | |
26 protected: | |
27 sql::Connection& GetDB() override { return db_; } | |
28 | |
29 void SetUp() override { | |
30 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); | |
31 base::FilePath db_file = | |
32 temp_dir_.GetPath().AppendASCII("TypedURLSyncMetadataDatabaseTest.db"); | |
33 | |
34 EXPECT_TRUE(db_.Open(db_file)); | |
35 | |
36 // Initialize the tables for this test. | |
37 InitSyncTable(); | |
38 } | |
39 void TearDown() override { db_.Close(); } | |
40 | |
41 base::ScopedTempDir temp_dir_; | |
42 sql::Connection db_; | |
43 | |
44 private: | |
45 DISALLOW_COPY_AND_ASSIGN(TypedURLSyncMetadataDatabaseTest); | |
46 }; | |
47 | |
48 TEST_F(TypedURLSyncMetadataDatabaseTest, TypedURLNoMetadata) { | |
49 MetadataBatch metadata_batch; | |
50 EXPECT_TRUE(GetAllSyncMetadata(syncer::TYPED_URLS, &metadata_batch)); | |
51 EXPECT_EQ(0u, metadata_batch.TakeAllMetadata().size()); | |
52 EXPECT_EQ(ModelTypeState().SerializeAsString(), | |
53 metadata_batch.GetModelTypeState().SerializeAsString()); | |
54 } | |
55 | |
56 TEST_F(TypedURLSyncMetadataDatabaseTest, TypedURLGetAllSyncMetadata) { | |
57 EntityMetadata metadata; | |
58 std::string storage_key = "storage_key"; | |
59 std::string storage_key2 = "storage_key2"; | |
60 metadata.set_sequence_number(1); | |
61 | |
62 EXPECT_TRUE(UpdateSyncMetadata(syncer::TYPED_URLS, storage_key, metadata)); | |
63 | |
64 ModelTypeState model_type_state; | |
65 model_type_state.set_initial_sync_done(true); | |
66 | |
67 EXPECT_TRUE(UpdateModelTypeState(syncer::TYPED_URLS, model_type_state)); | |
68 | |
69 metadata.set_sequence_number(2); | |
70 EXPECT_TRUE(UpdateSyncMetadata(syncer::TYPED_URLS, storage_key2, metadata)); | |
71 | |
72 MetadataBatch metadata_batch; | |
73 EXPECT_TRUE(GetAllSyncMetadata(syncer::TYPED_URLS, &metadata_batch)); | |
74 | |
75 EXPECT_TRUE(metadata_batch.GetModelTypeState().initial_sync_done()); | |
76 | |
77 EntityMetadataMap metadata_records = metadata_batch.TakeAllMetadata(); | |
78 | |
79 EXPECT_EQ(metadata_records.size(), 2u); | |
80 EXPECT_EQ(metadata_records[storage_key].sequence_number(), 1); | |
81 EXPECT_EQ(metadata_records[storage_key2].sequence_number(), 2); | |
82 | |
83 // Now check that a model type state update replaces the old value | |
84 model_type_state.set_initial_sync_done(false); | |
85 EXPECT_TRUE(UpdateModelTypeState(syncer::TYPED_URLS, model_type_state)); | |
86 | |
87 EXPECT_TRUE(GetAllSyncMetadata(syncer::TYPED_URLS, &metadata_batch)); | |
88 EXPECT_FALSE(metadata_batch.GetModelTypeState().initial_sync_done()); | |
89 } | |
90 | |
91 TEST_F(TypedURLSyncMetadataDatabaseTest, TypedURLWriteThenDeleteSyncMetadata) { | |
92 EntityMetadata metadata; | |
93 MetadataBatch metadata_batch; | |
94 std::string storage_key = "storage_key"; | |
95 ModelTypeState model_type_state; | |
96 | |
97 model_type_state.set_initial_sync_done(true); | |
98 | |
99 metadata.set_client_tag_hash("client_hash"); | |
100 | |
101 // Write the data into the store. | |
102 EXPECT_TRUE(UpdateSyncMetadata(syncer::TYPED_URLS, storage_key, metadata)); | |
103 EXPECT_TRUE(UpdateModelTypeState(syncer::TYPED_URLS, model_type_state)); | |
104 // Delete the data we just wrote. | |
105 EXPECT_TRUE(ClearSyncMetadata(syncer::TYPED_URLS, storage_key)); | |
106 // It shouldn't be there any more. | |
107 EXPECT_TRUE(GetAllSyncMetadata(syncer::TYPED_URLS, &metadata_batch)); | |
108 | |
109 EntityMetadataMap metadata_records = metadata_batch.TakeAllMetadata(); | |
110 EXPECT_EQ(metadata_records.size(), 0u); | |
111 | |
112 // Now delete the model type state. | |
113 EXPECT_TRUE(ClearModelTypeState(syncer::TYPED_URLS)); | |
114 EXPECT_TRUE(GetAllSyncMetadata(syncer::TYPED_URLS, &metadata_batch)); | |
115 EXPECT_EQ(ModelTypeState().SerializeAsString(), | |
116 metadata_batch.GetModelTypeState().SerializeAsString()); | |
117 } | |
118 | |
119 TEST_F(TypedURLSyncMetadataDatabaseTest, TypedURLCorruptSyncMetadata) { | |
120 MetadataBatch metadata_batch; | |
121 sql::Statement s(GetDB().GetUniqueStatement( | |
122 "INSERT OR REPLACE INTO typed_url_sync_metadata " | |
123 "(storage_key, value) VALUES(?, ?)")); | |
124 s.BindString(0, "storage_key"); | |
125 s.BindString(1, "unparseable"); | |
126 EXPECT_TRUE(s.Run()); | |
127 | |
128 EXPECT_FALSE(GetAllSyncMetadata(syncer::TYPED_URLS, &metadata_batch)); | |
129 } | |
130 | |
131 TEST_F(TypedURLSyncMetadataDatabaseTest, TypedURLCorruptModelTypeState) { | |
132 MetadataBatch metadata_batch; | |
133 sql::Statement s(GetDB().GetUniqueStatement( | |
134 "INSERT OR REPLACE INTO typed_url_model_type_state " | |
135 "(rowid, value) VALUES(1, ?)")); | |
136 s.BindString(0, "unparseable"); | |
137 EXPECT_TRUE(s.Run()); | |
138 | |
139 EXPECT_FALSE(GetAllSyncMetadata(syncer::TYPED_URLS, &metadata_batch)); | |
140 } | |
141 | |
142 } // namespace history | |
OLD | NEW |