//////////////////////////////////////////////////////////////////////////////// // (c) Copyright, Ubisoft Entertainment Inc. || Created by Harbour // //////////////////////////////////////////////////////////////////////////////// #include "tests/config.h" #if defined(US_SDK_S2S) #error This file shall not be part of the solution #endif #include "tests/fixture/paramFixture.h" #include "tests/mock/parametersMockHelper.h" #include #include namespace US_NS {; US_DEFINE_TEST(TestParametersUpdateSettingsWebsocketInternal); }; #if !defined(US_DLL) namespace US_NS {; typedef LeakChecker PARAMETERS_UPDATE_SETTINGS_WEBSOCKET_INTERNAL; namespace ParametersUpdateSettingsWebsocketInternal_BF { struct ParamsSettingsWebsocket { bool hasExtraField; bool missingFieldMaxCount; bool hasMissingConnectionPing; bool hasMissingRetryIncrementFactor; bool hasMissingRetryInitialDelay; bool hasMissingRetryRandomDelay; bool hasMissingTimeoutIncrementFactor; bool hasMissingTimeoutInitialDelay; }; const uint32 s_WEBSOCKET_MAX_COUNT = 3; const uint32 s_CONNECTION_PING_INTERVAL_SEC = 20; const uint32 s_WEBSOCKET_RETRY_INITIAL_DELAY_MSEC = 6 * 1000; const uint32 s_WEBSOCKET_RETRY_INCREMENT_FACTOR_MSEC = 7 * 1000; const uint32 s_WEBSOCKET_RETRY_RANDOM_DELAY_MSEC = 8 * 1000; const uint32 s_WEBSOCKET_TIMEOUT_INCREMENT_FACTOR_MSEC = 15u * 1000; const uint32 s_WEBSOCKET_TIMEOUT_INITIAL_DELAY_MSEC = 20u * 1000; Json buildParams(const ParamsSettingsWebsocket& params) { // Ensure the values used in the test are different from the default values used when parsing the params US_ASSERT(s_WEBSOCKET_MAX_COUNT != ParametersSettingsWebsocketInternal::s_DEFAULT_VALUE_MAX_COUNT, "Do not use default value in parsing tests"); US_ASSERT(s_CONNECTION_PING_INTERVAL_SEC != ParametersSettingsWebsocketInternal::s_DEFAULT_VALUE_CONNECTION_PING_INTERVAL_SEC, "Do not use default value in parsing tests"); US_ASSERT(s_WEBSOCKET_RETRY_INCREMENT_FACTOR_MSEC != ParametersSettingsWebsocketInternal::s_DEFAULT_VALUE_RETRY_INCREMENT_FACTOR_MSEC, "Do not use default value in parsing tests"); US_ASSERT(s_WEBSOCKET_RETRY_INITIAL_DELAY_MSEC != ParametersSettingsWebsocketInternal::s_DEFAULT_VALUE_RETRY_INITIAL_DELAY_MSEC, "Do not use default value in parsing tests"); US_ASSERT(s_WEBSOCKET_RETRY_RANDOM_DELAY_MSEC != ParametersSettingsWebsocketInternal::s_DEFAULT_VALUE_RETRY_RANDOM_DELAY_MSEC, "Do not use default value in parsing tests"); US_ASSERT(s_WEBSOCKET_TIMEOUT_INCREMENT_FACTOR_MSEC != ParametersSettingsWebsocketInternal::s_DEFAULT_VALUE_TIMEOUT_INCREMENT_FACTOR_MSEC, "Do not use default value in parsing tests"); US_ASSERT(s_WEBSOCKET_TIMEOUT_INITIAL_DELAY_MSEC != ParametersSettingsWebsocketInternal::s_DEFAULT_VALUE_TIMEOUT_INITIAL_DELAY_MSEC, "Do not use default value in parsing tests"); JsonWriter websocketParamJson; if (params.hasExtraField) { websocketParamJson["extraField"] = "extraValue"; } if (!params.missingFieldMaxCount) { websocketParamJson[ParametersSettingsWebsocketInternal::s_FIELD_NAME_MAX_COUNT] = s_WEBSOCKET_MAX_COUNT; } if (!params.hasMissingConnectionPing) { websocketParamJson[ParametersSettingsWebsocketInternal::s_FIELD_NAME_CONNECTION_PING_INTERVAL_SEC] = s_CONNECTION_PING_INTERVAL_SEC; } if (!params.hasMissingRetryIncrementFactor) { websocketParamJson[ParametersSettingsWebsocketInternal::s_FIELD_NAME_RETRY_INCREMENT_FACTOR_MSEC] = s_WEBSOCKET_RETRY_INCREMENT_FACTOR_MSEC; } if (!params.hasMissingRetryInitialDelay) { websocketParamJson[ParametersSettingsWebsocketInternal::s_FIELD_NAME_RETRY_INITIAL_DELAY_MSEC] = s_WEBSOCKET_RETRY_INITIAL_DELAY_MSEC; } if (!params.hasMissingRetryRandomDelay) { websocketParamJson[ParametersSettingsWebsocketInternal::s_FIELD_NAME_RETRY_RANDOM_DELAY_MSEC] = s_WEBSOCKET_RETRY_RANDOM_DELAY_MSEC; } if (!params.hasMissingTimeoutIncrementFactor) { websocketParamJson[ParametersSettingsWebsocketInternal::s_FIELD_NAME_TIMEOUT_INCREMENT_FACTOR_MSEC] = s_WEBSOCKET_TIMEOUT_INCREMENT_FACTOR_MSEC; } if (!params.hasMissingTimeoutInitialDelay) { websocketParamJson[ParametersSettingsWebsocketInternal::s_FIELD_NAME_TIMEOUT_INITIAL_DELAY_MSEC] = s_WEBSOCKET_TIMEOUT_INITIAL_DELAY_MSEC; } return websocketParamJson.getJson(); } void checkParams(const ParametersInfo& parametersInfo, const ParamsSettingsWebsocket& websocketParams) { #if !defined(US_SDK_S2S) if (websocketParams.missingFieldMaxCount) { EXPECT_EQ(ParametersSettingsWebsocketInternal::s_DEFAULT_VALUE_MAX_COUNT, parametersInfo.m_paramsSettingsWebsocketInternal.m_maxCount); } else { EXPECT_EQ(s_WEBSOCKET_MAX_COUNT, parametersInfo.m_paramsSettingsWebsocketInternal.m_maxCount); } if (websocketParams.hasMissingConnectionPing) { EXPECT_EQ(ParametersSettingsWebsocketInternal::s_DEFAULT_VALUE_CONNECTION_PING_INTERVAL_SEC, parametersInfo.m_paramsSettingsWebsocketInternal.m_connectionPingIntervalSec); } else { EXPECT_EQ(s_CONNECTION_PING_INTERVAL_SEC, parametersInfo.m_paramsSettingsWebsocketInternal.m_connectionPingIntervalSec); } if (websocketParams.hasMissingRetryIncrementFactor) { EXPECT_EQ(ParametersSettingsWebsocketInternal::s_DEFAULT_VALUE_RETRY_INCREMENT_FACTOR_MSEC, parametersInfo.m_paramsSettingsWebsocketInternal.m_retryIncrementFactorMsec.getCount()); } else { EXPECT_EQ(s_WEBSOCKET_RETRY_INCREMENT_FACTOR_MSEC, parametersInfo.m_paramsSettingsWebsocketInternal.m_retryIncrementFactorMsec.getCount()); } if (websocketParams.hasMissingRetryInitialDelay) { EXPECT_EQ(ParametersSettingsWebsocketInternal::s_DEFAULT_VALUE_RETRY_INITIAL_DELAY_MSEC, parametersInfo.m_paramsSettingsWebsocketInternal.m_retryInitialDelayMsec.getCount()); } else { EXPECT_EQ(s_WEBSOCKET_RETRY_INITIAL_DELAY_MSEC, parametersInfo.m_paramsSettingsWebsocketInternal.m_retryInitialDelayMsec.getCount()); } if (websocketParams.hasMissingRetryRandomDelay) { EXPECT_EQ(ParametersSettingsWebsocketInternal::s_DEFAULT_VALUE_RETRY_RANDOM_DELAY_MSEC, parametersInfo.m_paramsSettingsWebsocketInternal.m_retryRandomDelayMsec.getCount()); } else { EXPECT_EQ(s_WEBSOCKET_RETRY_RANDOM_DELAY_MSEC, parametersInfo.m_paramsSettingsWebsocketInternal.m_retryRandomDelayMsec.getCount()); } if (websocketParams.hasMissingTimeoutIncrementFactor) { EXPECT_EQ(ParametersSettingsWebsocketInternal::s_DEFAULT_VALUE_TIMEOUT_INCREMENT_FACTOR_MSEC, parametersInfo.m_paramsSettingsWebsocketInternal.m_timeoutIncrementFactorMsec.getCount()); } else { EXPECT_EQ(s_WEBSOCKET_TIMEOUT_INCREMENT_FACTOR_MSEC, parametersInfo.m_paramsSettingsWebsocketInternal.m_timeoutIncrementFactorMsec.getCount()); } if (websocketParams.hasMissingTimeoutInitialDelay) { EXPECT_EQ(ParametersSettingsWebsocketInternal::s_DEFAULT_VALUE_TIMEOUT_INITIAL_DELAY_MSEC, parametersInfo.m_paramsSettingsWebsocketInternal.m_timeoutInitialDelayMsec.getCount()); } else { EXPECT_EQ(s_WEBSOCKET_TIMEOUT_INITIAL_DELAY_MSEC, parametersInfo.m_paramsSettingsWebsocketInternal.m_timeoutInitialDelayMsec.getCount()); } #else US_UNUSED(parametersInfo); US_UNUSED(websocketParams); #endif } class ParametersSpaceSettingsWebsocketInternal : public ParametersSpaceMockHelper { public: ParametersSpaceSettingsWebsocketInternal(const ParamsSettingsWebsocket& websocketParams) : m_websocketParams(websocketParams) { } private: Json buildParameterGroupSettingsWebsocketInternal() const override { Json fields(buildParams(m_websocketParams)); return renderParameterGroup(fields); } const ParamsSettingsWebsocket m_websocketParams; }; } typedef ParamFixture PARAMETERS_UPDATE_SETTINGS_WEBSOCKET_INTERNAL_FIXTURE; INSTANTIATE_TEST_CASE_P(ParamsSettingsWebsocket, PARAMETERS_UPDATE_SETTINGS_WEBSOCKET_INTERNAL_FIXTURE, ::testing::Values( ParametersUpdateSettingsWebsocketInternal_BF::ParamsSettingsWebsocket{ true, false, false, false, false, false, false, false }, // Local_CheckInternalParametersSettingsWebsocketExtraField ParametersUpdateSettingsWebsocketInternal_BF::ParamsSettingsWebsocket{ false, true, false, false, false, false, false, false }, // Local_CheckInternalParametersSettingsWebsocketMissingMaxCount ParametersUpdateSettingsWebsocketInternal_BF::ParamsSettingsWebsocket{ false, false, true, false, false, false, false, false }, // Local_CheckInternalParametersSettingsWebsocketRetryConnectionPing ParametersUpdateSettingsWebsocketInternal_BF::ParamsSettingsWebsocket{ false, false, false, true, false, false, false, false }, // Local_CheckInternalParametersSettingsWebsocketRetryIncrementFactor ParametersUpdateSettingsWebsocketInternal_BF::ParamsSettingsWebsocket{ false, false, false, false, true, false, false, false }, // Local_CheckInternalParametersSettingsWebsocketRetryInitialDelay ParametersUpdateSettingsWebsocketInternal_BF::ParamsSettingsWebsocket{ false, false, false, false, false, true, false, false }, // Local_CheckInternalParametersSettingsWebsocketRetryRandomDelay ParametersUpdateSettingsWebsocketInternal_BF::ParamsSettingsWebsocket{ false, false, false, false, false, false, true, false }, // Local_CheckInternalParametersSettingsWebsocketTimeoutIncrementFactor ParametersUpdateSettingsWebsocketInternal_BF::ParamsSettingsWebsocket{ false, false, false, false, false, false, false, true } // Local_CheckInternalParametersSettingsWebsocketTimeoutInitialDelay )); /// @test Validates the parsing of parameter settings websocket internal TEST_P(PARAMETERS_UPDATE_SETTINGS_WEBSOCKET_INTERNAL_FIXTURE, LOCAL_CheckParametersUpdateSettingsWebsocketInternal) { const ParametersUpdateSettingsWebsocketInternal_BF::ParamsSettingsWebsocket& websocketParams = this->getParam(); SAVE_ALLOC_COUNT(testCount); TestParametersInfoHelper parametersHelper; EXPECT_TRUE(parametersHelper.setSpaceSettingsGroups( ParametersUpdateSettingsWebsocketInternal_BF::ParametersSpaceSettingsWebsocketInternal(websocketParams).createParametersResponseMap())); ParametersUpdateSettingsWebsocketInternal_BF::checkParams(parametersHelper.m_info, websocketParams); EXPECT_ALLOC_COUNT_PC_X1_EQ(2158u, 2164, testCount); } }; #endif // US_DLL