multimediacommsengine/mmcefloorctrlplugin/tsrc/ut_floorctrlplugin/src/UT_CFCSender.cpp
changeset 0 1bce908db942
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/multimediacommsengine/mmcefloorctrlplugin/tsrc/ut_floorctrlplugin/src/UT_CFCSender.cpp	Tue Feb 02 01:04:58 2010 +0200
@@ -0,0 +1,463 @@
+/*
+* Copyright (c) 2004 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:  
+*
+*/
+
+
+
+
+//  CLASS HEADER
+#include "ut_cfcsender.h"
+
+//  EXTERNAL INCLUDES
+#include <digia/eunit/eunitmacros.h>
+
+
+//  INTERNAL INCLUDES
+#include "fcsender.h"
+
+
+const TInt KTimerDelay = 500;
+const TUint KIAPID = 6;
+const TInt KLength = 50;
+const TInt KPort1 = 2000;
+const TInt KPort2 = 3000;
+const TInt KSendBufferLen = 10;
+
+_LIT(KAddr, "127.0.0.1");
+_LIT8(KHello, "hello...testing");
+
+
+#define FC_EUNIT_ASSERT_SPECIFIC_LEAVE( func, val ) \
+{\
+TRAPD( fcUnitTestRetVal, func );\
+if ( val != KErrNoMemory && fcUnitTestRetVal == KErrNoMemory ){\
+	User::Leave( KErrNoMemory );\
+	}\
+else{\
+	EUNIT_ASSERT_EQUALS( fcUnitTestRetVal, val );\
+	}\
+}
+
+#define FC_EUNIT_ASSERT_NO_LEAVE( func ) FC_EUNIT_ASSERT_SPECIFIC_LEAVE( func, KErrNone )
+
+
+#define FC_EUNIT_ASSERT_SPECIFIC_LEAVE( func, val ) \
+{\
+TRAPD( fcUnitTestRetVal, func );\
+if ( val != KErrNoMemory && fcUnitTestRetVal == KErrNoMemory ){\
+	User::Leave( KErrNoMemory );\
+	}\
+else{\
+	EUNIT_ASSERT_EQUALS( fcUnitTestRetVal, val );\
+	}\
+}
+// CONSTRUCTION
+UT_CFCSender* UT_CFCSender::NewL()
+    {
+    UT_CFCSender* self = UT_CFCSender::NewLC(); 
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+UT_CFCSender* UT_CFCSender::NewLC()
+    {
+    UT_CFCSender* self = new( ELeave ) UT_CFCSender();
+    CleanupStack::PushL( self );
+	self->ConstructL(); 
+    return self;
+    }
+
+// Destructor (virtual by CBase)
+UT_CFCSender::~UT_CFCSender()
+    {
+    }
+
+// Default constructor
+UT_CFCSender::UT_CFCSender()
+    {
+    }
+
+// Second phase construct
+void UT_CFCSender::ConstructL()
+    {
+    // The ConstructL from the base class CEUnitTestSuiteClass must be called.
+    // It generates the test case table.
+    CEUnitTestSuiteClass::ConstructL();
+    }
+
+//  METHODS
+
+
+
+void UT_CFCSender::SetupL(  )
+    {
+    iSimplifiedConnect = EFalse;
+    iConnection = CFCConnectionContainer::NewL(*this);
+	User::LeaveIfError( iSocketServ.Connect( KESockDefaultMessageSlots) );
+	iEventCount = 0;    
+	iTimer = CPeriodic::NewL( EPriorityNormal );
+    } 
+
+void UT_CFCSender::Teardown(  )
+    {
+	delete iTimer;
+	iTimer = NULL;
+
+    if (iSender)
+		{
+		iSender->Cancel();
+		}
+	if(iConnection)
+		{
+		iConnection->CloseConnection();
+		}
+	iSocket.Close();
+    delete iSender;
+    iSender = NULL;
+    delete iConnection;
+    iConnection = NULL;
+    iSocketServ.Close();
+    delete iData;
+    iData= NULL;
+    }
+
+void UT_CFCSender::UT_CFCSender_NewLL(  )
+    {
+    iConnection->OpenConnection(KIAPID, iSocketServ  );
+    iSender = CFCSender::NewL(iSocket, *this);
+    iConnection->Cancel(); 
+    iConnection->RunL(); 
+    
+    EUNIT_ASSERT( iErr==0);
+    }
+
+void UT_CFCSender::UT_CFCSender_SendLL(  )
+    {
+  	iConnection->OpenConnection(KIAPID, iSocketServ  );
+	iSender = CFCSender::NewL(iSocket, *this);
+	iConnection->Cancel();
+	iConnection->iStatus = KErrNone;
+    iConnection->RunL();
+        
+    EUNIT_ASSERT( iErr==0);
+
+	iSender->Cancel();
+    iSender->iStatus = KErrNone;
+    iSender->RunL();
+    TInetAddr addr;
+    addr.Input(KAddr);
+    addr.SetPort(KPort2);
+    HBufC8* data = HBufC8::NewLC(KLength);
+	data->Des().Copy(KHello);
+	FC_EUNIT_ASSERT_NO_LEAVE(iSender ->SendL(data, addr));
+	CleanupStack::Pop( data );
+    iSender->Cancel();
+    }
+void UT_CFCSender::UT_CFCSender_SendL2L(  )
+    {
+    // Test when is active.
+    iConnection->OpenConnection(KIAPID, iSocketServ  );
+    iSender = CFCSender::NewL(iSocket, *this);
+
+	iConnection->Cancel(); 
+	iConnection->iStatus = KErrNone;
+    iConnection->RunL(); 
+
+	iSender->Cancel();
+    iSender->iStatus = KErrNone;
+    iSender->RunL();
+	EUNIT_ASSERT( iErr==0 );
+	TInetAddr addr;
+    addr.Input(KAddr);
+    addr.SetPort(KPort2);
+    HBufC8* data = HBufC8::NewLC(KLength);
+	    data->Des().Copy(KHello);
+    FC_EUNIT_ASSERT_NO_LEAVE(iSender ->SendL(data, addr));    
+    CleanupStack::Pop( data );
+
+    iSender->Cancel();
+    iSender->iStatus = KErrNone;
+    iSender->RunL();
+    }
+
+void UT_CFCSender::UT_CFCSender_SendL3L(  )
+    {
+    // Test with active and full buffer
+    iConnection->OpenConnection(KIAPID, iSocketServ  );
+    iSender = CFCSender::NewL(iSocket, *this);
+
+	iConnection->Cancel(); 
+ 	iConnection->iStatus = KErrNone;
+    iConnection->RunL(); 
+    
+    iSender->Cancel();
+    iSender->iStatus = KErrNone;
+    iSender->RunL();
+	EUNIT_ASSERT( iErr==0 );
+    TInetAddr addr;
+    addr.Input(KAddr);
+    addr.SetPort(KPort2);
+    HBufC8* data = HBufC8::NewLC(KLength);
+	    data->Des().Copy(KHello);
+    // fill the send buffer
+    while( iSender->iSendBuffer.Count() < KSendBufferLen )
+        {
+        HBufC8* data2 = HBufC8::NewLC(KLength);
+	    data2->Des().Copy(KHello);
+        iSender->iSendBuffer.AppendL( data2 );      
+        CleanupStack::Pop( data2 );
+        }
+    iSender ->SendL(data, addr); 
+       
+    CleanupStack::Pop( data );
+    HBufC8* data3 = HBufC8::NewLC(KLength);
+	    data3->Des().Copy(KHello);
+	    
+	EUNIT_ASSERT_LEAVE(iSender ->SendL( data3, addr ));    	    
+	CleanupStack::PopAndDestroy( data3 );
+		    
+    iSender->iSendBuffer.ResetAndDestroy();      
+   	iSender->Cancel();
+    iSender->iStatus = KErrNone;
+    iSender->RunL();
+    }
+
+void UT_CFCSender::UT_CFCSender_SendL4L(  )
+    {
+    // Test sending when connection is not started yet, send is queued
+    iSimplifiedConnect = ETrue;
+    iConnection->OpenConnection(KIAPID, iSocketServ  );
+    iSender = CFCSender::NewL(iSocket, *this); 
+    
+    TInetAddr addr;
+    addr.Input(KAddr);
+    addr.SetPort(KPort2);
+    HBufC8* data = HBufC8::NewLC(KLength);
+    data->Des().Copy(KHello);
+    EUNIT_ASSERT_EQUALS( iSender->iSendBuffer.Count(), 0 );
+    FC_EUNIT_ASSERT_NO_LEAVE(iSender ->SendL(data, addr));
+    CleanupStack::Pop( data );
+    EUNIT_ASSERT_EQUALS( iSender->iSendBuffer.Count(), 1 );
+    EUNIT_ASSERT( !iSender->IsActive() );
+    
+    // Connection gets started and sending of queued buffer is activated
+    iConnection->Cancel(); 
+    iConnection->iStatus = KErrNone;
+    iConnection->RunL();
+    EUNIT_ASSERT_EQUALS( iSender->iSendBuffer.Count(), 0 );
+    EUNIT_ASSERT( iSender->IsActive() );
+    }
+void UT_CFCSender::UT_CFCSender_RunErrorL(  )
+    {
+    iSender  = CFCSender::NewL(iSocket, *this);
+	EUNIT_ASSERT( iSender->RunError(KErrNoMemory) == KErrNoMemory);
+	EUNIT_ASSERT( iSender->RunError(KErrBadName) == KErrNone);
+	}
+
+void UT_CFCSender::UT_CFCSender_DoCancelL(  )
+    {
+    iConnection->OpenConnection(KIAPID, iSocketServ  );
+    iSender = CFCSender::NewL(iSocket, *this);
+     
+    iConnection->Cancel(); 
+    iConnection->RunL(); 
+    
+	iSender->DoCancel();
+	EUNIT_ASSERT( iErr==0 );
+	}
+
+void UT_CFCSender::UT_CFCSender_TestRunLL(  )
+	{
+	// KErrNoMemory
+	iSender = CFCSender::NewL(iSocket, *this);
+	iConnection->Cancel(); 
+	iConnection->iStatus = KErrNone;
+    iConnection->RunL(); 
+
+	iSender->Cancel();
+    iSender->iStatus = KErrNoMemory;
+    
+    EUNIT_ASSERT_SPECIFIC_LEAVE( iSender->RunL(), KErrNoMemory );
+ 	iSender->Cancel();
+	}
+
+void UT_CFCSender::UT_CFCSender_TestRunL2L(  )
+	{
+	// data in buffer
+	iConnection->OpenConnection( KIAPID, iSocketServ  );
+	iSender = CFCSender::NewL(iSocket, *this);
+	iConnection->Cancel(); 
+	iConnection->iStatus = KErrNone;
+    iConnection->RunL(); 
+		
+    iSender->Cancel();
+    iSender->iStatus = KErrNone;
+    iSender->RunL();
+        
+	HBufC8* data = HBufC8::NewLC(KLength);
+	data->Des().Copy(KHello);
+    iSender->iSendBuffer.AppendL( data );
+	FC_EUNIT_ASSERT_NO_LEAVE( iSender->RunL() );
+    CleanupStack::Pop( data );
+ 	iSender->Cancel();
+   	
+	}
+
+
+void UT_CFCSender::ReceivedData(HBufC8* aData)
+	{
+	iData=aData;
+	}
+
+void UT_CFCSender::ErrorNotify(TInt aErrCode)
+	{
+	iErr=aErrCode;
+	}
+	
+void UT_CFCSender::ConnectionStarted( TInt aError )
+	{
+	TRAPD(leaveErr ,ConnectionStartedL(aError) );
+	if(leaveErr!=KErrNone)
+		{
+		ErrorNotify( leaveErr);	
+		}
+	iErr=aError;
+	}	
+
+void UT_CFCSender::ConnectionStartedL( TInt aError )
+	{
+	if(aError==KErrNone)
+		{	
+		iSender->ConnectedL();
+		User::LeaveIfError(iSocket.Open(iSocketServ, KAfInet, KSockDatagram,
+								KProtocolInetUdp, iConnection->Connection()) );
+
+		TInetAddr addr;
+		addr.SetAddress(KInetAddrAny);
+		addr.SetPort(KPort1);
+		TInt err = iSocket.Bind(addr);
+		if (err == KErrInUse)
+			{
+			iErr = KErrInUse;
+			}
+		else
+			{
+			iErr = err;
+			}
+		}
+	EUNIT_ASSERT(iErr==0);
+	
+	if ( !iSimplifiedConnect )
+	    {
+        TInetAddr addr2;
+        addr2.Input(KAddr);
+        addr2.SetPort(KPort2);
+        HBufC8* data = HBufC8::NewLC(KLength);
+        data->Des().Copy(KHello);
+        iSender ->SendL(data, addr2);
+        CleanupStack::Pop(data);
+    
+        iConnection->Cancel();
+        iConnection->RunL();
+        iConnection->iStatus = KErrNone;
+        EUNIT_ASSERT(iErr==0);
+	    }
+	
+	}
+
+TInt UT_CFCSender::StopScheduler( TAny* aThis )
+	{
+	UT_CFCSender* self = reinterpret_cast< UT_CFCSender* >( aThis );
+	// set test to pass and stop scheduler
+	self->iCallBackCalled = ETrue;
+	return 0;
+	}
+	
+
+//  TEST TABLE
+
+EUNIT_BEGIN_TEST_TABLE( 
+    UT_CFCSender,
+    "UT_CFCSender",
+    "UNIT" )
+
+EUNIT_TEST(
+    "NewL - test ",
+    "CFCSender",
+    "NewL",
+    "FUNCTIONALITY",
+    SetupL, UT_CFCSender_NewLL, Teardown)
+
+EUNIT_TEST(
+    "SendL - test ",
+    "CFCSender",
+    "SendL",
+    "FUNCTIONALITY",
+    SetupL, UT_CFCSender_SendLL, Teardown)
+
+EUNIT_TEST(
+    "SendL - test 2",
+    "CFCSender",
+    "SendL",
+    "FUNCTIONALITY",
+    SetupL, UT_CFCSender_SendL2L, Teardown)
+
+EUNIT_TEST(
+    "SendL - test 3",
+    "CFCSender",
+    "SendL",
+    "FUNCTIONALITY",
+    SetupL, UT_CFCSender_SendL3L, Teardown)
+
+EUNIT_TEST(
+    "SendL - test 4",
+    "CFCSender",
+    "SendL",
+    "FUNCTIONALITY",
+    SetupL, UT_CFCSender_SendL4L, Teardown)
+    
+EUNIT_TEST(
+    "RunError - test ",
+    "CFCSender",
+    "RunError",
+    "FUNCTIONALITY",
+    SetupL, UT_CFCSender_RunErrorL, Teardown)
+
+EUNIT_TEST(
+    "DoCancel - test ",
+    "CFCSender",
+    "DoCancel",
+    "FUNCTIONALITY",
+    SetupL, UT_CFCSender_DoCancelL, Teardown)
+    
+EUNIT_TEST(
+    "RunL - test ",
+    "CFCSender",
+    "RunL",
+    "FUNCTIONALITY",
+    SetupL, UT_CFCSender_TestRunLL, Teardown)
+
+EUNIT_TEST(
+    "RunL - test 2",
+    "CFCSender",
+    "RunL",
+    "FUNCTIONALITY",
+    SetupL, UT_CFCSender_TestRunL2L, Teardown)
+
+
+EUNIT_END_TEST_TABLE
+
+//  END OF FILE