genericservices/httputils/Test/t_uriparser/t_UnitSipUri.cpp
changeset 0 e4d67989cc36
equal deleted inserted replaced
-1:000000000000 0:e4d67989cc36
       
     1 // Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
       
     2 // All rights reserved.
       
     3 // This component and the accompanying materials are made available
       
     4 // under the terms of "Eclipse Public License v1.0"
       
     5 // which accompanies this distribution, and is available
       
     6 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     7 //
       
     8 // Initial Contributors:
       
     9 // Nokia Corporation - initial contribution.
       
    10 //
       
    11 // Contributors:
       
    12 //
       
    13 // Description:
       
    14 // Unit tests for PREQ748 - Adding support for the SIP scheme in URIs.
       
    15 // Plus adding two new methods validate and equivalent
       
    16 // 
       
    17 //
       
    18 
       
    19 
       
    20 #include <e32base.h>
       
    21 #include <e32test.h>
       
    22 
       
    23 #include <uri8.h>
       
    24 #include <uri16.h>
       
    25 #include <uriutils.h>
       
    26 #include <uriutilscommon.h>
       
    27 #include "t_UnitSipUri.h"
       
    28 
       
    29 TBuf16<256> gFullUri16;
       
    30 TBuf16<256> gFullUriRhs16;
       
    31 TBuf16<256> gUriComponent16;
       
    32 
       
    33 _LIT(KTestName,"SIP Uri Unit Tests");
       
    34 LOCAL_D RTest test(KTestName);
       
    35 
       
    36 void ParseUriTests16BitL()
       
    37 	{	
       
    38 	test.Next(_L("Parsing 16 bit URIs"));
       
    39 	gFullUri16.Copy(KUri0);
       
    40 	CUri8* uri = UriUtils::CreateUriL(gFullUri16);
       
    41 	CleanupStack::PushL(uri);
       
    42 	
       
    43 	gUriComponent16.Copy(KScheme0);
       
    44 	HBufC* text = uri->Uri().DisplayFormL(EUriScheme);
       
    45 	TInt result = text->Compare(gUriComponent16) == 0? KErrNone : KUriUtilsErrDifferentScheme;
       
    46 	delete text;
       
    47 	User::LeaveIfError(result);
       
    48 
       
    49 	gUriComponent16.Copy(KUserInfo0);
       
    50 	text = uri->Uri().DisplayFormL(EUriUserinfo);
       
    51 	result = text->Compare(gUriComponent16) == 0? KErrNone : KUriUtilsErrDifferentUserInfo;
       
    52 	delete text;
       
    53 	User::LeaveIfError(result);
       
    54 	
       
    55 	gUriComponent16.Copy(KHost0);
       
    56 	text = uri->Uri().DisplayFormL(EUriHost);
       
    57 	result = text->Compare(gUriComponent16) == 0? KErrNone : KUriUtilsErrDifferentHost;
       
    58 	delete text;
       
    59 	User::LeaveIfError(result);
       
    60 	
       
    61 	gUriComponent16.Copy(KPort0);
       
    62 	text = uri->Uri().DisplayFormL(EUriPort);
       
    63 	result = text->Compare(gUriComponent16) == 0? KErrNone : KUriUtilsErrDifferentPort;
       
    64 	delete text;
       
    65 	User::LeaveIfError(result);
       
    66 
       
    67 	gUriComponent16.Copy(KParams0);
       
    68 	text = uri->Uri().DisplayFormL(EUriPath);
       
    69 	result = text->Compare(gUriComponent16) == 0? KErrNone : KUriUtilsErrDifferentPath;
       
    70 	delete text;
       
    71 	User::LeaveIfError(result);
       
    72 
       
    73 	gUriComponent16.Copy(KHeaders0);
       
    74 	text = uri->Uri().DisplayFormL(EUriQuery);
       
    75 	result = text->Compare(gUriComponent16) == 0? KErrNone : KUriUtilsErrDifferentQuery;
       
    76 	delete text;
       
    77 	User::LeaveIfError(result);
       
    78 	CleanupStack::PopAndDestroy(uri);
       
    79 	}
       
    80 	
       
    81 void ParseUriTestsDeprecated()
       
    82 	{	
       
    83 	test.Next(_L("Parsing 16 bit URIs (deprecated)"));
       
    84 	gFullUri16.Copy(KUri0);
       
    85 	TUriParser16 parser16;
       
    86 	parser16.Parse(gFullUri16);
       
    87 	gUriComponent16.Copy(KScheme0);
       
    88 	TInt result = parser16.Extract(EUriScheme).Compare(gUriComponent16);
       
    89 	test(!result);
       
    90 	gUriComponent16.Copy(KUserInfo0);
       
    91 	result = parser16.Extract(EUriUserinfo).Compare(gUriComponent16);
       
    92 	test(!result);
       
    93 	gUriComponent16.Copy(KHost0);
       
    94 	result = parser16.Extract(EUriHost).Compare(gUriComponent16);
       
    95 	test(!result);
       
    96 	gUriComponent16.Copy(KPort0);
       
    97 	result = parser16.Extract(EUriPort).Compare(gUriComponent16);
       
    98 	test(!result);
       
    99 	gUriComponent16.Copy(KParams0);
       
   100 	result = parser16.Extract(EUriPath).Compare(gUriComponent16);
       
   101 	test(!result);
       
   102 	gUriComponent16.Copy(KHeaders0);
       
   103 	result = parser16.Extract(EUriQuery).Compare(gUriComponent16);
       
   104 	test(!result);
       
   105 	}
       
   106 
       
   107 void ParseUriTests()
       
   108 	{
       
   109 	test.Next(_L("@SYMTestCaseID IWS-APPPROTOCOLS-INETURILIST-TESTUTILS-0001 Parsing 8 bit URIs"));
       
   110 	TUriParser8 parser8;
       
   111 	parser8.Parse(KUri0);
       
   112 	TInt result = parser8.Extract(EUriScheme).Compare(KScheme0);
       
   113 	test(!result);
       
   114 	result = parser8.Extract(EUriUserinfo).Compare(KUserInfo0);
       
   115 	test(!result);
       
   116 	result = parser8.Extract(EUriHost).Compare(KHost0);
       
   117 	test(!result);
       
   118 	result = parser8.Extract(EUriPort).Compare(KPort0);
       
   119 	test(!result);
       
   120 	result = parser8.Extract(EUriPath).Compare(KParams0);
       
   121 	test(!result);
       
   122 	result = parser8.Extract(EUriQuery).Compare(KHeaders0);
       
   123 	test(!result);
       
   124 	result =parser8.Parse(KParseUri);
       
   125 	test(!result);
       
   126 	ParseUriTestsDeprecated();
       
   127 	TRAP (result ,ParseUriTests16BitL());
       
   128 	test(result == KErrNone);
       
   129 	}
       
   130 
       
   131 void GenarateUriTestsL()
       
   132 	{
       
   133 	test.Next(_L("@SYMTestCaseID IWS-APPPROTOCOLS-INETURILIST-TESTUTILS-0002 Generating 8 bit URIs"));
       
   134 	CUri8* uri8 = CUri8::NewLC();
       
   135 	uri8->SetComponentL(KScheme0, EUriScheme);
       
   136 	uri8->SetComponentL(KHost0, EUriHost);
       
   137 	uri8->SetComponentL(KUserInfo0, EUriUserinfo);
       
   138 	uri8->SetComponentL(KPort0, EUriPort);
       
   139 	uri8->SetComponentL(KParams0, EUriPath);
       
   140 	uri8->SetComponentL(KHeaders0, EUriQuery);
       
   141 	const TDesC8& des8 = uri8->Uri().UriDes();
       
   142 	TInt result = des8.Compare(KUri0);
       
   143 	test(!result);
       
   144 	CleanupStack::PopAndDestroy(uri8);
       
   145 	
       
   146 	test.Next(_L("Generating 16 bit URIs"));
       
   147 	CUri16* uri16 = CUri16::NewLC();
       
   148 	gUriComponent16.Copy(KScheme0);
       
   149 	uri16->SetComponentL(gUriComponent16, EUriScheme);
       
   150 	gUriComponent16.Copy(KHost0);
       
   151 	uri16->SetComponentL(gUriComponent16, EUriHost);
       
   152 	gUriComponent16.Copy(KUserInfo0);
       
   153 	uri16->SetComponentL(gUriComponent16, EUriUserinfo);
       
   154 	gUriComponent16.Copy(KPort0);
       
   155 	uri16->SetComponentL(gUriComponent16, EUriPort);
       
   156 	gUriComponent16.Copy(KParams0);
       
   157 	uri16->SetComponentL(gUriComponent16, EUriPath);
       
   158 	gUriComponent16.Copy(KHeaders0);
       
   159 	uri16->SetComponentL(gUriComponent16, EUriQuery);
       
   160 	const TDesC16& des16 = uri16->Uri().UriDes();
       
   161 	gFullUri16.Copy(KUri0);
       
   162 	result = des16.Compare(gFullUri16);
       
   163 	test(!result);
       
   164 	CleanupStack::PopAndDestroy(uri16);
       
   165 	}
       
   166 
       
   167 void ValidateTest(const TDesC8& aUri, TInt aErrorToAssert)
       
   168 	{
       
   169 	TUriParser8 parser8;
       
   170 	TUriParser16 parser16;
       
   171 	parser8.Parse(aUri);
       
   172 	TInt result = parser8.Validate();
       
   173 	test(result == aErrorToAssert);
       
   174 	gFullUri16.Copy(aUri);
       
   175 	parser16.Parse(gFullUri16);
       
   176 	result = parser16.Validate();
       
   177 	test(result == aErrorToAssert);
       
   178 	}
       
   179 
       
   180 void ValidateSip8Test(const TDesC8& aUri, TInt aErrorToAssert)
       
   181 	{
       
   182 	TUriParser8 parser8;
       
   183 	parser8.Parse(aUri);
       
   184 	TInt result = parser8.Validate();
       
   185 	test(result == aErrorToAssert);
       
   186 	}
       
   187 	
       
   188 void ValidateUriTests()
       
   189 	{
       
   190 	test.Next(_L("@SYMTestCaseID IWS-APPPROTOCOLS-INETURILIST-TESTUTILS-0003 Validate URIs 8 and 16 bit"));
       
   191 	 
       
   192 	test.Next(_L("[Validate] Check full correct URI"));
       
   193 	ValidateTest(KVldUri0, KErrNone);
       
   194 	
       
   195 	test.Next(_L("[Validate] Check unsupported scheme"));
       
   196 	ValidateTest(KVldNotSupported, KErrNotSupported);
       
   197 	
       
   198 	test.Next(_L("[Validate] Check invalid hosts"));
       
   199 	ValidateTest(KVldInvalidHost0, KUriUtilsErrInvalidHost);
       
   200 	ValidateTest(KVldInvalidHost1, KUriUtilsErrInvalidHost);
       
   201 	ValidateTest(KVldInvalidHost2, KUriUtilsErrInvalidHost);
       
   202 	ValidateTest(KVldInvalidHost3, KUriUtilsErrInvalidHost);
       
   203 	ValidateTest(KVldInvalidHost4, KUriUtilsErrInvalidHost);
       
   204 	ValidateSip8Test(KVldInvalidHost5, KUriUtilsErrInvalidHost );
       
   205 	
       
   206 	test.Next(_L("[Validate] Check valid hosts"));
       
   207 	ValidateTest(KVldValidHost0, KErrNone);
       
   208 	ValidateTest(KVldValidHost1, KErrNone);
       
   209 	ValidateTest(KVldValidHost2, KErrNone);
       
   210 	
       
   211 	test.Next(_L("[Validate] Check invalid ports"));
       
   212 	ValidateTest(KVldInvalidPort0, KUriUtilsErrInvalidPort);
       
   213 	ValidateTest(KVldInvalidNoPort, KUriUtilsErrInvalidPort);
       
   214 	test.Next(_L("[Validate] Check valid ports"));
       
   215 	ValidateTest(KVldValidPort0, KErrNone);
       
   216 	
       
   217 	test.Next(_L("[Validate] Check invalid usernames and passwords"));
       
   218 	ValidateTest(KVldInvalidUserInfo0, KUriUtilsErrInvalidUserInfo);
       
   219 	ValidateTest(KVldInvalidUserInfo1, KUriUtilsErrInvalidUserInfo);
       
   220 	ValidateTest(KVldInvalidUserInfo2, KUriUtilsErrInvalidUserInfo);
       
   221 	ValidateTest(KVldInvalidUserInfo3, KUriUtilsErrInvalidUserInfo);
       
   222 	test.Next(_L("[Validate] Check valid usernames and passwords"));
       
   223 	ValidateTest(KVldValidUserInfo0, KErrNone);
       
   224 	ValidateTest(KVldValidUserInfo1, KErrNone);
       
   225 	ValidateTest(KVldValidUserInfo2, KErrNone);
       
   226 	ValidateTest(KVldValidUserInfo3, KErrNone);
       
   227 	
       
   228 	test.Next(_L("[Validate] Check invalid parameters"));
       
   229 	ValidateTest(KVldInvalidParams0, KUriUtilsErrInvalidParam);
       
   230 	ValidateTest(KVldInvalidParams1, KUriUtilsErrInvalidParam);
       
   231 	ValidateTest(KVldInvalidParams2, KUriUtilsErrInvalidParam);
       
   232 	ValidateTest(KVldInvalidParams3, KUriUtilsErrInvalidParam);
       
   233 	ValidateTest(KVldInvalidParams4, KUriUtilsErrInvalidParam);
       
   234 	ValidateTest(KVldInvalidParams5, KUriUtilsErrInvalidParam);
       
   235 	test.Next(_L("[Validate] Check valid parameters"));
       
   236 	ValidateTest(KVldValidParams0, KErrNone);
       
   237 	ValidateTest(KVldValidParams1, KErrNone);
       
   238 	ValidateTest(KVldValidParams2, KErrNone);
       
   239 	
       
   240 	test.Next(_L("[Validate] Check invalid headers"));
       
   241 	ValidateTest(KVldInvalidHeaders0, KUriUtilsErrInvalidHeaders);
       
   242 	ValidateTest(KVldInvalidHeaders1, KUriUtilsErrInvalidHeaders);
       
   243 	ValidateTest(KVldInvalidHeaders2, KUriUtilsErrInvalidHeaders);
       
   244 	test.Next(_L("[Validate] Check valid headers"));
       
   245 	ValidateTest(KVldValidHeaders0, KErrNone);
       
   246 	ValidateTest(KVldValidHeaders1, KErrNone);
       
   247 	ValidateTest(KVldValidHeaders2, KErrNone);
       
   248 	ValidateTest(KVldValidHeaders3, KErrNone);
       
   249 	
       
   250 	test.Next(_L("[Validate] General tests"));
       
   251 	ValidateTest(KVldInvalidGeneral1, KUriUtilsErrInvalidPort);
       
   252 	ValidateTest(KVldInvalidGeneral2, KUriUtilsErrInvalidHost);
       
   253 	ValidateTest(KVldValidGeneral1, KErrNone);
       
   254 	}
       
   255 	
       
   256 void EquivalenceTest(const TDesC8& aLhs, const TDesC8& aRhs, TInt aExpected)
       
   257 	{
       
   258 	TUriParser8 lhs8;
       
   259 	lhs8.Parse(aLhs);
       
   260 	TUriParser8 rhs8;
       
   261 	rhs8.Parse(aRhs);
       
   262 	TInt result = lhs8.Equivalent(rhs8);
       
   263 	test(result == aExpected);
       
   264 	
       
   265 	TUriParser16 lhs16;
       
   266 	gFullUri16.Copy(aLhs);
       
   267 	lhs16.Parse(gFullUri16);
       
   268 	TUriParser16 rhs16;
       
   269 	gFullUriRhs16.Copy(aRhs);
       
   270 	rhs16.Parse(gFullUriRhs16);
       
   271 	
       
   272 	result = lhs16.Equivalent(rhs16);
       
   273 	test(result == aExpected);
       
   274 	}
       
   275 	
       
   276 void EquivalenceUriTests()
       
   277 	{
       
   278 	test.Next(_L("@SYMTestCaseID IWS-APPPROTOCOLS-INETURILIST-TESTUTILS-0004 Equivalent URIs 8 and 16 bit"));
       
   279 	EquivalenceTest(KEquivUri0, KEquivUri0, KErrNone);
       
   280 	EquivalenceTest(KEquivUri0, KEquivScheme0, KErrNone);
       
   281 	
       
   282 	test.Next(_L("[Equivalent] Compare user names and passwords"));
       
   283 	EquivalenceTest(KEquivUri0, KEquivUserInfo0, KUriUtilsErrDifferentUserInfo);
       
   284 	EquivalenceTest(KEquivUri0, KEquivUserInfo1, KUriUtilsErrDifferentUserInfo);
       
   285 
       
   286 	test.Next(_L("[Equivalent] Compare hosts"));
       
   287 	EquivalenceTest(KEquivUri0, KEquivHost0, KErrNone);
       
   288 	EquivalenceTest(KEquivUri1, KEquivHost0, KUriUtilsErrDifferentHost);
       
   289 	EquivalenceTest(KEquivUri1, KEquivHost1, KErrNone);
       
   290 	
       
   291 	test.Next(_L("[Equivalent] Compare hosts"));
       
   292 	EquivalenceTest(KEquivUri0, KEquivPort0, KUriUtilsErrDifferentPort);
       
   293 	
       
   294 	test.Next(_L("[Equivalent] Compare parameters"));
       
   295 	EquivalenceTest(KEquivUri0, KEquivParam0, KErrNone);
       
   296 	EquivalenceTest(KEquivUri0, KEquivParam1, KErrNone);
       
   297 	EquivalenceTest(KEquivUri0, KEquivParam2, KUriUtilsErrDifferentPath);
       
   298 	EquivalenceTest(KEquivUri0, KEquivParam3, KUriUtilsErrDifferentPath);
       
   299 	EquivalenceTest(KEquivParam4, KEquivParam5, KErrNone);
       
   300 	EquivalenceTest(KEquivParam4, KEquivParam6, KErrNone);
       
   301 	EquivalenceTest(KEquivParam4, KEquivParam7, KUriUtilsErrDifferentPath);
       
   302 	EquivalenceTest(KEquivParam4, KEquivParam8, KUriUtilsErrDifferentPath);
       
   303 	EquivalenceTest(KEquivParam4, KEquivParam9, KUriUtilsErrDifferentPath);
       
   304 	EquivalenceTest(KEquivParam7, KEquivParam4, KUriUtilsErrDifferentPath);
       
   305 	EquivalenceTest(KEquivParam4, KEquivParam10, KErrNone);
       
   306 	EquivalenceTest(KEquivParam4, KEquivParam11, KUriUtilsErrDifferentPath);
       
   307 	EquivalenceTest(KEquivParam12, KEquivParam13, KUriUtilsErrDifferentPath);
       
   308 	EquivalenceTest(KEquivParam4, KEquivParam14, KUriUtilsErrDifferentPath);
       
   309 	EquivalenceTest(KEquivParam14, KEquivParam4, KUriUtilsErrDifferentPath);
       
   310 	
       
   311 	test.Next(_L("[Equivalent] Compare headers"));
       
   312 	EquivalenceTest(KEquivHeader0, KEquivHeader1, KErrNone);
       
   313 	EquivalenceTest(KEquivHeader0, KEquivHeader2, KUriUtilsErrDifferentQuery);
       
   314 	EquivalenceTest(KEquivHeader2, KEquivHeader0, KUriUtilsErrDifferentQuery);
       
   315 	EquivalenceTest(KEquivHeader2, KEquivHeader3, KErrNone);
       
   316 	EquivalenceTest(KEquivHeader3, KEquivHeader2, KErrNone);
       
   317 	EquivalenceTest(KEquivHeader4, KEquivHeader5, KErrNone);
       
   318 	EquivalenceTest(KEquivHeader4, KEquivHeader6, KErrNone);
       
   319 	EquivalenceTest(KEquivHeader4, KEquivHeader7, KUriUtilsErrDifferentQuery);
       
   320 	
       
   321 	test.Next(_L("[Equivalent] Expanded URIs"));
       
   322 	EquivalenceTest(KEquivUri0, KEquivExpand0, KErrNone);
       
   323 	EquivalenceTest(KEquivExpand0, KEquivUri0, KErrNone);
       
   324 	EquivalenceTest(KEquivUri0, KEquivExpand1, KErrNone);
       
   325 	EquivalenceTest(KEquivUri0, KEquivExpand2, KUriUtilsErrDifferentUserInfo);
       
   326 	EquivalenceTest(KEquivExpand3, KEquivExpand4, KErrNone);
       
   327 	EquivalenceTest(KEquivExpand4, KEquivExpand3, KErrNone);
       
   328 	
       
   329 	test.Next(_L("[Equivalent] General tests"));
       
   330 	EquivalenceTest(KEquivGeneral1, KEquivGeneral2, KUriUtilsErrDifferentPort);
       
   331 	}
       
   332 	
       
   333 void doMainL()
       
   334 	{
       
   335 	test.Start(_L("Starting unit tests"));
       
   336 	
       
   337 	ParseUriTests();
       
   338 	GenarateUriTestsL();
       
   339 	ValidateUriTests();
       
   340 	EquivalenceUriTests();
       
   341 	
       
   342 	test.End();
       
   343 	test.Close();
       
   344 	}
       
   345 
       
   346 GLDEF_C TInt E32Main()
       
   347 //
       
   348 // Main function
       
   349 	{
       
   350 	__UHEAP_MARK;
       
   351 
       
   352 	CTrapCleanup* theCleanup=CTrapCleanup::New();
       
   353 	TRAPD(ret,doMainL());
       
   354 	test(ret==KErrNone);
       
   355 	delete theCleanup;
       
   356 
       
   357 	__UHEAP_MARKEND;
       
   358 	
       
   359 	return KErrNone;
       
   360 	}
       
   361