Hi Rüdiger et al.,

Am 25.06.24 um 08:50 schrieb Ruediger Pluem:


On 6/25/24 1:12 AM, Rainer Jung wrote:
I am getting some pytest failures when checking for assets (leading "/" 
missing):

=================================== FAILURES ===================================
__________________________ TestAssets.test_h2_006_03 ___________________________

self = <http2.test_006_assets.TestAssets object at 0x7fe70af578e0>
env = <http2.env.H2TestEnv object at 0x7fe70ac94be0>

     def test_h2_006_03(self, env):
         # create the tiles files we originally had checked in
         exp_assets = [
             {"status": 200, "size": "10K", "path": "/004.html"},
             {"status": 200, "size": "742", "path": "/004/gophertiles.jpg"},
         ]
         for i in range(2, 181):
             with open(f"{env.server_docs_dir}/test1/004/gophertiles_{i:03d}.jpg", 
"w") as fd:
                 fd.write("0123456789\n")
             exp_assets.append(
                 {"status": 200, "size": "11", "path": 
f"/004/gophertiles_{i:03d}.jpg"},
             )

         url = env.mkurl("https", "test1", "/004.html")
         r = env.nghttp().assets(url, options=["-Haccept-encoding: none"])
         assert 0 == r.exit_code
         assert 181 == len(r.assets)
        assert r.assets == exp_assets
E       AssertionError: assert [{'path': '/0...s': 200}, ...] == [{'path': 
'/0...s': 200}, ...]
E         At index 1 diff: {'path': '004/gophertiles.jpg', 'status': 200, 
'size': '742'} != {'status': 200, 'size': '742', 'path':
'/004/gophertiles.jpg'}
E         Full diff:
E           [
E            {'path': '/004.html', 'size': '10K', 'status': 200},
E         -  {'path': '/004/gophertiles.jpg', 'size': '742', 'status': 200},
E         ?            -
E         +  {'path': '004/gophertiles.jpg', 'size': '742', 'status': 200},...
E
E         ...Full output truncated (539 lines hidden), use '-vv' to show

modules/http2/test_006_assets.py:52: AssertionError
----------------------------- Captured stdout call -----------------------------
execute: nghttp --header=host: test1.tests.httpd.apache.org:5001 
-Haccept-encoding: none -ans https://127.0.0.1:5001//004.html
__________________________ TestAssets.test_h2_006_04 ___________________________

self = <http2.test_006_assets.TestAssets object at 0x7fe70af54d90>
env = <http2.env.H2TestEnv object at 0x7fe70ac94be0>

     def test_h2_006_04(self, env):
         url = env.mkurl("https", "test1", "/006.html")
         r = env.nghttp().assets(url, options=["-Haccept-encoding: none"])
         assert 0 == r.exit_code
         assert 3 == len(r.assets)
        assert r.assets == [
             {"status": 200, "size": "543", "path": "/006.html"},
             {"status": 200, "size": "216", "path": "/006/006.css"},
             {"status": 200, "size": "839", "path": "/006/006.js"}
         ]
E       AssertionError: assert [{'path': '/0...status': 200}] == [{'path': 
'/0...status': 200}]
E         At index 1 diff: {'path': '006/006.css', 'status': 200, 'size': 
'216'} != {'status': 200, 'size': '216', 'path':
'/006/006.css'}
E         Full diff:
E           [
E            {'path': '/006.html', 'size': '543', 'status': 200},
E         -  {'path': '/006/006.css', 'size': '216', 'status': 200},
E         ?            -
E         +  {'path': '006/006.css', 'size': '216', 'status': 200},...
E
E         ...Full output truncated (5 lines hidden), use '-vv' to show

modules/http2/test_006_assets.py:60: AssertionError
----------------------------- Captured stdout call -----------------------------
execute: nghttp --header=host: test1.tests.httpd.apache.org:5001 
-Haccept-encoding: none -ans https://127.0.0.1:5001//006.html
__________________________ TestAssets.test_h2_006_05 ___________________________

self = <http2.test_006_assets.TestAssets object at 0x7fe70af54be0>
env = <http2.env.H2TestEnv object at 0x7fe70ac94be0>

     def test_h2_006_05(self, env):
         url = env.mkurl("https", "test1", "/003.html")
         r = env.nghttp().assets(url, options=["--window-bits=24", 
"-Haccept-encoding: none"])
         assert 0 == r.exit_code
         assert 2 == len(r.assets)
        assert r.assets == [
             {"status": 200, "size": "316", "path": "/003.html"},
             {"status": 200, "size": "88K", "path": "/003/003_img.jpg"}
         ]
E       AssertionError: assert [{'path': '/0...status': 200}] == [{'path': 
'/0...status': 200}]
E         At index 1 diff: {'path': '003/003_img.jpg', 'status': 200, 'size': 
'88K'} != {'status': 200, 'size': '88K', 'path':
'/003/003_img.jpg'}
E         Full diff:
E           [
E            {'path': '/003.html', 'size': '316', 'status': 200},
E         -  {'path': '/003/003_img.jpg', 'size': '88K', 'status': 200},
E         ?            -
E         +  {'path': '003/003_img.jpg', 'size': '88K', 'status': 200},...
E
E         ...Full output truncated (2 lines hidden), use '-vv' to show

modules/http2/test_006_assets.py:72: AssertionError
----------------------------- Captured stdout call -----------------------------
execute: nghttp --header=host: test1.tests.httpd.apache.org:5001 
--window-bits=24 -Haccept-encoding: none -ans
https://127.0.0.1:5001//003.html


These seem to happen consistently.

Currently I don't know, whether it is a problem with the test, or a real 
problem.

If it isn't reproducible for others, I can try to investigate deeper.

I don't have the correct setup here to run the test but maybe it is an issue / 
change in your nghttp binary.
Did you use a new version? I guess the following patch to the tests should fix 
this, but I am still not sure
if this is a failure on server side or with the test setup:

Thanks for the patch to fix the test.

Never say never, but in this case I doubt its an nghttp version thing: I am using

- rhel 8+9: 1.62.0
- rhel 7: 1.34.0
- sles 15: 1.61.0
- sles12: 1.34.0

Fpr RHEL 7 and SLES 12 these are the same versions as when testing 2.4.59 where I did not get these failures (and the test file test_006_assets.py seems to not have changed).

But I did rebuild nghttp2 in all cases to make it use the latest versions of OpenSSL, C-Ares and libxml2. Something might have changed in my build setup but it looks a bit unlikely, that this will have introduced this behavior.

What I also updated is curl to 8.8.0. that curl is using nghttp2 1.62.0 on all platforms. But it seems curl is not used as a cloient for these tests.

The failures happen consistently with OpenSSL 3.3.1, 3.2.2, 3.1.6, 3.0.14 and 1.1.1w.

My python setup has not changed.

It is interesting, that the missing "/" comes up always for the second (and maybe third) requests in each test method, which are the ones with URI with and additional path component.

Let's see, whether Stefan has an opinion.

Thanks and best regards,

Rainer

Index: test/pyhttpd/nghttp.py
===================================================================
--- test/pyhttpd/nghttp.py      (revision 1918546)
+++ test/pyhttpd/nghttp.py      (working copy)
@@ -224,7 +224,7 @@
          if 0 == r.exit_code:
              lines = re.findall(r'[^\n]*\n', r.stdout, re.MULTILINE)
              for lidx, l in enumerate(lines):
-                m = 
re.match(r'\s*(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+/(.*)', l)
+                m = 
re.match(r'\s*(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+/*(/.*)', l)
                  if m:
                      assets.append({
                          "path": m.group(7),



Regards

Rüdiger

Reply via email to