Hi, On Mon, Mar 28, 2022 at 04:20:07PM +0900, Michael Paquier wrote: > > > Note that those tests fail on Windows (and I'm assuming on EXEC_BACKEND > > builds), as they're testing invalid files which by definition prevent any > > further connection attempt. I'm not sure what would be best to do here, > > apart > > from bypassing the invalid config tests on such platforms. I don't think > > that > > validating that trying to connect on such platforms when an invalid > > pg_hba/pg_ident file brings anything. > > Hmm, indeed. I have been looking at that and that's annoying. As you > mentioned off-list, in order to know if a build has an emulation of > fork() that would avoid failures with new connection attempts after > including some dummy entries in pg_hba.conf or pg_ident.conf, we'd > need to look at EXEC_BACKEND (well, mostly), as of: > - CFLAGS in pg_config, or a query on pg_config() (does not work with > MSVC as CFLAGS is not set there). > - A potential check on pg_config{_manual}.h. > - Perhaps an extra dependency on $windows_os, discarding incorrectly > cygwin that should be able to work.
Yeah, detecting !cygwin-Windows or EXEC_BACKEND in the TAP tests is quite hard. > We could use a failure path for each psql command rather than a SKIP > block, as you told me, if the psql fails and check that we get some > error strings related to the loading of auth files. However, I am > scared of this design in the long-term as it could cause the tests to > pass with a failure triggered on platforms and/or configurations where > we should have a success. So, I am tempted to drop the ball for now > with the TAP part. Ok. We could still keep the tests for the valid lines part though? > The patch still has value for the end-user. I have checked the > backend part, and I did not notice any obvious issue. There is one > thing that I am wondering though: should we change the two queries in > sysviews.sql so as we check that there are zero errors in the two > views when the files are parsed? This simple change would avoid > mistakes for users running installcheck on a production installation. Do you mean something like SELECT count(*) > 0 AS ok, count(*) FILTER (WHERE error IS NOT NULL) = 0 AS has_no_error FROM pg_hba_file_rules ; and similar for pg_ident_rule_mappings?