2491:aae60837ac20 | 14-Jun-2023 |
Andrei Zeliankou |
Tests: get rid of classes in test files.
Class usage came from the unittest framework and it was always redundant after migration to the pytest. This commit removes classes from files containing te
Tests: get rid of classes in test files.
Class usage came from the unittest framework and it was always redundant after migration to the pytest. This commit removes classes from files containing tests to make them more readable and understandable.
show more ...
|
2490:45db3fe68259 | 12-Jun-2023 |
Andrei Zeliankou |
Tests: removed alert skip, unnecessary after 1a48ea61fec8. |
2489:b37326158d10 | 24-May-2023 |
Zhidao HONG |
HTTP: fixed variable caching.
When a variable is accessed in the Unit configuration, the value is cached. This was useful prior to the URI rewrite feature, but now that the URI (more precisely, the
HTTP: fixed variable caching.
When a variable is accessed in the Unit configuration, the value is cached. This was useful prior to the URI rewrite feature, but now that the URI (more precisely, the request target) can be rewritten, the contents of the variable $uri (which contains the path part of the request target, and is decoded) should not be cached anymore, or at least the cached value should be invalidated after a URI rewrite.
Example:
{ "rewrite": "/prefix$uri", "share": "$uri" }
For a request line like GET /foo?bar=baz HTTP/1.1\r\n, the expected file served in the response would be /prefix/foo, but due to the caching issue, Unit currently serves /foo.
show more ...
|
2488:55440e02a873 | 12-Jun-2023 |
Andrei Zeliankou |
Tests: prerequisites checking reworked.
Prerequisites check moved to the module level to simplify class structure. Discovery and prerequisites checks functions moved to the separate files. Introduce
Tests: prerequisites checking reworked.
Prerequisites check moved to the module level to simplify class structure. Discovery and prerequisites checks functions moved to the separate files. Introduced "require" fixture to provide per-test requirements check.
show more ...
|
2487:7fb8b559a687 | 08-Jun-2023 |
Konstantin Pavlov |
Packages: added Debian 12 "bookworm" support. |
2486:20ae6fa1abd2 | 07-Jun-2023 |
Liam Crilly |
Tools: unitc edit mode for interactive configuration. |
2485:c46e36e1aa2b | 01-Jun-2023 |
Liam Crilly |
Tools: improved ps(1) portability for unitc.
Improved cross-platform support by trying multiple ps(1) invocations to obtain the unitd command line parameters. Additional error checking detects when
Tools: improved ps(1) portability for unitc.
Improved cross-platform support by trying multiple ps(1) invocations to obtain the unitd command line parameters. Additional error checking detects when this process fails.
The first attempt uses `ps -wwo args=COMMAND -p` which has very broad support and has the additional benefit of simplifying the output for more reliable parsing of the process info. If that fails then we fall back to simply `ps`.
The parsing of the process info has also changed. Instead of converting '[]' into spaces we now convert them into explicit delimiters (using '^'). This is more reliable as it marks the beginning and the end of the info we care about. Any trailing process information is now ignored (FreeBSD).
Additional error handling improves the robustness when starting unitd with a different filename or from a relative path. In this case the control socket and log file detection will fail when running `unitd --help`. Additional error checking and messages are displayed when the control socket cannot be determined. A single warning is shown when the log file cannot be determined.
show more ...
|
2484:2df6640b0a60 | 27-May-2023 |
synodriver |
Python: Fix error checks in nxt_py_asgi_request_handler().
Signed-off-by: synodriver <diguohuangjiajinweijun@gmail.com> Reviewed-by: Andrew Clayton <a.clayton@nginx.com> [ Re-word commit subject - A
Python: Fix error checks in nxt_py_asgi_request_handler().
Signed-off-by: synodriver <diguohuangjiajinweijun@gmail.com> Reviewed-by: Andrew Clayton <a.clayton@nginx.com> [ Re-word commit subject - Andrew ] Fixes: c4c2f90c5b53 ("Python: ASGI server introduced.") Closes: <https://github.com/nginx/unit/issues/895> Signed-off-by: Andrew Clayton <a.clayton@nginx.com>
show more ...
|
2483:9d1e9b09cc6f | 27-May-2023 |
synodriver |
Python: Add ASGI lifespan state support.
Lifespan state is a special dict in asgi lifespan scope, which allow applications to persist data from the lifespan cycle to request/response handling. The s
Python: Add ASGI lifespan state support.
Lifespan state is a special dict in asgi lifespan scope, which allow applications to persist data from the lifespan cycle to request/response handling. The scope["state"] namespace provides a place to store these sorts of things. The server will ensure that a shallow copy of the namespace is passed into each subsequent request/response call into the application.
Some frameworks are already taking advantage of this feature, for example, starlette, and without this feature they wouldn't work properly.
Signed-off-by: synodriver <diguohuangjiajinweijun@gmail.com> Reviewed-by: Andrew Clayton <a.clayton@nginx.com> [ Minor code tweaks to avoid lines > 80 chars, static a function and re-work the PyMemberDef structure initialisation for Python <3.7 and -Wwrite-strings compatibility - Andrew ] Tested-by: <https://github.com/synodriver> Tested-by: <https://github.com/hawiliali> Closes: <https://github.com/nginx/unit/issues/864> Signed-off-by: Andrew Clayton <a.clayton@nginx.com>
show more ...
|
2482:88df458ead6d | 29-May-2023 |
Andrei Zeliankou |
Tests: more fixtures.
Common methods from applications/proto.py converted to the fixtures. sysctl check moved to the specific file where it is using. Some options moved to the constructor to have ea
Tests: more fixtures.
Common methods from applications/proto.py converted to the fixtures. sysctl check moved to the specific file where it is using. Some options moved to the constructor to have early access.
show more ...
|
2481:48bf16097eee | 29-May-2023 |
Andrei Zeliankou |
Tests: Log reworked.
All log-related code moved to the log.py. |
2480:63b9663e2f8f | 25-May-2023 |
Andrei Zeliankou |
Tests: assertion related fixes. |
2479:208ef4e1186a | 25-May-2023 |
Andrei Zeliankou |
Tests: "temp_dir" fixture used were possible. |
2478:c08289a08a73 | 25-May-2023 |
Andrei Zeliankou |
Tests: unified setup method usage.
To make fixtures accessible inside of setup methods in tests all these methods are renamed to the "setup_method_fixture" and decorated by autouse flag.
Also all s
Tests: unified setup method usage.
To make fixtures accessible inside of setup methods in tests all these methods are renamed to the "setup_method_fixture" and decorated by autouse flag.
Also all setup methods moved to the top of the files.
show more ...
|
2477:4633c7db7fb5 | 25-May-2023 |
Andrei Zeliankou |
Tests: removed unused variables. |
2476:cb8c2da2afd9 | 22-May-2023 |
Alejandro Colomar |
Tests: fixed incorrect pointer assignment.
If we don't update the pointer before copying the request body, then we get the behavior shown below. After this patch, "foo\n" is rightly appended at the
Tests: fixed incorrect pointer assignment.
If we don't update the pointer before copying the request body, then we get the behavior shown below. After this patch, "foo\n" is rightly appended at the end of the response body.
Request:
"GET / HTTP/1.1\r\nHost: _\nContent-Length: 4\n\nfoo\n"
Response body:
""" Hello world! foo est data: Method: GET Protocol: HTTP/1.1 Remote addr: 127.0.0.1 Local addr: 127.0.0.1 Target: / Path: / Fields: Host: _ Content-Length: 4 Body: """
Fixes: 1bb22d1e922c ("Unit application library.") Reviewed-by: Andrew Clayton <a.clayton@nginx.com> Signed-off-by: Alejandro Colomar <alx@nginx.com>
show more ...
|
2475:b4f09ab4b9f6 | 24-May-2023 |
Andrei Zeliankou |
Updated copyright notice. |
2474:00f56c19efeb | 24-May-2023 |
Andrei Zeliankou |
Version bump. |
2473:743741e00a16 | 20-May-2023 |
Alejandro Colomar |
Using names in .mailmap.
In this case, Andrew always committed under the same name, so it's not strictly necessary.
This is for consistency, so that it's clearer whose is an email address. It also
Using names in .mailmap.
In this case, Andrew always committed under the same name, so it's not strictly necessary.
This is for consistency, so that it's clearer whose is an email address. It also makes it easier to sort the names alphabetically.
Reviewed-by: Andrew Clayton <a.clayton@nginx.com> Signed-off-by: Alejandro Colomar <alx@nginx.com>
show more ...
|
2472:3f68ff1c058a | 20-May-2023 |
Alejandro Colomar |
Added Alex to .mailmap.
Reviewed-by: Andrew Clayton <a.clayton@nginx.com> Signed-off-by: Alejandro Colomar <alx@nginx.com> |
2471:4875957aa2e6 | 17-May-2023 |
Alejandro Colomar |
Added back deprecated options to unitd.
We renamed the options recently, with the intention of keeping the old names as supported but deprecated for some time, before removal. This was done with th
Added back deprecated options to unitd.
We renamed the options recently, with the intention of keeping the old names as supported but deprecated for some time, before removal. This was done with the configure script options, but in the unitd binary, we accidentally removed the old names, causing some unintended breakage. Keep support for the old names, albeit with a deprecation message to stderr, for some time, until we decide to remove them.
Fixes: 5a37171f733f ("Added default values for pathnames.") Closes: <https://github.com/nginx/unit/issues/876> Reported-by: El RIDO <elrido@gmx.net> Acked-by: Liam Crilly <liam@nginx.com> Acked-by: Artem Konev <a.konev@f5.com> Acked-by: Timo Stark <t.stark@nginx.com> Reviewed-by: Andrew Clayton <a.clayton@nginx.com> Cc: Andrei Zeliankou <zelenkov@nginx.com> Signed-off-by: Alejandro Colomar <alx@nginx.com>
show more ...
|
2470:607ae626288b | 19-May-2023 |
Andrei Zeliankou |
Tests: added tests for "server_version" option. |
2469:ac347ec3667d | 19-May-2023 |
Andrei Zeliankou |
Tests: added ASGI application with IPv6 address test. |
2468:e3ee46ddb766 | 15-May-2023 |
Andrew Clayton |
Python: Fix ASGI applications accessed over IPv6.
There are a couple of reports on GitHub about issues accessing Python ASGI based applications over IPv6.
A request over IPv6 would result in an err
Python: Fix ASGI applications accessed over IPv6.
There are a couple of reports on GitHub about issues accessing Python ASGI based applications over IPv6.
A request over IPv6 would result in an error like
2023/05/13 17:49:12 [alert] 47202#47202 [unit] #10: Python failed to create 'client' pair 2023/05/13 17:49:12 [alert] 47202#47202 [unit] Python failed to call 'loop.call_soon' ValueError: invalid literal for int() with base 10: 'db8:1:1:1ee7:dead:beef:cafe'
The above error was the direct cause of the following exception:
Traceback (most recent call last): File "/usr/lib64/python3.11/asyncio/base_events.py", line 765, in call_soon handle = self._call_soon(callback, args, context) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib64/python3.11/asyncio/base_events.py", line 781, in _call_soon handle = events.Handle(callback, args, self, context) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ SystemError: <class 'asyncio.events.Handle'> returned a result with an exception set
This issue occurred in the nxt_py_asgi_create_ip_address() function where it tries to create an IP address / port number pair.
It does this by looking for the first ':' in the address and taking everything after it as the port number. Like in the above error message, if we tried to access the server @ 2001:db8:1:1:1ee7:dead:beef:cafe, then we'd end up with the port number as 'db8:1:1:1ee7:dead:beef:cafe'.
There are two issues with this
1) The IP address and port number are already flowed through separately. 2) Even if (1) wasn't true, it would still be broken for IPv6 as we'd expect to a get an address literal like [2001:db8:1:1:1ee7:dead:beef:cafe]:8080, however there was no code to handle the []'s.
The fix is to simply not try looking for a port number. We pass a port number into this function to use in the case where we don't find a port number, we never will...
A further cleanup would be to flow through the server port number when creating the 'server pair' PyTuple, rather than just using the hard coded 80.
Closes: <https://github.com/nginx/unit/issues/793> Closes: <https://github.com/nginx/unit/issues/874> Reviewed-by: Alejandro Colomar <alx@nginx.com> Signed-off-by: Andrew Clayton <a.clayton@nginx.com>
show more ...
|
2467:28282eb943b9 | 10-May-2023 |
Artem Konev |
Fixed broken links in README. |