compressionlibs/ziplib/test/rtest/gziptest/gziptest.cpp
changeset 0 e4d67989cc36
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/compressionlibs/ziplib/test/rtest/gziptest/gziptest.cpp	Tue Feb 02 02:01:42 2010 +0200
@@ -0,0 +1,1054 @@
+// Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+#include <e32test.h>
+#include <ezgzip.h>
+
+#if !defined(__WINS__)
+_LIT(KPath, "Z:\\test\\gzip\\");
+#else
+_LIT(KPath, "C:\\test\\gzip\\");
+#endif
+
+_LIT(KOutputFilePath, "C:\\test\\gzip\\");
+
+_LIT(KInputFile, "Hello.txt");
+_LIT(KCompressFile,"Hello.gz");
+_LIT(KDecompressFile,"Hello_Decompress.txt");
+
+
+static RTest				test(_L("gziptest.exe"));
+static RFs					TheFs;
+static CTrapCleanup* 		TheTrapCleanup 		= NULL;
+static TInt 				TheBufferSize		= 500;
+static TFileName 			TheInputFile(KInputFile);
+static TFileName 			TheCompressFile(KCompressFile);
+static TFileName 			TheDecompressFile(KDecompressFile);
+
+static void CompressFileL(TFileName& aInputFile, TFileName& aCompressFile, TInt aBufferSize = TheBufferSize);
+static void DecompressFileL(TFileName& aInputFile, TFileName& aDecompressFile, TInt aBufferSize = TheBufferSize);
+static void CompareFileDataL(TFileName& aSourceFile, TFileName& aDestFile, TInt& aCompare);
+static void ThreadForPanicTest(TThreadFunction aPanicThreadFunc);
+
+inline void DeleteFile(TFileName& aFileName, TBool aPathSpecified = EFalse)
+	{
+	TFileName deleteFilePath;
+	if(!aPathSpecified)
+		{
+		deleteFilePath.Append(KOutputFilePath);
+		}
+	deleteFilePath.Append(aFileName);
+
+	TRAPD(error, TheFs.Delete(deleteFilePath));
+	if(error != KErrNone)
+		test.Printf(_L("File not deleted: %S"), &deleteFilePath);
+	}
+	
+static void CompressFileL(TFileName& aInputFile, TFileName& aCompressFile, TInt aBufferSize)
+	{
+	TFileName inputFilePath(KPath);
+	inputFilePath.Append(aInputFile);
+	
+	TFileName compressFilePath(KOutputFilePath);
+	compressFilePath.Append(aCompressFile);
+	
+	RFile input;
+	User::LeaveIfError(input.Open(TheFs,inputFilePath, EFileStream | EFileRead | EFileShareReadersOnly));
+	CleanupClosePushL(input);
+	
+	CEZFileToGZip *fileToGzip = NULL;
+	TRAPD(error, fileToGzip = CEZFileToGZip::NewL(TheFs, compressFilePath, input, aBufferSize));
+	test(error == KErrNone);
+	CleanupStack::PushL(fileToGzip);
+	
+	while(fileToGzip->DeflateL()){/*do nothing*/}
+	
+	CleanupStack::PopAndDestroy(2);
+	}
+	
+static void DecompressFileL(TFileName& aCompressFile, TFileName& aDecompressFile, TInt aBufferSize)
+	{
+
+	TFileName compressFilePath(KPath);
+	compressFilePath.Append(aCompressFile);
+	
+	TFileName decompressFilePath(KOutputFilePath);
+	decompressFilePath.Append(aDecompressFile);
+
+	RFile output;
+	User::LeaveIfError(output.Replace(TheFs, decompressFilePath, EFileStream | EFileWrite | EFileShareExclusive));
+	CleanupClosePushL(output);
+
+	CEZGZipToFile *gzipToFile = NULL;
+	TRAPD(error, gzipToFile = CEZGZipToFile::NewL(TheFs, compressFilePath, output, aBufferSize));
+	test(error == KErrNone);
+	CleanupStack::PushL(gzipToFile);
+	
+	while (gzipToFile->InflateL()){/*do nothing*/}
+
+	CleanupStack::PopAndDestroy(2);
+	
+	}
+	
+static void CompareFileDataL(TFileName& aSourceFile, TFileName& aDestFile, TInt& aCompare)
+	{
+	
+	TFileName sourceFilePath(KPath);
+	sourceFilePath.Append(aSourceFile);
+
+	TFileName destFilePath(KOutputFilePath);
+	destFilePath.Append(aDestFile);
+
+	RFile source;
+	User::LeaveIfError(source.Open(TheFs,sourceFilePath, EFileStream | EFileRead | EFileShareReadersOnly));
+	CleanupClosePushL(source);
+		
+	TInt sourceSize;
+	source.Size(sourceSize);
+	test(sourceSize > 0);
+		
+	HBufC8* sourceData = NULL;
+	TRAPD(error, sourceData = HBufC8::NewMaxL(sourceSize));
+	test(error == KErrNone);
+	CleanupStack::PushL(sourceData);
+			
+	TPtr8 tSourceBufPtr = sourceData->Des();
+	User::LeaveIfError(source.Read(0, tSourceBufPtr, sourceSize));
+	
+	RFile dest;
+	User::LeaveIfError(dest.Open(TheFs,destFilePath, EFileStream | EFileWrite | EFileShareExclusive));
+	CleanupClosePushL(dest);
+
+	TInt destSize;
+	dest.Size(destSize);
+	test(destSize > 0);
+	
+	HBufC8* destData = NULL;
+	TRAP(error, destData = HBufC8::NewMaxL(destSize));
+	test(error == KErrNone);
+	CleanupStack::PushL(destData);
+			
+	TPtr8 tDestBufPtr = destData->Des();
+	User::LeaveIfError(dest.Read(0, tDestBufPtr, destSize));
+		
+	aCompare = sourceData->Compare(*destData);
+
+	CleanupStack::PopAndDestroy(4);
+	
+	}
+
+static void ThreadForPanicTest(TThreadFunction aPanicThreadFunc)
+	{
+   	TRequestStatus threadStatus(KRequestPending);
+   	TRequestStatus threadStatus1(KRequestPending); 
+   	
+   	RThread thread;
+	TBool justInTime = User::JustInTime();
+	User::SetJustInTime(EFalse);
+		
+	test.Printf(_L("Starting thread for invalid panic test...\n"));
+	TInt err=thread.Create(	_L("Panic thread"),aPanicThreadFunc,KDefaultStackSize,0x1000,0x1000,NULL,EOwnerThread );
+	
+	test.Printf(_L("Thread Creation returned following error code: %d \n"), err);
+	test(err == KErrNone);
+
+	thread.Logon(threadStatus);
+	thread.Resume();
+	User::WaitForRequest(threadStatus);
+
+#ifdef _DEBUG
+	__ASSERT_ALWAYS(thread.ExitType() == EExitPanic,User::Panic(_L("Thread panic mismatch."),KErrGeneral));
+	test.Printf(_L("Invalid Panic test completed successfully for udeb build.\n"));
+#else
+	test.Printf(_L("Invalid Panic test completed successfully for urel build.\n"));
+#endif
+	
+	thread.Logon(threadStatus1);
+	thread.Kill(KErrNone);
+	User::WaitForRequest(threadStatus1);
+	test(threadStatus1 == KErrNone);
+	
+    CLOSE_AND_WAIT(thread);
+    
+	User::SetJustInTime(justInTime);
+	}
+
+/**
+@SYMTestCaseID          SYSLIB-EZLIB2-UT-4286
+@SYMTestCaseDesc	    To ensure a file can be compressed to a gzip file and then correctly 
+						decompressed back to its original state using classes from gzip.cpp.  
+						Overwrite output file to verify existing file can be re-used.
+@SYMTestPriority 	    High
+@SYMTestActions  	    1.	Open existing test file and pass it to CEZFileToGZip::NewL() & 
+							compress using CEZFileToGZip::DeflateL() function
+						2.	Create or open output decompressed file and pass compressed file to
+							CEZGZipToFile::NewL() & decompress using CEZGZipToFile::InflateL() function
+						3.	Compare original and new file, they should be identical
+						4.	Repeat Steps 1 - 3 overwriting existing compressed output file
+@SYMTestExpectedResults Original test file should be the same as the file generated 
+						after decompressing it & the test must not fail
+@SYMDEF                 REQ8024
+*/
+void TestCompressDecompressGzip()
+	{
+	TRAPD(error, CompressFileL(TheInputFile, TheCompressFile));
+	test(error == KErrNone);
+	TRAP(error, DecompressFileL(TheCompressFile, TheDecompressFile));
+	test(error == KErrNone);
+	
+	TInt compare;
+	//compare the files
+	TRAP(error, CompareFileDataL(TheInputFile, TheDecompressFile, compare));
+	test(error == KErrNone);
+	
+	if(compare == 0)
+		RDebug::Printf("Input file data is same as the Decompressed file data");
+	else
+		RDebug::Printf("Input file data differs from Decompressed file data");
+	
+#if !defined(__WINS__)
+	DeleteFile(TheCompressFile);
+	DeleteFile(TheDecompressFile);
+#endif
+
+	//Compress & decompress the same file again to overwrite the existing file & 
+	//..to verify that the existing files can be re-used
+	TRAP(error, CompressFileL(TheInputFile, TheCompressFile));
+	test(error == KErrNone);
+	TRAP(error, DecompressFileL(TheCompressFile, TheDecompressFile));
+	test(error == KErrNone);
+	
+#if !defined(__WINS__)
+	DeleteFile(TheCompressFile);
+	DeleteFile(TheDecompressFile);
+#endif
+	}
+
+/**
+@SYMTestCaseID          SYSLIB-EZLIB2-UT-4287
+@SYMTestCaseDesc	    To ensure a file can be compressed to a gzip file and then correctly 
+						decompressed back using buffer size as small & big.
+						
+@SYMTestPriority 	    High
+@SYMTestActions  	    1.	Open existing test file and pass it to CEZFileToGZip::NewL() & 
+							compress using CEZFileToGZip::DeflateL() with buffer size as "11"
+						2.	Create or open output decompressed file and pass compressed file 
+							to CEZGZipToFile::NewL() & decompress using CEZGZipToFile::InflateL() 
+							with buffer size as "10"
+						3.	Repeat Steps 1 & 2 using buffer size as 10 times the file size
+@SYMTestExpectedResults Files should be compressed with no errors i.e. KErrNone & the test must not fail 
+@SYMDEF                 REQ8024
+*/
+void TestOutputBuffSize()
+	{	
+	
+	TRAPD(error, CompressFileL(TheInputFile, TheCompressFile, 10));
+	test(error == KErrNone);
+
+	TRAP(error, DecompressFileL(TheCompressFile, TheDecompressFile, 10));
+	test(error == KErrNone);
+	
+	TInt bufferSize = 10 * TheBufferSize;
+	
+#if !defined(__WINS__)
+	DeleteFile(TheCompressFile);
+	DeleteFile(TheDecompressFile);
+#endif
+
+	//Compress & decompress the same file again to overwrite the existing file & 
+	//..to verify that the existing files can be re-used & with buffer size as big
+	TRAP(error, CompressFileL(TheInputFile, TheCompressFile, bufferSize));
+	test(error == KErrNone);
+	
+	TRAP(error, DecompressFileL(TheCompressFile, TheDecompressFile, bufferSize));
+	test(error == KErrNone);
+	
+#if !defined(__WINS__)
+	DeleteFile(TheCompressFile);
+	DeleteFile(TheDecompressFile);
+#endif
+
+	}
+
+TInt RfileInitForCEZFileToGZip(TAny*)
+	{
+	RFile rfile;
+	TFileName compressFilePath(KOutputFilePath);
+	compressFilePath.Append(TheCompressFile);
+	
+	CTrapCleanup* cleanup = CTrapCleanup::New();
+	TRAPD(error, CEZFileToGZip::NewL(TheFs, compressFilePath, rfile, TheBufferSize));
+	delete cleanup;
+	
+	return error;
+	}
+	
+TInt RfileInitForCEZGZipToFile(TAny*)
+	{
+	RFile rfile;
+	TFileName compressFilePath(KOutputFilePath);
+	compressFilePath.Append(TheCompressFile);
+
+	CTrapCleanup* cleanup = CTrapCleanup::New();
+	TRAPD(error, CEZGZipToFile::NewL(TheFs, compressFilePath, rfile, TheBufferSize));
+	delete cleanup;
+	
+	return error;
+	
+	}
+
+/**
+@SYMTestCaseID          SYSLIB-EZLIB2-UT-4288
+@SYMTestCaseDesc	    CEZFileToGZip & CEZGZipToFile class initialisation fails when 
+						invalid input RFile object supplied
+@SYMTestPriority 	    High
+@SYMTestActions  	    1.	Pass NULL RFile input parameter to CEZFileToGZip::NewL()
+						2.	Pass NULL RFile input parameter to CEZGZipToFile::NewL()
+@SYMTestExpectedResults NewL() method should panic & the test must not fail 
+@SYMDEF                 REQ8024
+*/
+void TestRFileInitialisation()
+	{
+	test.Printf(_L("Panic Thread: CEZFileToGzip Class initialisation fails when invalid input rfile supplied"));	
+	ThreadForPanicTest(RfileInitForCEZFileToGZip);
+	test.Printf(_L("Panic Thread: CEZGZipToFile Class initialisation fails when invalid input rfile supplied"));
+	ThreadForPanicTest(RfileInitForCEZGZipToFile);
+	}
+	
+/**
+@SYMTestCaseID          SYSLIB-EZLIB2-UT-4289
+@SYMTestCaseDesc	    CEZFileToGZip, CEZGZipToFile class initialisation fails 
+						when invalid output filename supplied
+@SYMTestPriority 	    High
+@SYMTestActions  	    1.	Pass invalid filename output parameter to CEZFileToGZip::NewL()
+						2.	Pass invalid filename output parameter to CEZGZipToFile::NewL() 
+						Note: Filename contains invalid characters
+@SYMTestExpectedResults NewL() method should leave with error message & the test must not fail 
+@SYMDEF                 REQ8024
+*/	
+void TestInvalidFilenameL()
+	{
+	
+	_LIT(KInvalidGzip, "*******.gz");
+	TFileName invalidGzip(KOutputFilePath);
+	invalidGzip.Append(KInvalidGzip);
+
+	_LIT(KInvalidFile, "*******.txt");
+	TFileName invalidFile(KOutputFilePath);
+	invalidFile.Append(KInvalidFile);
+	
+	TFileName inputFilePath(KPath);
+	inputFilePath.Append(TheInputFile);
+
+	RFile input;
+	User::LeaveIfError(input.Open(TheFs,inputFilePath,EFileStream | EFileRead | EFileShareReadersOnly));
+	CleanupClosePushL(input);
+
+	TRAPD(error, CEZFileToGZip::NewL(TheFs, invalidGzip, input, TheBufferSize));
+	test(error != KErrNone);
+
+	CleanupStack::PopAndDestroy(1);
+	
+	RFile output;
+	TInt err = output.Create(TheFs, invalidFile,EFileStream | EFileWrite | EFileShareExclusive);
+	test(error != KErrNone);
+
+	}
+
+/**
+@SYMTestCaseID          SYSLIB-EZLIB2-UT-4290
+@SYMTestCaseDesc	    Ensure if output file exists and is read only then it cannot be 
+						overwritten with CEZFileToGZip & CEZGZipToFile class
+@SYMTestPriority 	    High
+@SYMTestActions  	    1.	Pass existing read only output filename parameter to CEZFileToGZip::NewL()
+						2.	Pass existing read only output filename parameter to CEZGZipToFile::NewL() 
+						& decompress using CEZGZipToFile::InflateL()
+@SYMTestExpectedResults CEZFileToGZip::NewL() method should leave with error message, CEZGZipToFile::Inflate()
+						should leave with error message & the test must not fail 
+@SYMDEF                 REQ8024
+*/	
+void TestOverwriteOutputFileL()
+	{
+	_LIT(KReadOnlyGzip, "Hello_Read_Only.gz");	
+	TFileName readOnlyNewGZip(KOutputFilePath);
+	readOnlyNewGZip.Append(KReadOnlyGzip);
+	
+	_LIT(KReadOnlyFile, "Hello_Read_Only.txt");
+	TFileName readOnlyNewFile(KOutputFilePath);
+	readOnlyNewFile.Append(KReadOnlyFile);
+
+	CFileMan* fMan=CFileMan::NewL(TheFs);
+	test(fMan!=NULL);
+	CleanupStack::PushL(fMan);
+	
+#if !defined(__WINS__)
+	TFileName readOnlyOldGZip(KPath);
+	readOnlyOldGZip.Append(KReadOnlyGzip);
+	TFileName readOnlyOldFile(KPath);
+	readOnlyOldFile.Append(KReadOnlyFile);
+
+	RFile source;
+	User::LeaveIfError(source.Open(TheFs,readOnlyOldGZip, EFileStream | EFileRead | EFileShareReadersOnly));
+	CleanupClosePushL(source);
+	TRAPD(error, fMan->Copy(source, readOnlyNewGZip));
+	test(error == KErrNone);
+	
+	RFile source1;
+	User::LeaveIfError(source1.Open(TheFs,readOnlyOldFile, EFileStream | EFileRead | EFileShareReadersOnly));
+	CleanupClosePushL(source1);
+	TRAP(error, fMan->Copy(source1, readOnlyNewFile));
+	test(error == KErrNone);
+
+	CleanupStack::PopAndDestroy(2);
+#endif
+
+	TFileName inputFilePath(KPath);
+	inputFilePath.Append(TheInputFile);
+
+	RFile input;
+	User::LeaveIfError(input.Open(TheFs,inputFilePath,EFileStream | EFileRead | EFileShareReadersOnly));
+	CleanupClosePushL(input);
+
+	//setting attributes to read only for readOnlyGZip & readOnlyFile
+   	TInt err = fMan->Attribs(readOnlyNewGZip, KEntryAttReadOnly, 0, 0);
+	test(err == KErrNone);
+	err = fMan->Attribs(readOnlyNewFile, KEntryAttReadOnly, 0, 0);
+	test(err == KErrNone);
+		
+	TRAP(err, CEZFileToGZip::NewL(TheFs, readOnlyNewGZip, input, TheBufferSize));
+	test(err != KErrNone);
+
+	RFile output;
+	User::LeaveIfError(output.Open(TheFs,readOnlyNewFile,EFileStream | EFileRead | EFileShareReadersOnly));
+	CleanupClosePushL(output);
+
+	CEZGZipToFile * gzipToFile = NULL;
+	TRAP(err, gzipToFile = CEZGZipToFile::NewL(TheFs, readOnlyNewGZip, output, TheBufferSize));
+	test(err == KErrNone);
+	CleanupStack::PushL(gzipToFile);
+	
+	while (err == KErrNone)
+	{
+		TRAP(err, gzipToFile->InflateL());
+	}
+	
+	test(err != KErrNone); 	
+
+	CleanupStack::PopAndDestroy(4);
+	
+	//removing the read only attrib before deleting the file
+   	fMan=CFileMan::NewL(TheFs);
+   	test(fMan!=NULL);
+   	CleanupStack::PushL(fMan);
+   	err = fMan->Attribs(readOnlyNewGZip, 0, KEntryAttReadOnly, 0);
+	test(err == KErrNone);
+	err = fMan->Attribs(readOnlyNewFile, 0, KEntryAttReadOnly, 0);
+	test(err == KErrNone);
+	
+	CleanupStack::PopAndDestroy(1);
+	
+#if !defined(__WINS__)
+	DeleteFile(readOnlyNewGZip, ETrue);
+	DeleteFile(readOnlyNewFile, ETrue);
+#endif
+	}
+
+TInt RFSInitForCEZFileToGZipL(TAny*)
+	{
+	TFileName inputFilePath(KPath);
+	inputFilePath.Append(TheInputFile);
+
+	RFile input;
+	User::LeaveIfError(input.Open(TheFs,inputFilePath,EFileStream | EFileRead | EFileShareReadersOnly));
+	CleanupClosePushL(input);
+
+	TFileName compressFilePath(KOutputFilePath);
+	compressFilePath.Append(TheCompressFile);
+
+	CTrapCleanup* cleanup = CTrapCleanup::New();
+	RFs rfs; 
+	TRAPD(error, CEZFileToGZip::NewL(rfs, compressFilePath, input, TheBufferSize));
+	delete cleanup;
+	
+	CleanupStack::PopAndDestroy(1);
+	return error;
+	
+	}
+
+TInt RFSInitForCEZGZipToFileL(TAny*)
+	{
+	TFileName compressFilePath(KPath);
+	compressFilePath.Append(TheCompressFile);
+	
+	TFileName decompressFilePath(KOutputFilePath);
+	decompressFilePath.Append(TheDecompressFile);
+
+	RFile output;
+	User::LeaveIfError(output.Replace(TheFs,decompressFilePath,EFileStream | EFileRead | EFileShareReadersOnly));
+	CleanupClosePushL(output);
+
+	CTrapCleanup* cleanup = CTrapCleanup::New();
+	RFs rfs; 
+	TRAPD(error, CEZGZipToFile::NewL(rfs, compressFilePath, output, TheBufferSize));
+	delete cleanup;
+	
+	CleanupStack::PopAndDestroy(1);
+	return error;
+	
+	}
+
+/**
+@SYMTestCaseID          SYSLIB-EZLIB2-UT-4291
+@SYMTestCaseDesc	    CEZFileToGZip & CEZGZipToFile class initialisation fails when 
+						invalid RFs object is passed
+@SYMTestPriority 	    High
+@SYMTestActions  	    1.	Pass NULL RFs input parameter to CEZFileToGZip::NewL() 
+						2.	Pass NULL RFs input parameter to CEZGZipToFile::NewL()
+@SYMTestExpectedResults NewL() method should panic & the test must not fail 
+@SYMDEF                 REQ8024
+*/	
+void TestRFSInitialisation()
+	{
+	test.Printf(_L("Panic Thread: CEZFileToGZip Class initialisation fails when invalid RFS object is passed"));	
+	ThreadForPanicTest(RFSInitForCEZFileToGZipL);
+	test.Printf(_L("Panic Thread: CEZGZipToFile Class initialisation fails when invalid RFS object is passed"));
+	ThreadForPanicTest(RFSInitForCEZGZipToFileL);
+	}
+
+TInt BuffForEZFileToGZipAsZeroL(TAny*)
+	{
+	CTrapCleanup* cleanup = CTrapCleanup::New();
+	CompressFileL(TheInputFile, TheCompressFile, 0);
+	delete cleanup;
+	return KErrNone;
+	}
+
+TInt BuffForEZFileToGZipAsNegativeL(TAny*)
+	{
+	CTrapCleanup* cleanup = CTrapCleanup::New();
+	CompressFileL(TheInputFile, TheCompressFile, -1);
+	delete cleanup;
+	return KErrNone;
+	}
+
+TInt BuffForEZGZipToFileAsZeroL(TAny*)
+	{
+	CTrapCleanup* cleanup = CTrapCleanup::New();
+	DecompressFileL(TheCompressFile, TheDecompressFile, 0);
+	delete cleanup;
+	return KErrNone;
+	}
+
+TInt BuffForEZGZipToFileAsNegativeL(TAny*)
+	{
+	CTrapCleanup* cleanup = CTrapCleanup::New();
+	DecompressFileL(TheCompressFile, TheDecompressFile, -1);
+	delete cleanup;
+	return KErrNone;	
+	}
+
+/**
+@SYMTestCaseID          SYSLIB-EZLIB2-UT-4292
+@SYMTestCaseDesc	    CEZFileToGZip & CEZGZipToFile class initialisation 
+						fails when invalid buffer size parameter passed in
+@SYMTestPriority 	    High
+@SYMTestActions  	    1.	Pass buffer size parameter value as 0 to CEZFileToGZip::NewL()  
+						2.	Pass buffer size parameter as a negative value to CEZFileToGZip::NewL()
+						3.	Pass buffer size parameter value as 0 to CEZGZipToFile::NewL()  
+						4.	Pass buffer size parameter as a negative value to CEZGZipToFile::NewL()
+@SYMTestExpectedResults NewL() method should panic & the test must not fail 
+@SYMDEF                 REQ8024
+*/	
+void TestInvalidBufferSize()
+	{
+	
+	test.Printf(_L("Panic Thread: CEZFileToGZip Class initialisation fails when buffer size is passed as Zero"));	
+	ThreadForPanicTest(BuffForEZFileToGZipAsZeroL);
+	test.Printf(_L("Panic Thread: CEZFileToGZip Class initialisation fails when buffer size is passed as Negative"));
+	ThreadForPanicTest(BuffForEZFileToGZipAsNegativeL);
+	test.Printf(_L("Panic Thread: CEZGZipToFile Class initialisation fails when buffer size is passed as Zero"));
+	ThreadForPanicTest(BuffForEZGZipToFileAsZeroL);
+	test.Printf(_L("Panic Thread: CEZGZipToFile Class initialisation fails when buffer size is passed as Negative"));
+	ThreadForPanicTest(BuffForEZGZipToFileAsNegativeL);
+
+	}
+
+/**
+@SYMTestCaseID          SYSLIB-EZLIB2-UT-4293
+@SYMTestCaseDesc	    Compress & Decompress another file with CEZFileToGZip & CEZGZipToFile 
+						after calling ResetL method
+@SYMTestPriority 	    High
+@SYMTestActions  	    1.	Open existing test file and pass it to CEZFileToGZip::NewL() & compress using CEZFileToGZip::DeflateL function
+						2.	Call CEZFileToGZip::ResetL() with new file parameters
+						3.	Compress the new file with CEZFileToGZip::DeflateL()
+						4.	Create or open output decompressed file and pass compressed file to CEZGZipToFile::NewL() & decompress using CEZGZipToFile::InflateL() function
+						5.	Call CEZGZipToFile::ResetL() with new compressed file parameters
+						6.	Decompress the new compressed file with CEZGZipToFile::InflateL()
+@SYMTestExpectedResults Files should be compressed with no errors i.e. KErrNone & the test must not fail 
+@SYMDEF                 REQ8024
+*/	
+void TestCompressDecompressResetL()
+	{
+    
+	TFileName inputFilePath(KPath);
+	inputFilePath.Append(TheInputFile);
+
+	_LIT(KGzipFile,"Hello_Reset.gz");
+	TFileName gzipFileName(KGzipFile);
+	TFileName compressfile(KOutputFilePath);
+	compressfile.Append(gzipFileName);
+	
+	RFile input;
+	User::LeaveIfError(input.Open(TheFs,inputFilePath,EFileStream | EFileRead | EFileShareReadersOnly));
+	CleanupClosePushL(input);
+	
+	CEZFileToGZip *fileToGzip = CEZFileToGZip::NewLC(TheFs, compressfile, input, TheBufferSize);
+	while(fileToGzip->DeflateL()){/*do nothing*/}
+	
+	fileToGzip->ResetL(TheFs, compressfile, input, TheBufferSize);
+	while(fileToGzip->DeflateL()){/*do nothing*/}
+	
+	CleanupStack::PopAndDestroy(2);
+	
+#if !defined(__WINS__)
+	DeleteFile(gzipFileName);
+#endif
+
+	TFileName compressFilePath(KPath);
+	compressFilePath.Append(TheCompressFile);
+
+	_LIT(KTxtFile,"Hello_Reset.txt");
+	TFileName txtFileName(KTxtFile);
+	TFileName decompressfile(KOutputFilePath);
+	decompressfile.Append(txtFileName);
+
+	RFile output;
+	User::LeaveIfError(output.Replace(TheFs, decompressfile,EFileStream | EFileWrite | EFileShareExclusive));
+	CleanupClosePushL(output);
+
+	CEZGZipToFile *gzipToFile = CEZGZipToFile::NewLC(TheFs, compressFilePath, output, TheBufferSize);
+	while(gzipToFile->InflateL()){/*do nothing*/}
+
+	gzipToFile->ResetL(TheFs, compressFilePath, output, TheBufferSize);
+	while(gzipToFile->InflateL()){/*do nothing*/}
+	
+	CleanupStack::PopAndDestroy(2);
+	
+#if !defined(__WINS__)
+	DeleteFile(txtFileName);
+#endif
+
+	}
+
+/**
+@SYMTestCaseID          SYSLIB-EZLIB2-UT-4294
+@SYMTestCaseDesc	    CEZGZipToFile class initialisation fails when source 
+						gzip file header is malformed: Header is too small
+@SYMTestPriority 	    High
+@SYMTestActions  	    Pass corrupted gzip file as an input parameter to CEZGZipToFile::NewL()  
+						Note: Change the header of existing gzip file by removing few characters
+@SYMTestExpectedResults NewL() method should leave with error message KEZlibErrBadGZipHeader 
+						& the test must not fail 
+@SYMDEF                 REQ8024
+*/	
+void TestGzipHeaderSmallL()
+	{
+	
+	_LIT(KGzFile,"Hello_HeaderChanged.gz");	
+	TFileName compressfile(KPath);
+	compressfile.Append(KGzFile);
+
+	TFileName decompressFilePath(KOutputFilePath);
+	decompressFilePath.Append(TheDecompressFile);
+
+	RFile output;
+	User::LeaveIfError(output.Replace(TheFs, decompressFilePath,EFileStream | EFileWrite | EFileShareExclusive));
+	CleanupClosePushL(output);
+	
+	TRAPD(error, CEZGZipToFile::NewL(TheFs, compressfile, output, TheBufferSize));
+	test(error == KEZlibErrBadGZipHeader);
+
+	CleanupStack::PopAndDestroy(1);
+
+	}
+
+/**
+@SYMTestCaseID          SYSLIB-EZLIB2-UT-4295
+@SYMTestCaseDesc	    CEZGZipToFile class initialisation fails when source gzip file 
+						header is malformed: Header ID number is incorrect
+@SYMTestPriority 	    High
+@SYMTestActions  	    Pass corrupted gzip file as an input parameter to CEZGZipToFile::NewL()  
+						Note: Change the header ID of existing gzip file
+@SYMTestExpectedResults NewL() method should leave with error message KEZlibErrBadGZipHeader 
+						& the test must not fail 
+@SYMDEF                 REQ8024
+*/	
+void TestGzipHeaderIdIncorrectL()
+	{	
+
+	_LIT(KGzFile,"Hello_HeaderIdChanged.gz");
+	TFileName compressfile(KPath);
+	compressfile.Append(KGzFile);
+
+	TFileName decompressFilePath(KOutputFilePath);
+	decompressFilePath.Append(TheDecompressFile);
+
+	RFile output;
+	User::LeaveIfError(output.Replace(TheFs, decompressFilePath,EFileStream | EFileWrite | EFileShareExclusive));
+	CleanupClosePushL(output);
+	
+	TRAPD(error, CEZGZipToFile::NewL(TheFs, compressfile, output, TheBufferSize));
+	test(error == KEZlibErrBadGZipHeader);
+	
+	CleanupStack::PopAndDestroy(1);
+	
+	}
+
+/**
+@SYMTestCaseID          SYSLIB-EZLIB2-UT-4296
+@SYMTestCaseDesc	    CEZGZipToFile class fails while decompressing the gzip 
+						file with the CRC changed in the trailer
+@SYMTestPriority 	    High
+@SYMTestActions  	    Pass corrupted gzip file as an input parameter to CEZGZipToFile::NewL()
+						Note: Change the CRC within the Trailer of existing gzip file
+@SYMTestExpectedResults NewL() method should leave with error message KErrNotFound & the test must not fail
+						Note: KErrNotFound error is fired while opening the corrupted gzip file
+@SYMDEF                 REQ8024
+*/	
+void TestGzipTrailerCRCL()
+	{
+
+	_LIT(KGzFile,"Hello_TrailerIdChanged.gz");	
+	TFileName compressfile(KPath);
+	compressfile.Append(KGzFile);
+
+	TFileName decompressFilePath(KOutputFilePath);
+	decompressFilePath.Append(TheDecompressFile);
+
+	RFile output;
+	User::LeaveIfError(output.Replace(TheFs, decompressFilePath,EFileStream | EFileWrite | EFileShareExclusive));
+	CleanupClosePushL(output);
+	
+	TRAPD(error, CEZGZipToFile::NewL(TheFs, compressfile, output, TheBufferSize));
+	test(error == KErrNotFound);
+	
+	CleanupStack::PopAndDestroy(1);
+
+	}
+
+void TestCompressDecompressL()
+	{
+
+	TFileName inputFilePath(KPath);
+	inputFilePath.Append(TheInputFile);
+	
+	TFileName compressFilePath(KOutputFilePath);
+	compressFilePath.Append(TheCompressFile);
+
+	RFile input;
+	User::LeaveIfError(input.Open(TheFs,inputFilePath,EFileStream | EFileRead | EFileShareReadersOnly));
+	CleanupClosePushL(input);
+	
+	CEZFileToGZip *fileToGzip = CEZFileToGZip::NewLC(TheFs, compressFilePath, input, TheBufferSize);
+	while(fileToGzip->DeflateL()){/*do nothing*/}
+	
+	TFileName decompressFilePath(KOutputFilePath);
+	decompressFilePath.Append(TheDecompressFile);
+
+	TFileName compressFilePath1(KPath);
+	compressFilePath1.Append(TheCompressFile);
+
+	RFile output;
+	User::LeaveIfError(output.Replace(TheFs, decompressFilePath,EFileStream | EFileWrite | EFileShareExclusive));
+	CleanupClosePushL(output);
+
+	CEZGZipToFile *gzipToFile = CEZGZipToFile::NewLC(TheFs, compressFilePath1, output, TheBufferSize);
+	while(gzipToFile->InflateL()){/*do nothing*/}
+
+	CleanupStack::PopAndDestroy(4);
+	
+#if !defined(__WINS__)
+	DeleteFile(TheCompressFile);
+	DeleteFile(TheDecompressFile);
+#endif
+	}
+	
+/**
+@SYMTestCaseID          SYSLIB-EZLIB2-UT-4297
+@SYMTestCaseDesc	    Out of Memory(OOM) test for CEZFileToGZip &  CEZGZipToFile class
+@SYMTestPriority 	    High
+@SYMTestActions  	    1.	Set Heap Failure using the macro as:
+							__UHEAP_SETFAIL(RHeap::EDeterministic, count)
+						2.	Mark the heap using macro: __UHEAP_MARK
+						3.	Open existing test file and pass it to CEZFileToGZip::NewL() compress using CEZFileToGZip::DeflateL() function
+						4.	Create or open output decompressed file and pass compressed file to CEZGZipToFile::NewL() & decompress using CEZGZipToFile::InflateL() function
+						5.	Check there is no memory leak using the macro: __UHEAP_MARKEND
+						6.	Repeat the Steps 1-5 increasing the heap value rate i.e. count
+@SYMTestExpectedResults The test succeeds with no memory leak on the heap as well as no errors (i.e. KErrNone)
+						& the test must not fail 
+@SYMDEF                 REQ8024
+*/	
+void TestOOMGzipL()
+	{
+   	TInt processHandlesS = 0;
+	TInt threadHandlesS = 0;
+	TInt processHandlesE = 0;
+	TInt threadHandlesE = 0;
+	TInt err = KErrNone;
+	RThread().HandleCount(processHandlesS, threadHandlesS);
+	for(TInt count=1; count<=100; ++count)
+		{
+		// Setting Heap failure for OOM test
+		__UHEAP_SETFAIL(RHeap::EDeterministic, count);
+		__UHEAP_MARK;
+		
+		TRAP(err,TestCompressDecompressL());
+		__UHEAP_MARKEND;
+		if(err == KErrNone)
+			{
+			RDebug::Print(_L("The test succeeded at heap failure rate=%d.\n"), count);
+			break;
+			}
+		else 
+			{
+			test(err == KErrNoMemory);
+			}
+		__UHEAP_RESET;
+		}
+	
+	test(err == KErrNone);
+	__UHEAP_RESET;
+	
+	RThread().HandleCount(processHandlesE, threadHandlesE);
+	
+	test(processHandlesS == processHandlesE);
+	test(threadHandlesS == threadHandlesE);
+
+	}
+/*
+ * Helper function for TestDEF117325ToGZipL
+ * Deflates a file and then calls ResetL()
+ */
+void DeflateResetL()
+	{
+	_LIT(KGzipFile,"Hello_Reset.gz");
+	TFileName compressFile(KOutputFilePath);
+	compressFile.Append(KGzipFile);
+
+	TFileName inputFilePath(KPath);
+	inputFilePath.Append(TheInputFile);
+	
+	RFile input;	
+	User::LeaveIfError(input.Open(TheFs, inputFilePath, EFileStream | EFileRead | EFileShareReadersOnly));
+	CleanupClosePushL(input);
+		
+	CEZFileToGZip *fileToGzip = CEZFileToGZip::NewLC(TheFs, compressFile, input, TheBufferSize);
+	while(fileToGzip->DeflateL()) {/*do nothing*/}
+	
+	fileToGzip->ResetL(TheFs, compressFile, input, TheBufferSize);
+	
+	CleanupStack::PopAndDestroy(2);
+	
+	#if !defined(__WINS__)
+	DeleteFile(TheInputFile);
+	#endif
+	}
+
+/*
+ * Helper function for TestDEF117325ToFileL
+ * Inflates a GZip file and then calls ResetL()
+ */
+void InflateResetL()
+	{
+	_LIT(KTxtFile, "Hello_Reset.txt");
+	TFileName decompressFile(KOutputFilePath);
+	decompressFile.Append(KTxtFile);
+
+	TFileName compressFilePath(KPath);
+	compressFilePath.Append(TheCompressFile);
+		
+	RFile output;
+	User::LeaveIfError(output.Replace(TheFs, decompressFile, EFileStream | EFileWrite | EFileShareExclusive));
+	CleanupClosePushL(output);
+	
+	CEZGZipToFile *gzipToFile = CEZGZipToFile::NewLC(TheFs, compressFilePath, output, TheBufferSize);
+	while(gzipToFile->InflateL()){/*do nothing*/}
+	
+	gzipToFile->ResetL(TheFs, compressFilePath, output, TheBufferSize);
+	
+	CleanupStack::PopAndDestroy(2);
+	
+	#if !defined(__WINS__)
+	DeleteFile(TheCompressFile);
+	#endif
+	}
+
+/*
+ * Helper function for TestDEF117325ToGZipL and TestDEF117325ToFileL.
+ * Checks for memory leaks in OOM situations.
+ */
+void DEF117325L(void (*aResetL)())
+	{
+	TInt err = KErrNone;
+	for(TInt count = 0; count <= 100; count++)
+		{
+		// Setting Heap failure for OOM test
+		__UHEAP_SETFAIL(RHeap::EDeterministic, count);
+		__UHEAP_MARK;	
+		
+		TRAP(err, aResetL());
+		
+		__UHEAP_MARKEND;
+		__UHEAP_RESET;
+		
+		if(err == KErrNone)
+			{
+			RDebug::Print(_L("The test succeeded at heap failure rate = %d.\n"), count);
+			break;
+			}
+		else 
+			{
+			test(err == KErrNoMemory);
+			}
+		}
+	}
+
+/**
+@SYMTestCaseID          SYSLIB-EZLIB2-UT-4319
+@SYMTestCaseDesc	    To test that there are no memory leaks when calling ResetL from CEZFileToGZip
+@SYMTestPriority 	    Medium
+@SYMTestActions  	    1.	Set Heap Failure using the macro __UHEAP_SETFAIL(RHeap::EDeterministic, count)
+						2.	Mark the heap using macro __UHEAP_MARK
+						3.	Open an existing test file and pass it to CEZFileToGZip::NewL() and compress it using CEZFileToGZip::DeflateL function
+						4.	Call CEZFileToGZip::ResetL() with new file parameters
+						5.	Check there is no memory leak using the macro __UHEAP_MARKEND
+						6.	Repeat steps 1 - 5 increasing the heap value rate i.e. count
+@SYMTestExpectedResults The test succeeds with no memory leak on the heap as well as no errors (i.e. KErrNone) 
+@SYMDEF                 REQ8024
+*/	
+void TestDEF117325ToGZipL()
+	{		
+	DEF117325L(&DeflateResetL);
+	}
+
+/**
+@SYMTestCaseID          SYSLIB-EZLIB2-UT-4320
+@SYMTestCaseDesc	    To test that there are no memory leaks when calling ResetL from CEZGZipToFile
+@SYMTestPriority 	    Medium
+@SYMTestActions  	    1.	Open an existing test file and pass it to CEZFileToGZip::NewL() and compress it using CEZFileToGZip::DeflateL 
+						2.	Set Heap Failure using the macro __UHEAP_SETFAIL(RHeap::EDeterministic, count)
+						3.	Mark the heap using macro __UHEAP_MARK
+						4.	Open the compressed test file and pass it to CEZGZipToFile::NewL() and decompress it using CEZGZipToFile::InflateL function
+						5.	Call CEZGZipToFile::ResetL() with new file parameters
+						6.	Check there is no memory leak using the macro __UHEAP_MARKEND
+						7.	Repeat steps 2 - 6 increasing the heap value rate i.e. count
+@SYMTestExpectedResults The test succeeds with no memory leak on the heap as well as no errors (i.e. KErrNone)
+@SYMDEF                 REQ8024
+*/	
+void TestDEF117325ToFileL()
+	{	
+	
+	// Create a GZip file that can be used by CEZGZipToFile
+	CompressFileL(TheInputFile, TheCompressFile);
+	
+	DEF117325L(&InflateResetL);
+	
+	#if !defined(__WINS__)
+	DeleteFile(TheCompressFile);
+	#endif
+	}
+
+	
+
+void RunTestL()
+	{
+	
+	User::LeaveIfError(TheFs.Connect()); //Connect to file session
+	CleanupClosePushL(TheFs);
+	
+#if !defined(__WINS__)
+	TInt err = TheFs.MkDirAll(KOutputFilePath);  
+	if(err != KErrNone && err != KErrAlreadyExists)
+		{
+		test.Printf(_L("Error while creating dir => Error: %d"), err);
+		User::Leave(err);
+		}
+#endif
+	
+	test.Next(_L(" @SYMTestCaseID:SYSLIB-EZLIB2-UT-4286 Compression - Decompression of Gzip file "));
+	TestCompressDecompressGzip();
+	test.Next(_L(" @SYMTestCaseID:SYSLIB-EZLIB2-UT-4287 Compression - Decompression of Gzip file with big & small buffer size "));
+	TestOutputBuffSize();
+	test.Next(_L(" @SYMTestCaseID:SYSLIB-EZLIB2-UT-4288 Class initialisation fails when invalid input rfile supplied "));
+	TestRFileInitialisation();
+	test.Next(_L(" @SYMTestCaseID:SYSLIB-EZLIB2-UT-4289 Class initialisation fails when invalid output filename supplied "));
+	TestInvalidFilenameL();
+	test.Next(_L(" @SYMTestCaseID:SYSLIB-EZLIB2-UT-4290 Class initialisation fails while overwriting the read only output file "));
+	TestOverwriteOutputFileL();
+	test.Next(_L(" @SYMTestCaseID:SYSLIB-EZLIB2-UT-4291 Class initialisation fails when invalid RFS object is passed "));
+	TestRFSInitialisation();
+	test.Next(_L(" @SYMTestCaseID:SYSLIB-EZLIB2-UT-4292 Panic Thread: Class initialisation fails when invalid buffer size parameter passed in "));
+	TestInvalidBufferSize();
+	test.Next(_L(" @SYMTestCaseID:SYSLIB-EZLIB2-UT-4293 Compress another file with CEZFileToGZip & CEZGZipToFile after calling ResetL method "));
+	TestCompressDecompressResetL();
+	test.Next(_L(" @SYMTestCaseID:SYSLIB-EZLIB2-UT-4294 CEZGZipToFile class initialisation fails when source gzip file header is malformed: Header is too small "));
+	TestGzipHeaderSmallL();
+	test.Next(_L(" @SYMTestCaseID:SYSLIB-EZLIB2-UT-4295 CEZGZipToFile class initialisation fails when source gzip file header is malformed: Header ID number is incorrect "));
+	TestGzipHeaderIdIncorrectL();
+	test.Next(_L(" @SYMTestCaseID:SYSLIB-EZLIB2-UT-4296 CEZGZipToFile class fails while decompressing the gzip file with the CRC changed in the trailer "));
+	TestGzipTrailerCRCL();
+	test.Next(_L(" @SYMTestCaseID:SYSLIB-EZLIB2-UT-4297 Out of Memory(OOM) test for CEZFileToGZip & CEZGZipToFile class "));
+	TestOOMGzipL();
+	test.Next(_L(" @SYMTestCaseID:SYSLIB-EZLIB2-UT-4319 Out of Memory(OOM) test for DEF117325: Ezlib: ResetL() in gzip.cpp - a member variable can be deleted twice (CEZFileToGZip) "));
+	TestDEF117325ToGZipL();
+	test.Next(_L(" @SYMTestCaseID:SYSLIB-EZLIB2-UT-4320 Out of Memory(OOM) test for DEF117325: Ezlib: ResetL() in gzip.cpp - a member variable can be deleted twice (CEZGZipToFile) "));
+	TestDEF117325ToFileL();
+		
+
+#if !defined(__WINS__)
+	CFileMan* fMan=CFileMan::NewL(TheFs);
+   	test(fMan!=NULL);
+   	CleanupStack::PushL(fMan);
+ 	err = fMan->RmDir(_L("C:\\test\\gzip"));
+ 	CleanupStack::PopAndDestroy(1);
+#endif
+ 	
+ 	CleanupStack::PopAndDestroy(1);
+	
+	}	
+
+GLDEF_C TInt E32Main()
+	{
+	
+	__UHEAP_MARK;
+
+	test.Printf(_L("\n"));
+	test.Title();
+	test.Start( _L("Starting Gzip Tests..") );
+
+	TheTrapCleanup=CTrapCleanup::New();
+
+	TRAPD(err,RunTestL());
+	test (err==KErrNone);
+
+	test.End();
+	test.Close();
+	
+	delete TheTrapCleanup;
+
+	__UHEAP_MARKEND;
+	return KErrNone;
+
+	}