1f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko// Copyright 2014 The Chromium OS Authors. All rights reserved.
2f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko// Use of this source code is governed by a BSD-style license that can be
3f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko// found in the LICENSE file.
4f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko
5fed60b0c640828b320f56293c8bebc43fd2b1da8Alex Vakulenko#ifndef LIBBRILLO_BRILLO_HTTP_MOCK_CURL_API_H_
6fed60b0c640828b320f56293c8bebc43fd2b1da8Alex Vakulenko#define LIBBRILLO_BRILLO_HTTP_MOCK_CURL_API_H_
7f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko
8f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko#include <string>
9f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko
109ed0cab99f18acb3570a35e9408f24355f6b8324Alex Vakulenko#include <brillo/http/curl_api.h>
11f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko#include <gmock/gmock.h>
12f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko
139ed0cab99f18acb3570a35e9408f24355f6b8324Alex Vakulenkonamespace brillo {
14f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenkonamespace http {
15f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko
16aa7d677661213b4116adc5fac88b8c37a1490010Alex Vakulenko// This is a mock for CURL interfaces which allows to mock out the CURL's
17aa7d677661213b4116adc5fac88b8c37a1490010Alex Vakulenko// low-level C APIs in tests by intercepting the virtual function calls on
18aa7d677661213b4116adc5fac88b8c37a1490010Alex Vakulenko// the abstract CurlInterface.
19f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenkoclass MockCurlInterface : public CurlInterface {
20f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko public:
21f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko  MockCurlInterface() = default;
22f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko
23f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko  MOCK_METHOD0(EasyInit, CURL*());
24f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko  MOCK_METHOD1(EasyCleanup, void(CURL*));
25f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko  MOCK_METHOD3(EasySetOptInt, CURLcode(CURL*, CURLoption, int));
26f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko  MOCK_METHOD3(EasySetOptStr, CURLcode(CURL*, CURLoption, const std::string&));
27f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko  MOCK_METHOD3(EasySetOptPtr, CURLcode(CURL*, CURLoption, void*));
28f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko  MOCK_METHOD3(EasySetOptCallback, CURLcode(CURL*, CURLoption, intptr_t));
29f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko  MOCK_METHOD3(EasySetOptOffT, CURLcode(CURL*, CURLoption, curl_off_t));
30f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko  MOCK_METHOD1(EasyPerform, CURLcode(CURL*));
31f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko  MOCK_CONST_METHOD3(EasyGetInfoInt, CURLcode(CURL*, CURLINFO, int*));
32f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko  MOCK_CONST_METHOD3(EasyGetInfoDbl, CURLcode(CURL*, CURLINFO, double*));
33f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko  MOCK_CONST_METHOD3(EasyGetInfoStr, CURLcode(CURL*, CURLINFO, std::string*));
34aa7d677661213b4116adc5fac88b8c37a1490010Alex Vakulenko  MOCK_CONST_METHOD3(EasyGetInfoPtr, CURLcode(CURL*, CURLINFO, void**));
35f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko  MOCK_CONST_METHOD1(EasyStrError, std::string(CURLcode));
36aa7d677661213b4116adc5fac88b8c37a1490010Alex Vakulenko  MOCK_METHOD0(MultiInit, CURLM*());
37aa7d677661213b4116adc5fac88b8c37a1490010Alex Vakulenko  MOCK_METHOD1(MultiCleanup, CURLMcode(CURLM*));
38aa7d677661213b4116adc5fac88b8c37a1490010Alex Vakulenko  MOCK_METHOD2(MultiInfoRead, CURLMsg*(CURLM*, int*));
39aa7d677661213b4116adc5fac88b8c37a1490010Alex Vakulenko  MOCK_METHOD2(MultiAddHandle, CURLMcode(CURLM*, CURL*));
40aa7d677661213b4116adc5fac88b8c37a1490010Alex Vakulenko  MOCK_METHOD2(MultiRemoveHandle, CURLMcode(CURLM*, CURL*));
41aa7d677661213b4116adc5fac88b8c37a1490010Alex Vakulenko  MOCK_METHOD3(MultiSetSocketCallback,
42aa7d677661213b4116adc5fac88b8c37a1490010Alex Vakulenko               CURLMcode(CURLM*, curl_socket_callback, void*));
43aa7d677661213b4116adc5fac88b8c37a1490010Alex Vakulenko  MOCK_METHOD3(MultiSetTimerCallback,
44aa7d677661213b4116adc5fac88b8c37a1490010Alex Vakulenko               CURLMcode(CURLM*, curl_multi_timer_callback, void*));
45aa7d677661213b4116adc5fac88b8c37a1490010Alex Vakulenko  MOCK_METHOD3(MultiAssign, CURLMcode(CURLM*, curl_socket_t, void*));
46aa7d677661213b4116adc5fac88b8c37a1490010Alex Vakulenko  MOCK_METHOD4(MultiSocketAction, CURLMcode(CURLM*, curl_socket_t, int, int*));
47aa7d677661213b4116adc5fac88b8c37a1490010Alex Vakulenko  MOCK_CONST_METHOD1(MultiStrError, std::string(CURLMcode));
48f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko
49f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko private:
50f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko  DISALLOW_COPY_AND_ASSIGN(MockCurlInterface);
51f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko};
52f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko
53f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko}  // namespace http
549ed0cab99f18acb3570a35e9408f24355f6b8324Alex Vakulenko}  // namespace brillo
55f5effe9e46e479e6fdc4f6928da545d48dcd3997Alex Vakulenko
56fed60b0c640828b320f56293c8bebc43fd2b1da8Alex Vakulenko#endif  // LIBBRILLO_BRILLO_HTTP_MOCK_CURL_API_H_
57