From: Kyle Fuller Date: Sun, 5 Apr 2020 13:35:11 +0000 (+0100) Subject: feat: include znc-palaver version in user-agent X-Git-Tag: 1.2.0~2 X-Git-Url: http://git.99rst.org/?a=commitdiff_plain;h=07d3ba9eb178b2485093614bf9413bf307e4df0a;p=znc-palaver.git feat: include znc-palaver version in user-agent --- diff --git a/palaver.cpp b/palaver.cpp index aee901e..5a1d749 100644 --- a/palaver.cpp +++ b/palaver.cpp @@ -103,7 +103,8 @@ public: } mcsHeaders["Connection"] = "close"; - mcsHeaders["User-Agent"] = "ZNC"; + // as per https://tools.ietf.org/html/rfc7231#section-5.5.3 + mcsHeaders["User-Agent"] = "znc-palaver/" + CString(PALAVER_VERSION) + " znc/" + CZNC::GetVersion(); if (sMethod.Equals("GET") == false || sContent.length() > 0) { mcsHeaders["Content-Length"] = CString(sContent.length()); diff --git a/test/test_palaver.py b/test/test_palaver.py index 8d7738e..1b27878 100644 --- a/test/test_palaver.py +++ b/test/test_palaver.py @@ -10,19 +10,42 @@ from semantic_version import Version pytestmark = pytest.mark.asyncio -async def requires_znc_version(znc_version): +async def get_znc_version(): proc = await asyncio.create_subprocess_shell( 'znc --version', stdout=asyncio.subprocess.PIPE, stderr=asyncio.subprocess.PIPE) stdout, stderr = await proc.communicate() - version = stdout.decode('utf-8').split()[1] + return stdout.decode('utf-8').split()[1] + + +async def requires_znc_version(znc_version): + actual_version = await get_znc_version() - if Version(znc_version) > Version(version): + if Version(znc_version) > Version(actual_version): pytest.skip('ZNC >= {} is required for this test, found {}'.format(znc_version, version)) +async def assert_user_agent(header): + header = header.decode('utf-8') + assert header.endswith('\r\n') + + (name, value) = header.strip().split(': ') + assert name == 'User-Agent' + + products = value.split(' ') + assert len(products) == 2 + + product1, product1_version = products[0].split('/') + assert product1 == 'znc-palaver' + assert Version(product1_version).major >= 1 + + product2, product2_version = products[1].split('/') + assert product2 == 'znc' + assert product2_version == await get_znc_version() + + async def setUp(event_loop): running_as_root = os.getuid() == 0 allow_root = ' --allow-root' if running_as_root else '' @@ -147,8 +170,7 @@ async def test_receiving_notification(event_loop): line = await reader.readline() assert line == b'Content-Type: application/json\r\n' - line = await reader.readline() - assert line == b'User-Agent: ZNC\r\n' + await assert_user_agent(await reader.readline()) line = await reader.readline() assert line == b'\r\n' @@ -212,8 +234,7 @@ async def test_receiving_notification_with_push_token(event_loop): line = await reader.readline() assert line == b'Content-Type: application/json\r\n' - line = await reader.readline() - assert line == b'User-Agent: ZNC\r\n' + await assert_user_agent(await reader.readline()) line = await reader.readline() assert line == b'\r\n'