1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "sql/meta_table.h"
7 #include "base/files/file_path.h"
8 #include "base/files/scoped_temp_dir.h"
9 #include "sql/connection.h"
10 #include "sql/statement.h"
11 #include "testing/gtest/include/gtest/gtest.h"
15 class SQLMetaTableTest
: public testing::Test
{
17 virtual void SetUp() {
18 ASSERT_TRUE(temp_dir_
.CreateUniqueTempDir());
19 ASSERT_TRUE(db_
.Open(temp_dir_
.path().AppendASCII("SQLMetaTableTest.db")));
22 virtual void TearDown() {
26 sql::Connection
& db() { return db_
; }
29 base::ScopedTempDir temp_dir_
;
33 TEST_F(SQLMetaTableTest
, DoesTableExist
) {
34 EXPECT_FALSE(sql::MetaTable::DoesTableExist(&db()));
37 sql::MetaTable meta_table
;
38 EXPECT_TRUE(meta_table
.Init(&db(), 1, 1));
41 EXPECT_TRUE(sql::MetaTable::DoesTableExist(&db()));
44 TEST_F(SQLMetaTableTest
, VersionNumber
) {
45 // Compatibility versions one less than the main versions to make
46 // sure the values aren't being crossed with each other.
47 const int kVersionFirst
= 2;
48 const int kCompatVersionFirst
= kVersionFirst
- 1;
49 const int kVersionSecond
= 4;
50 const int kCompatVersionSecond
= kVersionSecond
- 1;
51 const int kVersionThird
= 6;
52 const int kCompatVersionThird
= kVersionThird
- 1;
54 // First Init() sets the version info as expected.
56 sql::MetaTable meta_table
;
57 EXPECT_TRUE(meta_table
.Init(&db(), kVersionFirst
, kCompatVersionFirst
));
58 EXPECT_EQ(kVersionFirst
, meta_table
.GetVersionNumber());
59 EXPECT_EQ(kCompatVersionFirst
, meta_table
.GetCompatibleVersionNumber());
62 // Second Init() does not change the version info.
64 sql::MetaTable meta_table
;
65 EXPECT_TRUE(meta_table
.Init(&db(), kVersionSecond
, kCompatVersionSecond
));
66 EXPECT_EQ(kVersionFirst
, meta_table
.GetVersionNumber());
67 EXPECT_EQ(kCompatVersionFirst
, meta_table
.GetCompatibleVersionNumber());
69 meta_table
.SetVersionNumber(kVersionSecond
);
70 meta_table
.SetCompatibleVersionNumber(kCompatVersionSecond
);
73 // Version info from Set*() calls is seen.
75 sql::MetaTable meta_table
;
76 EXPECT_TRUE(meta_table
.Init(&db(), kVersionThird
, kCompatVersionThird
));
77 EXPECT_EQ(kVersionSecond
, meta_table
.GetVersionNumber());
78 EXPECT_EQ(kCompatVersionSecond
, meta_table
.GetCompatibleVersionNumber());
82 TEST_F(SQLMetaTableTest
, StringValue
) {
83 const char kKey
[] = "String Key";
84 const std::string
kFirstValue("First Value");
85 const std::string
kSecondValue("Second Value");
87 // Initially, the value isn't there until set.
89 sql::MetaTable meta_table
;
90 EXPECT_TRUE(meta_table
.Init(&db(), 1, 1));
93 EXPECT_FALSE(meta_table
.GetValue(kKey
, &value
));
95 EXPECT_TRUE(meta_table
.SetValue(kKey
, kFirstValue
));
96 EXPECT_TRUE(meta_table
.GetValue(kKey
, &value
));
97 EXPECT_EQ(kFirstValue
, value
);
100 // Value is persistent across different instances.
102 sql::MetaTable meta_table
;
103 EXPECT_TRUE(meta_table
.Init(&db(), 1, 1));
106 EXPECT_TRUE(meta_table
.GetValue(kKey
, &value
));
107 EXPECT_EQ(kFirstValue
, value
);
109 EXPECT_TRUE(meta_table
.SetValue(kKey
, kSecondValue
));
112 // Existing value was successfully changed.
114 sql::MetaTable meta_table
;
115 EXPECT_TRUE(meta_table
.Init(&db(), 1, 1));
118 EXPECT_TRUE(meta_table
.GetValue(kKey
, &value
));
119 EXPECT_EQ(kSecondValue
, value
);
123 TEST_F(SQLMetaTableTest
, IntValue
) {
124 const char kKey
[] = "Int Key";
125 const int kFirstValue
= 17;
126 const int kSecondValue
= 23;
128 // Initially, the value isn't there until set.
130 sql::MetaTable meta_table
;
131 EXPECT_TRUE(meta_table
.Init(&db(), 1, 1));
134 EXPECT_FALSE(meta_table
.GetValue(kKey
, &value
));
136 EXPECT_TRUE(meta_table
.SetValue(kKey
, kFirstValue
));
137 EXPECT_TRUE(meta_table
.GetValue(kKey
, &value
));
138 EXPECT_EQ(kFirstValue
, value
);
141 // Value is persistent across different instances.
143 sql::MetaTable meta_table
;
144 EXPECT_TRUE(meta_table
.Init(&db(), 1, 1));
147 EXPECT_TRUE(meta_table
.GetValue(kKey
, &value
));
148 EXPECT_EQ(kFirstValue
, value
);
150 EXPECT_TRUE(meta_table
.SetValue(kKey
, kSecondValue
));
153 // Existing value was successfully changed.
155 sql::MetaTable meta_table
;
156 EXPECT_TRUE(meta_table
.Init(&db(), 1, 1));
159 EXPECT_TRUE(meta_table
.GetValue(kKey
, &value
));
160 EXPECT_EQ(kSecondValue
, value
);
164 TEST_F(SQLMetaTableTest
, Int64Value
) {
165 const char kKey
[] = "Int Key";
166 const int64 kFirstValue
= GG_LONGLONG(5000000017);
167 const int64 kSecondValue
= GG_LONGLONG(5000000023);
169 // Initially, the value isn't there until set.
171 sql::MetaTable meta_table
;
172 EXPECT_TRUE(meta_table
.Init(&db(), 1, 1));
175 EXPECT_FALSE(meta_table
.GetValue(kKey
, &value
));
177 EXPECT_TRUE(meta_table
.SetValue(kKey
, kFirstValue
));
178 EXPECT_TRUE(meta_table
.GetValue(kKey
, &value
));
179 EXPECT_EQ(kFirstValue
, value
);
182 // Value is persistent across different instances.
184 sql::MetaTable meta_table
;
185 EXPECT_TRUE(meta_table
.Init(&db(), 1, 1));
188 EXPECT_TRUE(meta_table
.GetValue(kKey
, &value
));
189 EXPECT_EQ(kFirstValue
, value
);
191 EXPECT_TRUE(meta_table
.SetValue(kKey
, kSecondValue
));
194 // Existing value was successfully changed.
196 sql::MetaTable meta_table
;
197 EXPECT_TRUE(meta_table
.Init(&db(), 1, 1));
200 EXPECT_TRUE(meta_table
.GetValue(kKey
, &value
));
201 EXPECT_EQ(kSecondValue
, value
);
205 TEST_F(SQLMetaTableTest
, DeleteKey
) {
206 const char kKey
[] = "String Key";
207 const std::string
kValue("String Value");
209 sql::MetaTable meta_table
;
210 EXPECT_TRUE(meta_table
.Init(&db(), 1, 1));
212 // Value isn't present.
214 EXPECT_FALSE(meta_table
.GetValue(kKey
, &value
));
216 // Now value is present.
217 EXPECT_TRUE(meta_table
.SetValue(kKey
, kValue
));
218 EXPECT_TRUE(meta_table
.GetValue(kKey
, &value
));
219 EXPECT_EQ(kValue
, value
);
221 // After delete value isn't present.
222 EXPECT_TRUE(meta_table
.DeleteKey(kKey
));
223 EXPECT_FALSE(meta_table
.GetValue(kKey
, &value
));