1ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved.
2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be
3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file.
4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
5c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "testing/gtest/include/gtest/gtest.h"
6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
7c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include <string>
8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "app/sql/connection.h"
10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "app/sql/statement.h"
11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/file_path.h"
12c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/file_util.h"
13ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/memory/scoped_ptr.h"
14ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/memory/scoped_temp_dir.h"
15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/stl_util-inl.h"
163345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "base/string_number_conversions.h"
17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/sync/protocol/bookmark_specifics.pb.h"
18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/sync/protocol/sync.pb.h"
19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/sync/syncable/directory_backing_store.h"
20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/sync/syncable/directory_manager.h"
21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/sync/syncable/syncable-inl.h"
22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/sync/syncable/syncable.h"
23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "testing/gtest/include/gtest/gtest-param-test.h"
24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochnamespace syncable {
26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochextern const int32 kCurrentDBVersion;
28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass MigrationTest : public testing::TestWithParam<int> {
30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public:
31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void SetUp() {
32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    ASSERT_TRUE(temp_dir_.CreateUniqueTempDir());
33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch protected:
36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  std::string GetUsername() {
37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    return "nick@chromium.org";
38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  FilePath GetDatabasePath() {
41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    return temp_dir_.path().Append(
42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch        DirectoryManager::GetSyncDataDatabaseFilename());
43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void SetUpVersion67Database();
45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void SetUpVersion68Database();
46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void SetUpVersion69Database();
47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void SetUpVersion70Database();
48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void SetUpVersion71Database();
49731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  void SetUpVersion72Database();
5021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  void SetUpVersion73Database();
5172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  void SetUpVersion74Database();
52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void SetUpCurrentDatabaseAndCheckVersion() {
54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    SetUpVersion70Database();  // Prepopulates data.
55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    scoped_ptr<DirectoryBackingStore> dbs(
56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch        new DirectoryBackingStore(GetUsername(), GetDatabasePath()));
57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    dbs->BeginLoad();
59c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    ASSERT_EQ(OPENED, dbs->InitializeTables());
60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    ASSERT_FALSE(dbs->needs_column_refresh_);
61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    ASSERT_EQ(kCurrentDBVersion, dbs->GetVersion());
62c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    dbs->EndLoad();
63c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
64c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
65c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private:
66c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ScopedTempDir temp_dir_;
67c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch};
68c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
69c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass DirectoryBackingStoreTest : public MigrationTest {};
70c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
71c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid MigrationTest::SetUpVersion67Database() {
72c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // This is a version 67 database dump whose contents were backformed from
73c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // the contents of the version 68 database dump (the v68 migration was
74c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // actually written first).
75c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  sql::Connection connection;
76c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_TRUE(connection.Open(GetDatabasePath()));
77c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_TRUE(connection.BeginTransaction());
78c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_TRUE(connection.Execute(
79c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      "CREATE TABLE extended_attributes(metahandle bigint, key varchar(127), "
80c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "value blob, PRIMARY KEY(metahandle, key) ON CONFLICT REPLACE);"
81c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      "CREATE TABLE metas (metahandle bigint primary key ON CONFLICT FAIL,"
82c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "base_version bigint default -1,server_version bigint default 0,"
83c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "mtime bigint default 0,server_mtime bigint default 0,"
84c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "ctime bigint default 0,server_ctime bigint default 0,"
85c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "server_position_in_parent bigint default 0,"
86c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "local_external_id bigint default 0,id varchar(255) default 'r',"
87c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "parent_id varchar(255) default 'r',"
88c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "server_parent_id varchar(255) default 'r',"
89c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "prev_id varchar(255) default 'r',next_id varchar(255) default 'r',"
90c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "is_unsynced bit default 0,is_unapplied_update bit default 0,"
91c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "is_del bit default 0,is_dir bit default 0,"
92c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "is_bookmark_object bit default 0,server_is_dir bit default 0,"
93c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "server_is_del bit default 0,server_is_bookmark_object bit default 0,"
94c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "name varchar(255), "  /* COLLATE PATHNAME, */
95c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "unsanitized_name varchar(255)," /* COLLATE PATHNAME, */
96c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "non_unique_name varchar,"
97c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "server_name varchar(255),"  /* COLLATE PATHNAME */
98c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "server_non_unique_name varchar,"
99c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "bookmark_url varchar,server_bookmark_url varchar,"
100c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "singleton_tag varchar,bookmark_favicon blob,"
101c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "server_bookmark_favicon blob);"
102c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      "INSERT INTO metas VALUES(1,-1,0,129079956640320000,0,"
103c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "129079956640320000,0,0,0,'r','r','r','r','r',0,0,0,1,0,0,0,0,NULL,"
104c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);"
105c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      "INSERT INTO metas VALUES(2,669,669,128976886618480000,"
106c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "128976886618480000,128976886618480000,128976886618480000,-2097152,"
107c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "4,'s_ID_2','s_ID_9','s_ID_9','s_ID_2','s_ID_2',0,0,1,0,1,0,1,1,"
108c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'Deleted Item',NULL,'Deleted Item','Deleted Item','Deleted Item',"
109c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'http://www.google.com/','http://www.google.com/2',NULL,'AASGASGA',"
110c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'ASADGADGADG');"
111c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      "INSERT INTO metas VALUES(4,681,681,129002163642690000,"
112c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "129002163642690000,129002163642690000,129002163642690000,-3145728,"
113c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "3,'s_ID_4','s_ID_9','s_ID_9','s_ID_4','s_ID_4',0,0,1,0,1,0,1,1,"
114c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'Welcome to Chromium',NULL,'Welcome to Chromium',"
115c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'Welcome to Chromium','Welcome to Chromium',"
116c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'http://www.google.com/chrome/intl/en/welcome.html',"
117c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'http://www.google.com/chrome/intl/en/welcome.html',NULL,NULL,"
118c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "NULL);"
119c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      "INSERT INTO metas VALUES(5,677,677,129001555500000000,"
120c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "129001555500000000,129001555500000000,129001555500000000,1048576,"
121c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "7,'s_ID_5','s_ID_9','s_ID_9','s_ID_5','s_ID_5',0,0,1,0,1,0,1,1,"
122c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'Google',NULL,'Google','Google','Google','http://www.google.com/',"
123c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'http://www.google.com/',NULL,'AGASGASG','AGFDGASG');"
124c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      "INSERT INTO metas VALUES(6,694,694,129053976170000000,"
125c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "129053976170000000,129053976170000000,129053976170000000,-4194304,"
126c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "6,'s_ID_6','s_ID_9','s_ID_9','r','r',0,0,0,1,1,1,0,1,"
127c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'The Internet',NULL,'The Internet','The Internet',"
128c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'The Internet',NULL,NULL,NULL,NULL,NULL);"
129c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      "INSERT INTO metas VALUES(7,663,663,128976864758480000,"
130c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "128976864758480000,128976864758480000,128976864758480000,"
131c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "1048576,0,'s_ID_7','r','r','r','r',0,0,0,1,1,1,0,1,"
132c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'Google Chrome',NULL,'Google Chrome','Google Chrome',"
133c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'Google Chrome',NULL,NULL,'google_chrome',NULL,NULL);"
134c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      "INSERT INTO metas VALUES(8,664,664,128976864758480000,"
135c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "128976864758480000,128976864758480000,128976864758480000,1048576,"
136c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "0,'s_ID_8','s_ID_7','s_ID_7','r','r',0,0,0,1,1,1,0,1,'Bookmarks',"
137c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "NULL,'Bookmarks','Bookmarks','Bookmarks',NULL,NULL,"
138c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'google_chrome_bookmarks',NULL,NULL);"
139c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      "INSERT INTO metas VALUES(9,665,665,128976864758480000,"
140c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "128976864758480000,128976864758480000,128976864758480000,"
141c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "1048576,1,'s_ID_9','s_ID_8','s_ID_8','r','s_ID_10',0,0,0,1,1,1,0,"
142c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "1,'Bookmark Bar',NULL,'Bookmark Bar','Bookmark Bar','Bookmark Bar',"
143c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "NULL,NULL,'bookmark_bar',NULL,NULL);"
144c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      "INSERT INTO metas VALUES(10,666,666,128976864758480000,"
145c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "128976864758480000,128976864758480000,128976864758480000,2097152,"
146c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "2,'s_ID_10','s_ID_8','s_ID_8','s_ID_9','r',0,0,0,1,1,1,0,1,"
147c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'Other Bookmarks',NULL,'Other Bookmarks','Other Bookmarks',"
148c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'Other Bookmarks',NULL,NULL,'other_bookmarks',"
149c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "NULL,NULL);"
150c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      "INSERT INTO metas VALUES(11,683,683,129079956948440000,"
151c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "129079956948440000,129079956948440000,129079956948440000,-1048576,"
152c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "8,'s_ID_11','s_ID_6','s_ID_6','r','s_ID_13',0,0,0,0,1,0,0,1,"
153c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'Home (The Chromium Projects)',NULL,'Home (The Chromium Projects)',"
154c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'Home (The Chromium Projects)','Home (The Chromium Projects)',"
155c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'http://dev.chromium.org/','http://dev.chromium.org/other',NULL,"
156c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'AGATWA','AFAGVASF');"
157c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      "INSERT INTO metas VALUES(12,685,685,129079957513650000,"
158c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "129079957513650000,129079957513650000,129079957513650000,0,9,"
159c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'s_ID_12','s_ID_6','s_ID_6','s_ID_13','s_ID_14',0,0,0,1,1,1,0,1,"
160c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'Extra Bookmarks',NULL,'Extra Bookmarks','Extra Bookmarks',"
161c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'Extra Bookmarks',NULL,NULL,NULL,NULL,NULL);"
162c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      "INSERT INTO metas VALUES(13,687,687,129079957985300000,"
163c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "129079957985300000,129079957985300000,129079957985300000,-917504,"
164c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "10,'s_ID_13','s_ID_6','s_ID_6','s_ID_11','s_ID_12',0,0,0,0,1,0,0,"
165c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "1,'ICANN | Internet Corporation for Assigned Names and Numbers',"
166c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'ICANN  Internet Corporation for Assigned Names and Numbers',"
167c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'ICANN | Internet Corporation for Assigned Names and Numbers',"
168c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'ICANN | Internet Corporation for Assigned Names and Numbers',"
169c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'ICANN | Internet Corporation for Assigned Names and Numbers',"
170c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'http://www.icann.com/','http://www.icann.com/',NULL,"
171c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'PNGAXF0AAFF','DAAFASF');"
172c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      "INSERT INTO metas VALUES(14,692,692,129079958383000000,"
173c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "129079958383000000,129079958383000000,129079958383000000,1048576,"
174c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "11,'s_ID_14','s_ID_6','s_ID_6','s_ID_12','r',0,0,0,0,1,0,0,1,"
175c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'The WebKit Open Source Project',NULL,"
176c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'The WebKit Open Source Project','The WebKit Open Source Project',"
177c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'The WebKit Open Source Project','http://webkit.org/',"
178c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'http://webkit.org/x',NULL,'PNGX','PNG2Y');"
179c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      "CREATE TABLE share_info (id VARCHAR(128) primary key, "
180c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "last_sync_timestamp INT, name VARCHAR(128), "
181c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "initial_sync_ended BIT default 0, store_birthday VARCHAR(256), "
182c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "db_create_version VARCHAR(128), db_create_time int, "
183c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "next_id bigint default -2, cache_guid VARCHAR(32));"
184c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      "INSERT INTO share_info VALUES('nick@chromium.org',694,"
185c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'nick@chromium.org',1,'c27e9f59-08ca-46f8-b0cc-f16a2ed778bb',"
186c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'Unknown',1263522064,-65542,"
187c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'9010788312004066376x-6609234393368420856x');"
188c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      "CREATE TABLE share_version (id VARCHAR(128) primary key, data INT);"
189c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      "INSERT INTO share_version VALUES('nick@chromium.org',68);"));
190c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_TRUE(connection.CommitTransaction());
191c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
192c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
193c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid MigrationTest::SetUpVersion68Database() {
194c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // This sets up an actual version 68 database dump.  The IDs were
195c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // canonicalized to be less huge, and the favicons were overwritten
196c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // with random junk so that they didn't contain any unprintable
197c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // characters.  A few server URLs were tweaked so that they'd be
198c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // different from the local URLs.  Lastly, the custom collation on
199c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // the server_non_unique_name column was removed.
200c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  sql::Connection connection;
201c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_TRUE(connection.Open(GetDatabasePath()));
202c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_TRUE(connection.BeginTransaction());
203c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_TRUE(connection.Execute(
204c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      "CREATE TABLE extended_attributes(metahandle bigint, key varchar(127), "
205c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "value blob, PRIMARY KEY(metahandle, key) ON CONFLICT REPLACE);"
206c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      "CREATE TABLE metas (metahandle bigint primary key ON CONFLICT FAIL,"
207c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "base_version bigint default -1,server_version bigint default 0,"
208c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "mtime bigint default 0,server_mtime bigint default 0,"
209c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "ctime bigint default 0,server_ctime bigint default 0,"
210c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "server_position_in_parent bigint default 0,"
211c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "local_external_id bigint default 0,id varchar(255) default 'r',"
212c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "parent_id varchar(255) default 'r',"
213c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "server_parent_id varchar(255) default 'r',"
214c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "prev_id varchar(255) default 'r',next_id varchar(255) default 'r',"
215c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "is_unsynced bit default 0,is_unapplied_update bit default 0,"
216c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "is_del bit default 0,is_dir bit default 0,"
217c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "is_bookmark_object bit default 0,server_is_dir bit default 0,"
218c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "server_is_del bit default 0,"
219c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "server_is_bookmark_object bit default 0,"
220c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "non_unique_name varchar,server_non_unique_name varchar(255),"
221c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "bookmark_url varchar,server_bookmark_url varchar,"
222c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "singleton_tag varchar,bookmark_favicon blob,"
223c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "server_bookmark_favicon blob);"
224c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      "INSERT INTO metas VALUES(1,-1,0,129079956640320000,0,"
225c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "129079956640320000,0,0,0,'r','r','r','r','r',0,0,0,1,0,0,0,0,NULL,"
226c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "NULL,NULL,NULL,NULL,NULL,NULL);"
227c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      "INSERT INTO metas VALUES(2,669,669,128976886618480000,"
228c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "128976886618480000,128976886618480000,128976886618480000,-2097152,"
229c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "4,'s_ID_2','s_ID_9','s_ID_9','s_ID_2','s_ID_2',0,0,1,0,1,0,1,1,"
230c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'Deleted Item','Deleted Item','http://www.google.com/',"
231c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'http://www.google.com/2',NULL,'AASGASGA','ASADGADGADG');"
232c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      "INSERT INTO metas VALUES(4,681,681,129002163642690000,"
233c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "129002163642690000,129002163642690000,129002163642690000,-3145728,"
234c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "3,'s_ID_4','s_ID_9','s_ID_9','s_ID_4','s_ID_4',0,0,1,0,1,0,1,1,"
235c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'Welcome to Chromium','Welcome to Chromium',"
236c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'http://www.google.com/chrome/intl/en/welcome.html',"
237c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'http://www.google.com/chrome/intl/en/welcome.html',NULL,NULL,"
238c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "NULL);"
239c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      "INSERT INTO metas VALUES(5,677,677,129001555500000000,"
240c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "129001555500000000,129001555500000000,129001555500000000,1048576,"
241c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "7,'s_ID_5','s_ID_9','s_ID_9','s_ID_5','s_ID_5',0,0,1,0,1,0,1,1,"
242c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'Google','Google','http://www.google.com/',"
243c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'http://www.google.com/',NULL,'AGASGASG','AGFDGASG');"
244c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      "INSERT INTO metas VALUES(6,694,694,129053976170000000,"
245c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "129053976170000000,129053976170000000,129053976170000000,-4194304,"
246c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "6,'s_ID_6','s_ID_9','s_ID_9','r','r',0,0,0,1,1,1,0,1,"
247c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'The Internet','The Internet',NULL,NULL,NULL,NULL,NULL);"
248c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      "INSERT INTO metas VALUES(7,663,663,128976864758480000,"
249c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "128976864758480000,128976864758480000,128976864758480000,"
250c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "1048576,0,'s_ID_7','r','r','r','r',0,0,0,1,1,1,0,1,"
251c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'Google Chrome','Google Chrome',NULL,NULL,'google_chrome',NULL,"
252c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "NULL);"
253c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      "INSERT INTO metas VALUES(8,664,664,128976864758480000,"
254c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "128976864758480000,128976864758480000,128976864758480000,1048576,"
255c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "0,'s_ID_8','s_ID_7','s_ID_7','r','r',0,0,0,1,1,1,0,1,'Bookmarks',"
256c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'Bookmarks',NULL,NULL,'google_chrome_bookmarks',NULL,NULL);"
257c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      "INSERT INTO metas VALUES(9,665,665,128976864758480000,"
258c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "128976864758480000,128976864758480000,128976864758480000,"
259c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "1048576,1,'s_ID_9','s_ID_8','s_ID_8','r','s_ID_10',0,0,0,1,1,1,0,"
260c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "1,'Bookmark Bar','Bookmark Bar',NULL,NULL,'bookmark_bar',NULL,"
261c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "NULL);"
262c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      "INSERT INTO metas VALUES(10,666,666,128976864758480000,"
263c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "128976864758480000,128976864758480000,128976864758480000,2097152,"
264c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "2,'s_ID_10','s_ID_8','s_ID_8','s_ID_9','r',0,0,0,1,1,1,0,1,"
265c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'Other Bookmarks','Other Bookmarks',NULL,NULL,'other_bookmarks',"
266c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "NULL,NULL);"
267c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      "INSERT INTO metas VALUES(11,683,683,129079956948440000,"
268c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "129079956948440000,129079956948440000,129079956948440000,-1048576,"
269c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "8,'s_ID_11','s_ID_6','s_ID_6','r','s_ID_13',0,0,0,0,1,0,0,1,"
270c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'Home (The Chromium Projects)','Home (The Chromium Projects)',"
271c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'http://dev.chromium.org/','http://dev.chromium.org/other',NULL,"
272c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'AGATWA','AFAGVASF');"
273c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      "INSERT INTO metas VALUES(12,685,685,129079957513650000,"
274c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "129079957513650000,129079957513650000,129079957513650000,0,9,"
275c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'s_ID_12','s_ID_6','s_ID_6','s_ID_13','s_ID_14',0,0,0,1,1,1,0,1,"
276c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'Extra Bookmarks','Extra Bookmarks',NULL,NULL,NULL,NULL,NULL);"
277c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      "INSERT INTO metas VALUES(13,687,687,129079957985300000,"
278c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "129079957985300000,129079957985300000,129079957985300000,-917504,"
279c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "10,'s_ID_13','s_ID_6','s_ID_6','s_ID_11','s_ID_12',0,0,0,0,1,0,0,"
280c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "1,'ICANN | Internet Corporation for Assigned Names and Numbers',"
281c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'ICANN | Internet Corporation for Assigned Names and Numbers',"
282c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'http://www.icann.com/','http://www.icann.com/',NULL,"
283c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'PNGAXF0AAFF','DAAFASF');"
284c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      "INSERT INTO metas VALUES(14,692,692,129079958383000000,"
285c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "129079958383000000,129079958383000000,129079958383000000,1048576,"
286c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "11,'s_ID_14','s_ID_6','s_ID_6','s_ID_12','r',0,0,0,0,1,0,0,1,"
287c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'The WebKit Open Source Project','The WebKit Open Source Project',"
288c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'http://webkit.org/','http://webkit.org/x',NULL,'PNGX','PNG2Y');"
289c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      "CREATE TABLE share_info (id VARCHAR(128) primary key, "
290c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "last_sync_timestamp INT, name VARCHAR(128), "
291c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "initial_sync_ended BIT default 0, store_birthday VARCHAR(256), "
292c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "db_create_version VARCHAR(128), db_create_time int, "
293c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "next_id bigint default -2, cache_guid VARCHAR(32));"
294c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      "INSERT INTO share_info VALUES('nick@chromium.org',694,"
295c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'nick@chromium.org',1,'c27e9f59-08ca-46f8-b0cc-f16a2ed778bb',"
296c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'Unknown',1263522064,-65542,"
297c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'9010788312004066376x-6609234393368420856x');"
298c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      "CREATE TABLE share_version (id VARCHAR(128) primary key, data INT);"
299c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      "INSERT INTO share_version VALUES('nick@chromium.org',68);"));
300c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_TRUE(connection.CommitTransaction());
301c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
302c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
303c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid MigrationTest::SetUpVersion69Database() {
304c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  sql::Connection connection;
305c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_TRUE(connection.Open(GetDatabasePath()));
306c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_TRUE(connection.BeginTransaction());
307c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_TRUE(connection.Execute(
308c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      "CREATE TABLE extended_attributes(metahandle bigint, key varchar(127), "
309c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "value blob, PRIMARY KEY(metahandle, key) ON CONFLICT REPLACE);"
310c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      "CREATE TABLE metas (metahandle bigint primary key ON CONFLICT FAIL,"
311c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "base_version bigint default -1,server_version bigint default 0,"
312c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "mtime bigint default 0,server_mtime bigint default 0,"
313c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "ctime bigint default 0,server_ctime bigint default 0,"
314c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "server_position_in_parent bigint default 0,"
315c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "local_external_id bigint default 0,id varchar(255) default 'r',"
316c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "parent_id varchar(255) default 'r',"
317c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "server_parent_id varchar(255) default 'r',"
318c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "prev_id varchar(255) default 'r',next_id varchar(255) default 'r',"
319c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "is_unsynced bit default 0,is_unapplied_update bit default 0,"
320c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "is_del bit default 0,is_dir bit default 0,"
321c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "is_bookmark_object bit default 0,server_is_dir bit default 0,"
322c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "server_is_del bit default 0,"
323c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "server_is_bookmark_object bit default 0,"
324c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "non_unique_name varchar,server_non_unique_name varchar(255),"
325c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "bookmark_url varchar,server_bookmark_url varchar,"
326c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "singleton_tag varchar,bookmark_favicon blob,"
327c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "server_bookmark_favicon blob, specifics blob, "
328c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "server_specifics blob);"
329c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      "INSERT INTO metas VALUES(1,-1,0,129079956640320000,0,129079956640320000,"
330c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "0,0,0,'r','r','r','r','r',0,0,0,1,0,0,0,0,NULL,NULL,NULL,NULL,NULL,"
331c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "NULL,NULL,X'',X'');"
332c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      "INSERT INTO metas VALUES(2,669,669,128976886618480000,"
333c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "128976886618480000,128976886618480000,128976886618480000,-2097152,"
334c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "4,'s_ID_2','s_ID_9','s_ID_9','s_ID_2','s_ID_2',0,0,1,0,1,0,1,1,"
335c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'Deleted Item','Deleted Item','http://www.google.com/',"
336c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'http://www.google.com/2',NULL,'AASGASGA','ASADGADGADG',"
337c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "X'C28810220A16687474703A2F2F7777772E676F6F676C652E636F6D2F120841415"
338c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "34741534741',X'C28810260A17687474703A2F2F7777772E676F6F676C652E636F"
339c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "6D2F32120B4153414447414447414447');"
340c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      "INSERT INTO metas VALUES(4,681,681,129002163642690000,"
341c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "129002163642690000,129002163642690000,129002163642690000,-3145728,"
342c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "3,'s_ID_4','s_ID_9','s_ID_9','s_ID_4','s_ID_4',0,0,1,0,1,0,1,1,"
343c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'Welcome to Chromium','Welcome to Chromium',"
344c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'http://www.google.com/chrome/intl/en/welcome.html',"
345c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'http://www.google.com/chrome/intl/en/welcome.html',NULL,NULL,NULL,"
346c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "X'C28810350A31687474703A2F2F7777772E676F6F676C652E636F6D2F6368726F6"
347c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "D652F696E746C2F656E2F77656C636F6D652E68746D6C1200',X'C28810350A3168"
348c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "7474703A2F2F7777772E676F6F676C652E636F6D2F6368726F6D652F696E746C2F6"
349c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "56E2F77656C636F6D652E68746D6C1200');"
350c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      "INSERT INTO metas VALUES(5,677,677,129001555500000000,"
351c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "129001555500000000,129001555500000000,129001555500000000,1048576,7,"
352c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'s_ID_5','s_ID_9','s_ID_9','s_ID_5','s_ID_5',0,0,1,0,1,0,1,1,"
353c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'Google','Google','http://www.google.com/',"
354c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'http://www.google.com/',NULL,'AGASGASG','AGFDGASG',X'C28810220A166"
355c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "87474703A2F2F7777772E676F6F676C652E636F6D2F12084147415347415347',X'"
356c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "C28810220A16687474703A2F2F7777772E676F6F676C652E636F6D2F12084147464"
357c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "447415347');"
358c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      "INSERT INTO metas VALUES(6,694,694,129053976170000000,"
359c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "129053976170000000,129053976170000000,129053976170000000,-4194304,6"
360c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          ",'s_ID_6','s_ID_9','s_ID_9','r','r',0,0,0,1,1,1,0,1,'The Internet',"
361c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'The Internet',NULL,NULL,NULL,NULL,NULL,X'C2881000',X'C2881000');"
362c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      "INSERT INTO metas VALUES(7,663,663,128976864758480000,"
363c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "128976864758480000,128976864758480000,128976864758480000,1048576,0,"
364c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'s_ID_7','r','r','r','r',0,0,0,1,1,1,0,1,'Google Chrome',"
365c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'Google Chrome',NULL,NULL,'google_chrome',NULL,NULL,NULL,NULL);"
366c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      "INSERT INTO metas VALUES(8,664,664,128976864758480000,"
367c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "128976864758480000,128976864758480000,128976864758480000,1048576,0,"
368c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'s_ID_8','s_ID_7','s_ID_7','r','r',0,0,0,1,1,1,0,1,'Bookmarks',"
369c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'Bookmarks',NULL,NULL,'google_chrome_bookmarks',NULL,NULL,"
370c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "X'C2881000',X'C2881000');"
371c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      "INSERT INTO metas VALUES(9,665,665,128976864758480000,"
372c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "128976864758480000,128976864758480000,128976864758480000,1048576,1,"
373c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'s_ID_9','s_ID_8','s_ID_8','r','s_ID_10',0,0,0,1,1,1,0,1,"
374c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'Bookmark Bar','Bookmark Bar',NULL,NULL,'bookmark_bar',NULL,NULL,"
375c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "X'C2881000',X'C2881000');"
376c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      "INSERT INTO metas VALUES(10,666,666,128976864758480000,"
377c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "128976864758480000,128976864758480000,128976864758480000,2097152,2,"
378c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'s_ID_10','s_ID_8','s_ID_8','s_ID_9','r',0,0,0,1,1,1,0,1,"
379c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'Other Bookmarks','Other Bookmarks',NULL,NULL,'other_bookmarks',"
380c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "NULL,NULL,X'C2881000',X'C2881000');"
381c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      "INSERT INTO metas VALUES(11,683,683,129079956948440000,"
382c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "129079956948440000,129079956948440000,129079956948440000,-1048576,"
383c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "8,'s_ID_11','s_ID_6','s_ID_6','r','s_ID_13',0,0,0,0,1,0,0,1,"
384c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'Home (The Chromium Projects)','Home (The Chromium Projects)',"
385c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'http://dev.chromium.org/','http://dev.chromium.org/other',NULL,"
386c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'AGATWA','AFAGVASF',X'C28810220A18687474703A2F2F6465762E6368726F6D6"
387c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "9756D2E6F72672F1206414741545741',X'C28810290A1D687474703A2F2F646576"
388c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "2E6368726F6D69756D2E6F72672F6F7468657212084146414756415346');"
389c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      "INSERT INTO metas VALUES(12,685,685,129079957513650000,"
390c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "129079957513650000,129079957513650000,129079957513650000,0,9,"
391c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'s_ID_12','s_ID_6','s_ID_6','s_ID_13','s_ID_14',0,0,0,1,1,1,0,1,"
392c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'Extra Bookmarks','Extra Bookmarks',NULL,NULL,NULL,NULL,NULL,"
393c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "X'C2881000',X'C2881000');"
394c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      "INSERT INTO metas VALUES(13,687,687,129079957985300000,"
395c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "129079957985300000,129079957985300000,129079957985300000,-917504,"
396c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "10,'s_ID_13','s_ID_6','s_ID_6','s_ID_11','s_ID_12',0,0,0,0,1,0,0,"
397c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "1,'ICANN | Internet Corporation for Assigned Names and Numbers',"
398c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'ICANN | Internet Corporation for Assigned Names and Numbers',"
399c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'http://www.icann.com/','http://www.icann.com/',NULL,'PNGAXF0AAFF',"
400c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'DAAFASF',X'C28810240A15687474703A2F2F7777772E6963616E6E2E636F6D2F1"
401c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "20B504E474158463041414646',X'C28810200A15687474703A2F2F7777772E6963"
402c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "616E6E2E636F6D2F120744414146415346');"
403c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      "INSERT INTO metas VALUES(14,692,692,129079958383000000,"
404c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "129079958383000000,129079958383000000,129079958383000000,1048576,11,"
405c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'s_ID_14','s_ID_6','s_ID_6','s_ID_12','r',0,0,0,0,1,0,0,1,"
406c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'The WebKit Open Source Project','The WebKit Open Source Project',"
407c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'http://webkit.org/','http://webkit.org/x',NULL,'PNGX','PNG2Y',"
408c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "X'C288101A0A12687474703A2F2F7765626B69742E6F72672F1204504E4758',X'C2"
409c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "88101C0A13687474703A2F2F7765626B69742E6F72672F781205504E473259');"
410c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      "CREATE TABLE share_info (id VARCHAR(128) primary key, "
411c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "last_sync_timestamp INT, name VARCHAR(128), "
412c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "initial_sync_ended BIT default 0, store_birthday VARCHAR(256), "
413c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "db_create_version VARCHAR(128), db_create_time int, "
414c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "next_id bigint default -2, cache_guid VARCHAR(32));"
415c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      "INSERT INTO share_info VALUES('nick@chromium.org',694,"
416c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'nick@chromium.org',1,'c27e9f59-08ca-46f8-b0cc-f16a2ed778bb',"
417c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'Unknown',1263522064,-65542,"
418c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'9010788312004066376x-6609234393368420856x');"
419c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      "CREATE TABLE share_version (id VARCHAR(128) primary key, data INT);"
420c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      "INSERT INTO share_version VALUES('nick@chromium.org',69);"
421c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ));
422c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_TRUE(connection.CommitTransaction());
423c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
424c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
425c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid MigrationTest::SetUpVersion70Database() {
426c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  sql::Connection connection;
427c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_TRUE(connection.Open(GetDatabasePath()));
428c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_TRUE(connection.BeginTransaction());
429c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_TRUE(connection.Execute(
430c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      "CREATE TABLE extended_attributes(metahandle bigint, key varchar(127), "
431c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "value blob, PRIMARY KEY(metahandle, key) ON CONFLICT REPLACE);"
432c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      "CREATE TABLE share_info (id VARCHAR(128) primary key, "
433c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "last_sync_timestamp INT, name VARCHAR(128), "
434c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "initial_sync_ended BIT default 0, store_birthday VARCHAR(256), "
435c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "db_create_version VARCHAR(128), db_create_time int, "
436c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "next_id bigint default -2, cache_guid VARCHAR(32));"
437c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      "INSERT INTO share_info VALUES('nick@chromium.org',694,"
438c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'nick@chromium.org',1,'c27e9f59-08ca-46f8-b0cc-f16a2ed778bb',"
439c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'Unknown',1263522064,-65542,"
440c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'9010788312004066376x-6609234393368420856x');"
441c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      "CREATE TABLE share_version (id VARCHAR(128) primary key, data INT);"
442c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      "INSERT INTO share_version VALUES('nick@chromium.org',70);"
443c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      "CREATE TABLE metas(metahandle bigint primary key ON CONFLICT FAIL,"
444c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "base_version bigint default -1,server_version bigint default 0,"
445c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "mtime bigint default 0,server_mtime bigint default 0,"
446c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "ctime bigint default 0,server_ctime bigint default 0,"
447c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "server_position_in_parent bigint default 0,"
448c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "local_external_id bigint default 0,id varchar(255) default 'r',"
449c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "parent_id varchar(255) default 'r',"
450c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "server_parent_id varchar(255) default 'r',"
451c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "prev_id varchar(255) default 'r',next_id varchar(255) default 'r',"
452c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "is_unsynced bit default 0,is_unapplied_update bit default 0,"
453c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "is_del bit default 0,is_dir bit default 0,"
454c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "server_is_dir bit default 0,server_is_del bit default 0,"
455c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "non_unique_name varchar,server_non_unique_name varchar(255),"
456c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "unique_server_tag varchar,unique_client_tag varchar,"
457c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "specifics blob,server_specifics blob);"
458c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      "INSERT INTO metas VALUES(1,-1,0,129079956640320000,0,129079956640320000,"
459c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "0,0,0,'r','r','r','r','r',0,0,0,1,0,0,NULL,NULL,NULL,NULL,X'',X'');"
460c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      "INSERT INTO metas VALUES(2,669,669,128976886618480000,"
461c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "128976886618480000,128976886618480000,128976886618480000,"
462c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "-2097152,4,'s_ID_2','s_ID_9','s_ID_9','s_ID_2','s_ID_2',0,0,1,0,0,"
463c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "1,'Deleted Item','Deleted Item',NULL,NULL,X'C28810220A16687474703A"
464c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "2F2F7777772E676F6F676C652E636F6D2F12084141534741534741',X'C2881026"
465c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "0A17687474703A2F2F7777772E676F6F676C652E636F6D2F32120B415341444741"
466c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "4447414447');"
467c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      "INSERT INTO metas VALUES(4,681,681,129002163642690000,"
468c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "129002163642690000,129002163642690000,129002163642690000,-3145728,"
469c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "3,'s_ID_4','s_ID_9','s_ID_9','s_ID_4','s_ID_4',0,0,1,0,0,1,"
470c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'Welcome to Chromium','Welcome to Chromium',NULL,NULL,X'C28810350A"
471c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "31687474703A2F2F7777772E676F6F676C652E636F6D2F6368726F6D652F696E74"
472c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "6C2F656E2F77656C636F6D652E68746D6C1200',X'C28810350A31687474703A2F"
473c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "2F7777772E676F6F676C652E636F6D2F6368726F6D652F696E746C2F656E2F7765"
474c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "6C636F6D652E68746D6C1200');"
475c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      "INSERT INTO metas VALUES(5,677,677,129001555500000000,"
476c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "129001555500000000,129001555500000000,129001555500000000,1048576,7,"
477c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'s_ID_5','s_ID_9','s_ID_9','s_ID_5','s_ID_5',0,0,1,0,0,1,'Google',"
478c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'Google',NULL,NULL,X'C28810220A16687474703A2F2F7777772E676F6F676C6"
479c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "52E636F6D2F12084147415347415347',X'C28810220A16687474703A2F2F77777"
480c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "72E676F6F676C652E636F6D2F12084147464447415347');"
481c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      "INSERT INTO metas VALUES(6,694,694,129053976170000000,"
482c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "129053976170000000,129053976170000000,129053976170000000,-4194304,"
483c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "6,'s_ID_6','s_ID_9','s_ID_9','r','r',0,0,0,1,1,0,'The Internet',"
484c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'The Internet',NULL,NULL,X'C2881000',X'C2881000');"
485c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      "INSERT INTO metas VALUES(7,663,663,128976864758480000,"
486c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "128976864758480000,128976864758480000,128976864758480000,1048576,0,"
487c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'s_ID_7','r','r','r','r',0,0,0,1,1,0,'Google Chrome',"
488c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'Google Chrome','google_chrome',NULL,NULL,NULL);"
489c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      "INSERT INTO metas VALUES(8,664,664,128976864758480000,"
490c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "128976864758480000,128976864758480000,128976864758480000,1048576,0,"
491c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'s_ID_8','s_ID_7','s_ID_7','r','r',0,0,0,1,1,0,'Bookmarks',"
492c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'Bookmarks','google_chrome_bookmarks',NULL,X'C2881000',"
493c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "X'C2881000');"
494c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      "INSERT INTO metas VALUES(9,665,665,128976864758480000,"
495c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "128976864758480000,128976864758480000,128976864758480000,1048576,"
496c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "1,'s_ID_9','s_ID_8','s_ID_8','r','s_ID_10',0,0,0,1,1,0,"
497c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'Bookmark Bar','Bookmark Bar','bookmark_bar',NULL,X'C2881000',"
498c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "X'C2881000');"
499c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      "INSERT INTO metas VALUES(10,666,666,128976864758480000,"
500c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "128976864758480000,128976864758480000,128976864758480000,"
501c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "2097152,2,'s_ID_10','s_ID_8','s_ID_8','s_ID_9','r',0,0,0,1,1,0,"
502c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'Other Bookmarks','Other Bookmarks','other_bookmarks',NULL,"
503c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "X'C2881000',X'C2881000');"
504c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      "INSERT INTO metas VALUES(11,683,683,129079956948440000,"
505c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "129079956948440000,129079956948440000,129079956948440000,-1048576,"
506c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "8,'s_ID_11','s_ID_6','s_ID_6','r','s_ID_13',0,0,0,0,0,0,"
507c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'Home (The Chromium Projects)','Home (The Chromium Projects)',"
508c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "NULL,NULL,X'C28810220A18687474703A2F2F6465762E6368726F6D69756D2E6F"
509c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "72672F1206414741545741',X'C28810290A1D687474703A2F2F6465762E636872"
510c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "6F6D69756D2E6F72672F6F7468657212084146414756415346');"
511c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      "INSERT INTO metas VALUES(12,685,685,129079957513650000,"
512c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "129079957513650000,129079957513650000,129079957513650000,0,9,"
513c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'s_ID_12','s_ID_6','s_ID_6','s_ID_13','s_ID_14',0,0,0,1,1,0,"
514c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'Extra Bookmarks','Extra Bookmarks',NULL,NULL,X'C2881000',"
515c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "X'C2881000');"
516c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      "INSERT INTO metas VALUES(13,687,687,129079957985300000,"
517c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "129079957985300000,129079957985300000,129079957985300000,-917504,"
518c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "10,'s_ID_13','s_ID_6','s_ID_6','s_ID_11','s_ID_12',0,0,0,0,0,0,"
519c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'ICANN | Internet Corporation for Assigned Names and Numbers',"
520c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'ICANN | Internet Corporation for Assigned Names and Numbers',"
521c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "NULL,NULL,X'C28810240A15687474703A2F2F7777772E6963616E6E2E636F6D2F"
522c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "120B504E474158463041414646',X'C28810200A15687474703A2F2F7777772E69"
523c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "63616E6E2E636F6D2F120744414146415346');"
524c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      "INSERT INTO metas VALUES(14,692,692,129079958383000000,"
525c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "129079958383000000,129079958383000000,129079958383000000,1048576,"
526c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "11,'s_ID_14','s_ID_6','s_ID_6','s_ID_12','r',0,0,0,0,0,0,"
527c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'The WebKit Open Source Project','The WebKit Open Source Project',"
528c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "NULL,NULL,X'C288101A0A12687474703A2F2F7765626B69742E6F72672F120450"
529c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "4E4758',X'C288101C0A13687474703A2F2F7765626B69742E6F72672F78120550"
530c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "4E473259');"
531c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      ));
532c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_TRUE(connection.CommitTransaction());
533c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
534c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
535c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid MigrationTest::SetUpVersion71Database() {
536c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  sql::Connection connection;
537c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_TRUE(connection.Open(GetDatabasePath()));
538c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_TRUE(connection.BeginTransaction());
539c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_TRUE(connection.Execute(
540c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      "CREATE TABLE extended_attributes(metahandle bigint, key varchar(127), "
541c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "value blob, PRIMARY KEY(metahandle, key) ON CONFLICT REPLACE);"
542c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      "CREATE TABLE share_version (id VARCHAR(128) primary key, data INT);"
543c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      "INSERT INTO 'share_version' VALUES('nick@chromium.org',71);"
544c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      "CREATE TABLE metas(metahandle bigint primary key ON CONFLICT FAIL,"
545c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "base_version bigint default -1,server_version bigint default 0,"
546c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "mtime bigint default 0,server_mtime bigint default 0,ctime bigint "
547c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "default 0,server_ctime bigint default 0,server_position_in_parent "
548c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "bigint default 0,local_external_id bigint default 0,id varchar(255) "
549c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "default 'r',parent_id varchar(255) default 'r',server_parent_id "
550c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "varchar(255) default 'r',prev_id varchar(255) default 'r',next_id "
551c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "varchar(255) default 'r',is_unsynced bit default 0,"
552c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "is_unapplied_update bit default 0,is_del bit default 0,is_dir bit "
553c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "default 0,server_is_dir bit default 0,server_is_del bit default 0,"
554c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "non_unique_name varchar,server_non_unique_name varchar(255),"
555c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "unique_server_tag varchar,unique_client_tag varchar,specifics blob,"
556c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "server_specifics blob);"
557c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      "INSERT INTO 'metas' VALUES(1,-1,0,129079956640320000,0,"
558c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "129079956640320000,0,0,0,'r','r','r','r','r',0,0,0,1,0,0,NULL,NULL,"
559c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "NULL,NULL,X'',X'');"
560c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      "INSERT INTO 'metas' VALUES(2,669,669,128976886618480000,"
561c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "128976886618480000,128976886618480000,128976886618480000,-2097152,4,"
562c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'s_ID_2','s_ID_9','s_ID_9','s_ID_2','s_ID_2',0,0,1,0,0,1,"
563c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'Deleted Item','Deleted Item',NULL,NULL,X'C28810220A16687474703A2F2F"
564c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "7777772E676F6F676C652E636F6D2F12084141534741534741',X'C28810260A1768"
565c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "7474703A2F2F7777772E676F6F676C652E636F6D2F32120B41534144474144474144"
566c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "47');"
567c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      "INSERT INTO 'metas' VALUES(4,681,681,129002163642690000,"
568c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "129002163642690000,129002163642690000,129002163642690000,-3145728,3,"
569c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'s_ID_4','s_ID_9','s_ID_9','s_ID_4','s_ID_4',0,0,1,0,0,1,"
570c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'Welcome to Chromium','Welcome to Chromium',NULL,NULL,X'C28810350A31"
571c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "687474703A2F2F7777772E676F6F676C652E636F6D2F6368726F6D652F696E746C2F"
572c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "656E2F77656C636F6D652E68746D6C1200',X'C28810350A31687474703A2F2F7777"
573c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "772E676F6F676C652E636F6D2F6368726F6D652F696E746C2F656E2F77656C636F6D"
574c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "652E68746D6C1200');"
575c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      "INSERT INTO 'metas' VALUES(5,677,677,129001555500000000,"
576c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "129001555500000000,129001555500000000,129001555500000000,1048576,7,"
577c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'s_ID_5','s_ID_9','s_ID_9','s_ID_5','s_ID_5',0,0,1,0,0,1,'Google',"
578c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'Google',NULL,NULL,X'C28810220A16687474703A2F2F7777772E676F6F676C652"
579c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "E636F6D2F12084147415347415347',X'C28810220A16687474703A2F2F7777772E6"
580c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "76F6F676C652E636F6D2F12084147464447415347');"
581c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      "INSERT INTO 'metas' VALUES(6,694,694,129053976170000000,"
582c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "129053976170000000,129053976170000000,129053976170000000,-4194304,6,"
583c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'s_ID_6','s_ID_9','s_ID_9','r','r',0,0,0,1,1,0,'The Internet',"
584c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'The Internet',NULL,NULL,X'C2881000',X'C2881000');"
585c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      "INSERT INTO 'metas' VALUES(7,663,663,128976864758480000,"
586c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "128976864758480000,128976864758480000,128976864758480000,1048576,0,"
587c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'s_ID_7','r','r','r','r',0,0,0,1,1,0,'Google Chrome','Google Chrome'"
588c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          ",'google_chrome',NULL,NULL,NULL);"
589c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      "INSERT INTO 'metas' VALUES(8,664,664,128976864758480000,"
590c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "128976864758480000,128976864758480000,128976864758480000,1048576,0,"
591c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'s_ID_8','s_ID_7','s_ID_7','r','r',0,0,0,1,1,0,'Bookmarks',"
592c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'Bookmarks','google_chrome_bookmarks',NULL,X'C2881000',X'C2881000');"
593c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      "INSERT INTO 'metas' VALUES(9,665,665,128976864758480000,"
594c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "128976864758480000,128976864758480000,128976864758480000,1048576,1,"
595c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'s_ID_9','s_ID_8','s_ID_8','r','s_ID_10',0,0,0,1,1,0,'Bookmark Bar',"
596c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'Bookmark Bar','bookmark_bar',NULL,X'C2881000',X'C2881000');"
597c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      "INSERT INTO 'metas' VALUES(10,666,666,128976864758480000,"
598c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "128976864758480000,128976864758480000,128976864758480000,2097152,2,"
599c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'s_ID_10','s_ID_8','s_ID_8','s_ID_9','r',0,0,0,1,1,0,"
600c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'Other Bookmarks','Other Bookmarks','other_bookmarks',NULL,"
601c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "X'C2881000',X'C2881000');"
602c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      "INSERT INTO 'metas' VALUES(11,683,683,129079956948440000,"
603c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "129079956948440000,129079956948440000,129079956948440000,-1048576,8,"
604c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'s_ID_11','s_ID_6','s_ID_6','r','s_ID_13',0,0,0,0,0,0,"
605c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'Home (The Chromium Projects)','Home (The Chromium Projects)',NULL,"
606c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "NULL,X'C28810220A18687474703A2F2F6465762E6368726F6D69756D2E6F72672F1"
607c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "206414741545741',X'C28810290A1D687474703A2F2F6465762E6368726F6D69756"
608c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "D2E6F72672F6F7468657212084146414756415346');"
609c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      "INSERT INTO 'metas' VALUES(12,685,685,129079957513650000,"
610c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "129079957513650000,129079957513650000,129079957513650000,0,9,"
611c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'s_ID_12','s_ID_6','s_ID_6','s_ID_13','s_ID_14',0,0,0,1,1,0,"
612c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'Extra Bookmarks','Extra Bookmarks',NULL,NULL,X'C2881000',"
613c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "X'C2881000');"
614c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      "INSERT INTO 'metas' VALUES(13,687,687,129079957985300000,"
615c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "129079957985300000,129079957985300000,129079957985300000,-917504,10,"
616c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'s_ID_13','s_ID_6','s_ID_6','s_ID_11','s_ID_12',0,0,0,0,0,0,"
617c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'ICANN | Internet Corporation for Assigned Names and Numbers',"
618c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'ICANN | Internet Corporation for Assigned Names and Numbers',NULL,"
619c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "NULL,X'C28810240A15687474703A2F2F7777772E6963616E6E2E636F6D2F120B504"
620c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "E474158463041414646',X'C28810200A15687474703A2F2F7777772E6963616E6E2"
621c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "E636F6D2F120744414146415346');"
622c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      "INSERT INTO 'metas' VALUES(14,692,692,129079958383000000,"
623c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "129079958383000000,129079958383000000,129079958383000000,1048576,11,"
624c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'s_ID_14','s_ID_6','s_ID_6','s_ID_12','r',0,0,0,0,0,0,"
625c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'The WebKit Open Source Project','The WebKit Open Source Project',"
626c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "NULL,NULL,""X'C288101A0A12687474703A2F2F7765626B69742E6F72672F120450"
627c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "4E4758',X'C288101C0A13687474703A2F2F7765626B69742E6F72672F781205504E"
628c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "473259');"
629c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      "CREATE TABLE models (model_id BLOB primary key, "
630c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "last_download_timestamp INT, initial_sync_ended BOOLEAN default 0);"
631c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      "INSERT INTO 'models' VALUES(X'C2881000',694,1);"
632c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      "CREATE TABLE 'share_info' (id TEXT primary key, name TEXT, "
633c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "store_birthday TEXT, db_create_version TEXT, db_create_time INT, "
634c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "next_id INT default -2, cache_guid TEXT);"
635c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      "INSERT INTO 'share_info' VALUES('nick@chromium.org','nick@chromium.org',"
636c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'c27e9f59-08ca-46f8-b0cc-f16a2ed778bb','Unknown',1263522064,-65542,"
637c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          "'9010788312004066376x-6609234393368420856x');"));
638c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_TRUE(connection.CommitTransaction());
639c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
640731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
641731df977c0511bca2206b5f333555b1205ff1f43Iain Merrickvoid MigrationTest::SetUpVersion72Database() {
642731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  sql::Connection connection;
643731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  ASSERT_TRUE(connection.Open(GetDatabasePath()));
644731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  ASSERT_TRUE(connection.BeginTransaction());
645731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  ASSERT_TRUE(connection.Execute(
646731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      "CREATE TABLE share_version (id VARCHAR(128) primary key, data INT);"
64721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen      "INSERT INTO 'share_version' VALUES('nick@chromium.org',72);"
648731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      "CREATE TABLE metas(metahandle bigint primary key ON CONFLICT FAIL,"
649731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick          "base_version bigint default -1,server_version bigint default 0,"
650731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick          "mtime bigint default 0,server_mtime bigint default 0,ctime bigint "
651731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick          "default 0,server_ctime bigint default 0,server_position_in_parent "
652731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick          "bigint default 0,local_external_id bigint default 0,id varchar(255) "
653731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick          "default 'r',parent_id varchar(255) default 'r',server_parent_id "
654731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick          "varchar(255) default 'r',prev_id varchar(255) default 'r',next_id "
655731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick          "varchar(255) default 'r',is_unsynced bit default 0,"
656731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick          "is_unapplied_update bit default 0,is_del bit default 0,is_dir bit "
657731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick          "default 0,server_is_dir bit default 0,server_is_del bit default 0,"
658731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick          "non_unique_name varchar,server_non_unique_name varchar(255),"
659731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick          "unique_server_tag varchar,unique_client_tag varchar,specifics blob,"
660731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick          "server_specifics blob);"
661731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      "INSERT INTO 'metas' VALUES(1,-1,0,129079956640320000,0,"
662731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick          "129079956640320000,0,0,0,'r','r','r','r','r',0,0,0,1,0,0,NULL,NULL,"
663731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick          "NULL,NULL,X'',X'');"
664731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      "INSERT INTO 'metas' VALUES(2,669,669,128976886618480000,"
665731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick          "128976886618480000,128976886618480000,128976886618480000,-2097152,4,"
666731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick          "'s_ID_2','s_ID_9','s_ID_9','s_ID_2','s_ID_2',0,0,1,0,0,1,"
667731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick          "'Deleted Item','Deleted Item',NULL,NULL,X'C28810220A16687474703A2F2F"
668731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick          "7777772E676F6F676C652E636F6D2F12084141534741534741',X'C28810260A1768"
669731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick          "7474703A2F2F7777772E676F6F676C652E636F6D2F32120B41534144474144474144"
670731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick          "47');"
671731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      "INSERT INTO 'metas' VALUES(4,681,681,129002163642690000,"
672731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick          "129002163642690000,129002163642690000,129002163642690000,-3145728,3,"
673731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick          "'s_ID_4','s_ID_9','s_ID_9','s_ID_4','s_ID_4',0,0,1,0,0,1,"
674731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick          "'Welcome to Chromium','Welcome to Chromium',NULL,NULL,X'C28810350A31"
675731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick          "687474703A2F2F7777772E676F6F676C652E636F6D2F6368726F6D652F696E746C2F"
676731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick          "656E2F77656C636F6D652E68746D6C1200',X'C28810350A31687474703A2F2F7777"
677731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick          "772E676F6F676C652E636F6D2F6368726F6D652F696E746C2F656E2F77656C636F6D"
678731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick          "652E68746D6C1200');"
679731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      "INSERT INTO 'metas' VALUES(5,677,677,129001555500000000,"
680731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick          "129001555500000000,129001555500000000,129001555500000000,1048576,7,"
681731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick          "'s_ID_5','s_ID_9','s_ID_9','s_ID_5','s_ID_5',0,0,1,0,0,1,'Google',"
682731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick          "'Google',NULL,NULL,X'C28810220A16687474703A2F2F7777772E676F6F676C652"
683731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick          "E636F6D2F12084147415347415347',X'C28810220A16687474703A2F2F7777772E6"
684731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick          "76F6F676C652E636F6D2F12084147464447415347');"
685731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      "INSERT INTO 'metas' VALUES(6,694,694,129053976170000000,"
686731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick          "129053976170000000,129053976170000000,129053976170000000,-4194304,6,"
687731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick          "'s_ID_6','s_ID_9','s_ID_9','r','r',0,0,0,1,1,0,'The Internet',"
688731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick          "'The Internet',NULL,NULL,X'C2881000',X'C2881000');"
689731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      "INSERT INTO 'metas' VALUES(7,663,663,128976864758480000,"
690731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick          "128976864758480000,128976864758480000,128976864758480000,1048576,0,"
691731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick          "'s_ID_7','r','r','r','r',0,0,0,1,1,0,'Google Chrome','Google Chrome'"
692731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick          ",'google_chrome',NULL,NULL,NULL);"
693731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      "INSERT INTO 'metas' VALUES(8,664,664,128976864758480000,"
694731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick          "128976864758480000,128976864758480000,128976864758480000,1048576,0,"
695731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick          "'s_ID_8','s_ID_7','s_ID_7','r','r',0,0,0,1,1,0,'Bookmarks',"
696731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick          "'Bookmarks','google_chrome_bookmarks',NULL,X'C2881000',X'C2881000');"
697731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      "INSERT INTO 'metas' VALUES(9,665,665,128976864758480000,"
698731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick          "128976864758480000,128976864758480000,128976864758480000,1048576,1,"
699731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick          "'s_ID_9','s_ID_8','s_ID_8','r','s_ID_10',0,0,0,1,1,0,'Bookmark Bar',"
700731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick          "'Bookmark Bar','bookmark_bar',NULL,X'C2881000',X'C2881000');"
701731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      "INSERT INTO 'metas' VALUES(10,666,666,128976864758480000,"
702731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick          "128976864758480000,128976864758480000,128976864758480000,2097152,2,"
703731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick          "'s_ID_10','s_ID_8','s_ID_8','s_ID_9','r',0,0,0,1,1,0,"
704731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick          "'Other Bookmarks','Other Bookmarks','other_bookmarks',NULL,"
705731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick          "X'C2881000',X'C2881000');"
706731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      "INSERT INTO 'metas' VALUES(11,683,683,129079956948440000,"
707731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick          "129079956948440000,129079956948440000,129079956948440000,-1048576,8,"
708731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick          "'s_ID_11','s_ID_6','s_ID_6','r','s_ID_13',0,0,0,0,0,0,"
709731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick          "'Home (The Chromium Projects)','Home (The Chromium Projects)',NULL,"
710731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick          "NULL,X'C28810220A18687474703A2F2F6465762E6368726F6D69756D2E6F72672F1"
711731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick          "206414741545741',X'C28810290A1D687474703A2F2F6465762E6368726F6D69756"
712731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick          "D2E6F72672F6F7468657212084146414756415346');"
713731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      "INSERT INTO 'metas' VALUES(12,685,685,129079957513650000,"
714731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick          "129079957513650000,129079957513650000,129079957513650000,0,9,"
715731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick          "'s_ID_12','s_ID_6','s_ID_6','s_ID_13','s_ID_14',0,0,0,1,1,0,"
716731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick          "'Extra Bookmarks','Extra Bookmarks',NULL,NULL,X'C2881000',"
717731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick          "X'C2881000');"
718731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      "INSERT INTO 'metas' VALUES(13,687,687,129079957985300000,"
719731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick          "129079957985300000,129079957985300000,129079957985300000,-917504,10,"
720731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick          "'s_ID_13','s_ID_6','s_ID_6','s_ID_11','s_ID_12',0,0,0,0,0,0,"
721731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick          "'ICANN | Internet Corporation for Assigned Names and Numbers',"
722731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick          "'ICANN | Internet Corporation for Assigned Names and Numbers',NULL,"
723731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick          "NULL,X'C28810240A15687474703A2F2F7777772E6963616E6E2E636F6D2F120B504"
724731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick          "E474158463041414646',X'C28810200A15687474703A2F2F7777772E6963616E6E2"
725731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick          "E636F6D2F120744414146415346');"
726731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      "INSERT INTO 'metas' VALUES(14,692,692,129079958383000000,"
727731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick          "129079958383000000,129079958383000000,129079958383000000,1048576,11,"
728731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick          "'s_ID_14','s_ID_6','s_ID_6','s_ID_12','r',0,0,0,0,0,0,"
729731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick          "'The WebKit Open Source Project','The WebKit Open Source Project',"
730731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick          "NULL,NULL,""X'C288101A0A12687474703A2F2F7765626B69742E6F72672F120450"
731731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick          "4E4758',X'C288101C0A13687474703A2F2F7765626B69742E6F72672F781205504E"
732731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick          "473259');"
733731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      "CREATE TABLE models (model_id BLOB primary key, "
734731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick          "last_download_timestamp INT, initial_sync_ended BOOLEAN default 0);"
735731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      "INSERT INTO 'models' VALUES(X'C2881000',694,1);"
736731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      "CREATE TABLE 'share_info' (id TEXT primary key, name TEXT, "
737731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick          "store_birthday TEXT, db_create_version TEXT, db_create_time INT, "
738731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick          "next_id INT default -2, cache_guid TEXT);"
739731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      "INSERT INTO 'share_info' VALUES('nick@chromium.org','nick@chromium.org',"
740731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick          "'c27e9f59-08ca-46f8-b0cc-f16a2ed778bb','Unknown',1263522064,-65542,"
741731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick          "'9010788312004066376x-6609234393368420856x');"));
742731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  ASSERT_TRUE(connection.CommitTransaction());
743731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick}
744731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
74521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsenvoid MigrationTest::SetUpVersion73Database() {
74621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  sql::Connection connection;
74721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  ASSERT_TRUE(connection.Open(GetDatabasePath()));
74821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  ASSERT_TRUE(connection.BeginTransaction());
74921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  ASSERT_TRUE(connection.Execute(
75021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen      "CREATE TABLE share_version (id VARCHAR(128) primary key, data INT);"
75121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen      "INSERT INTO 'share_version' VALUES('nick@chromium.org',73);"
75221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen      "CREATE TABLE metas(metahandle bigint primary key ON CONFLICT FAIL,"
75321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen          "base_version bigint default -1,server_version bigint default 0,"
75421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen          "mtime bigint default 0,server_mtime bigint default 0,ctime bigint "
75521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen          "default 0,server_ctime bigint default 0,server_position_in_parent "
75621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen          "bigint default 0,local_external_id bigint default 0,id varchar(255) "
75721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen          "default 'r',parent_id varchar(255) default 'r',server_parent_id "
75821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen          "varchar(255) default 'r',prev_id varchar(255) default 'r',next_id "
75921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen          "varchar(255) default 'r',is_unsynced bit default 0,"
76021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen          "is_unapplied_update bit default 0,is_del bit default 0,is_dir bit "
76121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen          "default 0,server_is_dir bit default 0,server_is_del bit default 0,"
76221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen          "non_unique_name varchar,server_non_unique_name varchar(255),"
76321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen          "unique_server_tag varchar,unique_client_tag varchar,specifics blob,"
76421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen          "server_specifics blob);"
76521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen      "INSERT INTO 'metas' VALUES(1,-1,0,129079956640320000,0,"
76621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen          "129079956640320000,0,0,0,'r','r','r','r','r',0,0,0,1,0,0,NULL,NULL,"
76721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen          "NULL,NULL,X'',X'');"
76821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen      "INSERT INTO 'metas' VALUES(2,669,669,128976886618480000,"
76921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen          "128976886618480000,128976886618480000,128976886618480000,-2097152,4,"
77021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen          "'s_ID_2','s_ID_9','s_ID_9','s_ID_2','s_ID_2',0,0,1,0,0,1,"
77121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen          "'Deleted Item','Deleted Item',NULL,NULL,X'C28810220A16687474703A2F2F"
77221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen          "7777772E676F6F676C652E636F6D2F12084141534741534741',X'C28810260A1768"
77321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen          "7474703A2F2F7777772E676F6F676C652E636F6D2F32120B41534144474144474144"
77421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen          "47');"
77521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen      "INSERT INTO 'metas' VALUES(4,681,681,129002163642690000,"
77621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen          "129002163642690000,129002163642690000,129002163642690000,-3145728,3,"
77721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen          "'s_ID_4','s_ID_9','s_ID_9','s_ID_4','s_ID_4',0,0,1,0,0,1,"
77821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen          "'Welcome to Chromium','Welcome to Chromium',NULL,NULL,X'C28810350A31"
77921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen          "687474703A2F2F7777772E676F6F676C652E636F6D2F6368726F6D652F696E746C2F"
78021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen          "656E2F77656C636F6D652E68746D6C1200',X'C28810350A31687474703A2F2F7777"
78121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen          "772E676F6F676C652E636F6D2F6368726F6D652F696E746C2F656E2F77656C636F6D"
78221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen          "652E68746D6C1200');"
78321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen      "INSERT INTO 'metas' VALUES(5,677,677,129001555500000000,"
78421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen          "129001555500000000,129001555500000000,129001555500000000,1048576,7,"
78521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen          "'s_ID_5','s_ID_9','s_ID_9','s_ID_5','s_ID_5',0,0,1,0,0,1,'Google',"
78621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen          "'Google',NULL,NULL,X'C28810220A16687474703A2F2F7777772E676F6F676C652"
78721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen          "E636F6D2F12084147415347415347',X'C28810220A16687474703A2F2F7777772E6"
78821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen          "76F6F676C652E636F6D2F12084147464447415347');"
78921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen      "INSERT INTO 'metas' VALUES(6,694,694,129053976170000000,"
79021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen          "129053976170000000,129053976170000000,129053976170000000,-4194304,6,"
79121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen          "'s_ID_6','s_ID_9','s_ID_9','r','r',0,0,0,1,1,0,'The Internet',"
79221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen          "'The Internet',NULL,NULL,X'C2881000',X'C2881000');"
79321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen      "INSERT INTO 'metas' VALUES(7,663,663,128976864758480000,"
79421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen          "128976864758480000,128976864758480000,128976864758480000,1048576,0,"
79521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen          "'s_ID_7','r','r','r','r',0,0,0,1,1,0,'Google Chrome','Google Chrome'"
79621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen          ",'google_chrome',NULL,NULL,NULL);"
79721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen      "INSERT INTO 'metas' VALUES(8,664,664,128976864758480000,"
79821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen          "128976864758480000,128976864758480000,128976864758480000,1048576,0,"
79921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen          "'s_ID_8','s_ID_7','s_ID_7','r','r',0,0,0,1,1,0,'Bookmarks',"
80021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen          "'Bookmarks','google_chrome_bookmarks',NULL,X'C2881000',X'C2881000');"
80121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen      "INSERT INTO 'metas' VALUES(9,665,665,128976864758480000,"
80221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen          "128976864758480000,128976864758480000,128976864758480000,1048576,1,"
80321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen          "'s_ID_9','s_ID_8','s_ID_8','r','s_ID_10',0,0,0,1,1,0,'Bookmark Bar',"
80421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen          "'Bookmark Bar','bookmark_bar',NULL,X'C2881000',X'C2881000');"
80521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen      "INSERT INTO 'metas' VALUES(10,666,666,128976864758480000,"
80621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen          "128976864758480000,128976864758480000,128976864758480000,2097152,2,"
80721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen          "'s_ID_10','s_ID_8','s_ID_8','s_ID_9','r',0,0,0,1,1,0,"
80821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen          "'Other Bookmarks','Other Bookmarks','other_bookmarks',NULL,"
80921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen          "X'C2881000',X'C2881000');"
81021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen      "INSERT INTO 'metas' VALUES(11,683,683,129079956948440000,"
81121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen          "129079956948440000,129079956948440000,129079956948440000,-1048576,8,"
81221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen          "'s_ID_11','s_ID_6','s_ID_6','r','s_ID_13',0,0,0,0,0,0,"
81321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen          "'Home (The Chromium Projects)','Home (The Chromium Projects)',NULL,"
81421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen          "NULL,X'C28810220A18687474703A2F2F6465762E6368726F6D69756D2E6F72672F1"
81521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen          "206414741545741',X'C28810290A1D687474703A2F2F6465762E6368726F6D69756"
81621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen          "D2E6F72672F6F7468657212084146414756415346');"
81721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen      "INSERT INTO 'metas' VALUES(12,685,685,129079957513650000,"
81821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen          "129079957513650000,129079957513650000,129079957513650000,0,9,"
81921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen          "'s_ID_12','s_ID_6','s_ID_6','s_ID_13','s_ID_14',0,0,0,1,1,0,"
82021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen          "'Extra Bookmarks','Extra Bookmarks',NULL,NULL,X'C2881000',"
82121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen          "X'C2881000');"
82221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen      "INSERT INTO 'metas' VALUES(13,687,687,129079957985300000,"
82321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen          "129079957985300000,129079957985300000,129079957985300000,-917504,10,"
82421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen          "'s_ID_13','s_ID_6','s_ID_6','s_ID_11','s_ID_12',0,0,0,0,0,0,"
82521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen          "'ICANN | Internet Corporation for Assigned Names and Numbers',"
82621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen          "'ICANN | Internet Corporation for Assigned Names and Numbers',NULL,"
82721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen          "NULL,X'C28810240A15687474703A2F2F7777772E6963616E6E2E636F6D2F120B504"
82821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen          "E474158463041414646',X'C28810200A15687474703A2F2F7777772E6963616E6E2"
82921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen          "E636F6D2F120744414146415346');"
83021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen      "INSERT INTO 'metas' VALUES(14,692,692,129079958383000000,"
83121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen          "129079958383000000,129079958383000000,129079958383000000,1048576,11,"
83221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen          "'s_ID_14','s_ID_6','s_ID_6','s_ID_12','r',0,0,0,0,0,0,"
83321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen          "'The WebKit Open Source Project','The WebKit Open Source Project',"
83421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen          "NULL,NULL,""X'C288101A0A12687474703A2F2F7765626B69742E6F72672F120450"
83521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen          "4E4758',X'C288101C0A13687474703A2F2F7765626B69742E6F72672F781205504E"
83621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen          "473259');"
83721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen      "CREATE TABLE models (model_id BLOB primary key, "
83821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen          "last_download_timestamp INT, initial_sync_ended BOOLEAN default 0);"
83921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen      "INSERT INTO 'models' VALUES(X'C2881000',694,1);"
84021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen      "CREATE TABLE 'share_info' (id TEXT primary key, name TEXT, "
84121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen          "store_birthday TEXT, db_create_version TEXT, db_create_time INT, "
84221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen          "next_id INT default -2, cache_guid TEXT, "
84321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen          "notification_state BLOB);"
84421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen      "INSERT INTO 'share_info' VALUES('nick@chromium.org','nick@chromium.org',"
84521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen          "'c27e9f59-08ca-46f8-b0cc-f16a2ed778bb','Unknown',1263522064,-65542,"
84621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen          "'9010788312004066376x-6609234393368420856x',X'C2881000');"));
84721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  ASSERT_TRUE(connection.CommitTransaction());
84821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen}
84921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
85072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenvoid MigrationTest::SetUpVersion74Database() {
85172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  sql::Connection connection;
85272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  ASSERT_TRUE(connection.Open(GetDatabasePath()));
85372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  ASSERT_TRUE(connection.BeginTransaction());
85472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  ASSERT_TRUE(connection.Execute(
85572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      "CREATE TABLE share_version (id VARCHAR(128) primary key, data INT);"
85672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      "INSERT INTO 'share_version' VALUES('nick@chromium.org',74);"
85772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      "CREATE TABLE models (model_id BLOB primary key, last_download_timestamp"
85872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen          " INT, initial_sync_ended BOOLEAN default 0);"
85972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      "INSERT INTO 'models' VALUES(X'C2881000',694,1);"
86072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      "CREATE TABLE 'share_info' (id TEXT primary key, name TEXT, store_birthd"
86172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen          "ay TEXT, db_create_version TEXT, db_create_time INT, next_id INT de"
86272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen          "fault -2, cache_guid TEXT , notification_state BLOB, autofill_migra"
86372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen          "tion_state INT default 0, bookmarks_added_during_autofill_migration"
86472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen          " INT default 0, autofill_migration_time INT default 0, autofill_ent"
86572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen          "ries_added_during_migration INT default 0, autofill_profiles_added_"
86672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen          "during_migration INT default 0);"
86772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      "INSERT INTO 'share_info' VALUES('nick@chromium.org','nick@chromium.org'"
86872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen          ",'c27e9f59-08ca-46f8-b0cc-f16a2ed778bb','Unknown',1263522064,-65542"
86972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen          ",'9010788312004066376x-6609234393368420856x',NULL,0,0,0,0,0);"
87072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      "CREATE TABLE 'metas'(metahandle bigint primary key ON CONFLICT FAIL,bas"
87172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen          "e_version bigint default -1,server_version bigint default 0,mtime b"
87272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen          "igint default 0,server_mtime bigint default 0,ctime bigint default "
87372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen          "0,server_ctime bigint default 0,server_position_in_parent bigint de"
87472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen          "fault 0,local_external_id bigint default 0,id varchar(255) default "
87572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen          "'r',parent_id varchar(255) default 'r',server_parent_id varchar(255"
87672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen          ") default 'r',prev_id varchar(255) default 'r',next_id varchar(255)"
87772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen          " default 'r',is_unsynced bit default 0,is_unapplied_update bit defa"
87872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen          "ult 0,is_del bit default 0,is_dir bit default 0,server_is_dir bit d"
87972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen          "efault 0,server_is_del bit default 0,non_unique_name varchar,server"
88072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen          "_non_unique_name varchar(255),unique_server_tag varchar,unique_clie"
88172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen          "nt_tag varchar,specifics blob,server_specifics blob);"
88272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      "INSERT INTO 'metas' VALUES(1,-1,0,129079956640320000,0,1290799566403200"
88372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen          "00,0,0,0,'r','r','r','r','r',0,0,0,1,0,0,NULL,NULL,NULL,NULL,X'',X'"
88472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen          "');"
88572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      "INSERT INTO 'metas' VALUES(2,669,669,128976886618480000,128976886618480"
88672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen          "000,128976886618480000,128976886618480000,-2097152,4,'s_ID_2','s_ID"
88772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen          "_9','s_ID_9','s_ID_2','s_ID_2',0,0,1,0,0,1,'Deleted Item','Deleted "
88872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen          "Item',NULL,NULL,X'C28810220A16687474703A2F2F7777772E676F6F676C652E6"
88972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen          "36F6D2F12084141534741534741',X'C28810260A17687474703A2F2F7777772E67"
89072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen          "6F6F676C652E636F6D2F32120B4153414447414447414447');"
89172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      "INSERT INTO 'metas' VALUES(4,681,681,129002163642690000,129002163642690"
89272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen          "000,129002163642690000,129002163642690000,-3145728,3,'s_ID_4','s_ID"
89372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen          "_9','s_ID_9','s_ID_4','s_ID_4',0,0,1,0,0,1,'Welcome to Chromium','W"
89472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen          "elcome to Chromium',NULL,NULL,X'C28810350A31687474703A2F2F7777772E6"
89572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen          "76F6F676C652E636F6D2F6368726F6D652F696E746C2F656E2F77656C636F6D652E"
89672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen          "68746D6C1200',X'C28810350A31687474703A2F2F7777772E676F6F676C652E636"
89772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen          "F6D2F6368726F6D652F696E746C2F656E2F77656C636F6D652E68746D6C1200');"
89872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      "INSERT INTO 'metas' VALUES(5,677,677,129001555500000000,129001555500000"
89972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen          "000,129001555500000000,129001555500000000,1048576,7,'s_ID_5','s_ID_"
90072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen          "9','s_ID_9','s_ID_5','s_ID_5',0,0,1,0,0,1,'Google','Google',NULL,NU"
90172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen          "LL,X'C28810220A16687474703A2F2F7777772E676F6F676C652E636F6D2F120841"
90272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen          "47415347415347',X'C28810220A16687474703A2F2F7777772E676F6F676C652E6"
90372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen          "36F6D2F12084147464447415347');"
90472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      "INSERT INTO 'metas' VALUES(6,694,694,129053976170000000,129053976170000"
90572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen          "000,129053976170000000,129053976170000000,-4194304,6,'s_ID_6','s_ID"
90672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen          "_9','s_ID_9','r','r',0,0,0,1,1,0,'The Internet','The Internet',NULL"
90772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen          ",NULL,X'C2881000',X'C2881000');"
90872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      "INSERT INTO 'metas' VALUES(7,663,663,128976864758480000,128976864758480"
90972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen          "000,128976864758480000,128976864758480000,1048576,0,'s_ID_7','r','r"
91072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen          "','r','r',0,0,0,1,1,0,'Google Chrome','Google Chrome','google_chrom"
91172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen          "e',NULL,NULL,NULL);"
91272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      "INSERT INTO 'metas' VALUES(8,664,664,128976864758480000,128976864758480"
91372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen          "000,128976864758480000,128976864758480000,1048576,0,'s_ID_8','s_ID_"
91472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen          "7','s_ID_7','r','r',0,0,0,1,1,0,'Bookmarks','Bookmarks','google_chr"
91572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen          "ome_bookmarks',NULL,X'C2881000',X'C2881000');"
91672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      "INSERT INTO 'metas' VALUES(9,665,665,128976864758480000,128976864758480"
91772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen          "000,128976864758480000,128976864758480000,1048576,1,'s_ID_9','s_ID_"
91872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen          "8','s_ID_8','r','s_ID_10',0,0,0,1,1,0,'Bookmark Bar','Bookmark Bar'"
91972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen          ",'bookmark_bar',NULL,X'C2881000',X'C2881000');"
92072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      "INSERT INTO 'metas' VALUES(10,666,666,128976864758480000,12897686475848"
92172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen          "0000,128976864758480000,128976864758480000,2097152,2,'s_ID_10','s_I"
92272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen          "D_8','s_ID_8','s_ID_9','r',0,0,0,1,1,0,'Other Bookmarks','Other Boo"
92372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen          "kmarks','other_bookmarks',NULL,X'C2881000',X'C2881000');"
92472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      "INSERT INTO 'metas' VALUES(11,683,683,129079956948440000,12907995694844"
92572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen          "0000,129079956948440000,129079956948440000,-1048576,8,'s_ID_11','s_"
92672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen          "ID_6','s_ID_6','r','s_ID_13',0,0,0,0,0,0,'Home (The Chromium Projec"
92772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen          "ts)','Home (The Chromium Projects)',NULL,NULL,X'C28810220A186874747"
92872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen          "03A2F2F6465762E6368726F6D69756D2E6F72672F1206414741545741',X'C28810"
92972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen          "290A1D687474703A2F2F6465762E6368726F6D69756D2E6F72672F6F74686572120"
93072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen          "84146414756415346');"
93172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      "INSERT INTO 'metas' VALUES(12,685,685,129079957513650000,12907995751365"
93272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen          "0000,129079957513650000,129079957513650000,0,9,'s_ID_12','s_ID_6','"
93372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen          "s_ID_6','s_ID_13','s_ID_14',0,0,0,1,1,0,'Extra Bookmarks','Extra Bo"
93472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen          "okmarks',NULL,NULL,X'C2881000',X'C2881000');"
93572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      "INSERT INTO 'metas' VALUES(13,687,687,129079957985300000,12907995798530"
93672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen          "0000,129079957985300000,129079957985300000,-917504,10,'s_ID_13','s_"
93772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen          "ID_6','s_ID_6','s_ID_11','s_ID_12',0,0,0,0,0,0,'ICANN | Internet Co"
93872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen          "rporation for Assigned Names and Numbers','ICANN | Internet Corpora"
93972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen          "tion for Assigned Names and Numbers',NULL,NULL,X'C28810240A15687474"
94072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen          "703A2F2F7777772E6963616E6E2E636F6D2F120B504E474158463041414646',X'C"
94172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen          "28810200A15687474703A2F2F7777772E6963616E6E2E636F6D2F12074441414641"
94272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen          "5346');"
94372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      "INSERT INTO 'metas' VALUES(14,692,692,129079958383000000,12907995838300"
94472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen          "0000,129079958383000000,129079958383000000,1048576,11,'s_ID_14','s_"
94572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen          "ID_6','s_ID_6','s_ID_12','r',0,0,0,0,0,0,'The WebKit Open Source Pr"
94672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen          "oject','The WebKit Open Source Project',NULL,NULL,X'C288101A0A12687"
94772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen          "474703A2F2F7765626B69742E6F72672F1204504E4758',X'C288101C0A13687474"
94872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen          "703A2F2F7765626B69742E6F72672F781205504E473259');"
94972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      ));
95072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  ASSERT_TRUE(connection.CommitTransaction());
95172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen}
95272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
953c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(DirectoryBackingStoreTest, MigrateVersion67To68) {
954c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  SetUpVersion67Database();
955c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
956c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  {
957c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    sql::Connection connection;
958c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    ASSERT_TRUE(connection.Open(GetDatabasePath()));
959c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
960c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    // Columns existing before version 67.
961c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    ASSERT_TRUE(connection.DoesColumnExist("metas", "name"));
962c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    ASSERT_TRUE(connection.DoesColumnExist("metas", "unsanitized_name"));
963c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    ASSERT_TRUE(connection.DoesColumnExist("metas", "server_name"));
964c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
965c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
966c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  scoped_ptr<DirectoryBackingStore> dbs(
967c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new DirectoryBackingStore(GetUsername(), GetDatabasePath()));
968c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
969c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  dbs->BeginLoad();
970c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_FALSE(dbs->needs_column_refresh_);
971c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_TRUE(dbs->MigrateVersion67To68());
972c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_EQ(68, dbs->GetVersion());
973c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  dbs->EndLoad();
974c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_TRUE(dbs->needs_column_refresh_);
975c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
976c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
977c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(DirectoryBackingStoreTest, MigrateVersion68To69) {
978c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  SetUpVersion68Database();
979c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
980c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  scoped_ptr<DirectoryBackingStore> dbs(
981c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new DirectoryBackingStore(GetUsername(), GetDatabasePath()));
982c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
983c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  dbs->BeginLoad();
984c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_FALSE(dbs->needs_column_refresh_);
985c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_TRUE(dbs->MigrateVersion68To69());
986c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_EQ(69, dbs->GetVersion());
987c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  dbs->EndLoad();
988c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_TRUE(dbs->needs_column_refresh_);
989c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
990c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  sql::Connection connection;
991c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_TRUE(connection.Open(GetDatabasePath()));
992c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_TRUE(connection.DoesColumnExist("metas", "specifics"));
993c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_TRUE(connection.DoesColumnExist("metas", "server_specifics"));
994c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  sql::Statement s(connection.GetUniqueStatement("SELECT non_unique_name,"
995c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      "is_del, is_dir, id, specifics, server_specifics FROM metas "
996c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      "WHERE metahandle = 2"));
997c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_TRUE(s.Step());
998c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_EQ("Deleted Item", s.ColumnString(0));
999c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_TRUE(s.ColumnBool(1));
1000c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_FALSE(s.ColumnBool(2));
1001c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_EQ("s_ID_2", s.ColumnString(3));
1002c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  sync_pb::EntitySpecifics specifics;
1003c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  specifics.ParseFromArray(s.ColumnBlob(4), s.ColumnByteLength(4));
1004c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_TRUE(specifics.HasExtension(sync_pb::bookmark));
1005c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_EQ("http://www.google.com/",
1006c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      specifics.GetExtension(sync_pb::bookmark).url());
1007c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_EQ("AASGASGA", specifics.GetExtension(sync_pb::bookmark).favicon());
1008c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  specifics.ParseFromArray(s.ColumnBlob(5), s.ColumnByteLength(5));
1009c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_TRUE(specifics.HasExtension(sync_pb::bookmark));
1010c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_EQ("http://www.google.com/2",
1011c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      specifics.GetExtension(sync_pb::bookmark).url());
1012c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_EQ("ASADGADGADG", specifics.GetExtension(sync_pb::bookmark).favicon());
1013c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_FALSE(s.Step());
1014c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
1015c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1016c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(DirectoryBackingStoreTest, MigrateVersion69To70) {
1017c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  SetUpVersion69Database();
1018c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1019c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  {
1020c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    sql::Connection connection;
1021c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    ASSERT_TRUE(connection.Open(GetDatabasePath()));
1022c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1023c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    ASSERT_TRUE(connection.DoesColumnExist("metas", "singleton_tag"));
1024c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    ASSERT_FALSE(connection.DoesColumnExist("metas", "unique_server_tag"));
1025c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    ASSERT_FALSE(connection.DoesColumnExist("metas", "unique_client_tag"));
1026c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
1027c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1028c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  scoped_ptr<DirectoryBackingStore> dbs(
1029c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new DirectoryBackingStore(GetUsername(), GetDatabasePath()));
1030c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1031c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  dbs->BeginLoad();
1032c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_FALSE(dbs->needs_column_refresh_);
1033c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_TRUE(dbs->MigrateVersion69To70());
1034c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_EQ(70, dbs->GetVersion());
1035c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  dbs->EndLoad();
1036c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_TRUE(dbs->needs_column_refresh_);
1037c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1038c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  sql::Connection connection;
1039c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_TRUE(connection.Open(GetDatabasePath()));
1040c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1041c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE(connection.DoesColumnExist("metas", "unique_server_tag"));
1042c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE(connection.DoesColumnExist("metas", "unique_client_tag"));
1043c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  sql::Statement s(connection.GetUniqueStatement("SELECT id"
1044c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      " FROM metas WHERE unique_server_tag = 'google_chrome'"));
1045c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_TRUE(s.Step());
1046c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ("s_ID_7", s.ColumnString(0));
1047c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
1048c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1049c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(DirectoryBackingStoreTest, MigrateVersion70To71) {
1050c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  SetUpVersion70Database();
1051c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1052c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  {
1053c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    sql::Connection connection;
1054c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    ASSERT_TRUE(connection.Open(GetDatabasePath()));
1055c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    ASSERT_TRUE(
1056c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch        connection.DoesColumnExist("share_info", "last_sync_timestamp"));
1057c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    ASSERT_TRUE(
1058c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch        connection.DoesColumnExist("share_info", "initial_sync_ended"));
1059c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    ASSERT_FALSE(connection.DoesTableExist("models"));
1060c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
1061c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1062c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  scoped_ptr<DirectoryBackingStore> dbs(
1063c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new DirectoryBackingStore(GetUsername(), GetDatabasePath()));
1064c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1065c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  dbs->BeginLoad();
1066c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_FALSE(dbs->needs_column_refresh_);
1067c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_TRUE(dbs->MigrateVersion70To71());
1068c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_EQ(71, dbs->GetVersion());
1069c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  dbs->EndLoad();
1070c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_FALSE(dbs->needs_column_refresh_);
1071c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1072c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  sql::Connection connection;
1073c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_TRUE(connection.Open(GetDatabasePath()));
1074c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1075c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_FALSE(
1076c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      connection.DoesColumnExist("share_info", "last_sync_timestamp"));
1077c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_FALSE(
1078c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      connection.DoesColumnExist("share_info", "initial_sync_ended"));
1079c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_TRUE(connection.DoesTableExist("models"));
1080c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_TRUE(
1081c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      connection.DoesColumnExist("models", "initial_sync_ended"));
1082c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_TRUE(
1083c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      connection.DoesColumnExist("models", "last_download_timestamp"));
1084c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_TRUE(
1085c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      connection.DoesColumnExist("models", "model_id"));
1086c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1087c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  sql::Statement s(connection.GetUniqueStatement("SELECT model_id, "
1088c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      "initial_sync_ended, last_download_timestamp FROM models"));
1089c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_TRUE(s.Step());
1090c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  std::string model_id = s.ColumnString(0);
10913345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  EXPECT_EQ("C2881000", base::HexEncode(model_id.data(), model_id.size()))
1092c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      << "Model ID is expected to be the empty BookmarkSpecifics proto.";
109372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  EXPECT_TRUE(s.ColumnBool(1));
1094c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ(694, s.ColumnInt64(2));
1095c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_FALSE(s.Step());
1096c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
1097c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1098c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1099c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(DirectoryBackingStoreTest, MigrateVersion71To72) {
1100c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  SetUpVersion71Database();
1101c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1102c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  {
1103c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    sql::Connection connection;
1104c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    ASSERT_TRUE(connection.Open(GetDatabasePath()));
1105c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    ASSERT_TRUE(connection.DoesTableExist("extended_attributes"));
1106c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
1107c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1108c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  scoped_ptr<DirectoryBackingStore> dbs(
1109c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new DirectoryBackingStore(GetUsername(), GetDatabasePath()));
1110c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1111c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  dbs->BeginLoad();
1112c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_FALSE(dbs->needs_column_refresh_);
1113c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_TRUE(dbs->MigrateVersion71To72());
1114c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_EQ(72, dbs->GetVersion());
1115c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  dbs->EndLoad();
1116c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_FALSE(dbs->needs_column_refresh_);
1117c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1118c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  sql::Connection connection;
1119c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_TRUE(connection.Open(GetDatabasePath()));
1120c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_FALSE(connection.DoesTableExist("extended_attributes"));
1121c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
1122c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1123731df977c0511bca2206b5f333555b1205ff1f43Iain MerrickTEST_F(DirectoryBackingStoreTest, MigrateVersion72To73) {
1124731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  SetUpVersion72Database();
1125731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
1126731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  {
1127731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    sql::Connection connection;
1128731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    ASSERT_TRUE(connection.Open(GetDatabasePath()));
1129731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    ASSERT_FALSE(
1130731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick        connection.DoesColumnExist("share_info", "notification_state"));
1131731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  }
1132731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
1133731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  scoped_ptr<DirectoryBackingStore> dbs(
1134731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      new DirectoryBackingStore(GetUsername(), GetDatabasePath()));
1135731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
1136731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  dbs->BeginLoad();
1137731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  ASSERT_FALSE(dbs->needs_column_refresh_);
1138731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  ASSERT_TRUE(dbs->MigrateVersion72To73());
1139731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  ASSERT_EQ(73, dbs->GetVersion());
1140731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  dbs->EndLoad();
1141731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  ASSERT_FALSE(dbs->needs_column_refresh_);
1142731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
1143731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  sql::Connection connection;
1144731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  ASSERT_TRUE(connection.Open(GetDatabasePath()));
1145731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  ASSERT_TRUE(
1146731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      connection.DoesColumnExist("share_info", "notification_state"));
1147731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick}
1148731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
114921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian MonsenTEST_F(DirectoryBackingStoreTest, MigrateVersion73To74) {
115021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  SetUpVersion73Database();
115121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
115221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  {
115321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    sql::Connection connection;
115421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    ASSERT_TRUE(connection.Open(GetDatabasePath()));
115521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    ASSERT_FALSE(
115621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen        connection.DoesColumnExist("share_info", "autofill_migration_state"));
115721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    ASSERT_FALSE(
115821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen        connection.DoesColumnExist("share_info",
115921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen            "bookmarks_added_during_autofill_migration"));
116021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    ASSERT_FALSE(
116121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen        connection.DoesColumnExist("share_info", "autofill_migration_time"));
116221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    ASSERT_FALSE(
116321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen        connection.DoesColumnExist("share_info",
116421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen            "autofill_entries_added_during_migration"));
116521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
116621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    ASSERT_FALSE(
116721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen        connection.DoesColumnExist("share_info",
116821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen            "autofill_profiles_added_during_migration"));
116921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  }
117021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
117121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  scoped_ptr<DirectoryBackingStore> dbs(
117221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen      new DirectoryBackingStore(GetUsername(), GetDatabasePath()));
117321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
117421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  dbs->BeginLoad();
117521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  ASSERT_FALSE(dbs->needs_column_refresh_);
117621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  ASSERT_TRUE(dbs->MigrateVersion73To74());
117721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  ASSERT_EQ(74, dbs->GetVersion());
117821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  dbs->EndLoad();
117921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  ASSERT_FALSE(dbs->needs_column_refresh_);
118021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
118121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  sql::Connection connection;
118221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  ASSERT_TRUE(connection.Open(GetDatabasePath()));
118321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  ASSERT_TRUE(
118421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen      connection.DoesColumnExist("share_info", "autofill_migration_state"));
118521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  ASSERT_TRUE(
118621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen      connection.DoesColumnExist("share_info",
118721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen          "bookmarks_added_during_autofill_migration"));
118821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  ASSERT_TRUE(
118921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen      connection.DoesColumnExist("share_info", "autofill_migration_time"));
119021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  ASSERT_TRUE(
119121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen      connection.DoesColumnExist("share_info",
119221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen          "autofill_entries_added_during_migration"));
119321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
119421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  ASSERT_TRUE(
119521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen      connection.DoesColumnExist("share_info",
119621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen          "autofill_profiles_added_during_migration"));
119721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen}
119821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
119972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenTEST_F(DirectoryBackingStoreTest, MigrateVersion74To75) {
120072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  SetUpVersion74Database();
120172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
120272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  {
120372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    sql::Connection connection;
120472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    ASSERT_TRUE(connection.Open(GetDatabasePath()));
120572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    ASSERT_FALSE(connection.DoesColumnExist("models", "progress_marker"));
120672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    ASSERT_TRUE(connection.DoesColumnExist("models",
120772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen        "last_download_timestamp"));
120872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  }
120972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
121072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  scoped_ptr<DirectoryBackingStore> dbs(
121172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      new DirectoryBackingStore(GetUsername(), GetDatabasePath()));
121272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
121372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  dbs->BeginLoad();
121472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  ASSERT_FALSE(dbs->needs_column_refresh_);
121572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  ASSERT_TRUE(dbs->MigrateVersion74To75());
121672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  ASSERT_EQ(75, dbs->GetVersion());
121772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  dbs->EndLoad();
121872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  ASSERT_FALSE(dbs->needs_column_refresh_);
121972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
122072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  sql::Connection connection;
122172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  ASSERT_TRUE(connection.Open(GetDatabasePath()));
122272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
122372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  ASSERT_TRUE(connection.DoesColumnExist("models", "progress_marker"));
122472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  ASSERT_FALSE(connection.DoesColumnExist("models",
122572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      "last_download_timestamp"));
122672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen}
122772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
1228c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_P(MigrationTest, ToCurrentVersion) {
1229c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  switch (GetParam()) {
1230c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    case 67:
1231c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      SetUpVersion67Database();
1232c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      break;
1233c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    case 68:
1234c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      SetUpVersion68Database();
1235c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      break;
1236c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    case 69:
1237c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      SetUpVersion69Database();
1238c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      break;
1239c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    case 70:
1240c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      SetUpVersion70Database();
1241c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      break;
1242c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    case 71:
1243c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      SetUpVersion71Database();
1244c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      break;
1245731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    case 72:
1246731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      SetUpVersion72Database();
1247731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      break;
124821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    case 73:
124921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen      SetUpVersion73Database();
125021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen      break;
125172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    case 74:
125272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      SetUpVersion74Database();
125372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      break;
1254c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    default:
1255c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      // If you see this error, it may mean that you've increased the
1256c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      // database version number but you haven't finished adding unit tests
1257c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      // for the database migration code.  You need to need to supply a
1258c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      // SetUpVersionXXDatabase function with a dump of the test database
1259c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      // at the old schema.  Here's one way to do that:
1260c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      //   1. Start on a clean tree (with none of your pending schema changes).
1261c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      //   2. Set a breakpoint in this function and run the unit test.
1262c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      //   3. Allow this test to run to completion (step out of the call),
1263c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      //      without allowing ~MigrationTest to execute.
1264c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      //   4. Examine this->scoped_dir_ to determine the location of the
1265c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      //      test database (it is currently of the version you need).
1266c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      //   5. Dump this using the sqlite command line tool:
1267c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      //        > .output foo_dump.sql
1268c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      //        > .dump
1269c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      FAIL() << "Need to supply database dump for version " << GetParam();
1270c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
1271c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1272c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  scoped_ptr<DirectoryBackingStore> dbs(
1273c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new DirectoryBackingStore(GetUsername(), GetDatabasePath()));
1274c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1275c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  dbs->BeginLoad();
1276c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_TRUE(OPENED == dbs->InitializeTables());
1277c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_FALSE(dbs->needs_column_refresh_);
1278c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_EQ(kCurrentDBVersion, dbs->GetVersion());
1279c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1280c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  {
1281c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    sql::Connection connection;
1282c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    ASSERT_TRUE(connection.Open(GetDatabasePath()));
1283c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1284c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    // Columns deleted in Version 67.
1285c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    ASSERT_FALSE(connection.DoesColumnExist("metas", "name"));
1286c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    ASSERT_FALSE(connection.DoesColumnExist("metas", "unsanitized_name"));
1287c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    ASSERT_FALSE(connection.DoesColumnExist("metas", "server_name"));
1288c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1289c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    // Columns added in Version 68.
1290c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    ASSERT_TRUE(connection.DoesColumnExist("metas", "specifics"));
1291c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    ASSERT_TRUE(connection.DoesColumnExist("metas", "server_specifics"));
1292c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1293c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    // Columns deleted in Version 68.
1294c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    ASSERT_FALSE(connection.DoesColumnExist("metas", "is_bookmark_object"));
1295c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    ASSERT_FALSE(connection.DoesColumnExist("metas",
1296c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                            "server_is_bookmark_object"));
1297c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    ASSERT_FALSE(connection.DoesColumnExist("metas", "bookmark_favicon"));
1298c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    ASSERT_FALSE(connection.DoesColumnExist("metas", "bookmark_url"));
1299c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    ASSERT_FALSE(connection.DoesColumnExist("metas", "server_bookmark_url"));
1300c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1301c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    // Renamed a column in Version 70
1302c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    ASSERT_FALSE(connection.DoesColumnExist("metas", "singleton_tag"));
1303c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    ASSERT_TRUE(connection.DoesColumnExist("metas", "unique_server_tag"));
1304c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    ASSERT_TRUE(connection.DoesColumnExist("metas", "unique_client_tag"));
1305c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1306c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    // Removed extended attributes in Version 72.
1307c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    ASSERT_FALSE(connection.DoesTableExist("extended_attributes"));
1308731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
1309731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    // Columns added in Version 73.
1310731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    ASSERT_TRUE(connection.DoesColumnExist(
1311731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick        "share_info", "notification_state"));
131221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
131321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    // Columns added in version 74.
131421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    ASSERT_TRUE(connection.DoesColumnExist("share_info",
131521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen        "autofill_migration_state"));
131672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
131772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    // Column replaced in version 75.
131872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    ASSERT_TRUE(connection.DoesColumnExist("models", "progress_marker"));
131972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    ASSERT_FALSE(connection.DoesColumnExist("models",
132072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen        "last_download_timestamp"));
132172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  }
132272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  {
132372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    syncable::Directory::KernelLoadInfo dir_info;
132472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    dbs->LoadInfo(&dir_info);
132572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
132672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    // Check download_progress state (v75 migration)
132772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    ASSERT_EQ(694,
132872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen        dir_info.kernel_info.download_progress[syncable::BOOKMARKS]
132972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen        .timestamp_token_for_migration());
133072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    ASSERT_FALSE(
133172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen        dir_info.kernel_info.download_progress[syncable::BOOKMARKS]
133272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen        .has_token());
133372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    ASSERT_EQ(32904,
133472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen        dir_info.kernel_info.download_progress[syncable::BOOKMARKS]
133572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen        .data_type_id());
133672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    ASSERT_FALSE(
133772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen        dir_info.kernel_info.download_progress[syncable::THEMES]
133872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen        .has_timestamp_token_for_migration());
133972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    ASSERT_TRUE(
134072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen        dir_info.kernel_info.download_progress[syncable::THEMES]
134172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen        .has_token());
134272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    ASSERT_TRUE(
134372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen        dir_info.kernel_info.download_progress[syncable::THEMES]
134472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen        .token().empty());
134572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    ASSERT_EQ(41210,
134672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen        dir_info.kernel_info.download_progress[syncable::THEMES]
134772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen        .data_type_id());
1348c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
1349c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1350c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MetahandlesIndex index;
13513345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  STLElementDeleter<MetahandlesIndex> index_deleter(&index);
1352c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  dbs->LoadEntries(&index);
1353c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  dbs->EndLoad();
1354c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1355c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MetahandlesIndex::iterator it = index.begin();
1356c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_TRUE(it != index.end());
1357c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_EQ(1, (*it)->ref(META_HANDLE));
1358c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE((*it)->ref(ID).IsRoot());
1359c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1360c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_TRUE(++it != index.end()) << "Upgrade destroyed database contents.";
1361c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_EQ(2, (*it)->ref(META_HANDLE));
1362c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE((*it)->ref(IS_DEL));
1363c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE((*it)->ref(SERVER_IS_DEL));
1364c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE((*it)->ref(SPECIFICS).HasExtension(sync_pb::bookmark));
1365c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE((*it)->ref(SERVER_SPECIFICS).HasExtension(sync_pb::bookmark));
1366c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ("http://www.google.com/",
1367c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      (*it)->ref(SPECIFICS).GetExtension(sync_pb::bookmark).url());
1368c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ("AASGASGA",
1369c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      (*it)->ref(SPECIFICS).GetExtension(sync_pb::bookmark).favicon());
1370c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ("http://www.google.com/2",
1371c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      (*it)->ref(SERVER_SPECIFICS).GetExtension(sync_pb::bookmark).url());
1372c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ("ASADGADGADG",
1373c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      (*it)->ref(SERVER_SPECIFICS).GetExtension(sync_pb::bookmark).favicon());
1374c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ("", (*it)->ref(UNIQUE_SERVER_TAG));
1375c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ("Deleted Item", (*it)->ref(NON_UNIQUE_NAME));
1376c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ("Deleted Item", (*it)->ref(SERVER_NON_UNIQUE_NAME));
1377c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1378c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_TRUE(++it != index.end());
1379c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_EQ(4, (*it)->ref(META_HANDLE));
1380c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE((*it)->ref(IS_DEL));
1381c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE((*it)->ref(SERVER_IS_DEL));
1382c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1383c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_TRUE(++it != index.end());
1384c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_EQ(5, (*it)->ref(META_HANDLE));
1385c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE((*it)->ref(IS_DEL));
1386c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE((*it)->ref(SERVER_IS_DEL));
1387c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1388c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_TRUE(++it != index.end());
1389c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_EQ(6, (*it)->ref(META_HANDLE));
1390c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE((*it)->ref(IS_DIR));
1391c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE((*it)->ref(SERVER_IS_DIR));
1392c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_FALSE(
1393c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      (*it)->ref(SPECIFICS).GetExtension(sync_pb::bookmark).has_url());
1394c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_FALSE(
1395c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      (*it)->ref(SERVER_SPECIFICS).GetExtension(sync_pb::bookmark).has_url());
1396c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_FALSE(
1397c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      (*it)->ref(SPECIFICS).GetExtension(sync_pb::bookmark).has_favicon());
1398c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_FALSE((*it)->ref(SERVER_SPECIFICS).
1399c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      GetExtension(sync_pb::bookmark).has_favicon());
1400c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1401c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_TRUE(++it != index.end());
1402c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_EQ(7, (*it)->ref(META_HANDLE));
1403c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ("google_chrome", (*it)->ref(UNIQUE_SERVER_TAG));
1404c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_FALSE((*it)->ref(SPECIFICS).HasExtension(sync_pb::bookmark));
1405c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_FALSE((*it)->ref(SERVER_SPECIFICS).HasExtension(sync_pb::bookmark));
1406c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1407c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_TRUE(++it != index.end());
1408c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_EQ(8, (*it)->ref(META_HANDLE));
1409c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ("google_chrome_bookmarks", (*it)->ref(UNIQUE_SERVER_TAG));
1410c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE((*it)->ref(SPECIFICS).HasExtension(sync_pb::bookmark));
1411c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE((*it)->ref(SERVER_SPECIFICS).HasExtension(sync_pb::bookmark));
1412c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1413c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_TRUE(++it != index.end());
1414c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_EQ(9, (*it)->ref(META_HANDLE));
1415c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ("bookmark_bar", (*it)->ref(UNIQUE_SERVER_TAG));
1416c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE((*it)->ref(SPECIFICS).HasExtension(sync_pb::bookmark));
1417c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE((*it)->ref(SERVER_SPECIFICS).HasExtension(sync_pb::bookmark));
1418c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1419c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_TRUE(++it != index.end());
1420c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_EQ(10, (*it)->ref(META_HANDLE));
1421c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_FALSE((*it)->ref(IS_DEL));
1422c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE((*it)->ref(SPECIFICS).HasExtension(sync_pb::bookmark));
1423c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE((*it)->ref(SERVER_SPECIFICS).HasExtension(sync_pb::bookmark));
1424c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_FALSE((*it)->ref(SPECIFICS).GetExtension(sync_pb::bookmark).has_url());
1425c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_FALSE(
1426c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      (*it)->ref(SPECIFICS).GetExtension(sync_pb::bookmark).has_favicon());
1427c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_FALSE(
1428c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      (*it)->ref(SERVER_SPECIFICS).GetExtension(sync_pb::bookmark).has_url());
1429c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_FALSE((*it)->ref(SERVER_SPECIFICS).
1430c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      GetExtension(sync_pb::bookmark).has_favicon());
1431c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ("other_bookmarks", (*it)->ref(UNIQUE_SERVER_TAG));
1432c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ("Other Bookmarks", (*it)->ref(NON_UNIQUE_NAME));
1433c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ("Other Bookmarks", (*it)->ref(SERVER_NON_UNIQUE_NAME));
1434c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1435c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_TRUE(++it != index.end());
1436c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_EQ(11, (*it)->ref(META_HANDLE));
1437c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_FALSE((*it)->ref(IS_DEL));
1438c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_FALSE((*it)->ref(IS_DIR));
1439c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE((*it)->ref(SPECIFICS).HasExtension(sync_pb::bookmark));
1440c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE((*it)->ref(SERVER_SPECIFICS).HasExtension(sync_pb::bookmark));
1441c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ("http://dev.chromium.org/",
1442c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    (*it)->ref(SPECIFICS).GetExtension(sync_pb::bookmark).url());
1443c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ("AGATWA",
1444c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    (*it)->ref(SPECIFICS).GetExtension(sync_pb::bookmark).favicon());
1445c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ("http://dev.chromium.org/other",
1446c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    (*it)->ref(SERVER_SPECIFICS).GetExtension(sync_pb::bookmark).url());
1447c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ("AFAGVASF",
1448c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    (*it)->ref(SERVER_SPECIFICS).GetExtension(sync_pb::bookmark).favicon());
1449c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ("", (*it)->ref(UNIQUE_SERVER_TAG));
1450c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ("Home (The Chromium Projects)", (*it)->ref(NON_UNIQUE_NAME));
1451c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ("Home (The Chromium Projects)", (*it)->ref(SERVER_NON_UNIQUE_NAME));
1452c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1453c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_TRUE(++it != index.end());
1454c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_EQ(12, (*it)->ref(META_HANDLE));
1455c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_FALSE((*it)->ref(IS_DEL));
1456c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE((*it)->ref(IS_DIR));
1457c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ("Extra Bookmarks", (*it)->ref(NON_UNIQUE_NAME));
1458c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ("Extra Bookmarks", (*it)->ref(SERVER_NON_UNIQUE_NAME));
1459c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE((*it)->ref(SPECIFICS).HasExtension(sync_pb::bookmark));
1460c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE((*it)->ref(SERVER_SPECIFICS).HasExtension(sync_pb::bookmark));
1461c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_FALSE(
1462c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      (*it)->ref(SPECIFICS).GetExtension(sync_pb::bookmark).has_url());
1463c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_FALSE(
1464c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      (*it)->ref(SERVER_SPECIFICS).GetExtension(sync_pb::bookmark).has_url());
1465c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_FALSE(
1466c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      (*it)->ref(SPECIFICS).GetExtension(sync_pb::bookmark).has_favicon());
1467c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_FALSE((*it)->ref(SERVER_SPECIFICS).
1468c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      GetExtension(sync_pb::bookmark).has_favicon());
1469c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1470c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_TRUE(++it != index.end());
1471c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_EQ(13, (*it)->ref(META_HANDLE));
1472c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1473c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_TRUE(++it != index.end());
1474c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_EQ(14, (*it)->ref(META_HANDLE));
1475c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1476c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_TRUE(++it == index.end());
1477c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
1478c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1479c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochINSTANTIATE_TEST_CASE_P(DirectoryBackingStore, MigrationTest,
1480c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                        testing::Range(67, kCurrentDBVersion));
1481c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1482c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(DirectoryBackingStoreTest, ModelTypeIds) {
1483c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  for (int i = FIRST_REAL_MODEL_TYPE; i < MODEL_TYPE_COUNT; ++i) {
1484c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    std::string model_id =
1485c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch        DirectoryBackingStore::ModelTypeEnumToModelId(ModelTypeFromInt(i));
1486c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_EQ(i,
148772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen        DirectoryBackingStore::ModelIdToModelTypeEnum(model_id.data(),
148872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen                                                      model_id.size()));
1489c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
1490c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
1491c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1492c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(DirectoryBackingStoreTest, Corruption) {
1493c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  {
1494c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    scoped_ptr<DirectoryBackingStore> dbs(
1495c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch        new DirectoryBackingStore(GetUsername(), GetDatabasePath()));
1496c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_TRUE(dbs->BeginLoad());
1497c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
1498c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  std::string bad_data("BAD DATA");
1499c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE(file_util::WriteFile(GetDatabasePath(), bad_data.data(),
1500c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                   bad_data.size()));
1501c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  {
1502c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    scoped_ptr<DirectoryBackingStore> dbs(
1503c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch        new DirectoryBackingStore(GetUsername(), GetDatabasePath()));
1504c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1505c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    // In release mode, we expect the sync database to nuke itself and start
1506c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    // over if it detects invalid/corrupted data.
1507c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if defined(NDEBUG)
1508c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_TRUE(dbs->BeginLoad());
1509c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#else
1510c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_DEATH(dbs->BeginLoad(), "sqlite error");
1511c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif
1512c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
1513c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
1514c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1515c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(DirectoryBackingStoreTest, DeleteEntries) {
1516c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  SetUpCurrentDatabaseAndCheckVersion();
1517c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  scoped_ptr<DirectoryBackingStore> dbs(
1518c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new DirectoryBackingStore(GetUsername(), GetDatabasePath()));
1519c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  dbs->BeginLoad();
1520c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MetahandlesIndex index;
15213345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  STLElementDeleter<MetahandlesIndex> index_deleter(&index);
1522c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  dbs->LoadEntries(&index);
1523c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  size_t initial_size = index.size();
1524c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_LT(0U, initial_size) << "Test requires entries to delete.";
1525c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  int64 first_to_die = (*index.begin())->ref(META_HANDLE);
1526c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MetahandleSet to_delete;
1527c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  to_delete.insert(first_to_die);
1528c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE(dbs->DeleteEntries(to_delete));
1529c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
15303345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  STLDeleteElements(&index);
1531c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  dbs->LoadEntries(&index);
1532c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1533c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ(initial_size - 1, index.size());
1534c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  bool delete_failed = false;
1535c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  for (MetahandlesIndex::iterator it = index.begin(); it != index.end();
1536c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch       ++it) {
1537c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    if ((*it)->ref(META_HANDLE) == first_to_die) {
1538c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      delete_failed = true;
1539c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      break;
1540c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    }
1541c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
1542c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_FALSE(delete_failed);
1543c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1544c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  to_delete.clear();
1545c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  for (MetahandlesIndex::iterator it = index.begin(); it != index.end();
1546c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch       ++it) {
1547c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    to_delete.insert((*it)->ref(META_HANDLE));
1548c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
1549c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1550c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE(dbs->DeleteEntries(to_delete));
1551c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
15523345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  STLDeleteElements(&index);
1553c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  dbs->LoadEntries(&index);
1554c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ(0U, index.size());
1555c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1556c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  dbs->EndLoad();
1557c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  dbs->EndSave();
1558c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
1559c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1560c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}  // namespace syncable
1561