First public contribution.
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".
8 // Initial Contributors:
9 // Nokia Corporation - initial contribution.
16 #include "CSipUriAndAuthorityTest.h"
17 #include "CUriAndAuthorityTest.h"
18 #include <uriutilscommon.h>
19 #include "SipUriAndAuthorityTests.h"
24 CSipUriAndAuthorityTest* CSipUriAndAuthorityTest::NewLC(CIpuTestHarness* aTestHarness)
26 CSipUriAndAuthorityTest* self = new (ELeave) CSipUriAndAuthorityTest(aTestHarness);
27 CleanupStack::PushL(self);
32 CSipUriAndAuthorityTest* CSipUriAndAuthorityTest::NewL(CIpuTestHarness* aTestHarness)
34 CSipUriAndAuthorityTest* self = CSipUriAndAuthorityTest::NewLC(aTestHarness);
35 CleanupStack::Pop(self);
39 CSipUriAndAuthorityTest::CSipUriAndAuthorityTest(CIpuTestHarness* aTestHarness)
40 : iTestHarness(aTestHarness)
44 void CSipUriAndAuthorityTest::ConstructL()
48 CSipUriAndAuthorityTest::~CSipUriAndAuthorityTest()
57 void CSipUriAndAuthorityTest::DoTestsL()
60 CUriAndAuthorityTest* uriAndAuthorityTest = CUriAndAuthorityTest::NewLC(iTestHarness);
62 // Test Sips TUriParser Component Extraction
63 uriAndAuthorityTest->TestUriComponentExtractionL(KCompsSip0, KSchemeSip0, KUserInfoSip0, KHostSip0, KPortSip0, KPathSip0, KQuerySip0, KFragmentSip0);
64 uriAndAuthorityTest->TestUriComponentExtractionL(KCompsSip1, KSchemeSip1, KUserInfoSip1, KHostSip1, KPortSip1, KPathSip1, KQuerySip1, KFragmentSip1);
65 uriAndAuthorityTest->TestUriComponentExtractionL(KCompsSip2, KSchemeSip2, KUserInfoSip2, KHostSip2, KPortSip2, KPathSip2, KQuerySip2, KFragmentSip2);
66 uriAndAuthorityTest->TestUriComponentExtractionL(KCompsSip3, KSchemeSip3, KUserInfoSip3, KHostSip3, KPortSip3, KPathSip3, KQuerySip3, KFragmentSip3);
67 uriAndAuthorityTest->TestUriComponentExtractionL(KCompsSip4, KSchemeSip4, KUserInfoSip4, KHostSip4, KPortSip4, KPathSip4, KQuerySip4, KFragmentSip4);
68 uriAndAuthorityTest->TestUriComponentExtractionL(KCompsSip5, KSchemeSip5, KUserInfoSip5, KHostSip5, KPortSip5, KPathSip5, KQuerySip5, KFragmentSip5);
70 // Sip URI construction test
71 uriAndAuthorityTest->TestUriSetComponentL(KSipUri_Scheme0, KSipUri_Host0, KSipUri_Userinfo0, KSipUri_Port0, KSipUri_Path0, KSipUri_Query0, KSipUri_Fragment0,
72 KSipUri_SchemeComp0, KSipUri_HostComp0, KSipUri_UserinfoComp0, KSipUri_PortComp0, KSipUri_PathComp0, KSipUri_QueryComp0, KSipUri_FragmentComp0);
74 /** No Fragment part exist in Sip Uri's as per RFC3261
75 // Sip URI destruction test
76 uriAndAuthorityTest->TestUriRemoveComponentL(KSipUri_NoScheme0, KSipUri_NoHost0, KSipUri_NoUserinfo0, KSipUri_NoPort0, KSipUri_NoPath0,
77 KSipUri_NoQuery0, KSipUri_NoFragment0, KSipUri_Whole0);
79 // Same test as above, but with an IPv6 format host
80 // Sip URI construction test
81 uriAndAuthorityTest->TestUriSetComponentL(KSipUri_Scheme0, KSipUri_IPv6Host0, KSipUri_IPv6UserInfo0, KSipUri_IPv6Port0, KSipUri_IPv6Path0, KSipUri_IPv6Query0, KSipUri_IPv6Fragment0,
82 KSipUri_SchemeComp0, KUri_IPv6HostComp, KSipUri_UserinfoComp0, KSipUri_PortComp0, KSipUri_PathComp0, KSipUri_QueryComp0, KSipUri_FragmentComp0);
84 /** No Fragment part exist in Sip Uri's as per RFC3261
85 // Sip URI destruction test
86 uriAndAuthorityTest->TestUriRemoveComponentL(KSipUri_IPv6NoScheme0, KSipUri_IPv6NoHost0, KSipUri_IPv6NoUserinfo0, KSipUri_IPv6NoPort0, KSipUri_IPv6NoPath0,
87 KSipUri_IPv6NoQuery0, KSipUri_IPv6NoFragment0, KSipUri_IPv6Whole0);
89 CleanupStack::PopAndDestroy(uriAndAuthorityTest);
93 error=OpenSipURIFile();
96 iTestHarness->StartTestL(_L("Test TUriParser Component "));
97 SipLogError(error, KCompsSipUriFileSystemError);
101 error=SipUriValidationL();
104 iTestHarness->StartTestL(_L("Test TUriParser Component Validation "));
109 iTestHarness->LogIt(KCompsSipUriNoValidate);
114 iTestHarness->LogIt(KCompsSipUriNoValidateData);
120 iTestHarness->EndTest(KErrNone);
123 if (iFoundEquivalence)
125 error=SipUriEquivalenceL();
126 //No Sip URI Equivalence data
127 if (KErrBadName==error)
129 iTestHarness->StartTestL(_L("Test TUriParser Component Equivalence "));
130 iTestHarness->LogIt(KCompsSipUriNoEquivalenceData);
131 iTestHarness->EndTest(KErrNone);
136 iTestHarness->StartTestL(_L("Test TUriParser Component Equivalence "));
137 iTestHarness->LogIt(KCompsSipUriNoEquivalence);
138 iTestHarness->EndTest(KErrNone);
147 // Open SIP Uri data file
150 TInt CSipUriAndAuthorityTest::OpenSipURIFile()
155 error = iFsSession.Connect();
161 error = file.Open(iFsSession, KCompsSipUriFileName, EFileRead);
168 iTUriParserFile.Set(file);
177 void CSipUriAndAuthorityTest::SipLogError(TInt aError, const TDesC16& aSipUri) const
179 TBool wrongError=EFalse;
181 //compare the Equivalent SIP URI to look for the correct error, these SIP URIs must be in T_UriParserSipUri.txt
183 if (0==aSipUri.Compare(KCompsSipUriEqual0) && KErrNone != aError
184 || 0==aSipUri.Compare(KCompsSipUriEqual1) && KErrNone != aError
185 || 0==aSipUri.Compare(KCompsSipUriEqual2) && KErrNone != aError)
187 iTestHarness->LogIt(KCompsSipUriValidMess0);
191 if (0==aSipUri.Compare(KCompsSipUriNotEqual0) && KUriUtilsErrDifferentUserInfo == aError
192 || 0==aSipUri.Compare(KCompsSipUriNotEqual1) && KUriUtilsErrDifferentPath == aError
193 || 0==aSipUri.Compare(KCompsSipUriNotEqual2) && KUriUtilsErrDifferentPort == aError )
195 iTestHarness->LogIt(KCompsSipUriEqualMess1);
198 //compare the SIP URIs to look for the correct error returned by CUri for validation
199 if (0==aSipUri.Compare(KCompsSipUriNotEqual1) && KUriUtilsErrDifferentPath != aError )
201 iTestHarness->LogIt(KCompsSipUriInvalidMess9);
206 if (0==aSipUri.Compare(KCompsSipUriValid0) && KErrNone!= aError
207 || 0==aSipUri.Compare(KCompsSipUriValid1) && KErrNone!= aError)
209 iTestHarness->LogIt(KCompsSipUriValidMess0);
213 if (0==aSipUri.Compare(KCompsSipUriInvalid0) && KErrNotSupported != aError)
215 iTestHarness->LogIt(KCompsSipUriInvalidMess0);
219 if( 0==aSipUri.Compare(KCompsSipUriInvalid5) && KUriUtilsErrInvalidParam!= aError
220 || 0==aSipUri.Compare(KCompsSipUriInvalid6) && KUriUtilsErrInvalidParam!= aError)
222 iTestHarness->LogIt(KCompsSipUriInvalidMess1);
226 if (0==aSipUri.Compare(KCompsSipUriInvalid3) && KUriUtilsErrInvalidHost!= aError)
228 iTestHarness->LogIt(KCompsSipUriInvalidMess2);
232 if (0==aSipUri.Compare(KCompsSipUriInvalid2) && KUriUtilsErrInvalidHeaders != aError)
234 iTestHarness->LogIt(KCompsSipUriInvalidMess8);
238 if (0==aSipUri.Compare(KCompsSipUriInvalid1) && KUriUtilsErrInvalidPort != aError
239 || 0==aSipUri.Compare(KCompsSipUriInvalid4) && KUriUtilsErrInvalidPort!= aError
240 || 0==aSipUri.Compare(KCompsSipUriNotEqual2) && KUriUtilsErrDifferentPort != aError)
242 iTestHarness->LogIt(KCompsSipUriInvalidMess3);
246 if (0==aSipUri.Compare(KCompsSipUriInvalid7) && KUriUtilsErrInvalidUserInfo!= aError
247 || 0==aSipUri.Compare(KCompsSipUriNotEqual0) && KUriUtilsErrDifferentUserInfo != aError)
249 iTestHarness->LogIt(KCompsSipUriInvalidMess7);
255 iTestHarness->LogIt(KCompsSipUriInvalidMess5);
258 LogErrorMessage(aSipUri, aError);
262 iTestHarness->EndTest(aError);
266 iTestHarness->EndTest(KErrNone);
272 // SIP Uri Validation Test
275 TInt CSipUriAndAuthorityTest::SipUriValidationL()
279 iFoundEquivalence=EFalse;
281 //read the Valid section name in
282 error=iTUriParserFile.Read(data);
283 while(0!=data.Compare(KCompsSipUriValidate) && KErrNone==error)
285 if (0==data.Compare(KCompsSipUriEquivalence))
287 iFoundEquivalence=ETrue;
291 error=iTUriParserFile.Read(data);
294 //No Validate Section, KErrEof
295 if (0!=data.Compare(KCompsSipUriValidate))
300 //get the validation Data
301 error=iTUriParserFile.Read(data);
310 if (0==data.Compare(KCompsSipUriEquivalence))
312 iFoundEquivalence=ETrue;
316 while (KErrNone==error)
319 while(data.Left(2)==(KCompsSipUriComment))
322 iTUriParserFile.Read(data);
324 if (0==data.Compare(KCompsSipUriEquivalence))
326 iFoundEquivalence=ETrue;
330 //validate the 16 bit Sip URI first
331 iTestHarness->StartTestL(_L("Test TUriParser Component Validation (16-bit SIP URI)"));
332 iTestHarness->LogIt(_L("Uri - %S"), &data);
333 error = DoSipUriValidation <TUriParser16>(data);
334 SipLogError(error, data);
336 // Make 8-bit copies and validate this SIP URI
337 HBufC8* uriBuf = HBufC8::NewLC(data.Length());
338 TPtr8 uri8Bit = uriBuf->Des();
341 iTestHarness->StartTestL(_L("Test TUriParser Component Validation (8-bit SIP URI)"));
342 iTestHarness->LogIt(_L("Uri - %S"), &data);
343 error = DoSipUriValidation <TUriParser8>(uri8Bit);
344 SipLogError(error, data);
347 CleanupStack::PopAndDestroy(1, uriBuf);// uriBuf
349 error=iTUriParserFile.Read(data);
356 // SIP Uri Equivalence Test
359 TInt CSipUriAndAuthorityTest::SipUriEquivalenceL()
363 TBool sipUriError=EFalse;
364 TInt errorA=KErrNone;
365 TInt errorB=KErrNone;
368 //get the Equivalence Data
369 errorA=iTUriParserFile.Read(valueA);
370 while(valueA.Left(2)==(KCompsSipUriComment) && KErrNone==errorA)
373 errorA=iTUriParserFile.Read(valueA);
376 errorB=iTUriParserFile.Read(valueB);
377 //no Equivalence Data
378 if (KErrEof==errorA || KErrEof==errorB)
383 //read the Equivalence Sip URI
384 while (KErrNone==errorA && KErrNone==errorB)
387 while(valueA.Left(2)==(KCompsSipUriComment))
390 errorA=iTUriParserFile.Read(valueA);
392 while(valueB.Left(2)==(KCompsSipUriComment))
395 errorB=iTUriParserFile.Read(valueB);
398 //validate the 16 bit Sip URI first
399 iTestHarness->StartTestL(_L("Test TUriParser Component Equivalence (16-bit SIP)"));
400 iTestHarness->LogIt(_L("Uri - %S"), &valueA);
401 iTestHarness->LogIt(_L("Uri - %S"), &valueB);
403 error= DoSipUriEquivalence<TUriParser16>(valueA, valueB, sipUriError);
404 //check for parsing errors on both Sip URIs
405 if (KErrBadSipUriA==sipUriError)
407 SipLogError(error, valueA);
409 if (KErrBadSipUriB==sipUriError)
411 SipLogError(error, valueB);
413 SipLogError(error, valueA);
415 // Make 8-bit copies and validate this SIP URI
416 HBufC8* uriBufA = HBufC8::NewLC(valueA.Length());
417 TPtr8 uri8BitA = uriBufA->Des();
418 uri8BitA.Copy(valueA);
420 HBufC8* uriBufB = HBufC8::NewLC(valueB.Length());
421 TPtr8 uri8BitB = uriBufB->Des();
422 uri8BitB.Copy(valueB);
424 iTestHarness->StartTestL(_L("Test TUriParser Component Equivalence (8-bit SIP)"));
425 iTestHarness->LogIt(_L("Uri - %S"), &valueA);
426 iTestHarness->LogIt(_L("Uri - %S"), &valueB);
427 error = DoSipUriEquivalence<TUriParser8>(uri8BitA, uri8BitB, sipUriError);
428 //check for parsing errors on both Sip URIs
429 if (KErrBadSipUriA==sipUriError)
431 SipLogError(error, valueA);
433 if (KErrBadSipUriA==sipUriError)
435 SipLogError(error, valueB);
437 SipLogError(error, valueA);
439 CleanupStack::PopAndDestroy(2, uriBufA);// uriBufA, uriBufB
441 errorA=iTUriParserFile.Read(valueA);
442 errorB=iTUriParserFile.Read(valueB);
452 void CSipUriAndAuthorityTest::LogErrorMessage(const TDesC16& aSipUri, const TInt aError)const
457 iTestHarness->LogIt(aSipUri);
460 case KErrNotSupported:
461 iTestHarness->LogIt(_L("Not Supported"));
464 case KUriUtilsErrInvalidScheme:
465 case KUriUtilsErrDifferentScheme:
466 iTestHarness->LogIt(_L("Invalid Scheme"));
469 case KUriUtilsErrInvalidUserInfo:
470 case KUriUtilsErrDifferentUserInfo:
471 iTestHarness->LogIt(_L("Invalid UserInfo"));
474 case KUriUtilsErrInvalidHost:
475 case KUriUtilsErrDifferentHost:
476 iTestHarness->LogIt(_L("Invalid Host"));
479 case KUriUtilsErrInvalidPort:
480 case KUriUtilsErrDifferentPort:
481 iTestHarness->LogIt(_L("Invalid Port"));
484 case KUriUtilsErrInvalidPath:
485 case KUriUtilsErrDifferentPath:
486 iTestHarness->LogIt(_L("Invalid Path"));
489 case KUriUtilsErrInvalidParam:
490 iTestHarness->LogIt(_L("Invalid Parameter"));
493 case KUriUtilsErrInvalidQuery:
494 case KUriUtilsErrDifferentQuery:
495 iTestHarness->LogIt(_L("Invalid Query"));
498 case KUriUtilsErrInvalidHeaders:
499 iTestHarness->LogIt(_L("Invalid Headers"));
502 case KUriUtilsErrInvalidFragment:
503 case KUriUtilsErrDifferentFragment:
504 iTestHarness->LogIt(_L("Invalid Fragment"));
511 //log correct message for equivalence
512 if (iFoundEquivalence && KErrNone==aError)
514 iTestHarness->LogIt(KCompsSipUriEqualMess0);
516 else if (iFoundEquivalence && KErrNone!=aError)
518 iTestHarness->LogIt(KCompsSipUriEqualMess1);
524 // Implementation of LOCAL functions
528 template<class TUriParserType, class TDesCType>
529 TInt DoSipUriValidation(const TDesCType& aSipUri)
531 TUriParserType uriParser;
532 TInt error = uriParser.Parse(aSipUri);
533 // Is this a valid SIP Uri?
534 if( KUriUtilsErrInvalidUri == error)
539 //Validate the Sip URI
540 return(uriParser.Validate());
543 template<class TUriParserType, class TDesCType>
544 TInt DoSipUriEquivalence(const TDesCType& aSipUriA, const TDesCType& aSipUriB, TInt &aSipUriError)
546 TUriParserType uriParserA;
547 TUriParserType uriParserB;
549 TBool errorA = uriParserA.Parse(aSipUriA);
550 // Is this a valid SIP Uri?
551 if( KUriUtilsErrInvalidUri == errorA)
553 aSipUriError=KErrBadSipUriA;
557 TBool errorB = uriParserB.Parse(aSipUriB);
558 // Is this a valid SIP Uri?
559 if( KUriUtilsErrInvalidUri == errorB)
561 aSipUriError=KErrBadSipUriB;
565 return(uriParserA.Equivalent(uriParserB));