OLD | NEW |
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 "testing/gtest/include/gtest/gtest.h" | 5 #include "testing/gtest/include/gtest/gtest.h" |
6 | 6 |
7 #include <string> | 7 #include <string> |
8 | 8 |
9 #include "base/file_path.h" | 9 #include "base/file_path.h" |
10 #include "base/file_util.h" | 10 #include "base/file_util.h" |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
61 void SetUpVersion74Database(sql::Connection* connection); | 61 void SetUpVersion74Database(sql::Connection* connection); |
62 void SetUpVersion75Database(sql::Connection* connection); | 62 void SetUpVersion75Database(sql::Connection* connection); |
63 void SetUpVersion76Database(sql::Connection* connection); | 63 void SetUpVersion76Database(sql::Connection* connection); |
64 void SetUpVersion77Database(sql::Connection* connection); | 64 void SetUpVersion77Database(sql::Connection* connection); |
65 void SetUpVersion78Database(sql::Connection* connection); | 65 void SetUpVersion78Database(sql::Connection* connection); |
66 void SetUpVersion79Database(sql::Connection* connection); | 66 void SetUpVersion79Database(sql::Connection* connection); |
67 void SetUpVersion80Database(sql::Connection* connection); | 67 void SetUpVersion80Database(sql::Connection* connection); |
68 void SetUpVersion81Database(sql::Connection* connection); | 68 void SetUpVersion81Database(sql::Connection* connection); |
69 void SetUpVersion82Database(sql::Connection* connection); | 69 void SetUpVersion82Database(sql::Connection* connection); |
70 void SetUpVersion83Database(sql::Connection* connection); | 70 void SetUpVersion83Database(sql::Connection* connection); |
| 71 void SetUpVersion84Database(sql::Connection* connection); |
| 72 void SetUpVersion85Database(sql::Connection* connection); |
71 | 73 |
72 void SetUpCurrentDatabaseAndCheckVersion(sql::Connection* connection) { | 74 void SetUpCurrentDatabaseAndCheckVersion(sql::Connection* connection) { |
73 SetUpVersion77Database(connection); // Prepopulates data. | 75 SetUpVersion85Database(connection); // Prepopulates data. |
74 scoped_ptr<TestDirectoryBackingStore> dbs( | 76 scoped_ptr<TestDirectoryBackingStore> dbs( |
75 new TestDirectoryBackingStore(GetUsername(), connection)); | 77 new TestDirectoryBackingStore(GetUsername(), connection)); |
76 | 78 |
77 ASSERT_TRUE(LoadAndIgnoreReturnedData(dbs.get())); | 79 ASSERT_TRUE(LoadAndIgnoreReturnedData(dbs.get())); |
78 ASSERT_FALSE(dbs->needs_column_refresh_); | 80 ASSERT_FALSE(dbs->needs_column_refresh_); |
79 ASSERT_EQ(kCurrentDBVersion, dbs->GetVersion()); | 81 ASSERT_EQ(kCurrentDBVersion, dbs->GetVersion()); |
80 } | 82 } |
81 | 83 |
82 private: | 84 private: |
83 base::ScopedTempDir temp_dir_; | 85 base::ScopedTempDir temp_dir_; |
(...skipping 1877 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1961 s.Reset(true); | 1963 s.Reset(true); |
1962 } | 1964 } |
1963 ASSERT_TRUE(connection->CommitTransaction()); | 1965 ASSERT_TRUE(connection->CommitTransaction()); |
1964 } | 1966 } |
1965 | 1967 |
1966 void MigrationTest::SetUpVersion82Database(sql::Connection* connection) { | 1968 void MigrationTest::SetUpVersion82Database(sql::Connection* connection) { |
1967 ASSERT_TRUE(connection->is_open()); | 1969 ASSERT_TRUE(connection->is_open()); |
1968 ASSERT_TRUE(connection->BeginTransaction()); | 1970 ASSERT_TRUE(connection->BeginTransaction()); |
1969 ASSERT_TRUE(connection->Execute( | 1971 ASSERT_TRUE(connection->Execute( |
1970 "CREATE TABLE share_version (id VARCHAR(128) primary key, data INT);" | 1972 "CREATE TABLE share_version (id VARCHAR(128) primary key, data INT);" |
1971 "INSERT INTO 'share_version' VALUES('nick@chromium.org',81);" | 1973 "INSERT INTO 'share_version' VALUES('nick@chromium.org',82);" |
1972 "CREATE TABLE models (model_id BLOB primary key, progress_marker BLOB, in" | 1974 "CREATE TABLE models (model_id BLOB primary key, progress_marker BLOB, in" |
1973 "itial_sync_ended BOOLEAN default 0, transaction_version BIGINT " | 1975 "itial_sync_ended BOOLEAN default 0, transaction_version BIGINT " |
1974 "default 0);" | 1976 "default 0);" |
1975 "INSERT INTO 'models' VALUES(X'C2881000',X'0888810218B605',1, 1);" | 1977 "INSERT INTO 'models' VALUES(X'C2881000',X'0888810218B605',1, 1);" |
1976 "CREATE TABLE 'metas'(metahandle bigint primary key ON CONFLICT FAIL,base" | 1978 "CREATE TABLE 'metas'(metahandle bigint primary key ON CONFLICT FAIL,base" |
1977 "_version bigint default -1,server_version bigint default 0, " | 1979 "_version bigint default -1,server_version bigint default 0, " |
1978 "local_external_id bigint default 0" | 1980 "local_external_id bigint default 0" |
1979 ",mtime bigint default 0,server_mtime bigint default 0,ctime bigint d" | 1981 ",mtime bigint default 0,server_mtime bigint default 0,ctime bigint d" |
1980 "efault 0,server_ctime bigint default 0,id varchar(255) default 'r',p" | 1982 "efault 0,server_ctime bigint default 0,id varchar(255) default 'r',p" |
1981 "arent_id varchar(255) default 'r',server_parent_id varchar(255) defa" | 1983 "arent_id varchar(255) default 'r',server_parent_id varchar(255) defa" |
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2067 s.Reset(true); | 2069 s.Reset(true); |
2068 } | 2070 } |
2069 ASSERT_TRUE(connection->CommitTransaction()); | 2071 ASSERT_TRUE(connection->CommitTransaction()); |
2070 } | 2072 } |
2071 | 2073 |
2072 void MigrationTest::SetUpVersion83Database(sql::Connection* connection) { | 2074 void MigrationTest::SetUpVersion83Database(sql::Connection* connection) { |
2073 ASSERT_TRUE(connection->is_open()); | 2075 ASSERT_TRUE(connection->is_open()); |
2074 ASSERT_TRUE(connection->BeginTransaction()); | 2076 ASSERT_TRUE(connection->BeginTransaction()); |
2075 ASSERT_TRUE(connection->Execute( | 2077 ASSERT_TRUE(connection->Execute( |
2076 "CREATE TABLE share_version (id VARCHAR(128) primary key, data INT);" | 2078 "CREATE TABLE share_version (id VARCHAR(128) primary key, data INT);" |
2077 "INSERT INTO 'share_version' VALUES('nick@chromium.org',81);" | 2079 "INSERT INTO 'share_version' VALUES('nick@chromium.org',83);" |
2078 "CREATE TABLE models (model_id BLOB primary key, progress_marker BLOB, in" | 2080 "CREATE TABLE models (model_id BLOB primary key, progress_marker BLOB, in" |
2079 "itial_sync_ended BOOLEAN default 0, transaction_version BIGINT " | 2081 "itial_sync_ended BOOLEAN default 0, transaction_version BIGINT " |
2080 "default 0);" | 2082 "default 0);" |
2081 "INSERT INTO 'models' VALUES(X'C2881000',X'0888810218B605',1, 1);" | 2083 "INSERT INTO 'models' VALUES(X'C2881000',X'0888810218B605',1, 1);" |
2082 "CREATE TABLE 'metas'(metahandle bigint primary key ON CONFLICT FAIL,base" | 2084 "CREATE TABLE 'metas'(metahandle bigint primary key ON CONFLICT FAIL,base" |
2083 "_version bigint default -1,server_version bigint default 0, " | 2085 "_version bigint default -1,server_version bigint default 0, " |
2084 "local_external_id bigint default 0" | 2086 "local_external_id bigint default 0" |
2085 ",mtime bigint default 0,server_mtime bigint default 0,ctime bigint d" | 2087 ",mtime bigint default 0,server_mtime bigint default 0,ctime bigint d" |
2086 "efault 0,server_ctime bigint default 0,id varchar(255) default 'r',p" | 2088 "efault 0,server_ctime bigint default 0,id varchar(255) default 'r',p" |
2087 "arent_id varchar(255) default 'r',server_parent_id varchar(255) defa" | 2089 "arent_id varchar(255) default 'r',server_parent_id varchar(255) defa" |
2088 "ult 'r',prev_id varchar(255) default 'r',next_id varchar(255) defaul" | 2090 "ult 'r',prev_id varchar(255) default 'r',next_id varchar(255) defaul" |
2089 "t 'r',is_unsynced bit default 0,is_unapplied_update bit default 0,is" | 2091 "t 'r',is_unsynced bit default 0,is_unapplied_update bit default 0,is" |
2090 "_del bit default 0,is_dir bit default 0,server_is_dir bit default 0," | 2092 "_del bit default 0,is_dir bit default 0,server_is_dir bit default 0," |
2091 "server_is_del bit default 0,non_unique_name varchar,server_non_uniqu" | 2093 "server_is_del bit default 0,non_unique_name varchar,server_non_uniqu" |
2092 "e_name varchar(255),unique_server_tag varchar,unique_client_tag varc" | 2094 "e_name varchar(255),unique_server_tag varchar,unique_client_tag varc" |
2093 "har,specifics blob,server_specifics blob, base_server_specifics BLOB" | 2095 "har,specifics blob,server_specifics blob, base_server_specifics BLOB" |
| 2096 ", server_ordinal_in_parent blob, transaction_version bigint default " |
| 2097 "0);" |
| 2098 "CREATE TABLE 'share_info' (id TEXT primary key, name TEXT, store_birthda" |
| 2099 "y TEXT, db_create_version TEXT, db_create_time INT, next_id INT defa" |
| 2100 "ult -2, cache_guid TEXT , notification_state BLOB, bag_of_chips " |
| 2101 "blob);" |
| 2102 "INSERT INTO 'share_info' VALUES('nick@chromium.org','nick@chromium.org'," |
| 2103 "'c27e9f59-08ca-46f8-b0cc-f16a2ed778bb','Unknown',1263522064," |
| 2104 "-131078,'9010788312004066376x-6609234393368420856x',NULL, NULL);")); |
| 2105 |
| 2106 const char* insert_stmts[V80_ROW_COUNT] = { |
| 2107 "INSERT INTO 'metas' VALUES(1,-1,0,0," META_PROTO_TIMES_VALS(1) ",'r','" |
| 2108 "r','r','r','r',0,0,0,1,0,0,NULL,NULL,NULL,NULL,X'',X'',NULL,?,0);", |
| 2109 "INSERT INTO 'metas' VALUES(2,669,669,4," |
| 2110 META_PROTO_TIMES_VALS(2) ",'s_ID_2','s_ID_9','s_ID_9','s_ID_2','s_ID_" |
| 2111 "2',0,0,1,0,0,1,'Deleted Item','Deleted Item',NULL,NULL,X'C28810220A1" |
| 2112 "6687474703A2F2F7777772E676F6F676C652E636F6D2F12084141534741534741',X" |
| 2113 "'C28810260A17687474703A2F2F7777772E676F6F676C652E636F6D2F32120B41534" |
| 2114 "14447414447414447',NULL,?,0);", |
| 2115 "INSERT INTO 'metas' VALUES(4,681,681,3," |
| 2116 META_PROTO_TIMES_VALS(4) ",'s_ID_4','s_ID_9','s_ID_9','s_ID_4','s_ID_" |
| 2117 "4',0,0,1,0,0,1,'Welcome to Chromium','Welcome to Chromium',NULL,NULL" |
| 2118 ",X'C28810350A31687474703A2F2F7777772E676F6F676C652E636F6D2F6368726F6" |
| 2119 "D652F696E746C2F656E2F77656C636F6D652E68746D6C1200',X'C28810350A31687" |
| 2120 "474703A2F2F7777772E676F6F676C652E636F6D2F6368726F6D652F696E746C2F656" |
| 2121 "E2F77656C636F6D652E68746D6C1200',NULL,?,0);", |
| 2122 "INSERT INTO 'metas' VALUES(5,677,677,7," |
| 2123 META_PROTO_TIMES_VALS(5) ",'s_ID_5','s_ID_9','s_ID_9','s_ID_5','s_ID_" |
| 2124 "5',0,0,1,0,0,1,'Google','Google',NULL,NULL,X'C28810220A16687474703A2" |
| 2125 "F2F7777772E676F6F676C652E636F6D2F12084147415347415347',X'C28810220A1" |
| 2126 "6687474703A2F2F7777772E676F6F676C652E636F6D2F12084147464447415347',N" |
| 2127 "ULL,?,0);", |
| 2128 "INSERT INTO 'metas' VALUES(6,694,694,6," |
| 2129 META_PROTO_TIMES_VALS(6) ",'s_ID_6','s_ID_9','s_ID_9','r','r',0,0,0,1" |
| 2130 ",1,0,'The Internet','The Internet',NULL,NULL,X'C2881000',X'C2881000'" |
| 2131 ",NULL,?,0);", |
| 2132 "INSERT INTO 'metas' VALUES(7,663,663,0," |
| 2133 META_PROTO_TIMES_VALS(7) ",'s_ID_7','r','r','r','r',0,0,0,1,1,0,'Goog" |
| 2134 "le Chrome','Google Chrome','google_chrome',NULL,NULL,NULL,NULL,?,0);" |
| 2135 "", |
| 2136 "INSERT INTO 'metas' VALUES(8,664,664,0," |
| 2137 META_PROTO_TIMES_VALS(8) ",'s_ID_8','s_ID_7','s_ID_7','r','r',0,0,0,1" |
| 2138 ",1,0,'Bookmarks','Bookmarks','google_chrome_bookmarks',NULL,X'C28810" |
| 2139 "00',X'C2881000',NULL,?,0);", |
| 2140 "INSERT INTO 'metas' VALUES(9,665,665,1," |
| 2141 META_PROTO_TIMES_VALS(9) ",'s_ID_9','s_ID_8','s_ID_8','r','s_ID_10',0" |
| 2142 ",0,0,1,1,0,'Bookmark Bar','Bookmark Bar','bookmark_bar',NULL,X'C2881" |
| 2143 "000',X'C2881000',NULL,?,0);", |
| 2144 "INSERT INTO 'metas' VALUES(10,666,666,2," |
| 2145 META_PROTO_TIMES_VALS(10) ",'s_ID_10','s_ID_8','s_ID_8','s_ID_9','r'," |
| 2146 "0,0,0,1,1,0,'Other Bookmarks','Other Bookmarks','other_bookmarks',NU" |
| 2147 "LL,X'C2881000',X'C2881000',NULL,?,0);", |
| 2148 "INSERT INTO 'metas' VALUES(11,683,683,8," |
| 2149 META_PROTO_TIMES_VALS(11) ",'s_ID_11','s_ID_6','s_ID_6','r','s_ID_13'" |
| 2150 ",0,0,0,0,0,0,'Home (The Chromium Projects)','Home (The Chromium Proj" |
| 2151 "ects)',NULL,NULL,X'C28810220A18687474703A2F2F6465762E6368726F6D69756" |
| 2152 "D2E6F72672F1206414741545741',X'C28810290A1D687474703A2F2F6465762E636" |
| 2153 "8726F6D69756D2E6F72672F6F7468657212084146414756415346',NULL,?,0);", |
| 2154 "INSERT INTO 'metas' VALUES(12,685,685,9," |
| 2155 META_PROTO_TIMES_VALS(12) ",'s_ID_12','s_ID_6','s_ID_6','s_ID_13','s_" |
| 2156 "ID_14',0,0,0,1,1,0,'Extra Bookmarks','Extra Bookmarks',NULL,NULL,X'C" |
| 2157 "2881000',X'C2881000',NULL,?,0);", |
| 2158 "INSERT INTO 'metas' VALUES(13,687,687,10," |
| 2159 META_PROTO_TIMES_VALS(13) ",'s_ID_13','s_ID_6','s_ID_6','s_ID_11','s_" |
| 2160 "ID_12',0,0,0,0,0,0,'ICANN | Internet Corporation for Assigned Names " |
| 2161 "and Numbers','ICANN | Internet Corporation for Assigned Names and Nu" |
| 2162 "mbers',NULL,NULL,X'C28810240A15687474703A2F2F7777772E6963616E6E2E636" |
| 2163 "F6D2F120B504E474158463041414646',X'C28810200A15687474703A2F2F7777772" |
| 2164 "E6963616E6E2E636F6D2F120744414146415346',NULL,?,0);", |
| 2165 "INSERT INTO 'metas' VALUES(14,692,692,11," |
| 2166 META_PROTO_TIMES_VALS(14) ",'s_ID_14','s_ID_6','s_ID_6','s_ID_12','r'" |
| 2167 ",0,0,0,0,0,0,'The WebKit Open Source Project','The WebKit Open Sourc" |
| 2168 "e Project',NULL,NULL,X'C288101A0A12687474703A2F2F7765626B69742E6F726" |
| 2169 "72F1204504E4758',X'C288101C0A13687474703A2F2F7765626B69742E6F72672F7" |
| 2170 "81205504E473259',NULL,?,0);" }; |
| 2171 |
| 2172 for (int i = 0; i < V80_ROW_COUNT; i++) { |
| 2173 sql::Statement s(connection->GetUniqueStatement(insert_stmts[i])); |
| 2174 std::string ord = V81_Ordinal(i); |
| 2175 s.BindBlob(0, ord.data(), ord.length()); |
| 2176 ASSERT_TRUE(s.Run()); |
| 2177 s.Reset(true); |
| 2178 } |
| 2179 ASSERT_TRUE(connection->CommitTransaction()); |
| 2180 } |
| 2181 |
| 2182 void MigrationTest::SetUpVersion84Database(sql::Connection* connection) { |
| 2183 ASSERT_TRUE(connection->is_open()); |
| 2184 ASSERT_TRUE(connection->BeginTransaction()); |
| 2185 ASSERT_TRUE(connection->Execute( |
| 2186 "CREATE TABLE share_version (id VARCHAR(128) primary key, data INT);" |
| 2187 "INSERT INTO 'share_version' VALUES('nick@chromium.org',84);" |
| 2188 "CREATE TABLE models (model_id BLOB primary key, progress_marker BLOB, in" |
| 2189 "itial_sync_ended BOOLEAN default 0, transaction_version BIGINT " |
| 2190 "default 0);" |
| 2191 "INSERT INTO 'models' VALUES(X'C2881000',X'0888810218B605',1, 1);" |
| 2192 "CREATE TABLE 'metas'(metahandle bigint primary key ON CONFLICT FAIL,base" |
| 2193 "_version bigint default -1,server_version bigint default 0, " |
| 2194 "local_external_id bigint default 0" |
| 2195 ",mtime bigint default 0,server_mtime bigint default 0,ctime bigint d" |
| 2196 "efault 0,server_ctime bigint default 0,id varchar(255) default 'r',p" |
| 2197 "arent_id varchar(255) default 'r',server_parent_id varchar(255) defa" |
| 2198 "ult 'r',prev_id varchar(255) default 'r',next_id varchar(255) defaul" |
| 2199 "t 'r',is_unsynced bit default 0,is_unapplied_update bit default 0,is" |
| 2200 "_del bit default 0,is_dir bit default 0,server_is_dir bit default 0," |
| 2201 "server_is_del bit default 0,non_unique_name varchar,server_non_uniqu" |
| 2202 "e_name varchar(255),unique_server_tag varchar,unique_client_tag varc" |
| 2203 "har,specifics blob,server_specifics blob, base_server_specifics BLOB" |
| 2204 ", server_ordinal_in_parent blob, transaction_version bigint default " |
| 2205 "0);" |
| 2206 "CREATE TABLE 'deleted_metas'" |
| 2207 "(metahandle bigint primary key ON CONFLICT FAIL,base" |
| 2208 "_version bigint default -1,server_version bigint default 0, " |
| 2209 "local_external_id bigint default 0" |
| 2210 ",mtime bigint default 0,server_mtime bigint default 0,ctime bigint d" |
| 2211 "efault 0,server_ctime bigint default 0,id varchar(255) default 'r',p" |
| 2212 "arent_id varchar(255) default 'r',server_parent_id varchar(255) defa" |
| 2213 "ult 'r',prev_id varchar(255) default 'r',next_id varchar(255) defaul" |
| 2214 "t 'r',is_unsynced bit default 0,is_unapplied_update bit default 0,is" |
| 2215 "_del bit default 0,is_dir bit default 0,server_is_dir bit default 0," |
| 2216 "server_is_del bit default 0,non_unique_name varchar,server_non_uniqu" |
| 2217 "e_name varchar(255),unique_server_tag varchar,unique_client_tag varc" |
| 2218 "har,specifics blob,server_specifics blob, base_server_specifics BLOB" |
2094 ", server_ordinal_in_parent blob, transaction_verion bigint default 0" | 2219 ", server_ordinal_in_parent blob, transaction_verion bigint default 0" |
2095 ");" | 2220 ");" |
2096 "CREATE TABLE 'share_info' (id TEXT primary key, name TEXT, store_birthda" | 2221 "CREATE TABLE 'share_info' (id TEXT primary key, name TEXT, store_birthda" |
| 2222 "y TEXT, db_create_version TEXT, db_create_time INT, next_id INT defa" |
| 2223 "ult -2, cache_guid TEXT , notification_state BLOB, bag_of_chips " |
| 2224 "blob);" |
| 2225 "INSERT INTO 'share_info' VALUES('nick@chromium.org','nick@chromium.org'," |
| 2226 "'c27e9f59-08ca-46f8-b0cc-f16a2ed778bb','Unknown',1263522064," |
| 2227 "-131078,'9010788312004066376x-6609234393368420856x',NULL, NULL);")); |
| 2228 |
| 2229 const char* insert_stmts[V80_ROW_COUNT] = { |
| 2230 "INSERT INTO 'metas' VALUES(1,-1,0,0," META_PROTO_TIMES_VALS(1) ",'r','" |
| 2231 "r','r','r','r',0,0,0,1,0,0,NULL,NULL,NULL,NULL,X'',X'',NULL,?,0);", |
| 2232 "INSERT INTO 'metas' VALUES(2,669,669,4," |
| 2233 META_PROTO_TIMES_VALS(2) ",'s_ID_2','s_ID_9','s_ID_9','s_ID_2','s_ID_" |
| 2234 "2',0,0,1,0,0,1,'Deleted Item','Deleted Item',NULL,NULL,X'C28810220A1" |
| 2235 "6687474703A2F2F7777772E676F6F676C652E636F6D2F12084141534741534741',X" |
| 2236 "'C28810260A17687474703A2F2F7777772E676F6F676C652E636F6D2F32120B41534" |
| 2237 "14447414447414447',NULL,?,0);", |
| 2238 "INSERT INTO 'metas' VALUES(4,681,681,3," |
| 2239 META_PROTO_TIMES_VALS(4) ",'s_ID_4','s_ID_9','s_ID_9','s_ID_4','s_ID_" |
| 2240 "4',0,0,1,0,0,1,'Welcome to Chromium','Welcome to Chromium',NULL,NULL" |
| 2241 ",X'C28810350A31687474703A2F2F7777772E676F6F676C652E636F6D2F6368726F6" |
| 2242 "D652F696E746C2F656E2F77656C636F6D652E68746D6C1200',X'C28810350A31687" |
| 2243 "474703A2F2F7777772E676F6F676C652E636F6D2F6368726F6D652F696E746C2F656" |
| 2244 "E2F77656C636F6D652E68746D6C1200',NULL,?,0);", |
| 2245 "INSERT INTO 'metas' VALUES(5,677,677,7," |
| 2246 META_PROTO_TIMES_VALS(5) ",'s_ID_5','s_ID_9','s_ID_9','s_ID_5','s_ID_" |
| 2247 "5',0,0,1,0,0,1,'Google','Google',NULL,NULL,X'C28810220A16687474703A2" |
| 2248 "F2F7777772E676F6F676C652E636F6D2F12084147415347415347',X'C28810220A1" |
| 2249 "6687474703A2F2F7777772E676F6F676C652E636F6D2F12084147464447415347',N" |
| 2250 "ULL,?,0);", |
| 2251 "INSERT INTO 'metas' VALUES(6,694,694,6," |
| 2252 META_PROTO_TIMES_VALS(6) ",'s_ID_6','s_ID_9','s_ID_9','r','r',0,0,0,1" |
| 2253 ",1,0,'The Internet','The Internet',NULL,NULL,X'C2881000',X'C2881000'" |
| 2254 ",NULL,?,0);", |
| 2255 "INSERT INTO 'metas' VALUES(7,663,663,0," |
| 2256 META_PROTO_TIMES_VALS(7) ",'s_ID_7','r','r','r','r',0,0,0,1,1,0,'Goog" |
| 2257 "le Chrome','Google Chrome','google_chrome',NULL,NULL,NULL,NULL,?,0);" |
| 2258 "", |
| 2259 "INSERT INTO 'metas' VALUES(8,664,664,0," |
| 2260 META_PROTO_TIMES_VALS(8) ",'s_ID_8','s_ID_7','s_ID_7','r','r',0,0,0,1" |
| 2261 ",1,0,'Bookmarks','Bookmarks','google_chrome_bookmarks',NULL,X'C28810" |
| 2262 "00',X'C2881000',NULL,?,0);", |
| 2263 "INSERT INTO 'metas' VALUES(9,665,665,1," |
| 2264 META_PROTO_TIMES_VALS(9) ",'s_ID_9','s_ID_8','s_ID_8','r','s_ID_10',0" |
| 2265 ",0,0,1,1,0,'Bookmark Bar','Bookmark Bar','bookmark_bar',NULL,X'C2881" |
| 2266 "000',X'C2881000',NULL,?,0);", |
| 2267 "INSERT INTO 'metas' VALUES(10,666,666,2," |
| 2268 META_PROTO_TIMES_VALS(10) ",'s_ID_10','s_ID_8','s_ID_8','s_ID_9','r'," |
| 2269 "0,0,0,1,1,0,'Other Bookmarks','Other Bookmarks','other_bookmarks',NU" |
| 2270 "LL,X'C2881000',X'C2881000',NULL,?,0);", |
| 2271 "INSERT INTO 'metas' VALUES(11,683,683,8," |
| 2272 META_PROTO_TIMES_VALS(11) ",'s_ID_11','s_ID_6','s_ID_6','r','s_ID_13'" |
| 2273 ",0,0,0,0,0,0,'Home (The Chromium Projects)','Home (The Chromium Proj" |
| 2274 "ects)',NULL,NULL,X'C28810220A18687474703A2F2F6465762E6368726F6D69756" |
| 2275 "D2E6F72672F1206414741545741',X'C28810290A1D687474703A2F2F6465762E636" |
| 2276 "8726F6D69756D2E6F72672F6F7468657212084146414756415346',NULL,?,0);", |
| 2277 "INSERT INTO 'metas' VALUES(12,685,685,9," |
| 2278 META_PROTO_TIMES_VALS(12) ",'s_ID_12','s_ID_6','s_ID_6','s_ID_13','s_" |
| 2279 "ID_14',0,0,0,1,1,0,'Extra Bookmarks','Extra Bookmarks',NULL,NULL,X'C" |
| 2280 "2881000',X'C2881000',NULL,?,0);", |
| 2281 "INSERT INTO 'metas' VALUES(13,687,687,10," |
| 2282 META_PROTO_TIMES_VALS(13) ",'s_ID_13','s_ID_6','s_ID_6','s_ID_11','s_" |
| 2283 "ID_12',0,0,0,0,0,0,'ICANN | Internet Corporation for Assigned Names " |
| 2284 "and Numbers','ICANN | Internet Corporation for Assigned Names and Nu" |
| 2285 "mbers',NULL,NULL,X'C28810240A15687474703A2F2F7777772E6963616E6E2E636" |
| 2286 "F6D2F120B504E474158463041414646',X'C28810200A15687474703A2F2F7777772" |
| 2287 "E6963616E6E2E636F6D2F120744414146415346',NULL,?,0);", |
| 2288 "INSERT INTO 'metas' VALUES(14,692,692,11," |
| 2289 META_PROTO_TIMES_VALS(14) ",'s_ID_14','s_ID_6','s_ID_6','s_ID_12','r'" |
| 2290 ",0,0,0,0,0,0,'The WebKit Open Source Project','The WebKit Open Sourc" |
| 2291 "e Project',NULL,NULL,X'C288101A0A12687474703A2F2F7765626B69742E6F726" |
| 2292 "72F1204504E4758',X'C288101C0A13687474703A2F2F7765626B69742E6F72672F7" |
| 2293 "81205504E473259',NULL,?,0);" }; |
| 2294 |
| 2295 for (int i = 0; i < V80_ROW_COUNT; i++) { |
| 2296 sql::Statement s(connection->GetUniqueStatement(insert_stmts[i])); |
| 2297 std::string ord = V81_Ordinal(i); |
| 2298 s.BindBlob(0, ord.data(), ord.length()); |
| 2299 ASSERT_TRUE(s.Run()); |
| 2300 s.Reset(true); |
| 2301 } |
| 2302 ASSERT_TRUE(connection->CommitTransaction()); |
| 2303 } |
| 2304 |
| 2305 void MigrationTest::SetUpVersion85Database(sql::Connection* connection) { |
| 2306 ASSERT_TRUE(connection->is_open()); |
| 2307 ASSERT_TRUE(connection->BeginTransaction()); |
| 2308 ASSERT_TRUE(connection->Execute( |
| 2309 "CREATE TABLE share_version (id VARCHAR(128) primary key, data INT);" |
| 2310 "INSERT INTO 'share_version' VALUES('nick@chromium.org',85);" |
| 2311 "CREATE TABLE models (model_id BLOB primary key, progress_marker BLOB, " |
| 2312 "transaction_version BIGINT default 0);" |
| 2313 "INSERT INTO 'models' VALUES(X'C2881000',X'0888810218B605', 1);" |
| 2314 "CREATE TABLE 'metas'(metahandle bigint primary key ON CONFLICT FAIL,base" |
| 2315 "_version bigint default -1,server_version bigint default 0, " |
| 2316 "local_external_id bigint default 0" |
| 2317 ",mtime bigint default 0,server_mtime bigint default 0,ctime bigint d" |
| 2318 "efault 0,server_ctime bigint default 0,id varchar(255) default 'r',p" |
| 2319 "arent_id varchar(255) default 'r',server_parent_id varchar(255) defa" |
| 2320 "ult 'r',prev_id varchar(255) default 'r',next_id varchar(255) defaul" |
| 2321 "t 'r',is_unsynced bit default 0,is_unapplied_update bit default 0,is" |
| 2322 "_del bit default 0,is_dir bit default 0,server_is_dir bit default 0," |
| 2323 "server_is_del bit default 0,non_unique_name varchar,server_non_uniqu" |
| 2324 "e_name varchar(255),unique_server_tag varchar,unique_client_tag varc" |
| 2325 "har,specifics blob,server_specifics blob, base_server_specifics BLOB" |
| 2326 ", server_ordinal_in_parent blob, transaction_version bigint default " |
| 2327 "0);" |
| 2328 "CREATE TABLE 'deleted_metas'" |
| 2329 "(metahandle bigint primary key ON CONFLICT FAIL,base" |
| 2330 "_version bigint default -1,server_version bigint default 0, " |
| 2331 "local_external_id bigint default 0" |
| 2332 ",mtime bigint default 0,server_mtime bigint default 0,ctime bigint d" |
| 2333 "efault 0,server_ctime bigint default 0,id varchar(255) default 'r',p" |
| 2334 "arent_id varchar(255) default 'r',server_parent_id varchar(255) defa" |
| 2335 "ult 'r',prev_id varchar(255) default 'r',next_id varchar(255) defaul" |
| 2336 "t 'r',is_unsynced bit default 0,is_unapplied_update bit default 0,is" |
| 2337 "_del bit default 0,is_dir bit default 0,server_is_dir bit default 0," |
| 2338 "server_is_del bit default 0,non_unique_name varchar,server_non_uniqu" |
| 2339 "e_name varchar(255),unique_server_tag varchar,unique_client_tag varc" |
| 2340 "har,specifics blob,server_specifics blob, base_server_specifics BLOB" |
| 2341 ", server_ordinal_in_parent blob, transaction_verion bigint default 0" |
| 2342 ");" |
| 2343 "CREATE TABLE 'share_info' (id TEXT primary key, name TEXT, store_birthda" |
2097 "y TEXT, db_create_version TEXT, db_create_time INT, next_id INT defa" | 2344 "y TEXT, db_create_version TEXT, db_create_time INT, next_id INT defa" |
2098 "ult -2, cache_guid TEXT , notification_state BLOB, bag_of_chips " | 2345 "ult -2, cache_guid TEXT , notification_state BLOB, bag_of_chips " |
2099 "blob);" | 2346 "blob);" |
2100 "INSERT INTO 'share_info' VALUES('nick@chromium.org','nick@chromium.org'," | 2347 "INSERT INTO 'share_info' VALUES('nick@chromium.org','nick@chromium.org'," |
2101 "'c27e9f59-08ca-46f8-b0cc-f16a2ed778bb','Unknown',1263522064," | 2348 "'c27e9f59-08ca-46f8-b0cc-f16a2ed778bb','Unknown',1263522064," |
2102 "-131078,'9010788312004066376x-6609234393368420856x',NULL, NULL);")); | 2349 "-131078,'9010788312004066376x-6609234393368420856x',NULL, NULL);")); |
2103 | 2350 |
2104 const char* insert_stmts[V80_ROW_COUNT] = { | 2351 const char* insert_stmts[V80_ROW_COUNT] = { |
2105 "INSERT INTO 'metas' VALUES(1,-1,0,0," META_PROTO_TIMES_VALS(1) ",'r','" | 2352 "INSERT INTO 'metas' VALUES(1,-1,0,0," META_PROTO_TIMES_VALS(1) ",'r','" |
2106 "r','r','r','r',0,0,0,1,0,0,NULL,NULL,NULL,NULL,X'',X'',NULL,?,0);", | 2353 "r','r','r','r',0,0,0,1,0,0,NULL,NULL,NULL,NULL,X'',X'',NULL,?,0);", |
(...skipping 518 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2625 ASSERT_FALSE(connection.DoesTableExist("deleted_metas")); | 2872 ASSERT_FALSE(connection.DoesTableExist("deleted_metas")); |
2626 | 2873 |
2627 scoped_ptr<TestDirectoryBackingStore> dbs( | 2874 scoped_ptr<TestDirectoryBackingStore> dbs( |
2628 new TestDirectoryBackingStore(GetUsername(), &connection)); | 2875 new TestDirectoryBackingStore(GetUsername(), &connection)); |
2629 ASSERT_TRUE(dbs->MigrateVersion83To84()); | 2876 ASSERT_TRUE(dbs->MigrateVersion83To84()); |
2630 ASSERT_EQ(84, dbs->GetVersion()); | 2877 ASSERT_EQ(84, dbs->GetVersion()); |
2631 | 2878 |
2632 ASSERT_TRUE(connection.DoesTableExist("deleted_metas")); | 2879 ASSERT_TRUE(connection.DoesTableExist("deleted_metas")); |
2633 } | 2880 } |
2634 | 2881 |
| 2882 TEST_F(DirectoryBackingStoreTest, MigrateVersion84To85) { |
| 2883 sql::Connection connection; |
| 2884 ASSERT_TRUE(connection.OpenInMemory()); |
| 2885 SetUpVersion84Database(&connection); |
| 2886 ASSERT_TRUE(connection.DoesColumnExist("models", "initial_sync_ended")); |
| 2887 |
| 2888 scoped_ptr<TestDirectoryBackingStore> dbs( |
| 2889 new TestDirectoryBackingStore(GetUsername(), &connection)); |
| 2890 ASSERT_TRUE(dbs->MigrateVersion84To85()); |
| 2891 ASSERT_EQ(85, dbs->GetVersion()); |
| 2892 ASSERT_FALSE(connection.DoesColumnExist("models", "initial_sync_ended")); |
| 2893 } |
| 2894 |
2635 TEST_P(MigrationTest, ToCurrentVersion) { | 2895 TEST_P(MigrationTest, ToCurrentVersion) { |
2636 sql::Connection connection; | 2896 sql::Connection connection; |
2637 ASSERT_TRUE(connection.OpenInMemory()); | 2897 ASSERT_TRUE(connection.OpenInMemory()); |
2638 switch (GetParam()) { | 2898 switch (GetParam()) { |
2639 case 67: | 2899 case 67: |
2640 SetUpVersion67Database(&connection); | 2900 SetUpVersion67Database(&connection); |
2641 break; | 2901 break; |
2642 case 68: | 2902 case 68: |
2643 SetUpVersion68Database(&connection); | 2903 SetUpVersion68Database(&connection); |
2644 break; | 2904 break; |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2680 break; | 2940 break; |
2681 case 81: | 2941 case 81: |
2682 SetUpVersion81Database(&connection); | 2942 SetUpVersion81Database(&connection); |
2683 break; | 2943 break; |
2684 case 82: | 2944 case 82: |
2685 SetUpVersion82Database(&connection); | 2945 SetUpVersion82Database(&connection); |
2686 break; | 2946 break; |
2687 case 83: | 2947 case 83: |
2688 SetUpVersion83Database(&connection); | 2948 SetUpVersion83Database(&connection); |
2689 break; | 2949 break; |
| 2950 case 84: |
| 2951 SetUpVersion84Database(&connection); |
| 2952 break; |
2690 default: | 2953 default: |
2691 // If you see this error, it may mean that you've increased the | 2954 // If you see this error, it may mean that you've increased the |
2692 // database version number but you haven't finished adding unit tests | 2955 // database version number but you haven't finished adding unit tests |
2693 // for the database migration code. You need to need to supply a | 2956 // for the database migration code. You need to need to supply a |
2694 // SetUpVersionXXDatabase function with a dump of the test database | 2957 // SetUpVersionXXDatabase function with a dump of the test database |
2695 // at the old schema. Here's one way to do that: | 2958 // at the old schema. Here's one way to do that: |
2696 // 1. Start on a clean tree (with none of your pending schema changes). | 2959 // 1. Start on a clean tree (with none of your pending schema changes). |
2697 // 2. Set a breakpoint in this function and run the unit test. | 2960 // 2. Set a breakpoint in this function and run the unit test. |
2698 // 3. Allow this test to run to completion (step out of the call), | 2961 // 3. Allow this test to run to completion (step out of the call), |
2699 // without allowing ~MigrationTest to execute. | 2962 // without allowing ~MigrationTest to execute. |
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2765 | 3028 |
2766 // Column added in version 78. | 3029 // Column added in version 78. |
2767 ASSERT_TRUE(connection.DoesColumnExist("metas", "base_server_specifics")); | 3030 ASSERT_TRUE(connection.DoesColumnExist("metas", "base_server_specifics")); |
2768 | 3031 |
2769 // Column added in version 82. | 3032 // Column added in version 82. |
2770 ASSERT_TRUE(connection.DoesColumnExist("models", "transaction_version")); | 3033 ASSERT_TRUE(connection.DoesColumnExist("models", "transaction_version")); |
2771 | 3034 |
2772 // Column added in version 83. | 3035 // Column added in version 83. |
2773 ASSERT_TRUE(connection.DoesColumnExist("metas", "transaction_version")); | 3036 ASSERT_TRUE(connection.DoesColumnExist("metas", "transaction_version")); |
2774 | 3037 |
| 3038 // Table added in version 84. |
| 3039 ASSERT_TRUE(connection.DoesTableExist("deleted_metas")); |
| 3040 |
| 3041 // Column removed in version 85. |
| 3042 ASSERT_FALSE(connection.DoesColumnExist("models", "initial_sync_ended")); |
| 3043 |
2775 // Check download_progress state (v75 migration) | 3044 // Check download_progress state (v75 migration) |
2776 ASSERT_EQ(694, | 3045 ASSERT_EQ(694, |
2777 dir_info.kernel_info.download_progress[BOOKMARKS] | 3046 dir_info.kernel_info.download_progress[BOOKMARKS] |
2778 .timestamp_token_for_migration()); | 3047 .timestamp_token_for_migration()); |
2779 ASSERT_FALSE( | 3048 ASSERT_FALSE( |
2780 dir_info.kernel_info.download_progress[BOOKMARKS] | 3049 dir_info.kernel_info.download_progress[BOOKMARKS] |
2781 .has_token()); | 3050 .has_token()); |
2782 ASSERT_EQ(32904, | 3051 ASSERT_EQ(32904, |
2783 dir_info.kernel_info.download_progress[BOOKMARKS] | 3052 dir_info.kernel_info.download_progress[BOOKMARKS] |
2784 .data_type_id()); | 3053 .data_type_id()); |
(...skipping 238 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3023 const std::string& guid2 = TestDirectoryBackingStore::GenerateCacheGUID(); | 3292 const std::string& guid2 = TestDirectoryBackingStore::GenerateCacheGUID(); |
3024 EXPECT_EQ(24U, guid1.size()); | 3293 EXPECT_EQ(24U, guid1.size()); |
3025 EXPECT_EQ(24U, guid2.size()); | 3294 EXPECT_EQ(24U, guid2.size()); |
3026 // In theory this test can fail, but it won't before the universe | 3295 // In theory this test can fail, but it won't before the universe |
3027 // dies of heat death. | 3296 // dies of heat death. |
3028 EXPECT_NE(guid1, guid2); | 3297 EXPECT_NE(guid1, guid2); |
3029 } | 3298 } |
3030 | 3299 |
3031 } // namespace syncable | 3300 } // namespace syncable |
3032 } // namespace syncer | 3301 } // namespace syncer |
OLD | NEW |