diff options
Diffstat (limited to 'test/test-platform/TestPlatform.cpp')
-rw-r--r-- | test/test-platform/TestPlatform.cpp | 195 |
1 files changed, 195 insertions, 0 deletions
diff --git a/test/test-platform/TestPlatform.cpp b/test/test-platform/TestPlatform.cpp new file mode 100644 index 0000000..3e6148b --- /dev/null +++ b/test/test-platform/TestPlatform.cpp @@ -0,0 +1,195 @@ +/* <auto_header> + * + * INTEL CONFIDENTIAL + * Copyright 2011 Intel + * Corporation All Rights Reserved. + * + * The source code contained or described herein and all documents related to + * the source code ("Material") are owned by Intel Corporation or its suppliers + * or licensors. Title to the Material remains with Intel Corporation or its + * suppliers and licensors. The Material contains trade secrets and proprietary + * and confidential information of Intel or its suppliers and licensors. The + * Material is protected by worldwide copyright and trade secret laws and + * treaty provisions. No part of the Material may be used, copied, reproduced, + * modified, published, uploaded, posted, transmitted, distributed, or + * disclosed in any way without Intels prior express written permission. + * + * No license under any patent, copyright, trade secret or other intellectual + * property right is granted to or conferred upon you by disclosure or delivery + * of the Materials, either expressly, by implication, inducement, estoppel or + * otherwise. Any license under such intellectual property rights must be + * express and approved by Intel in writing. + * + * AUTHOR: Guillaume Denneulin (guillaumex.denneulin@intel.com) + * CREATED: 2011-11-25 + * UPDATED: 2011-11-25 + * + * + * </auto_header> + */ +#include <strings.h> +#include <iostream> +#include <stdlib.h> +#include <sstream> +#include "TestPlatform.h" +#include "ParameterMgrPlatformConnector.h" +#include "RemoteProcessorServer.h" + +class CParameterMgrPlatformConnectorLogger : public CParameterMgrPlatformConnector::ILogger +{ +public: + CParameterMgrPlatformConnectorLogger() {} + + virtual void log(const string& strLog) { + + cout << strLog << endl; + } +}; + + +CTestPlatform::CTestPlatform(const string& strClass) : + _pParameterMgrPlatformConnector(new CParameterMgrPlatformConnector(strClass)), + _pParameterMgrPlatformConnectorLogger(new CParameterMgrPlatformConnectorLogger) +{ + _pCommandHandler = new CCommandHandler(this); + + // Add command parsers + _pCommandHandler->addCommandParser("createExclusiveSelectionCriterion", &CTestPlatform::createExclusiveSelectionCriterionCommandProcess, 2, "<name> <nbStates>", "Create inclusive selection criterion"); + _pCommandHandler->addCommandParser("createInclusiveSelectionCriterion", &CTestPlatform::createInclusiveSelectionCriterionCommandProcess, 2, "<name> <nbStates>", "Create exclusive selection criterion"); + _pCommandHandler->addCommandParser("start", &CTestPlatform::startParameterMgrCommandProcess, 0, "", "Start ParameterMgr"); + _pCommandHandler->addCommandParser("setCriterionState", &CTestPlatform::setCriterionStateCommandProcess, 2, "<name> <state>", "Set the current state of a selection criterion"); + _pCommandHandler->addCommandParser("applyConfigurations", &CTestPlatform::applyConfigurationsCommandProcess, 0, "", "Apply configurations selected by current selection criteria states"); + + // Create server + _pRemoteProcessorServer = new CRemoteProcessorServer(5001, _pCommandHandler); + + _pParameterMgrPlatformConnector->setLogger(_pParameterMgrPlatformConnectorLogger); +} + +CTestPlatform::~CTestPlatform() +{ + delete _pRemoteProcessorServer; + delete _pCommandHandler; + delete _pParameterMgrPlatformConnectorLogger; + delete _pParameterMgrPlatformConnector; +} + +bool CTestPlatform::load(std::string& strError) +{ + // Start remote processor server + if (!_pRemoteProcessorServer->start()) { + + strError = "Unable to start remote processor server"; + + return false; + } + + return true; +} + +//////////////// Remote command parsers +/// Selection Criterion +CTestPlatform::CCommandHandler::CommandStatus CTestPlatform::createExclusiveSelectionCriterionCommandProcess(const IRemoteCommand& remoteCommand, string& strResult) +{ + return createExclusiveSelectionCriterion(remoteCommand.getArgument(0), strtoul(remoteCommand.getArgument(1).c_str(), NULL, 0), strResult) ? CTestPlatform::CCommandHandler::EDone : CTestPlatform::CCommandHandler::EFailed; +} + +CTestPlatform::CCommandHandler::CommandStatus CTestPlatform::createInclusiveSelectionCriterionCommandProcess(const IRemoteCommand& remoteCommand, string& strResult) +{ + return createInclusiveSelectionCriterion(remoteCommand.getArgument(0), strtoul(remoteCommand.getArgument(1).c_str(), NULL, 0), strResult) ? CTestPlatform::CCommandHandler::EDone : CTestPlatform::CCommandHandler::EFailed; +} + + +CTestPlatform::CCommandHandler::CommandStatus CTestPlatform::startParameterMgrCommandProcess(const IRemoteCommand& remoteCommand, string& strResult) +{ + (void)remoteCommand; + return _pParameterMgrPlatformConnector->start(strResult) ? CTestPlatform::CCommandHandler::EDone : CTestPlatform::CCommandHandler::EFailed; +} + +CTestPlatform::CCommandHandler::CommandStatus CTestPlatform::setCriterionStateCommandProcess(const IRemoteCommand& remoteCommand, string& strResult) +{ + return setCriterionState(remoteCommand.getArgument(0), strtoul(remoteCommand.getArgument(1).c_str(), NULL, 0), strResult) ? CTestPlatform::CCommandHandler::EDone : CTestPlatform::CCommandHandler::EFailed; +} + +CTestPlatform::CCommandHandler::CommandStatus CTestPlatform::applyConfigurationsCommandProcess(const IRemoteCommand& remoteCommand, string& strResult) +{ + (void)remoteCommand; + return _pParameterMgrPlatformConnector->applyConfigurations(strResult) ? CTestPlatform::CCommandHandler::EDone : CTestPlatform::CCommandHandler::EFailed; +} + +//////////////// Remote command handlers +bool CTestPlatform::createExclusiveSelectionCriterion(const string& strName, uint32_t uiNbStates, string& strResult) +{ + ISelectionCriterionTypeInterface* pCriterionType = _pParameterMgrPlatformConnector->createSelectionCriterionType(false); + + uint32_t uistate; + + for (uistate = 0; uistate < uiNbStates; uistate++) { + + ostringstream ostrValue; + + ostrValue << "State_"; + ostrValue << uistate; + + if (!pCriterionType->addValuePair(uistate, ostrValue.str())) { + + strResult = "Unable to add value: " + ostrValue.str(); + + return false; + } + } + + _pParameterMgrPlatformConnector->createSelectionCriterion(strName, pCriterionType); + + return true; +} + +bool CTestPlatform::createInclusiveSelectionCriterion(const string& strName, uint32_t uiNbStates, string& strResult) +{ + ISelectionCriterionTypeInterface* pCriterionType = _pParameterMgrPlatformConnector->createSelectionCriterionType(true); + + if (uiNbStates > 32) { + + strResult = "Maximum number of states for inclusive criterion is 32"; + + return false; + } + + uint32_t uiState; + + for (uiState = 0; uiState < uiNbStates; uiState++) { + + ostringstream ostrValue; + + ostrValue << "State_0x"; + ostrValue << (0x1 << uiState); + + if (!pCriterionType->addValuePair(0x1 << uiState, ostrValue.str())) { + + strResult = "Unable to add value: " + ostrValue.str(); + + return false; + } + } + + _pParameterMgrPlatformConnector->createSelectionCriterion(strName, pCriterionType); + + return true; +} + +bool CTestPlatform::setCriterionState(const string& strName, uint32_t uiState, string& strResult) +{ + ISelectionCriterionInterface* pCriterion = _pParameterMgrPlatformConnector->getSelectionCriterion(strName); + + if (!pCriterion) { + + strResult = "Unable to retrieve selection criterion: " + strName; + + return false; + } + + pCriterion->setCriterionState(uiState); + + return true; +} + |