File: http_methods_tests.cpp

package info (click to toggle)
cpprest 2.10.19-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 6,916 kB
  • sloc: cpp: 71,086; sh: 275; makefile: 170; javascript: 147
file content (104 lines) | stat: -rw-r--r-- 3,487 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
/***
 * Copyright (C) Microsoft. All rights reserved.
 * Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
 *
 * =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
 *
 * 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);
    }
}

} // namespace client
} // namespace http
} // namespace functional
} // namespace tests