1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1.2 +++ b/os/ossrv/genericservices/httputils/Test/t_uriparser/t_UnitSipUri.cpp Fri Jun 15 03:10:57 2012 +0200
1.3 @@ -0,0 +1,361 @@
1.4 +// Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
1.5 +// All rights reserved.
1.6 +// This component and the accompanying materials are made available
1.7 +// under the terms of "Eclipse Public License v1.0"
1.8 +// which accompanies this distribution, and is available
1.9 +// at the URL "http://www.eclipse.org/legal/epl-v10.html".
1.10 +//
1.11 +// Initial Contributors:
1.12 +// Nokia Corporation - initial contribution.
1.13 +//
1.14 +// Contributors:
1.15 +//
1.16 +// Description:
1.17 +// Unit tests for PREQ748 - Adding support for the SIP scheme in URIs.
1.18 +// Plus adding two new methods validate and equivalent
1.19 +//
1.20 +//
1.21 +
1.22 +
1.23 +#include <e32base.h>
1.24 +#include <e32test.h>
1.25 +
1.26 +#include <uri8.h>
1.27 +#include <uri16.h>
1.28 +#include <uriutils.h>
1.29 +#include <uriutilscommon.h>
1.30 +#include "t_UnitSipUri.h"
1.31 +
1.32 +TBuf16<256> gFullUri16;
1.33 +TBuf16<256> gFullUriRhs16;
1.34 +TBuf16<256> gUriComponent16;
1.35 +
1.36 +_LIT(KTestName,"SIP Uri Unit Tests");
1.37 +LOCAL_D RTest test(KTestName);
1.38 +
1.39 +void ParseUriTests16BitL()
1.40 + {
1.41 + test.Next(_L("Parsing 16 bit URIs"));
1.42 + gFullUri16.Copy(KUri0);
1.43 + CUri8* uri = UriUtils::CreateUriL(gFullUri16);
1.44 + CleanupStack::PushL(uri);
1.45 +
1.46 + gUriComponent16.Copy(KScheme0);
1.47 + HBufC* text = uri->Uri().DisplayFormL(EUriScheme);
1.48 + TInt result = text->Compare(gUriComponent16) == 0? KErrNone : KUriUtilsErrDifferentScheme;
1.49 + delete text;
1.50 + User::LeaveIfError(result);
1.51 +
1.52 + gUriComponent16.Copy(KUserInfo0);
1.53 + text = uri->Uri().DisplayFormL(EUriUserinfo);
1.54 + result = text->Compare(gUriComponent16) == 0? KErrNone : KUriUtilsErrDifferentUserInfo;
1.55 + delete text;
1.56 + User::LeaveIfError(result);
1.57 +
1.58 + gUriComponent16.Copy(KHost0);
1.59 + text = uri->Uri().DisplayFormL(EUriHost);
1.60 + result = text->Compare(gUriComponent16) == 0? KErrNone : KUriUtilsErrDifferentHost;
1.61 + delete text;
1.62 + User::LeaveIfError(result);
1.63 +
1.64 + gUriComponent16.Copy(KPort0);
1.65 + text = uri->Uri().DisplayFormL(EUriPort);
1.66 + result = text->Compare(gUriComponent16) == 0? KErrNone : KUriUtilsErrDifferentPort;
1.67 + delete text;
1.68 + User::LeaveIfError(result);
1.69 +
1.70 + gUriComponent16.Copy(KParams0);
1.71 + text = uri->Uri().DisplayFormL(EUriPath);
1.72 + result = text->Compare(gUriComponent16) == 0? KErrNone : KUriUtilsErrDifferentPath;
1.73 + delete text;
1.74 + User::LeaveIfError(result);
1.75 +
1.76 + gUriComponent16.Copy(KHeaders0);
1.77 + text = uri->Uri().DisplayFormL(EUriQuery);
1.78 + result = text->Compare(gUriComponent16) == 0? KErrNone : KUriUtilsErrDifferentQuery;
1.79 + delete text;
1.80 + User::LeaveIfError(result);
1.81 + CleanupStack::PopAndDestroy(uri);
1.82 + }
1.83 +
1.84 +void ParseUriTestsDeprecated()
1.85 + {
1.86 + test.Next(_L("Parsing 16 bit URIs (deprecated)"));
1.87 + gFullUri16.Copy(KUri0);
1.88 + TUriParser16 parser16;
1.89 + parser16.Parse(gFullUri16);
1.90 + gUriComponent16.Copy(KScheme0);
1.91 + TInt result = parser16.Extract(EUriScheme).Compare(gUriComponent16);
1.92 + test(!result);
1.93 + gUriComponent16.Copy(KUserInfo0);
1.94 + result = parser16.Extract(EUriUserinfo).Compare(gUriComponent16);
1.95 + test(!result);
1.96 + gUriComponent16.Copy(KHost0);
1.97 + result = parser16.Extract(EUriHost).Compare(gUriComponent16);
1.98 + test(!result);
1.99 + gUriComponent16.Copy(KPort0);
1.100 + result = parser16.Extract(EUriPort).Compare(gUriComponent16);
1.101 + test(!result);
1.102 + gUriComponent16.Copy(KParams0);
1.103 + result = parser16.Extract(EUriPath).Compare(gUriComponent16);
1.104 + test(!result);
1.105 + gUriComponent16.Copy(KHeaders0);
1.106 + result = parser16.Extract(EUriQuery).Compare(gUriComponent16);
1.107 + test(!result);
1.108 + }
1.109 +
1.110 +void ParseUriTests()
1.111 + {
1.112 + test.Next(_L("@SYMTestCaseID IWS-APPPROTOCOLS-INETURILIST-TESTUTILS-0001 Parsing 8 bit URIs"));
1.113 + TUriParser8 parser8;
1.114 + parser8.Parse(KUri0);
1.115 + TInt result = parser8.Extract(EUriScheme).Compare(KScheme0);
1.116 + test(!result);
1.117 + result = parser8.Extract(EUriUserinfo).Compare(KUserInfo0);
1.118 + test(!result);
1.119 + result = parser8.Extract(EUriHost).Compare(KHost0);
1.120 + test(!result);
1.121 + result = parser8.Extract(EUriPort).Compare(KPort0);
1.122 + test(!result);
1.123 + result = parser8.Extract(EUriPath).Compare(KParams0);
1.124 + test(!result);
1.125 + result = parser8.Extract(EUriQuery).Compare(KHeaders0);
1.126 + test(!result);
1.127 + result =parser8.Parse(KParseUri);
1.128 + test(!result);
1.129 + ParseUriTestsDeprecated();
1.130 + TRAP (result ,ParseUriTests16BitL());
1.131 + test(result == KErrNone);
1.132 + }
1.133 +
1.134 +void GenarateUriTestsL()
1.135 + {
1.136 + test.Next(_L("@SYMTestCaseID IWS-APPPROTOCOLS-INETURILIST-TESTUTILS-0002 Generating 8 bit URIs"));
1.137 + CUri8* uri8 = CUri8::NewLC();
1.138 + uri8->SetComponentL(KScheme0, EUriScheme);
1.139 + uri8->SetComponentL(KHost0, EUriHost);
1.140 + uri8->SetComponentL(KUserInfo0, EUriUserinfo);
1.141 + uri8->SetComponentL(KPort0, EUriPort);
1.142 + uri8->SetComponentL(KParams0, EUriPath);
1.143 + uri8->SetComponentL(KHeaders0, EUriQuery);
1.144 + const TDesC8& des8 = uri8->Uri().UriDes();
1.145 + TInt result = des8.Compare(KUri0);
1.146 + test(!result);
1.147 + CleanupStack::PopAndDestroy(uri8);
1.148 +
1.149 + test.Next(_L("Generating 16 bit URIs"));
1.150 + CUri16* uri16 = CUri16::NewLC();
1.151 + gUriComponent16.Copy(KScheme0);
1.152 + uri16->SetComponentL(gUriComponent16, EUriScheme);
1.153 + gUriComponent16.Copy(KHost0);
1.154 + uri16->SetComponentL(gUriComponent16, EUriHost);
1.155 + gUriComponent16.Copy(KUserInfo0);
1.156 + uri16->SetComponentL(gUriComponent16, EUriUserinfo);
1.157 + gUriComponent16.Copy(KPort0);
1.158 + uri16->SetComponentL(gUriComponent16, EUriPort);
1.159 + gUriComponent16.Copy(KParams0);
1.160 + uri16->SetComponentL(gUriComponent16, EUriPath);
1.161 + gUriComponent16.Copy(KHeaders0);
1.162 + uri16->SetComponentL(gUriComponent16, EUriQuery);
1.163 + const TDesC16& des16 = uri16->Uri().UriDes();
1.164 + gFullUri16.Copy(KUri0);
1.165 + result = des16.Compare(gFullUri16);
1.166 + test(!result);
1.167 + CleanupStack::PopAndDestroy(uri16);
1.168 + }
1.169 +
1.170 +void ValidateTest(const TDesC8& aUri, TInt aErrorToAssert)
1.171 + {
1.172 + TUriParser8 parser8;
1.173 + TUriParser16 parser16;
1.174 + parser8.Parse(aUri);
1.175 + TInt result = parser8.Validate();
1.176 + test(result == aErrorToAssert);
1.177 + gFullUri16.Copy(aUri);
1.178 + parser16.Parse(gFullUri16);
1.179 + result = parser16.Validate();
1.180 + test(result == aErrorToAssert);
1.181 + }
1.182 +
1.183 +void ValidateSip8Test(const TDesC8& aUri, TInt aErrorToAssert)
1.184 + {
1.185 + TUriParser8 parser8;
1.186 + parser8.Parse(aUri);
1.187 + TInt result = parser8.Validate();
1.188 + test(result == aErrorToAssert);
1.189 + }
1.190 +
1.191 +void ValidateUriTests()
1.192 + {
1.193 + test.Next(_L("@SYMTestCaseID IWS-APPPROTOCOLS-INETURILIST-TESTUTILS-0003 Validate URIs 8 and 16 bit"));
1.194 +
1.195 + test.Next(_L("[Validate] Check full correct URI"));
1.196 + ValidateTest(KVldUri0, KErrNone);
1.197 +
1.198 + test.Next(_L("[Validate] Check unsupported scheme"));
1.199 + ValidateTest(KVldNotSupported, KErrNotSupported);
1.200 +
1.201 + test.Next(_L("[Validate] Check invalid hosts"));
1.202 + ValidateTest(KVldInvalidHost0, KUriUtilsErrInvalidHost);
1.203 + ValidateTest(KVldInvalidHost1, KUriUtilsErrInvalidHost);
1.204 + ValidateTest(KVldInvalidHost2, KUriUtilsErrInvalidHost);
1.205 + ValidateTest(KVldInvalidHost3, KUriUtilsErrInvalidHost);
1.206 + ValidateTest(KVldInvalidHost4, KUriUtilsErrInvalidHost);
1.207 + ValidateSip8Test(KVldInvalidHost5, KUriUtilsErrInvalidHost );
1.208 +
1.209 + test.Next(_L("[Validate] Check valid hosts"));
1.210 + ValidateTest(KVldValidHost0, KErrNone);
1.211 + ValidateTest(KVldValidHost1, KErrNone);
1.212 + ValidateTest(KVldValidHost2, KErrNone);
1.213 +
1.214 + test.Next(_L("[Validate] Check invalid ports"));
1.215 + ValidateTest(KVldInvalidPort0, KUriUtilsErrInvalidPort);
1.216 + ValidateTest(KVldInvalidNoPort, KUriUtilsErrInvalidPort);
1.217 + test.Next(_L("[Validate] Check valid ports"));
1.218 + ValidateTest(KVldValidPort0, KErrNone);
1.219 +
1.220 + test.Next(_L("[Validate] Check invalid usernames and passwords"));
1.221 + ValidateTest(KVldInvalidUserInfo0, KUriUtilsErrInvalidUserInfo);
1.222 + ValidateTest(KVldInvalidUserInfo1, KUriUtilsErrInvalidUserInfo);
1.223 + ValidateTest(KVldInvalidUserInfo2, KUriUtilsErrInvalidUserInfo);
1.224 + ValidateTest(KVldInvalidUserInfo3, KUriUtilsErrInvalidUserInfo);
1.225 + test.Next(_L("[Validate] Check valid usernames and passwords"));
1.226 + ValidateTest(KVldValidUserInfo0, KErrNone);
1.227 + ValidateTest(KVldValidUserInfo1, KErrNone);
1.228 + ValidateTest(KVldValidUserInfo2, KErrNone);
1.229 + ValidateTest(KVldValidUserInfo3, KErrNone);
1.230 +
1.231 + test.Next(_L("[Validate] Check invalid parameters"));
1.232 + ValidateTest(KVldInvalidParams0, KUriUtilsErrInvalidParam);
1.233 + ValidateTest(KVldInvalidParams1, KUriUtilsErrInvalidParam);
1.234 + ValidateTest(KVldInvalidParams2, KUriUtilsErrInvalidParam);
1.235 + ValidateTest(KVldInvalidParams3, KUriUtilsErrInvalidParam);
1.236 + ValidateTest(KVldInvalidParams4, KUriUtilsErrInvalidParam);
1.237 + ValidateTest(KVldInvalidParams5, KUriUtilsErrInvalidParam);
1.238 + test.Next(_L("[Validate] Check valid parameters"));
1.239 + ValidateTest(KVldValidParams0, KErrNone);
1.240 + ValidateTest(KVldValidParams1, KErrNone);
1.241 + ValidateTest(KVldValidParams2, KErrNone);
1.242 +
1.243 + test.Next(_L("[Validate] Check invalid headers"));
1.244 + ValidateTest(KVldInvalidHeaders0, KUriUtilsErrInvalidHeaders);
1.245 + ValidateTest(KVldInvalidHeaders1, KUriUtilsErrInvalidHeaders);
1.246 + ValidateTest(KVldInvalidHeaders2, KUriUtilsErrInvalidHeaders);
1.247 + test.Next(_L("[Validate] Check valid headers"));
1.248 + ValidateTest(KVldValidHeaders0, KErrNone);
1.249 + ValidateTest(KVldValidHeaders1, KErrNone);
1.250 + ValidateTest(KVldValidHeaders2, KErrNone);
1.251 + ValidateTest(KVldValidHeaders3, KErrNone);
1.252 +
1.253 + test.Next(_L("[Validate] General tests"));
1.254 + ValidateTest(KVldInvalidGeneral1, KUriUtilsErrInvalidPort);
1.255 + ValidateTest(KVldInvalidGeneral2, KUriUtilsErrInvalidHost);
1.256 + ValidateTest(KVldValidGeneral1, KErrNone);
1.257 + }
1.258 +
1.259 +void EquivalenceTest(const TDesC8& aLhs, const TDesC8& aRhs, TInt aExpected)
1.260 + {
1.261 + TUriParser8 lhs8;
1.262 + lhs8.Parse(aLhs);
1.263 + TUriParser8 rhs8;
1.264 + rhs8.Parse(aRhs);
1.265 + TInt result = lhs8.Equivalent(rhs8);
1.266 + test(result == aExpected);
1.267 +
1.268 + TUriParser16 lhs16;
1.269 + gFullUri16.Copy(aLhs);
1.270 + lhs16.Parse(gFullUri16);
1.271 + TUriParser16 rhs16;
1.272 + gFullUriRhs16.Copy(aRhs);
1.273 + rhs16.Parse(gFullUriRhs16);
1.274 +
1.275 + result = lhs16.Equivalent(rhs16);
1.276 + test(result == aExpected);
1.277 + }
1.278 +
1.279 +void EquivalenceUriTests()
1.280 + {
1.281 + test.Next(_L("@SYMTestCaseID IWS-APPPROTOCOLS-INETURILIST-TESTUTILS-0004 Equivalent URIs 8 and 16 bit"));
1.282 + EquivalenceTest(KEquivUri0, KEquivUri0, KErrNone);
1.283 + EquivalenceTest(KEquivUri0, KEquivScheme0, KErrNone);
1.284 +
1.285 + test.Next(_L("[Equivalent] Compare user names and passwords"));
1.286 + EquivalenceTest(KEquivUri0, KEquivUserInfo0, KUriUtilsErrDifferentUserInfo);
1.287 + EquivalenceTest(KEquivUri0, KEquivUserInfo1, KUriUtilsErrDifferentUserInfo);
1.288 +
1.289 + test.Next(_L("[Equivalent] Compare hosts"));
1.290 + EquivalenceTest(KEquivUri0, KEquivHost0, KErrNone);
1.291 + EquivalenceTest(KEquivUri1, KEquivHost0, KUriUtilsErrDifferentHost);
1.292 + EquivalenceTest(KEquivUri1, KEquivHost1, KErrNone);
1.293 +
1.294 + test.Next(_L("[Equivalent] Compare hosts"));
1.295 + EquivalenceTest(KEquivUri0, KEquivPort0, KUriUtilsErrDifferentPort);
1.296 +
1.297 + test.Next(_L("[Equivalent] Compare parameters"));
1.298 + EquivalenceTest(KEquivUri0, KEquivParam0, KErrNone);
1.299 + EquivalenceTest(KEquivUri0, KEquivParam1, KErrNone);
1.300 + EquivalenceTest(KEquivUri0, KEquivParam2, KUriUtilsErrDifferentPath);
1.301 + EquivalenceTest(KEquivUri0, KEquivParam3, KUriUtilsErrDifferentPath);
1.302 + EquivalenceTest(KEquivParam4, KEquivParam5, KErrNone);
1.303 + EquivalenceTest(KEquivParam4, KEquivParam6, KErrNone);
1.304 + EquivalenceTest(KEquivParam4, KEquivParam7, KUriUtilsErrDifferentPath);
1.305 + EquivalenceTest(KEquivParam4, KEquivParam8, KUriUtilsErrDifferentPath);
1.306 + EquivalenceTest(KEquivParam4, KEquivParam9, KUriUtilsErrDifferentPath);
1.307 + EquivalenceTest(KEquivParam7, KEquivParam4, KUriUtilsErrDifferentPath);
1.308 + EquivalenceTest(KEquivParam4, KEquivParam10, KErrNone);
1.309 + EquivalenceTest(KEquivParam4, KEquivParam11, KUriUtilsErrDifferentPath);
1.310 + EquivalenceTest(KEquivParam12, KEquivParam13, KUriUtilsErrDifferentPath);
1.311 + EquivalenceTest(KEquivParam4, KEquivParam14, KUriUtilsErrDifferentPath);
1.312 + EquivalenceTest(KEquivParam14, KEquivParam4, KUriUtilsErrDifferentPath);
1.313 +
1.314 + test.Next(_L("[Equivalent] Compare headers"));
1.315 + EquivalenceTest(KEquivHeader0, KEquivHeader1, KErrNone);
1.316 + EquivalenceTest(KEquivHeader0, KEquivHeader2, KUriUtilsErrDifferentQuery);
1.317 + EquivalenceTest(KEquivHeader2, KEquivHeader0, KUriUtilsErrDifferentQuery);
1.318 + EquivalenceTest(KEquivHeader2, KEquivHeader3, KErrNone);
1.319 + EquivalenceTest(KEquivHeader3, KEquivHeader2, KErrNone);
1.320 + EquivalenceTest(KEquivHeader4, KEquivHeader5, KErrNone);
1.321 + EquivalenceTest(KEquivHeader4, KEquivHeader6, KErrNone);
1.322 + EquivalenceTest(KEquivHeader4, KEquivHeader7, KUriUtilsErrDifferentQuery);
1.323 +
1.324 + test.Next(_L("[Equivalent] Expanded URIs"));
1.325 + EquivalenceTest(KEquivUri0, KEquivExpand0, KErrNone);
1.326 + EquivalenceTest(KEquivExpand0, KEquivUri0, KErrNone);
1.327 + EquivalenceTest(KEquivUri0, KEquivExpand1, KErrNone);
1.328 + EquivalenceTest(KEquivUri0, KEquivExpand2, KUriUtilsErrDifferentUserInfo);
1.329 + EquivalenceTest(KEquivExpand3, KEquivExpand4, KErrNone);
1.330 + EquivalenceTest(KEquivExpand4, KEquivExpand3, KErrNone);
1.331 +
1.332 + test.Next(_L("[Equivalent] General tests"));
1.333 + EquivalenceTest(KEquivGeneral1, KEquivGeneral2, KUriUtilsErrDifferentPort);
1.334 + }
1.335 +
1.336 +void doMainL()
1.337 + {
1.338 + test.Start(_L("Starting unit tests"));
1.339 +
1.340 + ParseUriTests();
1.341 + GenarateUriTestsL();
1.342 + ValidateUriTests();
1.343 + EquivalenceUriTests();
1.344 +
1.345 + test.End();
1.346 + test.Close();
1.347 + }
1.348 +
1.349 +GLDEF_C TInt E32Main()
1.350 +//
1.351 +// Main function
1.352 + {
1.353 + __UHEAP_MARK;
1.354 +
1.355 + CTrapCleanup* theCleanup=CTrapCleanup::New();
1.356 + TRAPD(ret,doMainL());
1.357 + test(ret==KErrNone);
1.358 + delete theCleanup;
1.359 +
1.360 + __UHEAP_MARKEND;
1.361 +
1.362 + return KErrNone;
1.363 + }
1.364 +