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

Side by Side Diff: content/browser/indexed_db/indexed_db_cleanup_on_io_error_unittest.cc

Issue 18023022: Blob support for IDB [Chromium] (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Use ScopedVector and stl_utils for BlobDataHandles. Created 7 years 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2013 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 <cerrno> 5 #include <cerrno>
6 6
7 #include "base/files/file_path.h" 7 #include "base/files/file_path.h"
8 #include "base/files/scoped_temp_dir.h" 8 #include "base/files/scoped_temp_dir.h"
9 #include "base/strings/string16.h" 9 #include "base/strings/string16.h"
10 #include "base/strings/utf_string_conversions.h" 10 #include "base/strings/utf_string_conversions.h"
11 #include "content/browser/indexed_db/indexed_db_backing_store.h" 11 #include "content/browser/indexed_db/indexed_db_backing_store.h"
12 #include "content/browser/indexed_db/leveldb/leveldb_database.h" 12 #include "content/browser/indexed_db/leveldb/leveldb_database.h"
13 #include "testing/gtest/include/gtest/gtest.h" 13 #include "testing/gtest/include/gtest/gtest.h"
14 #include "third_party/leveldatabase/env_chromium.h" 14 #include "third_party/leveldatabase/env_chromium.h"
15 15
16 using base::StringPiece; 16 using base::StringPiece;
17 using content::IndexedDBBackingStore; 17 using content::IndexedDBBackingStore;
18 using content::LevelDBComparator; 18 using content::LevelDBComparator;
19 using content::LevelDBDatabase; 19 using content::LevelDBDatabase;
20 using content::LevelDBFactory; 20 using content::LevelDBFactory;
21 using content::LevelDBSnapshot; 21 using content::LevelDBSnapshot;
22 22
23 namespace base {
24 class TaskRunner;
25 }
26
27 namespace content {
28 class IndexedDBFactory;
29 }
30
31 namespace net {
32 class URLRequestContext;
33 }
34
23 namespace { 35 namespace {
24 36
25 class BustedLevelDBDatabase : public LevelDBDatabase { 37 class BustedLevelDBDatabase : public LevelDBDatabase {
26 public: 38 public:
27 static scoped_ptr<LevelDBDatabase> Open( 39 static scoped_ptr<LevelDBDatabase> Open(
28 const base::FilePath& file_name, 40 const base::FilePath& file_name,
29 const LevelDBComparator* /*comparator*/) { 41 const LevelDBComparator* /*comparator*/) {
30 return scoped_ptr<LevelDBDatabase>(new BustedLevelDBDatabase); 42 return scoped_ptr<LevelDBDatabase>(new BustedLevelDBDatabase);
31 } 43 }
32 virtual bool Get(const base::StringPiece& key, 44 virtual bool Get(const base::StringPiece& key,
(...skipping 21 matching lines...) Expand all
54 destroy_called_ = true; 66 destroy_called_ = true;
55 return false; 67 return false;
56 } 68 }
57 virtual ~MockLevelDBFactory() { EXPECT_TRUE(destroy_called_); } 69 virtual ~MockLevelDBFactory() { EXPECT_TRUE(destroy_called_); }
58 70
59 private: 71 private:
60 bool destroy_called_; 72 bool destroy_called_;
61 }; 73 };
62 74
63 TEST(IndexedDBIOErrorTest, CleanUpTest) { 75 TEST(IndexedDBIOErrorTest, CleanUpTest) {
76 content::IndexedDBFactory* factory = NULL;
64 const GURL origin("http://localhost:81"); 77 const GURL origin("http://localhost:81");
65 base::ScopedTempDir temp_directory; 78 base::ScopedTempDir temp_directory;
66 ASSERT_TRUE(temp_directory.CreateUniqueTempDir()); 79 ASSERT_TRUE(temp_directory.CreateUniqueTempDir());
67 const base::FilePath path = temp_directory.path(); 80 const base::FilePath path = temp_directory.path();
81 net::URLRequestContext* request_context = NULL;
68 MockLevelDBFactory mock_leveldb_factory; 82 MockLevelDBFactory mock_leveldb_factory;
69 blink::WebIDBDataLoss data_loss = 83 blink::WebIDBDataLoss data_loss =
70 blink::WebIDBDataLossNone; 84 blink::WebIDBDataLossNone;
71 std::string data_loss_message; 85 std::string data_loss_message;
72 bool disk_full = false; 86 bool disk_full = false;
87 base::TaskRunner* task_runner = NULL;
88 bool clean_journal = false;
73 scoped_refptr<IndexedDBBackingStore> backing_store = 89 scoped_refptr<IndexedDBBackingStore> backing_store =
74 IndexedDBBackingStore::Open(origin, 90 IndexedDBBackingStore::Open(factory,
91 origin,
75 path, 92 path,
93 request_context,
76 &data_loss, 94 &data_loss,
77 &data_loss_message, 95 &data_loss_message,
78 &disk_full, 96 &disk_full,
79 &mock_leveldb_factory); 97 &mock_leveldb_factory,
98 task_runner,
99 clean_journal);
80 } 100 }
81 101
82 // TODO(dgrogan): Remove expect_destroy if we end up not using it again. It is 102 // TODO(dgrogan): Remove expect_destroy if we end up not using it again. It is
83 // currently set to false in all 4 calls below. 103 // currently set to false in all 4 calls below.
84 template <class T> 104 template <class T>
85 class MockErrorLevelDBFactory : public LevelDBFactory { 105 class MockErrorLevelDBFactory : public LevelDBFactory {
86 public: 106 public:
87 MockErrorLevelDBFactory(T error, bool expect_destroy) 107 MockErrorLevelDBFactory(T error, bool expect_destroy)
88 : error_(error), 108 : error_(error),
89 expect_destroy_(expect_destroy), 109 expect_destroy_(expect_destroy),
(...skipping 15 matching lines...) Expand all
105 EXPECT_EQ(expect_destroy_, destroy_called_); 125 EXPECT_EQ(expect_destroy_, destroy_called_);
106 } 126 }
107 127
108 private: 128 private:
109 T error_; 129 T error_;
110 bool expect_destroy_; 130 bool expect_destroy_;
111 bool destroy_called_; 131 bool destroy_called_;
112 }; 132 };
113 133
114 TEST(IndexedDBNonRecoverableIOErrorTest, NuancedCleanupTest) { 134 TEST(IndexedDBNonRecoverableIOErrorTest, NuancedCleanupTest) {
135 content::IndexedDBFactory* factory = NULL;
115 const GURL origin("http://localhost:81"); 136 const GURL origin("http://localhost:81");
137 net::URLRequestContext* request_context = NULL;
116 base::ScopedTempDir temp_directory; 138 base::ScopedTempDir temp_directory;
117 ASSERT_TRUE(temp_directory.CreateUniqueTempDir()); 139 ASSERT_TRUE(temp_directory.CreateUniqueTempDir());
118 const base::FilePath path = temp_directory.path(); 140 const base::FilePath path = temp_directory.path();
119 blink::WebIDBDataLoss data_loss = 141 blink::WebIDBDataLoss data_loss =
120 blink::WebIDBDataLossNone; 142 blink::WebIDBDataLossNone;
121 std::string data_loss_reason; 143 std::string data_loss_reason;
122 bool disk_full = false; 144 bool disk_full = false;
145 base::TaskRunner* task_runner = NULL;
146 bool clean_journal = false;
123 147
124 MockErrorLevelDBFactory<int> mock_leveldb_factory(ENOSPC, false); 148 MockErrorLevelDBFactory<int> mock_leveldb_factory(ENOSPC, false);
125 scoped_refptr<IndexedDBBackingStore> backing_store = 149 scoped_refptr<IndexedDBBackingStore> backing_store =
126 IndexedDBBackingStore::Open(origin, 150 IndexedDBBackingStore::Open(factory,
151 origin,
127 path, 152 path,
153 request_context,
128 &data_loss, 154 &data_loss,
129 &data_loss_reason, 155 &data_loss_reason,
130 &disk_full, 156 &disk_full,
131 &mock_leveldb_factory); 157 &mock_leveldb_factory,
158 task_runner,
159 clean_journal);
132 160
133 MockErrorLevelDBFactory<base::PlatformFileError> mock_leveldb_factory2( 161 MockErrorLevelDBFactory<base::PlatformFileError> mock_leveldb_factory2(
134 base::PLATFORM_FILE_ERROR_NO_MEMORY, false); 162 base::PLATFORM_FILE_ERROR_NO_MEMORY, false);
135 scoped_refptr<IndexedDBBackingStore> backing_store2 = 163 scoped_refptr<IndexedDBBackingStore> backing_store2 =
136 IndexedDBBackingStore::Open(origin, 164 IndexedDBBackingStore::Open(factory,
165 origin,
137 path, 166 path,
167 request_context,
138 &data_loss, 168 &data_loss,
139 &data_loss_reason, 169 &data_loss_reason,
140 &disk_full, 170 &disk_full,
141 &mock_leveldb_factory2); 171 &mock_leveldb_factory2,
172 task_runner,
173 clean_journal);
142 174
143 MockErrorLevelDBFactory<int> mock_leveldb_factory3(EIO, false); 175 MockErrorLevelDBFactory<int> mock_leveldb_factory3(EIO, false);
144 scoped_refptr<IndexedDBBackingStore> backing_store3 = 176 scoped_refptr<IndexedDBBackingStore> backing_store3 =
145 IndexedDBBackingStore::Open(origin, 177 IndexedDBBackingStore::Open(factory,
178 origin,
146 path, 179 path,
180 request_context,
147 &data_loss, 181 &data_loss,
148 &data_loss_reason, 182 &data_loss_reason,
149 &disk_full, 183 &disk_full,
150 &mock_leveldb_factory3); 184 &mock_leveldb_factory3,
185 task_runner,
186 clean_journal);
151 187
152 MockErrorLevelDBFactory<base::PlatformFileError> mock_leveldb_factory4( 188 MockErrorLevelDBFactory<base::PlatformFileError> mock_leveldb_factory4(
153 base::PLATFORM_FILE_ERROR_FAILED, false); 189 base::PLATFORM_FILE_ERROR_FAILED, false);
154 scoped_refptr<IndexedDBBackingStore> backing_store4 = 190 scoped_refptr<IndexedDBBackingStore> backing_store4 =
155 IndexedDBBackingStore::Open(origin, 191 IndexedDBBackingStore::Open(factory,
192 origin,
156 path, 193 path,
194 request_context,
157 &data_loss, 195 &data_loss,
158 &data_loss_reason, 196 &data_loss_reason,
159 &disk_full, 197 &disk_full,
160 &mock_leveldb_factory4); 198 &mock_leveldb_factory4,
199 task_runner,
200 clean_journal);
161 } 201 }
162 202
163 } // namespace 203 } // namespace
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698