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