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