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

Side by Side Diff: webkit/quota/quota_manager_unittest.cc

Issue 10826270: QuotaManager: Return the remaining free disk space as quota. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 4 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 unified diff | Download patch | Annotate | Revision Log
« webkit/quota/quota_manager.cc ('K') | « webkit/quota/quota_manager.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 <set> 5 #include <set>
6 #include <sstream> 6 #include <sstream>
7 #include <vector> 7 #include <vector>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/file_util.h" 10 #include "base/file_util.h"
(...skipping 15 matching lines...) Expand all
26 using base::MessageLoopProxy; 26 using base::MessageLoopProxy;
27 27
28 namespace quota { 28 namespace quota {
29 29
30 // For shorter names. 30 // For shorter names.
31 const StorageType kTemp = kStorageTypeTemporary; 31 const StorageType kTemp = kStorageTypeTemporary;
32 const StorageType kPerm = kStorageTypePersistent; 32 const StorageType kPerm = kStorageTypePersistent;
33 33
34 const int kAllClients = QuotaClient::kAllClientsMask; 34 const int kAllClients = QuotaClient::kAllClientsMask;
35 35
36 //
37 class TestQuotaManager : public QuotaManager {
38 public:
39 TestQuotaManager(bool is_incognito,
40 const FilePath& profile_path,
41 base::SingleThreadTaskRunner* io_thread,
42 base::SequencedTaskRunner* db_thread,
43 SpecialStoragePolicy* special_storage_policy)
44 : QuotaManager(is_incognito, profile_path, io_thread, db_thread,
45 special_storage_policy) {
46 }
47
48 // QuotaManager implementation.
49 virtual int64 GetAvailableDiskSpace() const {
50 return 13377331;
51 }
52
53 private:
54 ~TestQuotaManager() { printf("~TestQuotaManager\n"); };
55 };
56
36 class QuotaManagerTest : public testing::Test { 57 class QuotaManagerTest : public testing::Test {
37 protected: 58 protected:
38 typedef QuotaManager::QuotaTableEntry QuotaTableEntry; 59 typedef QuotaManager::QuotaTableEntry QuotaTableEntry;
39 typedef QuotaManager::QuotaTableEntries QuotaTableEntries; 60 typedef QuotaManager::QuotaTableEntries QuotaTableEntries;
40 typedef QuotaManager::OriginInfoTableEntries OriginInfoTableEntries; 61 typedef QuotaManager::OriginInfoTableEntries OriginInfoTableEntries;
41 62
42 public: 63 public:
43 QuotaManagerTest() 64 QuotaManagerTest()
44 : weak_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)), 65 : weak_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)),
66 quota_status_(kQuotaStatusUnknown),
67 type_(kStorageTypeUnknown),
68 usage_(0),
69 unlimited_usage_(0),
70 quota_(0),
71 available_space_(0),
72 modified_origins_type_(kStorageTypeUnknown),
73 status_callback_count_(0),
74 additional_callback_count_(0),
45 mock_time_counter_(0) { 75 mock_time_counter_(0) {
46 } 76 }
47 77
48 void SetUp() { 78 void SetUp() {
49 ASSERT_TRUE(data_dir_.CreateUniqueTempDir()); 79 ASSERT_TRUE(data_dir_.CreateUniqueTempDir());
50 mock_special_storage_policy_ = new MockSpecialStoragePolicy; 80 mock_special_storage_policy_ = new MockSpecialStoragePolicy;
51 quota_manager_ = new QuotaManager( 81 quota_manager_ = new TestQuotaManager(
52 false /* is_incognito */, 82 false /* is_incognito */,
53 data_dir_.path(), 83 data_dir_.path(),
54 MessageLoopProxy::current(), 84 MessageLoopProxy::current(),
55 MessageLoopProxy::current(), 85 MessageLoopProxy::current(),
56 mock_special_storage_policy_); 86 mock_special_storage_policy_);
57 // Don't (automatically) start the eviction for testing. 87 // Don't (automatically) start the eviction for testing.
58 quota_manager_->eviction_disabled_ = true; 88 quota_manager_->eviction_disabled_ = true;
59 additional_callback_count_ = 0; 89 additional_callback_count_ = 0;
60 } 90 }
61 91
(...skipping 213 matching lines...) Expand 10 before | Expand all | Expand 10 after
275 quota_manager_->DumpOriginInfoTable( 305 quota_manager_->DumpOriginInfoTable(
276 base::Bind(&QuotaManagerTest::DidDumpOriginInfoTable, 306 base::Bind(&QuotaManagerTest::DidDumpOriginInfoTable,
277 weak_factory_.GetWeakPtr())); 307 weak_factory_.GetWeakPtr()));
278 } 308 }
279 309
280 void DidGetUsageInfo(const UsageInfoEntries& entries) { 310 void DidGetUsageInfo(const UsageInfoEntries& entries) {
281 usage_info_.insert(usage_info_.begin(), entries.begin(), entries.end()); 311 usage_info_.insert(usage_info_.begin(), entries.begin(), entries.end());
282 } 312 }
283 313
284 void DidGetUsageAndQuota(QuotaStatusCode status, int64 usage, int64 quota) { 314 void DidGetUsageAndQuota(QuotaStatusCode status, int64 usage, int64 quota) {
315 printf("DidGetUsageAndQuota\n");
285 quota_status_ = status; 316 quota_status_ = status;
286 usage_ = usage; 317 usage_ = usage;
287 quota_ = quota; 318 quota_ = quota;
288 } 319 }
289 320
290 void DidGetQuota(QuotaStatusCode status, 321 void DidGetQuota(QuotaStatusCode status,
291 StorageType type, 322 StorageType type,
292 int64 quota) { 323 int64 quota) {
293 quota_status_ = status; 324 quota_status_ = status;
294 type_ = type; 325 type_ = type;
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
358 389
359 void GetUsage_WithModifyTestBody(const StorageType type); 390 void GetUsage_WithModifyTestBody(const StorageType type);
360 391
361 void set_additional_callback_count(int c) { additional_callback_count_ = c; } 392 void set_additional_callback_count(int c) { additional_callback_count_ = c; }
362 int additional_callback_count() const { return additional_callback_count_; } 393 int additional_callback_count() const { return additional_callback_count_; }
363 void DidGetUsageAndQuotaAdditional( 394 void DidGetUsageAndQuotaAdditional(
364 QuotaStatusCode status, int64 usage, int64 quota) { 395 QuotaStatusCode status, int64 usage, int64 quota) {
365 ++additional_callback_count_; 396 ++additional_callback_count_;
366 } 397 }
367 398
368 QuotaManager* quota_manager() const { return quota_manager_.get(); } 399 TestQuotaManager* quota_manager() const { return /*quota_manager_.get();*/NULL ; }
369 void set_quota_manager(QuotaManager* quota_manager) { 400 void set_quota_manager(TestQuotaManager* quota_manager) {
401 printf("set_quota_manager: %p\n", quota_manager);
370 quota_manager_ = quota_manager; 402 quota_manager_ = quota_manager;
371 } 403 }
372 404
373 MockSpecialStoragePolicy* mock_special_storage_policy() const { 405 MockSpecialStoragePolicy* mock_special_storage_policy() const {
374 return mock_special_storage_policy_.get(); 406 return mock_special_storage_policy_.get();
375 } 407 }
376 408
377 QuotaStatusCode status() const { return quota_status_; } 409 QuotaStatusCode status() const { return quota_status_; }
378 const UsageInfoEntries& usage_info() const { return usage_info_; } 410 const UsageInfoEntries& usage_info() const { return usage_info_; }
379 const std::string& host() const { return host_; } 411 const std::string& host() const { return host_; }
(...skipping 16 matching lines...) Expand all
396 private: 428 private:
397 base::Time IncrementMockTime() { 429 base::Time IncrementMockTime() {
398 ++mock_time_counter_; 430 ++mock_time_counter_;
399 return base::Time::FromDoubleT(mock_time_counter_ * 10.0); 431 return base::Time::FromDoubleT(mock_time_counter_ * 10.0);
400 } 432 }
401 433
402 MessageLoop message_loop_; 434 MessageLoop message_loop_;
403 ScopedTempDir data_dir_; 435 ScopedTempDir data_dir_;
404 base::WeakPtrFactory<QuotaManagerTest> weak_factory_; 436 base::WeakPtrFactory<QuotaManagerTest> weak_factory_;
405 437
406 scoped_refptr<QuotaManager> quota_manager_; 438 scoped_refptr<TestQuotaManager> quota_manager_;
407 scoped_refptr<MockSpecialStoragePolicy> mock_special_storage_policy_; 439 scoped_refptr<MockSpecialStoragePolicy> mock_special_storage_policy_;
408 440
409 QuotaStatusCode quota_status_; 441 QuotaStatusCode quota_status_;
410 UsageInfoEntries usage_info_; 442 UsageInfoEntries usage_info_;
411 std::string host_; 443 std::string host_;
412 StorageType type_; 444 StorageType type_;
413 int64 usage_; 445 int64 usage_;
414 int64 unlimited_usage_; 446 int64 unlimited_usage_;
415 int64 quota_; 447 int64 quota_;
416 int64 available_space_; 448 int64 available_space_;
(...skipping 197 matching lines...) Expand 10 before | Expand all | Expand 10 after
614 GetUsageAndQuota(GURL("http://foo.com/"), kTemp); 646 GetUsageAndQuota(GURL("http://foo.com/"), kTemp);
615 MessageLoop::current()->RunAllPending(); 647 MessageLoop::current()->RunAllPending();
616 EXPECT_EQ(kQuotaStatusOk, status()); 648 EXPECT_EQ(kQuotaStatusOk, status());
617 EXPECT_EQ(10 + 30, usage()); 649 EXPECT_EQ(10 + 30, usage());
618 650
619 GetUsageAndQuota(GURL("http://bar.com/"), kPerm); 651 GetUsageAndQuota(GURL("http://bar.com/"), kPerm);
620 MessageLoop::current()->RunAllPending(); 652 MessageLoop::current()->RunAllPending();
621 EXPECT_EQ(kQuotaStatusOk, status()); 653 EXPECT_EQ(kQuotaStatusOk, status());
622 EXPECT_EQ(50, usage()); 654 EXPECT_EQ(50, usage());
623 655
656 GetAvailableSpace();
657 MessageLoop::current()->RunAllPending();
658 EXPECT_EQ(kQuotaStatusOk, status());
659 EXPECT_LE(0, available_space());
660
624 GetUsageAndQuota(GURL("http://unlimited/"), kTemp); 661 GetUsageAndQuota(GURL("http://unlimited/"), kTemp);
625 MessageLoop::current()->RunAllPending(); 662 MessageLoop::current()->RunAllPending();
626 EXPECT_EQ(kQuotaStatusOk, status()); 663 EXPECT_EQ(kQuotaStatusOk, status());
627 EXPECT_EQ(1, usage()); 664 EXPECT_EQ(1, usage());
628 EXPECT_EQ(kint64max, quota()); 665 EXPECT_EQ(available_space(), quota());
629 666
667 printf("before\n");
630 GetUsageAndQuota(GURL("http://unlimited/"), kPerm); 668 GetUsageAndQuota(GURL("http://unlimited/"), kPerm);
631 MessageLoop::current()->RunAllPending(); 669 MessageLoop::current()->RunAllPending();
670 printf("after\n");
632 EXPECT_EQ(kQuotaStatusOk, status()); 671 EXPECT_EQ(kQuotaStatusOk, status());
633 EXPECT_EQ(1, usage()); 672 EXPECT_EQ(1, usage());
634 EXPECT_EQ(kint64max, quota()); 673 EXPECT_EQ(available_space(), quota());
635 674
636 GetGlobalUsage(kTemp); 675 GetGlobalUsage(kTemp);
637 MessageLoop::current()->RunAllPending(); 676 MessageLoop::current()->RunAllPending();
638 EXPECT_EQ(kQuotaStatusOk, status()); 677 EXPECT_EQ(kQuotaStatusOk, status());
639 EXPECT_EQ(10 + 20 + 30 + 1, usage()); 678 EXPECT_EQ(10 + 20 + 30 + 1, usage());
640 EXPECT_EQ(1, unlimited_usage()); 679 EXPECT_EQ(1, unlimited_usage());
641 680
642 GetGlobalUsage(kPerm); 681 GetGlobalUsage(kPerm);
643 MessageLoop::current()->RunAllPending(); 682 MessageLoop::current()->RunAllPending();
644 EXPECT_EQ(kQuotaStatusOk, status()); 683 EXPECT_EQ(kQuotaStatusOk, status());
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after
785 static const MockOriginData kData[] = { 824 static const MockOriginData kData[] = {
786 { "http://usage10/", kTemp, 10 }, 825 { "http://usage10/", kTemp, 10 },
787 { "http://usage50/", kTemp, 50 }, 826 { "http://usage50/", kTemp, 50 },
788 { "http://unlimited/", kTemp, 4000 }, 827 { "http://unlimited/", kTemp, 4000 },
789 }; 828 };
790 mock_special_storage_policy()->AddUnlimited(GURL("http://unlimited/")); 829 mock_special_storage_policy()->AddUnlimited(GURL("http://unlimited/"));
791 MockStorageClient* client = CreateClient(kData, ARRAYSIZE_UNSAFE(kData), 830 MockStorageClient* client = CreateClient(kData, ARRAYSIZE_UNSAFE(kData),
792 QuotaClient::kFileSystem); 831 QuotaClient::kFileSystem);
793 RegisterClient(client); 832 RegisterClient(client);
794 833
795 // Test when not overbugdet. 834 // Test when not over budget.
796 SetTemporaryGlobalQuota(1000); 835 SetTemporaryGlobalQuota(1000);
797 MessageLoop::current()->RunAllPending(); 836 MessageLoop::current()->RunAllPending();
798 837
799 GetGlobalUsage(kTemp); 838 GetGlobalUsage(kTemp);
800 MessageLoop::current()->RunAllPending(); 839 MessageLoop::current()->RunAllPending();
801 EXPECT_EQ(10 + 50 + 4000, usage()); 840 EXPECT_EQ(10 + 50 + 4000, usage());
802 EXPECT_EQ(4000, unlimited_usage()); 841 EXPECT_EQ(4000, unlimited_usage());
803 842
804 const int kPerHostQuotaFor1000 = 843 const int kPerHostQuotaFor1000 =
805 1000 / QuotaManager::kPerHostTemporaryPortion; 844 1000 / QuotaManager::kPerHostTemporaryPortion;
806 845
807 GetUsageAndQuota(GURL("http://usage10/"), kTemp); 846 GetUsageAndQuota(GURL("http://usage10/"), kTemp);
808 MessageLoop::current()->RunAllPending(); 847 MessageLoop::current()->RunAllPending();
809 EXPECT_EQ(kQuotaStatusOk, status()); 848 EXPECT_EQ(kQuotaStatusOk, status());
810 EXPECT_EQ(10, usage()); 849 EXPECT_EQ(10, usage());
811 EXPECT_EQ(kPerHostQuotaFor1000, quota()); 850 EXPECT_EQ(kPerHostQuotaFor1000, quota());
812 851
813 GetUsageAndQuota(GURL("http://usage50/"), kTemp); 852 GetUsageAndQuota(GURL("http://usage50/"), kTemp);
814 MessageLoop::current()->RunAllPending(); 853 MessageLoop::current()->RunAllPending();
815 EXPECT_EQ(kQuotaStatusOk, status()); 854 EXPECT_EQ(kQuotaStatusOk, status());
816 EXPECT_EQ(50, usage()); 855 EXPECT_EQ(50, usage());
817 EXPECT_EQ(kPerHostQuotaFor1000, quota()); 856 EXPECT_EQ(kPerHostQuotaFor1000, quota());
818 857
858 GetAvailableSpace();
859 MessageLoop::current()->RunAllPending();
860 EXPECT_EQ(kQuotaStatusOk, status());
861 EXPECT_LE(0, available_space());
862
819 GetUsageAndQuota(GURL("http://unlimited/"), kTemp); 863 GetUsageAndQuota(GURL("http://unlimited/"), kTemp);
820 MessageLoop::current()->RunAllPending(); 864 MessageLoop::current()->RunAllPending();
821 EXPECT_EQ(kQuotaStatusOk, status()); 865 EXPECT_EQ(kQuotaStatusOk, status());
822 EXPECT_EQ(4000, usage()); 866 EXPECT_EQ(4000, usage());
823 EXPECT_EQ(kint64max, quota()); 867 EXPECT_EQ(available_space(), quota());
824 868
825 // Test when overbugdet. 869 // Test when over budget.
826 SetTemporaryGlobalQuota(100); 870 SetTemporaryGlobalQuota(100);
827 MessageLoop::current()->RunAllPending(); 871 MessageLoop::current()->RunAllPending();
828 872
829 const int kPerHostQuotaFor100 = 873 const int kPerHostQuotaFor100 =
830 100 / QuotaManager::kPerHostTemporaryPortion; 874 100 / QuotaManager::kPerHostTemporaryPortion;
831 875
832 GetUsageAndQuota(GURL("http://usage10/"), kTemp); 876 GetUsageAndQuota(GURL("http://usage10/"), kTemp);
833 MessageLoop::current()->RunAllPending(); 877 MessageLoop::current()->RunAllPending();
834 EXPECT_EQ(kQuotaStatusOk, status()); 878 EXPECT_EQ(kQuotaStatusOk, status());
835 EXPECT_EQ(10, usage()); 879 EXPECT_EQ(10, usage());
836 EXPECT_EQ(kPerHostQuotaFor100, quota()); 880 EXPECT_EQ(kPerHostQuotaFor100, quota());
837 881
838 GetUsageAndQuota(GURL("http://usage50/"), kTemp); 882 GetUsageAndQuota(GURL("http://usage50/"), kTemp);
839 MessageLoop::current()->RunAllPending(); 883 MessageLoop::current()->RunAllPending();
840 EXPECT_EQ(kQuotaStatusOk, status()); 884 EXPECT_EQ(kQuotaStatusOk, status());
841 EXPECT_EQ(50, usage()); 885 EXPECT_EQ(50, usage());
842 EXPECT_EQ(kPerHostQuotaFor100, quota()); 886 EXPECT_EQ(kPerHostQuotaFor100, quota());
843 887
888 GetAvailableSpace();
889 MessageLoop::current()->RunAllPending();
890 EXPECT_EQ(kQuotaStatusOk, status());
891 EXPECT_LE(0, available_space());
892
844 GetUsageAndQuota(GURL("http://unlimited/"), kTemp); 893 GetUsageAndQuota(GURL("http://unlimited/"), kTemp);
845 MessageLoop::current()->RunAllPending(); 894 MessageLoop::current()->RunAllPending();
846 EXPECT_EQ(kQuotaStatusOk, status()); 895 EXPECT_EQ(kQuotaStatusOk, status());
847 EXPECT_EQ(4000, usage()); 896 EXPECT_EQ(4000, usage());
848 EXPECT_EQ(kint64max, quota()); 897 EXPECT_EQ(available_space(), quota());
849 898
850 // Revoke the unlimited rights and make sure the change is noticed. 899 // Revoke the unlimited rights and make sure the change is noticed.
851 mock_special_storage_policy()->Reset(); 900 mock_special_storage_policy()->Reset();
852 mock_special_storage_policy()->NotifyChanged(); 901 mock_special_storage_policy()->NotifyChanged();
853 902
854 GetGlobalUsage(kTemp); 903 GetGlobalUsage(kTemp);
855 MessageLoop::current()->RunAllPending(); 904 MessageLoop::current()->RunAllPending();
856 EXPECT_EQ(10 + 50 + 4000, usage()); 905 EXPECT_EQ(10 + 50 + 4000, usage());
857 EXPECT_EQ(0, unlimited_usage()); 906 EXPECT_EQ(0, unlimited_usage());
858 907
(...skipping 1169 matching lines...) Expand 10 before | Expand all | Expand 10 after
2028 EXPECT_EQ(predelete_foo_tmp - 2 - 1, usage()); 2077 EXPECT_EQ(predelete_foo_tmp - 2 - 1, usage());
2029 2078
2030 DeleteHostData("foo.com", kTemp, 2079 DeleteHostData("foo.com", kTemp,
2031 QuotaClient::kDatabase | QuotaClient::kIndexedDatabase); 2080 QuotaClient::kDatabase | QuotaClient::kIndexedDatabase);
2032 MessageLoop::current()->RunAllPending(); 2081 MessageLoop::current()->RunAllPending();
2033 GetHostUsage("foo.com", kTemp); 2082 GetHostUsage("foo.com", kTemp);
2034 MessageLoop::current()->RunAllPending(); 2083 MessageLoop::current()->RunAllPending();
2035 EXPECT_EQ(predelete_foo_tmp - 8 - 4 - 2 - 1, usage()); 2084 EXPECT_EQ(predelete_foo_tmp - 8 - 4 - 2 - 1, usage());
2036 } 2085 }
2037 } // namespace quota 2086 } // namespace quota
OLDNEW
« webkit/quota/quota_manager.cc ('K') | « webkit/quota/quota_manager.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698