135 lines
5.5 KiB
C++
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
|
|
|
|
};
|