datacommsserver/esockserver/commsdataobjects/test/src/testapp.cpp
changeset 0 dfb7c4ff071f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/datacommsserver/esockserver/commsdataobjects/test/src/testapp.cpp	Thu Dec 17 09:22:25 2009 +0200
@@ -0,0 +1,469 @@
+// Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+#include <e32base.h>
+#include <c32comm.h>
+#include <c32root.h>
+#include <es_sock.h>
+#include <comms-infras/es_commsdataobject.h>
+#include <connpref.h>
+#include <CommDbConnPref.h>
+#include <metadatabase.h>
+#include <commsdattypeinfov1_1.h>
+#include <comms-infras/connectionqueryset.h>
+#include <comms-infras/ss_commsdataobject.h>
+#include <ecom/ecom.h>
+
+#include "queryconnsettingstiermgrimpl.h"
+#include "noddyqueryconnsettingsimpl.h"
+
+using namespace ESock;
+
+	
+void Test0cL()
+	{
+	// ---------------------------------------------------------------------
+	// Creating the query
+	// ---------------------------------------------------------------------
+	XConnectionQuerySet* querySet = XConnectionQuerySet::NewL();
+	CleanupDeletePushL(querySet);
+
+	XConnectionQueryBase* query;
+	query = XText8Query::NewL(CommsDat::KCDTIdPortName, *querySet);
+	query = XText16Query::NewL(CommsDat::KCDTIdNifName, *querySet);
+	query = XText16Query::NewL(CommsDat::KCDTIdTsyName, *querySet);
+	query = XBoolQuery::NewL(CommsDat::KCDTIdIpAddrFromServer, *querySet);
+	query = XUintQuery::NewL(CommsDat::KCDTIdLastSessionClosedTimeout, *querySet);
+	query = XBoolQuery::NewL(CommsDat::KCDTIdIfPromptForAuth, *querySet);
+
+	CleanupStack::PopAndDestroy(querySet);
+	}
+	
+	
+void Test1L()
+	{
+	// ---------------------------------------------------------------------
+	// Creating the query
+	// ---------------------------------------------------------------------
+	
+	XConnectionQuerySet* querySet = XConnectionQuerySet::NewL();
+	CleanupDeletePushL(querySet);
+
+	XConnectionQueryBase* query;
+	query = XText8Query::NewL(CommsDat::KCDTIdPortName, *querySet);
+	query = XText16Query::NewL(CommsDat::KCDTIdNifName, *querySet);
+	query = XText16Query::NewL(CommsDat::KCDTIdTsyName, *querySet);
+	query = XBoolQuery::NewL(CommsDat::KCDTIdIpAddrFromServer, *querySet);
+	query = XUintQuery::NewL(CommsDat::KCDTIdLastSessionClosedTimeout, *querySet);
+	query = XBoolQuery::NewL(CommsDat::KCDTIdIfPromptForAuth, *querySet);
+
+
+	// ---------------------------------------------------------------------
+	// Serialisation/Deserialisation Test
+	// ---------------------------------------------------------------------
+	CConnectionQuerySet* cdo = CConnectionQuerySet::NewL(querySet);
+	CleanupStack::Pop(querySet);
+	CleanupStack::PushL(cdo);
+	
+	TInt length = cdo->Length();
+	HBufC8* buffer = HBufC8::NewLC(length);
+	if (!buffer) 
+		{
+		User::Leave(KErrNoMemory);
+		}
+
+
+	TPtr8 storePtr(buffer->Des());
+	TInt ret = cdo->Store(storePtr);
+	User::LeaveIfError(ret);
+	
+
+	// Load using Load()
+	TPtrC8 loadPtr = buffer->Des();
+	CConnectionQuerySet* outputContainer = CConnectionQuerySet::LoadL(loadPtr);
+	
+	delete outputContainer;
+
+	CleanupStack::PopAndDestroy(buffer);
+	CleanupStack::PopAndDestroy(cdo);
+	}
+
+
+
+void Test3L()
+	{
+	// ---------------------------------------------------------------------
+	// Creating the query
+	// ---------------------------------------------------------------------
+	
+	CNoddyQueryConnSettingsImpl* impl = new (ELeave)CNoddyQueryConnSettingsImpl();
+	CleanupStack::PushL(impl);
+	
+	XConnectionQuerySet* querySet = XConnectionQuerySet::NewL();
+	CleanupDeletePushL(querySet);
+
+	XConnectionQueryBase* query;
+	query = XText8Query::NewL(CommsDat::KCDTIdPortName, *querySet);
+	query = XText16Query::NewL(CommsDat::KCDTIdNifName, *querySet);
+	query = XBoolQuery::NewL(CommsDat::KCDTIdIpAddrFromServer, *querySet);
+	query = XUintQuery::NewL(CommsDat::KCDTIdLastSessionClosedTimeout, *querySet);
+	query = XIntQuery::NewL(CommsDat::KCDTIdIfPromptForAuth, *querySet);
+
+
+	querySet->DispatchL(static_cast<MQueryConnSettingsApiExt*>(impl), NULL);
+
+	
+	// ---------------------------------------------------------------------
+	// Testing the iterators
+	// ---------------------------------------------------------------------
+	TConnectionQueryIter iter1(querySet->GetQueryIter(XConnectionQueryBase::ENotAnswered));
+	TInt count = 0;
+	query = NULL;
+	query = iter1++;
+	while (query) 
+		{
+		count++;
+		query = iter1++;;
+		}
+	ASSERT(count == 1);
+
+
+	TConnectionQueryIter iter2(querySet->GetQueryIter(XConnectionQueryBase::EAnswered));
+	count = 0;
+	query = NULL;
+	query = iter2++;
+	while (query) 
+		{
+		count++;
+		query = iter2++;
+		}
+	ASSERT(count == 4);
+
+	
+	CleanupStack::PopAndDestroy(querySet);
+	CleanupStack::PopAndDestroy(impl);
+	}
+
+	
+	
+
+void Test4L()
+	{
+	// ---------------------------------------------------------------------
+	// Creating the query
+	// ---------------------------------------------------------------------
+	
+	CQueryConnSettingsTierMgrImpl* impl = CQueryConnSettingsTierMgrImpl::NewL(1);
+	CleanupStack::PushL(impl);
+	
+	XConnectionQuerySet* querySet = XConnectionQuerySet::NewL();
+	CleanupDeletePushL(querySet);
+
+	XConnectionQueryBase* query;
+	query = XUintQuery::NewL(CommsDat::KCDTIdIAPRecord | CommsDat::KCDTIdRecordTag, *querySet);
+	query = XText16Query::NewL(CommsDat::KCDTIdIAPRecord | CommsDat::KCDTIdRecordName, *querySet);
+	query = XUintQuery::NewL(CommsDat::KCDTIdIAPLocation, *querySet);
+
+	query = XText8Query::NewL(CommsDat::KCDTIdPortName, *querySet);
+	query = XText16Query::NewL(CommsDat::KCDTIdNifName, *querySet);
+	query = XBoolQuery::NewL(CommsDat::KCDTIdIpAddrFromServer, *querySet);
+	query = XUintQuery::NewL(CommsDat::KCDTIdLastSessionClosedTimeout, *querySet);
+	query = XIntQuery::NewL(CommsDat::KCDTIdIfPromptForAuth, *querySet);
+
+
+	querySet->DispatchL(static_cast<MQueryConnSettingsApiExt*>(impl), NULL);
+
+	TBuf8<200> des8;
+	TBuf16<200> des16;
+	TBool b;
+	TInt i(0x0F0F0F0F);
+	TUint32 ui(0xF0F0F0F0);
+
+	TInt count = 0;
+	// Option 1 - Iterate through the query results
+	TConnectionQueryIter iter (querySet->GetQueryIter(XConnectionQueryBase::EAnswered));
+	const XConnectionQueryBase* qBase = iter++;
+	while (qBase) 
+		{
+		count++;
+		// Do something with query/data
+		switch (qBase->Type()) 
+			{
+			case XConnectionQueryBase::EInt:
+				{
+				const XIntQuery* qInt = static_cast<const XIntQuery*>(qBase);
+				i = qInt->Data();
+				}
+				break;
+
+			case XConnectionQueryBase::EUint:
+				{
+				const XUintQuery* qUInt = static_cast<const XUintQuery*>(qBase);
+				ui = qUInt->Data();
+				}
+				break;
+
+			case XConnectionQueryBase::EBool:
+				{
+				const XBoolQuery* qBool = static_cast<const XBoolQuery*>(qBase);
+				b = qBool->Data();
+				}
+				break;
+
+			case XConnectionQueryBase::EText8:
+				{
+				const XText8Query* qText8 = static_cast<const XText8Query*>(qBase);
+				des8 = qText8->Data();
+				}
+				break;
+
+			case XConnectionQueryBase::EText16:
+				{
+				const XText16Query* qText16 = static_cast<const XText16Query*>(qBase);
+				des16 = qText16->Data();
+				}
+				break;
+			}
+			
+		qBase = iter++;
+		}
+	
+	CleanupStack::PopAndDestroy(querySet);
+	CleanupStack::PopAndDestroy(impl);
+	}
+
+
+/*
+void Test4L()
+	{
+	// ---------------------------------------------------------------------
+	// Creating the query
+	// ---------------------------------------------------------------------
+	
+	XConnectionQuerySet* querySet = XConnectionQuerySet::NewL();
+	CleanupDeletePushL(querySet);
+
+	XConnectionQueryBase* query;
+	query = XText8Query::NewL(CommsDat::KCDTIdPortName, *querySet);
+	query = XText16Query::NewL(CommsDat::KCDTIdNifName, *querySet);
+	query = XText16Query::NewL(CommsDat::KCDTIdTsyName, *querySet);
+	query = XBoolQuery::NewL(CommsDat::KCDTIdIpAddrFromServer, *querySet);
+	query = XUintQuery::NewL(CommsDat::KCDTIdLastSessionClosedTimeout, *querySet);
+	query = XBoolQuery::NewL(CommsDat::KCDTIdIfPromptForAuth, *querySet);
+
+
+	// ---------------------------------------------------------------------
+	// Testing Find Query/Setting Data/Answered
+	// ---------------------------------------------------------------------
+	XText8Query* text8Query;
+	text8Query = static_cast<XText8Query*>(querySet->FindQuery(CommsDat::KCDTIdPortName));
+//	text8Query->SetData(_L8("oddlength"));
+//	text8Query->SetQueryAnswered();
+
+	XText16Query* textQuery;
+	textQuery = static_cast<XText16Query*>(querySet->FindQuery(CommsDat::KCDTIdNifName));
+//	textQuery->SetData(_L("Testing.nif"));
+//	textQuery->SetQueryAnswered();
+
+	// ---------------------------------------------------------------------
+	// Serialisation/Deserialisation Test 2 (with some populated data)
+	// ---------------------------------------------------------------------
+	TInt length = queryContainer->Length();
+	HBufC8* buffer = HBufC8::NewLC(length);
+	if (!buffer) 
+		{
+		User::Leave(KErrNoMemory);
+		}
+
+	TInt ret;
+	TPtr8 storePtr(buffer->Des());
+	ret = queryContainer->Store(storePtr);
+	User::LeaveIfError(ret);
+	
+	CParameterSetContainer* outputContainer = CParameterSetContainer::NewL();
+	TPtrC8 loadPtr(buffer->Des());
+	outputContainer->Load(loadPtr);
+	delete outputContainer;
+	
+	CleanupStack::PopAndDestroy(buffer);
+	CleanupStack::PopAndDestroy(queryContainer);
+	}
+*/	
+	
+void Test5L()
+	{
+	// ---------------------------------------------------------------------
+	// Creating the query
+	// ---------------------------------------------------------------------
+	
+	XConnectionQuerySet* querySet = XConnectionQuerySet::NewL();
+	CleanupDeletePushL(querySet);
+
+	XConnectionQueryBase* query;
+	query = XText8Query::NewL(CommsDat::KCDTIdPortName, *querySet);
+	query = XText16Query::NewL(CommsDat::KCDTIdNifName, *querySet);
+	query = XText16Query::NewL(CommsDat::KCDTIdTsyName, *querySet);
+	query = XText16Query::NewL(CommsDat::KCDTIdPortName, *querySet);
+	query = XBoolQuery::NewL(CommsDat::KCDTIdIpAddrFromServer, *querySet);
+	query = XUintQuery::NewL(CommsDat::KCDTIdLastSessionClosedTimeout, *querySet);
+	query = XBoolQuery::NewL(CommsDat::KCDTIdIfPromptForAuth, *querySet);
+
+	// ---------------------------------------------------------------------
+	// RConnection API additional method test
+	// ---------------------------------------------------------------------
+    TInt err;
+    RSocketServ ss;
+	err = ss.Connect();
+	
+	RConnection con;
+	err = con.Open(ss);
+
+	CConnectionQuerySet* cdo = CConnectionQuerySet::NewL(querySet);
+	CleanupStack::Pop(querySet);
+	CleanupStack::PushL(cdo);
+
+	// This should fail with KErrNotReady since the connection hasn't been started
+	err = con.GetParameters(*cdo);
+	ASSERT(err == KErrNotReady);
+
+	// This should succeed
+	err = con.Start();
+	err = con.GetParameters(*cdo);
+	
+	TBuf8<200> des8;
+	TBuf16<200> des16;
+	TBool b;
+	TInt i(0x0F0F0F0F);
+	TUint32 ui(0xF0F0F0F0);
+	
+	
+	TInt count = 0;
+	if (err == KErrNone)
+		{
+		XConnectionQuerySet& outputQuerySet = cdo->DataObject();
+	
+		// Option 1 - Iterate through the query results
+		TConnectionQueryIter iter (outputQuerySet.GetQueryIter(XConnectionQueryBase::EAnswered));
+		const XConnectionQueryBase* qBase = iter++;
+		while (qBase) 
+			{
+			count++;
+			// Do something with query/data
+			switch (qBase->Type()) 
+				{
+				case XConnectionQueryBase::EInt:
+					{
+					const XIntQuery* qInt = static_cast<const XIntQuery*>(qBase);
+					i = qInt->Data();
+					}
+					break;
+
+				case XConnectionQueryBase::EUint:
+					{
+					const XUintQuery* qUInt = static_cast<const XUintQuery*>(qBase);
+					ui = qUInt->Data();
+					}
+					break;
+
+				case XConnectionQueryBase::EBool:
+					{
+					const XBoolQuery* qBool = static_cast<const XBoolQuery*>(qBase);
+					b = qBool->Data();
+					}
+					break;
+
+				case XConnectionQueryBase::EText8:
+					{
+					const XText8Query* qText8 = static_cast<const XText8Query*>(qBase);
+					des8 = qText8->Data();
+					}
+					break;
+
+				case XConnectionQueryBase::EText16:
+					{
+					const XText16Query* qText16 = static_cast<const XText16Query*>(qBase);
+					des16 = qText16->Data();
+					}
+					break;
+				}
+				
+			qBase = iter++;
+			}
+	
+		// Option 2 - Get a query response directly
+		const XConnectionQueryBase* directQuery;
+		directQuery = outputQuerySet.FindQuery(CommsDat::KCDTIdIfNetworks); // wont be found
+		directQuery = outputQuerySet.FindQuery(CommsDat::KCDTIdTsyName);
+		}
+	
+	con.Stop();
+    con.Close();
+    ss.Close();
+
+	CleanupStack::PopAndDestroy(cdo);
+	querySet = NULL;
+	}
+	
+// Secure variants much simpler
+// For EKA2, just an E32Main and a MainL()
+LOCAL_C void MainL()
+/**
+ * Secure variant
+ * Much simpler, uses the new Rendezvous() call to sync with the client
+ */
+	{
+    _LIT(KLddName, "ECOMM");
+    _LIT(KPddName, "ECDRV");
+
+    // Load device drivers
+    User::LoadPhysicalDevice(KPddName);
+    User::LoadLogicalDevice(KLddName);
+    
+	// self contained query set / container tests
+
+	TInt err = KErrNone;
+//	TRAP(err, Test0cL());
+	
+//	TRAP(err, Test1L());
+	TRAP(err, Test3L());
+	TRAP(err, Test4L());
+	
+	// using rconnection - full end-to-end
+	TRAP(err, Test5L());
+	
+	REComSession::FinalClose();
+   	}
+
+
+
+GLDEF_C TInt E32Main()
+/**
+ * @return - Standard Epoc error code on process exit
+ * Secure variant only
+ * Process entry point. Called by client using RProcess API
+ */
+	{
+	__UHEAP_MARK;
+	CTrapCleanup* cleanup = CTrapCleanup::New();
+	if(cleanup == NULL)
+		{
+		return KErrNoMemory;
+		}
+	TRAPD(err,MainL());
+	delete cleanup;
+	__UHEAP_MARKEND;
+	return err;
+    }
+