genericservices/httputils/Test/t_uriparser/t_UnitSipUri.cpp
changeset 0 e4d67989cc36
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/genericservices/httputils/Test/t_uriparser/t_UnitSipUri.cpp	Tue Feb 02 02:01:42 2010 +0200
@@ -0,0 +1,361 @@
+// Copyright (c) 2004-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:
+// Unit tests for PREQ748 - Adding support for the SIP scheme in URIs.
+// Plus adding two new methods validate and equivalent
+// 
+//
+
+
+#include <e32base.h>
+#include <e32test.h>
+
+#include <uri8.h>
+#include <uri16.h>
+#include <uriutils.h>
+#include <uriutilscommon.h>
+#include "t_UnitSipUri.h"
+
+TBuf16<256> gFullUri16;
+TBuf16<256> gFullUriRhs16;
+TBuf16<256> gUriComponent16;
+
+_LIT(KTestName,"SIP Uri Unit Tests");
+LOCAL_D RTest test(KTestName);
+
+void ParseUriTests16BitL()
+	{	
+	test.Next(_L("Parsing 16 bit URIs"));
+	gFullUri16.Copy(KUri0);
+	CUri8* uri = UriUtils::CreateUriL(gFullUri16);
+	CleanupStack::PushL(uri);
+	
+	gUriComponent16.Copy(KScheme0);
+	HBufC* text = uri->Uri().DisplayFormL(EUriScheme);
+	TInt result = text->Compare(gUriComponent16) == 0? KErrNone : KUriUtilsErrDifferentScheme;
+	delete text;
+	User::LeaveIfError(result);
+
+	gUriComponent16.Copy(KUserInfo0);
+	text = uri->Uri().DisplayFormL(EUriUserinfo);
+	result = text->Compare(gUriComponent16) == 0? KErrNone : KUriUtilsErrDifferentUserInfo;
+	delete text;
+	User::LeaveIfError(result);
+	
+	gUriComponent16.Copy(KHost0);
+	text = uri->Uri().DisplayFormL(EUriHost);
+	result = text->Compare(gUriComponent16) == 0? KErrNone : KUriUtilsErrDifferentHost;
+	delete text;
+	User::LeaveIfError(result);
+	
+	gUriComponent16.Copy(KPort0);
+	text = uri->Uri().DisplayFormL(EUriPort);
+	result = text->Compare(gUriComponent16) == 0? KErrNone : KUriUtilsErrDifferentPort;
+	delete text;
+	User::LeaveIfError(result);
+
+	gUriComponent16.Copy(KParams0);
+	text = uri->Uri().DisplayFormL(EUriPath);
+	result = text->Compare(gUriComponent16) == 0? KErrNone : KUriUtilsErrDifferentPath;
+	delete text;
+	User::LeaveIfError(result);
+
+	gUriComponent16.Copy(KHeaders0);
+	text = uri->Uri().DisplayFormL(EUriQuery);
+	result = text->Compare(gUriComponent16) == 0? KErrNone : KUriUtilsErrDifferentQuery;
+	delete text;
+	User::LeaveIfError(result);
+	CleanupStack::PopAndDestroy(uri);
+	}
+	
+void ParseUriTestsDeprecated()
+	{	
+	test.Next(_L("Parsing 16 bit URIs (deprecated)"));
+	gFullUri16.Copy(KUri0);
+	TUriParser16 parser16;
+	parser16.Parse(gFullUri16);
+	gUriComponent16.Copy(KScheme0);
+	TInt result = parser16.Extract(EUriScheme).Compare(gUriComponent16);
+	test(!result);
+	gUriComponent16.Copy(KUserInfo0);
+	result = parser16.Extract(EUriUserinfo).Compare(gUriComponent16);
+	test(!result);
+	gUriComponent16.Copy(KHost0);
+	result = parser16.Extract(EUriHost).Compare(gUriComponent16);
+	test(!result);
+	gUriComponent16.Copy(KPort0);
+	result = parser16.Extract(EUriPort).Compare(gUriComponent16);
+	test(!result);
+	gUriComponent16.Copy(KParams0);
+	result = parser16.Extract(EUriPath).Compare(gUriComponent16);
+	test(!result);
+	gUriComponent16.Copy(KHeaders0);
+	result = parser16.Extract(EUriQuery).Compare(gUriComponent16);
+	test(!result);
+	}
+
+void ParseUriTests()
+	{
+	test.Next(_L("@SYMTestCaseID IWS-APPPROTOCOLS-INETURILIST-TESTUTILS-0001 Parsing 8 bit URIs"));
+	TUriParser8 parser8;
+	parser8.Parse(KUri0);
+	TInt result = parser8.Extract(EUriScheme).Compare(KScheme0);
+	test(!result);
+	result = parser8.Extract(EUriUserinfo).Compare(KUserInfo0);
+	test(!result);
+	result = parser8.Extract(EUriHost).Compare(KHost0);
+	test(!result);
+	result = parser8.Extract(EUriPort).Compare(KPort0);
+	test(!result);
+	result = parser8.Extract(EUriPath).Compare(KParams0);
+	test(!result);
+	result = parser8.Extract(EUriQuery).Compare(KHeaders0);
+	test(!result);
+	result =parser8.Parse(KParseUri);
+	test(!result);
+	ParseUriTestsDeprecated();
+	TRAP (result ,ParseUriTests16BitL());
+	test(result == KErrNone);
+	}
+
+void GenarateUriTestsL()
+	{
+	test.Next(_L("@SYMTestCaseID IWS-APPPROTOCOLS-INETURILIST-TESTUTILS-0002 Generating 8 bit URIs"));
+	CUri8* uri8 = CUri8::NewLC();
+	uri8->SetComponentL(KScheme0, EUriScheme);
+	uri8->SetComponentL(KHost0, EUriHost);
+	uri8->SetComponentL(KUserInfo0, EUriUserinfo);
+	uri8->SetComponentL(KPort0, EUriPort);
+	uri8->SetComponentL(KParams0, EUriPath);
+	uri8->SetComponentL(KHeaders0, EUriQuery);
+	const TDesC8& des8 = uri8->Uri().UriDes();
+	TInt result = des8.Compare(KUri0);
+	test(!result);
+	CleanupStack::PopAndDestroy(uri8);
+	
+	test.Next(_L("Generating 16 bit URIs"));
+	CUri16* uri16 = CUri16::NewLC();
+	gUriComponent16.Copy(KScheme0);
+	uri16->SetComponentL(gUriComponent16, EUriScheme);
+	gUriComponent16.Copy(KHost0);
+	uri16->SetComponentL(gUriComponent16, EUriHost);
+	gUriComponent16.Copy(KUserInfo0);
+	uri16->SetComponentL(gUriComponent16, EUriUserinfo);
+	gUriComponent16.Copy(KPort0);
+	uri16->SetComponentL(gUriComponent16, EUriPort);
+	gUriComponent16.Copy(KParams0);
+	uri16->SetComponentL(gUriComponent16, EUriPath);
+	gUriComponent16.Copy(KHeaders0);
+	uri16->SetComponentL(gUriComponent16, EUriQuery);
+	const TDesC16& des16 = uri16->Uri().UriDes();
+	gFullUri16.Copy(KUri0);
+	result = des16.Compare(gFullUri16);
+	test(!result);
+	CleanupStack::PopAndDestroy(uri16);
+	}
+
+void ValidateTest(const TDesC8& aUri, TInt aErrorToAssert)
+	{
+	TUriParser8 parser8;
+	TUriParser16 parser16;
+	parser8.Parse(aUri);
+	TInt result = parser8.Validate();
+	test(result == aErrorToAssert);
+	gFullUri16.Copy(aUri);
+	parser16.Parse(gFullUri16);
+	result = parser16.Validate();
+	test(result == aErrorToAssert);
+	}
+
+void ValidateSip8Test(const TDesC8& aUri, TInt aErrorToAssert)
+	{
+	TUriParser8 parser8;
+	parser8.Parse(aUri);
+	TInt result = parser8.Validate();
+	test(result == aErrorToAssert);
+	}
+	
+void ValidateUriTests()
+	{
+	test.Next(_L("@SYMTestCaseID IWS-APPPROTOCOLS-INETURILIST-TESTUTILS-0003 Validate URIs 8 and 16 bit"));
+	 
+	test.Next(_L("[Validate] Check full correct URI"));
+	ValidateTest(KVldUri0, KErrNone);
+	
+	test.Next(_L("[Validate] Check unsupported scheme"));
+	ValidateTest(KVldNotSupported, KErrNotSupported);
+	
+	test.Next(_L("[Validate] Check invalid hosts"));
+	ValidateTest(KVldInvalidHost0, KUriUtilsErrInvalidHost);
+	ValidateTest(KVldInvalidHost1, KUriUtilsErrInvalidHost);
+	ValidateTest(KVldInvalidHost2, KUriUtilsErrInvalidHost);
+	ValidateTest(KVldInvalidHost3, KUriUtilsErrInvalidHost);
+	ValidateTest(KVldInvalidHost4, KUriUtilsErrInvalidHost);
+	ValidateSip8Test(KVldInvalidHost5, KUriUtilsErrInvalidHost );
+	
+	test.Next(_L("[Validate] Check valid hosts"));
+	ValidateTest(KVldValidHost0, KErrNone);
+	ValidateTest(KVldValidHost1, KErrNone);
+	ValidateTest(KVldValidHost2, KErrNone);
+	
+	test.Next(_L("[Validate] Check invalid ports"));
+	ValidateTest(KVldInvalidPort0, KUriUtilsErrInvalidPort);
+	ValidateTest(KVldInvalidNoPort, KUriUtilsErrInvalidPort);
+	test.Next(_L("[Validate] Check valid ports"));
+	ValidateTest(KVldValidPort0, KErrNone);
+	
+	test.Next(_L("[Validate] Check invalid usernames and passwords"));
+	ValidateTest(KVldInvalidUserInfo0, KUriUtilsErrInvalidUserInfo);
+	ValidateTest(KVldInvalidUserInfo1, KUriUtilsErrInvalidUserInfo);
+	ValidateTest(KVldInvalidUserInfo2, KUriUtilsErrInvalidUserInfo);
+	ValidateTest(KVldInvalidUserInfo3, KUriUtilsErrInvalidUserInfo);
+	test.Next(_L("[Validate] Check valid usernames and passwords"));
+	ValidateTest(KVldValidUserInfo0, KErrNone);
+	ValidateTest(KVldValidUserInfo1, KErrNone);
+	ValidateTest(KVldValidUserInfo2, KErrNone);
+	ValidateTest(KVldValidUserInfo3, KErrNone);
+	
+	test.Next(_L("[Validate] Check invalid parameters"));
+	ValidateTest(KVldInvalidParams0, KUriUtilsErrInvalidParam);
+	ValidateTest(KVldInvalidParams1, KUriUtilsErrInvalidParam);
+	ValidateTest(KVldInvalidParams2, KUriUtilsErrInvalidParam);
+	ValidateTest(KVldInvalidParams3, KUriUtilsErrInvalidParam);
+	ValidateTest(KVldInvalidParams4, KUriUtilsErrInvalidParam);
+	ValidateTest(KVldInvalidParams5, KUriUtilsErrInvalidParam);
+	test.Next(_L("[Validate] Check valid parameters"));
+	ValidateTest(KVldValidParams0, KErrNone);
+	ValidateTest(KVldValidParams1, KErrNone);
+	ValidateTest(KVldValidParams2, KErrNone);
+	
+	test.Next(_L("[Validate] Check invalid headers"));
+	ValidateTest(KVldInvalidHeaders0, KUriUtilsErrInvalidHeaders);
+	ValidateTest(KVldInvalidHeaders1, KUriUtilsErrInvalidHeaders);
+	ValidateTest(KVldInvalidHeaders2, KUriUtilsErrInvalidHeaders);
+	test.Next(_L("[Validate] Check valid headers"));
+	ValidateTest(KVldValidHeaders0, KErrNone);
+	ValidateTest(KVldValidHeaders1, KErrNone);
+	ValidateTest(KVldValidHeaders2, KErrNone);
+	ValidateTest(KVldValidHeaders3, KErrNone);
+	
+	test.Next(_L("[Validate] General tests"));
+	ValidateTest(KVldInvalidGeneral1, KUriUtilsErrInvalidPort);
+	ValidateTest(KVldInvalidGeneral2, KUriUtilsErrInvalidHost);
+	ValidateTest(KVldValidGeneral1, KErrNone);
+	}
+	
+void EquivalenceTest(const TDesC8& aLhs, const TDesC8& aRhs, TInt aExpected)
+	{
+	TUriParser8 lhs8;
+	lhs8.Parse(aLhs);
+	TUriParser8 rhs8;
+	rhs8.Parse(aRhs);
+	TInt result = lhs8.Equivalent(rhs8);
+	test(result == aExpected);
+	
+	TUriParser16 lhs16;
+	gFullUri16.Copy(aLhs);
+	lhs16.Parse(gFullUri16);
+	TUriParser16 rhs16;
+	gFullUriRhs16.Copy(aRhs);
+	rhs16.Parse(gFullUriRhs16);
+	
+	result = lhs16.Equivalent(rhs16);
+	test(result == aExpected);
+	}
+	
+void EquivalenceUriTests()
+	{
+	test.Next(_L("@SYMTestCaseID IWS-APPPROTOCOLS-INETURILIST-TESTUTILS-0004 Equivalent URIs 8 and 16 bit"));
+	EquivalenceTest(KEquivUri0, KEquivUri0, KErrNone);
+	EquivalenceTest(KEquivUri0, KEquivScheme0, KErrNone);
+	
+	test.Next(_L("[Equivalent] Compare user names and passwords"));
+	EquivalenceTest(KEquivUri0, KEquivUserInfo0, KUriUtilsErrDifferentUserInfo);
+	EquivalenceTest(KEquivUri0, KEquivUserInfo1, KUriUtilsErrDifferentUserInfo);
+
+	test.Next(_L("[Equivalent] Compare hosts"));
+	EquivalenceTest(KEquivUri0, KEquivHost0, KErrNone);
+	EquivalenceTest(KEquivUri1, KEquivHost0, KUriUtilsErrDifferentHost);
+	EquivalenceTest(KEquivUri1, KEquivHost1, KErrNone);
+	
+	test.Next(_L("[Equivalent] Compare hosts"));
+	EquivalenceTest(KEquivUri0, KEquivPort0, KUriUtilsErrDifferentPort);
+	
+	test.Next(_L("[Equivalent] Compare parameters"));
+	EquivalenceTest(KEquivUri0, KEquivParam0, KErrNone);
+	EquivalenceTest(KEquivUri0, KEquivParam1, KErrNone);
+	EquivalenceTest(KEquivUri0, KEquivParam2, KUriUtilsErrDifferentPath);
+	EquivalenceTest(KEquivUri0, KEquivParam3, KUriUtilsErrDifferentPath);
+	EquivalenceTest(KEquivParam4, KEquivParam5, KErrNone);
+	EquivalenceTest(KEquivParam4, KEquivParam6, KErrNone);
+	EquivalenceTest(KEquivParam4, KEquivParam7, KUriUtilsErrDifferentPath);
+	EquivalenceTest(KEquivParam4, KEquivParam8, KUriUtilsErrDifferentPath);
+	EquivalenceTest(KEquivParam4, KEquivParam9, KUriUtilsErrDifferentPath);
+	EquivalenceTest(KEquivParam7, KEquivParam4, KUriUtilsErrDifferentPath);
+	EquivalenceTest(KEquivParam4, KEquivParam10, KErrNone);
+	EquivalenceTest(KEquivParam4, KEquivParam11, KUriUtilsErrDifferentPath);
+	EquivalenceTest(KEquivParam12, KEquivParam13, KUriUtilsErrDifferentPath);
+	EquivalenceTest(KEquivParam4, KEquivParam14, KUriUtilsErrDifferentPath);
+	EquivalenceTest(KEquivParam14, KEquivParam4, KUriUtilsErrDifferentPath);
+	
+	test.Next(_L("[Equivalent] Compare headers"));
+	EquivalenceTest(KEquivHeader0, KEquivHeader1, KErrNone);
+	EquivalenceTest(KEquivHeader0, KEquivHeader2, KUriUtilsErrDifferentQuery);
+	EquivalenceTest(KEquivHeader2, KEquivHeader0, KUriUtilsErrDifferentQuery);
+	EquivalenceTest(KEquivHeader2, KEquivHeader3, KErrNone);
+	EquivalenceTest(KEquivHeader3, KEquivHeader2, KErrNone);
+	EquivalenceTest(KEquivHeader4, KEquivHeader5, KErrNone);
+	EquivalenceTest(KEquivHeader4, KEquivHeader6, KErrNone);
+	EquivalenceTest(KEquivHeader4, KEquivHeader7, KUriUtilsErrDifferentQuery);
+	
+	test.Next(_L("[Equivalent] Expanded URIs"));
+	EquivalenceTest(KEquivUri0, KEquivExpand0, KErrNone);
+	EquivalenceTest(KEquivExpand0, KEquivUri0, KErrNone);
+	EquivalenceTest(KEquivUri0, KEquivExpand1, KErrNone);
+	EquivalenceTest(KEquivUri0, KEquivExpand2, KUriUtilsErrDifferentUserInfo);
+	EquivalenceTest(KEquivExpand3, KEquivExpand4, KErrNone);
+	EquivalenceTest(KEquivExpand4, KEquivExpand3, KErrNone);
+	
+	test.Next(_L("[Equivalent] General tests"));
+	EquivalenceTest(KEquivGeneral1, KEquivGeneral2, KUriUtilsErrDifferentPort);
+	}
+	
+void doMainL()
+	{
+	test.Start(_L("Starting unit tests"));
+	
+	ParseUriTests();
+	GenarateUriTestsL();
+	ValidateUriTests();
+	EquivalenceUriTests();
+	
+	test.End();
+	test.Close();
+	}
+
+GLDEF_C TInt E32Main()
+//
+// Main function
+	{
+	__UHEAP_MARK;
+
+	CTrapCleanup* theCleanup=CTrapCleanup::New();
+	TRAPD(ret,doMainL());
+	test(ret==KErrNone);
+	delete theCleanup;
+
+	__UHEAP_MARKEND;
+	
+	return KErrNone;
+	}
+