@@ -2215,4 +2215,88 @@ describe('h2o2', () => {
22152215 await server . stop ( ) ;
22162216 await upstream . stop ( ) ;
22172217 } ) ;
2218+
2219+ it ( 'propagates the allow header in case of 405 (with passthrough)' , async ( ) => {
2220+
2221+ const upstream = Hapi . server ( ) ;
2222+ upstream . route ( {
2223+ method : 'POST' ,
2224+ path : '/item' ,
2225+ handler ( request , h ) {
2226+
2227+ throw Boom . methodNotAllowed ( 'Not allowed' , { } , [ 'GET' ] ) ;
2228+ }
2229+ } ) ;
2230+
2231+ await upstream . start ( ) ;
2232+
2233+ const server = Hapi . server ( ) ;
2234+ await server . register ( H2o2 ) ;
2235+
2236+ server . route ( { method : 'POST' , path : '/item' , handler : { proxy : { host : upstream . info . address , port : upstream . info . port , passThrough : true } } } ) ;
2237+ await server . start ( ) ;
2238+
2239+ const res = await server . inject ( { method : 'POST' , url : '/item' } ) ;
2240+ expect ( res . statusCode ) . to . equal ( 405 ) ;
2241+ expect ( res . headers . allow ) . to . equal ( 'GET' ) ;
2242+
2243+ await server . stop ( ) ;
2244+ await upstream . stop ( ) ;
2245+ } ) ;
2246+
2247+ it ( 'propagates the allow header in case of 405 (without passthrough)' , async ( ) => {
2248+
2249+ const upstream = Hapi . server ( ) ;
2250+ upstream . route ( {
2251+ method : 'POST' ,
2252+ path : '/item' ,
2253+ handler ( request , h ) {
2254+
2255+ throw Boom . methodNotAllowed ( 'Not allowed' , { } , [ 'GET' ] ) ;
2256+ }
2257+ } ) ;
2258+
2259+ await upstream . start ( ) ;
2260+
2261+ const server = Hapi . server ( ) ;
2262+ await server . register ( H2o2 ) ;
2263+
2264+ server . route ( { method : 'POST' , path : '/item' , handler : { proxy : { host : upstream . info . address , port : upstream . info . port } } } ) ;
2265+ await server . start ( ) ;
2266+
2267+ const res = await server . inject ( { method : 'POST' , url : '/item' } ) ;
2268+ expect ( res . statusCode ) . to . equal ( 405 ) ;
2269+ expect ( res . headers . allow ) . to . equal ( 'GET' ) ;
2270+
2271+ await server . stop ( ) ;
2272+ await upstream . stop ( ) ;
2273+ } ) ;
2274+
2275+ it ( 'does not propagate a missing allow header in case of malformed 405' , async ( ) => {
2276+
2277+ const upstream = Hapi . server ( ) ;
2278+ upstream . route ( {
2279+ method : 'POST' ,
2280+ path : '/item' ,
2281+ handler ( request , h ) {
2282+
2283+ throw Boom . methodNotAllowed ( 'Not allowed' ) ;
2284+ }
2285+ } ) ;
2286+
2287+ await upstream . start ( ) ;
2288+
2289+ const server = Hapi . server ( ) ;
2290+ await server . register ( H2o2 ) ;
2291+
2292+ server . route ( { method : 'POST' , path : '/item' , handler : { proxy : { host : upstream . info . address , port : upstream . info . port } } } ) ;
2293+ await server . start ( ) ;
2294+
2295+ const res = await server . inject ( { method : 'POST' , url : '/item' } ) ;
2296+ expect ( res . statusCode ) . to . equal ( 405 ) ;
2297+ expect ( res . headers . allow ) . to . not . exist ( ) ;
2298+
2299+ await server . stop ( ) ;
2300+ await upstream . stop ( ) ;
2301+ } ) ;
22182302} ) ;
0 commit comments