JD2022-TU1/main/extern/UbiServices/custom/testsUnit/http/msApi/testHttpRequestXHR.cpp

135 lines
5.5 KiB
C++

////////////////////////////////////////////////////////////////////////////////
// (c) Copyright, Ubisoft Entertainment Inc. || Created by Harbour //
////////////////////////////////////////////////////////////////////////////////
#include <gtest/gtest.h>
#include <gmock/gmock.h>
#include "tests/common/helpers.h"
#include "tests/fixture/memoryCheckFixture.h"
#include "testsUnit/mock/mockHttpRequest.h"
#include "testsUnit/http/msApi/mockXmlHttpRequest.h"
#include "ubiservices/core/helpers/instancesManager.h"
#include "ubiservices/core/http/httpHeadersHelper.h"
#include "ubiservices/core/http/httpEngine.h"
#include "ubiservices/core/http/msApi/httpRequestXHR.h"
#include "ubiservices/core/http/msApi/httpRequestCallback.h"
#include "ubiservices/services/http/request/httpRequestIncludes.h"
#include "ubiservices/services/parameters/gatewayResources.h"
#include <wrl.h>
namespace US_NS {;
US_DEFINE_TEST(TestHttpRequestXHR);
typedef LeakChecker HTTP_REQUEST_XBOX_ONE;
typedef LeakChecker HTTP_REQUEST_XBOX_ONE_MOCK;
#if !defined(US_DLL)
// Validate header callback, headers are parsed properly and status code is set
TEST_F(HTTP_REQUEST_XBOX_ONE_MOCK, LOCAL_XHRRequestHeadersAvailable)
{
using namespace testing;
using namespace Microsoft::WRL;
HttpRequestContext requestContext = MockHttpRequest_BF::createDummyContext();
ComPtr<MockXmlHttpRequest> mockRequest = US_NEW(MockXmlHttpRequest);
ComPtr<HttpRequestCallback> httpCallback;
HRESULT hr = Microsoft::WRL::Details::MakeAndInitialize<HttpRequestCallback>( &httpCallback );
ASSERT_EQ(S_OK, hr);
const uint32 expectStatusCode = 200;
const String expectStatusCodeStr = "200";
// Headers received in the callback
HttpHeader expectHeader;
expectHeader.addHeaderLine(L"Host: net.tutsplus.com");
expectHeader.addHeaderLine(L"User-Agent: Mozilla/5.0");
expectHeader.addHeaderLine(L"Accept-Language: en-us,en;q=0.5");
expectHeader.addHeaderLine(L"Keep-Alive: 300");
expectHeader.addHeaderLine(L"Content-Length: 50");
expectHeader.addHeaderLine(L"Connection: keep-alive");
const String expectHeaderStr = expectHeader.convertToString();
const StringW expectHeaderStrW = expectHeaderStr.getUtf16();
std::unique_ptr<HttpRequestXHR> xboxRequest(US_NEW(HttpRequestXHR, requestContext, mockRequest, httpCallback));
EXPECT_CALL(*(mockRequest.Get()), GetAllResponseHeaders(_)).WillOnce(DoAll(
MockXmlHttpRequest_BF::SetAllHeaders(expectHeaderStrW.c_str()),
Return(S_OK)));
const StringW expectStatusCodeStrW = expectStatusCodeStr.getUtf16();
httpCallback->OnHeadersAvailable(mockRequest.Get(), expectStatusCode, expectStatusCodeStrW.c_str());
EXPECT_EQ(expectStatusCode, requestContext.getResponseData().m_statusCode);
EXPECT_EQ(expectHeader, requestContext.getResponseData().m_header);
}
// Validate when GetAllResponseHeaders fail everything goes well
TEST_F(HTTP_REQUEST_XBOX_ONE_MOCK, LOCAL_XHRRequestHeadersAvailableError)
{
using namespace testing;
using namespace Microsoft::WRL;
HttpRequestContext requestContext = MockHttpRequest_BF::createDummyContext();
ComPtr<MockXmlHttpRequest> mockRequest = new MockXmlHttpRequest();
ComPtr<HttpRequestCallback> httpCallback;
HRESULT hr = Microsoft::WRL::Details::MakeAndInitialize<HttpRequestCallback>( &httpCallback );
ASSERT_EQ(S_OK, hr);
const uint32 expectStatusCode = 200;
const String expectStatusCodeStr = "200";
std::unique_ptr<HttpRequestXHR> xboxRequest(US_NEW(HttpRequestXHR, requestContext, mockRequest, httpCallback));
EXPECT_CALL(*(mockRequest.Get()), GetAllResponseHeaders(_)).WillOnce(DoAll(
SetArgPointee<0>(nullptr),
Return(S_FALSE)));
const StringW expectStatusCodeStrW = expectStatusCodeStr.getUtf16();
httpCallback->OnHeadersAvailable(mockRequest.Get(), expectStatusCode, expectStatusCodeStrW.c_str());
EXPECT_EQ(expectStatusCode, requestContext.getResponseData().m_statusCode);
EXPECT_EQ(0u, requestContext.getResponseData().m_header.getHeaderCount());
}
// Validate when OnError callback is called
TEST_F(HTTP_REQUEST_XBOX_ONE_MOCK, LOCAL_XHRRequestOnError)
{
using namespace testing;
using namespace Microsoft::WRL;
HttpRequestContext requestContext = MockHttpRequest_BF::createDummyContext();
ComPtr<MockXmlHttpRequest> mockRequest = new MockXmlHttpRequest();
ComPtr<HttpRequestCallback> httpCallback;
HRESULT hr = Microsoft::WRL::Details::MakeAndInitialize<HttpRequestCallback>( &httpCallback );
ASSERT_EQ(S_OK, hr);
std::unique_ptr<HttpRequestXHR> xboxRequest(US_NEW(HttpRequestXHR, requestContext, mockRequest, httpCallback));
httpCallback->OnError(mockRequest.Get(), INET_E_DOWNLOAD_FAILURE);
EXPECT_EQ(0u, requestContext.getResponseData().m_statusCode);
}
// Validate when OnError callback is called with E_ACCESSDENIED that the status code will get set to 401
TEST_F(HTTP_REQUEST_XBOX_ONE_MOCK, LOCAL_XHRRequestOnErrorAccessDenied)
{
using namespace testing;
using namespace Microsoft::WRL;
HttpRequestContext requestContext = MockHttpRequest_BF::createDummyContext();
ComPtr<MockXmlHttpRequest> mockRequest = new MockXmlHttpRequest();
ComPtr<HttpRequestCallback> httpCallback;
HRESULT hr = Microsoft::WRL::Details::MakeAndInitialize<HttpRequestCallback>( &httpCallback );
ASSERT_EQ(S_OK, hr);
std::unique_ptr<HttpRequestXHR> xboxRequest(US_NEW(HttpRequestXHR, requestContext, mockRequest, httpCallback));
httpCallback->OnError(mockRequest.Get(), E_ACCESSDENIED);
EXPECT_EQ(401, requestContext.getResponseData().m_statusCode);
}
#endif
};