-
Notifications
You must be signed in to change notification settings - Fork 70
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
2 changed files
with
125 additions
and
110 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,24 +1,31 @@ | ||
# MIT licensed | ||
# Copyright (c) 2021 lilydjwg <[email protected]>, et al. | ||
# Copyright (c) 2021,2024 lilydjwg <[email protected]>, et al. | ||
|
||
import pytest | ||
import pytest_httpbin | ||
assert pytest_httpbin # for pyflakes | ||
|
||
pytestmark = [pytest.mark.asyncio(scope="session"), pytest.mark.needs_net] | ||
httpbin_available = True | ||
try: | ||
import pytest_httpbin | ||
assert pytest_httpbin # for pyflakes | ||
except ImportError: | ||
httpbin_available = False | ||
|
||
pytestmark = pytest.mark.asyncio(scope="session") | ||
|
||
@pytest.mark.needs_net | ||
async def test_redirection(get_version): | ||
assert await get_version("unifiedremote", { | ||
"source": "httpheader", | ||
"url": "https://www.unifiedremote.com/download/linux-x64-deb", | ||
"regex": r'urserver-([\d.]+).deb', | ||
}) is not None | ||
assert await get_version("unifiedremote", { | ||
"source": "httpheader", | ||
"url": "https://www.unifiedremote.com/download/linux-x64-deb", | ||
"regex": r'urserver-([\d.]+).deb', | ||
}) is not None | ||
|
||
@pytest.mark.skipif(not httpbin_available, reason="needs pytest_httpbin") | ||
async def test_get_version_withtoken(get_version, httpbin): | ||
assert await get_version("unifiedremote", { | ||
"source": "httpheader", | ||
"url": httpbin.url + "/basic-auth/username/superpassword", | ||
"httptoken": "Basic dXNlcm5hbWU6c3VwZXJwYXNzd29yZA==", | ||
"header": "server", | ||
"regex": r'([0-9.]+)*', | ||
}) is not None | ||
assert await get_version("unifiedremote", { | ||
"source": "httpheader", | ||
"url": httpbin.url + "/basic-auth/username/superpassword", | ||
"httptoken": "Basic dXNlcm5hbWU6c3VwZXJwYXNzd29yZA==", | ||
"header": "server", | ||
"regex": r'([0-9.]+)*', | ||
}) is not None |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,130 +1,138 @@ | ||
# MIT licensed | ||
# Copyright (c) 2013-2020 lilydjwg <[email protected]>, et al. | ||
# Copyright (c) 2013-2020,2024 lilydjwg <[email protected]>, et al. | ||
|
||
import base64 | ||
|
||
import pytest | ||
import pytest_httpbin | ||
assert pytest_httpbin # for pyflakes | ||
|
||
pytestmark = pytest.mark.asyncio(scope="session") | ||
httpbin_available = True | ||
try: | ||
import pytest_httpbin | ||
assert pytest_httpbin # for pyflakes | ||
except ImportError: | ||
httpbin_available = False | ||
|
||
pytestmark = [ | ||
pytest.mark.asyncio(scope="session"), | ||
pytest.mark.skipif(not httpbin_available, reason="needs pytest_httpbin"), | ||
] | ||
|
||
def base64_encode(s): | ||
return base64.b64encode(s.encode('utf-8')).decode('ascii') | ||
return base64.b64encode(s.encode('utf-8')).decode('ascii') | ||
|
||
async def test_regex_httpbin_default_user_agent(get_version, httpbin): | ||
ua = await get_version("example", { | ||
"source": "regex", | ||
"url": httpbin.url + "/get", | ||
"regex": r'"User-Agent":\s*"([^"]+)"', | ||
}) | ||
assert ua.startswith("lilydjwg/nvchecker") | ||
ua = await get_version("example", { | ||
"source": "regex", | ||
"url": httpbin.url + "/get", | ||
"regex": r'"User-Agent":\s*"([^"]+)"', | ||
}) | ||
assert ua.startswith("lilydjwg/nvchecker") | ||
|
||
async def test_regex_httpbin_user_agent(get_version, httpbin): | ||
assert await get_version("example", { | ||
"source": "regex", | ||
"url": httpbin.url + "/get", | ||
"regex": r'"User-Agent":\s*"(\w+)"', | ||
"user_agent": "Meow", | ||
}) == "Meow" | ||
assert await get_version("example", { | ||
"source": "regex", | ||
"url": httpbin.url + "/get", | ||
"regex": r'"User-Agent":\s*"(\w+)"', | ||
"user_agent": "Meow", | ||
}) == "Meow" | ||
|
||
async def test_regex(get_version, httpbin): | ||
assert await get_version("example", { | ||
"source": "regex", | ||
"url": httpbin.url + "/base64/" + base64_encode("version 1.12 released"), | ||
"regex": r'version ([0-9.]+)', | ||
}) == "1.12" | ||
assert await get_version("example", { | ||
"source": "regex", | ||
"url": httpbin.url + "/base64/" + base64_encode("version 1.12 released"), | ||
"regex": r'version ([0-9.]+)', | ||
}) == "1.12" | ||
|
||
async def test_missing_ok(get_version, httpbin): | ||
assert await get_version("example", { | ||
"source": "regex", | ||
"url": httpbin.url + "/base64/" + base64_encode("something not there"), | ||
"regex": "foobar", | ||
"missing_ok": True, | ||
}) is None | ||
assert await get_version("example", { | ||
"source": "regex", | ||
"url": httpbin.url + "/base64/" + base64_encode("something not there"), | ||
"regex": "foobar", | ||
"missing_ok": True, | ||
}) is None | ||
|
||
async def test_missing(get_version, httpbin): | ||
with pytest.raises(RuntimeError): | ||
await get_version("example", { | ||
"source": "regex", | ||
"url": httpbin.url + "/base64/" + base64_encode("something not there"), | ||
"regex": "foobar", | ||
}) | ||
with pytest.raises(RuntimeError): | ||
await get_version("example", { | ||
"source": "regex", | ||
"url": httpbin.url + "/base64/" + base64_encode("something not there"), | ||
"regex": "foobar", | ||
}) | ||
|
||
async def test_multi_group(get_version, httpbin): | ||
with pytest.raises(RuntimeError): | ||
await get_version("example", { | ||
"source": "regex", | ||
"url": httpbin.url + "/base64/" + base64_encode("1.2"), | ||
"regex": r"(\d+)\.(\d+)", | ||
}) | ||
with pytest.raises(RuntimeError): | ||
await get_version("example", { | ||
"source": "regex", | ||
"url": httpbin.url + "/base64/" + base64_encode("1.2"), | ||
"regex": r"(\d+)\.(\d+)", | ||
}) | ||
|
||
async def test_regex_with_tokenBasic(get_version, httpbin): | ||
assert await get_version("example", { | ||
"source": "regex", | ||
"url": httpbin.url + "/basic-auth/username/superpassword", | ||
"httptoken": "Basic dXNlcm5hbWU6c3VwZXJwYXNzd29yZA==", | ||
"regex": r'"user":\s*"([a-w]+)"', | ||
}) == "username" | ||
assert await get_version("example", { | ||
"source": "regex", | ||
"url": httpbin.url + "/basic-auth/username/superpassword", | ||
"httptoken": "Basic dXNlcm5hbWU6c3VwZXJwYXNzd29yZA==", | ||
"regex": r'"user":\s*"([a-w]+)"', | ||
}) == "username" | ||
|
||
async def test_regex_with_tokenBearer(get_version, httpbin): | ||
assert await get_version("example", { | ||
"source": "regex", | ||
"url": httpbin.url + "/bearer", | ||
"httptoken": "Bearer username:password", | ||
"regex": r'"token":\s*"([a-w]+):.*"', | ||
}) == "username" | ||
assert await get_version("example", { | ||
"source": "regex", | ||
"url": httpbin.url + "/bearer", | ||
"httptoken": "Bearer username:password", | ||
"regex": r'"token":\s*"([a-w]+):.*"', | ||
}) == "username" | ||
|
||
async def test_regex_no_verify_ssl(get_version, httpbin_secure): | ||
assert await get_version("example", { | ||
"source": "regex", | ||
"url": httpbin_secure.url + "/base64/" + base64_encode("version 1.12 released"), | ||
"regex": r'version ([0-9.]+)', | ||
"verify_cert": False, | ||
}) == "1.12" | ||
assert await get_version("example", { | ||
"source": "regex", | ||
"url": httpbin_secure.url + "/base64/" + base64_encode("version 1.12 released"), | ||
"regex": r'version ([0-9.]+)', | ||
"verify_cert": False, | ||
}) == "1.12" | ||
|
||
async def test_regex_bad_ssl(get_version, httpbin_secure): | ||
try: | ||
await get_version("example", { | ||
"source": "regex", | ||
"url": httpbin_secure.url + "/base64/" + base64_encode("version 1.12 released"), | ||
"regex": r'version ([0-9.]+)', | ||
}) | ||
except Exception: | ||
pass | ||
else: | ||
assert False, 'certificate should not be trusted' | ||
try: | ||
await get_version("example", { | ||
"source": "regex", | ||
"url": httpbin_secure.url + "/base64/" + base64_encode("version 1.12 released"), | ||
"regex": r'version ([0-9.]+)', | ||
}) | ||
except Exception: | ||
pass | ||
else: | ||
assert False, 'certificate should not be trusted' | ||
|
||
async def test_regex_post(get_version, httpbin): | ||
assert await get_version("example", { | ||
"source": "regex", | ||
"url": httpbin.url + "/post", | ||
"regex": r'"ABCDEF":\s*"(\w+)"', | ||
"post_data": "ABCDEF=234&CDEFG=xyz" | ||
}) == "234" | ||
assert await get_version("example", { | ||
"source": "regex", | ||
"url": httpbin.url + "/post", | ||
"regex": r'"ABCDEF":\s*"(\w+)"', | ||
"post_data": "ABCDEF=234&CDEFG=xyz" | ||
}) == "234" | ||
|
||
async def test_regex_post2(get_version, httpbin): | ||
assert await get_version("example", { | ||
"source": "regex", | ||
"url": httpbin.url + "/post", | ||
"regex": r'"CDEFG":\s*"(\w+)"', | ||
"post_data": "ABCDEF=234&CDEFG=xyz" | ||
}) == "xyz" | ||
assert await get_version("example", { | ||
"source": "regex", | ||
"url": httpbin.url + "/post", | ||
"regex": r'"CDEFG":\s*"(\w+)"', | ||
"post_data": "ABCDEF=234&CDEFG=xyz" | ||
}) == "xyz" | ||
|
||
async def test_regex_post_json(get_version, httpbin): | ||
assert await get_version("example", { | ||
"source": "regex", | ||
"url": httpbin.url + "/post", | ||
"regex": r'"ABCDEF":\s*(\w+)', | ||
"post_data": '{"ABCDEF":234,"CDEFG":"xyz"}', | ||
"post_data_type": "application/json" | ||
}) == "234" | ||
assert await get_version("example", { | ||
"source": "regex", | ||
"url": httpbin.url + "/post", | ||
"regex": r'"ABCDEF":\s*(\w+)', | ||
"post_data": '{"ABCDEF":234,"CDEFG":"xyz"}', | ||
"post_data_type": "application/json" | ||
}) == "234" | ||
|
||
async def test_regex_post_json2(get_version, httpbin): | ||
assert await get_version("example", { | ||
"source": "regex", | ||
"url": httpbin.url + "/post", | ||
"regex": r'"CDEFG":\s*"(\w+)"', | ||
"post_data": '{"ABCDEF":234,"CDEFG":"xyz"}', | ||
"post_data_type": "application/json" | ||
}) == "xyz" | ||
assert await get_version("example", { | ||
"source": "regex", | ||
"url": httpbin.url + "/post", | ||
"regex": r'"CDEFG":\s*"(\w+)"', | ||
"post_data": '{"ABCDEF":234,"CDEFG":"xyz"}', | ||
"post_data_type": "application/json" | ||
}) == "xyz" |