From 86ba5b7a5f65b6579813b86a4414270f896e6424 Mon Sep 17 00:00:00 2001 From: dm Date: Wed, 16 Feb 2022 12:06:25 +0800 Subject: feat: include complete redirect rule feature. 1. update adblock-rust => 0.4.3 2. add `include_redirect_urls` parameter for `FilterSet.add_filter_list` and `FilterSet.add_filters` 3. add `Engine.add_resource` method. 4. add `adblock.AddResourceError` Exception 5. add `redirect_type` for `BlockerResult` 6. add some tests for these functions. --- tests/test_exceptions.py | 13 ++++++++- tests/test_redirect.py | 68 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 80 insertions(+), 1 deletion(-) create mode 100644 tests/test_redirect.py (limited to 'tests') diff --git a/tests/test_exceptions.py b/tests/test_exceptions.py index becf107..3e3dc9f 100644 --- a/tests/test_exceptions.py +++ b/tests/test_exceptions.py @@ -1,5 +1,5 @@ import adblock - +import pytest def test_correct_baseclasses(): assert issubclass(adblock.AdblockException, Exception) @@ -9,3 +9,14 @@ def test_correct_baseclasses(): assert issubclass(adblock.OptimizedFilterExistence, adblock.BlockerException) assert issubclass(adblock.BadFilterAddUnsupported, adblock.BlockerException) assert issubclass(adblock.FilterExists, adblock.BlockerException) + assert issubclass(adblock.AddResourceError, adblock.BlockerException) + + +def test_add_resource_error(): + filter_set = adblock.FilterSet() + engine = adblock.Engine(filter_set=filter_set) + + with pytest.raises(adblock.AddResourceError) as exc: + engine.add_resource(name='aa', content_type="image/jpeg", content="111") + + assert "invalid base64 content" in str(exc.value) diff --git a/tests/test_redirect.py b/tests/test_redirect.py new file mode 100644 index 0000000..a99a728 --- /dev/null +++ b/tests/test_redirect.py @@ -0,0 +1,68 @@ +import adblock + + +def test_redirect_worked_as_excepted_with_include_redirect_urls(): + # https://github.com/brave/adblock-rust/blob/b7f29af8c0a0d000201d8d769b6a0b25a9dd4e89/src/blocker.rs#L1242 + filter_set = adblock.FilterSet() + filter_set.add_filter_list("||foo.com$important,redirect-url=http://xyz.com", include_redirect_urls=True) + + engine = adblock.Engine(filter_set=filter_set) + + res = engine.check_network_urls("https://foo.com", "https://foo.com", "script") + assert res.matched is True + assert res.important is True + assert res.redirect_type == "url" + assert res.redirect == "http://xyz.com" + + +def test_redirect_url_is_not_recognized_without_include_redirect_urls(): + # https://github.com/brave/adblock-rust/blob/b7f29af8c0a0d000201d8d769b6a0b25a9dd4e89/src/blocker.rs#L1267 + filter_set2 = adblock.FilterSet() + filter_set2.add_filter_list("||foo.com$important,redirect-url=http://xyz.com", include_redirect_urls=False) + + engine2 = adblock.Engine(filter_set=filter_set2) + + res = engine2.check_network_urls("https://foo.com", "https://foo.com", "script") + assert res.matched is False + assert res.redirect is None + assert res.redirect_type is None + + +def test_redirect_url_exception(): + # https://github.com/brave/adblock-rust/blob/b7f29af8c0a0d000201d8d769b6a0b25a9dd4e89/src/blocker.rs#L1314 + filter_set = adblock.FilterSet(debug=True) + filter_set.add_filter_list( + """ + ||imdb-video.media-imdb.com$media,redirect-url=http://xyz.com + @@||imdb-video.media-imdb.com^$domain=imdb.com + """, + include_redirect_urls=True + ) + + engine2 = adblock.Engine(filter_set=filter_set, optimize=False) + + res = engine2.check_network_urls( + "https://imdb-video.media-imdb.com/kBOeI88k1o23eNAi", "https://www.imdb.com/video/13", "media" + ) + assert res.matched is False + assert res.redirect == "http://xyz.com" + assert res.redirect_type == "url" + assert res.exception == "@@||imdb-video.media-imdb.com^$domain=imdb.com" + + +def test_redirect_with_custom_resource(): + filters = adblock.FilterSet() + filters.add_filter_list("-advertisement-$redirect=test\n") + + engine = adblock.Engine(filter_set=filters) + engine.add_resource(name="test", content_type="application/javascript", content="YWxlcnQoMSk=") + + result = engine.check_network_urls( + url="http://example.com/-advertisement-icon.", source_url="example.com", request_type="image", + ) + + assert result.matched + assert not result.exception + assert not result.important + assert result.redirect == "data:application/javascript;base64,YWxlcnQoMSk=" + -- cgit v1.2.3