Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code

Unified Diff: test/Prefs.cpp

Issue 29499583: Issue 4938 - fix race conditions related to LazyFileSystem (Closed) Base URL: https://github.com/adblockplus/libadblockplus.git
Patch Set: Created July 27, 2017, 8:53 a.m.
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: test/Prefs.cpp
diff --git a/test/Prefs.cpp b/test/Prefs.cpp
index 6a3c1de9e5280ec68b0e0c75456db17edbeb7546..50e48de939ef17c53b348d4381791c8de1449a26 100644
--- a/test/Prefs.cpp
+++ b/test/Prefs.cpp
@@ -31,32 +31,46 @@ namespace
public:
IOBuffer prefsContents;
- IOBuffer Read(const std::string& path) const
+ void Read(const std::string& path, const ReadCallback& callback) const override
{
- if (path == "prefs.json" && !prefsContents.empty())
- return prefsContents;
-
- return LazyFileSystem::Read(path);
+ scheduler([this, path, callback]
+ {
+ if (path == "prefs.json" && !prefsContents.empty())
+ {
+ callback(IOBuffer(prefsContents.cbegin(), prefsContents.cend()), "");
+ return;
+ }
+
+ LazyFileSystem::Read(path, callback);
+ });
}
- void Write(const std::string& path, const IOBuffer& content)
+ void Write(const std::string& path, const IOBuffer& content, const Callback& callback) override
{
- if (path == "prefs.json")
- prefsContents = content;
- else
- LazyFileSystem::Write(path, content);
+ scheduler([this, path, content, callback]
+ {
+ if (path == "prefs.json")
+ {
+ prefsContents = content;
+ callback("");
+ }
+ });
}
- StatResult Stat(const std::string& path) const
+ void Stat(const std::string& path, const StatCallback& callback) const override
{
- if (path == "prefs.json")
+ scheduler([this, path, callback]
{
- StatResult result;
- result.exists = result.isFile = !prefsContents.empty();
- return result;
- }
-
- return LazyFileSystem::Stat(path);
+ if (path == "prefs.json")
+ {
+ StatResult result;
+ result.exists = result.isFile = !prefsContents.empty();
+ callback(result, "");
+ return;
+ }
+
+ LazyFileSystem::Stat(path, callback);
+ });
}
};
@@ -87,7 +101,7 @@ namespace
{
AdblockPlus::FilterEngine::CreationParameters createParams;
createParams.preconfiguredPrefs = preconfiguredPrefs;
- return AdblockPlus::FilterEngine::Create(jsEngine, createParams);
+ return ::CreateFilterEngine(*fileSystem, jsEngine, createParams);
}
};
}
@@ -124,8 +138,6 @@ TEST_F(PrefsTest, PrefsPersist)
filterEngine->SetPref("patternsfile", jsEngine->NewValue("filters.ini"));
filterEngine->SetPref("patternsbackupinterval", jsEngine->NewValue(48));
filterEngine->SetPref("subscriptions_autoupdate", jsEngine->NewValue(false));
-
- AdblockPlus::Sleep(100);
}
ASSERT_FALSE(fileSystem->prefsContents.empty());
@@ -201,8 +213,6 @@ TEST_F(PrefsTest, PrefsPersistWhenPreconfigured)
ASSERT_TRUE(filterEngine->GetPref("suppress_first_run_page").IsBool());
ASSERT_TRUE(filterEngine->GetPref("suppress_first_run_page").AsBool());
filterEngine->SetPref("suppress_first_run_page", jsEngine->NewValue(false));
-
- AdblockPlus::Sleep(100);
}
ASSERT_FALSE(fileSystem->prefsContents.empty());
« test/FilterEngine.cpp ('K') | « test/Notification.cpp ('k') | test/UpdateCheck.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld