mirror of
https://github.com/postgres/postgres.git
synced 2025-07-30 11:03:19 +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:
@ -3672,6 +3672,31 @@ custom_injection_callback(const char *name, const void *private_data)
|
||||
logic.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
An alternative way to define the action to take when an injection point
|
||||
is reached is to add the testing code alongside the normal source
|
||||
code. This can be useful if the action e.g. depends on local variables
|
||||
that are not accessible to loaded modules. The
|
||||
<function>IS_INJECTION_POINT_ATTACHED</function> macro can then be used
|
||||
to check if an injection point is attached, for example:
|
||||
<programlisting>
|
||||
#ifdef USE_INJECTION_POINTS
|
||||
if (IS_INJECTION_POINT_ATTACHED("before-foobar"))
|
||||
{
|
||||
/* change a local variable if injection point is attached */
|
||||
local_var = 123;
|
||||
|
||||
/* also execute the callback */
|
||||
INJECTION_POINT_CACHED("before-foobar");
|
||||
}
|
||||
#endif
|
||||
</programlisting>
|
||||
Note that the callback attached to the injection point will not be
|
||||
executed by the <function>IS_INJECTION_POINT_ATTACHED</function>
|
||||
macro. If you want to execute the callback, you must also call
|
||||
<function>INJECTION_POINT_CACHED</function> like in the above example.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Optionally, it is possible to detach an injection point by calling:
|
||||
<programlisting>
|
||||
|
Reference in New Issue
Block a user