Commit b6917f33 authored by Steven Bingler's avatar Steven Bingler Committed by Commit Bot

Adding new unit tests for HttpCache's OpenEntry, CreateEntry, and DoomEntry.

Change-Id: I3e14d19bef87a2f91d5cb7749afbd65a1c0323a3
Reviewed-on: https://chromium-review.googlesource.com/c/1452918Reviewed-by: default avatarShivani Sharma <shivanisha@chromium.org>
Reviewed-by: default avatarMaks Orlovich <morlovich@chromium.org>
Commit-Queue: Steven Bingler <bingler@chromium.org>
Cr-Commit-Position: refs/heads/master@{#630561}
parent 4a41c57a
...@@ -826,6 +826,9 @@ NET_ERROR(CACHE_AUTH_FAILURE_AFTER_READ, -410) ...@@ -826,6 +826,9 @@ NET_ERROR(CACHE_AUTH_FAILURE_AFTER_READ, -410)
// current configuration (e.g. load flags, mode, etc.) // current configuration (e.g. load flags, mode, etc.)
NET_ERROR(CACHE_ENTRY_NOT_SUITABLE, -411) NET_ERROR(CACHE_ENTRY_NOT_SUITABLE, -411)
// The disk cache is unable to doom this entry.
NET_ERROR(CACHE_DOOM_FAILURE, -412)
// The server's response was insecure (e.g. there was a cert error). // The server's response was insecure (e.g. there was a cert error).
NET_ERROR(INSECURE_RESPONSE, -501) NET_ERROR(INSECURE_RESPONSE, -501)
......
...@@ -58,7 +58,6 @@ class HttpNetworkSession; ...@@ -58,7 +58,6 @@ class HttpNetworkSession;
class HttpResponseInfo; class HttpResponseInfo;
class IOBuffer; class IOBuffer;
class NetLog; class NetLog;
class ViewCacheHelper;
struct HttpRequestInfo; struct HttpRequestInfo;
class NET_EXPORT HttpCache : public HttpTransactionFactory { class NET_EXPORT HttpCache : public HttpTransactionFactory {
...@@ -299,11 +298,11 @@ class NET_EXPORT HttpCache : public HttpTransactionFactory { ...@@ -299,11 +298,11 @@ class NET_EXPORT HttpCache : public HttpTransactionFactory {
friend class TestHttpCacheTransaction; friend class TestHttpCacheTransaction;
friend class TestHttpCache; friend class TestHttpCache;
friend class Transaction; friend class Transaction;
friend class ViewCacheHelper;
struct PendingOp; // Info for an entry under construction. struct PendingOp; // Info for an entry under construction.
// To help with testing. // To help with testing.
friend class MockHttpCache; friend class MockHttpCache;
friend class HttpCacheTest;
using TransactionList = std::list<Transaction*>; using TransactionList = std::list<Transaction*>;
using TransactionSet = std::unordered_set<Transaction*>; using TransactionSet = std::unordered_set<Transaction*>;
......
...@@ -115,6 +115,10 @@ class NET_EXPORT_PRIVATE HttpCache::Transaction : public HttpTransaction { ...@@ -115,6 +115,10 @@ class NET_EXPORT_PRIVATE HttpCache::Transaction : public HttpTransaction {
const CompletionRepeatingCallback& io_callback() { return io_callback_; } const CompletionRepeatingCallback& io_callback() { return io_callback_; }
void SetIOCallBackForTest(CompletionRepeatingCallback cb) {
io_callback_ = cb;
}
const NetLogWithSource& net_log() const; const NetLogWithSource& net_log() const;
// Bypasses the cache lock whenever there is lock contention. // Bypasses the cache lock whenever there is lock contention.
......
This diff is collapsed.
...@@ -414,6 +414,7 @@ MockDiskCache::MockDiskCache() ...@@ -414,6 +414,7 @@ MockDiskCache::MockDiskCache()
double_create_check_(true), double_create_check_(true),
fail_sparse_requests_(false), fail_sparse_requests_(false),
support_in_memory_entry_data_(true), support_in_memory_entry_data_(true),
force_fail_callback_later_(false),
defer_op_(MockDiskEntry::DEFER_NONE), defer_op_(MockDiskEntry::DEFER_NONE),
resume_return_code_(0) {} resume_return_code_(0) {}
...@@ -434,6 +435,11 @@ net::Error MockDiskCache::OpenEntry(const std::string& key, ...@@ -434,6 +435,11 @@ net::Error MockDiskCache::OpenEntry(const std::string& key,
disk_cache::Entry** entry, disk_cache::Entry** entry,
CompletionOnceCallback callback) { CompletionOnceCallback callback) {
DCHECK(!callback.is_null()); DCHECK(!callback.is_null());
if (force_fail_callback_later_) {
CallbackLater(std::move(callback), ERR_CACHE_OPEN_FAILURE);
return ERR_IO_PENDING;
}
if (fail_requests_) if (fail_requests_)
return ERR_CACHE_OPEN_FAILURE; return ERR_CACHE_OPEN_FAILURE;
...@@ -471,6 +477,11 @@ net::Error MockDiskCache::CreateEntry(const std::string& key, ...@@ -471,6 +477,11 @@ net::Error MockDiskCache::CreateEntry(const std::string& key,
disk_cache::Entry** entry, disk_cache::Entry** entry,
CompletionOnceCallback callback) { CompletionOnceCallback callback) {
DCHECK(!callback.is_null()); DCHECK(!callback.is_null());
if (force_fail_callback_later_) {
CallbackLater(std::move(callback), ERR_CACHE_CREATE_FAILURE);
return ERR_IO_PENDING;
}
if (fail_requests_) if (fail_requests_)
return ERR_CACHE_CREATE_FAILURE; return ERR_CACHE_CREATE_FAILURE;
...@@ -525,6 +536,14 @@ net::Error MockDiskCache::DoomEntry(const std::string& key, ...@@ -525,6 +536,14 @@ net::Error MockDiskCache::DoomEntry(const std::string& key,
net::RequestPriority request_priority, net::RequestPriority request_priority,
CompletionOnceCallback callback) { CompletionOnceCallback callback) {
DCHECK(!callback.is_null()); DCHECK(!callback.is_null());
if (force_fail_callback_later_) {
CallbackLater(std::move(callback), ERR_CACHE_DOOM_FAILURE);
return ERR_IO_PENDING;
}
if (fail_requests_)
return ERR_CACHE_DOOM_FAILURE;
auto it = entries_.find(key); auto it = entries_.find(key);
if (it != entries_.end()) { if (it != entries_.end()) {
it->second->Release(); it->second->Release();
......
...@@ -191,8 +191,8 @@ class MockDiskCache : public disk_cache::Backend { ...@@ -191,8 +191,8 @@ class MockDiskCache : public disk_cache::Backend {
// Returns number of doomed entries. // Returns number of doomed entries.
int doomed_count() const { return doomed_count_; } int doomed_count() const { return doomed_count_; }
// Fail any subsequent CreateEntry and OpenEntry. // Fail any subsequent CreateEntry, OpenEntry, and DoomEntry
void set_fail_requests() { fail_requests_ = true; } void set_fail_requests(bool value) { fail_requests_ = value; }
// Return entries that fail some of their requests. // Return entries that fail some of their requests.
void set_soft_failures(bool value) { soft_failures_ = value; } void set_soft_failures(bool value) { soft_failures_ = value; }
...@@ -212,6 +212,12 @@ class MockDiskCache : public disk_cache::Backend { ...@@ -212,6 +212,12 @@ class MockDiskCache : public disk_cache::Backend {
support_in_memory_entry_data_ = value; support_in_memory_entry_data_ = value;
} }
// OpenEntry, CreateEntry, and DoomEntry immediately return with
// ERR_IO_PENDING and will callback some time later with an error.
void set_force_fail_callback_later(bool value) {
force_fail_callback_later_ = value;
}
// Makes all requests for data ranges to fail as not implemented. // Makes all requests for data ranges to fail as not implemented.
void set_fail_sparse_requests() { fail_sparse_requests_ = true; } void set_fail_sparse_requests() { fail_sparse_requests_ = true; }
...@@ -256,6 +262,7 @@ class MockDiskCache : public disk_cache::Backend { ...@@ -256,6 +262,7 @@ class MockDiskCache : public disk_cache::Backend {
bool double_create_check_; bool double_create_check_;
bool fail_sparse_requests_; bool fail_sparse_requests_;
bool support_in_memory_entry_data_; bool support_in_memory_entry_data_;
bool force_fail_callback_later_;
// Used for pause and restart. // Used for pause and restart.
MockDiskEntry::DeferOp defer_op_; MockDiskEntry::DeferOp defer_op_;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment