OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 <string> | 5 #include <string> |
6 | 6 |
7 #include "app/sql/statement.h" | 7 #include "app/sql/statement.h" |
8 #include "base/file_util.h" | 8 #include "base/file_util.h" |
9 #include "base/scoped_temp_dir.h" | 9 #include "base/scoped_temp_dir.h" |
10 #include "base/stl_util-inl.h" | 10 #include "base/stl_util-inl.h" |
(...skipping 23 matching lines...) Expand all Loading... |
34 int* unique_id, | 34 int* unique_id, |
35 int64* date_modified) { | 35 int64* date_modified) { |
36 DCHECK(profile); | 36 DCHECK(profile); |
37 DCHECK(label); | 37 DCHECK(label); |
38 DCHECK(unique_id); | 38 DCHECK(unique_id); |
39 DCHECK(date_modified); | 39 DCHECK(date_modified); |
40 *label = s.ColumnString16(0); | 40 *label = s.ColumnString16(0); |
41 *unique_id = s.ColumnInt(1); | 41 *unique_id = s.ColumnInt(1); |
42 profile->SetInfo(NAME_FIRST, s.ColumnString16(2)); | 42 profile->SetInfo(NAME_FIRST, s.ColumnString16(2)); |
43 profile->SetInfo(NAME_MIDDLE, s.ColumnString16(3)); | 43 profile->SetInfo(NAME_MIDDLE, s.ColumnString16(3)); |
44 profile->SetInfo(NAME_LAST,s.ColumnString16(4)); | 44 profile->SetInfo(NAME_LAST, s.ColumnString16(4)); |
45 profile->SetInfo(EMAIL_ADDRESS, s.ColumnString16(5)); | 45 profile->SetInfo(EMAIL_ADDRESS, s.ColumnString16(5)); |
46 profile->SetInfo(COMPANY_NAME, s.ColumnString16(6)); | 46 profile->SetInfo(COMPANY_NAME, s.ColumnString16(6)); |
47 profile->SetInfo(ADDRESS_HOME_LINE1, s.ColumnString16(7)); | 47 profile->SetInfo(ADDRESS_HOME_LINE1, s.ColumnString16(7)); |
48 profile->SetInfo(ADDRESS_HOME_LINE2, s.ColumnString16(8)); | 48 profile->SetInfo(ADDRESS_HOME_LINE2, s.ColumnString16(8)); |
49 profile->SetInfo(ADDRESS_HOME_CITY, s.ColumnString16(9)); | 49 profile->SetInfo(ADDRESS_HOME_CITY, s.ColumnString16(9)); |
50 profile->SetInfo(ADDRESS_HOME_STATE, s.ColumnString16(10)); | 50 profile->SetInfo(ADDRESS_HOME_STATE, s.ColumnString16(10)); |
51 profile->SetInfo(ADDRESS_HOME_ZIP, s.ColumnString16(11)); | 51 profile->SetInfo(ADDRESS_HOME_ZIP, s.ColumnString16(11)); |
52 profile->SetInfo(ADDRESS_HOME_COUNTRY, s.ColumnString16(12)); | 52 profile->SetInfo(ADDRESS_HOME_COUNTRY, s.ColumnString16(12)); |
53 profile->SetInfo(PHONE_HOME_WHOLE_NUMBER, s.ColumnString16(13)); | 53 profile->SetInfo(PHONE_HOME_WHOLE_NUMBER, s.ColumnString16(13)); |
54 profile->SetInfo(PHONE_FAX_WHOLE_NUMBER, s.ColumnString16(14)); | 54 profile->SetInfo(PHONE_FAX_WHOLE_NUMBER, s.ColumnString16(14)); |
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
179 | 179 |
180 // Assertion testing for migrating from version 27 and 28. | 180 // Assertion testing for migrating from version 27 and 28. |
181 void MigrateVersion28Assertions(); | 181 void MigrateVersion28Assertions(); |
182 | 182 |
183 private: | 183 private: |
184 ScopedTempDir temp_dir_; | 184 ScopedTempDir temp_dir_; |
185 | 185 |
186 DISALLOW_COPY_AND_ASSIGN(WebDatabaseMigrationTest); | 186 DISALLOW_COPY_AND_ASSIGN(WebDatabaseMigrationTest); |
187 }; | 187 }; |
188 | 188 |
189 const int WebDatabaseMigrationTest::kCurrentTestedVersionNumber = 37; | 189 const int WebDatabaseMigrationTest::kCurrentTestedVersionNumber = 38; |
190 | 190 |
191 void WebDatabaseMigrationTest::LoadDatabase(const FilePath::StringType& file) { | 191 void WebDatabaseMigrationTest::LoadDatabase(const FilePath::StringType& file) { |
192 std::string contents; | 192 std::string contents; |
193 ASSERT_TRUE(GetWebDatabaseData(FilePath(file), &contents)); | 193 ASSERT_TRUE(GetWebDatabaseData(FilePath(file), &contents)); |
194 | 194 |
195 sql::Connection connection; | 195 sql::Connection connection; |
196 ASSERT_TRUE(connection.Open(GetDatabasePath())); | 196 ASSERT_TRUE(connection.Open(GetDatabasePath())); |
197 ASSERT_TRUE(connection.Execute(contents.data())); | 197 ASSERT_TRUE(connection.Execute(contents.data())); |
198 } | 198 } |
199 | 199 |
(...skipping 247 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
447 | 447 |
448 // Verify post-conditions. These are expectations for current version of the | 448 // Verify post-conditions. These are expectations for current version of the |
449 // database. | 449 // database. |
450 { | 450 { |
451 sql::Connection connection; | 451 sql::Connection connection; |
452 ASSERT_TRUE(connection.Open(GetDatabasePath())); | 452 ASSERT_TRUE(connection.Open(GetDatabasePath())); |
453 | 453 |
454 // Check version. | 454 // Check version. |
455 EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection)); | 455 EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection)); |
456 | 456 |
457 // |keywords| |logo_id| column should have been added. | 457 // |keywords| |created_by_policy| column should have been added. |
458 EXPECT_TRUE(connection.DoesColumnExist("keywords", "id")); | 458 EXPECT_TRUE(connection.DoesColumnExist("keywords", "id")); |
459 EXPECT_TRUE(connection.DoesColumnExist("keywords", "created_by_policy")); | 459 EXPECT_TRUE(connection.DoesColumnExist("keywords", "created_by_policy")); |
460 } | 460 } |
461 } | 461 } |
462 | 462 |
463 // Tests that the credit_cards.billing_address column is changed from a string | 463 // Tests that the credit_cards.billing_address column is changed from a string |
464 // to an int whilst preserving the associated billing address. This version of | 464 // to an int whilst preserving the associated billing address. This version of |
465 // the test makes sure a stored label is converted to an ID. | 465 // the test makes sure a stored label is converted to an ID. |
466 TEST_F(WebDatabaseMigrationTest, MigrateVersion26ToCurrentStringLabels) { | 466 TEST_F(WebDatabaseMigrationTest, MigrateVersion26ToCurrentStringLabels) { |
467 // This schema is taken from a build prior to the change of column type for | 467 // This schema is taken from a build prior to the change of column type for |
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
580 | 580 |
581 // Verify post-conditions. These are expectations for current version of the | 581 // Verify post-conditions. These are expectations for current version of the |
582 // database. | 582 // database. |
583 { | 583 { |
584 sql::Connection connection; | 584 sql::Connection connection; |
585 ASSERT_TRUE(connection.Open(GetDatabasePath())); | 585 ASSERT_TRUE(connection.Open(GetDatabasePath())); |
586 | 586 |
587 // Check version. | 587 // Check version. |
588 EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection)); | 588 EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection)); |
589 | 589 |
590 // |keywords| |logo_id| column should have been added. | 590 // |keywords| |created_by_policy| column should have been added. |
591 EXPECT_TRUE(connection.DoesColumnExist("keywords", "id")); | 591 EXPECT_TRUE(connection.DoesColumnExist("keywords", "id")); |
592 EXPECT_TRUE(connection.DoesColumnExist("keywords", "created_by_policy")); | 592 EXPECT_TRUE(connection.DoesColumnExist("keywords", "created_by_policy")); |
593 EXPECT_FALSE(connection.DoesColumnExist("credit_cards", "billing_address")); | 593 EXPECT_FALSE(connection.DoesColumnExist("credit_cards", "billing_address")); |
594 | 594 |
595 // Verify the credit card data is converted. | 595 // Verify the credit card data is converted. |
596 sql::Statement s(connection.GetUniqueStatement( | 596 sql::Statement s(connection.GetUniqueStatement( |
597 "SELECT guid, name_on_card, expiration_month, expiration_year, " | 597 "SELECT guid, name_on_card, expiration_month, expiration_year, " |
598 "card_number_encrypted, date_modified " | 598 "card_number_encrypted, date_modified " |
599 "FROM credit_cards")); | 599 "FROM credit_cards")); |
600 ASSERT_TRUE(s.Step()); | 600 ASSERT_TRUE(s.Step()); |
601 EXPECT_EQ("Jack", s.ColumnString(1)); | 601 EXPECT_EQ("Jack", s.ColumnString(1)); |
602 EXPECT_EQ(2, s.ColumnInt(2)); | 602 EXPECT_EQ(2, s.ColumnInt(2)); |
603 EXPECT_EQ(2012, s.ColumnInt(3)); | 603 EXPECT_EQ(2012, s.ColumnInt(3)); |
604 // Column 5 is encrypted credit card number blob. | 604 // Column 5 is encrypted credit card number blo b. |
605 // Column 6 is date_modified. | 605 // Column 6 is date_modified. |
606 } | 606 } |
607 } | 607 } |
608 | 608 |
609 // Tests migration from 27->current. This test is now the same as 28->current | 609 // Tests migration from 27->current. This test is now the same as 28->current |
610 // as the column added in 28 was nuked in 29. | 610 // as the column added in 28 was nuked in 29. |
611 TEST_F(WebDatabaseMigrationTest, MigrateVersion27ToCurrent) { | 611 TEST_F(WebDatabaseMigrationTest, MigrateVersion27ToCurrent) { |
612 // Initialize the database. | 612 // Initialize the database. |
613 ASSERT_NO_FATAL_FAILURE(LoadDatabase(FILE_PATH_LITERAL("version_27.sql"))); | 613 ASSERT_NO_FATAL_FAILURE(LoadDatabase(FILE_PATH_LITERAL("version_27.sql"))); |
614 | 614 |
(...skipping 547 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1162 | 1162 |
1163 // John Doe phone. | 1163 // John Doe phone. |
1164 ASSERT_TRUE(s4.Step()); | 1164 ASSERT_TRUE(s4.Step()); |
1165 EXPECT_EQ("00580526-FF81-EE2A-0546-1AC593A32E2F", s4.ColumnString(0)); | 1165 EXPECT_EQ("00580526-FF81-EE2A-0546-1AC593A32E2F", s4.ColumnString(0)); |
1166 EXPECT_EQ(0, s4.ColumnInt(1)); // 0 means phone. | 1166 EXPECT_EQ(0, s4.ColumnInt(1)); // 0 means phone. |
1167 EXPECT_EQ(ASCIIToUTF16("4151112222"), s4.ColumnString16(2)); | 1167 EXPECT_EQ(ASCIIToUTF16("4151112222"), s4.ColumnString16(2)); |
1168 | 1168 |
1169 // John Doe fax. | 1169 // John Doe fax. |
1170 ASSERT_TRUE(s4.Step()); | 1170 ASSERT_TRUE(s4.Step()); |
1171 EXPECT_EQ("00580526-FF81-EE2A-0546-1AC593A32E2F", s4.ColumnString(0)); | 1171 EXPECT_EQ("00580526-FF81-EE2A-0546-1AC593A32E2F", s4.ColumnString(0)); |
1172 EXPECT_EQ(1, s4.ColumnInt(1)); // 1 means phone. | 1172 EXPECT_EQ(1, s4.ColumnInt(1)); // 1 means phone. |
1173 EXPECT_EQ(ASCIIToUTF16("4153334444"), s4.ColumnString16(2)); | 1173 EXPECT_EQ(ASCIIToUTF16("4153334444"), s4.ColumnString16(2)); |
1174 | 1174 |
1175 // John P. Doe phone. | 1175 // John P. Doe phone. |
1176 // Gets culled during migration from 35 to 37 due to merging of John Doe and | 1176 // Gets culled during migration from 35 to 37 due to merging of John Doe and |
1177 // John P. Doe addresses. | 1177 // John P. Doe addresses. |
1178 | 1178 |
1179 // John P. Doe fax. | 1179 // John P. Doe fax. |
1180 // Gets culled during migration from 35 to 37 due to merging of John Doe and | 1180 // Gets culled during migration from 35 to 37 due to merging of John Doe and |
1181 // John P. Doe addresses. | 1181 // John P. Doe addresses. |
1182 | 1182 |
1183 // 2 Main Street phone. | 1183 // 2 Main Street phone. |
1184 ASSERT_TRUE(s4.Step()); | 1184 ASSERT_TRUE(s4.Step()); |
1185 EXPECT_EQ("4C74A9D8-7EEE-423E-F9C2-E7FA70ED1396", s4.ColumnString(0)); | 1185 EXPECT_EQ("4C74A9D8-7EEE-423E-F9C2-E7FA70ED1396", s4.ColumnString(0)); |
1186 EXPECT_EQ(0, s4.ColumnInt(1)); // 0 means phone. | 1186 EXPECT_EQ(0, s4.ColumnInt(1)); // 0 means phone. |
1187 EXPECT_EQ(ASCIIToUTF16(""), s4.ColumnString16(2)); | 1187 EXPECT_EQ(ASCIIToUTF16(""), s4.ColumnString16(2)); |
1188 | 1188 |
1189 // 2 Main Street fax. | 1189 // 2 Main Street fax. |
1190 ASSERT_TRUE(s4.Step()); | 1190 ASSERT_TRUE(s4.Step()); |
1191 EXPECT_EQ("4C74A9D8-7EEE-423E-F9C2-E7FA70ED1396", s4.ColumnString(0)); | 1191 EXPECT_EQ("4C74A9D8-7EEE-423E-F9C2-E7FA70ED1396", s4.ColumnString(0)); |
1192 EXPECT_EQ(1, s4.ColumnInt(1)); // 1 means fax. | 1192 EXPECT_EQ(1, s4.ColumnInt(1)); // 1 means fax. |
1193 EXPECT_EQ(ASCIIToUTF16(""), s4.ColumnString16(2)); | 1193 EXPECT_EQ(ASCIIToUTF16(""), s4.ColumnString16(2)); |
1194 | 1194 |
1195 // 2 Main St phone. | 1195 // 2 Main St phone. |
1196 ASSERT_TRUE(s4.Step()); | 1196 ASSERT_TRUE(s4.Step()); |
1197 EXPECT_EQ("722DF5C4-F74A-294A-46F0-31FFDED0D635", s4.ColumnString(0)); | 1197 EXPECT_EQ("722DF5C4-F74A-294A-46F0-31FFDED0D635", s4.ColumnString(0)); |
1198 EXPECT_EQ(0, s4.ColumnInt(1)); // 0 means phone. | 1198 EXPECT_EQ(0, s4.ColumnInt(1)); // 0 means phone. |
1199 EXPECT_EQ(ASCIIToUTF16(""), s4.ColumnString16(2)); | 1199 EXPECT_EQ(ASCIIToUTF16(""), s4.ColumnString16(2)); |
1200 | 1200 |
1201 // 2 Main St fax. | 1201 // 2 Main St fax. |
1202 ASSERT_TRUE(s4.Step()); | 1202 ASSERT_TRUE(s4.Step()); |
1203 EXPECT_EQ("722DF5C4-F74A-294A-46F0-31FFDED0D635", s4.ColumnString(0)); | 1203 EXPECT_EQ("722DF5C4-F74A-294A-46F0-31FFDED0D635", s4.ColumnString(0)); |
1204 EXPECT_EQ(1, s4.ColumnInt(1)); // 1 means fax. | 1204 EXPECT_EQ(1, s4.ColumnInt(1)); // 1 means fax. |
1205 EXPECT_EQ(ASCIIToUTF16(""), s4.ColumnString16(2)); | 1205 EXPECT_EQ(ASCIIToUTF16(""), s4.ColumnString16(2)); |
1206 | 1206 |
1207 // Note no phone or fax for Alfred E Newman. | 1207 // Note no phone or fax for Alfred E Newman. |
1208 | 1208 |
1209 // 3 Main St phone. | 1209 // 3 Main St phone. |
1210 ASSERT_TRUE(s4.Step()); | 1210 ASSERT_TRUE(s4.Step()); |
1211 EXPECT_EQ("9E5FE298-62C7-83DF-6293-381BC589183F", s4.ColumnString(0)); | 1211 EXPECT_EQ("9E5FE298-62C7-83DF-6293-381BC589183F", s4.ColumnString(0)); |
1212 EXPECT_EQ(0, s4.ColumnInt(1)); // 0 means phone. | 1212 EXPECT_EQ(0, s4.ColumnInt(1)); // 0 means phone. |
1213 EXPECT_EQ(ASCIIToUTF16(""), s4.ColumnString16(2)); | 1213 EXPECT_EQ(ASCIIToUTF16(""), s4.ColumnString16(2)); |
1214 | 1214 |
1215 // 2 Main St fax. | 1215 // 2 Main St fax. |
1216 ASSERT_TRUE(s4.Step()); | 1216 ASSERT_TRUE(s4.Step()); |
1217 EXPECT_EQ("9E5FE298-62C7-83DF-6293-381BC589183F", s4.ColumnString(0)); | 1217 EXPECT_EQ("9E5FE298-62C7-83DF-6293-381BC589183F", s4.ColumnString(0)); |
1218 EXPECT_EQ(1, s4.ColumnInt(1)); // 1 means fax. | 1218 EXPECT_EQ(1, s4.ColumnInt(1)); // 1 means fax. |
1219 EXPECT_EQ(ASCIIToUTF16(""), s4.ColumnString16(2)); | 1219 EXPECT_EQ(ASCIIToUTF16(""), s4.ColumnString16(2)); |
1220 | 1220 |
1221 // Should be all. | 1221 // Should be all. |
1222 EXPECT_FALSE(s4.Step()); | 1222 EXPECT_FALSE(s4.Step()); |
1223 } | 1223 } |
1224 } | 1224 } |
1225 | 1225 |
1226 // Adds a column for the autofill profile's country code. | 1226 // Adds a column for the autofill profile's country code. |
1227 TEST_F(WebDatabaseMigrationTest, MigrateVersion33ToCurrent) { | 1227 TEST_F(WebDatabaseMigrationTest, MigrateVersion33ToCurrent) { |
1228 // Initialize the database. | 1228 // Initialize the database. |
(...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1417 ASSERT_TRUE(s2.Step()); | 1417 ASSERT_TRUE(s2.Step()); |
1418 EXPECT_EQ("00000000-0000-0000-0000-000000000005", s2.ColumnString(0)); | 1418 EXPECT_EQ("00000000-0000-0000-0000-000000000005", s2.ColumnString(0)); |
1419 | 1419 |
1420 ASSERT_TRUE(s2.Step()); | 1420 ASSERT_TRUE(s2.Step()); |
1421 EXPECT_EQ("00000000-0000-0000-0000-000000000006", s2.ColumnString(0)); | 1421 EXPECT_EQ("00000000-0000-0000-0000-000000000006", s2.ColumnString(0)); |
1422 | 1422 |
1423 // That should be it. | 1423 // That should be it. |
1424 ASSERT_FALSE(s2.Step()); | 1424 ASSERT_FALSE(s2.Step()); |
1425 } | 1425 } |
1426 } | 1426 } |
| 1427 |
| 1428 // Tests that the |keywords| |last_modified| column gets added to the schema for |
| 1429 // a version 37 database. |
| 1430 TEST_F(WebDatabaseMigrationTest, MigrateVersion37ToCurrent) { |
| 1431 // This schema is taken from a build prior to the addition of the |keywords| |
| 1432 // |last_modified| column. |
| 1433 ASSERT_NO_FATAL_FAILURE(LoadDatabase(FILE_PATH_LITERAL("version_37.sql"))); |
| 1434 |
| 1435 // Verify pre-conditions. These are expectations for version 37 of the |
| 1436 // database. |
| 1437 { |
| 1438 sql::Connection connection; |
| 1439 ASSERT_TRUE(connection.Open(GetDatabasePath())); |
| 1440 |
| 1441 // Columns existing and not existing before current version. |
| 1442 ASSERT_TRUE(connection.DoesColumnExist("keywords", "id")); |
| 1443 ASSERT_FALSE(connection.DoesColumnExist("keywords", "last_modified")); |
| 1444 } |
| 1445 |
| 1446 // Load the database via the WebDatabase class and migrate the database to |
| 1447 // the current version. |
| 1448 { |
| 1449 WebDatabase db; |
| 1450 ASSERT_EQ(sql::INIT_OK, db.Init(GetDatabasePath())); |
| 1451 } |
| 1452 |
| 1453 // Verify post-conditions. These are expectations for current version of the |
| 1454 // database. |
| 1455 { |
| 1456 sql::Connection connection; |
| 1457 ASSERT_TRUE(connection.Open(GetDatabasePath())); |
| 1458 |
| 1459 // Check version. |
| 1460 EXPECT_EQ(kCurrentTestedVersionNumber, VersionFromConnection(&connection)); |
| 1461 |
| 1462 // |keywords| |last_modified| column should have been added. |
| 1463 EXPECT_TRUE(connection.DoesColumnExist("keywords", "id")); |
| 1464 EXPECT_TRUE(connection.DoesColumnExist("keywords", "last_modified")); |
| 1465 } |
| 1466 } |
OLD | NEW |