summaryrefslogtreecommitdiffstats
path: root/qa/mockup/internals.hxx
blob: 43c001e773511fd6731eb336066d2168895087a7 (plain)
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
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
/* libcmis
 * Version: MPL 1.1 / GPLv2+ / LGPLv2+
 *
 * The contents of this file are subject to the Mozilla Public License Version
 * 1.1 (the "License"); you may not use this file except in compliance with
 * the License or as specified alternatively below. You may obtain a copy of
 * the License at http://www.mozilla.org/MPL/
 *
 * Software distributed under the License is distributed on an "AS IS" basis,
 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
 * for the specific language governing rights and limitations under the
 * License.
 *
 * Major Contributor(s):
 * Copyright (C) 2011 SUSE <cbosdonnat@suse.com>
 *
 *
 * All Rights Reserved.
 *
 * For minor contributions see the git repository.
 *
 * Alternatively, the contents of this file may be used under the terms of
 * either the GNU General Public License Version 2 or later (the "GPLv2+"), or
 * the GNU Lesser General Public License Version 2 or later (the "LGPLv2+"),
 * in which case the provisions of the GPLv2+ or the LGPLv2+ are applicable
 * instead of those above.
 */

#ifndef INCLUDED_QA_MOCKUP_INTERNALS_HXX
#define INCLUDED_QA_MOCKUP_INTERNALS_HXX

#include <map>
#include <string>
#include <vector>

typedef size_t ( *write_callback )( char *ptr, size_t size, size_t nmemb, void *userdata );
typedef size_t ( *read_callback )( char *ptr, size_t size, size_t nmemb, void *userdata );
typedef size_t ( *headers_callback )( char *ptr, size_t size, size_t nmemb, void *userdata );

class CurlHandle
{
    public:
        CurlHandle( );
        CurlHandle( const CurlHandle& copy );
        CurlHandle& operator=( const CurlHandle& copy );
        ~CurlHandle( );

        std::string m_url;

        write_callback m_writeFn;
        void* m_writeData;
        read_callback m_readFn;
        void* m_readData;
        long m_readSize;
        headers_callback m_headersFn;
        void* m_headersData;

        std::string m_username;
        std::string m_password;
        std::string m_proxy;
        std::string m_noProxy;
        std::string m_proxyUser;
        std::string m_proxyPass;

        bool m_verifyHost;
        bool m_verifyPeer;
        bool m_certInfo;

        struct curl_certinfo m_certs;

        long m_httpError;
        std::string m_method;
        std::vector< std::string > m_headers;

        void reset( );
};

namespace mockup
{
    class Response
    {
        public:
            Response( std::string response, unsigned int status, bool isFilePath,
                      std::string headers );

            std::string m_response;
            unsigned int m_status;
            bool m_isFilePath;
            std::string m_headers;
    };

    class Request
    {
        public:
            Request( std::string url, std::string method, std::string body,
                     std::vector< std::string > headers );

            std::string m_url;
            std::string m_method;
            std::string m_body;
            std::vector< std::string > m_headers;
    };

    class RequestMatcher
    {
        public:
            RequestMatcher( std::string baseUrl, std::string matchParam,
                            std::string method, std::string matchBody );
            bool operator< ( const RequestMatcher& compare ) const;

            std::string m_baseUrl;
            std::string m_matchParam;
            std::string m_method;
            std::string m_matchBody;
    };

    class Configuration
    {
        public:
            Configuration( );

            bool hasCredentials( );
            CURLcode writeResponse( CurlHandle* handle );

            std::map< RequestMatcher, Response > m_responses;
            std::vector< Request > m_requests;
            std::string m_username;
            std::string m_password;
            std::string m_badSSLCertificate;
    };
}

#endif