add on_request hook
add test case