sl@0: // Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies). sl@0: // All rights reserved. sl@0: // This component and the accompanying materials are made available sl@0: // under the terms of "Eclipse Public License v1.0" sl@0: // which accompanies this distribution, and is available sl@0: // at the URL "http://www.eclipse.org/legal/epl-v10.html". sl@0: // sl@0: // Initial Contributors: sl@0: // Nokia Corporation - initial contribution. sl@0: // sl@0: // Contributors: sl@0: // sl@0: // Description: sl@0: // sl@0: sl@0: #include "CSipUriAndAuthorityTest.h" sl@0: #include "CUriAndAuthorityTest.h" sl@0: #include sl@0: #include "SipUriAndAuthorityTests.h" sl@0: sl@0: #include sl@0: #include sl@0: sl@0: CSipUriAndAuthorityTest* CSipUriAndAuthorityTest::NewLC(CIpuTestHarness* aTestHarness) sl@0: { sl@0: CSipUriAndAuthorityTest* self = new (ELeave) CSipUriAndAuthorityTest(aTestHarness); sl@0: CleanupStack::PushL(self); sl@0: self->ConstructL(); sl@0: return self; sl@0: } sl@0: sl@0: CSipUriAndAuthorityTest* CSipUriAndAuthorityTest::NewL(CIpuTestHarness* aTestHarness) sl@0: { sl@0: CSipUriAndAuthorityTest* self = CSipUriAndAuthorityTest::NewLC(aTestHarness); sl@0: CleanupStack::Pop(self); sl@0: return self; sl@0: } sl@0: sl@0: CSipUriAndAuthorityTest::CSipUriAndAuthorityTest(CIpuTestHarness* aTestHarness) sl@0: : iTestHarness(aTestHarness) sl@0: { sl@0: } sl@0: sl@0: void CSipUriAndAuthorityTest::ConstructL() sl@0: { sl@0: } sl@0: sl@0: CSipUriAndAuthorityTest::~CSipUriAndAuthorityTest() sl@0: { sl@0: } sl@0: sl@0: // sl@0: // sl@0: // SIP Uri tests sl@0: // sl@0: // sl@0: void CSipUriAndAuthorityTest::DoTestsL() sl@0: { sl@0: //allredy pushed sl@0: CUriAndAuthorityTest* uriAndAuthorityTest = CUriAndAuthorityTest::NewLC(iTestHarness); sl@0: sl@0: // Test Sips TUriParser Component Extraction sl@0: uriAndAuthorityTest->TestUriComponentExtractionL(KCompsSip0, KSchemeSip0, KUserInfoSip0, KHostSip0, KPortSip0, KPathSip0, KQuerySip0, KFragmentSip0); sl@0: uriAndAuthorityTest->TestUriComponentExtractionL(KCompsSip1, KSchemeSip1, KUserInfoSip1, KHostSip1, KPortSip1, KPathSip1, KQuerySip1, KFragmentSip1); sl@0: uriAndAuthorityTest->TestUriComponentExtractionL(KCompsSip2, KSchemeSip2, KUserInfoSip2, KHostSip2, KPortSip2, KPathSip2, KQuerySip2, KFragmentSip2); sl@0: uriAndAuthorityTest->TestUriComponentExtractionL(KCompsSip3, KSchemeSip3, KUserInfoSip3, KHostSip3, KPortSip3, KPathSip3, KQuerySip3, KFragmentSip3); sl@0: uriAndAuthorityTest->TestUriComponentExtractionL(KCompsSip4, KSchemeSip4, KUserInfoSip4, KHostSip4, KPortSip4, KPathSip4, KQuerySip4, KFragmentSip4); sl@0: uriAndAuthorityTest->TestUriComponentExtractionL(KCompsSip5, KSchemeSip5, KUserInfoSip5, KHostSip5, KPortSip5, KPathSip5, KQuerySip5, KFragmentSip5); sl@0: sl@0: // Sip URI construction test sl@0: uriAndAuthorityTest->TestUriSetComponentL(KSipUri_Scheme0, KSipUri_Host0, KSipUri_Userinfo0, KSipUri_Port0, KSipUri_Path0, KSipUri_Query0, KSipUri_Fragment0, sl@0: KSipUri_SchemeComp0, KSipUri_HostComp0, KSipUri_UserinfoComp0, KSipUri_PortComp0, KSipUri_PathComp0, KSipUri_QueryComp0, KSipUri_FragmentComp0); sl@0: sl@0: /** No Fragment part exist in Sip Uri's as per RFC3261 sl@0: // Sip URI destruction test sl@0: uriAndAuthorityTest->TestUriRemoveComponentL(KSipUri_NoScheme0, KSipUri_NoHost0, KSipUri_NoUserinfo0, KSipUri_NoPort0, KSipUri_NoPath0, sl@0: KSipUri_NoQuery0, KSipUri_NoFragment0, KSipUri_Whole0); sl@0: */ sl@0: // Same test as above, but with an IPv6 format host sl@0: // Sip URI construction test sl@0: uriAndAuthorityTest->TestUriSetComponentL(KSipUri_Scheme0, KSipUri_IPv6Host0, KSipUri_IPv6UserInfo0, KSipUri_IPv6Port0, KSipUri_IPv6Path0, KSipUri_IPv6Query0, KSipUri_IPv6Fragment0, sl@0: KSipUri_SchemeComp0, KUri_IPv6HostComp, KSipUri_UserinfoComp0, KSipUri_PortComp0, KSipUri_PathComp0, KSipUri_QueryComp0, KSipUri_FragmentComp0); sl@0: sl@0: /** No Fragment part exist in Sip Uri's as per RFC3261 sl@0: // Sip URI destruction test sl@0: uriAndAuthorityTest->TestUriRemoveComponentL(KSipUri_IPv6NoScheme0, KSipUri_IPv6NoHost0, KSipUri_IPv6NoUserinfo0, KSipUri_IPv6NoPort0, KSipUri_IPv6NoPath0, sl@0: KSipUri_IPv6NoQuery0, KSipUri_IPv6NoFragment0, KSipUri_IPv6Whole0); sl@0: */ sl@0: CleanupStack::PopAndDestroy(uriAndAuthorityTest); sl@0: sl@0: //Sip URI validation sl@0: TInt error=KErrNone; sl@0: error=OpenSipURIFile(); sl@0: if (KErrNone!=error) sl@0: { sl@0: iTestHarness->StartTestL(_L("Test TUriParser Component ")); sl@0: SipLogError(error, KCompsSipUriFileSystemError); sl@0: } sl@0: else sl@0: { sl@0: error=SipUriValidationL(); sl@0: if (KErrNone!=error) sl@0: { sl@0: iTestHarness->StartTestL(_L("Test TUriParser Component Validation ")); sl@0: switch (error) sl@0: { sl@0: case KErrNotFound: sl@0: { sl@0: iTestHarness->LogIt(KCompsSipUriNoValidate); sl@0: } sl@0: break; sl@0: case KErrBadName: sl@0: { sl@0: iTestHarness->LogIt(KCompsSipUriNoValidateData); sl@0: } sl@0: break; sl@0: default: sl@0: break; sl@0: } sl@0: iTestHarness->EndTest(KErrNone); sl@0: } sl@0: sl@0: if (iFoundEquivalence) sl@0: { sl@0: error=SipUriEquivalenceL(); sl@0: //No Sip URI Equivalence data sl@0: if (KErrBadName==error) sl@0: { sl@0: iTestHarness->StartTestL(_L("Test TUriParser Component Equivalence ")); sl@0: iTestHarness->LogIt(KCompsSipUriNoEquivalenceData); sl@0: iTestHarness->EndTest(KErrNone); sl@0: } sl@0: } sl@0: else sl@0: { sl@0: iTestHarness->StartTestL(_L("Test TUriParser Component Equivalence ")); sl@0: iTestHarness->LogIt(KCompsSipUriNoEquivalence); sl@0: iTestHarness->EndTest(KErrNone); sl@0: error=KErrNone; sl@0: } sl@0: iFsSession.Close(); sl@0: } sl@0: } sl@0: sl@0: // sl@0: // sl@0: // Open SIP Uri data file sl@0: // sl@0: // sl@0: TInt CSipUriAndAuthorityTest::OpenSipURIFile() sl@0: { sl@0: RFile file; sl@0: TInt error=KErrNone; sl@0: sl@0: error = iFsSession.Connect(); sl@0: if (KErrNone!=error) sl@0: { sl@0: return error; sl@0: } sl@0: sl@0: error = file.Open(iFsSession, KCompsSipUriFileName, EFileRead); sl@0: if (KErrNone!=error) sl@0: { sl@0: iFsSession.Close(); sl@0: return error; sl@0: } sl@0: sl@0: iTUriParserFile.Set(file); sl@0: return error; sl@0: } sl@0: sl@0: // sl@0: // sl@0: // SIP Uri Logger sl@0: // sl@0: // sl@0: void CSipUriAndAuthorityTest::SipLogError(TInt aError, const TDesC16& aSipUri) const sl@0: { sl@0: TBool wrongError=EFalse; sl@0: sl@0: //compare the Equivalent SIP URI to look for the correct error, these SIP URIs must be in T_UriParserSipUri.txt sl@0: //All equal sl@0: if (0==aSipUri.Compare(KCompsSipUriEqual0) && KErrNone != aError sl@0: || 0==aSipUri.Compare(KCompsSipUriEqual1) && KErrNone != aError sl@0: || 0==aSipUri.Compare(KCompsSipUriEqual2) && KErrNone != aError) sl@0: { sl@0: iTestHarness->LogIt(KCompsSipUriValidMess0); sl@0: wrongError=ETrue; sl@0: } sl@0: //All not equal sl@0: if (0==aSipUri.Compare(KCompsSipUriNotEqual0) && KUriUtilsErrDifferentUserInfo == aError sl@0: || 0==aSipUri.Compare(KCompsSipUriNotEqual1) && KUriUtilsErrDifferentPath == aError sl@0: || 0==aSipUri.Compare(KCompsSipUriNotEqual2) && KUriUtilsErrDifferentPort == aError ) sl@0: { sl@0: iTestHarness->LogIt(KCompsSipUriEqualMess1); sl@0: } sl@0: sl@0: //compare the SIP URIs to look for the correct error returned by CUri for validation sl@0: if (0==aSipUri.Compare(KCompsSipUriNotEqual1) && KUriUtilsErrDifferentPath != aError ) sl@0: { sl@0: iTestHarness->LogIt(KCompsSipUriInvalidMess9); sl@0: wrongError=ETrue; sl@0: } sl@0: sl@0: sl@0: if (0==aSipUri.Compare(KCompsSipUriValid0) && KErrNone!= aError sl@0: || 0==aSipUri.Compare(KCompsSipUriValid1) && KErrNone!= aError) sl@0: { sl@0: iTestHarness->LogIt(KCompsSipUriValidMess0); sl@0: wrongError=ETrue; sl@0: } sl@0: sl@0: if (0==aSipUri.Compare(KCompsSipUriInvalid0) && KErrNotSupported != aError) sl@0: { sl@0: iTestHarness->LogIt(KCompsSipUriInvalidMess0); sl@0: wrongError=ETrue; sl@0: } sl@0: sl@0: if( 0==aSipUri.Compare(KCompsSipUriInvalid5) && KUriUtilsErrInvalidParam!= aError sl@0: || 0==aSipUri.Compare(KCompsSipUriInvalid6) && KUriUtilsErrInvalidParam!= aError) sl@0: { sl@0: iTestHarness->LogIt(KCompsSipUriInvalidMess1); sl@0: wrongError=ETrue; sl@0: } sl@0: sl@0: if (0==aSipUri.Compare(KCompsSipUriInvalid3) && KUriUtilsErrInvalidHost!= aError) sl@0: { sl@0: iTestHarness->LogIt(KCompsSipUriInvalidMess2); sl@0: wrongError=ETrue; sl@0: } sl@0: sl@0: if (0==aSipUri.Compare(KCompsSipUriInvalid2) && KUriUtilsErrInvalidHeaders != aError) sl@0: { sl@0: iTestHarness->LogIt(KCompsSipUriInvalidMess8); sl@0: wrongError=ETrue; sl@0: } sl@0: sl@0: if (0==aSipUri.Compare(KCompsSipUriInvalid1) && KUriUtilsErrInvalidPort != aError sl@0: || 0==aSipUri.Compare(KCompsSipUriInvalid4) && KUriUtilsErrInvalidPort!= aError sl@0: || 0==aSipUri.Compare(KCompsSipUriNotEqual2) && KUriUtilsErrDifferentPort != aError) sl@0: { sl@0: iTestHarness->LogIt(KCompsSipUriInvalidMess3); sl@0: wrongError=ETrue; sl@0: } sl@0: sl@0: if (0==aSipUri.Compare(KCompsSipUriInvalid7) && KUriUtilsErrInvalidUserInfo!= aError sl@0: || 0==aSipUri.Compare(KCompsSipUriNotEqual0) && KUriUtilsErrDifferentUserInfo != aError) sl@0: { sl@0: iTestHarness->LogIt(KCompsSipUriInvalidMess7); sl@0: wrongError=ETrue; sl@0: } sl@0: sl@0: if (wrongError) sl@0: { sl@0: iTestHarness->LogIt(KCompsSipUriInvalidMess5); sl@0: } sl@0: sl@0: LogErrorMessage(aSipUri, aError); sl@0: sl@0: if (wrongError) sl@0: { sl@0: iTestHarness->EndTest(aError); sl@0: } sl@0: else sl@0: { sl@0: iTestHarness->EndTest(KErrNone); sl@0: } sl@0: } sl@0: sl@0: // sl@0: // sl@0: // SIP Uri Validation Test sl@0: // sl@0: // sl@0: TInt CSipUriAndAuthorityTest::SipUriValidationL() sl@0: { sl@0: TBuf<256> data; sl@0: TInt error=KErrNone; sl@0: iFoundEquivalence=EFalse; sl@0: sl@0: //read the Valid section name in sl@0: error=iTUriParserFile.Read(data); sl@0: while(0!=data.Compare(KCompsSipUriValidate) && KErrNone==error) sl@0: { sl@0: if (0==data.Compare(KCompsSipUriEquivalence)) sl@0: { sl@0: iFoundEquivalence=ETrue; sl@0: break; sl@0: } sl@0: data.Zero(); sl@0: error=iTUriParserFile.Read(data); sl@0: } sl@0: sl@0: //No Validate Section, KErrEof sl@0: if (0!=data.Compare(KCompsSipUriValidate)) sl@0: { sl@0: return KErrNotFound; sl@0: } sl@0: sl@0: //get the validation Data sl@0: error=iTUriParserFile.Read(data); sl@0: sl@0: //no data sl@0: if (KErrEof==error) sl@0: { sl@0: return KErrBadName; sl@0: } sl@0: sl@0: //found Equivalence sl@0: if (0==data.Compare(KCompsSipUriEquivalence)) sl@0: { sl@0: iFoundEquivalence=ETrue; sl@0: return KErrBadName; sl@0: } sl@0: sl@0: while (KErrNone==error) sl@0: { sl@0: //check for comments sl@0: while(data.Left(2)==(KCompsSipUriComment)) sl@0: { sl@0: data.Zero(); sl@0: iTUriParserFile.Read(data); sl@0: } sl@0: if (0==data.Compare(KCompsSipUriEquivalence)) sl@0: { sl@0: iFoundEquivalence=ETrue; sl@0: break; sl@0: } sl@0: sl@0: //validate the 16 bit Sip URI first sl@0: iTestHarness->StartTestL(_L("Test TUriParser Component Validation (16-bit SIP URI)")); sl@0: iTestHarness->LogIt(_L("Uri - %S"), &data); sl@0: error = DoSipUriValidation (data); sl@0: SipLogError(error, data); sl@0: sl@0: // Make 8-bit copies and validate this SIP URI sl@0: HBufC8* uriBuf = HBufC8::NewLC(data.Length()); sl@0: TPtr8 uri8Bit = uriBuf->Des(); sl@0: uri8Bit.Copy(data); sl@0: sl@0: iTestHarness->StartTestL(_L("Test TUriParser Component Validation (8-bit SIP URI)")); sl@0: iTestHarness->LogIt(_L("Uri - %S"), &data); sl@0: error = DoSipUriValidation (uri8Bit); sl@0: SipLogError(error, data); sl@0: sl@0: data.Zero(); sl@0: CleanupStack::PopAndDestroy(1, uriBuf);// uriBuf sl@0: sl@0: error=iTUriParserFile.Read(data); sl@0: } sl@0: return KErrNone; sl@0: } sl@0: sl@0: // sl@0: // sl@0: // SIP Uri Equivalence Test sl@0: // sl@0: // sl@0: TInt CSipUriAndAuthorityTest::SipUriEquivalenceL() sl@0: { sl@0: TBuf<256> valueA; sl@0: TBuf<256> valueB; sl@0: TBool sipUriError=EFalse; sl@0: TInt errorA=KErrNone; sl@0: TInt errorB=KErrNone; sl@0: TInt error=KErrNone; sl@0: sl@0: //get the Equivalence Data sl@0: errorA=iTUriParserFile.Read(valueA); sl@0: while(valueA.Left(2)==(KCompsSipUriComment) && KErrNone==errorA) sl@0: { sl@0: valueA.Zero(); sl@0: errorA=iTUriParserFile.Read(valueA); sl@0: } sl@0: sl@0: errorB=iTUriParserFile.Read(valueB); sl@0: //no Equivalence Data sl@0: if (KErrEof==errorA || KErrEof==errorB) sl@0: { sl@0: return KErrBadName; sl@0: } sl@0: sl@0: //read the Equivalence Sip URI sl@0: while (KErrNone==errorA && KErrNone==errorB) sl@0: { sl@0: //check for comments sl@0: while(valueA.Left(2)==(KCompsSipUriComment)) sl@0: { sl@0: valueA.Zero(); sl@0: errorA=iTUriParserFile.Read(valueA); sl@0: } sl@0: while(valueB.Left(2)==(KCompsSipUriComment)) sl@0: { sl@0: valueB.Zero(); sl@0: errorB=iTUriParserFile.Read(valueB); sl@0: } sl@0: sl@0: //validate the 16 bit Sip URI first sl@0: iTestHarness->StartTestL(_L("Test TUriParser Component Equivalence (16-bit SIP)")); sl@0: iTestHarness->LogIt(_L("Uri - %S"), &valueA); sl@0: iTestHarness->LogIt(_L("Uri - %S"), &valueB); sl@0: sl@0: error= DoSipUriEquivalence(valueA, valueB, sipUriError); sl@0: //check for parsing errors on both Sip URIs sl@0: if (KErrBadSipUriA==sipUriError) sl@0: { sl@0: SipLogError(error, valueA); sl@0: } sl@0: if (KErrBadSipUriB==sipUriError) sl@0: { sl@0: SipLogError(error, valueB); sl@0: } sl@0: SipLogError(error, valueA); sl@0: sl@0: // Make 8-bit copies and validate this SIP URI sl@0: HBufC8* uriBufA = HBufC8::NewLC(valueA.Length()); sl@0: TPtr8 uri8BitA = uriBufA->Des(); sl@0: uri8BitA.Copy(valueA); sl@0: sl@0: HBufC8* uriBufB = HBufC8::NewLC(valueB.Length()); sl@0: TPtr8 uri8BitB = uriBufB->Des(); sl@0: uri8BitB.Copy(valueB); sl@0: sl@0: iTestHarness->StartTestL(_L("Test TUriParser Component Equivalence (8-bit SIP)")); sl@0: iTestHarness->LogIt(_L("Uri - %S"), &valueA); sl@0: iTestHarness->LogIt(_L("Uri - %S"), &valueB); sl@0: error = DoSipUriEquivalence(uri8BitA, uri8BitB, sipUriError); sl@0: //check for parsing errors on both Sip URIs sl@0: if (KErrBadSipUriA==sipUriError) sl@0: { sl@0: SipLogError(error, valueA); sl@0: } sl@0: if (KErrBadSipUriA==sipUriError) sl@0: { sl@0: SipLogError(error, valueB); sl@0: } sl@0: SipLogError(error, valueA); sl@0: sl@0: CleanupStack::PopAndDestroy(2, uriBufA);// uriBufA, uriBufB sl@0: sl@0: errorA=iTUriParserFile.Read(valueA); sl@0: errorB=iTUriParserFile.Read(valueB); sl@0: } sl@0: return KErrNone; sl@0: } sl@0: sl@0: // sl@0: // sl@0: // SIP Uri Logger sl@0: // sl@0: // sl@0: void CSipUriAndAuthorityTest::LogErrorMessage(const TDesC16& aSipUri, const TInt aError)const sl@0: { sl@0: switch (aError) sl@0: { sl@0: case KErrNotFound: sl@0: iTestHarness->LogIt(aSipUri); sl@0: break; sl@0: sl@0: case KErrNotSupported: sl@0: iTestHarness->LogIt(_L("Not Supported")); sl@0: break; sl@0: sl@0: case KUriUtilsErrInvalidScheme: sl@0: case KUriUtilsErrDifferentScheme: sl@0: iTestHarness->LogIt(_L("Invalid Scheme")); sl@0: break; sl@0: sl@0: case KUriUtilsErrInvalidUserInfo: sl@0: case KUriUtilsErrDifferentUserInfo: sl@0: iTestHarness->LogIt(_L("Invalid UserInfo")); sl@0: break; sl@0: sl@0: case KUriUtilsErrInvalidHost: sl@0: case KUriUtilsErrDifferentHost: sl@0: iTestHarness->LogIt(_L("Invalid Host")); sl@0: break; sl@0: sl@0: case KUriUtilsErrInvalidPort: sl@0: case KUriUtilsErrDifferentPort: sl@0: iTestHarness->LogIt(_L("Invalid Port")); sl@0: break; sl@0: sl@0: case KUriUtilsErrInvalidPath: sl@0: case KUriUtilsErrDifferentPath: sl@0: iTestHarness->LogIt(_L("Invalid Path")); sl@0: break; sl@0: sl@0: case KUriUtilsErrInvalidParam: sl@0: iTestHarness->LogIt(_L("Invalid Parameter")); sl@0: break; sl@0: sl@0: case KUriUtilsErrInvalidQuery: sl@0: case KUriUtilsErrDifferentQuery: sl@0: iTestHarness->LogIt(_L("Invalid Query")); sl@0: break; sl@0: sl@0: case KUriUtilsErrInvalidHeaders: sl@0: iTestHarness->LogIt(_L("Invalid Headers")); sl@0: break; sl@0: sl@0: case KUriUtilsErrInvalidFragment: sl@0: case KUriUtilsErrDifferentFragment: sl@0: iTestHarness->LogIt(_L("Invalid Fragment")); sl@0: break; sl@0: sl@0: default: sl@0: break; sl@0: } sl@0: sl@0: //log correct message for equivalence sl@0: if (iFoundEquivalence && KErrNone==aError) sl@0: { sl@0: iTestHarness->LogIt(KCompsSipUriEqualMess0); sl@0: } sl@0: else if (iFoundEquivalence && KErrNone!=aError) sl@0: { sl@0: iTestHarness->LogIt(KCompsSipUriEqualMess1); sl@0: } sl@0: } sl@0: sl@0: // sl@0: // sl@0: // Implementation of LOCAL functions sl@0: // sl@0: // sl@0: sl@0: template sl@0: TInt DoSipUriValidation(const TDesCType& aSipUri) sl@0: { sl@0: TUriParserType uriParser; sl@0: TInt error = uriParser.Parse(aSipUri); sl@0: // Is this a valid SIP Uri? sl@0: if( KUriUtilsErrInvalidUri == error) sl@0: { sl@0: return error; sl@0: } sl@0: sl@0: //Validate the Sip URI sl@0: return(uriParser.Validate()); sl@0: } sl@0: sl@0: template sl@0: TInt DoSipUriEquivalence(const TDesCType& aSipUriA, const TDesCType& aSipUriB, TInt &aSipUriError) sl@0: { sl@0: TUriParserType uriParserA; sl@0: TUriParserType uriParserB; sl@0: sl@0: TBool errorA = uriParserA.Parse(aSipUriA); sl@0: // Is this a valid SIP Uri? sl@0: if( KUriUtilsErrInvalidUri == errorA) sl@0: { sl@0: aSipUriError=KErrBadSipUriA; sl@0: return errorA; sl@0: } sl@0: sl@0: TBool errorB = uriParserB.Parse(aSipUriB); sl@0: // Is this a valid SIP Uri? sl@0: if( KUriUtilsErrInvalidUri == errorB) sl@0: { sl@0: aSipUriError=KErrBadSipUriB; sl@0: return errorB; sl@0: } sl@0: sl@0: return(uriParserA.Equivalent(uriParserB)); sl@0: } sl@0: sl@0: //End of file