@@ -103,8 +103,14 @@ def configure(self, env, exprs, extra="", input_sed=False, fails=False):
103103 conf .add_vhost_test1 ()
104104 conf .install ()
105105 if fails :
106- assert env .apache_restart () != 0 , f"{ exprs } : accepted"
107- return
106+ # Check the configuration with httpd -t, which reports the error
107+ # on stderr on every platform; the server is not restarted.
108+ r = env .run ([os .path .join (env .bin_dir , "httpd" ),
109+ "-d" , env .server_dir ,
110+ "-f" , os .path .join (env .server_dir , "conf" ,
111+ "httpd.conf" ), "-t" ])
112+ assert r .exit_code != 0 , f"{ exprs } : accepted"
113+ return r .stderr
108114 assert env .apache_restart () == 0
109115
110116 def get (self , env , path = "/sed.html" , options = None ):
@@ -430,9 +436,8 @@ def test_filters_003_31(self, env, expr, out):
430436 r"s/a\{1\}\{2,30\}/X/" ,
431437 ])
432438 def test_filters_003_32 (self , env , expr ):
433- self .configure (env , expr , fails = True )
434- assert "not allowed here" in env .apachectl_stderr , \
435- env .apachectl_stderr
439+ err = self .configure (env , expr , fails = True )
440+ assert "not allowed here" in err , err
436441
437442 # --- backreferences to groups -----------------------------------------
438443
@@ -444,8 +449,8 @@ def test_filters_003_32(self, env, expr):
444449 r"s/\(a\1\)/X/" ,
445450 ])
446451 def test_filters_003_35 (self , env , expr ):
447- self .configure (env , expr , fails = True )
448- assert "out of range" in env . apachectl_stderr , env . apachectl_stderr
452+ err = self .configure (env , expr , fails = True )
453+ assert "out of range" in err , err
449454
450455 # A backreference to a closed group, even with a later group still open.
451456 def test_filters_003_36 (self , env ):
@@ -462,8 +467,8 @@ def test_filters_003_37(self, env):
462467
463468 # Any deeper is rejected.
464469 def test_filters_003_38 (self , env ):
465- self .configure (env , ["{" * 21 + "p" ] + ["}" ] * 21 , fails = True )
466- assert "too many {'s" in env . apachectl_stderr , env . apachectl_stderr
470+ err = self .configure (env , ["{" * 21 + "p" ] + ["}" ] * 21 , fails = True )
471+ assert "too many {'s" in err , err
467472
468473 # --- bracket expressions ----------------------------------------------
469474
@@ -474,8 +479,8 @@ def test_filters_003_38(self, env):
474479 ["s/aaaa]*/b/" , "s/[a-" ],
475480 ])
476481 def test_filters_003_39 (self , env , exprs ):
477- self .configure (env , exprs , fails = True )
478- assert "imbalance" in env . apachectl_stderr , env . apachectl_stderr
482+ err = self .configure (env , exprs , fails = True )
483+ assert "imbalance" in err , err
479484
480485 # --- unterminated expressions -----------------------------------------
481486
@@ -486,9 +491,8 @@ def test_filters_003_39(self, env, exprs):
486491 ["s/aaaa/b/" , "s/a" ],
487492 ])
488493 def test_filters_003_40 (self , env , exprs ):
489- self .configure (env , exprs , fails = True )
490- assert "missing delimiter" in env .apachectl_stderr , \
491- env .apachectl_stderr
494+ err = self .configure (env , exprs , fails = True )
495+ assert "missing delimiter" in err , err
492496
493497 # --- delimiters -------------------------------------------------------
494498
@@ -502,9 +506,8 @@ def test_filters_003_41(self, env):
502506 # An s or y command which ends before its delimiter is rejected.
503507 @pytest .mark .parametrize ("expr" , ["s" , "/monday/s" , "y" , "/monday/y" ])
504508 def test_filters_003_42 (self , env , expr ):
505- self .configure (env , expr , fails = True )
506- assert "command garbled" in env .apachectl_stderr , \
507- env .apachectl_stderr
509+ err = self .configure (env , expr , fails = True )
510+ assert "command garbled" in err , err
508511
509512 # y maps bytes with the high bit set like any other.
510513 def test_filters_003_43 (self , env ):
@@ -517,11 +520,9 @@ def test_filters_003_43(self, env):
517520 # rejected without writing past the buffer. Only a memory checker sees
518521 # the difference.
519522 def test_filters_003_44 (self , env ):
520- self .configure (env , [f"r { 'A' * 998 } " ] * 10 + ["r 123456789" ,
521- "/x/p" ],
522- fails = True )
523- assert "too much command text" in env .apachectl_stderr , \
524- env .apachectl_stderr
523+ err = self .configure (env , [f"r { 'A' * 998 } " ] * 10
524+ + ["r 123456789" , "/x/p" ], fails = True )
525+ assert "too much command text" in err , err
525526
526527 # An interval count is rejected as too large however many digits it
527528 # has, rather than wrapping around.
@@ -531,17 +532,15 @@ def test_filters_003_44(self, env):
531532 r"s/o\{1,4294967298\}/X/" ,
532533 ])
533534 def test_filters_003_45 (self , env , expr ):
534- self .configure (env , expr , fails = True )
535- assert "Range endpoint too large" in env .apachectl_stderr , \
536- env .apachectl_stderr
535+ err = self .configure (env , expr , fails = True )
536+ assert "Range endpoint too large" in err , err
537537
538538 # A line number too large for a 64-bit count is rejected rather than
539539 # wrapping around; one which fits, but which no document reaches, is
540540 # accepted.
541541 def test_filters_003_46 (self , env ):
542- self .configure (env , "99999999999999999999p" , fails = True )
543- assert "command garbled" in env .apachectl_stderr , \
544- env .apachectl_stderr
542+ err = self .configure (env , "99999999999999999999p" , fails = True )
543+ assert "command garbled" in err , err
545544
546545 def test_filters_003_47 (self , env ):
547546 assert self .body (env , "9223372036854775807d" ).decode () == DOC
0 commit comments