196 lines
7.2 KiB
C++
196 lines
7.2 KiB
C++
/***
|
|
* ==++==
|
|
*
|
|
* 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)
|
|
|
|
}}}}
|