)]}'
{
  "commit": "73c49a447461449ada646b74dfa5dcb0e9f3e879",
  "tree": "a3965cc1a732266a828fdf287fb709ca2755d16d",
  "parents": [
    "319605f8f00e402f3ea758a02c63534ff800a711"
  ],
  "author": {
    "name": "Jeff King",
    "email": "peff@peff.net",
    "time": "Fri Nov 11 22:35:05 2022 +0000"
  },
  "committer": {
    "name": "Taylor Blau",
    "email": "me@ttaylorr.com",
    "time": "Mon Nov 14 17:42:46 2022 -0500"
  },
  "message": "t: run t5551 tests with both HTTP and HTTP/2\n\nWe have occasionally seen bugs that affect Git running only against an\nHTTP/2 web server, not an HTTP one. For instance, b66c77a64e (http:\nmatch headers case-insensitively when redacting, 2021-09-22). But since\nwe have no test coverage using HTTP/2, we only uncover these bugs in the\nwild.\n\nThat commit gives a recipe for converting our Apache setup to support\nHTTP/2, but:\n\n  - it\u0027s not necessarily portable\n\n  - we don\u0027t want to just test HTTP/2; we really want to do a variety of\n    basic tests for _both_ protocols\n\nThis patch handles both problems by running a duplicate of t5551\n(labeled as t5559 here) with an alternate-universe setup that enables\nHTTP/2. So we\u0027ll continue to run t5551 as before, but run the same\nbattery of tests again with HTTP/2. If HTTP/2 isn\u0027t supported on a given\nplatform, then t5559 should bail during the webserver setup, and\ngracefully skip all tests (unless GIT_TEST_HTTPD has been changed from\n\"auto\" to \"yes\", where the point is to complain when webserver setup\nfails).\n\nIn theory other http-related test scripts could benefit from the same\nduplication, but doing t5551 should give us a reasonable check of basic\nfunctionality, and would have caught both bugs we\u0027ve seen in the wild\nwith HTTP/2.\n\nA few notes on the implementation:\n\n  - a script enables the server side config by calling enable_http2\n    before starting the webserver. This avoids even trying to load any\n    HTTP/2 config for t5551 (which is what lets it keep working with\n    regular HTTP even on systems that don\u0027t support it). This also sets\n    a prereq which can be used by individual tests.\n\n  - As discussed in b66c77a64e, the http2 module isn\u0027t compatible with\n    the \"prefork\" mpm, so we need to pick something else. I chose\n    \"event\" here, which works on my Debian system, but it\u0027s possible\n    there are platforms which would prefer something else. We can adjust\n    that later if somebody finds such a platform.\n\n  - The test \"large fetch-pack requests can be sent using chunked\n    encoding\" makes sure we use a chunked transfer-encoding by looking\n    for that header in the trace. But since HTTP/2 has its own streaming\n    mechanisms, we won\u0027t find such a header. We could skip the test\n    entirely by marking it with !HTTP2. But there\u0027s some value in making\n    sure that the fetch itself succeeded. So instead, we\u0027ll confirm that\n    either we\u0027re using HTTP2 _or_ we saw the expected chunked header.\n\n  - the redaction tests fail under HTTP/2 with recent versions of curl.\n    This is a bug! I\u0027ve marked them with !HTTP2 here to skip them under\n    t5559 for the moment. Using test_expect_failure would be more\n    appropriate, but would require a bunch of boilerplate. Since we\u0027ll\n    be fixing them momentarily, let\u0027s just skip them for now to keep the\n    test suite bisectable, and we can re-enable them in the commit that\n    fixes the bug.\n\n  - one alternative layout would be to push most of t5551 into a\n    lib-t5551.sh script, then source it from both t5551 and t5559.\n    Keeping t5551 intact seemed a little simpler, as its one less level\n    of indirection for people fixing bugs/regressions in the non-HTTP/2\n    tests.\n\nSigned-off-by: Jeff King \u003cpeff@peff.net\u003e\nSigned-off-by: Taylor Blau \u003cme@ttaylorr.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "1f6b9b08d1de626397396f9878812a7a6e6f0ef8",
      "old_mode": 33188,
      "old_path": "t/lib-httpd.sh",
      "new_id": "ba9fe36772ac318cab7170671c33e2cf38102786",
      "new_mode": 33188,
      "new_path": "t/lib-httpd.sh"
    },
    {
      "type": "modify",
      "old_id": "706799391bd4047a1c15f8a32f77875cb8dcb44d",
      "old_mode": 33188,
      "old_path": "t/lib-httpd/apache.conf",
      "new_id": "0294739a77a24f9c005250cffb0cab86f0b113ff",
      "new_mode": 33188,
      "new_path": "t/lib-httpd/apache.conf"
    },
    {
      "type": "modify",
      "old_id": "64c6c9f59ef690c4acd681000835040ca410df7e",
      "old_mode": 33261,
      "old_path": "t/t5551-http-fetch-smart.sh",
      "new_id": "9826631926be79bef3abaa3bf450b85c62e54080",
      "new_mode": 33261,
      "new_path": "t/t5551-http-fetch-smart.sh"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "9eece71c2c2c28f00630e62e8a7a6495d23c3219",
      "new_mode": 33261,
      "new_path": "t/t5559-http-fetch-smart-http2.sh"
    }
  ]
}
