1868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// Copyright (c) 2013 The Chromium Authors. All rights reserved. 2868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// found in the LICENSE file. 4868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 5ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include <cerrno> 6ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 7a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "base/files/file.h" 8868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/files/file_path.h" 9868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/files/scoped_temp_dir.h" 10868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/string16.h" 11868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 12868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "content/browser/indexed_db/indexed_db_backing_store.h" 13868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "content/browser/indexed_db/leveldb/leveldb_database.h" 14116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "content/browser/indexed_db/leveldb/mock_leveldb_factory.h" 15116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "testing/gmock/include/gmock/gmock.h" 16868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 17ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "third_party/leveldatabase/env_chromium.h" 18868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 197dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochusing base::StringPiece; 20868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)using content::IndexedDBBackingStore; 21868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)using content::LevelDBComparator; 22868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)using content::LevelDBDatabase; 23868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)using content::LevelDBFactory; 24868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)using content::LevelDBSnapshot; 25116680a4aac90f2aa7413d9095a592090648e557Ben Murdochusing testing::_; 26116680a4aac90f2aa7413d9095a592090648e557Ben Murdochusing testing::Exactly; 27116680a4aac90f2aa7413d9095a592090648e557Ben Murdochusing testing::Invoke; 28868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 29c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochnamespace base { 30c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochclass TaskRunner; 31c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch} 32c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 33c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochnamespace content { 34c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochclass IndexedDBFactory; 35c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch} 36c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 375c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liunamespace net { 385c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuclass URLRequestContext; 395c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} 405c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 41868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)namespace { 42868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 43868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)class BustedLevelDBDatabase : public LevelDBDatabase { 44868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) public: 45f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) BustedLevelDBDatabase() {} 46868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) static scoped_ptr<LevelDBDatabase> Open( 47868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) const base::FilePath& file_name, 48868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) const LevelDBComparator* /*comparator*/) { 49868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) return scoped_ptr<LevelDBDatabase>(new BustedLevelDBDatabase); 50868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) } 51a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) virtual leveldb::Status Get(const base::StringPiece& key, 52a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) std::string* value, 53a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) bool* found, 54a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const LevelDBSnapshot* = 0) OVERRIDE { 55a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return leveldb::Status::IOError("It's busted!"); 56868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) } 57f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 58f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) private: 59f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(BustedLevelDBDatabase); 60868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)}; 61868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 62116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass BustedLevelDBFactory : public LevelDBFactory { 63868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) public: 64ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch virtual leveldb::Status OpenLevelDB( 65868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) const base::FilePath& file_name, 66868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) const LevelDBComparator* comparator, 67ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch scoped_ptr<LevelDBDatabase>* db, 68868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) bool* is_disk_full = 0) OVERRIDE { 69116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (open_error_.ok()) 70116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch *db = BustedLevelDBDatabase::Open(file_name, comparator); 71116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return open_error_; 72868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) } 73116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual leveldb::Status DestroyLevelDB( 74116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const base::FilePath& file_name) OVERRIDE { 75a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return leveldb::Status::IOError("error"); 76868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) } 77116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch void SetOpenError(const leveldb::Status& open_error) { 78116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch open_error_ = open_error; 79116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 80f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 81f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) private: 82116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch leveldb::Status open_error_; 83868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)}; 84868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 85868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)TEST(IndexedDBIOErrorTest, CleanUpTest) { 86c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch content::IndexedDBFactory* factory = NULL; 871e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) const GURL origin("http://localhost:81"); 88868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) base::ScopedTempDir temp_directory; 89868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ASSERT_TRUE(temp_directory.CreateUniqueTempDir()); 90868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) const base::FilePath path = temp_directory.path(); 915c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu net::URLRequestContext* request_context = NULL; 92116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 93116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch BustedLevelDBFactory busted_factory; 94116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch content::MockLevelDBFactory mock_leveldb_factory; 95116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ON_CALL(mock_leveldb_factory, OpenLevelDB(_, _, _, _)).WillByDefault( 96116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch Invoke(&busted_factory, &BustedLevelDBFactory::OpenLevelDB)); 97116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ON_CALL(mock_leveldb_factory, DestroyLevelDB(_)).WillByDefault( 98116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch Invoke(&busted_factory, &BustedLevelDBFactory::DestroyLevelDB)); 99116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 100116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_CALL(mock_leveldb_factory, OpenLevelDB(_, _, _, _)).Times(Exactly(1)); 101116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_CALL(mock_leveldb_factory, DestroyLevelDB(_)).Times(Exactly(1)); 102116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch blink::WebIDBDataLoss data_loss = blink::WebIDBDataLossNone; 1030f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) std::string data_loss_message; 10468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) bool disk_full = false; 1055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) base::SequencedTaskRunner* task_runner = NULL; 1065c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu bool clean_journal = false; 107116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch leveldb::Status s; 108868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) scoped_refptr<IndexedDBBackingStore> backing_store = 109c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch IndexedDBBackingStore::Open(factory, 110c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch origin, 1110f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) path, 1125c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu request_context, 1130f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) &data_loss, 1140f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) &data_loss_message, 1150f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) &disk_full, 116c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch &mock_leveldb_factory, 1175c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu task_runner, 118116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch clean_journal, 119116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch &s); 120868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} 121868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 122ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben MurdochTEST(IndexedDBNonRecoverableIOErrorTest, NuancedCleanupTest) { 123c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch content::IndexedDBFactory* factory = NULL; 1241e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) const GURL origin("http://localhost:81"); 1255c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu net::URLRequestContext* request_context = NULL; 126ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch base::ScopedTempDir temp_directory; 127ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ASSERT_TRUE(temp_directory.CreateUniqueTempDir()); 128ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch const base::FilePath path = temp_directory.path(); 129f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) blink::WebIDBDataLoss data_loss = 130f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) blink::WebIDBDataLossNone; 1310f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) std::string data_loss_reason; 13268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) bool disk_full = false; 1335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) base::SequencedTaskRunner* task_runner = NULL; 1345c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu bool clean_journal = false; 135116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch leveldb::Status s; 136ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 137116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch BustedLevelDBFactory busted_factory; 138116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch content::MockLevelDBFactory mock_leveldb_factory; 139116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ON_CALL(mock_leveldb_factory, OpenLevelDB(_, _, _, _)).WillByDefault( 140116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch Invoke(&busted_factory, &BustedLevelDBFactory::OpenLevelDB)); 141116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ON_CALL(mock_leveldb_factory, DestroyLevelDB(_)).WillByDefault( 142116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch Invoke(&busted_factory, &BustedLevelDBFactory::DestroyLevelDB)); 143116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 144116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_CALL(mock_leveldb_factory, OpenLevelDB(_, _, _, _)).Times(Exactly(4)); 145116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_CALL(mock_leveldb_factory, DestroyLevelDB(_)).Times(Exactly(0)); 146116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 147116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch busted_factory.SetOpenError(MakeIOError( 148116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch "some filename", "some message", leveldb_env::kNewLogger, ENOSPC)); 149ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch scoped_refptr<IndexedDBBackingStore> backing_store = 150c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch IndexedDBBackingStore::Open(factory, 151c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch origin, 1520f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) path, 1535c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu request_context, 1540f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) &data_loss, 1550f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) &data_loss_reason, 1560f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) &disk_full, 157c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch &mock_leveldb_factory, 1585c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu task_runner, 159116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch clean_journal, 160116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch &s); 161116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ASSERT_TRUE(s.IsIOError()); 162116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 163116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch busted_factory.SetOpenError(MakeIOError("some filename", 164116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch "some message", 165116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch leveldb_env::kNewLogger, 166116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::File::FILE_ERROR_NO_MEMORY)); 167ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch scoped_refptr<IndexedDBBackingStore> backing_store2 = 168c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch IndexedDBBackingStore::Open(factory, 169c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch origin, 1700f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) path, 1715c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu request_context, 1720f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) &data_loss, 1730f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) &data_loss_reason, 1740f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) &disk_full, 175116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch &mock_leveldb_factory, 1765c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu task_runner, 177116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch clean_journal, 178116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch &s); 179116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ASSERT_TRUE(s.IsIOError()); 180ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 181116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch busted_factory.SetOpenError(MakeIOError( 182116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch "some filename", "some message", leveldb_env::kNewLogger, EIO)); 183ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch scoped_refptr<IndexedDBBackingStore> backing_store3 = 184c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch IndexedDBBackingStore::Open(factory, 185c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch origin, 1860f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) path, 1875c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu request_context, 1880f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) &data_loss, 1890f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) &data_loss_reason, 1900f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) &disk_full, 191116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch &mock_leveldb_factory, 1925c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu task_runner, 193116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch clean_journal, 194116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch &s); 195116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ASSERT_TRUE(s.IsIOError()); 196116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 197116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch busted_factory.SetOpenError(MakeIOError("some filename", 198116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch "some message", 199116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch leveldb_env::kNewLogger, 200116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::File::FILE_ERROR_FAILED)); 201ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch scoped_refptr<IndexedDBBackingStore> backing_store4 = 202c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch IndexedDBBackingStore::Open(factory, 203c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch origin, 2040f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) path, 2055c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu request_context, 2060f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) &data_loss, 2070f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) &data_loss_reason, 2080f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) &disk_full, 209116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch &mock_leveldb_factory, 2105c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu task_runner, 211116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch clean_journal, 212116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch &s); 213116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ASSERT_TRUE(s.IsIOError()); 214ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch} 215ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 216868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} // namespace 217