commsfwtools/preparedefaultcommsdatabase/te_commsdat/src/commsdatSnapTests.cpp
changeset 0 dfb7c4ff071f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/commsfwtools/preparedefaultcommsdatabase/te_commsdat/src/commsdatSnapTests.cpp	Thu Dec 17 09:22:25 2009 +0200
@@ -0,0 +1,3917 @@
+// Copyright (c) 2005-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:
+// Example CTestStep derived implementation
+// 
+//
+
+/**
+ @file commsdatSnapTests.cpp
+*/
+#include "commsdatSnapTests.h"
+#include "Te_commsdatSuiteDefs.h"
+#include <e32test.h>
+#include <commsdattypesv1_1_partner.h>
+#include <commsdattypeinfov1_1_internal.h>
+
+#ifdef SYMBIAN_NON_SEAMLESS_NETWORK_BEARER_MOBILITY
+namespace
+	{
+
+TInt GetAPNumberL(const TInt aTierValaue, CommsDat::CMDBSession* aCDSession_vLatest)
+	{
+	CMDBRecordSet<CCDAccessPointRecord>* ipprotoAPs = new(ELeave)CMDBRecordSet<CCDAccessPointRecord>(KCDTIdAccessPointRecord);
+	CleanupStack::PushL(ipprotoAPs);
+	
+	CCDAccessPointRecord* primedIPProtoAP = static_cast<CCDAccessPointRecord*>(CCDRecordBase::RecordFactoryL(KCDTIdAccessPointRecord));
+	CleanupStack::PushL(primedIPProtoAP);
+	
+	primedIPProtoAP->iTier = aTierValaue;
+	
+	ipprotoAPs->iRecords.AppendL(primedIPProtoAP);
+	//the ownership of the primed record is now at the recordset
+	CleanupStack::Pop(primedIPProtoAP);
+	
+	ipprotoAPs->FindL(*aCDSession_vLatest);
+	
+	TInt apNum = ipprotoAPs->iRecords.Count();
+	
+	CleanupStack::PopAndDestroy(ipprotoAPs);
+	
+	return apNum;
+	}
+
+	}
+#endif // SYMBIAN_NON_SEAMLESS_NETWORK_BEARER_MOBILITY
+
+//----------------------------------------------------------------------------------------------------------------
+//Below workaround to load the linked record which should be resolved with DEF58321
+CCDRecordBase* GetConnectedRecordL(CMDBSession& aSession, TMDBElementId aElementId)
+    {
+   	CCDRecordBase *record = static_cast<CCDRecordBase*>(CCDRecordBase::RecordFactoryL(aElementId));
+    CleanupStack::PushL(record);
+    record->LoadL(aSession);
+    CleanupStack::Pop(record);
+    return record;
+    }
+
+CCommsdat190Step::~CCommsdat190Step()
+/**
+ * Destructor
+ */
+	{
+	delete iCDSession;
+	}
+
+CCommsdat190Step::CCommsdat190Step()
+/**
+ * Constructor
+ */
+	{
+	SetTestStepName(KCommsdat190Step);                                                                                           
+	}
+
+TVerdict CCommsdat190Step::doTestStepPreambleL()
+/**
+ * @return - TVerdict code
+ * Override of base class pure virtual
+ */
+	{
+    SetTestStepResult(EFail);
+    
+	iCDSession = CMDBSession::NewL(KCDVersion1_1);
+	
+	iCDSession->OpenTransactionL();
+	SetTestStepResult(EPass);
+	return TestStepResult();
+	}
+
+TVerdict CCommsdat190Step::doTestStepL()
+/**
+ * @return - TVerdict code
+ * Override of base class pure virtual
+ * Our implementation only gets called if the base class doTestStepPreambleL() did
+ * not leave. That being the case, the current test result value will be EPass.
+ */
+	{
+	SetTestStepResult(EFail);
+	
+	//Store several IAPs and Selection Policies for later testing
+	_LIT(KIAPName1, "SelectionTestIAP1");
+	_LIT(KIAPName2, "SelectionTestIAP2");
+	_LIT(KIAPName3, "SelectionTestIAP3");
+	_LIT(KSelName1, "SelectionPolicy1");
+	
+	_LIT(KModemBearerType, "ModemBearer");
+	_LIT(KLANServiceType, "LANService");
+
+	CCDIAPRecord* newIapRecord = static_cast<CCDIAPRecord*>(CCDRecordBase::RecordFactoryL(KCDTIdIAPRecord));
+	CleanupStack::PushL(newIapRecord);
+    CCDIAPPrioritySelectionPolicyRecord *selPolRecord = (CCDIAPPrioritySelectionPolicyRecord *)CCDRecordBase::RecordFactoryL(KCDTIdIapPrioritySelectionPolicyRecord);
+	CleanupStack::PushL(selPolRecord);
+
+    selPolRecord->SetRecordId(KCDNewRecordRequest);
+    selPolRecord->iRecordName.SetMaxLengthL(KSelName1().Length());
+    selPolRecord->iRecordName = KSelName1;
+    
+     	
+  	// create a new request
+	newIapRecord->SetRecordId(KCDNewRecordRequest);
+    newIapRecord->iRecordName.SetMaxLengthL(KIAPName1().Length());
+    newIapRecord->iRecordName = KIAPName1;
+  	newIapRecord->iNetworkWeighting = 14;    // dummy value
+  	newIapRecord->iBearer = 1;
+  	newIapRecord->iBearerType.SetMaxLengthL(KModemBearerType().Length());
+  	newIapRecord->iBearerType = KModemBearerType;
+  	newIapRecord->iService = 1;
+  	newIapRecord->iServiceType.SetMaxLengthL(KLANServiceType().Length());
+  	newIapRecord->iServiceType = KLANServiceType;    
+	newIapRecord->StoreL(*iCDSession);
+    INFO_PRINTF2(_L("newIapRecord stored. Element id is %08x"), newIapRecord->ElementId());
+	selPolRecord->iIap1 = newIapRecord->ElementId();
+
+	newIapRecord->SetRecordId(KCDNewRecordRequest);
+    newIapRecord->iRecordName.SetMaxLengthL(KIAPName2().Length());
+    newIapRecord->iRecordName = KIAPName2;
+    newIapRecord->iNetworkWeighting = 14;    // dummy value
+  	newIapRecord->iBearer = 1;
+  	newIapRecord->iBearerType.SetMaxLengthL(KModemBearerType().Length());
+  	newIapRecord->iBearerType = KModemBearerType;
+  	newIapRecord->iService = 1;
+  	newIapRecord->iServiceType.SetMaxLengthL(KLANServiceType().Length());
+  	newIapRecord->iServiceType = KLANServiceType; 
+	newIapRecord->StoreL(*iCDSession);
+    INFO_PRINTF2(_L("newIapRecord stored. Element id is %08x"), newIapRecord->ElementId());
+    selPolRecord->iIap2 = newIapRecord->ElementId();
+    
+	newIapRecord->SetRecordId(KCDNewRecordRequest);
+    newIapRecord->iRecordName.SetMaxLengthL(KIAPName3().Length());
+    newIapRecord->iRecordName = KIAPName3;
+    newIapRecord->iNetworkWeighting = 14;    // dummy value
+  	newIapRecord->iBearer = 1;
+  	newIapRecord->iBearerType.SetMaxLengthL(KModemBearerType().Length());
+  	newIapRecord->iBearerType = KModemBearerType;
+  	newIapRecord->iService = 1;
+  	newIapRecord->iServiceType.SetMaxLengthL(KLANServiceType().Length());
+  	newIapRecord->iServiceType = KLANServiceType; 
+	newIapRecord->StoreL(*iCDSession);
+    INFO_PRINTF2(_L("newIapRecord stored. Element id is %08x"), newIapRecord->ElementId());
+    selPolRecord->iIap3 = newIapRecord->ElementId();
+
+    selPolRecord->StoreL(*iCDSession);
+    INFO_PRINTF2(_L("selPolRecord stored. Element id is %08x"), selPolRecord->ElementId());
+
+	CleanupStack::PopAndDestroy(selPolRecord);
+	CleanupStack::PopAndDestroy(newIapRecord);
+
+	SetTestStepResult(EPass);
+	return TestStepResult();
+	}
+
+TVerdict CCommsdat190Step::doTestStepPostambleL()
+/**
+ * @return - TVerdict code
+ * Override of base class pure virtual
+ */
+	{
+	iCDSession->CommitTransactionL();
+	return TestStepResult();
+	}
+
+//----------------------------------------------------------------------------------------------------------------
+CCommsdat191Step::~CCommsdat191Step()
+/**
+ * Destructor
+ */
+	{
+	delete iCDSession;
+	}
+
+CCommsdat191Step::CCommsdat191Step()
+/**
+ * Constructor
+ */
+	{
+	SetTestStepName(KCommsdat191Step);                                                                                           
+	}
+
+TVerdict CCommsdat191Step::doTestStepPreambleL()
+/**
+ * @return - TVerdict code
+ * Override of base class pure virtual
+ */
+	{
+    SetTestStepResult(EFail);
+	iCDSession = CMDBSession::NewL(KCDVersion1_1);
+
+	SetTestStepResult(EPass);
+	return TestStepResult();
+	}
+
+TVerdict CCommsdat191Step::doTestStepL()
+/**
+ * @return - TVerdict code
+ * Override of base class pure virtual
+ * Our implementation only gets called if the base class doTestStepPreambleL() did
+ * not leave. That being the case, the current test result value will be EPass.
+ */
+	{
+	SetTestStepResult(EFail);
+
+	_LIT(KIAPName1, "SelectionTestIAP1"); //Same as used by CCommsdat100Step
+	_LIT(KSelName1, "SelectionPolicy1");
+	
+	CCDIAPPrioritySelectionPolicyRecord* selPolRecord = static_cast<CCDIAPPrioritySelectionPolicyRecord*>(CCDRecordBase::RecordFactoryL(KCDTIdIapPrioritySelectionPolicyRecord));
+	CleanupStack::PushL(selPolRecord);
+
+    //Find a particular IAP Priority Selection Policy record
+    selPolRecord->iRecordName.SetMaxLengthL(KSelName1().Length());
+    selPolRecord->iRecordName = KSelName1;
+	
+	TInt found = selPolRecord->FindL(*iCDSession); //This record has been stored by CCommsdat100Step
+	if(found)
+	    {
+    	//Load corresponding IAP record
+
+    	
+   	    //This record has been stored by CCommsdat100Step
+
+   	    // Link records work now
+        CCDIAPRecord* iapRecord = static_cast<CCDIAPRecord*>(GetConnectedRecordL(*iCDSession, selPolRecord->iIap1));
+	    CleanupStack::PushL(iapRecord);
+        
+
+        /*selPolRecord->iIap1.LoadL(*iCDSession);
+        CCDIAPRecord* iapRecord = static_cast<CCDIAPRecord*>(selPolRecord->iIap1);   
+*/
+	    TPtrC iapRecordName(iapRecord->iRecordName);
+	    if (iapRecordName == KIAPName1)
+	        {
+	        INFO_PRINTF2(_L("Iap record (%S) successfuly loaded"), &iapRecordName);
+	        SetTestStepResult(EPass);
+	        }
+	    else
+	        {
+	        INFO_PRINTF3(_L("Iap record (%S) does not match the expected one (%S)"), &iapRecordName, &KIAPName1());
+	        }
+
+        CleanupStack::PopAndDestroy(iapRecord); // not necessary - link records work now.
+	    }
+
+    CleanupStack::PopAndDestroy(selPolRecord);
+
+	return TestStepResult();
+	}
+
+//----------------------------------------------------------------------------------------------------------------
+
+CCommsdat192Step::~CCommsdat192Step()
+/**
+ * Destructor
+ */
+	{
+	delete iCDSession;
+	}
+
+CCommsdat192Step::CCommsdat192Step()
+/**
+ * Constructor
+ */
+	{
+	SetTestStepName(KCommsdat192Step);                                                                                           
+	}
+
+TVerdict CCommsdat192Step::doTestStepPreambleL()
+/**
+ * @return - TVerdict code
+ * Override of base class pure virtual
+ */
+	{
+    SetTestStepResult(EFail);
+	iCDSession = CMDBSession::NewL(KCDVersion1_1);
+
+	iCDSession->OpenTransactionL();
+	SetTestStepResult(EPass);
+	return TestStepResult();
+	}
+
+TVerdict CCommsdat192Step::doTestStepL()
+/**
+ * @return - TVerdict code
+ * Override of base class pure virtual
+ * Our implementation only gets called if the base class doTestStepPreambleL() did
+ * not leave. That being the case, the current test result value will be EPass.
+ */
+	{
+	SetTestStepResult(EFail);
+	
+	//Store an IAP priority based AP record for later testing
+	_LIT(KApName1, "CorporateLAN"); //Same as used by CCommsdat101Step
+	_LIT(KSelName1, "SelectionPolicy1");
+	const TInt GIDValue = 1;
+
+    CCDIAPPrioritySelectionPolicyRecord* selPolRecord = static_cast<CCDIAPPrioritySelectionPolicyRecord*>(CCDRecordBase::RecordFactoryL(KCDTIdIapPrioritySelectionPolicyRecord));
+	CleanupStack::PushL(selPolRecord);
+
+    //Find a particular IAP Priority Selection Policy record
+    selPolRecord->iRecordName.SetMaxLengthL(KSelName1().Length());
+    selPolRecord->iRecordName = KSelName1;
+		
+	TInt found = selPolRecord->FindL(*iCDSession); //This record has been stored by CCommsdat100Step
+	if (found)
+	    {
+	    CCDAccessPointRecord* apRecord = static_cast<CCDAccessPointRecord*>(CCDRecordBase::RecordFactoryL(KCDTIdAccessPointRecord));
+	    CleanupStack::PushL(apRecord);
+
+	    apRecord->SetRecordId(KCDNewRecordRequest);
+        apRecord->iRecordName.SetMaxLengthL(KApName1().Length());
+        apRecord->iRecordName = KApName1;
+        apRecord->iSelectionPolicy = selPolRecord->ElementId();
+        apRecord->iAccessPointGID = GIDValue;
+   	    apRecord->StoreL(*iCDSession);
+        INFO_PRINTF2(_L("apRecord stored. Element id is %08x"), apRecord->ElementId());
+
+	    CleanupStack::PopAndDestroy(apRecord);
+	    SetTestStepResult(EPass);
+	    }
+	
+    CleanupStack::PopAndDestroy(selPolRecord);
+	return TestStepResult();
+	}
+	
+TVerdict CCommsdat192Step::doTestStepPostambleL()
+/**
+ * @return - TVerdict code
+ * Override of base class pure virtual
+ */
+	{
+	iCDSession->CommitTransactionL();
+	return TestStepResult();
+	}
+
+//----------------------------------------------------------------------------------------------------------------
+
+CCommsdat193Step::~CCommsdat193Step()
+/**
+ * Destructor
+ */
+	{
+	delete iCDSession;
+	}
+
+CCommsdat193Step::CCommsdat193Step()
+/**
+ * Constructor
+ */
+	{
+	SetTestStepName(KCommsdat193Step);                                                                                           
+	}
+
+TVerdict CCommsdat193Step::doTestStepPreambleL()
+/**
+ * @return - TVerdict code
+ * Override of base class pure virtual
+ */
+	{
+    SetTestStepResult(EFail);
+	iCDSession = CMDBSession::NewL(KCDVersion1_1);
+
+	SetTestStepResult(EPass);
+	return TestStepResult();
+	}
+
+TVerdict CCommsdat193Step::doTestStepL()
+/**
+ * @return - TVerdict code
+ * Override of base class pure virtual
+ * Our implementation only gets called if the base class doTestStepPreambleL() did
+ * not leave. That being the case, the current test result value will be EPass.
+ */
+	{
+	SetTestStepResult(EFail);
+
+   	//Load a previously stored IAP priority based AP record
+	_LIT(KApName1, "CorporateLAN"); //Same as used by CCommsdat101Step
+	_LIT(KSelName1, "SelectionPolicy1");
+	_LIT(KIAPName3, "SelectionTestIAP3"); //Same as used by CCommsdat100Step
+
+    CCDAccessPointRecord* apRecord = static_cast<CCDAccessPointRecord*>(CCDRecordBase::RecordFactoryL(KCDTIdAccessPointRecord));
+	CleanupStack::PushL(apRecord);
+
+    apRecord->iRecordName.SetL(KApName1);
+	TInt found = apRecord->FindL(*iCDSession); //This record has been stored by CCommsdat102Step
+	if (found)
+	    {
+        INFO_PRINTF2(_L("apRecord loaded. Element id is %08x"), apRecord->ElementId());
+        
+        //Load the Selection Policy record
+        //This record has been stored by CCommsdat100Step
+        CCDSelectionPolicyRecordBase* selPolRecord = static_cast<CCDSelectionPolicyRecordBase*>(GetConnectedRecordL(*iCDSession, apRecord->iSelectionPolicy));
+    	CleanupStack::PushL(selPolRecord);
+        
+
+        /*apRecord->iSelectionPolicy.LoadL(*iCDSession);
+	    CCDSelectionPolicyRecordBase* selPolRecord = static_cast<CCDSelectionPolicyRecordBase*>(apRecord->iSelectionPolicy);
+    	*/
+    	
+	    TESTL(TPtrC(selPolRecord->iRecordName) == KSelName1);
+
+       	//Cast to the already known type
+       	CCDIAPPrioritySelectionPolicyRecord* iapSelPolRec = static_cast<CCDIAPPrioritySelectionPolicyRecord*>(selPolRecord);
+
+   	    //This record has been stored by CCommsdat100Step
+        CCDIAPRecord* iapRecord = static_cast<CCDIAPRecord*>(GetConnectedRecordL(*iCDSession, iapSelPolRec->iIap3));
+        CleanupStack::PushL(iapRecord);
+        
+
+   	    /*iapSelPolRec->iIap3.LoadL(*iCDSession);
+	    CCDIAPRecord* iapRecord = static_cast<CCDIAPRecord*>(iapSelPolRec->iIap3);*/
+       
+   	    TPtrC iapRecordName(iapRecord->iRecordName);
+   	    if(iapRecordName == KIAPName3)
+   	        {
+   	        INFO_PRINTF2(_L("Iap record (%S) successfuly loaded"), &iapRecordName);
+   	        SetTestStepResult(EPass);
+   	        }
+   	    else
+   	        {
+   	        INFO_PRINTF3(_L("Iap record (%S) does not match the expected one (%S)"), &iapRecordName, &KIAPName3());
+   	        }
+        
+        CleanupStack::PopAndDestroy(iapRecord);
+	    CleanupStack::PopAndDestroy(selPolRecord);
+	    
+	    }
+	CleanupStack::PopAndDestroy(apRecord);
+
+	return TestStepResult();
+	}
+	
+//----------------------------------------------------------------------------------------------------------------
+
+CCommsdat194Step::~CCommsdat194Step()
+/**
+ * Destructor
+ */
+	{
+	delete iCDSession;
+	}
+
+CCommsdat194Step::CCommsdat194Step()
+/**
+ * Constructor
+ */
+	{
+	SetTestStepName(KCommsdat194Step);                                                                                           
+	}
+
+TVerdict CCommsdat194Step::doTestStepPreambleL()
+/**
+ * @return - TVerdict code
+ * Override of base class pure virtual
+ */
+	{
+    SetTestStepResult(EFail);
+	iCDSession = CMDBSession::NewL(KCDVersion1_1);
+
+	SetTestStepResult(EPass);
+	return TestStepResult();
+	}
+
+TVerdict CCommsdat194Step::doTestStepL()
+/**
+ * @return - TVerdict code
+ * Override of base class pure virtual
+ * Our implementation only gets called if the base class doTestStepPreambleL() did
+ * not leave. That being the case, the current test result value will be EPass.
+ */
+	{
+	SetTestStepResult(EFail);
+
+   	//Load a previously stored IAP priority based AP record
+	_LIT(KApName1, "CorporateLAN"); //Same as used by CCommsdat101Step
+	_LIT(KSelName1, "SelectionPolicy1");
+
+    CCDAccessPointRecord* apRecord = static_cast<CCDAccessPointRecord*>(CCDRecordBase::RecordFactoryL(KCDTIdAccessPointRecord));
+	CleanupStack::PushL(apRecord);
+
+    apRecord->iRecordName.SetL(KApName1);
+	TInt found = apRecord->FindL(*iCDSession); //This record has been stored by CCommsdat102Step
+	if (found)
+	    {
+        INFO_PRINTF2(_L("apRecord loaded. Element id is %08x"), apRecord->ElementId());
+        
+        //Load the Selection Policy record
+        //This record has been stored by CCommsdat100Step
+        CCDSelectionPolicyRecordBase* selPolRecord = static_cast<CCDSelectionPolicyRecordBase*>(GetConnectedRecordL(*iCDSession, apRecord->iSelectionPolicy));
+    	CleanupStack::PushL(selPolRecord);
+    	
+        /*apRecord->iSelectionPolicy.LoadL(*iCDSession);
+        CCDSelectionPolicyRecordBase* selPolRecord = static_cast<CCDSelectionPolicyRecordBase*>(apRecord->iSelectionPolicy);
+    	*/
+    	TESTL(TPtrC(selPolRecord->iRecordName) == KSelName1);
+
+        //Build the list of IDs
+        RArray<TInt> iapIDs;
+        CleanupClosePushL(iapIDs);
+       	
+       	const SRecordTypeInfo* recordInfo = selPolRecord->GetRecordInfo();
+       	CMDBRecordLink<CCDIAPRecord>* iapRecordLink = NULL;
+       	// Get only 3 fields from the record because the previous test only set 3 fields 
+        TInt index(0);
+
+        while ( (recordInfo + index) != NULL  &&  (recordInfo + index)->iTypeId != KCDTIdIap1 )
+            {
+            // The first field you want to read might not be at the beginning of the table
+            ++index;
+            }
+        /*  
+        changed the code because this was too fragile, depending on non-public info (i.e. the order of the fields in the recordinfo table)
+        for( TInt index = 2;
+			 index < 5 && (iapRecordLink = static_cast<CMDBRecordLink<CCDIAPRecord>*>(selPolRecord->GetFieldByIdL((recordInfo + index)->iTypeId))) != NULL;
+       	     index++ )
+       	    {
+        */
+        TInt typeId = (recordInfo + index)->iTypeId ;
+        while ( typeId != NULL  &&  typeId <= KCDTIdIap3 )
+            {
+            iapRecordLink = static_cast<CMDBRecordLink<CCDIAPRecord>*>(selPolRecord->GetFieldByIdL(typeId));
+
+            CCDIAPRecord* iapRecord = static_cast<CCDIAPRecord*>(GetConnectedRecordL(*iCDSession, *iapRecordLink));
+            //iapRecordLink->LoadL(*iCDSession);
+       	    //CCDIAPRecord* iapRecord = static_cast<CCDIAPRecord*>(*iapRecordLink);
+
+            TPtrC iapRecName(iapRecord->iRecordName);
+       	    TUint32 iapId = iapRecord->RecordId();
+       	    if (iapRecName.Length() > 0 && iapId > 0)
+       	        {
+       	        iapIDs.Append(iapId);
+       	        }
+       	    //delete iapRecord;
+            typeId = (++recordInfo + index)->iTypeId;
+       	    }
+       	
+       	if(iapIDs.Count() == 3)
+   	        {
+   	        INFO_PRINTF1(_L("Iap records successfuly loaded"));
+   	        SetTestStepResult(EPass);
+   	        }
+   	    else
+   	        {
+   	        INFO_PRINTF1(_L("Iap records not found!"));
+   	        }
+   	    CleanupStack::PopAndDestroy(); //Call Close() on iapIDs;
+	    CleanupStack::PopAndDestroy(selPolRecord);
+	    }
+	CleanupStack::PopAndDestroy(apRecord);
+
+	return TestStepResult();
+	}
+	
+//----------------------------------------------------------------------------------------------------------------
+
+CCommsdat195Step::~CCommsdat195Step()
+/**
+ * Destructor
+ */
+	{
+	delete iCDSession;
+	}
+
+CCommsdat195Step::CCommsdat195Step()
+/**
+ * Constructor
+ */
+	{
+	SetTestStepName(KCommsdat195Step);
+	}
+
+TVerdict CCommsdat195Step::doTestStepPreambleL()
+/**
+ * @return - TVerdict code
+ * Override of base class pure virtual
+ */
+	{
+    SetTestStepResult(EFail);
+	iCDSession = CMDBSession::NewL(KCDVersion1_1);
+
+	SetTestStepResult(EPass);
+	return TestStepResult();
+	}
+
+TVerdict CCommsdat195Step::doTestStepL()
+/**
+ * @return - TVerdict code
+ * Override of base class pure virtual
+ * Our implementation only gets called if the base class doTestStepPreambleL() did
+ * not leave. That being the case, the current test result value will be EPass.
+ */
+	{
+	SetTestStepResult(EFail);
+#ifdef SYMBIAN_NON_SEAMLESS_NETWORK_BEARER_MOBILITY		
+	_LIT(KApName1, "dummynifMappedFromIAP1");
+	//_LIT(KSelName1, "SelectionPolicy1");
+	//const TUint KAp1 = 22;
+	const TUint KRecordId = 1;
+	
+	CCDAccessPointRecord* apRecord = static_cast<CCDAccessPointRecord*>(CCDRecordBase::RecordFactoryL(KCDTIdAccessPointRecord));
+	CleanupStack::PushL(apRecord);
+	
+	apRecord->iRecordName.SetL(KApName1);
+	
+	TInt found = apRecord->FindL(*iCDSession);
+	if (found)
+	    {
+        INFO_PRINTF2(_L("apRecord loaded. Element id is %08x"), apRecord->ElementId());
+        
+        //Load the related IAP record
+        CCDIAPRecord* iapRecord = static_cast<CCDIAPRecord*>(CCDRecordBase::RecordFactoryL(KCDTIdIAPRecord));
+    	CleanupStack::PushL(iapRecord);
+    	iapRecord->SetRecordId(KRecordId);
+    	iapRecord->LoadL(*iCDSession);
+        
+        if(static_cast<TInt>(apRecord->iRecordTag) == iapRecord->RecordId())
+   	        {
+   	        INFO_PRINTF1(_L("AP and the 'linked' IAP record found"));
+   	        SetTestStepResult(EPass);
+   	        }
+   	    else
+   	        {
+   	        INFO_PRINTF1(_L("AP and the 'linked' IAP record found"));
+   	        }
+   	        
+        CleanupStack::PopAndDestroy(iapRecord);
+        
+	    }
+	else
+	    {
+	    INFO_PRINTF1(_L("AccessPoint record not found"));
+	    }
+        
+    CleanupStack::PopAndDestroy(apRecord);
+#else
+	_LIT(KApName1, "SNAP1");
+	_LIT(KSelName1, "SelectionPolicy1");
+
+    CCDAccessPointRecord* apRecord = static_cast<CCDAccessPointRecord*>(CCDRecordBase::RecordFactoryL(KCDTIdAccessPointRecord));
+	CleanupStack::PushL(apRecord);
+
+    apRecord->iRecordName.SetL(KApName1);
+	TInt found = apRecord->FindL(*iCDSession);
+	if (found)
+	    {
+        INFO_PRINTF2(_L("apRecord loaded. Element id is %08x"), apRecord->ElementId());
+        
+        //Load the Selection Policy record
+        
+        //CCDIAPPrioritySelectionPolicyRecord* selPolRecord = static_cast<CCDIAPPrioritySelectionPolicyRecord*>(GetConnectedRecordL(*iCDSession, apRecord->iSelectionPolicy));
+    	//CleanupStack::PushL(selPolRecord);
+        
+        apRecord->iSelectionPolicy.LoadL(*iCDSession);
+    	//CCDIAPPrioritySelectionPolicyRecord* selPolRecord = static_cast<CCDIAPPrioritySelectionPolicyRecord*>(apRecord->iSelectionPolicy);
+    	
+    	CCDSelectionPolicyRecordBase* selPolRecord1 = static_cast<CCDSelectionPolicyRecordBase*>(apRecord->iSelectionPolicy);
+    	
+    	CCDIAPPrioritySelectionPolicyRecord* selPolRecord = static_cast<CCDIAPPrioritySelectionPolicyRecord*>(selPolRecord1);
+    	 
+        TESTL(TPtrC(selPolRecord->iRecordName) == KSelName1);
+
+   	    if(selPolRecord->iIap1.RecordId() == 1)
+   	        {
+   	        INFO_PRINTF1(_L("Selection Policy record found"));
+   	        SetTestStepResult(EPass);
+   	        }
+   	    else
+   	        {
+   	        INFO_PRINTF1(_L("Selection Policy record not found"));
+   	        }
+	    }
+	CleanupStack::PopAndDestroy(apRecord);
+#endif // SYMBIAN_NON_SEAMLESS_NETWORK_BEARER_MOBILITY
+	return TestStepResult();
+	}
+	
+//----------------------------------------------------------------------------------------------------------------
+
+CCommsdat196Step::~CCommsdat196Step()
+/**
+ * Destructor
+ */
+	{
+	delete iCDSession;
+	}
+
+CCommsdat196Step::CCommsdat196Step()
+/**
+ * Constructor
+ */
+	{
+	SetTestStepName(KCommsdat196Step);                                                                                           
+	}
+
+TVerdict CCommsdat196Step::doTestStepPreambleL()
+/**
+ * @return - TVerdict code
+ * Override of base class pure virtual
+ */
+	{
+    SetTestStepResult(EFail);
+	iCDSession = CMDBSession::NewL(KCDVersion1_1);
+
+	SetTestStepResult(EPass);
+	return TestStepResult();
+	}
+
+TVerdict CCommsdat196Step::doTestStepL()
+/**
+ * @return - TVerdict code
+ * Override of base class pure virtual
+ * Our implementation only gets called if the base class doTestStepPreambleL() did
+ * not leave. That being the case, the current test result value will be EPass.
+ */
+	{
+	SetTestStepResult(EFail);
+#ifdef SYMBIAN_NON_SEAMLESS_NETWORK_BEARER_MOBILITY
+	_LIT(KSelName2, "SelectionPolicy2");
+	const TUint KRecordId = 2;
+	
+	CCDAccessPointRecord* apRecord = static_cast<CCDAccessPointRecord*>(CCDRecordBase::RecordFactoryL(KCDTIdAccessPointRecord));
+	CleanupStack::PushL(apRecord);
+	
+	apRecord->SetRecordId(KRecordId); //load record 2 which links to a policy with 3 IAPs.
+	apRecord->LoadL(*iCDSession);
+	
+	INFO_PRINTF2(_L("Access Point Record loaded. Element id is %08x"), apRecord->ElementId());
+        
+    //Load the Selection Policy record
+    //CCDAPPrioritySelectionPolicyRecord* selPolRecord = static_cast<CCDAPPrioritySelectionPolicyRecord*>(CCDConnectionPrefsRecord::RecordFactoryL(KCDTIdApPrioritySelectionPolicyRecord));
+    CCDAPPrioritySelectionPolicyRecord* selPolRecord = static_cast<CCDAPPrioritySelectionPolicyRecord*>(CCDRecordBase::RecordFactoryL(KCDTIdApPrioritySelectionPolicyRecord));
+    CleanupStack::PushL(selPolRecord);
+    selPolRecord->SetRecordId(KRecordId);
+    selPolRecord->LoadL(*iCDSession);
+
+    TESTL(TPtrC(selPolRecord->iRecordName) == KSelName2);
+
+    //Build the list of IDs
+    RArray<TInt> iapIDs;
+    CleanupClosePushL(iapIDs);
+       	
+//   	CMDBField<TUint32>* theAp = &selPolRecord->iAp1;   	
+   	CMDBRecordLink<CCDAccessPointRecord>* theAp = &selPolRecord->iAp1;
+	TUint32 theCount = selPolRecord->iApCount;	
+	if (theCount != 3)
+		{
+		INFO_PRINTF2(_L("IAP count in the policy (%) is invalid"), theCount);
+		TESTL(EFalse);
+		}
+
+   	for (TInt i = 0; i < theCount; i++, theAp++)
+		{
+		TInt theIapID = static_cast<TInt>(*theAp);
+		TESTL(theIapID>0);
+		iapIDs.Append(theIapID);
+		}
+
+	if (iapIDs.Count() == 3)
+		{
+		INFO_PRINTF1(_L("Iap records successfuly loaded"));
+		SetTestStepResult(EPass);
+		}
+	else
+		{
+		INFO_PRINTF1(_L("Iap records not found!"));
+		}	
+	
+	CleanupStack::PopAndDestroy(&iapIDs);
+	CleanupStack::PopAndDestroy(selPolRecord);
+	CleanupStack::PopAndDestroy(apRecord);
+		
+#else
+	_LIT(KSelName2, "SelectionPolicy2");
+
+    CCDAccessPointRecord* apRecord = static_cast<CCDAccessPointRecord*>(CCDRecordBase::RecordFactoryL(KCDTIdAccessPointRecord));
+	CleanupStack::PushL(apRecord);
+
+    apRecord->SetRecordId(2); //load record 2 which links to a policy with 3 IAPs.
+	apRecord->LoadL(*iCDSession);
+
+    INFO_PRINTF2(_L("Access Point Record loaded. Element id is %08x"), apRecord->ElementId());
+        
+    //Load the Selection Policy record
+    
+    //CCDIAPPrioritySelectionPolicyRecord* selPolRecord = static_cast<CCDIAPPrioritySelectionPolicyRecord*>(GetConnectedRecordL(*iCDSession, apRecord->iSelectionPolicy));
+  	//CleanupStack::PushL(selPolRecord);
+    
+
+    apRecord->iSelectionPolicy.LoadL(*iCDSession);
+    //CCDIAPPrioritySelectionPolicyRecord* selPolRecord = static_cast<CCDIAPPrioritySelectionPolicyRecord*>(apRecord->iSelectionPolicy);
+  	CCDSelectionPolicyRecordBase* selPolRecord1 = static_cast<CCDSelectionPolicyRecordBase*>(apRecord->iSelectionPolicy);
+    	
+    CCDIAPPrioritySelectionPolicyRecord* selPolRecord = static_cast<CCDIAPPrioritySelectionPolicyRecord*>(selPolRecord1);
+    	
+    TESTL(TPtrC(selPolRecord->iRecordName) == KSelName2);
+
+    //Build the list of IDs
+    RArray<TInt> iapIDs;
+    CleanupClosePushL(iapIDs);
+       	
+   	CMDBRecordLink<CCDIAPRecord>* theIap = &selPolRecord->iIap1;
+	CMDBField<TUint32>* theCount = &selPolRecord->iIapCount;
+	TUint count = *theCount;
+	if (count != 3)
+		{
+		INFO_PRINTF2(_L("IAP count in the policy (%) is invalid"), count);
+		TESTL(EFalse);
+		}
+
+   	for (TInt i = 0; i < count; i++,theIap++)
+		{
+		TInt theIapID = static_cast<TInt>(*theIap);
+		TESTL(theIapID>0);
+		iapIDs.Append(theIapID);
+		}
+
+	if (iapIDs.Count() == 3)
+		{
+		INFO_PRINTF1(_L("Iap records successfuly loaded"));
+		SetTestStepResult(EPass);
+		}
+	else
+		{
+		INFO_PRINTF1(_L("Iap records not found!"));
+		}
+	
+	CleanupStack::PopAndDestroy(&iapIDs);
+	CleanupStack::PopAndDestroy(apRecord);
+#endif
+
+	return TestStepResult();
+	}
+//---------------------------------------
+//				FIELD TESTS
+//---------------------------------------
+//----------------------------------------------------------------------------------------------------------------
+#ifdef SYMBIAN_NON_SEAMLESS_NETWORK_BEARER_MOBILITY
+
+CCommsdat307Step::~CCommsdat307Step()
+/**
+ * Destructor
+ */
+	{
+	delete iCDSession_v11;
+	delete iCDSession_vLatest;
+	}
+
+CCommsdat307Step::CCommsdat307Step()
+/**
+ * Constructor
+ */
+	{
+	SetTestStepName(KCommsdat307Step);                                                                                           
+	}
+
+TVerdict CCommsdat307Step::doTestStepPreambleL()
+/**
+ * @return - TVerdict code
+ * Override of base class pure virtual
+ */
+	{
+    SetTestStepResult(EFail);
+
+    iCDSession_v11 = CMDBSession::NewL(KCDVersion1_1);
+#ifdef SYMBIAN_NON_SEAMLESS_NETWORK_BEARER_MOBILITY
+    iCDSession_vLatest = CMDBSession::NewL(KCDVersion1_2);
+#else
+    iCDSession_vLatest = CMDBSession::NewL(KCDVersion1_1);
+#endif
+
+	SetTestStepResult(EPass);
+	return TestStepResult();
+	}
+
+TVerdict CCommsdat307Step::doTestStepL()
+/**
+ * @return - TVerdict code
+ * Change the PromptForSnap field in the GlobalSettings record to TRUE
+ */
+	{
+	SetTestStepResult(EFail);
+	
+	//create the container for the prompt field in the GS
+	CMDBField<TBool>* promptForSnapField = new(ELeave) CMDBField<TBool>(KCDTIdPromptForSnap);
+	CleanupStack::PushL(promptForSnapField);
+	promptForSnapField->SetRecordId(1);
+	
+	//create the container for the prompt field in the tier rec.
+	
+	CMDBField<TBool>* promptTierField = new(ELeave) CMDBField<TBool>(KCDTIdPromptUser);
+	CleanupStack::PushL(promptTierField);
+	promptTierField->SetRecordId(1);
+	
+	//This loads the 'PromptUser' field from the default Network tier record.
+	promptForSnapField->LoadL(*iCDSession_v11);
+	promptTierField->LoadL(*iCDSession_vLatest);
+	
+	if (*promptTierField == *promptForSnapField)
+		{
+		*promptForSnapField = ETrue;
+		promptForSnapField->ModifyL(*iCDSession_v11);
+		
+		CMDBField<TBool>* promptForSnapField2 = new(ELeave) CMDBField<TBool>(KCDTIdPromptForSnap);
+		CleanupStack::PushL(promptForSnapField2);
+		promptForSnapField2->SetRecordId(1);
+		
+		promptForSnapField2->LoadL(*iCDSession_v11);
+		promptTierField->LoadL(*iCDSession_vLatest);
+		
+		if (1 == *promptTierField &&
+			1 == *promptForSnapField2)
+			{
+			SetTestStepResult(EPass);
+			}
+		CleanupStack::PopAndDestroy(promptForSnapField2);
+		}
+	
+	CleanupStack::PopAndDestroy(promptTierField);
+	CleanupStack::PopAndDestroy(promptForSnapField);
+	
+	return TestStepResult();
+	}
+#endif // SYMBIAN_NON_SEAMLESS_NETWORK_BEARER_MOBILITY
+
+//----------------------------------------------------------------------------------------------------------------
+#ifdef SYMBIAN_NON_SEAMLESS_NETWORK_BEARER_MOBILITY
+
+CCommsdat308Step::~CCommsdat308Step()
+/**
+ * Destructor
+ */
+	{
+	delete iCDSession_v11;
+	delete iCDSession_vLatest;
+	}
+
+CCommsdat308Step::CCommsdat308Step()
+/**
+ * Constructor
+ */
+	{
+	SetTestStepName(KCommsdat308Step);                                                                                           
+	}
+
+TVerdict CCommsdat308Step::doTestStepPreambleL()
+/**
+ * @return - TVerdict code
+ * Override of base class pure virtual
+ */
+	{
+    SetTestStepResult(EFail);
+
+    iCDSession_v11 = CMDBSession::NewL(KCDVersion1_1);
+    iCDSession_vLatest = NULL;
+
+	SetTestStepResult(EPass);
+	return TestStepResult();
+	}
+
+TVerdict CCommsdat308Step::doTestStepL()
+/**
+ * @return - TVerdict code
+ * Load the GlobalSettings record from the DB.
+ * This test step is dependent form the CCommsdat307Step!!
+ */
+	{
+	SetTestStepResult(EFail);
+	
+	CCDGlobalSettingsRecord* gsRecord = static_cast<CCDGlobalSettingsRecord*>(CCDRecordBase::RecordFactoryL(KCDTIdGlobalSettingsRecord));
+	CleanupStack::PushL(gsRecord);
+	
+	gsRecord->SetRecordId(1);
+	gsRecord->LoadL(*iCDSession_v11);
+	
+	CMDBField<TBool>* promptForSnap = &(gsRecord->iPromptForSnap);
+	
+	if ( 1 == *promptForSnap )
+		{
+		SetTestStepResult(EPass);
+		}
+	
+	CleanupStack::PopAndDestroy(gsRecord);
+		
+	return TestStepResult();
+	}
+
+#endif
+//----------------------------------------------------------------------------------------------------------------
+#ifdef SYMBIAN_NON_SEAMLESS_NETWORK_BEARER_MOBILITY
+
+CCommsdat309Step::~CCommsdat309Step()
+/**
+ * Destructor
+ */
+	{
+	delete iCDSession_v11;
+	delete iCDSession_vLatest;
+	}
+
+CCommsdat309Step::CCommsdat309Step()
+/**
+ * Constructor
+ */
+	{
+	SetTestStepName(KCommsdat309Step);                                                                                           
+	}
+
+TVerdict CCommsdat309Step::doTestStepPreambleL()
+/**
+ * @return - TVerdict code
+ * Override of base class pure virtual
+ */
+	{
+    SetTestStepResult(EFail);
+
+    iCDSession_v11 = CMDBSession::NewL(KCDVersion1_1);
+#ifdef SYMBIAN_NON_SEAMLESS_NETWORK_BEARER_MOBILITY
+    iCDSession_vLatest = CMDBSession::NewL(KCDVersion1_2);
+#else
+    iCDSession_vLatest = CMDBSession::NewL(KCDVersion1_1);
+#endif
+
+	SetTestStepResult(EPass);
+	return TestStepResult();
+	}
+
+TVerdict CCommsdat309Step::doTestStepL()
+/**
+ * @return - TVerdict code
+ * Load the defaultSnap field formthe GS record as a link field.
+ * This test step is dependent form the CCommsdat307Step!!
+ */
+	{
+	SetTestStepResult(EFail);
+	
+	CMDBRecordLink<CCDAccessPointRecord>* gsDefaultSnap = new (ELeave) CMDBRecordLink<CCDAccessPointRecord>(KCDTIdDefaultSnap);
+	CMDBRecordLink<CCDAccessPointRecord>* tierDefaultAP = new (ELeave) CMDBRecordLink<CCDAccessPointRecord>(KCDTIdDefaultAccessPoint);
+	CleanupStack::PushL(gsDefaultSnap);
+	CleanupStack::PushL(tierDefaultAP);
+	
+	gsDefaultSnap->SetRecordId(1);
+	gsDefaultSnap->LoadL(*iCDSession_v11);
+	
+	tierDefaultAP->SetRecordId(1);
+	tierDefaultAP->LoadL(*iCDSession_vLatest);
+	
+	if ( 1 == *gsDefaultSnap &&
+		 1 == ((*tierDefaultAP & KCDMaskShowRecordId) >> 8) ) 
+		{
+		//ok, the 2 fields are the same
+		*gsDefaultSnap = 2;
+		gsDefaultSnap->ModifyL(*iCDSession_v11);
+		
+		CMDBRecordLink<CCDAccessPointRecord>* gsDefaultSnap1 = new (ELeave) CMDBRecordLink<CCDAccessPointRecord>(KCDTIdDefaultSnap);
+		CMDBRecordLink<CCDAccessPointRecord>* tierDefaultAP1 = new (ELeave) CMDBRecordLink<CCDAccessPointRecord>(KCDTIdDefaultAccessPoint);
+		CleanupStack::PushL(gsDefaultSnap1);
+		CleanupStack::PushL(tierDefaultAP1);
+		
+		//let's check them once again...
+		gsDefaultSnap1->SetRecordId(1);
+		gsDefaultSnap1->LoadL(*iCDSession_v11);
+		
+		tierDefaultAP1->SetRecordId(1);
+		tierDefaultAP1->LoadL(*iCDSession_vLatest);
+		
+		if ( 2 == *gsDefaultSnap1 &&
+			 2 == ((*tierDefaultAP1 & KCDMaskShowRecordId) >> 8) )
+			{
+			SetTestStepResult(EPass);
+			}
+		
+		CleanupStack::PopAndDestroy(tierDefaultAP1);
+		CleanupStack::PopAndDestroy(gsDefaultSnap1);
+		}
+	
+	CleanupStack::PopAndDestroy(tierDefaultAP);
+	CleanupStack::PopAndDestroy(gsDefaultSnap);
+		
+	return TestStepResult();
+	}
+#endif // SYMBIAN_NON_SEAMLESS_NETWORK_BEARER_MOBILITY
+
+//----------------------------------------------------------------------------------------------------------------
+#ifdef SYMBIAN_NON_SEAMLESS_NETWORK_BEARER_MOBILITY
+
+CCommsdat310Step::~CCommsdat310Step()
+/**
+ * Destructor
+ */
+	{
+	delete iCDSession_v11;
+	delete iCDSession_vLatest;
+	}
+
+CCommsdat310Step::CCommsdat310Step()
+/**
+ * Constructor
+ */
+	{
+	SetTestStepName(KCommsdat310Step);                                                                                           
+	}
+
+TVerdict CCommsdat310Step::doTestStepPreambleL()
+/**
+ * @return - TVerdict code
+ * Override of base class pure virtual
+ */
+	{
+    SetTestStepResult(EFail);
+
+    iCDSession_v11 = CMDBSession::NewL(KCDVersion1_1);
+#ifdef SYMBIAN_NON_SEAMLESS_NETWORK_BEARER_MOBILITY
+    iCDSession_vLatest = CMDBSession::NewL(KCDVersion1_2);
+#else
+    iCDSession_vLatest = CMDBSession::NewL(KCDVersion1_1);
+#endif
+
+	SetTestStepResult(EPass);
+	return TestStepResult();
+	}
+
+TVerdict CCommsdat310Step::doTestStepL()
+/**
+ * @return - TVerdict code
+ * Load the GlobalSettings record.
+ * This test step is dependent form the CCommsdat309Step!!
+ */
+	{
+	SetTestStepResult(EFail);
+	
+	CCDGlobalSettingsRecord* gsRecord = static_cast<CCDGlobalSettingsRecord*>(CCDRecordBase::RecordFactoryL(KCDTIdGlobalSettingsRecord));
+	CCDTierRecord* tierRecord = static_cast<CCDTierRecord*>(CCDRecordBase::RecordFactoryL(KCDTIdTierRecord));
+	
+	CleanupStack::PushL(gsRecord);
+	CleanupStack::PushL(tierRecord);
+	
+	gsRecord->SetRecordId(1);
+	gsRecord->LoadL(*iCDSession_v11);
+	
+	tierRecord->SetRecordId(1);
+	tierRecord->LoadL(*iCDSession_vLatest);
+	
+	CMDBRecordLink<CCDAccessPointRecord>* gsDefaultSnap = &(gsRecord->iDefaultSnap);
+	CMDBRecordLink<CCDAccessPointRecord>* tierDefaultAP = &(tierRecord->iDefaultAccessPoint);
+	
+	if ( 2 == *gsDefaultSnap &&
+		 2 == ((*tierDefaultAP & KCDMaskShowRecordId) >> 8) )
+		{
+		*gsDefaultSnap = 1;
+		
+		gsRecord->ModifyL(*iCDSession_v11);
+		
+		gsRecord->SetRecordId(1);
+		gsRecord->LoadL(*iCDSession_v11);
+		
+		tierRecord->SetRecordId(1);
+		tierRecord->LoadL(*iCDSession_vLatest);
+		
+		gsDefaultSnap = &(gsRecord->iDefaultSnap);
+		tierDefaultAP = &(tierRecord->iDefaultAccessPoint);
+		
+		if ( 1 == *gsDefaultSnap &&
+			 1 == ((*tierDefaultAP & KCDMaskShowRecordId) >> 8) )
+			{
+			SetTestStepResult(EPass);
+			}
+		}
+	
+	CleanupStack::PopAndDestroy(tierRecord);
+	CleanupStack::PopAndDestroy(gsRecord);
+		
+	return TestStepResult();
+	}
+
+//IAPPrioritySelectionPolicy mapping
+
+//----------------------------------------------------------------------------------------------------------------
+
+CCommsdat311Step::~CCommsdat311Step()
+/**
+ * Destructor
+ */
+	{
+	delete iCDSession_v11;
+	delete iCDSession_vLatest;
+	}
+
+CCommsdat311Step::CCommsdat311Step()
+/**
+ * Constructor
+ */
+	{
+	SetTestStepName(KCommsdat311Step);                                                                                           
+	}
+
+TVerdict CCommsdat311Step::doTestStepPreambleL()
+/**
+ * @return - TVerdict code
+ * Override of base class pure virtual
+ */
+	{
+    SetTestStepResult(EFail);
+
+    iCDSession_v11 = CMDBSession::NewL(KCDVersion1_1);
+#ifdef SYMBIAN_NON_SEAMLESS_NETWORK_BEARER_MOBILITY
+    iCDSession_vLatest = CMDBSession::NewL(KCDVersion1_2);
+#else
+    iCDSession_vLatest = CMDBSession::NewL(KCDVersion1_1);
+#endif
+
+	SetTestStepResult(EPass);
+	return TestStepResult();
+	}
+
+TVerdict CCommsdat311Step::doTestStepL()
+/**
+ * @return - TVerdict code
+ * Insert 1 more IAP link in to the default IAPPrioritySelectionPolicy record.
+ */
+	{
+	SetTestStepResult(EFail);
+	
+	//first insert the new IAP record. This will trigger the generation of the
+	//linked link level AP.
+	_LIT(KIAPName1, "The new IAP");
+	_LIT(KModemBearerType, "ModemBearer");
+	_LIT(KLANServiceType, "LANService");
+
+	CCDIAPRecord* newIapRecord = static_cast<CCDIAPRecord*>(CCDRecordBase::RecordFactoryL(KCDTIdIAPRecord));
+	CleanupStack::PushL(newIapRecord);
+
+	newIapRecord->SetRecordId(KCDNewRecordRequest);
+    newIapRecord->iRecordName.SetMaxLengthL(KIAPName1().Length());
+    newIapRecord->iRecordName = KIAPName1;
+  	newIapRecord->iBearer = 2;
+  	newIapRecord->iBearerType.SetMaxLengthL(KModemBearerType().Length());
+  	newIapRecord->iBearerType = KModemBearerType;
+  	newIapRecord->iService = 1;
+  	newIapRecord->iServiceType.SetMaxLengthL(KLANServiceType().Length());
+  	newIapRecord->iServiceType = KLANServiceType;
+  	newIapRecord->iLocation = 2;
+  	newIapRecord->iNetworkWeighting = 14;    // dummy value
+  	newIapRecord->iNetwork = 1;
+  	
+	newIapRecord->StoreL(*iCDSession_v11);
+    INFO_PRINTF2(_L("newIapRecord stored. Element id is %08x"), newIapRecord->ElementId());
+	
+    //Now read the default IAPPrioritySelectionPolicy record.
+    CCDIAPPrioritySelectionPolicyRecord *selPolRecord = (CCDIAPPrioritySelectionPolicyRecord *)CCDRecordBase::RecordFactoryL(KCDTIdIapPrioritySelectionPolicyRecord);
+	CleanupStack::PushL(selPolRecord);
+	//We just know that this is the default IAPPrioritySelPol record.
+	selPolRecord->SetRecordId(1);
+
+	selPolRecord->LoadL(*iCDSession_v11);
+	
+	//insert the new IAP link.
+	selPolRecord->iIap2 = newIapRecord->ElementId();
+	selPolRecord->ModifyL(*iCDSession_v11);
+	
+	/*
+	 * Now with the 1_1  session let's read the IAPPrioritySelPol record and with the latest session the mapped
+	 * APPrioritySelPol record. The rule is that the recordIDs of the linked IAP records from the IAPPrioritySelPol
+	 * record should be the same as the CustomSelectionPolicy fields of the linked APs from the mapped APPrioritySelPol
+	 * record.
+	 */
+	
+	//Finding out the elementIds because here we create new containers for the loading of those...
+	TMDBElementId iapSelPolElemId = selPolRecord->ElementId();
+	TMDBElementId apSelPolElemId = 0; 
+	
+	CleanupStack::PopAndDestroy(selPolRecord);
+	CleanupStack::PopAndDestroy(newIapRecord);
+	
+	//search for the mapped APPrioritySelPol record based on the name
+	CMDBField<TDesC>* appriorityNameField = new (ELeave) CMDBField<TDesC>(KCDTIdApPrioritySelectionPolicyRecord | KCDTIdRecordName);
+	CleanupStack::PushL(appriorityNameField);
+	
+	_LIT(KSelName1, "SelectionPolicy1");
+	
+	appriorityNameField->SetMaxLengthL(KSelName1().Length());
+	appriorityNameField->SetL(KSelName1);
+	
+	if ( appriorityNameField->FindL(*iCDSession_vLatest) )
+		{
+		apSelPolElemId = appriorityNameField->ElementId();
+		
+		CCDIAPPrioritySelectionPolicyRecord *iapSelPolRecord = (CCDIAPPrioritySelectionPolicyRecord *)CCDRecordBase::RecordFactoryL(KCDTIdIapPrioritySelectionPolicyRecord);
+		CleanupStack::PushL(iapSelPolRecord);
+		
+		CCDAPPrioritySelectionPolicyRecord *apSelPolRecord = (CCDAPPrioritySelectionPolicyRecord *)CCDRecordBase::RecordFactoryL(KCDTIdApPrioritySelectionPolicyRecord);
+		CleanupStack::PushL(apSelPolRecord);
+		
+		iapSelPolRecord->SetElementId(iapSelPolElemId);
+		apSelPolRecord->SetElementId(apSelPolElemId & ~KCDMaskShowFieldType);
+		
+		iapSelPolRecord->LoadL(*iCDSession_v11);
+		apSelPolRecord->LoadL(*iCDSession_vLatest);
+		
+		CMDBField<TDesC>* iapSelPolFieldName = &(iapSelPolRecord->iRecordName);
+		CMDBField<TDesC>* apSelPolFieldName = &(apSelPolRecord->iRecordName);
+		
+		TPtrC iapSelPolname(*iapSelPolFieldName);
+		TPtrC apSelPolname(*apSelPolFieldName);
+		
+		if (iapSelPolname == apSelPolname &&
+			iapSelPolRecord->iIapCount == apSelPolRecord->iApCount)
+			{
+			//let's check the customSelectionPolicy values of the pointed AP records
+			//from the APPrioritySelPol record
+			CMDBField<TInt>* custSelPol = new (ELeave) CMDBField<TInt>(KCDTIdCustomSelectionPolicy);
+			CleanupStack::PushL(custSelPol);
+			
+			CMDBRecordLink<CCDAccessPointRecord>* apXField = &(apSelPolRecord->iAp1);
+			CMDBRecordLink<CCDIAPRecord>* iapXField = &(iapSelPolRecord->iIap1);
+			TBool recordIDsAreTheSame = ETrue;
+			for (TInt i = 1; i <= apSelPolRecord->iApCount && recordIDsAreTheSame; ++i)
+				{
+				custSelPol->SetRecordId((*apXField & KCDMaskShowRecordId) >> 8);
+				custSelPol->LoadL(*iCDSession_vLatest);
+				if ( *custSelPol != ((*iapXField & KCDMaskShowRecordId) >> 8) )
+					{
+					recordIDsAreTheSame = EFalse;
+					}
+				++apXField;
+				++iapXField;
+				}
+			
+			CleanupStack::PopAndDestroy(custSelPol);
+			
+			if (recordIDsAreTheSame)
+				{
+				SetTestStepResult(EPass);
+				}
+			}
+		
+		CleanupStack::PopAndDestroy(apSelPolRecord);
+		CleanupStack::PopAndDestroy(iapSelPolRecord);
+		}
+	
+    CleanupStack::PopAndDestroy(appriorityNameField);
+	
+	return TestStepResult();
+	}
+
+//----------------------------------------------------------------------------------------------------------------
+
+CCommsdat312Step::~CCommsdat312Step()
+/**
+ * Destructor
+ */
+	{
+	delete iCDSession_v11;
+	delete iCDSession_vLatest;
+	}
+
+CCommsdat312Step::CCommsdat312Step()
+/**
+ * Constructor
+ */
+	{
+	SetTestStepName(KCommsdat312Step);                                                                                           
+	}
+
+TVerdict CCommsdat312Step::doTestStepPreambleL()
+/**
+ * @return - TVerdict code
+ * Override of base class pure virtual
+ */
+	{
+    SetTestStepResult(EFail);
+
+    iCDSession_v11 = CMDBSession::NewL(KCDVersion1_1);
+#ifdef SYMBIAN_NON_SEAMLESS_NETWORK_BEARER_MOBILITY
+    iCDSession_vLatest = CMDBSession::NewL(KCDVersion1_2);
+#else
+    iCDSession_vLatest = CMDBSession::NewL(KCDVersion1_1);
+#endif
+
+	SetTestStepResult(EPass);
+	return TestStepResult();
+	}
+
+TVerdict CCommsdat312Step::doTestStepL()
+/**
+ * @return - TVerdict code
+ * Insert 1 IAP link is deleted form the  IAPPrioritySelectionPolicy record, inserted
+ * in the previous test step.
+ * This test ste is dependent from CCommsdat312Step 
+ */
+	{
+	SetTestStepResult(EFail);
+	
+    CCDIAPPrioritySelectionPolicyRecord *selPolRecord = (CCDIAPPrioritySelectionPolicyRecord *)CCDRecordBase::RecordFactoryL(KCDTIdIapPrioritySelectionPolicyRecord);
+	CleanupStack::PushL(selPolRecord);
+	//We just know that this is the 2nd record.
+	selPolRecord->SetRecordId(2);
+	
+	selPolRecord->LoadL(*iCDSession_v11);
+	
+	//and now let's remove the 2nd IAP link so this will cause a 'hole' in the IAP links in the record.
+	selPolRecord->iIap2 = 0;
+	
+	selPolRecord->ModifyL(*iCDSession_v11);
+	
+	//Finding out the elementIds because here we create new containers for the loading of those...
+	TMDBElementId iapSelPolElemId = selPolRecord->ElementId();
+	TMDBElementId apSelPolElemId = 0; 
+	
+	CleanupStack::PopAndDestroy(selPolRecord);
+	
+	//search for the mapped APPrioritySelPol record based on the name
+	CMDBField<TDesC>* appriorityNameField = new (ELeave) CMDBField<TDesC>(KCDTIdApPrioritySelectionPolicyRecord | KCDTIdRecordName);
+	CleanupStack::PushL(appriorityNameField);
+	
+	_LIT(KSelName1, "SelectionPolicy2");
+		
+	appriorityNameField->SetMaxLengthL(KSelName1().Length());
+	appriorityNameField->SetL(KSelName1);
+	
+	if ( appriorityNameField->FindL(*iCDSession_vLatest) )
+		{
+		apSelPolElemId = appriorityNameField->ElementId();
+		
+		CCDIAPPrioritySelectionPolicyRecord *iapSelPolRecord = (CCDIAPPrioritySelectionPolicyRecord *)CCDRecordBase::RecordFactoryL(KCDTIdIapPrioritySelectionPolicyRecord);
+		CleanupStack::PushL(iapSelPolRecord);
+		
+		CCDAPPrioritySelectionPolicyRecord *apSelPolRecord = (CCDAPPrioritySelectionPolicyRecord *)CCDRecordBase::RecordFactoryL(KCDTIdApPrioritySelectionPolicyRecord);
+		CleanupStack::PushL(apSelPolRecord);
+		
+		iapSelPolRecord->SetElementId(iapSelPolElemId);
+		apSelPolRecord->SetElementId(apSelPolElemId & ~KCDMaskShowFieldType);
+		
+		iapSelPolRecord->LoadL(*iCDSession_v11);
+		apSelPolRecord->LoadL(*iCDSession_vLatest);
+		
+		CMDBField<TDesC>* iapSelPolFieldName = &(iapSelPolRecord->iRecordName);
+		CMDBField<TDesC>* apSelPolFieldName = &(apSelPolRecord->iRecordName);
+		
+		TPtrC iapSelPolname(*iapSelPolFieldName);
+		TPtrC apSelPolname(*apSelPolFieldName);
+		
+		if (iapSelPolname == apSelPolname &&
+			iapSelPolRecord->iIapCount == apSelPolRecord->iApCount)
+			{
+			//let's check the customSelectionPolicy values of the pointed AP records
+			//from the APPrioritySelPol record
+			CMDBField<TInt>* custSelPol = new (ELeave) CMDBField<TInt>(KCDTIdCustomSelectionPolicy);
+			CleanupStack::PushL(custSelPol);
+			
+			CMDBRecordLink<CCDAccessPointRecord>* apXField = &(apSelPolRecord->iAp1);
+			CMDBRecordLink<CCDIAPRecord>* iapXField = &(iapSelPolRecord->iIap1);
+			TBool recordIDsAreTheSame = ETrue;
+			TInt err = 0;
+			for (TInt i = 1; i <= apSelPolRecord->iApCount && recordIDsAreTheSame; ++i)
+				{
+				custSelPol->SetRecordId((*apXField & KCDMaskShowRecordId) >> 8);
+				TRAP(err, custSelPol->LoadL(*iCDSession_vLatest));
+				if (KErrNotFound == err && *iapXField == 0 && *apXField == 0)
+					{
+					//it's ok
+					recordIDsAreTheSame = ETrue;
+					}
+				else if ( *custSelPol != ((*iapXField & KCDMaskShowRecordId) >> 8) )
+					{
+					recordIDsAreTheSame = EFalse;
+					}
+				++apXField;
+				++iapXField;
+				}
+			
+			CleanupStack::PopAndDestroy(custSelPol);
+			
+			if (recordIDsAreTheSame)
+				{
+				SetTestStepResult(EPass);
+				}
+			}
+		
+		CleanupStack::PopAndDestroy(apSelPolRecord);
+		CleanupStack::PopAndDestroy(iapSelPolRecord);
+		}
+	
+    CleanupStack::PopAndDestroy(appriorityNameField);
+	
+	return TestStepResult();
+	}
+
+//----------------------------------------------------------------------------------------------------------------
+
+CCommsdat313Step::~CCommsdat313Step()
+/**
+ * Destructor
+ */
+	{
+	delete iCDSession_v11;
+	delete iCDSession_vLatest;
+	}
+
+CCommsdat313Step::CCommsdat313Step()
+/**
+ * Constructor
+ */
+	{
+	SetTestStepName(KCommsdat313Step);                                                                                           
+	}
+
+TVerdict CCommsdat313Step::doTestStepPreambleL()
+/**
+ * @return - TVerdict code
+ * Override of base class pure virtual
+ */
+	{
+    SetTestStepResult(EFail);
+
+    iCDSession_v11 = CMDBSession::NewL(KCDVersion1_1);
+#ifdef SYMBIAN_NON_SEAMLESS_NETWORK_BEARER_MOBILITY
+    iCDSession_vLatest = CMDBSession::NewL(KCDVersion1_2);
+#else
+    iCDSession_vLatest = CMDBSession::NewL(KCDVersion1_1);
+#endif
+
+	SetTestStepResult(EPass);
+	return TestStepResult();
+	}
+
+TVerdict CCommsdat313Step::doTestStepL()
+/**
+ * @return - TVerdict code
+ * Delete 1 IAPPriorirytSelPol record form the DB - not the default one...
+ */
+	{
+	SetTestStepResult(EFail);
+	
+    CCDIAPPrioritySelectionPolicyRecord *iapSelPolRecord = (CCDIAPPrioritySelectionPolicyRecord *)CCDRecordBase::RecordFactoryL(KCDTIdIapPrioritySelectionPolicyRecord);
+	CleanupStack::PushL(iapSelPolRecord);
+	//We just know that this is the 2nd record.
+	iapSelPolRecord->SetRecordId(2);
+	
+	iapSelPolRecord->LoadL(*iCDSession_v11);
+	
+	CCDAPPrioritySelectionPolicyRecord *apSelPolRecord = (CCDAPPrioritySelectionPolicyRecord *)CCDRecordBase::RecordFactoryL(KCDTIdApPrioritySelectionPolicyRecord);
+	CleanupStack::PushL(apSelPolRecord);
+	
+	apSelPolRecord->SetRecordId(iapSelPolRecord->RecordId());
+	apSelPolRecord->LoadL(*iCDSession_vLatest);
+	
+	RArray<TInt> linkedIAPIds;
+	CleanupClosePushL(linkedIAPIds);
+	
+	CMDBRecordLink<CCDAccessPointRecord>* apXLink = &(apSelPolRecord->iAp1);
+	
+	for (TInt i = 1; i <= apSelPolRecord->iApCount; ++i)
+		{
+		linkedIAPIds.Append(*apXLink);
+		++apXLink;
+		}
+	
+	iapSelPolRecord->DeleteL(*iCDSession_v11);
+	
+	//from this point none the original IAPPrioritySelPol record, nor the mapped APPrioritySelPol record 
+	//should be available. However all of the linked AP records from the APPrioritySelPol 
+	//should be available because as originally there were more thna 1 links to each.
+	TInt err = 0;
+	
+	TRAP(err, iapSelPolRecord->LoadL(*iCDSession_v11));
+	if (KErrNotFound == err)
+		{
+		TRAP(err, apSelPolRecord->LoadL(*iCDSession_vLatest));
+		if (KErrNotFound == err)
+			{
+			CCDAccessPointRecord* apRec = static_cast<CCDAccessPointRecord*>(CCDRecordBase::RecordFactoryL(KCDTIdAccessPointRecord));
+			CleanupStack::PushL(apRec);
+			
+			TInt i = 0;
+			
+			err = KErrNone;
+			
+			for (i = 0; (i < linkedIAPIds.Count()) && (KErrNone == err); ++i)
+				{
+				apRec->SetElementId(linkedIAPIds[i]);
+				TRAP(err, apRec->LoadL(*iCDSession_vLatest));
+				}
+			
+			CleanupStack::PopAndDestroy(apRec);
+			
+			if (KErrNone == err &&
+				i == linkedIAPIds.Count()	)
+				{
+				SetTestStepResult(EPass);
+				}
+			}
+		}
+		
+	CleanupStack::PopAndDestroy(&linkedIAPIds);
+	CleanupStack::PopAndDestroy(apSelPolRecord);
+	CleanupStack::PopAndDestroy(iapSelPolRecord);
+	
+	return TestStepResult();
+	}
+
+//----------------------------------------------------------------------------------------------------------------
+
+CCommsdat314Step::~CCommsdat314Step()
+/**
+ * Destructor
+ */
+	{
+	delete iCDSession_v11;
+	delete iCDSession_vLatest;
+	}
+
+CCommsdat314Step::CCommsdat314Step()
+/**
+ * Constructor
+ */
+	{
+	SetTestStepName(KCommsdat314Step);                                                                                           
+	}
+
+TVerdict CCommsdat314Step::doTestStepPreambleL()
+/**
+ * @return - TVerdict code
+ * Override of base class pure virtual
+ */
+	{
+    SetTestStepResult(EFail);
+
+    iCDSession_v11 = CMDBSession::NewL(KCDVersion1_1);
+#ifdef SYMBIAN_NON_SEAMLESS_NETWORK_BEARER_MOBILITY
+    iCDSession_vLatest = CMDBSession::NewL(KCDVersion1_2);
+#else
+    iCDSession_vLatest = CMDBSession::NewL(KCDVersion1_1);
+#endif
+
+	SetTestStepResult(EPass);
+	return TestStepResult();
+	}
+
+TVerdict CCommsdat314Step::doTestStepL()
+/**
+ * @return - TVerdict code
+ * Delete 1 IAPPriorirytSelPol record form the DB - now the default one...
+ */
+	{
+	SetTestStepResult(EFail);
+	
+    CCDIAPPrioritySelectionPolicyRecord *iapSelPolRecord = (CCDIAPPrioritySelectionPolicyRecord *)CCDRecordBase::RecordFactoryL(KCDTIdIapPrioritySelectionPolicyRecord);
+	CleanupStack::PushL(iapSelPolRecord);
+	//We just know that this is the 1st record.
+	iapSelPolRecord->SetRecordId(1);
+	
+	iapSelPolRecord->LoadL(*iCDSession_v11);
+	
+	CCDAPPrioritySelectionPolicyRecord *apSelPolRecord = (CCDAPPrioritySelectionPolicyRecord *)CCDRecordBase::RecordFactoryL(KCDTIdApPrioritySelectionPolicyRecord);
+	CleanupStack::PushL(apSelPolRecord);
+	
+	apSelPolRecord->SetRecordId(iapSelPolRecord->RecordId());
+	apSelPolRecord->LoadL(*iCDSession_vLatest);
+	
+	RArray<TInt> linkedIAPIds;
+	CleanupClosePushL(linkedIAPIds);
+	
+	CMDBRecordLink<CCDAccessPointRecord>* apXLink = &(apSelPolRecord->iAp1);
+	
+	for (TInt i = 1; i <= apSelPolRecord->iApCount; ++i)
+		{
+		linkedIAPIds.Append(*apXLink);
+		++apXLink;
+		}
+	
+	iapSelPolRecord->DeleteL(*iCDSession_v11);
+	
+	//from this point none the original IAPPrioritySelPol record, nor the mapped APPrioritySelPol record 
+	//can be read. The IPProto TierRecord should point to the default IPProto AP (form the meshpreface file)
+	TInt err = 0;
+	
+	TRAP(err, iapSelPolRecord->LoadL(*iCDSession_v11));
+	if (KErrNotFound == err)
+		{
+		TRAP(err, apSelPolRecord->LoadL(*iCDSession_vLatest));
+		if (KErrNotFound == err)
+			{
+			//default IPProto Tier has to point to the default IPProto AP
+			CCDAccessPointRecord* defIPProtoAPRec = static_cast<CCDAccessPointRecord*>(CCDRecordBase::RecordFactoryL(KCDTIdAccessPointRecord));
+			CleanupStack::PushL(defIPProtoAPRec);
+			
+			defIPProtoAPRec->iCustomSelectionPolicy = CCDAccessPointRecord::KNoPolicy;
+			if (defIPProtoAPRec->FindL(*iCDSession_vLatest))
+				{
+				TPtrC recName(defIPProtoAPRec->iRecordName);
+				_LIT(KIPProtoDefRecName, "IPProtoDefault");
+				
+				if (0 == recName.Compare(KIPProtoDefRecName))
+					{
+					CCDTierRecord* ipprotoTierRec = static_cast<CCDTierRecord*>(CCDRecordBase::RecordFactoryL(KCDTIdTierRecord));
+					CleanupStack::PushL(ipprotoTierRec);
+					
+					//we just know that the given record is the 2nd one (it's possible to do a FindL based
+					//on the IPProto tagId)
+					ipprotoTierRec->SetRecordId(2);
+					ipprotoTierRec->LoadL(*iCDSession_vLatest);
+					
+					if (ipprotoTierRec->iDefaultAccessPoint == (defIPProtoAPRec->ElementId() & ~KCDMaskShowFieldType))
+						{
+						//based on the base configuration no IPProto AP should be deleted...
+						
+						CCDAccessPointRecord* apRec = static_cast<CCDAccessPointRecord*>(CCDRecordBase::RecordFactoryL(KCDTIdAccessPointRecord));
+						CleanupStack::PushL(apRec);
+						
+						TInt i = 0;
+						
+						TInt err = KErrNone;
+						
+						for (i = 0; (i < linkedIAPIds.Count()) && (KErrNone == err); ++i)
+							{
+							apRec->SetElementId(linkedIAPIds[i]);
+							TRAP(err, apRec->LoadL(*iCDSession_vLatest));
+							}
+						
+						CleanupStack::PopAndDestroy(apRec);
+						
+						if (KErrNone == err &&
+							i == linkedIAPIds.Count()	)
+							{
+							SetTestStepResult(EPass);
+							}
+						}
+					CleanupStack::PopAndDestroy(ipprotoTierRec);
+					}
+				}
+			
+			CleanupStack::PopAndDestroy(defIPProtoAPRec);
+			}
+		}
+		
+	CleanupStack::PopAndDestroy(&linkedIAPIds);
+	CleanupStack::PopAndDestroy(apSelPolRecord);
+	CleanupStack::PopAndDestroy(iapSelPolRecord);
+	
+	return TestStepResult();
+	}
+
+//----------------------------------------------------------------------------------------------------------------
+
+CCommsdat315Step::~CCommsdat315Step()
+/**
+ * Destructor
+ */
+	{
+	delete iCDSession_v11;
+	delete iCDSession_vLatest;
+	}
+
+CCommsdat315Step::CCommsdat315Step()
+/**
+ * Constructor
+ */
+	{
+	SetTestStepName(KCommsdat315Step);                                                                                           
+	}
+
+TVerdict CCommsdat315Step::doTestStepPreambleL()
+/**
+ * @return - TVerdict code
+ * Override of base class pure virtual
+ */
+	{
+    SetTestStepResult(EFail);
+
+    iCDSession_v11 = CMDBSession::NewL(KCDVersion1_1);
+#ifdef SYMBIAN_NON_SEAMLESS_NETWORK_BEARER_MOBILITY
+    iCDSession_vLatest = CMDBSession::NewL(KCDVersion1_2);
+#else
+    iCDSession_vLatest = CMDBSession::NewL(KCDVersion1_1);
+#endif
+
+	SetTestStepResult(EPass);
+	return TestStepResult();
+	}
+
+TVerdict CCommsdat315Step::doTestStepL()
+/**
+ * @return - TVerdict code
+ * Modify 1 IAP link through a field container in the 2nd IAPPriorirytSelPol record.
+ */
+	{
+	SetTestStepResult(EFail);
+	
+	CCDIAPRecord* linkedIAP = static_cast<CCDIAPRecord*>(CCDRecordBase::RecordFactoryL(KCDTIdIAPRecord));
+	CleanupStack::PushL(linkedIAP);
+	
+	linkedIAP->SetRecordId(3);
+	linkedIAP->LoadL(*iCDSession_v11);
+	
+	CMDBRecordLink<CCDIAPRecord>* iap5Link = new(ELeave) CMDBRecordLink<CCDIAPRecord>(KCDTIdIap5);
+	CleanupStack::PushL(iap5Link);
+    
+	iap5Link->SetRecordId(2);
+	*iap5Link = linkedIAP->ElementId();
+	
+	//now modify the 2nd IAPPrioritySelPol record through a link container
+	iap5Link->ModifyL(*iCDSession_v11);
+
+	CleanupStack::PopAndDestroy(iap5Link);
+	CleanupStack::PopAndDestroy(linkedIAP);
+	
+	//check the results...
+	CCDIAPPrioritySelectionPolicyRecord* iapSelPolRec = static_cast<CCDIAPPrioritySelectionPolicyRecord*>(CCDRecordBase::RecordFactoryL(KCDTIdIapPrioritySelectionPolicyRecord));
+	CleanupStack::PushL(iapSelPolRec);
+	
+	CCDAPPrioritySelectionPolicyRecord* apSelPolRec = static_cast<CCDAPPrioritySelectionPolicyRecord*>(CCDRecordBase::RecordFactoryL(KCDTIdApPrioritySelectionPolicyRecord));
+	CleanupStack::PushL(apSelPolRec);
+	
+	iapSelPolRec->SetRecordId(2);
+	apSelPolRec->SetRecordId(2);
+	
+	iapSelPolRec->LoadL(*iCDSession_v11);
+	apSelPolRec->LoadL(*iCDSession_vLatest);
+	
+	CMDBField<TDesC>* iapSelPolFieldName = &(iapSelPolRec->iRecordName);
+	CMDBField<TDesC>* apSelPolFieldName = &(apSelPolRec->iRecordName);
+	
+	TPtrC iapSelPolname(*iapSelPolFieldName);
+	TPtrC apSelPolname(*apSelPolFieldName);
+	
+	if (iapSelPolname == apSelPolname &&
+		iapSelPolRec->iIapCount == apSelPolRec->iApCount)
+		{
+		//let's check the customSelectionPolicy values of the pointed AP records
+		//from the APPrioritySelPol record
+		CMDBField<TInt>* custSelPol = new (ELeave) CMDBField<TInt>(KCDTIdCustomSelectionPolicy);
+		CleanupStack::PushL(custSelPol);
+		
+		CMDBRecordLink<CCDAccessPointRecord>* apXField = &(apSelPolRec->iAp1);
+		CMDBRecordLink<CCDIAPRecord>* iapXField = &(iapSelPolRec->iIap1);
+		TBool recordIDsAreTheSame = ETrue;
+		
+		for (TInt i = 1; i <= apSelPolRec->iApCount && recordIDsAreTheSame; ++i)
+			{
+			if (4 == i)
+				{
+				//if we read the 4th link to LoadL should be called
+				if ((0 != *iapXField) || (0 != *apXField))
+					{
+					//the AP4/IAP4 links have to 0!
+					recordIDsAreTheSame = EFalse;
+					break;
+					}
+				}
+			else
+				{
+				custSelPol->SetRecordId((*apXField & KCDMaskShowRecordId) >> 8);
+				custSelPol->LoadL(*iCDSession_vLatest);
+				
+				if ( *custSelPol != ((*iapXField & KCDMaskShowRecordId) >> 8) )
+					{
+					recordIDsAreTheSame = EFalse;
+					}
+				}
+				++apXField;
+				++iapXField;
+			}
+		
+		CleanupStack::PopAndDestroy(custSelPol);
+		
+		if (recordIDsAreTheSame)
+			{
+			SetTestStepResult(EPass);
+			}
+		}
+	
+	CleanupStack::PopAndDestroy(apSelPolRec);
+	CleanupStack::PopAndDestroy(iapSelPolRec);
+	return TestStepResult();
+	}
+#endif // SYMBIAN_NON_SEAMLESS_NETWORK_BEARER_MOBILITY
+
+//----------------------------------------------------------------------------------------------------------------
+#ifdef SYMBIAN_NON_SEAMLESS_NETWORK_BEARER_MOBILITY
+
+CCommsdat316Step::~CCommsdat316Step()
+/**
+ * Destructor
+ */
+	{
+	delete iCDSession_v11;
+	delete iCDSession_vLatest;
+	}
+
+CCommsdat316Step::CCommsdat316Step()
+/**
+ * Constructor
+ */
+	{
+	SetTestStepName(KCommsdat316Step);                                                                                           
+	}
+
+TVerdict CCommsdat316Step::doTestStepPreambleL()
+/**
+ * @return - TVerdict code
+ * Override of base class pure virtual
+ */
+	{
+    SetTestStepResult(EFail);
+
+    iCDSession_v11 = CMDBSession::NewL(KCDVersion1_1);
+    iCDSession_vLatest = NULL;
+
+	SetTestStepResult(EPass);
+	return TestStepResult();
+	}
+
+TVerdict CCommsdat316Step::doTestStepL()
+/**
+ * @return - TVerdict code
+ * Find an IAPPrioritySelPol record based on an IAP link value...
+ * find that link in the IAP/APSelPol table.
+ */
+	{
+	SetTestStepResult(EFail);
+	
+	
+	CMDBRecordLink<CCDIAPRecord>* iap5Link = new(ELeave) CMDBRecordLink<CCDIAPRecord>(KCDTIdIap5);
+	CleanupStack::PushL(iap5Link);
+    
+	iap5Link->SetRecordId(2);
+	*iap5Link = 1;
+	
+	iap5Link->ModifyL(*iCDSession_v11);
+	
+	CleanupStack::PopAndDestroy(iap5Link);
+	
+	CCDIAPPrioritySelectionPolicyRecord* selPolRecord = static_cast<CCDIAPPrioritySelectionPolicyRecord*>(CCDRecordBase::RecordFactoryL(KCDTIdIapPrioritySelectionPolicyRecord));
+	CleanupStack::PushL(selPolRecord);
+	
+	selPolRecord->iIap5 = 1;
+	
+	if (selPolRecord->FindL(*iCDSession_v11))
+		{
+		SetTestStepResult(EPass);
+		}
+	
+	CleanupStack::PopAndDestroy(selPolRecord);
+	
+	
+	return TestStepResult();
+	}
+#endif // SYMBIAN_NON_SEAMLESS_NETWORK_BEARER_MOBILITY
+
+//----------------------------------------------------------------------------------------------------------------
+#ifdef SYMBIAN_NON_SEAMLESS_NETWORK_BEARER_MOBILITY
+
+CCommsdat317Step::~CCommsdat317Step()
+/**
+ * Destructor
+ */
+	{
+	delete iCDSession_v11;
+	delete iCDSession_vLatest;
+	}
+
+CCommsdat317Step::CCommsdat317Step()
+/**
+ * Constructor
+ */
+	{
+	SetTestStepName(KCommsdat317Step);                                                                                           
+	}
+
+TVerdict CCommsdat317Step::doTestStepPreambleL()
+/**
+ * @return - TVerdict code
+ * Override of base class pure virtual
+ */
+	{
+    SetTestStepResult(EFail);
+
+    iCDSession_v11 = CMDBSession::NewL(KCDVersion1_1);
+    iCDSession_vLatest = NULL;
+
+	SetTestStepResult(EPass);
+	return TestStepResult();
+	}
+
+TVerdict CCommsdat317Step::doTestStepL()
+/**
+ * @return - TVerdict code
+ * Find an IAPPrioritySelPol field based on an IAP link value...
+ */
+	{
+	SetTestStepResult(EFail);
+	
+	CMDBRecordLink<CCDIAPRecord>* iapLinkField = new(ELeave) CMDBRecordLink<CCDIAPRecord>(KCDTIdIap3);
+	CleanupStack::PushL(iapLinkField);
+	
+	//this means - give me back the first IAPPrioritySelPol field which has the value of 3
+	*iapLinkField = 3;
+	
+	if (iapLinkField->FindL(*iCDSession_v11))
+		{
+		SetTestStepResult(EPass);
+		}
+	
+	CleanupStack::PopAndDestroy(iapLinkField);
+	
+	
+	return TestStepResult();
+	}
+#endif // SYMBIAN_NON_SEAMLESS_NETWORK_BEARER_MOBILITY
+
+//----------------------------------------------------------------------------------------------------------------
+#ifdef SYMBIAN_NON_SEAMLESS_NETWORK_BEARER_MOBILITY
+
+CCommsdat318Step::~CCommsdat318Step()
+/**
+ * Destructor
+ */
+	{
+	delete iCDSession_v11;
+	delete iCDSession_vLatest;
+	}
+
+CCommsdat318Step::CCommsdat318Step()
+/**
+ * Constructor
+ */
+	{
+	SetTestStepName(KCommsdat318Step);                                                                                           
+	}
+
+TVerdict CCommsdat318Step::doTestStepPreambleL()
+/**
+ * @return - TVerdict code
+ * Override of base class pure virtual
+ */
+	{
+    SetTestStepResult(EFail);
+
+    iCDSession_v11 = CMDBSession::NewL(KCDVersion1_1);
+    iCDSession_vLatest = NULL;
+
+	SetTestStepResult(EPass);
+	return TestStepResult();
+	}
+
+TVerdict CCommsdat318Step::doTestStepL()
+/**
+ * @return - TVerdict code
+ * Load an IAPPrioritySelPol field...
+ */
+	{
+	SetTestStepResult(EFail);
+	
+	CMDBRecordLink<CCDIAPRecord>* iapLinkField = new(ELeave) CMDBRecordLink<CCDIAPRecord>(KCDTIdIap3);
+	CleanupStack::PushL(iapLinkField);
+	
+	iapLinkField->SetRecordId(2);
+	
+	iapLinkField->LoadL(*iCDSession_v11);
+	
+	//there is no leave so it's ok
+	
+	SetTestStepResult(EPass);
+	
+	CleanupStack::PopAndDestroy(iapLinkField);
+	
+	return TestStepResult();
+	}
+
+#endif // SYMBIAN_NON_SEAMLESS_NETWORK_BEARER_MOBILITY
+
+//----------------------------------------------------------------------------------------------------------------
+#ifdef SYMBIAN_NON_SEAMLESS_NETWORK_BEARER_MOBILITY
+
+CCommsdat319Step::~CCommsdat319Step()
+/**
+ * Destructor
+ */
+	{
+	delete iCDSession_v11;
+	delete iCDSession_vLatest;
+	}
+
+CCommsdat319Step::CCommsdat319Step()
+/**
+ * Constructor
+ */
+	{
+	SetTestStepName(KCommsdat319Step);                                                                                           
+	}
+
+TVerdict CCommsdat319Step::doTestStepPreambleL()
+/**
+ * @return - TVerdict code
+ * Override of base class pure virtual
+ */
+	{
+    SetTestStepResult(EFail);
+
+    iCDSession_v11 = CMDBSession::NewL(KCDVersion1_1);
+    iCDSession_vLatest = NULL;
+
+	SetTestStepResult(EPass);
+	return TestStepResult();
+	}
+
+TVerdict CCommsdat319Step::doTestStepL()
+/**
+ * @return - TVerdict code
+ * Delete an IAPPrioritySelPol field...
+ */
+	{
+	SetTestStepResult(EFail);
+	
+	CMDBRecordLink<CCDIAPRecord>* iapLinkField = new(ELeave) CMDBRecordLink<CCDIAPRecord>(KCDTIdIap3);
+	CleanupStack::PushL(iapLinkField);
+	
+	iapLinkField->SetRecordId(2);
+	
+	iapLinkField->DeleteL(*iCDSession_v11);
+	
+	//there is no leave so it's ok
+	
+	SetTestStepResult(EPass);
+	
+	CleanupStack::PopAndDestroy(iapLinkField);
+	
+	return TestStepResult();
+	}
+
+//----------------------------------------------------------------------------------------------------------------
+
+CCommsdat320Step::~CCommsdat320Step()
+/**
+ * Destructor
+ */
+	{
+	delete iCDSession_v11;
+	delete iCDSession_vLatest;
+	}
+
+CCommsdat320Step::CCommsdat320Step()
+/**
+ * Constructor
+ */
+	{
+	SetTestStepName(KCommsdat320Step);                                                                                           
+	}
+
+TVerdict CCommsdat320Step::doTestStepPreambleL()
+/**
+ * @return - TVerdict code
+ * Override of base class pure virtual
+ */
+	{
+    SetTestStepResult(EFail);
+
+    iCDSession_v11 = CMDBSession::NewL(KCDVersion1_1);
+    iCDSession_vLatest = NULL;
+
+	SetTestStepResult(EPass);
+	return TestStepResult();
+	}
+
+TVerdict CCommsdat320Step::doTestStepL()
+/**
+ * @return - TVerdict code
+ * Changing the IAPCount in the IAPPrioritySelPol table and then read it back
+ */
+	{
+	SetTestStepResult(EFail);
+	
+	CMDBField<TUint32>* iapCount = new(ELeave) CMDBField<TUint32>(KCDTIdIapCount);
+	CleanupStack::PushL(iapCount);
+	
+	iapCount->SetRecordId(2);
+	*iapCount = 2;
+	
+	iapCount->ModifyL(*iCDSession_v11);
+	
+	CleanupStack::PopAndDestroy(iapCount);
+	
+	CMDBField<TUint32>* iapCount1 = new(ELeave) CMDBField<TUint32>(KCDTIdIapCount);
+	CleanupStack::PushL(iapCount1);
+	
+	iapCount1->SetRecordId(2);
+	iapCount1->LoadL(*iCDSession_v11);
+	if (2 == *iapCount1)
+		{
+		SetTestStepResult(EPass);
+		}
+	
+	CleanupStack::PopAndDestroy(iapCount1);
+	
+	return TestStepResult();
+	}
+
+// AccessPoint mapping 
+
+//----------------------------------------------------------------------------------------------------------------
+
+CCommsdat321Step::~CCommsdat321Step()
+/**
+ * Destructor
+ */
+	{
+	delete iCDSession_v11;
+	delete iCDSession_vLatest;
+	}
+
+CCommsdat321Step::CCommsdat321Step()
+/**
+ * Constructor
+ */
+	{
+	SetTestStepName(KCommsdat321Step);                                                                                           
+	}
+
+TVerdict CCommsdat321Step::doTestStepPreambleL()
+/**
+ * @return - TVerdict code
+ * Override of base class pure virtual
+ */
+	{
+    SetTestStepResult(EFail);
+
+    iCDSession_v11 = CMDBSession::NewL(KCDVersion1_1);
+    iCDSession_vLatest = NULL;
+
+	SetTestStepResult(EPass);
+	return TestStepResult();
+	}
+
+TVerdict CCommsdat321Step::doTestStepL()
+/**
+ * @return - TVerdict code
+ * Modify the accesspointSelectionPolicy field in the 2nd AccessPoint record 
+ * to point to the 3rd IAPPrioritySelPol record. Modification is made through 
+ * a record container.
+ */
+	{
+	SetTestStepResult(EFail);
+	
+	CCDIAPPrioritySelectionPolicyRecord* selPolRecord = static_cast<CCDIAPPrioritySelectionPolicyRecord*>(CCDRecordBase::RecordFactoryL(KCDTIdIapPrioritySelectionPolicyRecord));
+	CleanupStack::PushL(selPolRecord);
+	
+	selPolRecord->SetRecordId(3);
+	selPolRecord->LoadL(*iCDSession_v11);
+	
+	CCDAccessPointRecord* apRec = static_cast<CCDAccessPointRecord*>(CCDRecordBase::RecordFactoryL(KCDTIdAccessPointRecord));
+	CleanupStack::PushL(apRec);
+	
+	apRec->SetRecordId(2);
+	apRec->LoadL(*iCDSession_v11);
+	
+	apRec->iSelectionPolicy = selPolRecord->ElementId();
+	
+	apRec->ModifyL(*iCDSession_v11);
+	
+	CleanupStack::PopAndDestroy(apRec);
+	CleanupStack::PopAndDestroy(selPolRecord);
+	
+	CCDAccessPointRecord* apRec1 = static_cast<CCDAccessPointRecord*>(CCDRecordBase::RecordFactoryL(KCDTIdAccessPointRecord));
+	CleanupStack::PushL(apRec1);
+		
+	apRec1->SetRecordId(2);
+	apRec1->LoadL(*iCDSession_v11);
+	
+	CMDBRecordLink<CCDSelectionPolicyRecordBase>* selPolField = &(apRec1->iSelectionPolicy);
+	
+	if ( 3 == ((*selPolField & KCDMaskShowRecordId) >> 8) )
+		{
+		SetTestStepResult(EPass);
+		}
+	
+	CleanupStack::PopAndDestroy(apRec1);
+	
+	return TestStepResult();
+	}
+
+//----------------------------------------------------------------------------------------------------------------
+
+CCommsdat322Step::~CCommsdat322Step()
+/**
+ * Destructor
+ */
+	{
+	delete iCDSession_v11;
+	delete iCDSession_vLatest;
+	}
+
+CCommsdat322Step::CCommsdat322Step()
+/**
+ * Constructor
+ */
+	{
+	SetTestStepName(KCommsdat322Step);                                                                                           
+	}
+
+TVerdict CCommsdat322Step::doTestStepPreambleL()
+/**
+ * @return - TVerdict code
+ * Override of base class pure virtual
+ */
+	{
+    SetTestStepResult(EFail);
+
+    iCDSession_v11 = CMDBSession::NewL(KCDVersion1_1);
+    iCDSession_vLatest = NULL;
+
+	SetTestStepResult(EPass);
+	return TestStepResult();
+	}
+
+TVerdict CCommsdat322Step::doTestStepL()
+/**
+ * @return - TVerdict code
+ * Modify the accesspointSelectionPolicy field in the 3rd AccessPoint record 
+ * to point to the 4th IAPPrioritySelPol record. Modification is made through 
+ * a record container but this time without filling the GID field.
+ */
+	{
+	SetTestStepResult(EFail);
+	
+	CCDIAPPrioritySelectionPolicyRecord* selPolRecord = static_cast<CCDIAPPrioritySelectionPolicyRecord*>(CCDRecordBase::RecordFactoryL(KCDTIdIapPrioritySelectionPolicyRecord));
+	CleanupStack::PushL(selPolRecord);
+	
+	selPolRecord->SetRecordId(4);
+	selPolRecord->LoadL(*iCDSession_v11);
+	
+	CCDAccessPointRecord* apRec = static_cast<CCDAccessPointRecord*>(CCDRecordBase::RecordFactoryL(KCDTIdAccessPointRecord));
+	CleanupStack::PushL(apRec);
+	
+	apRec->SetRecordId(3);
+	apRec->iSelectionPolicy = selPolRecord->ElementId();
+	
+	apRec->ModifyL(*iCDSession_v11);
+	
+	CleanupStack::PopAndDestroy(apRec);
+	CleanupStack::PopAndDestroy(selPolRecord);
+	
+	
+	CCDAccessPointRecord* apRec1 = static_cast<CCDAccessPointRecord*>(CCDRecordBase::RecordFactoryL(KCDTIdAccessPointRecord));
+	CleanupStack::PushL(apRec1);
+	
+	apRec1->SetRecordId(3);
+	apRec1->LoadL(*iCDSession_v11);
+	
+	CMDBRecordLink<CCDSelectionPolicyRecordBase>* selPolField = &(apRec1->iSelectionPolicy);
+	
+	if (4 == ((KCDMaskShowRecordId & (*selPolField)) >> 8) &&
+		KCDTIdIapPrioritySelectionPolicyRecord == (KCDMaskShowRecordType & (*selPolField)) )
+		{
+		SetTestStepResult(EPass);
+		}
+	
+	CleanupStack::PopAndDestroy(apRec1);
+	
+	return TestStepResult();
+	}
+
+//----------------------------------------------------------------------------------------------------------------
+
+CCommsdat323Step::~CCommsdat323Step()
+/**
+ * Destructor
+ */
+	{
+	delete iCDSession_v11;
+	delete iCDSession_vLatest;
+	}
+
+CCommsdat323Step::CCommsdat323Step()
+/**
+ * Constructor
+ */
+	{
+	SetTestStepName(KCommsdat323Step);                                                                                           
+	}
+
+TVerdict CCommsdat323Step::doTestStepPreambleL()
+/**
+ * @return - TVerdict code
+ * Override of base class pure virtual
+ */
+	{
+    SetTestStepResult(EFail);
+
+    iCDSession_v11 = CMDBSession::NewL(KCDVersion1_1);
+    iCDSession_vLatest = NULL;
+
+	SetTestStepResult(EPass);
+	return TestStepResult();
+	}
+
+TVerdict CCommsdat323Step::doTestStepL()
+/**
+ * @return - TVerdict code
+ * Modify the accesspointSelectionPolicy field in the 3rd AccessPoint record 
+ * to point to the 4th IAPPrioritySelPol record. Modification is made through 
+ * a field container.
+ */
+	{
+	SetTestStepResult(EFail);
+	
+	CCDIAPPrioritySelectionPolicyRecord* selPolRecord = static_cast<CCDIAPPrioritySelectionPolicyRecord*>(CCDRecordBase::RecordFactoryL(KCDTIdIapPrioritySelectionPolicyRecord));
+	CleanupStack::PushL(selPolRecord);
+	
+	selPolRecord->SetRecordId(4);
+	selPolRecord->LoadL(*iCDSession_v11);
+	
+	CMDBRecordLink<CCDSelectionPolicyRecordBase>* apSelPolField = new(ELeave)CMDBRecordLink<CCDSelectionPolicyRecordBase>(KCDTIdSelectionPolicy); 
+	CleanupStack::PushL(apSelPolField);
+	
+	apSelPolField->SetRecordId(3);
+	*apSelPolField = selPolRecord->ElementId();
+	
+	apSelPolField->ModifyL(*iCDSession_v11);
+	
+	CleanupStack::PopAndDestroy(apSelPolField);
+	CleanupStack::PopAndDestroy(selPolRecord);
+	
+	
+	CMDBRecordLink<CCDSelectionPolicyRecordBase>* apSelPolField1 = new(ELeave)CMDBRecordLink<CCDSelectionPolicyRecordBase>(KCDTIdSelectionPolicy); 
+	CleanupStack::PushL(apSelPolField1);
+	
+	apSelPolField1->SetRecordId(3);
+	apSelPolField1->LoadL(*iCDSession_v11);
+	
+	if (4 == ((KCDMaskShowRecordId & (*apSelPolField1)) >> 8) &&
+		KCDTIdIapPrioritySelectionPolicyRecord == (KCDMaskShowRecordType & (*apSelPolField1)) )
+		{
+		SetTestStepResult(EPass);
+		}
+	
+	CleanupStack::PopAndDestroy(apSelPolField1);
+	
+	return TestStepResult();
+	}
+
+//----------------------------------------------------------------------------------------------------------------
+
+CCommsdat324Step::~CCommsdat324Step()
+/**
+ * Destructor
+ */
+	{
+	delete iCDSession_v11;
+	delete iCDSession_vLatest;
+	}
+
+CCommsdat324Step::CCommsdat324Step()
+/**
+ * Constructor
+ */
+	{
+	SetTestStepName(KCommsdat324Step);                                                                                           
+	}
+
+TVerdict CCommsdat324Step::doTestStepPreambleL()
+/**
+ * @return - TVerdict code
+ * Override of base class pure virtual
+ */
+	{
+    SetTestStepResult(EFail);
+
+    iCDSession_v11 = CMDBSession::NewL(KCDVersion1_1);
+    iCDSession_vLatest = NULL;
+
+	SetTestStepResult(EPass);
+	return TestStepResult();
+	}
+
+TVerdict CCommsdat324Step::doTestStepL()
+/**
+ * @return - TVerdict code
+ * Modify the GID field to the value of 2. Modification is made through 
+ * a field container.
+ */
+	{
+	SetTestStepResult(EFail);
+	CMDBField<TInt>* gidField = new(ELeave)CMDBField<TInt>(KCDTIdAccessPointGID);
+	CleanupStack::PushL(gidField);
+	
+	gidField->SetRecordId(1);
+	*gidField = 2;
+	
+	TRAPD(err, gidField->ModifyL(*iCDSession_v11));
+	if (KErrArgument == err)
+		{
+		SetTestStepResult(EPass);
+		}
+	
+	CleanupStack::PopAndDestroy(gidField);
+	return TestStepResult();
+	}
+
+//----------------------------------------------------------------------------------------------------------------
+
+CCommsdat325Step::~CCommsdat325Step()
+/**
+ * Destructor
+ */
+	{
+	delete iCDSession_v11;
+	delete iCDSession_vLatest;
+	}
+
+CCommsdat325Step::CCommsdat325Step()
+/**
+ * Constructor
+ */
+	{
+	SetTestStepName(KCommsdat325Step);                                                                                           
+	}
+
+TVerdict CCommsdat325Step::doTestStepPreambleL()
+/**
+ * @return - TVerdict code
+ * Override of base class pure virtual
+ */
+	{
+    SetTestStepResult(EFail);
+
+    iCDSession_v11 = CMDBSession::NewL(KCDVersion1_1);
+    iCDSession_vLatest = NULL;
+
+	SetTestStepResult(EPass);
+	return TestStepResult();
+	}
+
+TVerdict CCommsdat325Step::doTestStepL()
+/**
+ * @return - TVerdict code
+ * Modify the name field of the 1st accesspointRec. Modification is made through 
+ * a field container. (this is field is not mapped)
+ */
+	{
+	SetTestStepResult(EFail);
+	_LIT(KName, "Changed AP name field");
+	
+	CMDBField<TDesC>* name = new(ELeave)CMDBField<TDesC>(KCDTIdAccessPointRecord | KCDTIdRecordName);
+	CleanupStack::PushL(name);
+	
+	name->SetRecordId(1);
+	name->SetMaxLengthL(KName().Length());
+	name->SetL(KName);
+		
+	name->ModifyL(*iCDSession_v11);
+	
+	CleanupStack::PopAndDestroy(name);
+	
+	CMDBField<TDesC>* name1 = new(ELeave)CMDBField<TDesC>(KCDTIdAccessPointRecord | KCDTIdRecordName);
+	CleanupStack::PushL(name1);
+	
+	name1->SetMaxLengthL(KName().Length());
+	name1->SetL(KName);
+		
+	if ( name1->FindL(*iCDSession_v11) )
+		{
+		TPtrC name(*name1);
+		if (0 == name.Compare(KName))
+			{
+			SetTestStepResult(EPass);
+			}
+		}
+	
+	CleanupStack::PopAndDestroy(name1);
+	
+	return TestStepResult();
+	}
+
+//----------------------------------------------------------------------------------------------------------------
+
+CCommsdat326Step::~CCommsdat326Step()
+/**
+ * Destructor
+ */
+	{
+	delete iCDSession_v11;
+	delete iCDSession_vLatest;
+	}
+
+CCommsdat326Step::CCommsdat326Step()
+/**
+ * Constructor
+ */
+	{
+	SetTestStepName(KCommsdat326Step);                                                                                           
+	}
+
+TVerdict CCommsdat326Step::doTestStepPreambleL()
+/**
+ * @return - TVerdict code
+ * Override of base class pure virtual
+ */
+	{
+    SetTestStepResult(EFail);
+
+    iCDSession_v11 = CMDBSession::NewL(KCDVersion1_1);
+    iCDSession_vLatest = NULL;
+
+	SetTestStepResult(EPass);
+	return TestStepResult();
+	}
+
+TVerdict CCommsdat326Step::doTestStepL()
+/**
+ * @return - TVerdict code
+ * Modify the GID field to the value of 2. Modification is made through 
+ * a record container.
+ */
+	{
+	SetTestStepResult(EFail);
+	
+	CCDAccessPointRecord* apRecord = static_cast<CCDAccessPointRecord*>(CCDRecordBase::RecordFactoryL(KCDTIdAccessPointRecord));
+	CleanupStack::PushL(apRecord);
+	
+	apRecord->SetRecordId(1);
+	apRecord->iAccessPointGID = 2;
+	
+	TRAPD(err, apRecord->ModifyL(*iCDSession_v11));
+	
+	if (KErrArgument == err)
+		{
+		SetTestStepResult(EPass);
+		}
+	
+	CleanupStack::PopAndDestroy(apRecord);
+	
+	return TestStepResult();
+	}
+
+//----------------------------------------------------------------------------------------------------------------
+
+CCommsdat327Step::~CCommsdat327Step()
+/**
+ * Destructor
+ */
+	{
+	delete iCDSession_v11;
+	delete iCDSession_vLatest;
+	}
+
+CCommsdat327Step::CCommsdat327Step()
+/**
+ * Constructor
+ */
+	{
+	SetTestStepName(KCommsdat327Step);                                                                                           
+	}
+
+TVerdict CCommsdat327Step::doTestStepPreambleL()
+/**
+ * @return - TVerdict code
+ * Override of base class pure virtual
+ */
+	{
+    SetTestStepResult(EFail);
+
+    iCDSession_v11 = CMDBSession::NewL(KCDVersion1_1);
+    iCDSession_vLatest = NULL;
+
+	SetTestStepResult(EPass);
+	return TestStepResult();
+	}
+
+TVerdict CCommsdat327Step::doTestStepL()
+/**
+ * @return - TVerdict code
+ * Modify the name field of the 1st accesspointRec. Modification is made through 
+ * a record container. (this is field is not mapped)
+ */
+	{
+	SetTestStepResult(EFail);
+	
+	CCDAccessPointRecord* apRecord = static_cast<CCDAccessPointRecord*>(CCDRecordBase::RecordFactoryL(KCDTIdAccessPointRecord));
+	CleanupStack::PushL(apRecord);
+	
+	apRecord->SetRecordId(1);
+
+	_LIT(KName, "Changed AP name field");
+	apRecord->iRecordName.SetMaxLengthL(KName().Length());
+	apRecord->iRecordName.SetL(KName);
+		
+	apRecord->ModifyL(*iCDSession_v11);
+	
+	CleanupStack::PopAndDestroy(apRecord);
+	
+	
+	CCDAccessPointRecord* apRecord1 = static_cast<CCDAccessPointRecord*>(CCDRecordBase::RecordFactoryL(KCDTIdAccessPointRecord));
+	CleanupStack::PushL(apRecord1);
+	
+	apRecord1->iRecordName.SetMaxLengthL(KName().Length());
+	apRecord1->iRecordName.SetL(KName);
+		
+	if (apRecord1->FindL(*iCDSession_v11))
+		{
+		TPtrC name(apRecord1->iRecordName);
+		if (0 == name.Compare(KName))
+			{
+			SetTestStepResult(EPass);
+			}
+		}
+	
+	CleanupStack::PopAndDestroy(apRecord);
+	
+	return TestStepResult();
+	}
+
+//----------------------------------------------------------------------------------------------------------------
+
+CCommsdat328Step::~CCommsdat328Step()
+/**
+ * Destructor
+ */
+	{
+	delete iCDSession_v11;
+	delete iCDSession_vLatest;
+	}
+
+CCommsdat328Step::CCommsdat328Step()
+/**
+ * Constructor
+ */
+	{
+	SetTestStepName(KCommsdat328Step);                                                                                           
+	}
+
+TVerdict CCommsdat328Step::doTestStepPreambleL()
+/**
+ * @return - TVerdict code
+ * Override of base class pure virtual
+ */
+	{
+    SetTestStepResult(EFail);
+
+    iCDSession_v11 = CMDBSession::NewL(KCDVersion1_1);
+    iCDSession_vLatest = NULL;
+
+	SetTestStepResult(EPass);
+	return TestStepResult();
+	}
+
+TVerdict CCommsdat328Step::doTestStepL()
+/**
+ * @return - TVerdict code
+ * Find the 1st AP record based on the linked IAPPrioritySelPol elementId. The find is made
+ * through a record container.
+ */
+	{
+	SetTestStepResult(EFail);
+	
+	CCDAccessPointRecord* apRecord = static_cast<CCDAccessPointRecord*>(CCDRecordBase::RecordFactoryL(KCDTIdAccessPointRecord));
+	CleanupStack::PushL(apRecord);
+	
+	apRecord->iSelectionPolicy = (KCDTIdIapPrioritySelectionPolicyRecord | (1 << 8));
+		
+	if (apRecord->FindL(*iCDSession_v11))
+		{
+		TPtrC recName(apRecord->iRecordName);
+		_LIT(KRecName, "SNAP1");
+		
+		if (1 == apRecord->RecordId() &&
+			0 == recName.Compare(KRecName))
+			{
+			SetTestStepResult(EPass);
+			}
+		}
+	
+	CleanupStack::PopAndDestroy(apRecord);
+	
+	return TestStepResult();
+	}
+
+//----------------------------------------------------------------------------------------------------------------
+
+CCommsdat329Step::~CCommsdat329Step()
+/**
+ * Destructor
+ */
+	{
+	delete iCDSession_v11;
+	delete iCDSession_vLatest;
+	}
+
+CCommsdat329Step::CCommsdat329Step()
+/**
+ * Constructor
+ */
+	{
+	SetTestStepName(KCommsdat329Step);                                                                                           
+	}
+
+TVerdict CCommsdat329Step::doTestStepPreambleL()
+/**
+ * @return - TVerdict code
+ * Override of base class pure virtual
+ */
+	{
+    SetTestStepResult(EFail);
+
+    iCDSession_v11 = CMDBSession::NewL(KCDVersion1_1);
+    iCDSession_vLatest = NULL;
+
+	SetTestStepResult(EPass);
+	return TestStepResult();
+	}
+
+TVerdict CCommsdat329Step::doTestStepL()
+/**
+ * @return - TVerdict code
+ * Find the 1st AP record based on the linked IAPPrioritySelPol elementId. The find is made
+ * through a field container.
+ */
+	{
+	SetTestStepResult(EFail);
+	CMDBRecordLink<CCDSelectionPolicyRecordBase>* selPolField = new(ELeave)CMDBRecordLink<CCDSelectionPolicyRecordBase>(KCDTIdSelectionPolicy);
+	CleanupStack::PushL(selPolField);
+	
+	*selPolField = (KCDTIdIapPrioritySelectionPolicyRecord | (1 << 8));
+	if (selPolField->FindL(*iCDSession_v11))
+		{
+		if (1 == selPolField->RecordId())
+			{
+			SetTestStepResult(EPass);
+			}
+		}
+	
+	CleanupStack::PopAndDestroy(selPolField);
+	
+	return TestStepResult();
+	}
+
+//----------------------------------------------------------------------------------------------------------------
+
+CCommsdat330Step::~CCommsdat330Step()
+/**
+ * Destructor
+ */
+	{
+	delete iCDSession_v11;
+	delete iCDSession_vLatest;
+	}
+
+CCommsdat330Step::CCommsdat330Step()
+/**
+ * Constructor
+ */
+	{
+	SetTestStepName(KCommsdat330Step);                                                                                           
+	}
+
+TVerdict CCommsdat330Step::doTestStepPreambleL()
+/**
+ * @return - TVerdict code
+ * Override of base class pure virtual
+ */
+	{
+    SetTestStepResult(EFail);
+
+    iCDSession_v11 = CMDBSession::NewL(KCDVersion1_1);
+    iCDSession_vLatest = NULL;
+
+	SetTestStepResult(EPass);
+	return TestStepResult();
+	}
+
+TVerdict CCommsdat330Step::doTestStepL()
+/**
+ * @return - TVerdict code
+ * Delete the selPol link in the 1st AP record. The delete is made through a field container.
+ */
+	{
+	SetTestStepResult(EFail);
+	CMDBRecordLink<CCDSelectionPolicyRecordBase>* selPolField = new(ELeave)CMDBRecordLink<CCDSelectionPolicyRecordBase>(KCDTIdSelectionPolicy);
+	CleanupStack::PushL(selPolField);
+	
+	selPolField->SetRecordId(1);
+	
+	selPolField->DeleteL(*iCDSession_v11);
+	
+	CleanupStack::PopAndDestroy(selPolField);
+
+	
+	CCDAccessPointRecord* apRec = static_cast<CCDAccessPointRecord*>(CCDRecordBase::RecordFactoryL(KCDTIdAccessPointRecord));
+	CleanupStack::PushL(apRec);
+	
+	apRec->SetRecordId(1);
+	apRec->LoadL(*iCDSession_v11);
+	
+	if (NULL == apRec->iSelectionPolicy)
+		{
+		SetTestStepResult(EPass);
+		}
+	
+	CleanupStack::PopAndDestroy(apRec);
+	
+	return TestStepResult();
+	}
+
+//----------------------------------------------------------------------------------------------------------------
+
+CCommsdat331Step::~CCommsdat331Step()
+/**
+ * Destructor
+ */
+	{
+	delete iCDSession_v11;
+	delete iCDSession_vLatest;
+	}
+
+CCommsdat331Step::CCommsdat331Step()
+/**
+ * Constructor
+ */
+	{
+	SetTestStepName(KCommsdat331Step);                                                                                           
+	}
+
+TVerdict CCommsdat331Step::doTestStepPreambleL()
+/**
+ * @return - TVerdict code
+ * Override of base class pure virtual
+ */
+	{
+    SetTestStepResult(EFail);
+
+    iCDSession_v11 = CMDBSession::NewL(KCDVersion1_1);
+    iCDSession_vLatest = NULL;
+
+	SetTestStepResult(EPass);
+	return TestStepResult();
+	}
+
+TVerdict CCommsdat331Step::doTestStepL()
+/**
+ * @return - TVerdict code
+ * Delete the 2nd AP record. The delete is made through a record container.
+ */
+	{
+	SetTestStepResult(EFail);	
+	CCDAccessPointRecord* apRec = static_cast<CCDAccessPointRecord*>(CCDRecordBase::RecordFactoryL(KCDTIdAccessPointRecord));
+	CleanupStack::PushL(apRec);
+	
+	apRec->SetRecordId(2);
+	apRec->DeleteL(*iCDSession_v11);
+	
+	CleanupStack::PopAndDestroy(apRec);
+	
+	CCDAccessPointRecord* apRec1 = static_cast<CCDAccessPointRecord*>(CCDRecordBase::RecordFactoryL(KCDTIdAccessPointRecord));
+	CleanupStack::PushL(apRec1);
+	
+	apRec1->SetRecordId(2);
+	apRec1->LoadL(*iCDSession_v11);
+	
+	if ( NULL == apRec1->iAccessPointGID &&
+	     NULL == apRec1->iSelectionPolicy )
+		{
+		//although LoadL didn't leave no data is read from the database.
+		SetTestStepResult(EPass);
+		}
+	
+	CleanupStack::PopAndDestroy(apRec1);
+	
+	return TestStepResult();
+	}
+
+#endif // SYMBIAN_NON_SEAMLESS_NETWORK_BEARER_MOBILITY
+//----------------------------------------------------------------------------------------------------------------
+#ifdef SYMBIAN_NON_SEAMLESS_NETWORK_BEARER_MOBILITY
+
+CCommsdat3311Step::~CCommsdat3311Step()
+/**
+ * Destructor
+ */
+	{
+	delete iCDSession_v11;
+	delete iCDSession_vLatest;
+	}
+
+CCommsdat3311Step::CCommsdat3311Step()
+/**
+ * Constructor
+ */
+	{
+	SetTestStepName(KCommsdat3311Step);                                                                                           
+	}
+
+TVerdict CCommsdat3311Step::doTestStepPreambleL()
+/**
+ * @return - TVerdict code
+ * Override of base class pure virtual
+ */
+	{
+    SetTestStepResult(EFail);
+
+    iCDSession_v11 = CMDBSession::NewL(KCDVersion1_1);
+#ifdef SYMBIAN_NON_SEAMLESS_NETWORK_BEARER_MOBILITY
+    iCDSession_vLatest = CMDBSession::NewL(KCDVersion1_2);
+#else
+    iCDSession_vLatest = CMDBSession::NewL(KCDVersion1_1);
+#endif
+
+	SetTestStepResult(EPass);
+	return TestStepResult();
+	}
+
+TVerdict CCommsdat3311Step::doTestStepL()
+/**
+ * @return - TVerdict code
+ * Insert a new IAP link into the record one - the same as IAP1.
+ * Insert is called on a field container.
+ * 
+ * No new IPProto AP should be generated and the new link should be inserted into
+ * the record.
+ */
+	{
+	SetTestStepResult(EFail);
+	
+	const TInt KIPProtoTierLink = 0x11800200;
+	
+	CMDBField<TInt>* iap2Link = new(ELeave)CMDBField<TInt>(KCDTIdIap2);
+	CleanupStack::PushL(iap2Link);
+	
+	iap2Link->SetRecordId(1);
+	*iap2Link = 1;
+	iap2Link->ModifyL(*iCDSession_v11);
+	
+	//The IPProto AP number is 4 because we have 3 generated APs and
+	//we have the default one as well in the DB...
+	if ( 4 == GetAPNumberL(KIPProtoTierLink, iCDSession_vLatest) )
+		{
+		CCDIAPPrioritySelectionPolicyRecord* iapSelPolRec = static_cast<CCDIAPPrioritySelectionPolicyRecord*>(CCDRecordBase::RecordFactoryL(KCDTIdIapPrioritySelectionPolicyRecord));
+		CleanupStack::PushL(iapSelPolRec);
+		
+		iapSelPolRec->SetRecordId(1);
+		iapSelPolRec->LoadL(*iCDSession_v11);
+		
+		TInt iap1 = iapSelPolRec->iIap1;
+		TInt iap2 = iapSelPolRec->iIap2;
+		
+		if (iap1 == iap2 &&
+			2 == iapSelPolRec->iIapCount)
+			{
+			SetTestStepResult(EPass);
+			}
+		
+		CleanupStack::PopAndDestroy(iapSelPolRec);
+		}
+	
+	CleanupStack::PopAndDestroy(iap2Link);
+	return TestStepResult();
+	}
+
+#endif // SYMBIAN_NON_SEAMLESS_NETWORK_BEARER_MOBILITY
+
+//----------------------------------------------------------------------------------------------------------------
+#ifdef SYMBIAN_NON_SEAMLESS_NETWORK_BEARER_MOBILITY
+
+CCommsdat3312Step::~CCommsdat3312Step()
+/**
+ * Destructor
+ */
+	{
+	delete iCDSession_v11;
+	delete iCDSession_vLatest;
+	}
+
+CCommsdat3312Step::CCommsdat3312Step()
+/**
+ * Constructor
+ */
+	{
+	SetTestStepName(KCommsdat3312Step);                                                                                           
+	}
+
+TVerdict CCommsdat3312Step::doTestStepPreambleL()
+/**
+ * @return - TVerdict code
+ * Override of base class pure virtual
+ */
+	{
+    SetTestStepResult(EFail);
+
+    iCDSession_v11 = CMDBSession::NewL(KCDVersion1_1);
+#ifdef SYMBIAN_NON_SEAMLESS_NETWORK_BEARER_MOBILITY
+    iCDSession_vLatest = CMDBSession::NewL(KCDVersion1_2);
+#else
+    iCDSession_vLatest = CMDBSession::NewL(KCDVersion1_1);
+#endif
+
+	SetTestStepResult(EPass);
+	return TestStepResult();
+	}
+
+TVerdict CCommsdat3312Step::doTestStepL()
+/**
+ * @return - TVerdict code
+ * Now deleted the previously inserted IAP link form the record one.
+ * 
+ * No IPProto AP should be deleted only the link
+ */
+	{
+	SetTestStepResult(EFail);
+	
+	const TInt KIPProtoTierLink = 0x11800200;
+	
+	CMDBField<TInt>* iap2Link = new(ELeave)CMDBField<TInt>(KCDTIdIap2);
+	CleanupStack::PushL(iap2Link);
+	
+	iap2Link->SetRecordId(1);
+	//*iap2Link = 1;
+	iap2Link->DeleteL(*iCDSession_v11);
+	
+	CleanupStack::PopAndDestroy(iap2Link);
+	
+	//The IPProto AP number is 4 because we have 3 generated APs and
+	//we have the default one as well in the DB...
+	if ( 4 == GetAPNumberL(KIPProtoTierLink, iCDSession_vLatest) )
+		{
+		CCDIAPPrioritySelectionPolicyRecord* iapSelPolRec = static_cast<CCDIAPPrioritySelectionPolicyRecord*>(CCDRecordBase::RecordFactoryL(KCDTIdIapPrioritySelectionPolicyRecord));
+		CleanupStack::PushL(iapSelPolRec);
+		
+		iapSelPolRec->SetRecordId(1);
+		iapSelPolRec->LoadL(*iCDSession_v11);
+		
+		TInt iap1 = iapSelPolRec->iIap1;
+		TInt iap2 = iapSelPolRec->iIap2;
+		
+		if (iap1 &&
+		    NULL == iap2 &&
+			1 == iapSelPolRec->iIapCount)
+			{
+			SetTestStepResult(EPass);
+			}
+		
+		CleanupStack::PopAndDestroy(iapSelPolRec);
+		}
+	
+	return TestStepResult();
+	}
+
+#endif // SYMBIAN_NON_SEAMLESS_NETWORK_BEARER_MOBILITY
+//----------------------------------------------------------------------------------------------------------------
+#ifdef SYMBIAN_NON_SEAMLESS_NETWORK_BEARER_MOBILITY
+
+CCommsdat3313Step::~CCommsdat3313Step()
+/**
+ * Destructor
+ */
+	{
+	delete iCDSession_v11;
+	delete iCDSession_vLatest;
+	}
+
+CCommsdat3313Step::CCommsdat3313Step()
+/**
+ * Constructor
+ */
+	{
+	SetTestStepName(KCommsdat3313Step);                                                                                           
+	}
+
+TVerdict CCommsdat3313Step::doTestStepPreambleL()
+/**
+ * @return - TVerdict code
+ * Override of base class pure virtual
+ */
+	{
+    SetTestStepResult(EFail);
+
+    iCDSession_v11 = CMDBSession::NewL(KCDVersion1_1);
+#ifdef SYMBIAN_NON_SEAMLESS_NETWORK_BEARER_MOBILITY
+    iCDSession_vLatest = CMDBSession::NewL(KCDVersion1_2);
+#else
+    iCDSession_vLatest = CMDBSession::NewL(KCDVersion1_1);
+#endif
+
+	SetTestStepResult(EPass);
+	return TestStepResult();
+	}
+
+TVerdict CCommsdat3313Step::doTestStepL()
+/**
+ * @return - TVerdict code
+ * Delete the default IAPPrioritySelPol record. As a result the default IPProto
+ * AP should be linked from the IPProto Tier record and from the defualt APPriotySelPol record.
+ * The default APPrioritySelPol record should be linked form the Network default AP.
+ */
+	{
+	SetTestStepResult(EFail);
+	
+	const TInt KIPProtoTierLink = 0x11800200;
+	
+	CCDIAPPrioritySelectionPolicyRecord* defIAPPrioritySelPolRec = static_cast<CCDIAPPrioritySelectionPolicyRecord*>(CCDRecordBase::RecordFactoryL(KCDTIdIapPrioritySelectionPolicyRecord));
+	CleanupStack::PushL(defIAPPrioritySelPolRec);
+	//we just know form the config file that the default IAPPrioritySelPol rec is the 1st one
+	
+	defIAPPrioritySelPolRec->SetRecordId(1);
+	defIAPPrioritySelPolRec->DeleteL(*iCDSession_v11);
+	
+	CleanupStack::PopAndDestroy(defIAPPrioritySelPolRec);
+	
+	CCDAccessPointRecord* ipprotoDefAPRec = static_cast<CCDAccessPointRecord*>(CCDRecordBase::RecordFactoryL(KCDTIdAccessPointRecord));
+	CleanupStack::PushL(ipprotoDefAPRec);
+	
+	ipprotoDefAPRec->iCustomSelectionPolicy = CCDAccessPointRecord::KNoPolicy;
+	ipprotoDefAPRec->FindL(*iCDSession_vLatest);
+	
+	CCDTierRecord* ipprotoTierRec = static_cast<CCDTierRecord*>(CCDRecordBase::RecordFactoryL(KCDTIdTierRecord));
+	CleanupStack::PushL(ipprotoTierRec);
+	
+	ipprotoTierRec->SetElementId(KIPProtoTierLink);
+	ipprotoTierRec->LoadL(*iCDSession_vLatest);
+	
+	if (ipprotoTierRec->iDefaultAccessPoint == (ipprotoDefAPRec->ElementId() & ~KCDMaskShowFieldType))
+		{
+		SetTestStepResult(EPass);
+		}
+	
+	CleanupStack::PopAndDestroy(ipprotoTierRec);
+	CleanupStack::PopAndDestroy(ipprotoDefAPRec);
+	
+	return TestStepResult();
+	}
+#endif // SYMBIAN_NON_SEAMLESS_NETWORK_BEARER_MOBILITY
+
+//----------------------------------------------------------------------------------------------------------------
+#ifdef SYMBIAN_NON_SEAMLESS_NETWORK_BEARER_MOBILITY
+
+CCommsdat3314Step::~CCommsdat3314Step()
+/**
+ * Destructor
+ */
+	{
+	delete iCDSession_v11;
+	delete iCDSession_vLatest;
+	}
+
+CCommsdat3314Step::CCommsdat3314Step()
+/**
+ * Constructor
+ */
+	{
+	SetTestStepName(KCommsdat3314Step);                                                                                           
+	}
+
+TVerdict CCommsdat3314Step::doTestStepPreambleL()
+/**
+ * @return - TVerdict code
+ * Override of base class pure virtual
+ */
+	{
+    SetTestStepResult(EFail);
+
+    iCDSession_v11 = CMDBSession::NewL(KCDVersion1_1);
+#ifdef SYMBIAN_NON_SEAMLESS_NETWORK_BEARER_MOBILITY
+    iCDSession_vLatest = CMDBSession::NewL(KCDVersion1_2);
+#else
+    iCDSession_vLatest = CMDBSession::NewL(KCDVersion1_1);
+#endif
+
+	SetTestStepResult(EPass);
+	return TestStepResult();
+	}
+
+TVerdict CCommsdat3314Step::doTestStepL()
+/**
+ * @return - TVerdict code
+ * Delete the 1st link from the default IAPPrioritySelPol record. As a result the default IPProto
+ * AP should be linked from the IPProto Tier record and from the defualt APPriotySelPol record.
+ * The default APPrioritySelPol record should be linked form the Network default AP.
+ */
+	{
+	SetTestStepResult(EFail);
+	
+	const TInt KIPProtoTierLink = 0x11800200;
+	
+	CMDBField<TInt>* defIAPPrioritySelPolLink = new(ELeave)CMDBField<TInt>(KCDTIdIap1);
+	CleanupStack::PushL(defIAPPrioritySelPolLink);
+	//we just know form the config file that the default IAPPrioritySelPol rec is the 1st one
+	
+	defIAPPrioritySelPolLink->SetRecordId(1);
+	defIAPPrioritySelPolLink->DeleteL(*iCDSession_v11);
+	
+	CleanupStack::PopAndDestroy(defIAPPrioritySelPolLink);
+	
+	CCDAccessPointRecord* ipprotoDefAPRec = static_cast<CCDAccessPointRecord*>(CCDRecordBase::RecordFactoryL(KCDTIdAccessPointRecord));
+	CleanupStack::PushL(ipprotoDefAPRec);
+	
+	ipprotoDefAPRec->iCustomSelectionPolicy = CCDAccessPointRecord::KNoPolicy;
+	ipprotoDefAPRec->FindL(*iCDSession_vLatest);
+	
+	CCDTierRecord* ipprotoTierRec = static_cast<CCDTierRecord*>(CCDRecordBase::RecordFactoryL(KCDTIdTierRecord));
+	CleanupStack::PushL(ipprotoTierRec);
+	
+	ipprotoTierRec->SetElementId(KIPProtoTierLink);
+	ipprotoTierRec->LoadL(*iCDSession_vLatest);
+	
+	if (ipprotoTierRec->iDefaultAccessPoint == (ipprotoDefAPRec->ElementId() & ~KCDMaskShowFieldType))
+		{
+		CCDAPPrioritySelectionPolicyRecord* defAPPrioritySelPolRec = static_cast<CCDAPPrioritySelectionPolicyRecord*>(CCDRecordBase::RecordFactoryL(KCDTIdApPrioritySelectionPolicyRecord));
+		CleanupStack::PushL(defAPPrioritySelPolRec);
+		//we just know form the config file that the default IAPPrioritySelPol rec is the 1st one
+		
+		defAPPrioritySelPolRec->SetRecordId(1);
+		defAPPrioritySelPolRec->LoadL(*iCDSession_vLatest);
+		
+		if (0 == defAPPrioritySelPolRec->iApCount)
+			{
+			SetTestStepResult(EPass);
+			}
+		CleanupStack::PopAndDestroy(defAPPrioritySelPolRec);
+		}
+	
+	CleanupStack::PopAndDestroy(ipprotoTierRec);
+	CleanupStack::PopAndDestroy(ipprotoDefAPRec);
+	
+	return TestStepResult();
+	}
+#endif // SYMBIAN_NON_SEAMLESS_NETWORK_BEARER_MOBILITY
+//----------------------------------------------------------------------------------------------------------------
+
+#ifdef SYMBIAN_NON_SEAMLESS_NETWORK_BEARER_MOBILITY
+
+CCommsdat3315Step::~CCommsdat3315Step()
+/**
+ * Destructor
+ */
+	{
+	delete iCDSession_v11;
+	delete iCDSession_vLatest;
+	}
+
+CCommsdat3315Step::CCommsdat3315Step()
+/**
+ * Constructor
+ */
+	{
+	SetTestStepName(KCommsdat3315Step);                                                                                           
+	}
+
+TVerdict CCommsdat3315Step::doTestStepPreambleL()
+/**
+ * @return - TVerdict code
+ * Override of base class pure virtual
+ */
+	{
+    SetTestStepResult(EFail);
+
+    iCDSession_v11 = CMDBSession::NewL(KCDVersion1_1);
+#ifdef SYMBIAN_NON_SEAMLESS_NETWORK_BEARER_MOBILITY
+    iCDSession_vLatest = CMDBSession::NewL(KCDVersion1_2);
+#else
+    iCDSession_vLatest = CMDBSession::NewL(KCDVersion1_1);
+#endif
+
+	SetTestStepResult(EPass);
+	return TestStepResult();
+	}
+
+TVerdict CCommsdat3315Step::doTestStepL()
+/**
+ * @return - TVerdict code
+ * This test step modifies the 1st IAPLink in the default IAPPrioritySelPol record
+ * to 0.
+ * 
+ * Modify is called on field container.
+ */
+	{
+	SetTestStepResult(EFail);
+	
+	const TInt KIPProtoTierLink = 0x11800200;
+	
+	CMDBField<TInt>* defIAPPrioritySelPolLink = new(ELeave)CMDBField<TInt>(KCDTIdIap1);
+	CleanupStack::PushL(defIAPPrioritySelPolLink);
+	//we just know form the config file that the default IAPPrioritySelPol rec is the 1st one
+	
+	defIAPPrioritySelPolLink->SetRecordId(1);
+	*defIAPPrioritySelPolLink = 0;
+	defIAPPrioritySelPolLink->ModifyL(*iCDSession_v11);
+	
+	CleanupStack::PopAndDestroy(defIAPPrioritySelPolLink);
+	
+	CCDAccessPointRecord* ipprotoDefAPRec = static_cast<CCDAccessPointRecord*>(CCDRecordBase::RecordFactoryL(KCDTIdAccessPointRecord));
+	CleanupStack::PushL(ipprotoDefAPRec);
+	
+	ipprotoDefAPRec->iCustomSelectionPolicy = CCDAccessPointRecord::KNoPolicy;
+	ipprotoDefAPRec->FindL(*iCDSession_vLatest);
+	
+	CCDTierRecord* ipprotoTierRec = static_cast<CCDTierRecord*>(CCDRecordBase::RecordFactoryL(KCDTIdTierRecord));
+	CleanupStack::PushL(ipprotoTierRec);
+	
+	ipprotoTierRec->SetElementId(KIPProtoTierLink);
+	ipprotoTierRec->LoadL(*iCDSession_vLatest);
+	
+	if (ipprotoTierRec->iDefaultAccessPoint == (ipprotoDefAPRec->ElementId() & ~KCDMaskShowFieldType))
+		{
+		CCDAPPrioritySelectionPolicyRecord* defAPPrioritySelPolRec = static_cast<CCDAPPrioritySelectionPolicyRecord*>(CCDRecordBase::RecordFactoryL(KCDTIdApPrioritySelectionPolicyRecord));
+		CleanupStack::PushL(defAPPrioritySelPolRec);
+		//we just know form the config file that the default IAPPrioritySelPol rec is the 1st one
+		
+		defAPPrioritySelPolRec->SetRecordId(1);
+		defAPPrioritySelPolRec->LoadL(*iCDSession_vLatest);
+		
+		if (0 == defAPPrioritySelPolRec->iApCount)
+			{
+			SetTestStepResult(EPass);
+			}
+		CleanupStack::PopAndDestroy(defAPPrioritySelPolRec);
+		}
+	
+	CleanupStack::PopAndDestroy(ipprotoTierRec);
+	CleanupStack::PopAndDestroy(ipprotoDefAPRec);
+	
+	return TestStepResult();
+	}
+
+//----------------------------------------------------------------------------------------------------------------
+
+CCommsdat3316Step::~CCommsdat3316Step()
+/**
+ * Destructor
+ */
+	{
+	delete iCDSession_v11;
+	delete iCDSession_vLatest;
+	}
+
+CCommsdat3316Step::CCommsdat3316Step()
+/**
+ * Constructor
+ */
+	{
+	SetTestStepName(KCommsdat3316Step);                                                                                           
+	}
+
+TVerdict CCommsdat3316Step::doTestStepPreambleL()
+/**
+ * @return - TVerdict code
+ * Override of base class pure virtual
+ */
+	{
+    SetTestStepResult(EFail);
+
+    iCDSession_v11 = CMDBSession::NewL(KCDVersion1_1);
+#ifdef SYMBIAN_NON_SEAMLESS_NETWORK_BEARER_MOBILITY
+    iCDSession_vLatest = CMDBSession::NewL(KCDVersion1_2);
+#else
+    iCDSession_vLatest = CMDBSession::NewL(KCDVersion1_1);
+#endif
+
+	SetTestStepResult(EPass);
+	return TestStepResult();
+	}
+
+TVerdict CCommsdat3316Step::doTestStepL()
+/**
+ * @return - TVerdict code
+ * This test step modifies the 2nd IAPLink in the 2nd IAPPrioritySelPol record
+ * (not the default one) to 0.
+ * 
+ * Modify is called on field container.
+ * This teststep is depending on CCommsdat3315Step
+ */
+	{
+	SetTestStepResult(EFail);
+	
+	const TInt KIPProtoTierLink = 0x11800200;
+	
+	CMDBField<TInt>* defIAPPrioritySelPolLink = new(ELeave)CMDBField<TInt>(KCDTIdIap2);
+	CleanupStack::PushL(defIAPPrioritySelPolLink);
+	
+	defIAPPrioritySelPolLink->SetRecordId(2);
+	*defIAPPrioritySelPolLink = 0;
+	defIAPPrioritySelPolLink->ModifyL(*iCDSession_v11);
+	
+	CleanupStack::PopAndDestroy(defIAPPrioritySelPolLink);
+	
+	if (4 == GetAPNumberL(KIPProtoTierLink, iCDSession_vLatest))
+		{
+		CCDAPPrioritySelectionPolicyRecord* aPPrioritySelPolRec = static_cast<CCDAPPrioritySelectionPolicyRecord*>(CCDRecordBase::RecordFactoryL(KCDTIdApPrioritySelectionPolicyRecord));
+		CleanupStack::PushL(aPPrioritySelPolRec);
+		
+		aPPrioritySelPolRec->SetRecordId(2);
+		aPPrioritySelPolRec->LoadL(*iCDSession_vLatest);
+		
+		if ( NULL != aPPrioritySelPolRec->iAp1 &&
+		     NULL == aPPrioritySelPolRec->iAp2 &&
+		     NULL != aPPrioritySelPolRec->iAp3 &&
+		     3 == aPPrioritySelPolRec->iApCount )
+			{
+			SetTestStepResult(EPass);
+			}
+		CleanupStack::PopAndDestroy(aPPrioritySelPolRec);
+		}
+	
+	return TestStepResult();
+	}
+
+#endif // SYMBIAN_NON_SEAMLESS_NETWORK_BEARER_MOBILITY
+
+//----------------------------------------------------------------------------------------------------------------
+
+#ifdef SYMBIAN_NON_SEAMLESS_NETWORK_BEARER_MOBILITY
+
+CCommsdat3317Step::~CCommsdat3317Step()
+/**
+ * Destructor
+ */
+	{
+	delete iCDSession_v11;
+	delete iCDSession_vLatest;
+	}
+
+CCommsdat3317Step::CCommsdat3317Step()
+/**
+ * Constructor
+ */
+	{
+	SetTestStepName(KCommsdat3317Step);                                                                                           
+	}
+
+TVerdict CCommsdat3317Step::doTestStepPreambleL()
+/**
+ * @return - TVerdict code
+ * Override of base class pure virtual
+ */
+	{
+    SetTestStepResult(EFail);
+
+    iCDSession_v11 = CMDBSession::NewL(KCDVersion1_1);
+#ifdef SYMBIAN_NON_SEAMLESS_NETWORK_BEARER_MOBILITY
+    iCDSession_vLatest = CMDBSession::NewL(KCDVersion1_2);
+#else
+    iCDSession_vLatest = CMDBSession::NewL(KCDVersion1_1);
+#endif
+
+	SetTestStepResult(EPass);
+	return TestStepResult();
+	}
+
+TVerdict CCommsdat3317Step::doTestStepL()
+/**
+ * @return - TVerdict code
+ * This test step modifies the 3rd IAPLink in the 3rd IAPPrioritySelPol record
+ * (not the default one) to 0. Note that this is the last reference to the given
+ * IPProto AP -> so as a result of the modification the given IPProto AP will be
+ * deleted.
+ * 
+ * Modify is called on record container.
+ * This teststep is depending on CCommsdat3316Step
+ */
+	{
+	SetTestStepResult(EFail);
+	
+	const TInt KIPProtoTierLink = 0x11800200;
+	
+	CCDIAPPrioritySelectionPolicyRecord* iAPPrioritySelPolRec = static_cast<CCDIAPPrioritySelectionPolicyRecord*>(CCDRecordBase::RecordFactoryL(KCDTIdIapPrioritySelectionPolicyRecord));
+	CleanupStack::PushL(iAPPrioritySelPolRec);
+	
+	iAPPrioritySelPolRec->SetRecordId(3);
+	iAPPrioritySelPolRec->LoadL(*iCDSession_v11);
+	
+	iAPPrioritySelPolRec->iIap3 = 0;
+	
+	iAPPrioritySelPolRec->ModifyL(*iCDSession_v11);
+	
+	CleanupStack::PopAndDestroy(iAPPrioritySelPolRec);
+	
+	if (3 == GetAPNumberL(KIPProtoTierLink, iCDSession_vLatest))
+		{
+		CCDAPPrioritySelectionPolicyRecord* aPPrioritySelPolRec = static_cast<CCDAPPrioritySelectionPolicyRecord*>(CCDRecordBase::RecordFactoryL(KCDTIdApPrioritySelectionPolicyRecord));
+		CleanupStack::PushL(aPPrioritySelPolRec);
+		
+		aPPrioritySelPolRec->SetRecordId(3);
+		aPPrioritySelPolRec->LoadL(*iCDSession_vLatest);
+		
+		if ( NULL != aPPrioritySelPolRec->iAp1 &&
+		     NULL != aPPrioritySelPolRec->iAp2 &&
+		     NULL == aPPrioritySelPolRec->iAp3 &&
+		     2 == aPPrioritySelPolRec->iApCount )
+			{
+			SetTestStepResult(EPass);
+			}
+		CleanupStack::PopAndDestroy(aPPrioritySelPolRec);
+		}
+	
+	return TestStepResult();
+	}
+
+#endif // SYMBIAN_NON_SEAMLESS_NETWORK_BEARER_MOBILITY
+
+//----------------------------------------------------------------------------------------------------------------
+
+#ifdef SYMBIAN_NON_SEAMLESS_NETWORK_BEARER_MOBILITY
+
+CCommsdat3318Step::~CCommsdat3318Step()
+/**
+ * Destructor
+ */
+	{
+	delete iCDSession_v11;
+	delete iCDSession_vLatest;
+	}
+
+CCommsdat3318Step::CCommsdat3318Step()
+/**
+ * Constructor
+ */
+	{
+	SetTestStepName(KCommsdat3318Step);                                                                                           
+	}
+
+TVerdict CCommsdat3318Step::doTestStepPreambleL()
+/**
+ * @return - TVerdict code
+ * Override of base class pure virtual
+ */
+	{
+    SetTestStepResult(EFail);
+
+    iCDSession_v11 = CMDBSession::NewL(KCDVersion1_1);
+#ifdef SYMBIAN_NON_SEAMLESS_NETWORK_BEARER_MOBILITY
+    iCDSession_vLatest = CMDBSession::NewL(KCDVersion1_2);
+#else
+    iCDSession_vLatest = CMDBSession::NewL(KCDVersion1_1);
+#endif
+
+	SetTestStepResult(EPass);
+	return TestStepResult();
+	}
+
+TVerdict CCommsdat3318Step::doTestStepL()
+/**
+ * @return - TVerdict code
+ * This test step delets the 1st IAP link form the 1st IAPPriotySelPol record
+ * (the default one). At this point the AP link in the IPProto tier record points
+ * to the default IPProto AP.
+ * After this the 1st IAP link in the 1st IAPPrioritySelPol record is modified
+ * again to point to a valid IAP.
+ * 
+ * The AP link in the IPProto tier has to be modified as well to point to the 
+ * right IPProto AP. 
+ * 
+ * Modify is called on field container.
+ */
+	{
+	SetTestStepResult(EFail);
+	
+	const TInt KIAPNumber = 3;
+	TBool keepGoing = EFalse;
+	
+	CMDBField<TInt>* defIAPPrioritySelPolLink = new(ELeave)CMDBField<TInt>(KCDTIdIap1);
+	CleanupStack::PushL(defIAPPrioritySelPolLink);
+	
+	defIAPPrioritySelPolLink->SetRecordId(1);
+	defIAPPrioritySelPolLink->DeleteL(*iCDSession_v11);
+	
+	CleanupStack::PopAndDestroy(defIAPPrioritySelPolLink);
+	
+	CCDAccessPointRecord* defApRec = static_cast<CCDAccessPointRecord*>(CCDRecordBase::RecordFactoryL(KCDTIdAccessPointRecord));
+	CleanupStack::PushL(defApRec);
+	
+	defApRec->iCustomSelectionPolicy = CCDAccessPointRecord::KNoPolicy;
+	
+	if (defApRec->FindL(*iCDSession_vLatest))
+		{
+		CCDTierRecord* ipprotoTierRec = static_cast<CCDTierRecord*>(CCDRecordBase::RecordFactoryL(KCDTIdTierRecord));
+		CleanupStack::PushL(ipprotoTierRec);
+		
+		ipprotoTierRec->SetRecordId(2);
+		ipprotoTierRec->LoadL(*iCDSession_vLatest);
+		
+		if (ipprotoTierRec->iDefaultAccessPoint == (defApRec->ElementId() & ~KCDMaskShowFieldType))
+			{
+			keepGoing = ETrue;
+			}
+		
+		CleanupStack::PopAndDestroy(ipprotoTierRec);
+		}
+	CleanupStack::PopAndDestroy(defApRec);
+	
+	
+	if (keepGoing)
+		{
+		//do the modification
+		CMDBField<TInt>* defIAPPrioritySelPolLink1 = new(ELeave)CMDBField<TInt>(KCDTIdIap1);
+		CleanupStack::PushL(defIAPPrioritySelPolLink1);
+		
+		defIAPPrioritySelPolLink1->SetRecordId(1);
+		*defIAPPrioritySelPolLink1 = KIAPNumber;
+		
+		defIAPPrioritySelPolLink1->ModifyL(*iCDSession_v11);
+		
+		CleanupStack::PopAndDestroy(defIAPPrioritySelPolLink1);
+		
+		CCDAPPrioritySelectionPolicyRecord* defAPPrioritySelPolRec = static_cast<CCDAPPrioritySelectionPolicyRecord*>(CCDRecordBase::RecordFactoryL(KCDTIdApPrioritySelectionPolicyRecord));
+		CleanupStack::PushL(defAPPrioritySelPolRec);
+		
+		//we just know that it's the 1st record...
+		defAPPrioritySelPolRec->SetRecordId(1);
+		defAPPrioritySelPolRec->LoadL(*iCDSession_vLatest);
+		
+		CCDTierRecord* ipprotoTierRec = static_cast<CCDTierRecord*>(CCDRecordBase::RecordFactoryL(KCDTIdTierRecord));
+		CleanupStack::PushL(ipprotoTierRec);
+		
+		ipprotoTierRec->SetRecordId(2);
+		ipprotoTierRec->LoadL(*iCDSession_vLatest);
+		
+		TInt aPFromTheIPProtoTier = ipprotoTierRec->iDefaultAccessPoint;
+		TInt defAPPriorioritySelPolLink = defAPPrioritySelPolRec->iAp1;
+		
+		if (aPFromTheIPProtoTier == defAPPriorioritySelPolLink)
+			{
+			//ok the 2 links are the same. Now let's load the IPProto AP and check
+			//its' CustomSelectionPolicy. It has to be the same as the IAP number we
+			//modified the IAPPriorioritySelPol field with
+			CCDAccessPointRecord* apRec = static_cast<CCDAccessPointRecord*>(CCDRecordBase::RecordFactoryL(KCDTIdAccessPointRecord));
+			CleanupStack::PushL(apRec);
+			
+			apRec->SetElementId(aPFromTheIPProtoTier);
+			apRec->LoadL(*iCDSession_vLatest);
+			
+			if (KIAPNumber == apRec->iCustomSelectionPolicy)
+				{
+				SetTestStepResult(EPass);
+				}
+			
+			CleanupStack::PopAndDestroy(apRec);
+			}
+		
+		CleanupStack::PopAndDestroy(ipprotoTierRec);
+		CleanupStack::PopAndDestroy(defAPPrioritySelPolRec);
+		}
+	
+	return TestStepResult();
+	}
+
+#endif // SYMBIAN_NON_SEAMLESS_NETWORK_BEARER_MOBILITY
+
+//----------------------------------------------------------------------------------------------------------------
+
+#ifdef SYMBIAN_NON_SEAMLESS_NETWORK_BEARER_MOBILITY
+
+CCommsdat3319Step::~CCommsdat3319Step()
+/**
+ * Destructor
+ */
+	{
+	delete iCDSession_v11;
+	delete iCDSession_vLatest;
+	}
+
+CCommsdat3319Step::CCommsdat3319Step()
+/**
+ * Constructor
+ */
+	{
+	SetTestStepName(KCommsdat3319Step);                                                                                           
+	}
+
+TVerdict CCommsdat3319Step::doTestStepPreambleL()
+/**
+ * @return - TVerdict code
+ * Override of base class pure virtual
+ */
+	{
+    SetTestStepResult(EFail);
+
+    iCDSession_v11 = CMDBSession::NewL(KCDVersion1_1);
+#ifdef SYMBIAN_NON_SEAMLESS_NETWORK_BEARER_MOBILITY
+    iCDSession_vLatest = CMDBSession::NewL(KCDVersion1_2);
+#else
+    iCDSession_vLatest = CMDBSession::NewL(KCDVersion1_1);
+#endif
+
+	SetTestStepResult(EPass);
+	return TestStepResult();
+	}
+
+TVerdict CCommsdat3319Step::doTestStepL()
+/**
+ * @return - TVerdict code
+ * This test step delets the 1st IAP link form the 1st IAPPriotySelPol record
+ * (the default one). At this point the AP link in the IPProto tier record points
+ * to the default IPProto AP.
+ * After this the 1st IAP link in the 1st IAPPrioritySelPol record is modified
+ * again to point to a valid IAP.
+ * 
+ * The AP link in the IPProto tier has to be modified as well to point to the 
+ * right IPProto AP. 
+ * 
+ * Modify is called on record container.
+ */
+	{
+	SetTestStepResult(EFail);
+	
+	const TInt KIAPNumber = 3;
+	TBool keepGoing = EFalse;
+	
+	CCDIAPPrioritySelectionPolicyRecord* iAPPrioritySelPolRec = static_cast<CCDIAPPrioritySelectionPolicyRecord*>(CCDRecordBase::RecordFactoryL(KCDTIdIapPrioritySelectionPolicyRecord));
+	CleanupStack::PushL(iAPPrioritySelPolRec);
+	
+	iAPPrioritySelPolRec->SetRecordId(1);
+	iAPPrioritySelPolRec->DeleteL(*iCDSession_v11);
+	
+	CleanupStack::PopAndDestroy(iAPPrioritySelPolRec);
+	
+	CCDAccessPointRecord* defApRec = static_cast<CCDAccessPointRecord*>(CCDRecordBase::RecordFactoryL(KCDTIdAccessPointRecord));
+	CleanupStack::PushL(defApRec);
+	
+	defApRec->iCustomSelectionPolicy = CCDAccessPointRecord::KNoPolicy;
+	
+	if (defApRec->FindL(*iCDSession_vLatest))
+		{
+		CCDTierRecord* ipprotoTierRec = static_cast<CCDTierRecord*>(CCDRecordBase::RecordFactoryL(KCDTIdTierRecord));
+		CleanupStack::PushL(ipprotoTierRec);
+		
+		ipprotoTierRec->SetRecordId(2);
+		ipprotoTierRec->LoadL(*iCDSession_vLatest);
+		
+		if (ipprotoTierRec->iDefaultAccessPoint == (defApRec->ElementId() & ~KCDMaskShowFieldType))
+			{
+			keepGoing = ETrue;
+			}
+		
+		CleanupStack::PopAndDestroy(ipprotoTierRec);
+		}
+	CleanupStack::PopAndDestroy(defApRec);
+	
+	
+	if (keepGoing)
+		{
+		//do the modification
+		CCDIAPPrioritySelectionPolicyRecord* iAPPrioritySelPolRec1 = static_cast<CCDIAPPrioritySelectionPolicyRecord*>(CCDRecordBase::RecordFactoryL(KCDTIdIapPrioritySelectionPolicyRecord));
+		CleanupStack::PushL(iAPPrioritySelPolRec1);
+		
+		iAPPrioritySelPolRec1->SetRecordId(1);
+		iAPPrioritySelPolRec1->iIap1 = KIAPNumber;
+		
+		iAPPrioritySelPolRec1->ModifyL(*iCDSession_v11);
+		
+		CleanupStack::PopAndDestroy(iAPPrioritySelPolRec1);
+		
+		CCDAPPrioritySelectionPolicyRecord* defAPPrioritySelPolRec = static_cast<CCDAPPrioritySelectionPolicyRecord*>(CCDRecordBase::RecordFactoryL(KCDTIdApPrioritySelectionPolicyRecord));
+		CleanupStack::PushL(defAPPrioritySelPolRec);
+		
+		//we just know that it's the 1st record...
+		defAPPrioritySelPolRec->SetRecordId(1);
+		defAPPrioritySelPolRec->LoadL(*iCDSession_vLatest);
+		
+		CCDTierRecord* ipprotoTierRec = static_cast<CCDTierRecord*>(CCDRecordBase::RecordFactoryL(KCDTIdTierRecord));
+		CleanupStack::PushL(ipprotoTierRec);
+		
+		ipprotoTierRec->SetRecordId(2);
+		ipprotoTierRec->LoadL(*iCDSession_vLatest);
+		
+		TInt aPFromTheIPProtoTier = ipprotoTierRec->iDefaultAccessPoint;
+		TInt defAPPriorioritySelPolLink = defAPPrioritySelPolRec->iAp1;
+		
+		if (aPFromTheIPProtoTier == defAPPriorioritySelPolLink)
+			{
+			//ok the 2 links are the same. Now let's load the IPProto AP and check
+			//its' CustomSelectionPolicy. It has to be the same as the IAP number we
+			//modified the IAPPriorioritySelPol field with
+			CCDAccessPointRecord* apRec = static_cast<CCDAccessPointRecord*>(CCDRecordBase::RecordFactoryL(KCDTIdAccessPointRecord));
+			CleanupStack::PushL(apRec);
+			
+			apRec->SetElementId(aPFromTheIPProtoTier);
+			apRec->LoadL(*iCDSession_vLatest);
+			
+			if (KIAPNumber == apRec->iCustomSelectionPolicy)
+				{
+				SetTestStepResult(EPass);
+				}
+			
+			CleanupStack::PopAndDestroy(apRec);
+			}
+		
+		CleanupStack::PopAndDestroy(ipprotoTierRec);
+		CleanupStack::PopAndDestroy(defAPPrioritySelPolRec);
+		}
+	
+	return TestStepResult();
+	}
+
+#endif // SYMBIAN_NON_SEAMLESS_NETWORK_BEARER_MOBILITY