123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264 |
- // Copyright 2022 The Chromium Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style license that can be
- // found in the LICENSE file.
- #include "sql/sqlite_result_code.h"
- #include "base/test/gtest_util.h"
- #include "base/test/metrics/histogram_tester.h"
- #include "sql/sqlite_result_code_values.h"
- #include "testing/gtest/include/gtest/gtest.h"
- #include "third_party/sqlite/sqlite3.h"
- namespace sql {
- namespace {
- TEST(SqliteResultCodeTest, ToSqliteResultCode_Success) {
- EXPECT_EQ(SqliteResultCode::kOk, ToSqliteResultCode(SQLITE_OK));
- EXPECT_EQ(SqliteResultCode::kDone, ToSqliteResultCode(SQLITE_DONE));
- EXPECT_EQ(SqliteResultCode::kRow, ToSqliteResultCode(SQLITE_ROW));
- }
- TEST(SqliteResultCodeTest, ToSqliteResultCode_PrimaryErrorCodes) {
- EXPECT_EQ(SqliteResultCode::kIo, ToSqliteResultCode(SQLITE_IOERR));
- EXPECT_EQ(SqliteResultCode::kCorrupt, ToSqliteResultCode(SQLITE_CORRUPT));
- EXPECT_EQ(SqliteResultCode::kConstraint,
- ToSqliteResultCode(SQLITE_CONSTRAINT));
- }
- TEST(SqliteResultCodeTest, ToSqliteResultCode_ExtendedErrorCodes) {
- EXPECT_EQ(SqliteResultCode::kIoRead, ToSqliteResultCode(SQLITE_IOERR_READ));
- EXPECT_EQ(SqliteResultCode::kIoWrite, ToSqliteResultCode(SQLITE_IOERR_WRITE));
- EXPECT_EQ(SqliteResultCode::kCorruptIndex,
- ToSqliteResultCode(SQLITE_CORRUPT_INDEX));
- EXPECT_EQ(SqliteResultCode::kConstraintUnique,
- ToSqliteResultCode(SQLITE_CONSTRAINT_UNIQUE));
- }
- TEST(SqliteResultCodeTest, ToSqliteResultCode_MissingLowValue) {
- EXPECT_DCHECK_DEATH_WITH(ToSqliteResultCode(-65536),
- "Unsupported SQLite result code: -65536");
- }
- TEST(SqliteResultCodeTest, ToSqliteResultCode_MissingHighValue) {
- EXPECT_DCHECK_DEATH_WITH(ToSqliteResultCode(65536),
- "Unsupported SQLite result code: 65536");
- }
- TEST(SqliteResultCodeTest, ToSqliteResultCode_SqliteInternalError) {
- #if DCHECK_IS_ON()
- EXPECT_DCHECK_DEATH_WITH(ToSqliteResultCode(SQLITE_INTERNAL),
- "SQLite reported code marked for internal use: 2");
- #else
- EXPECT_EQ(SqliteResultCode::kInternal, ToSqliteResultCode(SQLITE_INTERNAL));
- #endif
- }
- TEST(SqliteResultCodeTest, ToSqliteResultCode_ChromeBugError) {
- #if DCHECK_IS_ON()
- EXPECT_DCHECK_DEATH_WITH(
- ToSqliteResultCode(SQLITE_NOTFOUND),
- "SQLite reported code that should never show up in Chrome: 12");
- #else
- EXPECT_EQ(SqliteResultCode::kNotFound, ToSqliteResultCode(SQLITE_NOTFOUND));
- #endif
- }
- TEST(SqliteResultCodeTest, ToSqliteErrorCode_Success_Ok) {
- EXPECT_DCHECK_DEATH_WITH(
- ToSqliteErrorCode(SqliteResultCode::kOk),
- "ToSqliteErrorCode called with non-error result code: 0");
- }
- TEST(SqliteResultCodeTest, ToSqliteErrorCode_Success_Done) {
- EXPECT_DCHECK_DEATH_WITH(
- ToSqliteErrorCode(SqliteResultCode::kDone),
- "ToSqliteErrorCode called with non-error result code: 101");
- }
- TEST(SqliteResultCodeTest, ToSqliteErrorCode_Success_Row) {
- EXPECT_DCHECK_DEATH_WITH(
- ToSqliteErrorCode(SqliteResultCode::kRow),
- "ToSqliteErrorCode called with non-error result code: 100");
- }
- TEST(SqliteResultCodeTest, ToSqliteErrorCode_PrimaryErrorCodes) {
- EXPECT_EQ(SqliteErrorCode::kIo, ToSqliteErrorCode(SqliteResultCode::kIo));
- EXPECT_EQ(SqliteErrorCode::kCorrupt,
- ToSqliteErrorCode(SqliteResultCode::kCorrupt));
- EXPECT_EQ(SqliteErrorCode::kConstraint,
- ToSqliteErrorCode(SqliteResultCode::kConstraint));
- }
- TEST(SqliteResultCodeTest, ToSqliteErrorCode_ExtendedErrorCodes) {
- EXPECT_EQ(SqliteErrorCode::kIoRead,
- ToSqliteErrorCode(SqliteResultCode::kIoRead));
- EXPECT_EQ(SqliteErrorCode::kIoWrite,
- ToSqliteErrorCode(SqliteResultCode::kIoWrite));
- EXPECT_EQ(SqliteErrorCode::kCorruptIndex,
- ToSqliteErrorCode(SqliteResultCode::kCorruptIndex));
- EXPECT_EQ(SqliteErrorCode::kConstraintUnique,
- ToSqliteErrorCode(SqliteResultCode::kConstraintUnique));
- }
- TEST(SqliteResultCodeTest, ToSqliteErrorCode_SqliteInternalError) {
- #if DCHECK_IS_ON()
- EXPECT_DCHECK_DEATH_WITH(ToSqliteErrorCode(SqliteResultCode::kInternal),
- "SQLite reported code marked for internal use: 2");
- #else
- EXPECT_EQ(SqliteErrorCode::kInternal,
- ToSqliteErrorCode(SqliteResultCode::kInternal));
- #endif
- }
- TEST(SqliteResultCodeTest, ToSqliteErrorCode_ChromeBugError) {
- #if DCHECK_IS_ON()
- EXPECT_DCHECK_DEATH_WITH(
- ToSqliteErrorCode(SqliteResultCode::kNotFound),
- "SQLite reported code that should never show up in Chrome: 12");
- #else
- EXPECT_EQ(SqliteErrorCode::kNotFound,
- ToSqliteErrorCode(SqliteResultCode::kNotFound));
- #endif
- }
- TEST(SqliteResultCodeTest, ToSqliteErrorCode_Success) {
- EXPECT_TRUE(IsSqliteSuccessCode(SqliteResultCode::kOk));
- EXPECT_TRUE(IsSqliteSuccessCode(SqliteResultCode::kDone));
- EXPECT_TRUE(IsSqliteSuccessCode(SqliteResultCode::kRow));
- }
- TEST(SqliteResultCodeTest, IsSqliteSuccessCode_PrimaryErrorCodes) {
- EXPECT_FALSE(IsSqliteSuccessCode(SqliteResultCode::kIo));
- EXPECT_FALSE(IsSqliteSuccessCode(SqliteResultCode::kCorrupt));
- EXPECT_FALSE(IsSqliteSuccessCode(SqliteResultCode::kConstraint));
- }
- TEST(SqliteResultCodeTest, IsSqliteSuccessCode_ExtendedErrorCodes) {
- EXPECT_FALSE(IsSqliteSuccessCode(SqliteResultCode::kIoRead));
- EXPECT_FALSE(IsSqliteSuccessCode(SqliteResultCode::kIoWrite));
- EXPECT_FALSE(IsSqliteSuccessCode(SqliteResultCode::kCorruptIndex));
- EXPECT_FALSE(IsSqliteSuccessCode(SqliteResultCode::kConstraintUnique));
- }
- TEST(SqliteResultCodeTest, IsSqliteSuccessCode_SqliteInternalError) {
- #if DCHECK_IS_ON()
- EXPECT_DCHECK_DEATH_WITH(IsSqliteSuccessCode(SqliteResultCode::kInternal),
- "SQLite reported code marked for internal use: 2");
- #else
- EXPECT_FALSE(IsSqliteSuccessCode(SqliteResultCode::kInternal));
- #endif
- }
- TEST(SqliteResultCodeTest, IsSqliteSuccessCode_ChromeBugError) {
- #if DCHECK_IS_ON()
- EXPECT_DCHECK_DEATH_WITH(
- IsSqliteSuccessCode(SqliteResultCode::kNotFound),
- "SQLite reported code that should never show up in Chrome: 12");
- #else
- EXPECT_FALSE(IsSqliteSuccessCode(SqliteResultCode::kNotFound));
- #endif
- }
- TEST(SqliteResultCodeTest, ToSqliteLoggedResultCode_Success) {
- EXPECT_EQ(SqliteLoggedResultCode::kNoError,
- ToSqliteLoggedResultCode(SQLITE_OK));
- EXPECT_EQ(SqliteLoggedResultCode::kNoError,
- ToSqliteLoggedResultCode(SQLITE_DONE));
- EXPECT_EQ(SqliteLoggedResultCode::kNoError,
- ToSqliteLoggedResultCode(SQLITE_ROW));
- }
- TEST(SqliteResultCodeTest, ToSqliteLoggedResultCode_PrimaryErrorCodes) {
- EXPECT_EQ(SqliteLoggedResultCode::kIo,
- ToSqliteLoggedResultCode(SQLITE_IOERR));
- EXPECT_EQ(SqliteLoggedResultCode::kCorrupt,
- ToSqliteLoggedResultCode(SQLITE_CORRUPT));
- EXPECT_EQ(SqliteLoggedResultCode::kConstraint,
- ToSqliteLoggedResultCode(SQLITE_CONSTRAINT));
- }
- TEST(SqliteResultCodeTest, ToSqliteLoggedResultCode_ExtendedErrorCodes) {
- EXPECT_EQ(SqliteLoggedResultCode::kIoRead,
- ToSqliteLoggedResultCode(SQLITE_IOERR_READ));
- EXPECT_EQ(SqliteLoggedResultCode::kIoWrite,
- ToSqliteLoggedResultCode(SQLITE_IOERR_WRITE));
- EXPECT_EQ(SqliteLoggedResultCode::kCorruptIndex,
- ToSqliteLoggedResultCode(SQLITE_CORRUPT_INDEX));
- EXPECT_EQ(SqliteLoggedResultCode::kConstraintUnique,
- ToSqliteLoggedResultCode(SQLITE_CONSTRAINT_UNIQUE));
- }
- TEST(SqliteResultCodeTest, ToSqliteLoggedResultCode_MissingLowValue) {
- #if DCHECK_IS_ON()
- EXPECT_DCHECK_DEATH_WITH(ToSqliteLoggedResultCode(-65536),
- "Unsupported SQLite result code: -65536");
- #else
- EXPECT_EQ(SqliteLoggedResultCode::kUnusedChrome,
- ToSqliteLoggedResultCode(-65536));
- #endif
- }
- TEST(SqliteResultCodeTest, ToSqliteLoggedResultCode_MissingHighValue) {
- #if DCHECK_IS_ON()
- EXPECT_DCHECK_DEATH_WITH(ToSqliteLoggedResultCode(65536),
- "Unsupported SQLite result code: 65536");
- #else
- EXPECT_EQ(SqliteLoggedResultCode::kUnusedChrome,
- ToSqliteLoggedResultCode(65536));
- #endif
- }
- TEST(SqliteResultCodeTest, ToSqliteLoggedResultCode_SqliteInternalError) {
- #if DCHECK_IS_ON()
- EXPECT_DCHECK_DEATH_WITH(ToSqliteLoggedResultCode(SQLITE_INTERNAL),
- "SQLite reported code marked for internal use: 2");
- #else
- EXPECT_EQ(SqliteLoggedResultCode::kUnusedSqlite,
- ToSqliteLoggedResultCode(SQLITE_INTERNAL));
- #endif
- }
- TEST(SqliteResultCodeTest, ToSqliteLoggedResultCode_ChromeBugError) {
- #if DCHECK_IS_ON()
- EXPECT_DCHECK_DEATH_WITH(
- ToSqliteLoggedResultCode(SQLITE_NOTFOUND),
- "SQLite reported code that should never show up in Chrome: 12");
- #else
- EXPECT_EQ(SqliteLoggedResultCode::kUnusedChrome,
- ToSqliteLoggedResultCode(SQLITE_NOTFOUND));
- #endif
- }
- TEST(SqliteResultCodeTest, UmaHistogramSqliteResult_Success) {
- base::HistogramTester histogram_tester;
- UmaHistogramSqliteResult("Sql.ResultTest", SQLITE_OK);
- histogram_tester.ExpectTotalCount("Sql.ResultTest", 1);
- histogram_tester.ExpectBucketCount("Sql.ResultTest",
- SqliteLoggedResultCode::kNoError, 1);
- }
- TEST(SqliteResultCodeTest, UmaHistogramSqliteResult_PrimaryErrorCode) {
- base::HistogramTester histogram_tester;
- UmaHistogramSqliteResult("Sql.ResultTest", SQLITE_CORRUPT);
- histogram_tester.ExpectTotalCount("Sql.ResultTest", 1);
- histogram_tester.ExpectBucketCount("Sql.ResultTest",
- SqliteLoggedResultCode::kCorrupt, 1);
- }
- TEST(SqliteResultCodeTest, UmaHistogramSqliteResult_ExtendedErrorCode) {
- base::HistogramTester histogram_tester;
- UmaHistogramSqliteResult("Sql.ResultTest", SQLITE_CORRUPT_INDEX);
- histogram_tester.ExpectTotalCount("Sql.ResultTest", 1);
- histogram_tester.ExpectBucketCount("Sql.ResultTest",
- SqliteLoggedResultCode::kCorruptIndex, 1);
- }
- TEST(SqliteResultCodeTest, CheckMapping) {
- CheckSqliteLoggedResultCodeForTesting();
- }
- } // namespace
- } // namespace sql
|