mirror of
https://github.com/postgres/postgres.git
synced 2025-07-27 12:41:57 +03:00
Add test for early backend startup errors
The new test tests the libpq fallback behavior on an early error, which was fixed in the previous commit. This adds an IS_INJECTION_POINT_ATTACHED() macro, to allow writing injected test code alongside the normal source code. In principle, the new test could've been implemented by an extra test module with a callback that sets the FrontendProtocol global variable, but I think it's more clear to have the test code right where the injection point is, because it has pretty intimate knowledge of the surrounding context it runs in. Reviewed-by: Michael Paquier Discussion: https://www.postgresql.org/message-id/CAOYmi%2Bnwvu21mJ4DYKUa98HdfM_KZJi7B1MhyXtnsyOO-PB6Ww%40mail.gmail.com
This commit is contained in:
@ -33,6 +33,7 @@
|
||||
#include "tcop/backend_startup.h"
|
||||
#include "tcop/tcopprot.h"
|
||||
#include "utils/builtins.h"
|
||||
#include "utils/injection_point.h"
|
||||
#include "utils/memutils.h"
|
||||
#include "utils/ps_status.h"
|
||||
#include "utils/timeout.h"
|
||||
@ -213,6 +214,21 @@ BackendInitialize(ClientSocket *client_sock, CAC_state cac)
|
||||
remote_host)));
|
||||
}
|
||||
|
||||
/* For testing client error handling */
|
||||
#ifdef USE_INJECTION_POINTS
|
||||
INJECTION_POINT("backend-initialize");
|
||||
if (IS_INJECTION_POINT_ATTACHED("backend-initialize-v2-error"))
|
||||
{
|
||||
/*
|
||||
* This simulates an early error from a pre-v14 server, which used the
|
||||
* version 2 protocol for any errors that occurred before processing
|
||||
* the startup packet.
|
||||
*/
|
||||
FrontendProtocol = PG_PROTOCOL(2, 0);
|
||||
elog(FATAL, "protocol version 2 error triggered");
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* If we did a reverse lookup to name, we might as well save the results
|
||||
* rather than possibly repeating the lookup during authentication.
|
||||
|
Reference in New Issue
Block a user