spectrum2/3rdparty/cpprestsdk/tests/functional/http/client/http_methods_tests.cpp
2015-11-19 15:19:14 +01:00

119 lines
No EOL
3.1 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.
*
* ==--==
* =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
*
* Tests cases for HTTP methods.
*
* =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
****/
#include "stdafx.h"
using namespace web::http;
using namespace web::http::client;
using namespace tests::functional::http::utilities;
namespace tests { namespace functional { namespace http { namespace client {
SUITE(http_methods_tests)
{
// Tests the defined methods and custom methods.
TEST_FIXTURE(uri_address, http_methods)
{
test_http_server::scoped_server scoped(m_uri);
test_http_server * p_server = scoped.server();
http_client client(m_uri);
// Don't include 'CONNECT' it has a special meaning.
utility::string_t send_methods[] =
{
methods::GET,
U("GET"),
methods::DEL,
methods::HEAD,
#ifdef _WIN32 // - this is never passed to the listener with http_listener
methods::OPTIONS,
#endif
methods::POST,
methods::PUT,
methods::PATCH,
#ifndef __cplusplus_winrt
# ifdef _WIN32 // - ditto
methods::TRCE,
#endif
#endif
U("CUstomMETHOD")
};
utility::string_t recv_methods[] =
{
U("GET"),
U("GET"),
U("DELETE"),
U("HEAD"),
#ifdef _WIN32
U("OPTIONS"),
#endif
U("POST"),
U("PUT"),
U("PATCH"),
#ifndef __cplusplus_winrt
# ifdef _WIN32
U("TRACE"),
#endif
#endif
U("CUstomMETHOD")
};
const size_t num_methods = sizeof(send_methods) / sizeof(send_methods[0]);
for(int i = 0; i < num_methods; ++i)
{
p_server->next_request().then([i, &recv_methods](test_request *p_request)
{
http_asserts::assert_test_request_equals(p_request, recv_methods[i], U("/"));
VERIFY_ARE_EQUAL(0u, p_request->reply(200));
});
http_asserts::assert_response_equals(client.request(send_methods[i]).get(), status_codes::OK);
}
}
#ifdef __cplusplus_winrt
TEST_FIXTURE(uri_address, http_trace_fails_on_winrt)
{
http_client client(m_uri);
VERIFY_THROWS(client.request(methods::TRCE).get(), http_exception);
}
#endif
TEST(http_request_empty_method)
{
VERIFY_THROWS(http_request(U("")), std::invalid_argument);
}
TEST_FIXTURE(uri_address, empty_method)
{
test_http_server::scoped_server scoped(m_uri);
http_client client(m_uri);
VERIFY_THROWS(client.request(U("")), std::invalid_argument);
}
}
}}}}