From 1f450fd034099f3118ccaa92eba7bef130f44307 Mon Sep 17 00:00:00 2001 From: Peter Thorson Date: Fri, 5 Apr 2013 08:28:13 -0500 Subject: [PATCH] refactors connection testing to extract more common functionality --- test/connection/connection.cpp | 65 +++++++++++++++++------------- test/connection/connection_tu2.cpp | 21 +++++++++- test/connection/connection_tu2.hpp | 5 ++- 3 files changed, 59 insertions(+), 32 deletions(-) diff --git a/test/connection/connection.cpp b/test/connection/connection.cpp index 88f3bab383..5cbcea6ca8 100644 --- a/test/connection/connection.cpp +++ b/test/connection/connection.cpp @@ -81,40 +81,49 @@ struct stub_config : public websocketpp::config::core { typedef connection_extension connection_base; }; -BOOST_AUTO_TEST_CASE( connection_extensions ) { - stub_config::alog_type alog; +struct connection_setup { + connection_setup(bool server) + : c(server,"",alog,elog,rng) {} + + websocketpp::lib::error_code ec; + stub_config::alog_type alog; stub_config::elog_type elog; - stub_config::rng_type rng; - websocketpp::connection s(true,"",alog,elog,rng); + stub_config::rng_type rng; + websocketpp::connection c; +}; + +/*void echo_func(server* s, websocketpp::connection_hdl hdl, message_ptr msg) { + s->send(hdl, msg->get_payload(), msg->get_opcode()); +}*/ + +void validate_func(server* s, websocketpp::connection_hdl hdl, message_ptr msg) { + s->send(hdl, msg->get_payload(), msg->get_opcode()); +} + + + +BOOST_AUTO_TEST_CASE( connection_extensions ) { + connection_setup env(true); - BOOST_CHECK( s.extension_value == 5 ); - BOOST_CHECK( s.extension_method() == 5 ); + BOOST_CHECK( env.c.extension_value == 5 ); + BOOST_CHECK( env.c.extension_method() == 5 ); - BOOST_CHECK( s.is_server() == true ); + BOOST_CHECK( env.c.is_server() == true ); +} + +BOOST_AUTO_TEST_CASE( basic_websocket_request ) { + std::string input = "GET / HTTP/1.1\r\nHost: www.example.com\r\nConnection: upgrade\r\nUpgrade: websocket\r\nSec-WebSocket-Version: 13\r\nSec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==\r\nOrigin: http://www.example.com\r\n\r\n"; + std::string output = "HTTP/1.1 101 Switching Protocols\r\nConnection: upgrade\r\nSec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=\r\nServer: "; + output+=websocketpp::user_agent; + output+="\r\nUpgrade: websocket\r\n\r\n"; + + server s; + s.set_message_handler(bind(&echo_func,&s,::_1,::_2)); + + BOOST_CHECK(run_server_test(s,input) == output); } /* -BOOST_AUTO_TEST_CASE( basic_websocket_request ) { - std::string input = "GET / HTTP/1.1\r\nHost: www.example.com\r\nConnection: upgrade\r\nUpgrade: websocket\r\nSec-WebSocket-Version: 13\r\nSec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==\r\nOrigin: http://www.example.com\r\n\r\n"; - std::string output = "HTTP/1.1 101 Switching Protocols\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=\r\nServer: "+websocketpp::USER_AGENT+"\r\nUpgrade: websocket\r\n\r\n"; - - BOOST_CHECK(run_server_test(input) == output); -} - -BOOST_AUTO_TEST_CASE( invalid_websocket_version ) { - std::string input = "GET / HTTP/1.1\r\nHost: www.example.com\r\nConnection: upgrade\r\nUpgrade: websocket\r\nSec-WebSocket-Version: a\r\nSec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==\r\nOrigin: http://www.example.com\r\n\r\n"; - std::string output = "HTTP/1.1 400 Bad Request\r\nServer: "+websocketpp::USER_AGENT+"\r\n\r\n"; - - BOOST_CHECK(run_server_test(input) == output); -} - -BOOST_AUTO_TEST_CASE( unimplimented_websocket_version ) { - std::string input = "GET / HTTP/1.1\r\nHost: www.example.com\r\nConnection: upgrade\r\nUpgrade: websocket\r\nSec-WebSocket-Version: 14\r\nSec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==\r\nOrigin: http://www.example.com\r\n\r\n"; - - std::string output = "HTTP/1.1 400 Bad Request\r\nSec-WebSocket-Version: 0,7,8,13\r\nServer: "+websocketpp::USER_AGENT+"\r\n\r\n"; - - BOOST_CHECK(run_server_test(input) == output); -} BOOST_AUTO_TEST_CASE( user_reject_origin ) { std::string input = "GET / HTTP/1.1\r\nHost: www.example.com\r\nConnection: upgrade\r\nUpgrade: websocket\r\nSec-WebSocket-Version: 13\r\nSec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==\r\nOrigin: http://www.example2.com\r\n\r\n"; diff --git a/test/connection/connection_tu2.cpp b/test/connection/connection_tu2.cpp index 76f4ddd83d..9abd009afd 100644 --- a/test/connection/connection_tu2.cpp +++ b/test/connection/connection_tu2.cpp @@ -27,7 +27,7 @@ #include "connection_tu2.hpp" -void on_message(server* s, websocketpp::connection_hdl hdl, message_ptr msg) { +void echo_func(server* s, websocketpp::connection_hdl hdl, message_ptr msg) { s->send(hdl, msg->get_payload(), msg->get_opcode()); } @@ -35,7 +35,7 @@ std::string run_server_test(std::string input) { server test_server; server::connection_ptr con; - test_server.set_message_handler(bind(&on_message,&test_server,::_1,::_2)); + test_server.set_message_handler(bind(&echo_func,&test_server,::_1,::_2)); std::stringstream output; @@ -50,5 +50,22 @@ std::string run_server_test(std::string input) { channel << input; channel >> *con; + return output.str(); +} + +std::string run_server_test(server& s, std::string input) { + server::connection_ptr con; + std::stringstream output; + + s.register_ostream(&output); + + con = s.get_connection(); + con->start(); + + std::stringstream channel; + + channel << input; + channel >> *con; + return output.str(); } \ No newline at end of file diff --git a/test/connection/connection_tu2.hpp b/test/connection/connection_tu2.hpp index bbc1cb738c..09ad74eeed 100644 --- a/test/connection/connection_tu2.hpp +++ b/test/connection/connection_tu2.hpp @@ -51,5 +51,6 @@ using websocketpp::lib::bind; } };*/ -void on_message(server* s, websocketpp::connection_hdl hdl, message_ptr msg); -std::string run_server_test(std::string input); \ No newline at end of file +void echo_func(server* s, websocketpp::connection_hdl hdl, message_ptr msg); +std::string run_server_test(std::string input); +std::string run_server_test(server & s,std::string input); \ No newline at end of file