From ddd1a95460243b767e1cd4878cd3b66734964cd3 Mon Sep 17 00:00:00 2001 From: Peter Thorson Date: Sat, 6 Apr 2013 12:10:16 -0500 Subject: [PATCH] refactors hybi00 unit tests to remove duplicate code and use more specific BOOST checks --- test/processors/hybi00.cpp | 142 ++++++++++++++++--------------------- 1 file changed, 62 insertions(+), 80 deletions(-) diff --git a/test/processors/hybi00.cpp b/test/processors/hybi00.cpp index 3c2eb2133d..64a607f234 100644 --- a/test/processors/hybi00.cpp +++ b/test/processors/hybi00.cpp @@ -47,133 +47,115 @@ struct stub_config { con_msg_manager_type; }; -BOOST_AUTO_TEST_CASE( exact_match ) { - stub_config::request_type r; - stub_config::response_type response; - stub_config::con_msg_manager_type::ptr msg_manager; - websocketpp::processor::hybi00 p(false,true,msg_manager); +struct processor_setup { + processor_setup(bool server) + : msg_manager(new stub_config::con_msg_manager_type()) + , p(false,server,msg_manager) {} + websocketpp::lib::error_code ec; + stub_config::con_msg_manager_type::ptr msg_manager; + stub_config::request_type req; + stub_config::response_type res; + websocketpp::processor::hybi00 p; +}; + +BOOST_AUTO_TEST_CASE( exact_match ) { + processor_setup env(true); std::string handshake = "GET / HTTP/1.1\r\nHost: www.example.com\r\nConnection: upgrade\r\nUpgrade: websocket\r\nOrigin: http://example.com\r\nSec-WebSocket-Key1: 3e6b263 4 17 80\r\nSec-WebSocket-Key2: 17 9 G`ZD9 2 2b 7X 3 /r90\r\n\r\n"; - r.consume(handshake.c_str(),handshake.size()); - r.replace_header("Sec-WebSocket-Key3","WjN}|M(6"); + env.req.consume(handshake.c_str(),handshake.size()); + env.req.replace_header("Sec-WebSocket-Key3","WjN}|M(6"); - BOOST_CHECK(websocketpp::processor::is_websocket_handshake(r)); - BOOST_CHECK(websocketpp::processor::get_websocket_version(r) == p.get_version()); - ec = p.validate_handshake(r); - BOOST_CHECK(!ec); + BOOST_CHECK(websocketpp::processor::is_websocket_handshake(env.req)); + BOOST_CHECK_EQUAL(websocketpp::processor::get_websocket_version(env.req), env.p.get_version()); + env.ec = env.p.validate_handshake(env.req); + BOOST_CHECK(!env.ec); websocketpp::uri_ptr u; - bool exception = false; + + BOOST_CHECK_NO_THROW( u = env.p.get_uri(env.req) ); - try { - u = p.get_uri(r); - } catch (const websocketpp::uri_exception& e) { - exception = true; - } + BOOST_CHECK_EQUAL(u->get_secure(), false); + BOOST_CHECK_EQUAL(u->get_host(), "www.example.com"); + BOOST_CHECK_EQUAL(u->get_resource(), "/"); + BOOST_CHECK_EQUAL(u->get_port(), websocketpp::URI_DEFAULT_PORT); - BOOST_CHECK(exception == false); - BOOST_CHECK(u->get_secure() == false); - BOOST_CHECK(u->get_host() == "www.example.com"); - BOOST_CHECK(u->get_resource() == "/"); - BOOST_CHECK(u->get_port() == websocketpp::URI_DEFAULT_PORT); + env.p.process_handshake(env.req,"",env.res); - p.process_handshake(r,"",response); - - BOOST_CHECK(response.get_header("Connection") == "Upgrade"); - BOOST_CHECK(response.get_header("Upgrade") == "websocket"); - BOOST_CHECK(response.get_header("Sec-WebSocket-Origin") == "http://example.com"); + BOOST_CHECK_EQUAL(env.res.get_header("Connection"), "Upgrade"); + BOOST_CHECK_EQUAL(env.res.get_header("Upgrade"), "websocket"); + BOOST_CHECK_EQUAL(env.res.get_header("Sec-WebSocket-Origin"), "http://example.com"); - BOOST_CHECK(response.get_header("Sec-WebSocket-Location") == "ws://www.example.com/"); - BOOST_CHECK(response.get_header("Sec-WebSocket-Key3") == "n`9eBk9z$R8pOtVb"); + BOOST_CHECK_EQUAL(env.res.get_header("Sec-WebSocket-Location"), "ws://www.example.com/"); + BOOST_CHECK_EQUAL(env.res.get_header("Sec-WebSocket-Key3"), "n`9eBk9z$R8pOtVb"); } BOOST_AUTO_TEST_CASE( non_get_method ) { - stub_config::request_type r; - stub_config::con_msg_manager_type::ptr msg_manager; - websocketpp::processor::hybi00 p(false,true,msg_manager); - websocketpp::lib::error_code ec; + processor_setup env(true); std::string handshake = "POST / HTTP/1.1\r\nHost: www.example.com\r\nConnection: upgrade\r\nUpgrade: websocket\r\nSec-WebSocket-Key1: 3e6b263 4 17 80\r\nSec-WebSocket-Key2: 17 9 G`ZD9 2 2b 7X 3 /r90\r\n\r\n"; - r.consume(handshake.c_str(),handshake.size()); - r.replace_header("Sec-WebSocket-Key3","janelle!"); + env.req.consume(handshake.c_str(),handshake.size()); + env.req.replace_header("Sec-WebSocket-Key3","janelle!"); - BOOST_CHECK(websocketpp::processor::is_websocket_handshake(r)); - BOOST_CHECK(websocketpp::processor::get_websocket_version(r) == p.get_version()); - ec = p.validate_handshake(r); - BOOST_CHECK( ec == websocketpp::processor::error::invalid_http_method ); + BOOST_CHECK(websocketpp::processor::is_websocket_handshake(env.req)); + BOOST_CHECK_EQUAL(websocketpp::processor::get_websocket_version(env.req), env.p.get_version()); + BOOST_CHECK_EQUAL( env.p.validate_handshake(env.req), websocketpp::processor::error::invalid_http_method ); } BOOST_AUTO_TEST_CASE( old_http_version ) { - stub_config::request_type r; - stub_config::con_msg_manager_type::ptr msg_manager; - websocketpp::processor::hybi00 p(false,true,msg_manager); - websocketpp::lib::error_code ec; + processor_setup env(true); std::string handshake = "GET / HTTP/1.0\r\nHost: www.example.com\r\nConnection: upgrade\r\nUpgrade: websocket\r\nSec-WebSocket-Key1: 3e6b263 4 17 80\r\nSec-WebSocket-Key2: 17 9 G`ZD9 2 2b 7X 3 /r90\r\n\r\n"; - r.consume(handshake.c_str(),handshake.size()); - r.replace_header("Sec-WebSocket-Key3","janelle!"); + env.req.consume(handshake.c_str(),handshake.size()); + env.req.replace_header("Sec-WebSocket-Key3","janelle!"); - BOOST_CHECK(websocketpp::processor::is_websocket_handshake(r)); - BOOST_CHECK(websocketpp::processor::get_websocket_version(r) == p.get_version()); - ec = p.validate_handshake(r); - BOOST_CHECK( ec == websocketpp::processor::error::invalid_http_version ); + BOOST_CHECK(websocketpp::processor::is_websocket_handshake(env.req)); + BOOST_CHECK_EQUAL(websocketpp::processor::get_websocket_version(env.req), env.p.get_version()); + BOOST_CHECK_EQUAL( env.p.validate_handshake(env.req), websocketpp::processor::error::invalid_http_version ); } BOOST_AUTO_TEST_CASE( missing_handshake_key1 ) { - stub_config::request_type r; - stub_config::con_msg_manager_type::ptr msg_manager; - websocketpp::processor::hybi00 p(false,true,msg_manager); - websocketpp::lib::error_code ec; + processor_setup env(true); std::string handshake = "GET / HTTP/1.1\r\nHost: www.example.com\r\nConnection: upgrade\r\nUpgrade: websocket\r\nSec-WebSocket-Key1: 3e6b263 4 17 80\r\n\r\n"; - r.consume(handshake.c_str(),handshake.size()); - r.replace_header("Sec-WebSocket-Key3","janelle!"); + env.req.consume(handshake.c_str(),handshake.size()); + env.req.replace_header("Sec-WebSocket-Key3","janelle!"); - BOOST_CHECK(websocketpp::processor::is_websocket_handshake(r)); - BOOST_CHECK(websocketpp::processor::get_websocket_version(r) == p.get_version()); - ec = p.validate_handshake(r); - BOOST_CHECK( ec == websocketpp::processor::error::missing_required_header ); + BOOST_CHECK(websocketpp::processor::is_websocket_handshake(env.req)); + BOOST_CHECK_EQUAL(websocketpp::processor::get_websocket_version(env.req), env.p.get_version()); + BOOST_CHECK_EQUAL( env.p.validate_handshake(env.req), websocketpp::processor::error::missing_required_header ); } BOOST_AUTO_TEST_CASE( missing_handshake_key2 ) { - stub_config::request_type r; - stub_config::con_msg_manager_type::ptr msg_manager; - websocketpp::processor::hybi00 p(false,true,msg_manager); - websocketpp::lib::error_code ec; + processor_setup env(true); std::string handshake = "GET / HTTP/1.1\r\nHost: www.example.com\r\nConnection: upgrade\r\nUpgrade: websocket\r\nSec-WebSocket-Key2: 17 9 G`ZD9 2 2b 7X 3 /r90\r\n\r\n"; - r.consume(handshake.c_str(),handshake.size()); - r.replace_header("Sec-WebSocket-Key3","janelle!"); + env.req.consume(handshake.c_str(),handshake.size()); + env.req.replace_header("Sec-WebSocket-Key3","janelle!"); - BOOST_CHECK(websocketpp::processor::is_websocket_handshake(r)); - BOOST_CHECK(websocketpp::processor::get_websocket_version(r) == p.get_version()); - ec = p.validate_handshake(r); - BOOST_CHECK( ec == websocketpp::processor::error::missing_required_header ); + BOOST_CHECK_EQUAL(websocketpp::processor::get_websocket_version(env.req), env.p.get_version()); + BOOST_CHECK_EQUAL( env.p.validate_handshake(env.req), websocketpp::processor::error::missing_required_header ); } BOOST_AUTO_TEST_CASE( bad_host ) { - stub_config::request_type r; - stub_config::con_msg_manager_type::ptr msg_manager; - websocketpp::processor::hybi00 p(false,true,msg_manager); + processor_setup env(true); websocketpp::uri_ptr u; - bool exception = false; - websocketpp::lib::error_code ec; std::string handshake = "GET / HTTP/1.1\r\nHost: www.example.com:70000\r\nConnection: upgrade\r\nUpgrade: websocket\r\nOrigin: http://example.com\r\nSec-WebSocket-Key1: 3e6b263 4 17 80\r\nSec-WebSocket-Key2: 17 9 G`ZD9 2 2b 7X 3 /r90\r\n\r\n"; - r.consume(handshake.c_str(),handshake.size()); - r.replace_header("Sec-WebSocket-Key3","janelle!"); + env.req.consume(handshake.c_str(),handshake.size()); - BOOST_CHECK(websocketpp::processor::is_websocket_handshake(r)); - BOOST_CHECK(websocketpp::processor::get_websocket_version(r) == p.get_version()); - ec = p.validate_handshake(r); - BOOST_CHECK( !ec ); + BOOST_CHECK(websocketpp::processor::is_websocket_handshake(env.req)); + BOOST_CHECK_EQUAL(websocketpp::processor::get_websocket_version(env.req), env.p.get_version()); + BOOST_CHECK( !env.p.validate_handshake(env.req) ); + + BOOST_CHECK_THROW( u = env.p.get_uri(env.req), websocketpp::uri_exception ); +} try { u = p.get_uri(r);