| Index: test/UpdateCheck.cpp |
| diff --git a/test/UpdateCheck.cpp b/test/UpdateCheck.cpp |
| index 8b520ceabb7259598ff0b04121bbfec45add6bc0..a91d1ceef826dbcfc3025427d89895face43d32c 100644 |
| --- a/test/UpdateCheck.cpp |
| +++ b/test/UpdateCheck.cpp |
| @@ -31,26 +31,13 @@ namespace |
| source.replace(pos, find.size(), replace); |
| } |
| - std::string previousRequestUrl; |
| - class TestWebRequest : public LazyWebRequest |
| - { |
| - public: |
| - AdblockPlus::ServerResponse response; |
| - AdblockPlus::ServerResponse GET(const std::string& url, const AdblockPlus::HeaderList& requestHeaders) const |
| - { |
| - if (url.find("easylist") != std::string::npos) |
| - return LazyWebRequest::GET(url, requestHeaders); |
| - |
| - previousRequestUrl = url; |
| - return response; |
| - } |
| - }; |
| - |
| class UpdateCheckTest : public ::testing::Test |
| { |
| protected: |
| AdblockPlus::AppInfo appInfo; |
| - std::shared_ptr<TestWebRequest> webRequest; |
| + AdblockPlus::ServerResponse webRequestResponse; |
| + DelayedWebRequest::SharedTasks webRequestTasks; |
| + DelayedTimer::SharedTasks timerTasks; |
| AdblockPlus::JsEnginePtr jsEngine; |
| FilterEnginePtr filterEngine; |
| @@ -61,8 +48,6 @@ namespace |
| void SetUp() |
| { |
| - webRequest = std::make_shared<TestWebRequest>(); |
| - |
| eventCallbackCalled = false; |
| updateCallbackCalled = false; |
| Reset(); |
| @@ -74,9 +59,9 @@ namespace |
| jsEngineParams.appInfo = appInfo; |
| jsEngineParams.logSystem.reset(new LazyLogSystem()); |
| jsEngineParams.fileSystem.reset(new LazyFileSystem()); |
| - jsEngineParams.timer = CreateDefaultTimer(); |
| + jsEngineParams.timer = DelayedTimer::New(timerTasks); |
| + jsEngineParams.webRequest = DelayedWebRequest::New(webRequestTasks); |
| jsEngine = CreateJsEngine(std::move(jsEngineParams)); |
| - jsEngine->SetWebRequest(webRequest); |
| jsEngine->SetEventCallback("updateAvailable", [this](JsValueList&& params) |
| { |
| eventCallbackCalled = true; |
| @@ -86,23 +71,39 @@ namespace |
| filterEngine = AdblockPlus::FilterEngine::Create(jsEngine); |
| } |
| - void ForceUpdateCheck() |
| + // Returns a URL or the empty string if there is no such request. |
| + std::string ProcessPendingUpdateWebRequest() |
| { |
| - filterEngine->ForceUpdateCheck( |
| - std::bind(&UpdateCheckTest::UpdateCallback, this, std::placeholders::_1)); |
| + auto ii = webRequestTasks->begin(); |
| + while (ii != webRequestTasks->end()) |
| + { |
|
hub
2017/05/10 17:53:19
Maybe I'm missing something, but wouldn't a for lo
sergei
2017/05/10 18:15:54
it will but it won't remove the found entry. Do yo
hub
2017/05/10 18:55:54
uh. I missed that little detail :-/
|
| + if (ii->url.find("update.json") != std::string::npos) |
| + { |
| + ii->getCallback(webRequestResponse); |
| + auto url = ii->url; |
| + webRequestTasks->erase(ii); |
| + return url; |
| + } |
| + ++ii; |
| + } |
| + return std::string(); |
| } |
| - void UpdateCallback(const std::string& error) |
| + void ForceUpdateCheck() |
| { |
| - updateCallbackCalled = true; |
| - updateError = error; |
| + filterEngine->ForceUpdateCheck([this](const std::string& error) |
| + { |
| + updateCallbackCalled = true; |
| + updateError = error; |
| + }); |
| + DelayedTimer::ProcessImmediateTimers(timerTasks); |
| } |
| }; |
| } |
| TEST_F(UpdateCheckTest, RequestFailure) |
| { |
| - webRequest->response.status = IWebRequest::NS_ERROR_FAILURE; |
| + webRequestResponse.status = IWebRequest::NS_ERROR_FAILURE; |
| appInfo.name = "1"; |
| appInfo.version = "3"; |
| @@ -113,7 +114,7 @@ TEST_F(UpdateCheckTest, RequestFailure) |
| Reset(); |
| ForceUpdateCheck(); |
| - AdblockPlus::Sleep(100); |
| + auto requestUrl = ProcessPendingUpdateWebRequest(); |
| ASSERT_FALSE(eventCallbackCalled); |
| ASSERT_TRUE(updateCallbackCalled); |
| @@ -132,14 +133,14 @@ TEST_F(UpdateCheckTest, RequestFailure) |
| "&platform=" + platform + |
| "&platformVersion=" + platformVersion + |
| "&lastVersion=0&downloadCount=0"; |
| - ASSERT_EQ(expectedUrl, previousRequestUrl); |
| + ASSERT_EQ(expectedUrl, requestUrl); |
| } |
| TEST_F(UpdateCheckTest, UpdateAvailable) |
| { |
| - webRequest->response.status = IWebRequest::NS_OK; |
| - webRequest->response.responseStatus = 200; |
| - webRequest->response.responseText = "{\"1\": {\"version\":\"3.1\",\"url\":\"https://foo.bar/\"}}"; |
| + webRequestResponse.status = IWebRequest::NS_OK; |
| + webRequestResponse.responseStatus = 200; |
| + webRequestResponse.responseText = "{\"1\": {\"version\":\"3.1\",\"url\":\"https://foo.bar/\"}}"; |
| appInfo.name = "1"; |
| appInfo.version = "3"; |
| @@ -150,7 +151,7 @@ TEST_F(UpdateCheckTest, UpdateAvailable) |
| Reset(); |
| ForceUpdateCheck(); |
| - AdblockPlus::Sleep(100); |
| + auto requestUrl = ProcessPendingUpdateWebRequest(); |
| ASSERT_TRUE(eventCallbackCalled); |
| ASSERT_EQ(1u, eventCallbackParams.size()); |
| @@ -171,14 +172,14 @@ TEST_F(UpdateCheckTest, UpdateAvailable) |
| "&platform=" + platform + |
| "&platformVersion=" + platformVersion + |
| "&lastVersion=0&downloadCount=0"; |
| - ASSERT_EQ(expectedUrl, previousRequestUrl); |
| + ASSERT_EQ(expectedUrl, requestUrl); |
| } |
| TEST_F(UpdateCheckTest, ApplicationUpdateAvailable) |
| { |
| - webRequest->response.status = IWebRequest::NS_OK; |
| - webRequest->response.responseStatus = 200; |
| - webRequest->response.responseText = "{\"1/4\": {\"version\":\"3.1\",\"url\":\"https://foo.bar/\"}}"; |
| + webRequestResponse.status = IWebRequest::NS_OK; |
| + webRequestResponse.responseStatus = 200; |
| + webRequestResponse.responseText = "{\"1/4\": {\"version\":\"3.1\",\"url\":\"https://foo.bar/\"}}"; |
| appInfo.name = "1"; |
| appInfo.version = "3"; |
| @@ -189,20 +190,19 @@ TEST_F(UpdateCheckTest, ApplicationUpdateAvailable) |
| Reset(); |
| ForceUpdateCheck(); |
| - AdblockPlus::Sleep(100); |
| + ProcessPendingUpdateWebRequest(); |
| ASSERT_TRUE(eventCallbackCalled); |
| ASSERT_EQ(1u, eventCallbackParams.size()); |
| ASSERT_EQ("https://foo.bar/", eventCallbackParams[0].AsString()); |
| - ASSERT_TRUE(updateCallbackCalled); |
| ASSERT_TRUE(updateError.empty()); |
| } |
| TEST_F(UpdateCheckTest, WrongApplication) |
| { |
| - webRequest->response.status = IWebRequest::NS_OK; |
| - webRequest->response.responseStatus = 200; |
| - webRequest->response.responseText = "{\"1/3\": {\"version\":\"3.1\",\"url\":\"https://foo.bar/\"}}"; |
| + webRequestResponse.status = IWebRequest::NS_OK; |
| + webRequestResponse.responseStatus = 200; |
| + webRequestResponse.responseText = "{\"1/3\": {\"version\":\"3.1\",\"url\":\"https://foo.bar/\"}}"; |
| appInfo.name = "1"; |
| appInfo.version = "3"; |
| @@ -213,7 +213,7 @@ TEST_F(UpdateCheckTest, WrongApplication) |
| Reset(); |
| ForceUpdateCheck(); |
| - AdblockPlus::Sleep(100); |
| + ProcessPendingUpdateWebRequest(); |
| ASSERT_FALSE(eventCallbackCalled); |
| ASSERT_TRUE(updateCallbackCalled); |
| @@ -222,9 +222,9 @@ TEST_F(UpdateCheckTest, WrongApplication) |
| TEST_F(UpdateCheckTest, WrongVersion) |
| { |
| - webRequest->response.status = IWebRequest::NS_OK; |
| - webRequest->response.responseStatus = 200; |
| - webRequest->response.responseText = "{\"1\": {\"version\":\"3\",\"url\":\"https://foo.bar/\"}}"; |
| + webRequestResponse.status = IWebRequest::NS_OK; |
| + webRequestResponse.responseStatus = 200; |
| + webRequestResponse.responseText = "{\"1\": {\"version\":\"3\",\"url\":\"https://foo.bar/\"}}"; |
| appInfo.name = "1"; |
| appInfo.version = "3"; |
| @@ -235,7 +235,7 @@ TEST_F(UpdateCheckTest, WrongVersion) |
| Reset(); |
| ForceUpdateCheck(); |
| - AdblockPlus::Sleep(100); |
| + ProcessPendingUpdateWebRequest(); |
| ASSERT_FALSE(eventCallbackCalled); |
| ASSERT_TRUE(updateCallbackCalled); |
| @@ -244,9 +244,9 @@ TEST_F(UpdateCheckTest, WrongVersion) |
| TEST_F(UpdateCheckTest, WrongURL) |
| { |
| - webRequest->response.status = IWebRequest::NS_OK; |
| - webRequest->response.responseStatus = 200; |
| - webRequest->response.responseText = "{\"1\": {\"version\":\"3.1\",\"url\":\"http://insecure/\"}}"; |
| + webRequestResponse.status = IWebRequest::NS_OK; |
| + webRequestResponse.responseStatus = 200; |
| + webRequestResponse.responseText = "{\"1\": {\"version\":\"3.1\",\"url\":\"http://insecure/\"}}"; |
| appInfo.name = "1"; |
| appInfo.version = "3"; |
| @@ -257,7 +257,7 @@ TEST_F(UpdateCheckTest, WrongURL) |
| Reset(); |
| ForceUpdateCheck(); |
| - AdblockPlus::Sleep(100); |
| + ProcessPendingUpdateWebRequest(); |
| ASSERT_FALSE(eventCallbackCalled); |
| ASSERT_TRUE(updateCallbackCalled); |