void CDispToDispProtoSerializerTest::testDispToDispAuthorizeCommandIsValidFailedOnEmptyPackage()
{
	AUTHORIZE_CMD_PARAMS_DECLARE
	SmartPtr<CVmEvent> _pkg( new CVmEvent );
	CDispToDispCommandPtr pCmd =
		CDispToDispProtoSerializer::ParseCommand(DispToDispAuthorizeCmd, _pkg->toString());
	QVERIFY(!pCmd->IsValid());
	CHECK_AUTHORIZE_CMD_NOT_FAILED_ON_GETTING_NON_PRESENTS_PARAMS
}
void CDispToDispProtoSerializerTest::testParseDispToDispAuthorizeCommand()
{
	AUTHORIZE_CMD_PARAMS_DECLARE
	SmartPtr<CVmEvent> _pkg( new CVmEvent );
	_pkg->addEventParameter(new CVmEventParameter(PVE::String, sUserSessionUuid,
							EVT_PARAM_DISP_TO_DISP_AUTHORIZE_CMD_USER_SESSION_UUID));
	CDispToDispCommandPtr pCmd = CDispToDispProtoSerializer::ParseCommand(DispToDispAuthorizeCmd, _pkg->toString());
	QVERIFY(pCmd->IsValid());
	CDispToDispAuthorizeCommand *pDispToDispAuthorizeCmd =
				CDispToDispProtoSerializer::CastToDispToDispCommand<CDispToDispAuthorizeCommand>(pCmd);
	QCOMPARE(sUserSessionUuid, pDispToDispAuthorizeCmd->GetUserSessionUuid());
}
void CDispToDispProtoSerializerTest::testDispToDispResponseCommandIsValidFailedOnListOfParamsAbsent()
{
	RESPONSE_CMD_PARAMS_DECLARE
	SmartPtr<CVmEvent> _pkg( new CVmEvent );
	_pkg->addEventParameter(new CVmEventParameter(PVE::String, pErrorEvent->toString(),
							EVT_PARAM_DISP_TO_DISP_RESPONSE_CMD_ERROR_INFO));
	_pkg->addEventParameter(new CVmEventParameter(PVE::UnsignedInt, QString("%1").arg(nRequestCmdId),
							EVT_PARAM_DISP_TO_DISP_RESPONSE_CMD_REQUEST_ID));
	CDispToDispCommandPtr pCmd =
		CDispToDispProtoSerializer::ParseCommand(DispToDispResponseCmd, _pkg->toString());
	QVERIFY(!pCmd->IsValid());
	CHECK_RESPONSE_CMD_NOT_FAILED_ON_GETTING_NON_PRESENTS_PARAMS
}
void Task_MigrateCtTarget::handleStartPackage(
		const SmartPtr<CDspDispConnection> &pDispConnection,
		const QString &sVmUuid,
		const SmartPtr<IOPackage> &p)
{
	// ??? LOCK
	// #439777 to protect call handler for destroying object
	WaiterTillHandlerUsingObject::AutoUnlock lock( m_waiter );
	if( !lock.isLocked() )
		return;

	if (operationIsCancelled())
		return;

	/* this function will handle StartMigrateCommand with _original_ Vm uuid */
	if (m_sOriginVmUuid != sVmUuid)
		return;

	CDispToDispCommandPtr pCmd = CDispToDispProtoSerializer::ParseCommand(p);
	if ( !pCmd->IsValid() )
	{
		WRITE_TRACE(DBG_FATAL, "Wrong start migration package was received: [%s]",
			p->buffers[0].getImpl());
		QThread::exit(PRL_ERR_FAILURE);
	}

	CVmMigrateStartCommand *pStartCmd =
		CDispToDispProtoSerializer::CastToDispToDispCommand<CVmMigrateStartCommand>(pCmd);
	if ( NULL == pStartCmd )
	{
		WRITE_TRACE(DBG_FATAL, "Wrong start migration package was received: [%s]",
			p->buffers[0].getImpl());
		QThread::exit(PRL_ERR_FAILURE);
	}
	m_nMigrationFlags = pStartCmd->GetMigrationFlags();
	m_nReservedFlags = pStartCmd->GetReservedFlags();
	m_nBundlePermissions = pStartCmd->GetBundlePermissions();
	m_nConfigPermissions = pStartCmd->GetConfigPermissions();

	/* reassign task to new connection and package and return to main thread */
	SmartPtr<CDspClient> pClient = pDispConnection->getUserSession();
	reassignTask( pClient, p );
	m_pStartDispConnection = pDispConnection;
	/* attn: do not use getRequestPackage() after this - reassignTask() changed type of new package */
	m_pStartPackage = IOPackage::duplicateInstance(p);

	QThread::exit(0);
}
void CDispToDispProtoSerializerTest::testParseDispToDispResponseCommand()
{
	RESPONSE_CMD_PARAMS_DECLARE
	SmartPtr<CVmEvent> _pkg( new CVmEvent );
	_pkg->setEventCode(nRetCode);
	_pkg->addEventParameter(new CVmEventParameter(PVE::String, pErrorEvent->toString(),
							EVT_PARAM_DISP_TO_DISP_RESPONSE_CMD_ERROR_INFO));
	_pkg->addEventParameter(new CVmEventParameter(PVE::UnsignedInt, QString("%1").arg(nRequestCmdId),
							EVT_PARAM_DISP_TO_DISP_RESPONSE_CMD_REQUEST_ID));
	_pkg->addEventParameter(new CVmEventParameterList(PVE::String, QStringList(),
							EVT_PARAM_DISP_TO_DISP_RESPONSE_CMD_PARAMS_LIST));
	CDispToDispCommandPtr pCmd = CDispToDispProtoSerializer::ParseCommand(DispToDispResponseCmd, _pkg->toString());
	QVERIFY(pCmd->IsValid());
	CDispToDispResponseCommand *pDispToDispResponseCmd =
				CDispToDispProtoSerializer::CastToDispToDispCommand<CDispToDispResponseCommand>(pCmd);
	QCOMPARE(pErrorEvent->toString(), pDispToDispResponseCmd->GetErrorInfo()->toString());
	QCOMPARE((quint32)nRequestCmdId, (quint32)pDispToDispResponseCmd->GetRequestCommandId());
	QCOMPARE((quint32)nRetCode, (quint32)pDispToDispResponseCmd->GetRetCode());
}
void CDispToDispProtoSerializerTest::testDispToDispResponseCommandProcessingListOfParams2()
{
	RESPONSE_CMD_PARAMS_DECLARE
	QStringList lstParams;
	lstParams.append(pErrorEvent->toString());
	lstParams.append(pErrorEvent->toString());
	lstParams.append(pErrorEvent->toString());
	CDispToDispCommandPtr pCmd =
		CDispToDispProtoSerializer::CreateDispToDispResponseCommand(
			nRequestCmdId,
			nRetCode,
			pErrorEvent.getImpl(),
			lstParams
		);
	QVERIFY(pCmd->IsValid());
	pCmd = CDispToDispProtoSerializer::ParseCommand(DispToDispResponseCmd, pCmd->GetCommand()->toString());
	CDispToDispResponseCommand *pResponseCmd =
					CDispToDispProtoSerializer::CastToDispToDispCommand<CDispToDispResponseCommand>(pCmd);
	lstParams = pResponseCmd->GetParams();
	QCOMPARE(quint32(lstParams.size()), quint32(3));
	foreach(QString sParam, lstParams)
		QCOMPARE(pErrorEvent->toString(), sParam);
}
void CDispToDispProtoSerializerTest::testCreateDispToDispLogoffCommand()
{
	CDispToDispCommandPtr pCmd =
		CDispToDispProtoSerializer::CreateDispToDispCommandWithoutParams(DispToDispLogoffCmd);
	QVERIFY(pCmd->IsValid());
}