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

Side by Side Diff: base/prefs/json_pref_store_unittest.cc

Issue 1127963002: Implement lossy pref behavior for JsonPrefStore. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@prefs-fix-flags
Patch Set: Created 5 years, 7 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
« no previous file with comments | « base/prefs/json_pref_store.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 "base/prefs/json_pref_store.h" 5 #include "base/prefs/json_pref_store.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/files/file_util.h" 8 #include "base/files/file_util.h"
9 #include "base/files/scoped_temp_dir.h" 9 #include "base/files/scoped_temp_dir.h"
10 #include "base/location.h" 10 #include "base/location.h"
(...skipping 791 matching lines...) Expand 10 before | Expand all | Expand 10 after
802 histogram.ReportOutstandingWrites(); 802 histogram.ReportOutstandingWrites();
803 scoped_ptr<HistogramSamples> samples = 803 scoped_ptr<HistogramSamples> samples =
804 histogram.GetHistogram()->SnapshotSamples(); 804 histogram.GetHistogram()->SnapshotSamples();
805 ASSERT_EQ(3, samples->GetCount(0)); 805 ASSERT_EQ(3, samples->GetCount(0));
806 ASSERT_EQ(1, samples->GetCount(1)); 806 ASSERT_EQ(1, samples->GetCount(1));
807 ASSERT_EQ(1, samples->GetCount(2)); 807 ASSERT_EQ(1, samples->GetCount(2));
808 ASSERT_EQ(1, samples->GetCount(3)); 808 ASSERT_EQ(1, samples->GetCount(3));
809 ASSERT_EQ(6, samples->TotalCount()); 809 ASSERT_EQ(6, samples->TotalCount());
810 } 810 }
811 811
812 class JsonPrefStoreLossyWriteTest : public JsonPrefStoreTest {
813 protected:
814 // A struct used for conveniently setting values in the PrefStore
815 struct PrefDetails {
Mattias Nissler (ping if slow) 2015/05/08 07:04:25 This is still here, but I don't see an answer to m
raymes 2015/05/11 00:57:27 I removed this.
816 std::string key;
817 scoped_ptr<base::Value> value;
818 uint32 flags;
819 };
820
821 static const base::FilePath::CharType kTestFile[];
822
823 static PrefDetails GetNormalPrefDetails() {
824 return {"normal",
825 scoped_ptr<base::Value>(new base::StringValue("normal")),
826 WriteablePrefStore::DEFAULT_PREF_WRITE_FLAGS};
827 }
828
829 static PrefDetails GetLossyPrefDetails() {
830 return {"lossy",
831 scoped_ptr<base::Value>(new base::StringValue("lossy")),
832 WriteablePrefStore::LOSSY_PREF_WRITE_FLAG};
833 }
834
835 void SetUp() override {
836 JsonPrefStoreTest::SetUp();
837 base::DeleteFile(base::FilePath(kTestFile), false);
838 }
839
840 void TearDown() override {
841 base::DeleteFile(base::FilePath(kTestFile), false);
842 JsonPrefStoreTest::TearDown();
843 }
844
845 // Creates a JsonPrefStore with the given |file_writer|.
846 scoped_refptr<JsonPrefStore> CreatePrefStore() {
847 return new JsonPrefStore(base::FilePath(kTestFile),
848 message_loop_.task_runner(),
849 scoped_ptr<PrefFilter>());
850 }
851
852 // Return the ImportantFileWriter for a given JsonPrefStore.
853 ImportantFileWriter* GetImportantFileWriter(
854 scoped_refptr<JsonPrefStore> pref_store) {
855 return &(pref_store->writer_);
856 }
857
858 // Get the contents of kTestFile. Pumps the message loop before returning the
859 // result.
860 std::string GetTestFileContents() {
861 MessageLoop::current()->RunUntilIdle();
862 std::string file_contents;
863 CHECK(ReadFileToString(base::FilePath(kTestFile), &file_contents));
864 return file_contents;
865 }
866 };
867
868 // static
869 const base::FilePath::CharType JsonPrefStoreLossyWriteTest::kTestFile[] =
870 FILE_PATH_LITERAL("/tmp/Local_State");
871
872 TEST_F(JsonPrefStoreLossyWriteTest, LossyWriteBasic) {
873 scoped_refptr<JsonPrefStore> pref_store = CreatePrefStore();
874 ImportantFileWriter* file_writer = GetImportantFileWriter(pref_store);
875
876 PrefDetails normal = GetNormalPrefDetails();
877 PrefDetails lossy = GetLossyPrefDetails();
878
879 // Set a normal pref and check that it gets scheduled to be written.
880 ASSERT_FALSE(file_writer->HasPendingWrite());
881 pref_store->SetValue(normal.key, normal.value->DeepCopy(), normal.flags);
882 ASSERT_TRUE(file_writer->HasPendingWrite());
883 file_writer->DoScheduledWrite();
884 ASSERT_EQ("{\"normal\":\"normal\"}", GetTestFileContents());
885 ASSERT_FALSE(file_writer->HasPendingWrite());
886
887 // Set a lossy pref and check that it is not scheduled to be written.
888 // SetValue/RemoveValue
Mattias Nissler (ping if slow) 2015/05/08 07:04:25 Missing period?
raymes 2015/05/11 00:57:27 Done.
889 pref_store->SetValue(lossy.key, lossy.value->DeepCopy(), lossy.flags);
890 ASSERT_FALSE(file_writer->HasPendingWrite());
891 pref_store->RemoveValue(lossy.key, lossy.flags);
892 ASSERT_FALSE(file_writer->HasPendingWrite());
893
894 // SetValueSilently/RemoveValueSilently.
895 pref_store->SetValueSilently(lossy.key, lossy.value->DeepCopy(), lossy.flags);
896 ASSERT_FALSE(file_writer->HasPendingWrite());
897 pref_store->RemoveValueSilently(lossy.key, lossy.flags);
898 ASSERT_FALSE(file_writer->HasPendingWrite());
899
900 // ReportValueChanged.
901 pref_store->SetValue(lossy.key, lossy.value->DeepCopy(), lossy.flags);
902 ASSERT_FALSE(file_writer->HasPendingWrite());
903 pref_store->ReportValueChanged(lossy.key, lossy.flags);
904 ASSERT_FALSE(file_writer->HasPendingWrite());
905
906 // Call CommitPendingWrite and check that the lossy pref and the normal pref
907 // are there with the last values set above.
908 pref_store->CommitPendingWrite();
909 ASSERT_FALSE(file_writer->HasPendingWrite());
910 ASSERT_EQ("{\"lossy\":\"lossy\",\"normal\":\"normal\"}",
911 GetTestFileContents());
912 }
913
914 TEST_F(JsonPrefStoreLossyWriteTest, LossyWriteMixed) {
915 scoped_refptr<JsonPrefStore> pref_store = CreatePrefStore();
916 ImportantFileWriter* file_writer = GetImportantFileWriter(pref_store);
917
918 PrefDetails normal = GetNormalPrefDetails();
919 PrefDetails lossy = GetLossyPrefDetails();
920
921 // Set a normal pref and check that it is scheduled to be written.
922 ASSERT_FALSE(file_writer->HasPendingWrite());
923 pref_store->SetValue(normal.key, normal.value->DeepCopy(), normal.flags);
924 ASSERT_TRUE(file_writer->HasPendingWrite());
925 // Set a lossy pref and check that the write is still scheduled.
926 pref_store->SetValue(lossy.key, lossy.value->DeepCopy(), lossy.flags);
927 ASSERT_TRUE(file_writer->HasPendingWrite());
928 // Call DoScheduledWrite and check both prefs get written.
929 file_writer->DoScheduledWrite();
930 ASSERT_EQ("{\"lossy\":\"lossy\",\"normal\":\"normal\"}",
931 GetTestFileContents());
932 ASSERT_FALSE(file_writer->HasPendingWrite());
933
934 // Cleanup.
Mattias Nissler (ping if slow) 2015/05/08 07:04:25 Instead of doing a cleanup and starting fresh, why
raymes 2015/05/11 00:57:27 Done.
935 pref_store->RemoveValue(normal.key, normal.flags);
936 pref_store->RemoveValue(lossy.key, lossy.flags);
937 pref_store->CommitPendingWrite();
938 ASSERT_FALSE(file_writer->HasPendingWrite());
939
940 // Set a lossy pref and check that it is not scheduled to be written.
941 pref_store->SetValue(lossy.key, lossy.value->DeepCopy(), lossy.flags);
942 ASSERT_FALSE(file_writer->HasPendingWrite());
943 // Set a normal pref and check that it is scheduled to be written.
944 pref_store->SetValue(normal.key, normal.value->DeepCopy(), normal.flags);
945 ASSERT_TRUE(file_writer->HasPendingWrite());
946 // Call DoScheduledWrite and check both prefs get written.
947 file_writer->DoScheduledWrite();
948 ASSERT_EQ("{\"lossy\":\"lossy\",\"normal\":\"normal\"}",
949 GetTestFileContents());
950 ASSERT_FALSE(file_writer->HasPendingWrite());
951 }
952
812 } // namespace base 953 } // namespace base
OLDNEW
« no previous file with comments | « base/prefs/json_pref_store.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698