Files @ f2a6ba12fc29
Branch filter:

Location: libtransport.git/3rdparty/cpprestsdk/tests/functional/http/client/request_helper_tests.cpp

Jan Kaluza
Slack frontend stub
/***
* ==++==
*
* Copyright (c) Microsoft Corporation. All rights reserved. 
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0
* 
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* ==--==
* =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
*
* request_helper_tests.cpp
*
* Tests cases for the convenience helper functions for making requests on http_client.
*
* =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
****/

#include "stdafx.h"

#include <fstream>

#include "cpprest/version.h"

using namespace web; 
using namespace utility;
using namespace web::http;
using namespace web::http::client;

using namespace tests::functional::http::utilities;

namespace tests { namespace functional { namespace http { namespace client {

SUITE(request_helper_tests)
{

TEST_FIXTURE(uri_address, non_rvalue_bodies)
{
    test_http_server::scoped_server scoped(m_uri);
    test_http_server * p_server = scoped.server();
    http_client client(m_uri);
    
    // Without content type.
    utility::string_t send_body = U("YES NOW SEND THE TROOPS!");
    p_server->next_request().then([&send_body](test_request *p_request)
    {
        http_asserts::assert_test_request_equals(p_request, methods::PUT, U("/"), U("text/plain; charset=utf-8"), send_body);
        p_request->reply(200);
    });
    http_asserts::assert_response_equals(client.request(methods::PUT, U(""), send_body).get(), status_codes::OK);
    
    // With content type.
    utility::string_t content_type = U("custom_content");
    test_server_utilities::verify_request(&client, methods::PUT, U("/"), content_type, send_body, p_server, status_codes::OK, U("OK"));

    // Empty body type
    send_body.clear();
    content_type = U("haha_type");
    p_server->next_request().then([&](test_request *p_request)
    {
        http_asserts::assert_test_request_equals(p_request, methods::PUT, U("/"), content_type);
        VERIFY_ARE_EQUAL(0u, p_request->m_body.size());
        VERIFY_ARE_EQUAL(0u, p_request->reply(status_codes::OK, U("OK")));
    });
    http_asserts::assert_response_equals(client.request(methods::PUT, U("/"), send_body, content_type).get(), status_codes::OK, U("OK"));
}

TEST_FIXTURE(uri_address, rvalue_bodies)
{
    test_http_server::scoped_server scoped(m_uri);
    test_http_server * p_server = scoped.server();
    http_client client(m_uri);
    
    // Without content type.
    utility::string_t send_body = U("YES NOW SEND THE TROOPS!");
    utility::string_t move_body = send_body;
    p_server->next_request().then([&send_body](test_request *p_request)
    {
        http_asserts::assert_test_request_equals(p_request, methods::PUT, U("/"), U("text/plain; charset=utf-8"), send_body);
        p_request->reply(200);
    });
    http_asserts::assert_response_equals(client.request(methods::PUT, U(""), std::move(move_body)).get(), status_codes::OK);

    // With content type.
    utility::string_t content_type = U("custom_content");
    move_body = send_body;
    p_server->next_request().then([&](test_request *p_request)
    {
        http_asserts::assert_test_request_equals(p_request, methods::PUT, U("/"), content_type, send_body);
        p_request->reply(200);
    });
    http_asserts::assert_response_equals(client.request(methods::PUT, U(""), std::move(move_body), content_type).get(), status_codes::OK);

    // Empty body.
    content_type = U("haha_type");
    send_body.clear();
    move_body = send_body;
    p_server->next_request().then([&](test_request *p_request)
    {
        http_asserts::assert_test_request_equals(p_request, methods::PUT, U("/"), content_type);
        VERIFY_ARE_EQUAL(0u, p_request->m_body.size());
        p_request->reply(200);
    });
    http_asserts::assert_response_equals(client.request(methods::PUT, U(""), std::move(move_body), content_type).get(), status_codes::OK);
}

TEST_FIXTURE(uri_address, json_bodies)
{
    test_http_server::scoped_server scoped(m_uri);
    test_http_server * p_server = scoped.server();
    http_client client(m_uri);
    
    // JSON bool value.
    json::value bool_value = json::value::boolean(true);
    p_server->next_request().then([&](test_request *p_request)
    {
        http_asserts::assert_test_request_equals(p_request, methods::PUT, U("/"), U("application/json"), bool_value.serialize());
        p_request->reply(200);
    });
    http_asserts::assert_response_equals(client.request(methods::PUT, U("/"), bool_value).get(), status_codes::OK);

    // JSON null value.
    json::value null_value = json::value::null();
    p_server->next_request().then([&](test_request *p_request)
    {
        http_asserts::assert_test_request_equals(p_request, methods::PUT, U("/"), U("application/json"), null_value.serialize());
        p_request->reply(200);
    });
    http_asserts::assert_response_equals(client.request(methods::PUT, U(""), null_value).get(), status_codes::OK);
}

TEST_FIXTURE(uri_address, non_rvalue_2k_body)
{
    test_http_server::scoped_server scoped(m_uri);
    test_http_server * p_server = scoped.server();
    http_client client(m_uri);

    std::string body;
    for(int i = 0; i < 2048; ++i)
    {
        body.append(1, (char)('A' + (i % 26)));
    }
    test_server_utilities::verify_request(&client, methods::PUT, U("/"), U("text/plain"), ::utility::conversions::to_string_t(body), p_server, status_codes::OK, U("OK"));
}

TEST_FIXTURE(uri_address, default_user_agent)
{
    test_http_server::scoped_server scoped(m_uri);
    test_http_server * p_server = scoped.server();
    http_client client(m_uri);
    
    p_server->next_request().then([&](test_request *p_request)
    {
        utility::stringstream_t stream;
        stream << _XPLATSTR("cpprestsdk/") << CPPREST_VERSION_MAJOR << _XPLATSTR(".") << CPPREST_VERSION_MINOR << _XPLATSTR(".") << CPPREST_VERSION_REVISION;
        utility::string_t foundHeader;
        p_request->match_header(U("User-Agent"), foundHeader);
        VERIFY_ARE_EQUAL(stream.str(), foundHeader);
        
        p_request->reply(200);
    });

    http_asserts::assert_response_equals(client.request(methods::GET).get(), status_codes::OK);
}

TEST_FIXTURE(uri_address, overwrite_user_agent)
{
    test_http_server::scoped_server scoped(m_uri);
    test_http_server * p_server = scoped.server();
    http_client client(m_uri);
    
    utility::string_t customUserAgent(U("MyAgent"));
    p_server->next_request().then([&](test_request *p_request)
    {
        utility::string_t foundHeader;
        p_request->match_header(U("User-Agent"), foundHeader);
        VERIFY_ARE_EQUAL(customUserAgent, foundHeader);
        
        p_request->reply(200);
    });

    http_request request(methods::GET);
    request.headers()[U("User-Agent")] = customUserAgent;
    http_asserts::assert_response_equals(client.request(request).get(), status_codes::OK);
}

} // SUITE(request_helper_tests)

}}}}