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