Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1642)

Side by Side Diff: sql/connection_unittest.cc

Issue 2830263002: [sql] Remove mmap before Raze(). (Closed)
Patch Set: Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« sql/connection.cc ('K') | « sql/connection.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <stddef.h> 5 #include <stddef.h>
6 #include <stdint.h> 6 #include <stdint.h>
7 7
8 #include "base/bind.h" 8 #include "base/bind.h"
9 #include "base/files/file_util.h" 9 #include "base/files/file_util.h"
10 #include "base/files/scoped_file.h" 10 #include "base/files/scoped_file.h"
(...skipping 836 matching lines...) Expand 10 before | Expand all | Expand 10 after
847 db().IsSQLValid(kSimpleSql); 847 db().IsSQLValid(kSimpleSql);
848 }, "Illegal use of connection without a db"); 848 }, "Illegal use of connection without a db");
849 } 849 }
850 #endif 850 #endif
851 } 851 }
852 852
853 // TODO(shess): Spin up a background thread to hold other_db, to more 853 // TODO(shess): Spin up a background thread to hold other_db, to more
854 // closely match real life. That would also allow testing 854 // closely match real life. That would also allow testing
855 // RazeWithTimeout(). 855 // RazeWithTimeout().
856 856
857 // On Windows, truncate silently fails against a memory-mapped file. One goal
858 // of Raze() is to truncate the file to remove blocks which generate I/O errors.
859 // Test that Raze() turns off memory mapping so that the file is truncated.
860 // [This would not cover the case of multiple connections where one of the other
861 // connections is memory-mapped. That is infrequent in Chromium.]
862 TEST_F(SQLConnectionTest, RazeTruncate) {
863 // The empty database has 0 or 1 pages. Raze() should leave it with exactly 1
864 // page. Not checking directly because auto_vacuum on Android adds a freelist
865 // page.
866 ASSERT_TRUE(db().Raze());
867 int64_t expected_size;
868 ASSERT_TRUE(base::GetFileSize(db_path(), &expected_size));
869 ASSERT_GT(expected_size, 0);
870
871 // Cause the database to take a few pages.
872 const char* kCreateSql = "CREATE TABLE foo (id INTEGER PRIMARY KEY, value)";
873 ASSERT_TRUE(db().Execute(kCreateSql));
874 for (size_t i = 0; i < 24; ++i) {
875 ASSERT_TRUE(
876 db().Execute("INSERT INTO foo (value) VALUES (randomblob(1024))"));
877 }
878 int64_t db_size;
879 ASSERT_TRUE(base::GetFileSize(db_path(), &db_size));
880 ASSERT_GT(db_size, expected_size);
881
882 // Make a query covering most of the database file to make sure that the
883 // blocks are actually mapped into memory. Empirically, the truncate problem
884 // doesn't seem to happen if no blocks are mapped.
885 EXPECT_EQ("24576",
886 ExecuteWithResult(&db(), "SELECT SUM(LENGTH(value)) FROM foo"));
887
888 ASSERT_TRUE(db().Raze());
889 ASSERT_TRUE(base::GetFileSize(db_path(), &db_size));
890 ASSERT_EQ(expected_size, db_size);
891 }
892
857 #if defined(OS_ANDROID) 893 #if defined(OS_ANDROID)
858 TEST_F(SQLConnectionTest, SetTempDirForSQL) { 894 TEST_F(SQLConnectionTest, SetTempDirForSQL) {
859 895
860 sql::MetaTable meta_table; 896 sql::MetaTable meta_table;
861 // Below call needs a temporary directory in sqlite3 897 // Below call needs a temporary directory in sqlite3
862 // On Android, it can pass only when the temporary directory is set. 898 // On Android, it can pass only when the temporary directory is set.
863 // Otherwise, sqlite3 doesn't find the correct directory to store 899 // Otherwise, sqlite3 doesn't find the correct directory to store
864 // temporary files and will report the error 'unable to open 900 // temporary files and will report the error 'unable to open
865 // database file'. 901 // database file'.
866 ASSERT_TRUE(meta_table.Init(&db(), 4, 4)); 902 ASSERT_TRUE(meta_table.Init(&db(), 4, 4));
(...skipping 759 matching lines...) Expand 10 before | Expand all | Expand 10 after
1626 if (DLOG_IS_ON(FATAL)) { 1662 if (DLOG_IS_ON(FATAL)) {
1627 db().set_error_callback(base::Bind(&IgnoreErrorCallback)); 1663 db().set_error_callback(base::Bind(&IgnoreErrorCallback));
1628 ASSERT_DEATH({ 1664 ASSERT_DEATH({
1629 db().GetUniqueStatement("SELECT x"); 1665 db().GetUniqueStatement("SELECT x");
1630 }, "SQL compile error no such column: x"); 1666 }, "SQL compile error no such column: x");
1631 } 1667 }
1632 #endif 1668 #endif
1633 } 1669 }
1634 1670
1635 } // namespace sql 1671 } // namespace sql
OLDNEW
« sql/connection.cc ('K') | « sql/connection.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698