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

Unified Diff: content/browser/service_worker/service_worker_cache_unittest.cc

Issue 477973002: Add Keys() function to ServiceWorkerCache. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@cache_patch
Patch Set: Remove accidental change to entry unittest Created 6 years, 3 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « content/browser/service_worker/service_worker_cache.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/browser/service_worker/service_worker_cache_unittest.cc
diff --git a/content/browser/service_worker/service_worker_cache_unittest.cc b/content/browser/service_worker/service_worker_cache_unittest.cc
index 21ea1e6a8c614e5680a110e0b748bf5f33199387..a2639f693301a36d94a2ea667d850dc878220109 100644
--- a/content/browser/service_worker/service_worker_cache_unittest.cc
+++ b/content/browser/service_worker/service_worker_cache_unittest.cc
@@ -162,6 +162,27 @@ class ServiceWorkerCacheTest : public testing::Test {
return callback_error_ == ServiceWorkerCache::ErrorTypeOK;
}
+ bool Keys() {
+ scoped_ptr<base::RunLoop> loop(new base::RunLoop());
+
+ cache_->Keys(base::Bind(&ServiceWorkerCacheTest::RequestsCallback,
+ base::Unretained(this),
+ base::Unretained(loop.get())));
+ loop->Run();
+
+ return callback_error_ == ServiceWorkerCache::ErrorTypeOK;
+ }
+
+ void RequestsCallback(base::RunLoop* run_loop,
+ ServiceWorkerCache::ErrorType error,
+ scoped_ptr<ServiceWorkerCache::Requests> requests) {
+ callback_error_ = error;
+ callback_strings_.clear();
+ for (size_t i = 0u; i < requests->size(); ++i)
+ callback_strings_.push_back(requests->at(i).url.spec());
+ run_loop->Quit();
+ }
+
void ErrorTypeCallback(base::RunLoop* run_loop,
ServiceWorkerCache::ErrorType error) {
callback_error_ = error;
@@ -191,6 +212,21 @@ class ServiceWorkerCacheTest : public testing::Test {
output->append(items[i].bytes(), items[i].length());
}
+ bool VerifyKeys(const std::vector<std::string>& expected_keys) {
+ if (expected_keys.size() != callback_strings_.size())
+ return false;
+
+ std::set<std::string> found_set;
+ for (int i = 0, max = callback_strings_.size(); i < max; ++i)
+ found_set.insert(callback_strings_[i]);
+
+ for (int i = 0, max = expected_keys.size(); i < max; ++i) {
+ if (found_set.find(expected_keys[i]) == found_set.end())
+ return false;
+ }
+ return true;
+ }
+
virtual bool MemoryOnly() { return false; }
protected:
@@ -212,6 +248,7 @@ class ServiceWorkerCacheTest : public testing::Test {
ServiceWorkerCache::ErrorType callback_error_;
scoped_ptr<ServiceWorkerResponse> callback_response_;
scoped_ptr<storage::BlobDataHandle> callback_response_data_;
+ std::vector<std::string> callback_strings_;
};
class ServiceWorkerCacheTestP : public ServiceWorkerCacheTest,
@@ -242,6 +279,65 @@ TEST_P(ServiceWorkerCacheTestP, PutBodyDropBlobRef) {
EXPECT_EQ(ServiceWorkerCache::ErrorTypeOK, callback_error_);
}
+TEST_P(ServiceWorkerCacheTestP, MatchNoBody) {
+ EXPECT_TRUE(Put(no_body_request_.get(), no_body_response_.get()));
+ EXPECT_TRUE(Match(no_body_request_.get()));
+ EXPECT_EQ(200, callback_response_->status_code);
+ EXPECT_STREQ("OK", callback_response_->status_text.c_str());
+ EXPECT_STREQ("http://example.com/no_body.html",
+ callback_response_->url.spec().c_str());
+}
+
+TEST_P(ServiceWorkerCacheTestP, MatchBody) {
+ EXPECT_TRUE(Put(body_request_.get(), body_response_.get()));
+ EXPECT_TRUE(Match(body_request_.get()));
+ EXPECT_EQ(200, callback_response_->status_code);
+ EXPECT_STREQ("OK", callback_response_->status_text.c_str());
+ EXPECT_STREQ("http://example.com/body.html",
+ callback_response_->url.spec().c_str());
+ std::string response_body;
+ CopyBody(callback_response_data_.get(), &response_body);
+ EXPECT_STREQ(expected_blob_data_.c_str(), response_body.c_str());
+}
+
+TEST_P(ServiceWorkerCacheTestP, EmptyKeys) {
+ EXPECT_TRUE(Keys());
+ EXPECT_EQ(0u, callback_strings_.size());
+}
+
+TEST_P(ServiceWorkerCacheTestP, TwoKeys) {
+ EXPECT_TRUE(Put(no_body_request_.get(), no_body_response_.get()));
+ EXPECT_TRUE(Put(body_request_.get(), body_response_.get()));
+ EXPECT_TRUE(Keys());
+ EXPECT_EQ(2u, callback_strings_.size());
+ std::vector<std::string> expected_keys;
+ expected_keys.push_back(no_body_request_->url.spec());
+ expected_keys.push_back(body_request_->url.spec());
+ EXPECT_TRUE(VerifyKeys(expected_keys));
+}
+
+TEST_P(ServiceWorkerCacheTestP, TwoKeysThenOne) {
+ EXPECT_TRUE(Put(no_body_request_.get(), no_body_response_.get()));
+ EXPECT_TRUE(Put(body_request_.get(), body_response_.get()));
+ EXPECT_TRUE(Keys());
+ EXPECT_EQ(2u, callback_strings_.size());
+ std::vector<std::string> expected_keys;
+ expected_keys.push_back(no_body_request_->url.spec());
+ expected_keys.push_back(body_request_->url.spec());
+ EXPECT_TRUE(VerifyKeys(expected_keys));
+
+ EXPECT_TRUE(Delete(body_request_.get()));
+ EXPECT_TRUE(Keys());
+ EXPECT_EQ(1u, callback_strings_.size());
+ std::vector<std::string> expected_key;
+ expected_key.push_back(no_body_request_->url.spec());
+ EXPECT_TRUE(VerifyKeys(expected_key));
+}
+
+// TODO(jkarlin): Once SimpleCache is working bug-free on Windows reenable these
+// tests. In the meanwhile we know that Windows operations will be a little
+// flaky (though not crashy). See https://crbug.com/409109
+#ifndef OS_WIN
TEST_P(ServiceWorkerCacheTestP, DeleteNoBody) {
EXPECT_TRUE(Put(no_body_request_.get(), no_body_response_.get()));
EXPECT_TRUE(Match(no_body_request_.get()));
@@ -264,27 +360,6 @@ TEST_P(ServiceWorkerCacheTestP, DeleteBody) {
EXPECT_TRUE(Delete(body_request_.get()));
}
-TEST_P(ServiceWorkerCacheTestP, MatchNoBody) {
- EXPECT_TRUE(Put(no_body_request_.get(), no_body_response_.get()));
- EXPECT_TRUE(Match(no_body_request_.get()));
- EXPECT_EQ(200, callback_response_->status_code);
- EXPECT_STREQ("OK", callback_response_->status_text.c_str());
- EXPECT_STREQ("http://example.com/no_body.html",
- callback_response_->url.spec().c_str());
-}
-
-TEST_P(ServiceWorkerCacheTestP, MatchBody) {
- EXPECT_TRUE(Put(body_request_.get(), body_response_.get()));
- EXPECT_TRUE(Match(body_request_.get()));
- EXPECT_EQ(200, callback_response_->status_code);
- EXPECT_STREQ("OK", callback_response_->status_text.c_str());
- EXPECT_STREQ("http://example.com/body.html",
- callback_response_->url.spec().c_str());
- std::string response_body;
- CopyBody(callback_response_data_.get(), &response_body);
- EXPECT_STREQ(expected_blob_data_.c_str(), response_body.c_str());
-}
-
TEST_P(ServiceWorkerCacheTestP, QuickStressNoBody) {
for (int i = 0; i < 100; ++i) {
EXPECT_FALSE(Match(no_body_request_.get()));
@@ -302,6 +377,7 @@ TEST_P(ServiceWorkerCacheTestP, QuickStressBody) {
ASSERT_TRUE(Delete(body_request_.get()));
}
}
+#endif // OS_WIN
INSTANTIATE_TEST_CASE_P(ServiceWorkerCacheTest,
ServiceWorkerCacheTestP,
« no previous file with comments | « content/browser/service_worker/service_worker_cache.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698