natplugins/natpnatfwsdpprovider/tsrc/testconsole/src/nspreleasetest.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Wed, 13 Oct 2010 14:59:15 +0300
branchRCL_3
changeset 59 b0e4b01681c5
parent 0 1bce908db942
permissions -rw-r--r--
Revision: 201039 Kit: 201041

/*
* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "Eclipse Public License v1.0"
* which accompanies this distribution, and is available
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
*
* Initial Contributors:
* Nokia Corporation - initial contribution.
*
* Contributors:
*
* Description:  NAT FW SDP Provider test console release tests impl.
*
*/

#include <e32base.h>
#include <e32cons.h>
#include <centralrepository.h>
#include "nspplugin.h"
#include "nspreleasetest.h"
#include "nsptestconsolesession.h"
#include "nsptestconsolestream.h"
#include "nsptestasyncservice.h"
#include "nsptestconsolemacros.h"

_LIT( KRelease, "Release test" );
_LIT( KNewSession, "NewSession test" );
_LIT( KCreateOffer, "CreateOffer test" );
_LIT( KDecodeAnswer, "DecodeAnswer test" );
_LIT( KResolve, "Resolve test" );
_LIT( KUpdate, "Update test" );

#define PTR_DEL( aPtr ) delete aPtr; aPtr = NULL

// -----------------------------------------------------------------------------
// CNSPReleaseTest::NewL
// -----------------------------------------------------------------------------
// 
CNSPReleaseTest* CNSPReleaseTest::NewL( CNSPPlugin& aApi, CRepository& aRep )
    {
    CNSPReleaseTest* self = CNSPReleaseTest::NewLC( aApi, aRep );
    CleanupStack::Pop( self );
    return self;
    }

// -----------------------------------------------------------------------------
// CNSPReleaseTest::NewLC
// -----------------------------------------------------------------------------
// 
CNSPReleaseTest* CNSPReleaseTest::NewLC( CNSPPlugin& aApi, CRepository& aRep )
    {
    CNSPReleaseTest* self = new ( ELeave ) CNSPReleaseTest;
    CleanupStack::PushL( self );
    self->ConstructL( aApi, aRep );
    return self;
    }

// -----------------------------------------------------------------------------
// CNSPReleaseTest::~CNSPReleaseTest
// -----------------------------------------------------------------------------
// 
CNSPReleaseTest::~CNSPReleaseTest()
    {
    iTestArray.ResetAndDestroy();
    }

// -----------------------------------------------------------------------------
// CNSPReleaseTest::CNSPReleaseTest
// -----------------------------------------------------------------------------
// 
CNSPReleaseTest::CNSPReleaseTest()
	{
	}

// -----------------------------------------------------------------------------
// CNSPReleaseTest::ConstructL
// -----------------------------------------------------------------------------
// 
void CNSPReleaseTest::ConstructL( CNSPPlugin& aApi, CRepository& aRep )
    {
    CNSPTest* test = NULL;
    
    test = CNSPTestNewSession::NewLC( aApi, aRep );
    iTestArray.AppendL( test );
    CleanupStack::Pop( test );
    
    test = CNSPTestCreateOffer::NewLC( aApi, aRep );
    iTestArray.AppendL( test );
    CleanupStack::Pop( test );
    
    test = CNSPTestDecodeAnswer::NewLC( aApi, aRep );
    iTestArray.AppendL( test );
    CleanupStack::Pop( test );
    
    /*
    test = CNSPTestResolve::NewLC( aApi, aRep );
    iTestArray.AppendL( test );
    CleanupStack::Pop( test );
    
	test = CNSPTestUpdate::NewLC( aApi, aRep );
    iTestArray.AppendL( test );
    CleanupStack::Pop( test );
    */
	}

// -----------------------------------------------------------------------------
// CNSPReleaseTest::SetupL
// -----------------------------------------------------------------------------
// 
void CNSPReleaseTest::SetupL()
	{
    iResult.iDescription.Copy( KRelease() );
	}

// -----------------------------------------------------------------------------
// CNSPReleaseTest::Teardown
// -----------------------------------------------------------------------------
// 
void CNSPReleaseTest::Teardown()
	{
	TResult::TState result;
	iResult.iState = TResult::EPass;
	
	for ( TInt i = 0; i < iTestArray.Count(); i++ )
		{
		result = iTestArray[i]->State();
		iResult.iState = ( TResult::EPass != result ?
				 TResult::EFail : iResult.iState );
		}
	}

// -----------------------------------------------------------------------------
// CNSPReleaseTest::ExecuteL
// -----------------------------------------------------------------------------
// 
void CNSPReleaseTest::ExecuteL( CConsoleBase& aConsole )
	{
	for ( TInt i = 0; i < iTestArray.Count(); i++ )
		{
		iTestArray[i]->StartL( aConsole );
		}
	}

// -----------------------------------------------------------------------------
// CNSPReleaseTest::Cancel
// -----------------------------------------------------------------------------
//
void CNSPReleaseTest::Cancel()
	{
	for ( TInt i = 0; i < iTestArray.Count(); i++ )
		{
		iTestArray[i]->Cancel();
		}
	}

// -----------------------------------------------------------------------------
// CNSPReleaseTest::CNSPTestNewSession::AcceptL
// -----------------------------------------------------------------------------
// 
void CNSPReleaseTest::AcceptL( MNSPTestVisitor& aVisitor )
	{
	aVisitor.VisitL( *this );
	
	for ( TInt i = 0; i < iTestArray.Count(); i++ )
		{
		iTestArray[i]->AcceptL( aVisitor );
		}
	}

// -----------------------------------------------------------------------------
// CNSPReleaseTest::CNSPTestNewSession::NewLC
// -----------------------------------------------------------------------------
// 
CNSPReleaseTest::CNSPTestNewSession* CNSPReleaseTest::CNSPTestNewSession::NewLC(
		CNSPPlugin& aApi, CRepository& aRep )
	{
	CNSPReleaseTest::CNSPTestNewSession* self =
			new ( ELeave ) CNSPReleaseTest::CNSPTestNewSession( aApi, aRep );
	CleanupStack::PushL( self );
	self->ConstructL();
	return self;
	}

// -----------------------------------------------------------------------------
// CNSPReleaseTest::CNSPTestNewSession::ConstructL
// -----------------------------------------------------------------------------
// 
CNSPReleaseTest::CNSPTestNewSession::CNSPTestNewSession( CNSPPlugin& aApi, CRepository& aRep )
	: iApi( aApi ),
	  iRep( aRep )
	{
	}

// -----------------------------------------------------------------------------
// CNSPReleaseTest::CNSPTestNewSession::ConstructL
// -----------------------------------------------------------------------------
// 
void CNSPReleaseTest::CNSPTestNewSession::ConstructL()
	{
	iAsyncService = CNSPTestAsyncService::NewL( iTimerStatus );
	}

// -----------------------------------------------------------------------------
// CNSPReleaseTest::CNSPTestNewSession::CNSPTestNewSession
// -----------------------------------------------------------------------------
// 
CNSPReleaseTest::CNSPTestNewSession::~CNSPTestNewSession()
	{
	PTR_DEL( iAsyncService );
	}

// -----------------------------------------------------------------------------
// CNSPReleaseTest::CNSPTestNewSession::SetupL
// -----------------------------------------------------------------------------
// 
void CNSPReleaseTest::CNSPTestNewSession::SetupL()
	{
	iResult.iDescription.Copy( KNewSession() );
	}

// -----------------------------------------------------------------------------
// CNSPReleaseTest::CNSPTestNewSession::Teardown
// -----------------------------------------------------------------------------
// 
void CNSPReleaseTest::CNSPTestNewSession::Teardown()
	{
	PTR_DEL( iSession );
	}

// -----------------------------------------------------------------------------
// CNSPReleaseTest::CNSPTestNewSession::ExecuteL
// -----------------------------------------------------------------------------
// 
void CNSPReleaseTest::CNSPTestNewSession::ExecuteL( CConsoleBase& aConsole )
	{
	PTR_DEL( iSession );
	iSession = CNSPTestConsoleSession::NewL( iApi, iRep, *iAsyncService );
	WAIT( aConsole, "INITIALIZED" );
	iAsyncService->StartScheduler(); // BLOCKING until callback(Initialized)
	COMPLETED_L( aConsole, "INITIALIZED",  iTimerStatus );
	__ASSERT( CNSPTestConsoleSession::EIdle == iSession->State() );
	}

// -----------------------------------------------------------------------------
// CNSPReleaseTest::CNSPTestNewSession::Cancel
// -----------------------------------------------------------------------------
// 
void CNSPReleaseTest::CNSPTestNewSession::Cancel()
	{
	iAsyncService->Cancel();
	}

// -----------------------------------------------------------------------------
// CNSPReleaseTest::CNSPTestCreateOffer::NewLC
// -----------------------------------------------------------------------------
// 
CNSPReleaseTest::CNSPTestCreateOffer* CNSPReleaseTest::CNSPTestCreateOffer::NewLC(
		CNSPPlugin& aApi, CRepository& aRep )
	{
	CNSPReleaseTest::CNSPTestCreateOffer* self =
			new ( ELeave ) CNSPReleaseTest::CNSPTestCreateOffer( aApi, aRep );
	CleanupStack::PushL( self );
	self->ConstructL();
	return self;
	}

// -----------------------------------------------------------------------------
// CNSPReleaseTest::CNSPTestCreateOffer::ConstructL
// -----------------------------------------------------------------------------
// 
CNSPReleaseTest::CNSPTestCreateOffer::CNSPTestCreateOffer( CNSPPlugin& aApi, CRepository& aRep )
	: CNSPTestNewSession( aApi, aRep )
	{
	}

// -----------------------------------------------------------------------------
// CNSPReleaseTest::CNSPTestCreateOffer::ConstructL
// -----------------------------------------------------------------------------
// 
void CNSPReleaseTest::CNSPTestCreateOffer::ConstructL()
	{
	CNSPTestNewSession::ConstructL();
	}

// -----------------------------------------------------------------------------
// CNSPReleaseTest::CNSPTestNewSession::CNSPTestCreateOffer
// -----------------------------------------------------------------------------
// 
CNSPReleaseTest::CNSPTestCreateOffer::~CNSPTestCreateOffer()
	{
	}

// -----------------------------------------------------------------------------
// CNSPReleaseTest::CNSPTestCreateOffer::SetupL
// -----------------------------------------------------------------------------
// 
void CNSPReleaseTest::CNSPTestCreateOffer::SetupL()
	{
	iResult.iDescription.Copy( KCreateOffer() );
	}

// -----------------------------------------------------------------------------
// CNSPReleaseTest::CNSPTestCreateOffer::Teardown
// -----------------------------------------------------------------------------
// 
void CNSPReleaseTest::CNSPTestCreateOffer::Teardown()
	{
	PTR_DEL( iSession );
	}

// -----------------------------------------------------------------------------
// CNSPReleaseTest::CNSPTestCreateOffer::ExecuteL
// -----------------------------------------------------------------------------
// 
void CNSPReleaseTest::CNSPTestCreateOffer::ExecuteL( CConsoleBase& aConsole )
	{
	CNSPTestNewSession::ExecuteL( aConsole ); // BLOCKING until callback.(Initialized)
	
	CTestConsoleStream* outStream = CTestConsoleStream::NewL();
	iSession->StoreOutStream( outStream ); // ownership changed.
	TNatReturnStatus status = iSession->CreateOfferL( *outStream );
	
	if ( KNatAsync == status )
		{
		__ASSERT( CNSPTestConsoleSession::ECreateOffer == iSession->State() );
		WAIT( aConsole, "OFFER READY" );
		iAsyncService->StartScheduler(); // BLOCKING until callback(OfferReady)
		COMPLETED_L( aConsole, "OFFER READY",  iTimerStatus );
		}
	
	__ASSERT( CNSPTestConsoleSession::EIdle == iSession->State() );
	}

// -----------------------------------------------------------------------------
// CNSPReleaseTest::CNSPTestCreateOffer::NewLC
// -----------------------------------------------------------------------------
// 
CNSPReleaseTest::CNSPTestDecodeAnswer* CNSPReleaseTest::CNSPTestDecodeAnswer::NewLC(
		CNSPPlugin& aApi, CRepository& aRep )
	{
	CNSPReleaseTest::CNSPTestDecodeAnswer* self =
			new ( ELeave ) CNSPReleaseTest::CNSPTestDecodeAnswer( aApi, aRep );
	CleanupStack::PushL( self );
	self->ConstructL();
	return self;
	}

// -----------------------------------------------------------------------------
// CNSPReleaseTest::CNSPTestDecodeAnswer::CNSPTestDecodeAnswer
// -----------------------------------------------------------------------------
// 
CNSPReleaseTest::CNSPTestDecodeAnswer::CNSPTestDecodeAnswer( CNSPPlugin& aApi, CRepository& aRep )
	: CNSPTestCreateOffer( aApi, aRep )
	{
	}

// -----------------------------------------------------------------------------
// CNSPReleaseTest::CNSPTestDecodeAnswer::ConstructL
// -----------------------------------------------------------------------------
// 
void CNSPReleaseTest::CNSPTestDecodeAnswer::ConstructL()
	{
	CNSPTestCreateOffer::ConstructL();
	}

// -----------------------------------------------------------------------------
// CNSPReleaseTest::CNSPTestDecodeAnswer::CNSPTestDecodeAnswer
// -----------------------------------------------------------------------------
// 
CNSPReleaseTest::CNSPTestDecodeAnswer::~CNSPTestDecodeAnswer()
	{
	}

// -----------------------------------------------------------------------------
// CNSPReleaseTest::CNSPTestDecodeAnswer::SetupL
// -----------------------------------------------------------------------------
// 
void CNSPReleaseTest::CNSPTestDecodeAnswer::SetupL()
	{
	iResult.iDescription.Copy( KDecodeAnswer() );
	}

// -----------------------------------------------------------------------------
// CNSPReleaseTest::CNSPTestDecodeAnswer::Teardown
// -----------------------------------------------------------------------------
// 
void CNSPReleaseTest::CNSPTestDecodeAnswer::Teardown()
	{
	PTR_DEL( iSession );
	}

// -----------------------------------------------------------------------------
// CNSPReleaseTest::CNSPTestDecodeAnswer::ExecuteL
// -----------------------------------------------------------------------------
// 
void CNSPReleaseTest::CNSPTestDecodeAnswer::ExecuteL( CConsoleBase& aConsole )
	{
	CNSPTestCreateOffer::ExecuteL( aConsole ); // BLOCKING until callback.(OfferReady)
	
	CTestConsoleStream* inStream = CTestConsoleStream::NewL();
	iSession->StoreInStream( inStream ); // ownership changed.
	TNatReturnStatus status = iSession->DecodeAnswerL( *inStream );
	
	if ( KNatAsync == status )
		{
		__ASSERT( CNSPTestConsoleSession::EDecodeAnswer == iSession->State() );
		WAIT( aConsole, "ANSWER READY" );
		iAsyncService->StartScheduler(); // BLOCKING until callback(AnswerReady)
		COMPLETED_L( aConsole, "ANSWER READY",  iTimerStatus );
		}
	
	__ASSERT( CNSPTestConsoleSession::EIdle == iSession->State() );
	}

// -----------------------------------------------------------------------------
// CNSPReleaseTest::CNSPTestResolve::NewLC
// -----------------------------------------------------------------------------
// 
CNSPReleaseTest::CNSPTestResolve* CNSPReleaseTest::CNSPTestResolve::NewLC(
		CNSPPlugin& aApi, CRepository& aRep )
	{
	CNSPReleaseTest::CNSPTestResolve* self =
	new ( ELeave ) CNSPReleaseTest::CNSPTestResolve( aApi, aRep );
	CleanupStack::PushL( self );
	self->ConstructL();
	return self;
	}

// -----------------------------------------------------------------------------
// CNSPReleaseTest::CNSPTestResolve::CNSPTestResolve
// -----------------------------------------------------------------------------
// 
CNSPReleaseTest::CNSPTestResolve::CNSPTestResolve( CNSPPlugin& aApi, CRepository& aRep )
	: CNSPTestNewSession( aApi, aRep )
	{
	}

// -----------------------------------------------------------------------------
// CNSPReleaseTest::CNSPTestResolve::ConstructL
// -----------------------------------------------------------------------------
// 
void CNSPReleaseTest::CNSPTestResolve::ConstructL()
	{
	CNSPTestNewSession::ConstructL();
	}


// -----------------------------------------------------------------------------
// CNSPReleaseTest::CNSPTestResolve::~CNSPTestResolve
// -----------------------------------------------------------------------------
// 
CNSPReleaseTest::CNSPTestResolve::~CNSPTestResolve()
	{
	}

// -----------------------------------------------------------------------------
// CNSPReleaseTest::CNSPTestResolve::SetupL
// -----------------------------------------------------------------------------
// 
void CNSPReleaseTest::CNSPTestResolve::SetupL()
	{
	iResult.iDescription.Copy( KResolve() );
	}

// -----------------------------------------------------------------------------
// CNSPReleaseTest::CNSPTestResolve::Teardown
// -----------------------------------------------------------------------------
// 
void CNSPReleaseTest::CNSPTestResolve::Teardown()
	{
	PTR_DEL( iSession );
	}

// -----------------------------------------------------------------------------
// CNSPReleaseTest::CNSPTestResolve::ExecuteL
// -----------------------------------------------------------------------------
// 
void CNSPReleaseTest::CNSPTestResolve::ExecuteL( CConsoleBase& aConsole )
	{
	CNSPTestNewSession::ExecuteL( aConsole ); // BLOCKING until callback.(Initialized)
	
	CTestConsoleStream* inStream = CTestConsoleStream::NewL();
	iSession->StoreInStream( inStream ); // ownership changed.
	CTestConsoleStream* outStream = CTestConsoleStream::NewL();
	iSession->StoreInStream( outStream ); // ownership changed.
	
	TNatReturnStatus status = iSession->ResolveL( *inStream, *outStream );
	
	if ( KNatAsync == status )
		{
		__ASSERT( CNSPTestConsoleSession::ECreateAnswer == iSession->State() );
		WAIT( aConsole, "ANSWER READY" );
		iAsyncService->StartScheduler(); // BLOCKING until callback(AnswerReady)
		COMPLETED_L( aConsole, "ANSWER READY",  iTimerStatus );
		
		__ASSERT( CNSPTestConsoleSession::EDecodeOffer == iSession->State() );
		WAIT( aConsole, "OFFER READY" );
		iAsyncService->StartScheduler(); // BLOCKING until callback(OfferReady)
		COMPLETED_L( aConsole, "OFFER READY",  iTimerStatus );
		}
	
	__ASSERT( CNSPTestConsoleSession::EIdle == iSession->State() );
	}

// -----------------------------------------------------------------------------
// CNSPReleaseTest::CNSPTestUpdate::NewLC
// -----------------------------------------------------------------------------
// 
CNSPReleaseTest::CNSPTestUpdate* CNSPReleaseTest::CNSPTestUpdate::NewLC(
		CNSPPlugin& aApi, CRepository& aRep )
	{
	CNSPReleaseTest::CNSPTestUpdate* self =
	new ( ELeave ) CNSPReleaseTest::CNSPTestUpdate( aApi, aRep );
	CleanupStack::PushL( self );
	self->ConstructL();
	return self;
	}

// -----------------------------------------------------------------------------
// CNSPReleaseTest::CNSPTestUpdate::CNSPTestUpdate
// -----------------------------------------------------------------------------
// 
CNSPReleaseTest::CNSPTestUpdate::CNSPTestUpdate( CNSPPlugin& aApi, CRepository& aRep )
	: CNSPTestNewSession( aApi, aRep )
	{
	}

// -----------------------------------------------------------------------------
// CNSPReleaseTest::CNSPTestUpdate::ConstructL
// -----------------------------------------------------------------------------
// 
void CNSPReleaseTest::CNSPTestUpdate::ConstructL()
	{
	CNSPTestNewSession::ConstructL();
	}


// -----------------------------------------------------------------------------
// CNSPReleaseTest::CNSPTestUpdate::~CNSPTestUpdate
// -----------------------------------------------------------------------------
// 
CNSPReleaseTest::CNSPTestUpdate::~CNSPTestUpdate()
	{
	}

// -----------------------------------------------------------------------------
// CNSPReleaseTest::CNSPTestUpdate::SetupL
// -----------------------------------------------------------------------------
// 
void CNSPReleaseTest::CNSPTestUpdate::SetupL()
	{
	iResult.iDescription.Copy( KResolve() );
	}

// -----------------------------------------------------------------------------
// CNSPReleaseTest::CNSPTestUpdate::Teardown
// -----------------------------------------------------------------------------
// 
void CNSPReleaseTest::CNSPTestUpdate::Teardown()
	{
	PTR_DEL( iSession );
	}

// -----------------------------------------------------------------------------
// CNSPReleaseTest::CNSPTestUpdate::ExecuteL
// -----------------------------------------------------------------------------
// 
void CNSPReleaseTest::CNSPTestUpdate::ExecuteL( CConsoleBase& aConsole )
	{
	CNSPTestNewSession::ExecuteL( aConsole ); // BLOCKING until callback.(Initialized)
	
	CTestConsoleStream* inStream = CTestConsoleStream::NewL();
	iSession->StoreInStream( inStream ); // ownership changed.
	CTestConsoleStream* outStream = CTestConsoleStream::NewL();
	iSession->StoreInStream( outStream ); // ownership changed.
	
	TNatReturnStatus status = iSession->ResolveL( *inStream, *outStream );
	
	if ( KNatAsync == status )
		{
		__ASSERT( CNSPTestConsoleSession::ECreateAnswer == iSession->State() );
		WAIT( aConsole, "ANSWER READY" );
		iAsyncService->StartScheduler(); // BLOCKING until callback(AnswerReady)
		COMPLETED_L( aConsole, "ANSWER READY",  iTimerStatus );
		
		inStream = CTestConsoleStream::NewL();
		iSession->StoreInStream( inStream ); // ownership changed.
		iSession->UpdateL( *inStream ); // TBD: ASSERT NO LEAVE
		
		__ASSERT( CNSPTestConsoleSession::EDecodeOffer == iSession->State() );
		WAIT( aConsole, "OFFER READY" );
		iAsyncService->StartScheduler(); // BLOCKING until callback(OfferReady)
		COMPLETED_L( aConsole, "OFFER READY",  iTimerStatus );
		}
	
	__ASSERT( CNSPTestConsoleSession::EIdle == iSession->State() );
	}