LEFT | RIGHT |
1 /* | 1 /* |
2 * This file is part of Adblock Plus <https://adblockplus.org/>, | 2 * This file is part of Adblock Plus <https://adblockplus.org/>, |
3 * Copyright (C) 2006-2016 Eyeo GmbH | 3 * Copyright (C) 2006-2017 eyeo GmbH |
4 * | 4 * |
5 * Adblock Plus is free software: you can redistribute it and/or modify | 5 * Adblock Plus is free software: you can redistribute it and/or modify |
6 * it under the terms of the GNU General Public License version 3 as | 6 * it under the terms of the GNU General Public License version 3 as |
7 * published by the Free Software Foundation. | 7 * published by the Free Software Foundation. |
8 * | 8 * |
9 * Adblock Plus is distributed in the hope that it will be useful, | 9 * Adblock Plus is distributed in the hope that it will be useful, |
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of | 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
12 * GNU General Public License for more details. | 12 * GNU General Public License for more details. |
13 * | 13 * |
14 * You should have received a copy of the GNU General Public License | 14 * You should have received a copy of the GNU General Public License |
15 * along with Adblock Plus. If not, see <http://www.gnu.org/licenses/>. | 15 * along with Adblock Plus. If not, see <http://www.gnu.org/licenses/>. |
16 */ | 16 */ |
17 | 17 |
18 #include "BaseJsTest.h" | 18 #include "BaseJsTest.h" |
19 #include <thread> | 19 #include <thread> |
| 20 #include <condition_variable> |
20 | 21 |
21 using namespace AdblockPlus; | 22 using namespace AdblockPlus; |
| 23 |
| 24 namespace AdblockPlus |
| 25 { |
| 26 namespace Utils |
| 27 { |
| 28 inline bool BeginsWith(const std::string& str, const std::string& beginning) |
| 29 { |
| 30 return 0 == str.compare(0, beginning.size(), beginning); |
| 31 } |
| 32 } |
| 33 } |
22 | 34 |
23 namespace | 35 namespace |
24 { | 36 { |
25 class VeryLazyFileSystem : public LazyFileSystem | 37 class VeryLazyFileSystem : public LazyFileSystem |
26 { | 38 { |
27 public: | 39 public: |
28 StatResult Stat(const std::string& path) const | 40 StatResult Stat(const std::string& path) const |
29 { | 41 { |
30 return StatResult(); | 42 return StatResult(); |
31 } | 43 } |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
86 AdblockPlus::AppInfo appInfo; | 98 AdblockPlus::AppInfo appInfo; |
87 appInfo.name = "test"; | 99 appInfo.name = "test"; |
88 appInfo.version = "1.0.1"; | 100 appInfo.version = "1.0.1"; |
89 AdblockPlus::JsEnginePtr jsEngine = CreateJsEngine(appInfo); | 101 AdblockPlus::JsEnginePtr jsEngine = CreateJsEngine(appInfo); |
90 jsEngine->SetFileSystem(AdblockPlus::FileSystemPtr(new LazyFileSystem)); | 102 jsEngine->SetFileSystem(AdblockPlus::FileSystemPtr(new LazyFileSystem)); |
91 mockWebRequest = new MockWebRequest; | 103 mockWebRequest = new MockWebRequest; |
92 jsEngine->SetWebRequest(AdblockPlus::WebRequestPtr(mockWebRequest)); | 104 jsEngine->SetWebRequest(AdblockPlus::WebRequestPtr(mockWebRequest)); |
93 filterEngine = AdblockPlus::FilterEngine::Create(jsEngine); | 105 filterEngine = AdblockPlus::FilterEngine::Create(jsEngine); |
94 } | 106 } |
95 }; | 107 }; |
96 | |
97 struct MockUpdateAvailableCallback | |
98 { | |
99 MockUpdateAvailableCallback(int& timesCalled) : timesCalled(timesCalled) {} | |
100 | |
101 void operator()(const std::string&) | |
102 { | |
103 timesCalled++; | |
104 } | |
105 | |
106 private: | |
107 // We currently cannot store timesCalled in the functor, see: | |
108 // https://issues.adblockplus.org/ticket/1378. | |
109 int& timesCalled; | |
110 }; | |
111 | |
112 // Workaround for https://issues.adblockplus.org/ticket/1397. | |
113 void NoOpUpdaterCallback(const std::string&) {} | |
114 | 108 |
115 class FilterEngineWithFreshFolder : public ::testing::Test | 109 class FilterEngineWithFreshFolder : public ::testing::Test |
116 { | 110 { |
117 protected: | 111 protected: |
118 FileSystemPtr fileSystem; | 112 FileSystemPtr fileSystem; |
119 std::weak_ptr<JsEngine> weakJsEngine; | 113 std::weak_ptr<JsEngine> weakJsEngine; |
120 | 114 |
121 void SetUp() override | 115 void SetUp() override |
122 { | 116 { |
123 fileSystem.reset(new DefaultFileSystem()); | 117 fileSystem.reset(new DefaultFileSystem()); |
(...skipping 30 matching lines...) Expand all Loading... |
154 return true; | 148 return true; |
155 } | 149 } |
156 catch (...) | 150 catch (...) |
157 { | 151 { |
158 return false; | 152 return false; |
159 } | 153 } |
160 }; | 154 }; |
161 int i = 5; | 155 int i = 5; |
162 while ((i-- > 0 && weakJsEngine.lock()) || !safeRemove()) | 156 while ((i-- > 0 && weakJsEngine.lock()) || !safeRemove()) |
163 std::this_thread::sleep_for(std::chrono::seconds(2)); | 157 std::this_thread::sleep_for(std::chrono::seconds(2)); |
| 158 } |
| 159 }; |
| 160 |
| 161 class FilterEngineIsAllowedConnectionTest : public BaseJsTest |
| 162 { |
| 163 class MockWebRequest : public LazyWebRequest |
| 164 { |
| 165 public: |
| 166 std::map</*beginning of url*/std::string, AdblockPlus::ServerResponse> res
ponses; |
| 167 |
| 168 AdblockPlus::ServerResponse GET(const std::string& url, |
| 169 const AdblockPlus::HeaderList& requestHeaders) const |
| 170 { |
| 171 for (const auto& response : responses) |
| 172 { |
| 173 if (Utils::BeginsWith(url, response.first)) |
| 174 { |
| 175 return response.second; |
| 176 } |
| 177 } |
| 178 return LazyWebRequest::GET(url, requestHeaders); |
| 179 } |
| 180 }; |
| 181 class SyncStrings |
| 182 { |
| 183 public: |
| 184 void Add(const std::string* value) |
| 185 { |
| 186 std::lock_guard<std::mutex> lock(mutex); |
| 187 strings.emplace_back(!!value, value ? *value : ""); |
| 188 } |
| 189 std::vector<std::pair<bool, std::string>> GetStrings() const |
| 190 { |
| 191 std::lock_guard<std::mutex> lock(mutex); |
| 192 return strings; |
| 193 } |
| 194 void Clear() |
| 195 { |
| 196 std::lock_guard<std::mutex> lock(mutex); |
| 197 strings.clear(); |
| 198 } |
| 199 private: |
| 200 mutable std::mutex mutex; |
| 201 std::vector<std::pair<bool, std::string>> strings; |
| 202 }; |
| 203 protected: |
| 204 MockWebRequest* webRequest; |
| 205 std::string subscriptionUrlPrefix; |
| 206 FilterEngine::CreationParameters createParams; |
| 207 SyncStrings capturedConnectionTypes; |
| 208 bool isConnectionAllowed; |
| 209 FilterEnginePtr filterEngine; |
| 210 |
| 211 struct |
| 212 { |
| 213 std::string url; |
| 214 std::mutex mutex; |
| 215 std::condition_variable cv; |
| 216 } downloadStatusChanged; |
| 217 |
| 218 void SetUp() |
| 219 { |
| 220 BaseJsTest::SetUp(); |
| 221 jsEngine->SetFileSystem(AdblockPlus::FileSystemPtr(new LazyFileSystem())); |
| 222 jsEngine->SetWebRequest(AdblockPlus::WebRequestPtr(webRequest = new MockWe
bRequest())); |
| 223 jsEngine->SetLogSystem(AdblockPlus::LogSystemPtr(new LazyLogSystem())); |
| 224 |
| 225 subscriptionUrlPrefix = "http://example"; |
| 226 ServerResponse exampleSubscriptionResponse; |
| 227 exampleSubscriptionResponse.responseStatus = 200; |
| 228 exampleSubscriptionResponse.status = WebRequest::NS_OK; |
| 229 exampleSubscriptionResponse.responseText = "[Adblock Plus 2.0]\n||example.
com"; |
| 230 webRequest->responses.emplace(subscriptionUrlPrefix, exampleSubscriptionRe
sponse); |
| 231 createParams.preconfiguredPrefs["first_run_subscription_auto_select"] = js
Engine->NewValue(false); |
| 232 isConnectionAllowed = true; |
| 233 createParams.isConnectionAllowedCallback = [this](const std::string* allow
edConnectionType)->bool{ |
| 234 capturedConnectionTypes.Add(allowedConnectionType); |
| 235 return isConnectionAllowed; |
| 236 }; |
| 237 jsEngine->SetEventCallback("filterChange", [this](const JsValueList& param
s/*action, item*/) |
| 238 { |
| 239 ASSERT_EQ(2u, params.size()); |
| 240 if (params[0]->AsString() == "subscription.downloadStatus") |
| 241 { |
| 242 { |
| 243 std::lock_guard<std::mutex> lock(downloadStatusChanged.mutex); |
| 244 downloadStatusChanged.url = params[1]->GetProperty("url")->AsString(
); |
| 245 } |
| 246 downloadStatusChanged.cv.notify_one(); |
| 247 } |
| 248 }); |
| 249 } |
| 250 |
| 251 SubscriptionPtr EnsureExampleSubscriptionAndForceUpdate(const std::string& a
pppendToUrl = std::string()) |
| 252 { |
| 253 if (!filterEngine) |
| 254 filterEngine = FilterEngine::Create(jsEngine, createParams); |
| 255 auto subscriptionUrl = subscriptionUrlPrefix + apppendToUrl; |
| 256 auto subscription = filterEngine->GetSubscription(subscriptionUrl); |
| 257 EXPECT_EQ(0u, subscription->GetProperty("filters")->AsList().size()) << su
bscriptionUrl; |
| 258 EXPECT_TRUE(subscription->GetProperty("downloadStatus")->IsNull()) << subs
criptionUrl; |
| 259 subscription->UpdateFilters(); |
| 260 { |
| 261 std::unique_lock<std::mutex> lock(downloadStatusChanged.mutex); |
| 262 downloadStatusChanged.cv.wait_for(lock, |
| 263 /*don't block tests forever*/std::chrono::seconds(5), |
| 264 [this, subscriptionUrl]()->bool |
| 265 { |
| 266 return subscriptionUrl == downloadStatusChanged.url; |
| 267 }); |
| 268 // Basically it's enough to wait only for downloadStatus although there |
| 269 // is still some JS code being executed. Any following attempt to work |
| 270 // with subscription object will result in execution of JS, which will |
| 271 // be blocked until finishing of currently running code. |
| 272 } |
| 273 return subscription; |
164 } | 274 } |
165 }; | 275 }; |
166 } | 276 } |
167 | 277 |
168 TEST_F(FilterEngineTest, FilterCreation) | 278 TEST_F(FilterEngineTest, FilterCreation) |
169 { | 279 { |
170 AdblockPlus::FilterPtr filter1 = filterEngine->GetFilter("foo"); | 280 AdblockPlus::FilterPtr filter1 = filterEngine->GetFilter("foo"); |
171 ASSERT_EQ(AdblockPlus::Filter::TYPE_BLOCKING, filter1->GetType()); | 281 ASSERT_EQ(AdblockPlus::Filter::TYPE_BLOCKING, filter1->GetType()); |
172 AdblockPlus::FilterPtr filter2 = filterEngine->GetFilter("@@foo"); | 282 AdblockPlus::FilterPtr filter2 = filterEngine->GetFilter("@@foo"); |
173 ASSERT_EQ(AdblockPlus::Filter::TYPE_EXCEPTION, filter2->GetType()); | 283 ASSERT_EQ(AdblockPlus::Filter::TYPE_EXCEPTION, filter2->GetType()); |
(...skipping 335 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
509 mockWebRequest->response.responseStatus = 200; | 619 mockWebRequest->response.responseStatus = 200; |
510 mockWebRequest->response.responseText = "\ | 620 mockWebRequest->response.responseText = "\ |
511 {\ | 621 {\ |
512 \"test\": {\ | 622 \"test\": {\ |
513 \"version\": \"1.0.2\",\ | 623 \"version\": \"1.0.2\",\ |
514 \"url\": \"https://downloads.adblockplus.org/test-1.0.2.tar.gz?update\"\ | 624 \"url\": \"https://downloads.adblockplus.org/test-1.0.2.tar.gz?update\"\ |
515 }\ | 625 }\ |
516 }"; | 626 }"; |
517 | 627 |
518 int timesCalled = 0; | 628 int timesCalled = 0; |
519 MockUpdateAvailableCallback mockUpdateAvailableCallback(timesCalled); | 629 filterEngine->SetUpdateAvailableCallback([×Called](const std::string&)->v
oid |
520 | 630 { |
521 filterEngine->SetUpdateAvailableCallback(mockUpdateAvailableCallback); | 631 ++timesCalled; |
522 filterEngine->ForceUpdateCheck(&NoOpUpdaterCallback); | 632 }); |
| 633 filterEngine->ForceUpdateCheck(); |
523 AdblockPlus::Sleep(100); | 634 AdblockPlus::Sleep(100); |
524 ASSERT_EQ(1, timesCalled); | 635 EXPECT_EQ(1, timesCalled); |
525 | 636 |
526 filterEngine->RemoveUpdateAvailableCallback(); | 637 filterEngine->RemoveUpdateAvailableCallback(); |
527 filterEngine->ForceUpdateCheck(&NoOpUpdaterCallback); | 638 filterEngine->ForceUpdateCheck(); |
528 AdblockPlus::Sleep(100); | 639 AdblockPlus::Sleep(100); |
529 ASSERT_EQ(1, timesCalled); | 640 EXPECT_EQ(1, timesCalled); |
| 641 } |
| 642 |
| 643 TEST_F(UpdaterTest, ForceUpdateCheck) |
| 644 { |
| 645 mockWebRequest->response.status = 0; |
| 646 mockWebRequest->response.responseStatus = 200; |
| 647 mockWebRequest->response.responseText = "\ |
| 648 {\ |
| 649 \"test\": {\ |
| 650 \"version\": \"1.0.2\",\ |
| 651 \"url\": \"https://downloads.adblockplus.org/test-1.0.2.tar.gz?update\"\ |
| 652 }\ |
| 653 }"; |
| 654 |
| 655 int called = 0; // 0 - not called; 1 - once, no error; 2 - error |
| 656 filterEngine->ForceUpdateCheck([&called](const std::string& error)->void |
| 657 { |
| 658 called = error.empty() ? 1 : 2; |
| 659 }); |
| 660 AdblockPlus::Sleep(100); |
| 661 EXPECT_EQ(1, called); |
530 } | 662 } |
531 | 663 |
532 TEST_F(FilterEngineTest, DocumentWhitelisting) | 664 TEST_F(FilterEngineTest, DocumentWhitelisting) |
533 { | 665 { |
534 filterEngine->GetFilter("@@||example.org^$document")->AddToList(); | 666 filterEngine->GetFilter("@@||example.org^$document")->AddToList(); |
535 filterEngine->GetFilter("@@||example.com^$document,domain=example.de")->AddToL
ist(); | 667 filterEngine->GetFilter("@@||example.com^$document,domain=example.de")->AddToL
ist(); |
536 | 668 |
537 ASSERT_TRUE(filterEngine->IsDocumentWhitelisted( | 669 ASSERT_TRUE(filterEngine->IsDocumentWhitelisted( |
538 "http://example.org", | 670 "http://example.org", |
539 std::vector<std::string>())); | 671 std::vector<std::string>())); |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
595 auto jsEngine = createJsEngine(appInfo); | 727 auto jsEngine = createJsEngine(appInfo); |
596 auto filterEngine = AdblockPlus::FilterEngine::Create(jsEngine); | 728 auto filterEngine = AdblockPlus::FilterEngine::Create(jsEngine); |
597 const auto subscriptions = filterEngine->GetListedSubscriptions(); | 729 const auto subscriptions = filterEngine->GetListedSubscriptions(); |
598 ASSERT_EQ(2u, subscriptions.size()); | 730 ASSERT_EQ(2u, subscriptions.size()); |
599 SubscriptionPtr aaSubscription; | 731 SubscriptionPtr aaSubscription; |
600 SubscriptionPtr langSubscription; | 732 SubscriptionPtr langSubscription; |
601 if (subscriptions[0]->IsAA()) | 733 if (subscriptions[0]->IsAA()) |
602 { | 734 { |
603 aaSubscription = subscriptions[0]; | 735 aaSubscription = subscriptions[0]; |
604 langSubscription = subscriptions[1]; | 736 langSubscription = subscriptions[1]; |
605 } else if (subscriptions[1]->IsAA()) | 737 } |
| 738 else if (subscriptions[1]->IsAA()) |
606 { | 739 { |
607 aaSubscription = subscriptions[1]; | 740 aaSubscription = subscriptions[1]; |
608 langSubscription = subscriptions[0]; | 741 langSubscription = subscriptions[0]; |
609 } | 742 } |
610 ASSERT_NE(nullptr, aaSubscription); | 743 ASSERT_NE(nullptr, aaSubscription); |
611 ASSERT_NE(nullptr, langSubscription); | 744 ASSERT_NE(nullptr, langSubscription); |
612 EXPECT_EQ(langSubscriptionUrl, langSubscription->GetProperty("url")->AsString(
)); | 745 EXPECT_EQ(langSubscriptionUrl, langSubscription->GetProperty("url")->AsString(
)); |
613 EXPECT_TRUE(filterEngine->IsAAEnabled()); | 746 EXPECT_TRUE(filterEngine->IsAAEnabled()); |
614 } | 747 } |
615 | 748 |
(...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
769 { | 902 { |
770 // no subscription (because of preconfigured prefs.json and patterns.ini
), | 903 // no subscription (because of preconfigured prefs.json and patterns.ini
), |
771 // though it should be enabled by default in a non-test environment, it'
s tested in | 904 // though it should be enabled by default in a non-test environment, it'
s tested in |
772 // corresponding tests. | 905 // corresponding tests. |
773 const auto subscriptions = filterEngine->GetListedSubscriptions(); | 906 const auto subscriptions = filterEngine->GetListedSubscriptions(); |
774 EXPECT_EQ(0u, subscriptions.size()); // no any subscription including AA | 907 EXPECT_EQ(0u, subscriptions.size()); // no any subscription including AA |
775 EXPECT_FALSE(filterEngine->IsAAEnabled()); | 908 EXPECT_FALSE(filterEngine->IsAAEnabled()); |
776 } | 909 } |
777 if (otherSubscriptionsNumber == 1u) | 910 if (otherSubscriptionsNumber == 1u) |
778 { | 911 { |
779 auto subscruption = filterEngine->GetSubscription(kOtherSubscriptionUrl)
; | 912 auto subscription = filterEngine->GetSubscription(kOtherSubscriptionUrl)
; |
780 ASSERT_TRUE(subscruption); | 913 ASSERT_TRUE(subscription); |
781 subscruption->AddToList(); | 914 subscription->AddToList(); |
782 const auto subscriptions = filterEngine->GetListedSubscriptions(); | 915 const auto subscriptions = filterEngine->GetListedSubscriptions(); |
783 ASSERT_EQ(1u, subscriptions.size()); | 916 ASSERT_EQ(1u, subscriptions.size()); |
784 EXPECT_FALSE(subscriptions[0]->IsAA()); | 917 EXPECT_FALSE(subscriptions[0]->IsAA()); |
785 EXPECT_EQ(kOtherSubscriptionUrl, subscriptions[0]->GetProperty("url")->A
sString()); | 918 EXPECT_EQ(kOtherSubscriptionUrl, subscriptions[0]->GetProperty("url")->A
sString()); |
786 } | 919 } |
787 if (isAASatusPresent(aaStatus)) | 920 if (isAASatusPresent(aaStatus)) |
788 { | 921 { |
789 filterEngine->SetAAEnabled(true); // add AA by enabling it | 922 filterEngine->SetAAEnabled(true); // add AA by enabling it |
790 if (aaStatus == AAStatus::disabled_present) | 923 if (aaStatus == AAStatus::disabled_present) |
791 { | 924 { |
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
865 aaSubscription = subscription; | 998 aaSubscription = subscription; |
866 break; | 999 break; |
867 } | 1000 } |
868 } | 1001 } |
869 ASSERT_TRUE(aaSubscription); | 1002 ASSERT_TRUE(aaSubscription); |
870 aaSubscription->RemoveFromList(); | 1003 aaSubscription->RemoveFromList(); |
871 } | 1004 } |
872 | 1005 |
873 testSubscriptionState(parameter.expectedAAStatus, otherSubscriptionsNumber); | 1006 testSubscriptionState(parameter.expectedAAStatus, otherSubscriptionsNumber); |
874 } | 1007 } |
| 1008 } |
| 1009 |
| 1010 TEST_F(FilterEngineIsAllowedConnectionTest, AbsentCallbackAllowsUpdating) |
| 1011 { |
| 1012 createParams.isConnectionAllowedCallback = FilterEngine::IsConnectionAllowedCa
llback(); |
| 1013 auto subscription = EnsureExampleSubscriptionAndForceUpdate(); |
| 1014 EXPECT_EQ("synchronize_ok", subscription->GetProperty("downloadStatus")->AsStr
ing()); |
| 1015 EXPECT_EQ(1u, subscription->GetProperty("filters")->AsList().size()); |
| 1016 } |
| 1017 |
| 1018 TEST_F(FilterEngineIsAllowedConnectionTest, AllowingCallbackAllowsUpdating) |
| 1019 { |
| 1020 // no stored allowed_connection_type preference |
| 1021 auto subscription = EnsureExampleSubscriptionAndForceUpdate(); |
| 1022 EXPECT_EQ("synchronize_ok", subscription->GetProperty("downloadStatus")->AsStr
ing()); |
| 1023 EXPECT_EQ(1u, subscription->GetProperty("filters")->AsList().size()); |
| 1024 auto capturedConnectionTypes = this->capturedConnectionTypes.GetStrings(); |
| 1025 ASSERT_EQ(1u, capturedConnectionTypes.size()); |
| 1026 EXPECT_FALSE(capturedConnectionTypes[0].first); |
| 1027 } |
| 1028 |
| 1029 TEST_F(FilterEngineIsAllowedConnectionTest, NotAllowingCallbackDoesNotAllowUpdat
ing) |
| 1030 { |
| 1031 isConnectionAllowed = false; |
| 1032 // no stored allowed_connection_type preference |
| 1033 auto subscription = EnsureExampleSubscriptionAndForceUpdate(); |
| 1034 EXPECT_EQ("synchronize_connection_error", subscription->GetProperty("downloadS
tatus")->AsString()); |
| 1035 EXPECT_EQ(0u, subscription->GetProperty("filters")->AsList().size()); |
| 1036 auto capturedConnectionTypes = this->capturedConnectionTypes.GetStrings(); |
| 1037 EXPECT_EQ(1u, capturedConnectionTypes.size()); |
| 1038 } |
| 1039 |
| 1040 TEST_F(FilterEngineIsAllowedConnectionTest, PredefinedAllowedConnectionTypeIsPas
sedToCallback) |
| 1041 { |
| 1042 std::string predefinedAllowedConnectionType = "non-metered"; |
| 1043 createParams.preconfiguredPrefs["allowed_connection_type"] = jsEngine->NewValu
e(predefinedAllowedConnectionType); |
| 1044 auto subscription = EnsureExampleSubscriptionAndForceUpdate(); |
| 1045 EXPECT_EQ("synchronize_ok", subscription->GetProperty("downloadStatus")->AsStr
ing()); |
| 1046 EXPECT_EQ(1u, subscription->GetProperty("filters")->AsList().size()); |
| 1047 auto capturedConnectionTypes = this->capturedConnectionTypes.GetStrings(); |
| 1048 ASSERT_EQ(1u, capturedConnectionTypes.size()); |
| 1049 EXPECT_TRUE(capturedConnectionTypes[0].first); |
| 1050 EXPECT_EQ(predefinedAllowedConnectionType, capturedConnectionTypes[0].second); |
| 1051 } |
| 1052 |
| 1053 TEST_F(FilterEngineIsAllowedConnectionTest, ConfiguredConnectionTypeIsPassedToCa
llback) |
| 1054 { |
| 1055 // FilterEngine->RemoveSubscription is not usable here because subscriptions |
| 1056 // are cached internally by URL. So, different URLs are used in diffirent |
| 1057 // checks. |
| 1058 { |
| 1059 std::string predefinedAllowedConnectionType = "non-metered"; |
| 1060 createParams.preconfiguredPrefs["allowed_connection_type"] = jsEngine->NewVa
lue(predefinedAllowedConnectionType); |
| 1061 auto subscription = EnsureExampleSubscriptionAndForceUpdate(); |
| 1062 EXPECT_EQ("synchronize_ok", subscription->GetProperty("downloadStatus")->AsS
tring()); |
| 1063 EXPECT_EQ(1u, subscription->GetProperty("filters")->AsList().size()); |
| 1064 auto capturedConnectionTypes = this->capturedConnectionTypes.GetStrings(); |
| 1065 ASSERT_EQ(1u, capturedConnectionTypes.size()); |
| 1066 EXPECT_TRUE(capturedConnectionTypes[0].first); |
| 1067 EXPECT_EQ(predefinedAllowedConnectionType, capturedConnectionTypes[0].second
); |
| 1068 } |
| 1069 capturedConnectionTypes.Clear(); |
| 1070 { |
| 1071 // set no value |
| 1072 filterEngine->SetAllowedConnectionType(nullptr); |
| 1073 auto subscription = EnsureExampleSubscriptionAndForceUpdate("subA"); |
| 1074 EXPECT_EQ("synchronize_ok", subscription->GetProperty("downloadStatus")->AsS
tring()); |
| 1075 EXPECT_EQ(1u, subscription->GetProperty("filters")->AsList().size()); |
| 1076 auto capturedConnectionTypes = this->capturedConnectionTypes.GetStrings(); |
| 1077 ASSERT_EQ(1u, capturedConnectionTypes.size()); |
| 1078 EXPECT_FALSE(capturedConnectionTypes[0].first); |
| 1079 subscription->RemoveFromList(); |
| 1080 this->capturedConnectionTypes.Clear(); |
| 1081 } |
| 1082 capturedConnectionTypes.Clear(); |
| 1083 { |
| 1084 // set some value |
| 1085 std::string testConnection = "test connection"; |
| 1086 filterEngine->SetAllowedConnectionType(&testConnection); |
| 1087 auto subscription = EnsureExampleSubscriptionAndForceUpdate("subB"); |
| 1088 EXPECT_EQ("synchronize_ok", subscription->GetProperty("downloadStatus")->AsS
tring()); |
| 1089 EXPECT_EQ(1u, subscription->GetProperty("filters")->AsList().size()); |
| 1090 auto capturedConnectionTypes = this->capturedConnectionTypes.GetStrings(); |
| 1091 ASSERT_EQ(1u, capturedConnectionTypes.size()); |
| 1092 EXPECT_TRUE(capturedConnectionTypes[0].first); |
| 1093 EXPECT_EQ(testConnection, capturedConnectionTypes[0].second); |
| 1094 } |
875 } | 1095 } |
LEFT | RIGHT |