datacommsserver/esockserver/test/TE_RConnectionSuite/src/TE_RConnectionCompleteAPICoverage.cpp
changeset 0 dfb7c4ff071f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/datacommsserver/esockserver/test/TE_RConnectionSuite/src/TE_RConnectionCompleteAPICoverage.cpp	Thu Dec 17 09:22:25 2009 +0200
@@ -0,0 +1,808 @@
+// Copyright (c) 2006-2009 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:
+//
+
+
+#include "TE_RConnectionCompleteAPICoverage.h"
+#include <ss_std.h>
+#include <comms-infras/nifprvar.h>
+#include <nifman.h>
+#include <inet6err.h>
+
+/** Test 700
+ *
+ */
+
+/** 
+@SYMTestCaseID TE_RConnection-700
+@SYMTestCaseDesc Test Stop(TSubConnection& aSubConnectionUniqueId) for expected functionality
+ */
+enum TVerdict TE_RConnectionTest700::doTestStepL(void)
+{
+	TInt err;
+
+	RSocketServ ss;
+	err = OpenSocketServer(ss);
+	TESTEL(KErrNone == err, err);
+	CleanupClosePushL(ss);
+
+	//********** connection creation ***********
+
+	RConnection conn;
+	err = OpenConnection(conn, ss);
+	TESTEL(KErrNone == err, err);
+	CleanupClosePushL(conn);
+
+	// start the dummynif (any interface using the compatibility layer will do)
+	err = StartConnectionWithOverrides(conn, iDummyNifIap);
+	TESTEL(KErrNone == err, err);
+
+	
+	TUint subconnectionCount;
+	err = conn.EnumerateSubConnections(subconnectionCount);
+	TESTEL(KErrNone == err, err);
+    // there should only be two subconnection (representing the whole connection and representing the default subconnection)
+	TESTEL(2 == subconnectionCount, subconnectionCount);
+
+	// ensure that it *is* representing the complete connection
+	TPckgBuf<TSubConnectionInfo> subconnectionInfo;
+	err = conn.GetSubConnectionInfo(1, subconnectionInfo);
+	TESTEL(KErrNone == err, err);
+	TSubConnectionUniqueId uniqueId = subconnectionInfo().iSubConnectionUniqueId;
+	TESTEL(uniqueId!= KNifEntireConnectionSubConnectionId, uniqueId);
+
+	// do a normal stop - should fail
+	// identical to:
+	// err = conn.Stop(uniqueId, RConnection::EStopNormal);
+	err = conn.Stop(uniqueId);
+	// doesn't fail because CNifAgentRef throws away the fact that the compatibility layer doesn't support this
+	TESTEL(KErrNone == err, err);
+
+	//********** clean up ***********
+	err = conn.Stop();
+	TESTEL(KErrNone == err, err);
+
+	CloseConnection(conn);
+	CleanupStack::Pop(&conn);
+
+	CloseSocketServer(ss);
+	CleanupStack::Pop(&ss);
+
+	return TestStepResult();
+}
+
+/** Test 701
+ *
+ */
+
+/** 
+@SYMTestCaseID TE_RConnection-701
+@SYMTestCaseDesc Test Stop(TSubConnection& aSubConnectionUniqueId) with invalid subconnection ID
+ */
+enum TVerdict TE_RConnectionTest701::doTestStepL(void)
+{
+	TInt err;
+
+	RSocketServ ss;
+	err = OpenSocketServer(ss);
+	TESTEL(KErrNone == err, err);
+	CleanupClosePushL(ss);
+
+	//********** connection creation ***********
+
+	RConnection conn;
+	err = OpenConnection(conn, ss);
+	TESTEL(KErrNone == err, err);
+	CleanupClosePushL(conn);
+
+	// start the dummynif (any interface using the compatibility layer will do)
+	err = StartConnectionWithOverrides(conn, iDummyNifIap);
+	TESTEL(KErrNone == err, err);
+
+	//********** find out about the subconnection and try to stop it ***********
+
+
+	TUint subconnectionCount;
+	err = conn.EnumerateSubConnections(subconnectionCount);
+	TESTEL(KErrNone == err, err);
+    // there should only be two subconnection (representing the whole connection and representing the default subconnection)
+	TESTEL(2 == subconnectionCount, subconnectionCount);
+
+	// ensure that it *is* representing the complete connection
+	TPckgBuf<TSubConnectionInfo> subconnectionInfo;
+	err = conn.GetSubConnectionInfo(1, subconnectionInfo);
+	TESTEL(KErrNone == err, err);
+	TSubConnectionUniqueId uniqueId = subconnectionInfo().iSubConnectionUniqueId;
+	TESTEL(uniqueId!= KNifEntireConnectionSubConnectionId, uniqueId);
+
+	// do a normal stop - should fail as subconnection Id + MaxNumberConnections doesn't exist
+	err = conn.Stop(uniqueId + MaxConnectionsNumber);
+	
+	// make sure an err is reported
+	TESTEL(KErrNotReady == err, err);
+
+	//********** clean up ***********
+	err = conn.Stop();
+	TESTEL(KErrNone == err, err);
+
+	CloseConnection(conn);
+	CleanupStack::Pop(&conn);
+
+	CloseSocketServer(ss);
+	CleanupStack::Pop(&ss);
+
+	return TestStepResult();
+}
+
+/** Test 702
+ *
+ */
+
+/** 
+@SYMTestCaseID TE_RConnection-702
+@SYMTestCaseDesc Stop a subconnection when the whole connection has already been stopped
+ */
+enum TVerdict TE_RConnectionTest702::doTestStepL(void)
+{
+	TInt err;
+
+	RSocketServ ss;
+	err = OpenSocketServer(ss);
+	TESTEL(KErrNone == err, err);
+	CleanupClosePushL(ss);
+
+	//********** connection creation ***********
+
+	RConnection conn;
+	err = OpenConnection(conn, ss);
+	TESTEL(KErrNone == err, err);
+	CleanupClosePushL(conn);
+
+	// start the dummynif (any interface using the compatibility layer will do)
+	err = StartConnectionWithOverrides(conn, iDummyNifIap);
+	TESTEL(KErrNone == err, err);
+
+	TUint subconnectionCount;
+	err = conn.EnumerateSubConnections(subconnectionCount);
+	TESTEL(KErrNone == err, err);
+    // there should only be two subconnection (representing the whole connection and representing the default subconnection)
+	TESTEL(2 == subconnectionCount, subconnectionCount);
+	// ensure that it *is* representing the complete connection
+	TPckgBuf<TSubConnectionInfo> subconnectionInfo;
+	err = conn.GetSubConnectionInfo(1, subconnectionInfo);
+	TESTEL(KErrNone == err, err);
+	TSubConnectionUniqueId uniqueId = subconnectionInfo().iSubConnectionUniqueId;
+	TESTEL(uniqueId!= KNifEntireConnectionSubConnectionId, uniqueId);
+
+	//********** clean up ***********
+	err = conn.Stop();
+	TESTEL(KErrNone == err, err);
+
+	// do a normal stop - should fail as whole connection has been stopped already
+	// and so subconnection doesn't exist anymore
+	err = conn.Stop(uniqueId);
+	
+	// make sure an err is reported
+	TESTEL(KErrNotReady == err, err);
+
+	CloseConnection(conn);
+	CleanupStack::Pop(&conn);
+
+	CloseSocketServer(ss);
+	CleanupStack::Pop(&ss);
+
+	return TestStepResult();
+}
+
+/** Test 703
+ *
+ */
+
+
+/** 
+@SYMTestCaseID TE_RConnection-703
+@SYMTestCaseDesc Test Progess() call on subconnections, should return KErrNone
+but actually do nothing on the server side as this call isn't supported
+as this is no longer supported
+ */
+enum TVerdict TE_RConnectionTest703::doTestStepL()
+{
+	TInt err;
+	RSocketServ ss;
+	RConnection conn;
+	
+	err = OpenSocketServer(ss);
+	TESTEL(KErrNone == err, err);
+	CleanupClosePushL(ss);
+
+	//********** connection creation ***********
+
+	err = OpenConnection(conn, ss);
+	TESTEL(KErrNone == err, err);
+	CleanupClosePushL(conn);
+
+	// start the test nif
+	err = StartConnectionWithOverrides(conn, iTestNifIap);
+	TESTEL(KErrNone == err, err);
+
+	// should have a single interface
+	TUint connectionCount;
+	err = conn.EnumerateConnections(connectionCount);
+	TESTEL(KErrNone == err, err);
+	TESTEL(1 == connectionCount, connectionCount);
+
+	TPckgBuf<TSubConnectionInfo> subconnectionInfo;
+	err = conn.GetSubConnectionInfo(1, subconnectionInfo);
+	TESTEL(KErrNone == err, err);
+	TSubConnectionUniqueId subConnectionUniqueId = subconnectionInfo().iSubConnectionUniqueId;
+	
+	// Get Progress Info
+	TNifProgress tProg;
+	conn.Progress(subConnectionUniqueId, tProg);
+	TESTEL( tProg.iError == KErrNone, tProg.iError );
+	
+	err = conn.Stop();
+    TESTEL( err == KErrNone, err );
+
+	CloseConnection(conn);
+	CleanupStack::Pop(&conn);
+
+	CloseSocketServer(ss);
+	CleanupStack::Pop(&ss);
+	
+    return TestStepResult();
+}
+
+/** Test 705
+ *
+ */
+ 
+
+/**  
+@SYMTestCaseID TE_RConnection-705
+@SYMTestCaseDesc negative test for non valid subconnectionid being passed to progress()
+ */
+enum TVerdict TE_RConnectionTest705::doTestStepL()
+{
+	TInt err;
+	RSocketServ ss;
+	RConnection conn;
+	
+	err = OpenSocketServer(ss);
+	TESTEL(KErrNone == err, err);
+	CleanupClosePushL(ss);
+
+	//********** connection creation ***********
+
+	err = OpenConnection(conn, ss);
+	TESTEL(KErrNone == err, err);
+	CleanupClosePushL(conn);
+
+	// start the test nif
+	err = StartConnectionWithOverrides(conn, iTestNifIap);
+	TESTEL(KErrNone == err, err);
+
+	// should have a single interface
+	TUint connectionCount;
+	err = conn.EnumerateConnections(connectionCount);
+	TESTEL(KErrNone == err, err);
+	TESTEL(1 == connectionCount, connectionCount);
+
+	TPckgBuf<TSubConnectionInfo> subconnectionInfo;
+	err = conn.GetSubConnectionInfo(1, subconnectionInfo);
+	TESTEL(KErrNone == err, err);
+	TSubConnectionUniqueId subConnectionUniqueId = subconnectionInfo().iSubConnectionUniqueId;
+	
+	// Get Progress Info
+	TNifProgress tProg;
+	err = conn.Progress(subConnectionUniqueId + MaxConnectionsNumber, tProg);
+	TESTEL( err == KErrNotSupported, err);
+
+	err = conn.Stop();
+    TESTEL( err == KErrNone, err );
+
+	CloseConnection(conn);
+	CleanupStack::Pop(&conn);
+
+	CloseSocketServer(ss);
+	CleanupStack::Pop(&ss);
+	
+    return TestStepResult();
+}
+
+/** Test 706
+ *
+ */
+/** 
+@SYMTestCaseID TE_RConnection-706
+@SYMTestCaseDesc Test ProgressNotification() on subconnection
+ */
+enum TVerdict TE_RConnectionTest706::doTestStepL()
+{
+	TInt err;
+	TRequestStatus tStatus;
+	RSocketServ ss;
+	RConnection conn;
+	
+	err = OpenSocketServer(ss);
+	TESTEL(KErrNone == err, err);
+	CleanupClosePushL(ss);
+
+	//********** connection creation ***********
+
+	err = OpenConnection(conn, ss);
+	TESTEL(KErrNone == err, err);
+	CleanupClosePushL(conn);
+
+	// start the test nif
+	err = StartConnectionWithOverrides(conn, iTestNifIap);
+	TESTEL(KErrNone == err, err);
+
+	// should have a single interface
+	TUint connectionCount;
+	err = conn.EnumerateConnections(connectionCount);
+	TESTEL(KErrNone == err, err);
+	TESTEL(1 == connectionCount, connectionCount);
+
+	TPckgBuf<TSubConnectionInfo> subconnectionInfo;
+	err = conn.GetSubConnectionInfo(1, subconnectionInfo);
+	TESTEL(KErrNone == err, err);
+	TSubConnectionUniqueId subConnectionUniqueId = subconnectionInfo().iSubConnectionUniqueId;
+
+	// Set up ProgressNotification()
+	TNifProgressBuf tNifProgressBuf;
+
+	conn.ProgressNotification(subConnectionUniqueId, tNifProgressBuf, tStatus);
+  	
+  	// Force change in state of subConn  	
+	err = RequestSetStausL(conn, ss, subConnectionUniqueId);
+	TESTEL(KErrNone == err, err);
+	  	
+	User::WaitForRequest( tStatus );
+	TInt theVal = tNifProgressBuf().iStage;
+	TESTEL( tStatus.Int() == KErrNotSupported, tStatus.Int() );
+
+	err = conn.Stop();
+    TESTEL( err == KErrNone, err );
+
+	CloseConnection(conn);
+	CleanupStack::Pop(&conn);
+
+	CloseSocketServer(ss);
+	CleanupStack::Pop(&ss);
+	
+    return TestStepResult();
+}
+
+
+/** 
+@SYMTestCaseID TE_RConnection-707
+@SYMTestCaseDesc negative testing ProgressNotification should reset any values set in the 
+TNifProgressBuff. a raised error value on tProg.iError shouldn't still exist after the progress call
+ */
+enum TVerdict TE_RConnectionTest707::doTestStepL()
+{
+	TInt err;
+	TRequestStatus tStatus;
+	RSocketServ ss;
+	RConnection conn;
+	
+	err = OpenSocketServer(ss);
+	TESTEL(KErrNone == err, err);
+	CleanupClosePushL(ss);
+
+	//********** connection creation ***********
+
+	err = OpenConnection(conn, ss);
+	TESTEL(KErrNone == err, err);
+	CleanupClosePushL(conn);
+
+
+	// start the test nif
+	err = StartConnectionWithOverrides(conn, iTestNifIap);
+	TESTEL(KErrNone == err, err);
+
+	// should have a single interface
+	TUint connectionCount;
+	err = conn.EnumerateConnections(connectionCount);
+	TESTEL(KErrNone == err, err);
+	TESTEL(1 == connectionCount, connectionCount);
+
+	TPckgBuf<TSubConnectionInfo> subconnectionInfo;
+	err = conn.GetSubConnectionInfo(1, subconnectionInfo);
+	TESTEL(KErrNone == err, err);
+	TSubConnectionUniqueId subConnectionUniqueId = subconnectionInfo().iSubConnectionUniqueId;
+
+	// try to Set up ProgressNotification() passing in a TNifProgressBuf with
+	// some erronous values to progressnotification
+	TNifProgressBuf tNifProgressBuf;
+	tNifProgressBuf().iError = KErrGeneral;
+  	conn.ProgressNotification(subConnectionUniqueId, tNifProgressBuf, tStatus);
+  	
+  	// Force change in state of subConn  	
+	err = RequestSetStausL(conn, ss, subConnectionUniqueId);
+	TESTEL(KErrNone == err, err);
+  	
+	User::WaitForRequest( tStatus );
+	TInt error = tNifProgressBuf().iError;
+	TESTEL(tNifProgressBuf().iError != KErrCancel, tNifProgressBuf().iError);
+	TESTEL( tStatus.Int() == KErrNotSupported, tStatus.Int() );
+	
+	err = conn.Stop();
+    TESTEL( err == KErrNone, err );
+
+	CloseConnection(conn);
+	CleanupStack::Pop(&conn);
+
+	CloseSocketServer(ss);
+	CleanupStack::Pop(&ss);
+	
+    return TestStepResult();
+}
+
+/** Test 708
+ *
+ */
+
+/** 
+@SYMTestCaseID TE_RConnection-708
+@SYMTestCaseDesc Test ProgressNotification(TSubConnection& aSubConnectionUniqueId...) with invalid subconnection ID
+ */
+enum TVerdict TE_RConnectionTest708::doTestStepL()
+{
+	TInt err;
+	TRequestStatus tStatus;
+	RSocketServ ss;
+	RConnection conn;
+	
+	err = OpenSocketServer(ss);
+	TESTEL(KErrNone == err, err);
+	CleanupClosePushL(ss);
+
+	//********** connection creation ***********
+
+	err = OpenConnection(conn, ss);
+	TESTEL(KErrNone == err, err);
+	CleanupClosePushL(conn);
+
+
+	// start the test nif
+	err = StartConnectionWithOverrides(conn, iTestNifIap);
+	TESTEL(KErrNone == err, err);
+
+	// should have a single interface
+	TUint connectionCount;
+	err = conn.EnumerateConnections(connectionCount);
+	TESTEL(KErrNone == err, err);
+	TESTEL(1 == connectionCount, connectionCount);
+
+	TPckgBuf<TSubConnectionInfo> subconnectionInfo;
+	err = conn.GetSubConnectionInfo(1, subconnectionInfo);
+	TESTEL(KErrNone == err, err);
+	TSubConnectionUniqueId subConnectionUniqueId = subconnectionInfo().iSubConnectionUniqueId;
+
+	// try to Set up ProgressNotification() with invalid subconnectionid
+	TNifProgressBuf tNifProgressBuf;
+	conn.ProgressNotification(subConnectionUniqueId + MaxConnectionsNumber, tNifProgressBuf, tStatus);
+  	
+	User::WaitForRequest( tStatus );
+	TESTEL( tStatus.Int() == KErrNotSupported, tStatus.Int() );
+
+	err = conn.Stop();
+    TESTEL( err == KErrNone, err );
+
+	CloseConnection(conn);
+	CleanupStack::Pop(&conn);
+
+	CloseSocketServer(ss);
+	CleanupStack::Pop(&ss);
+	
+    return TestStepResult();
+}
+
+/** Test 709
+ *
+ */
+/**
+@SYMTestCaseID TE_RConnection-709
+@SYMTestCaseDesc Test CancelProgressNotification()
+ */
+enum TVerdict TE_RConnectionTest709::doTestStepL()
+{
+	TInt err;
+	TRequestStatus tStatus;
+	RSocketServ ss;
+	RConnection conn;
+	
+	err = OpenSocketServer(ss);
+	TESTEL(KErrNone == err, err);
+	CleanupClosePushL(ss);
+
+	//********** connection creation ***********
+	err = OpenConnection(conn, ss);
+	TESTEL(KErrNone == err, err);
+	CleanupClosePushL(conn);
+
+	// start the test nif
+	err = StartConnectionWithOverrides(conn, iTestNifIap);
+	TESTEL(KErrNone == err, err);
+
+	// should have a single interface
+	TUint connectionCount;
+	err = conn.EnumerateConnections(connectionCount);
+	TESTEL(KErrNone == err, err);
+	TESTEL(1 == connectionCount, connectionCount);
+
+	TPckgBuf<TSubConnectionInfo> subconnectionInfo;
+	err = conn.GetSubConnectionInfo(1, subconnectionInfo);
+	TESTEL(KErrNone == err, err);
+	TSubConnectionUniqueId subConnectionUniqueId = subconnectionInfo().iSubConnectionUniqueId;
+
+	// Test ProgressNotification()
+	TNifProgressBuf tNifProgressBuf;
+  	conn.ProgressNotification(subConnectionUniqueId, tNifProgressBuf, tStatus, KStartingSelection );
+    
+    // Force change in state of subConn  	
+	err = RequestSetStausL(conn, ss, subConnectionUniqueId);
+	TESTEL(KErrNone == err, err);
+    
+    conn.CancelProgressNotification(subConnectionUniqueId);
+    
+	User::WaitForRequest( tStatus );
+	TESTEL(KErrNotSupported == tStatus.Int(), tStatus.Int());
+
+	err = conn.Stop();
+    TESTEL( err == KErrNone, err );
+
+	CloseConnection(conn);
+	CleanupStack::Pop(&conn);
+
+	CloseSocketServer(ss);
+	CleanupStack::Pop(&ss);
+	
+    return TestStepResult();
+}
+
+/** Test 710
+ *
+ */
+
+/** 
+@SYMTestCaseID TE_RConnection-710
+@SYMTestCaseDesc Test CancelProgressNotification() with invalid subconnectionId
+shouldn't panic the system
+ */
+enum TVerdict TE_RConnectionTest710::doTestStepL()
+{
+	TInt err;
+	RSocketServ ss;
+	RConnection conn;
+	
+	err = OpenSocketServer(ss);
+	TESTEL(KErrNone == err, err);
+	CleanupClosePushL(ss);
+
+	//********** connection creation ***********
+	err = OpenConnection(conn, ss);
+	TESTEL(KErrNone == err, err);
+	CleanupClosePushL(conn);
+
+	// start the test nif
+	err = StartConnectionWithOverrides(conn, iTestNifIap);
+	TESTEL(KErrNone == err, err);
+
+	// should have a single interface
+	TUint connectionCount;
+	err = conn.EnumerateConnections(connectionCount);
+	TESTEL(KErrNone == err, err);
+	TESTEL(1 == connectionCount, connectionCount);
+
+	TPckgBuf<TSubConnectionInfo> subconnectionInfo;
+	err = conn.GetSubConnectionInfo(1, subconnectionInfo);
+	TESTEL(KErrNone == err, err);
+	TSubConnectionUniqueId subConnectionUniqueId = subconnectionInfo().iSubConnectionUniqueId;
+   
+   	// try to cancel invalid subconnectionId
+   	// should be a recoverable operation
+	conn.CancelProgressNotification(subConnectionUniqueId + MaxConnectionsNumber);
+    
+   	err = conn.Stop();
+    TESTEL( err == KErrNone, err );
+
+	CloseConnection(conn);
+	CleanupStack::Pop(&conn);
+
+	CloseSocketServer(ss);
+	CleanupStack::Pop(&ss);
+	
+    return TestStepResult();
+}
+
+/** Test 711
+ *
+ */
+/**
+@SYMTestCaseID TE_RConnection-711
+@SYMTestCaseDesc Negative testing of WaitForIncoming(RSubConnection&) passing in Null pointer
+ */
+enum TVerdict TE_RConnectionTest711::doTestStepL()
+{
+	TInt err;
+	RSocketServ ss;
+	RConnection conn;
+	
+	err = OpenSocketServer(ss);
+	TESTEL(KErrNone == err, err);
+	CleanupClosePushL(ss);
+
+	//********** connection creation ***********
+	err = OpenConnection(conn, ss);
+	TESTEL(KErrNone == err, err);
+	CleanupClosePushL(conn);
+
+	// start the test nif
+	err = StartConnectionWithOverrides(conn, iTestNifIap);
+	TESTEL(KErrNone == err, err);
+
+	// uninstantiated RSubConn reference
+	RSubConnection subConn;
+	
+	// pass in Null subconnection reference to WaitForIncoming
+	err = conn.WaitForIncoming(subConn);
+	TESTEL(KErrNotSupported == err, err);
+
+	err = conn.Stop();
+    TESTEL( err == KErrNone, err );
+
+	// Some error was reported so we're safe
+	CloseConnection(conn);
+	CleanupStack::Pop(&conn);
+
+	CloseSocketServer(ss);
+	CleanupStack::Pop(&ss);
+	
+    return TestStepResult();
+}
+
+/** Test 712
+ *
+ */
+
+
+/** 
+@SYMTestCaseID TE_RConnection-712
+@SYMTestCaseDesc ProgressNotification requesting notification on an specific
+aSelectedProgress stage instead of on any change in subconn status
+ */
+enum TVerdict TE_RConnectionTest712::doTestStepL()
+{
+	TInt err;
+	TRequestStatus tStatus;
+	RSocketServ ss;
+	RConnection conn;
+	
+	err = OpenSocketServer(ss);
+	TESTEL(KErrNone == err, err);
+	CleanupClosePushL(ss);
+
+	//********** connection creation ***********
+
+	err = OpenConnection(conn, ss);
+	TESTEL(KErrNone == err, err);
+	CleanupClosePushL(conn);
+
+	// start the test nif
+	err = StartConnectionWithOverrides(conn, iTestNifIap);
+	TESTEL(KErrNone == err, err);
+
+	// should have a single interface
+	TUint connectionCount;
+	err = conn.EnumerateConnections(connectionCount);
+	TESTEL(KErrNone == err, err);
+	TESTEL(1 == connectionCount, connectionCount);
+
+	TPckgBuf<TSubConnectionInfo> subconnectionInfo;
+	err = conn.GetSubConnectionInfo(1, subconnectionInfo);
+	TESTEL(KErrNone == err, err);
+	TSubConnectionUniqueId subConnectionUniqueId = subconnectionInfo().iSubConnectionUniqueId;
+
+	// Set up ProgressNotification()
+	TNifProgressBuf tNifProgressBuf;
+  	conn.ProgressNotification(subConnectionUniqueId, tNifProgressBuf, tStatus, KFinishedSelection);
+  	
+  	// Force change in state of subConn  	
+	err = RequestSetStausL(conn, ss, subConnectionUniqueId);
+	TESTEL(KErrNone == err, err);
+  	
+	User::WaitForRequest( tStatus );
+	TESTEL( tStatus.Int() == KErrNotSupported, tStatus.Int() );
+
+	err = conn.Stop();
+    TESTEL( err == KErrNone, err );
+
+	CloseConnection(conn);
+	CleanupStack::Pop(&conn);
+
+	CloseSocketServer(ss);
+	CleanupStack::Pop(&ss);
+	
+    return TestStepResult();
+}
+
+/** Test 713
+ *
+ */
+/** 
+@SYMTestCaseID TE_RConnection-713
+@SYMTestCaseDesc Negative testing of ProgressNotification requesting notification on an invalid 
+aSelectedProgress stage 
+ */
+enum TVerdict TE_RConnectionTest713::doTestStepL()
+{
+TInt err;
+	TRequestStatus tStatus;
+	RSocketServ ss;
+	RConnection conn;
+	
+	err = OpenSocketServer(ss);
+	TESTEL(KErrNone == err, err);
+	CleanupClosePushL(ss);
+
+	//********** connection creation ***********
+
+	err = OpenConnection(conn, ss);
+	TESTEL(KErrNone == err, err);
+	CleanupClosePushL(conn);
+
+	// start the test nif
+	err = StartConnectionWithOverrides(conn, iTestNifIap);
+	TESTEL(KErrNone == err, err);
+
+	// should have a single interface
+	TUint connectionCount;
+	err = conn.EnumerateConnections(connectionCount);
+	TESTEL(KErrNone == err, err);
+	TESTEL(1 == connectionCount, connectionCount);
+
+	TPckgBuf<TSubConnectionInfo> subconnectionInfo;
+	err = conn.GetSubConnectionInfo(1, subconnectionInfo);
+	TESTEL(KErrNone == err, err);
+	TSubConnectionUniqueId subConnectionUniqueId = subconnectionInfo().iSubConnectionUniqueId;
+
+	// Set up ProgressNotification()
+	TNifProgressBuf tNifProgressBuf;
+  	conn.ProgressNotification(subConnectionUniqueId, tNifProgressBuf, tStatus, (TUint)-1000);
+  	
+  	// Force change in state of subConn  	
+	err = RequestSetStausL(conn, ss, subConnectionUniqueId);
+	TESTEL(KErrNone == err, err);
+  	
+	User::WaitForRequest( tStatus );
+    TESTEL( tStatus.Int() != KErrNone, tStatus.Int() );
+
+	err = conn.Stop();
+    TESTEL( err == KErrNone, err );
+
+	CloseConnection(conn);
+	CleanupStack::Pop(&conn);
+
+	CloseSocketServer(ss);
+	CleanupStack::Pop(&ss);
+	
+    return TestStepResult();
+}
+
+
+
+