1 // Copyright 2022 The Chromium Authors
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/sqlite_result_code.h"
7 #include "base/test/gtest_util.h"
8 #include "base/test/metrics/histogram_tester.h"
9 #include "sql/sqlite_result_code_values.h"
10 #include "testing/gtest/include/gtest/gtest.h"
11 #include "third_party/sqlite/sqlite3.h"
17 TEST(SqliteResultCodeTest, ToSqliteResultCode_Success) {
18 EXPECT_EQ(SqliteResultCode::kOk, ToSqliteResultCode(SQLITE_OK));
19 EXPECT_EQ(SqliteResultCode::kDone, ToSqliteResultCode(SQLITE_DONE));
20 EXPECT_EQ(SqliteResultCode::kRow, ToSqliteResultCode(SQLITE_ROW));
23 TEST(SqliteResultCodeTest, ToSqliteResultCode_PrimaryErrorCodes) {
24 EXPECT_EQ(SqliteResultCode::kIo, ToSqliteResultCode(SQLITE_IOERR));
25 EXPECT_EQ(SqliteResultCode::kCorrupt, ToSqliteResultCode(SQLITE_CORRUPT));
26 EXPECT_EQ(SqliteResultCode::kConstraint,
27 ToSqliteResultCode(SQLITE_CONSTRAINT));
30 TEST(SqliteResultCodeTest, ToSqliteResultCode_ExtendedErrorCodes) {
31 EXPECT_EQ(SqliteResultCode::kIoRead, ToSqliteResultCode(SQLITE_IOERR_READ));
32 EXPECT_EQ(SqliteResultCode::kIoWrite, ToSqliteResultCode(SQLITE_IOERR_WRITE));
33 EXPECT_EQ(SqliteResultCode::kCorruptIndex,
34 ToSqliteResultCode(SQLITE_CORRUPT_INDEX));
35 EXPECT_EQ(SqliteResultCode::kConstraintUnique,
36 ToSqliteResultCode(SQLITE_CONSTRAINT_UNIQUE));
39 TEST(SqliteResultCodeTest, ToSqliteResultCode_MissingLowValue) {
40 EXPECT_DCHECK_DEATH_WITH(ToSqliteResultCode(-65536),
41 "Unsupported SQLite result code: -65536");
44 TEST(SqliteResultCodeTest, ToSqliteResultCode_MissingHighValue) {
45 EXPECT_DCHECK_DEATH_WITH(ToSqliteResultCode(65536),
46 "Unsupported SQLite result code: 65536");
49 TEST(SqliteResultCodeTest, ToSqliteResultCode_SqliteInternalError) {
51 EXPECT_DCHECK_DEATH_WITH(ToSqliteResultCode(SQLITE_INTERNAL),
52 "SQLite reported code marked for internal use: 2");
54 EXPECT_EQ(SqliteResultCode::kInternal, ToSqliteResultCode(SQLITE_INTERNAL));
58 TEST(SqliteResultCodeTest, ToSqliteResultCode_ChromeBugError) {
60 EXPECT_DCHECK_DEATH_WITH(
61 ToSqliteResultCode(SQLITE_NOTFOUND),
62 "SQLite reported code that should never show up in Chrome: 12");
64 EXPECT_EQ(SqliteResultCode::kNotFound, ToSqliteResultCode(SQLITE_NOTFOUND));
68 TEST(SqliteResultCodeTest, ToSqliteErrorCode_Success_Ok) {
69 EXPECT_DCHECK_DEATH_WITH(
70 ToSqliteErrorCode(SqliteResultCode::kOk),
71 "ToSqliteErrorCode called with non-error result code: 0");
74 TEST(SqliteResultCodeTest, ToSqliteErrorCode_Success_Done) {
75 EXPECT_DCHECK_DEATH_WITH(
76 ToSqliteErrorCode(SqliteResultCode::kDone),
77 "ToSqliteErrorCode called with non-error result code: 101");
80 TEST(SqliteResultCodeTest, ToSqliteErrorCode_Success_Row) {
81 EXPECT_DCHECK_DEATH_WITH(
82 ToSqliteErrorCode(SqliteResultCode::kRow),
83 "ToSqliteErrorCode called with non-error result code: 100");
86 TEST(SqliteResultCodeTest, ToSqliteErrorCode_PrimaryErrorCodes) {
87 EXPECT_EQ(SqliteErrorCode::kIo, ToSqliteErrorCode(SqliteResultCode::kIo));
88 EXPECT_EQ(SqliteErrorCode::kCorrupt,
89 ToSqliteErrorCode(SqliteResultCode::kCorrupt));
90 EXPECT_EQ(SqliteErrorCode::kConstraint,
91 ToSqliteErrorCode(SqliteResultCode::kConstraint));
94 TEST(SqliteResultCodeTest, ToSqliteErrorCode_ExtendedErrorCodes) {
95 EXPECT_EQ(SqliteErrorCode::kIoRead,
96 ToSqliteErrorCode(SqliteResultCode::kIoRead));
97 EXPECT_EQ(SqliteErrorCode::kIoWrite,
98 ToSqliteErrorCode(SqliteResultCode::kIoWrite));
99 EXPECT_EQ(SqliteErrorCode::kCorruptIndex,
100 ToSqliteErrorCode(SqliteResultCode::kCorruptIndex));
101 EXPECT_EQ(SqliteErrorCode::kConstraintUnique,
102 ToSqliteErrorCode(SqliteResultCode::kConstraintUnique));
105 TEST(SqliteResultCodeTest, ToSqliteErrorCode_SqliteInternalError) {
107 EXPECT_DCHECK_DEATH_WITH(ToSqliteErrorCode(SqliteResultCode::kInternal),
108 "SQLite reported code marked for internal use: 2");
110 EXPECT_EQ(SqliteErrorCode::kInternal,
111 ToSqliteErrorCode(SqliteResultCode::kInternal));
115 TEST(SqliteResultCodeTest, ToSqliteErrorCode_ChromeBugError) {
117 EXPECT_DCHECK_DEATH_WITH(
118 ToSqliteErrorCode(SqliteResultCode::kNotFound),
119 "SQLite reported code that should never show up in Chrome: 12");
121 EXPECT_EQ(SqliteErrorCode::kNotFound,
122 ToSqliteErrorCode(SqliteResultCode::kNotFound));
126 TEST(SqliteResultCodeTest, ToSqliteErrorCode_Success) {
127 EXPECT_TRUE(IsSqliteSuccessCode(SqliteResultCode::kOk));
128 EXPECT_TRUE(IsSqliteSuccessCode(SqliteResultCode::kDone));
129 EXPECT_TRUE(IsSqliteSuccessCode(SqliteResultCode::kRow));
132 TEST(SqliteResultCodeTest, IsSqliteSuccessCode_PrimaryErrorCodes) {
133 EXPECT_FALSE(IsSqliteSuccessCode(SqliteResultCode::kIo));
134 EXPECT_FALSE(IsSqliteSuccessCode(SqliteResultCode::kCorrupt));
135 EXPECT_FALSE(IsSqliteSuccessCode(SqliteResultCode::kConstraint));
138 TEST(SqliteResultCodeTest, IsSqliteSuccessCode_ExtendedErrorCodes) {
139 EXPECT_FALSE(IsSqliteSuccessCode(SqliteResultCode::kIoRead));
140 EXPECT_FALSE(IsSqliteSuccessCode(SqliteResultCode::kIoWrite));
141 EXPECT_FALSE(IsSqliteSuccessCode(SqliteResultCode::kCorruptIndex));
142 EXPECT_FALSE(IsSqliteSuccessCode(SqliteResultCode::kConstraintUnique));
145 TEST(SqliteResultCodeTest, IsSqliteSuccessCode_SqliteInternalError) {
147 EXPECT_DCHECK_DEATH_WITH(IsSqliteSuccessCode(SqliteResultCode::kInternal),
148 "SQLite reported code marked for internal use: 2");
150 EXPECT_FALSE(IsSqliteSuccessCode(SqliteResultCode::kInternal));
154 TEST(SqliteResultCodeTest, IsSqliteSuccessCode_ChromeBugError) {
156 EXPECT_DCHECK_DEATH_WITH(
157 IsSqliteSuccessCode(SqliteResultCode::kNotFound),
158 "SQLite reported code that should never show up in Chrome: 12");
160 EXPECT_FALSE(IsSqliteSuccessCode(SqliteResultCode::kNotFound));
164 TEST(SqliteResultCodeTest, ToSqliteLoggedResultCode_Success) {
165 EXPECT_EQ(SqliteLoggedResultCode::kNoError,
166 ToSqliteLoggedResultCode(SQLITE_OK));
167 EXPECT_EQ(SqliteLoggedResultCode::kNoError,
168 ToSqliteLoggedResultCode(SQLITE_DONE));
169 EXPECT_EQ(SqliteLoggedResultCode::kNoError,
170 ToSqliteLoggedResultCode(SQLITE_ROW));
173 TEST(SqliteResultCodeTest, ToSqliteLoggedResultCode_PrimaryErrorCodes) {
174 EXPECT_EQ(SqliteLoggedResultCode::kIo,
175 ToSqliteLoggedResultCode(SQLITE_IOERR));
176 EXPECT_EQ(SqliteLoggedResultCode::kCorrupt,
177 ToSqliteLoggedResultCode(SQLITE_CORRUPT));
178 EXPECT_EQ(SqliteLoggedResultCode::kConstraint,
179 ToSqliteLoggedResultCode(SQLITE_CONSTRAINT));
182 TEST(SqliteResultCodeTest, ToSqliteLoggedResultCode_ExtendedErrorCodes) {
183 EXPECT_EQ(SqliteLoggedResultCode::kIoRead,
184 ToSqliteLoggedResultCode(SQLITE_IOERR_READ));
185 EXPECT_EQ(SqliteLoggedResultCode::kIoWrite,
186 ToSqliteLoggedResultCode(SQLITE_IOERR_WRITE));
187 EXPECT_EQ(SqliteLoggedResultCode::kCorruptIndex,
188 ToSqliteLoggedResultCode(SQLITE_CORRUPT_INDEX));
189 EXPECT_EQ(SqliteLoggedResultCode::kConstraintUnique,
190 ToSqliteLoggedResultCode(SQLITE_CONSTRAINT_UNIQUE));
193 TEST(SqliteResultCodeTest, ToSqliteLoggedResultCode_MissingLowValue) {
195 EXPECT_DCHECK_DEATH_WITH(ToSqliteLoggedResultCode(-65536),
196 "Unsupported SQLite result code: -65536");
198 EXPECT_EQ(SqliteLoggedResultCode::kUnusedChrome,
199 ToSqliteLoggedResultCode(-65536));
203 TEST(SqliteResultCodeTest, ToSqliteLoggedResultCode_MissingHighValue) {
205 EXPECT_DCHECK_DEATH_WITH(ToSqliteLoggedResultCode(65536),
206 "Unsupported SQLite result code: 65536");
208 EXPECT_EQ(SqliteLoggedResultCode::kUnusedChrome,
209 ToSqliteLoggedResultCode(65536));
213 TEST(SqliteResultCodeTest, ToSqliteLoggedResultCode_SqliteInternalError) {
215 EXPECT_DCHECK_DEATH_WITH(ToSqliteLoggedResultCode(SQLITE_INTERNAL),
216 "SQLite reported code marked for internal use: 2");
218 EXPECT_EQ(SqliteLoggedResultCode::kUnusedSqlite,
219 ToSqliteLoggedResultCode(SQLITE_INTERNAL));
223 TEST(SqliteResultCodeTest, ToSqliteLoggedResultCode_ChromeBugError) {
225 EXPECT_DCHECK_DEATH_WITH(
226 ToSqliteLoggedResultCode(SQLITE_NOTFOUND),
227 "SQLite reported code that should never show up in Chrome: 12");
229 EXPECT_EQ(SqliteLoggedResultCode::kUnusedChrome,
230 ToSqliteLoggedResultCode(SQLITE_NOTFOUND));
234 TEST(SqliteResultCodeTest, UmaHistogramSqliteResult_Success) {
235 base::HistogramTester histogram_tester;
236 UmaHistogramSqliteResult("Sql.ResultTest", SQLITE_OK);
237 histogram_tester.ExpectTotalCount("Sql.ResultTest", 1);
238 histogram_tester.ExpectBucketCount("Sql.ResultTest",
239 SqliteLoggedResultCode::kNoError, 1);
242 TEST(SqliteResultCodeTest, UmaHistogramSqliteResult_PrimaryErrorCode) {
243 base::HistogramTester histogram_tester;
244 UmaHistogramSqliteResult("Sql.ResultTest", SQLITE_CORRUPT);
245 histogram_tester.ExpectTotalCount("Sql.ResultTest", 1);
246 histogram_tester.ExpectBucketCount("Sql.ResultTest",
247 SqliteLoggedResultCode::kCorrupt, 1);
250 TEST(SqliteResultCodeTest, UmaHistogramSqliteResult_ExtendedErrorCode) {
251 base::HistogramTester histogram_tester;
252 UmaHistogramSqliteResult("Sql.ResultTest", SQLITE_CORRUPT_INDEX);
253 histogram_tester.ExpectTotalCount("Sql.ResultTest", 1);
254 histogram_tester.ExpectBucketCount("Sql.ResultTest",
255 SqliteLoggedResultCode::kCorruptIndex, 1);
258 TEST(SqliteResultCodeTest, CheckMapping) {
259 CheckSqliteLoggedResultCodeForTesting();