//System Includes #include #include #include #include //Project Includes #include #include #include #include #include #include //External Includes #include //System Namespaces using std::string; using std::multimap; using std::shared_ptr; using std::make_shared; using std::runtime_error; //Project Namespaces using restbed::Http; using restbed::Bytes; using restbed::Request; using restbed::Response; using restbed::Settings; using restbed::SSLSettings; //External Namespaces #ifdef BUILD_SSL TEST_CASE( "validate runtime_error is not thrown when SSLSettings passed into sync", "[client]" ) { const auto settings = make_shared< Settings >( ); settings->set_ssl_settings( make_shared< SSLSettings >( ) ); auto request = make_shared< Request >( ); REQUIRE_NOTHROW( Http::sync( request, settings ) ); } #else TEST_CASE( "validate runtime_error is thrown when SSLSettings passed into sync", "[client]" ) { const auto settings = make_shared< Settings >( ); settings->set_ssl_settings( make_shared< SSLSettings >( ) ); auto request = make_shared< Request >( ); REQUIRE_THROWS_AS( Http::sync( request, settings ), runtime_error ); } #endif TEST_CASE( "convert request to bytes", "[http]" ) { auto request = make_shared< Request >( ); SECTION( "default request" ) { const auto bytes = Http::to_bytes( request ); const string data( bytes.data( ), bytes.data( ) + bytes.size( ) ); REQUIRE( data == "GET / HTTP/1.1\r\n\r\n" ); } SECTION( "modified request" ) { request->set_version( 1.0 ); request->set_method( "POST" ); request->set_protocol( "SPDY" ); request->set_path( "/index.html" ); request->set_body( Bytes( { 'H', 'e', 'l', 'l', 'o', ',', ' ', 'W', 'o', 'r', 'l', 'd', '!' } ) ); multimap< string, string > parameters { { "query", "search term" }, { "page", "1" } }; request->set_query_parameters( parameters ); multimap< string, string > headers { { "Connection", "keep-alive" } }; request->set_headers( headers ); const auto bytes = Http::to_bytes( request ); const string data( bytes.data( ), bytes.data( ) + bytes.size( ) ); REQUIRE( data == "POST /index.html?page=1&query=search%20term HTTP/1.0\r\nConnection: keep-alive\r\n\r\nHello, World!" ); } } TEST_CASE( "convert response to bytes", "[http]" ) { auto response = make_shared< Response >( ); SECTION( "default response" ) { const auto bytes = Http::to_bytes( response ); const string data( bytes.data( ), bytes.data( ) + bytes.size( ) ); REQUIRE( data == "HTTP/1.1 0 \r\n\r\n" ); } SECTION( "modified response" ) { response->set_body( Bytes( { 'a', 'b' } ) ); response->set_version( 1.0 ); response->set_status_code( 400 ); response->set_protocol( "SPDY" ); response->set_status_message( "corvusoft ltd" ); multimap< string, string > headers { { "Connection", "keep-alive" } }; response->set_headers( headers ); const auto bytes = Http::to_bytes( response ); const string data( bytes.data( ), bytes.data( ) + bytes.size( ) ); REQUIRE( data == "SPDY/1.0 400 corvusoft ltd\r\nConnection: keep-alive\r\n\r\nab" ); } }