kerneltest/f32test/plugins/version_2/src/t_plugin_v2.cpp
changeset 0 a41df078684a
child 8 538db54a451d
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/kerneltest/f32test/plugins/version_2/src/t_plugin_v2.cpp	Mon Oct 19 15:55:17 2009 +0100
@@ -0,0 +1,2764 @@
+// Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of the License "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 <f32file.h>
+#include <f32dbg.h>
+#include <e32test.h>
+#include "t_server.h"
+#include "t_chlffs.h"
+#include "plugincommon.h"
+#include "premodifier_plugin.h"
+#include "modifier_plugin.h"
+#include "observer_plugin.h"
+#include "combinational_plugin.h"
+#include "combinational2_plugin.h"
+#include "stacked_plugin.h"
+#include "stacked2_plugin.h"
+#include "stacked3_plugin.h"
+#include "drivec_plugin.h"
+#include "drivez_plugin.h"
+#include "allsupporteddrives_plugin.h"
+#include "exclusiveaccess_plugin.h"
+#include "unremovable_plugin.h"
+
+#include <e32def.h>
+#include <e32def_private.h>
+
+RTest test(_L("Plugin Framework Version 2 Test"));
+
+#define _plugin_test(r)		if(!r) { dismountAllPlugins(); test(r); }
+
+
+class MyRPlugin : public RPlugin
+	{
+public:
+	void DoRequest(TInt aReqNo,TRequestStatus& aStatus) const;
+	void DoRequest(TInt aReqNo,TRequestStatus& aStatus,TDes8& a1) const;
+	void DoRequest(TInt aReqNo,TRequestStatus& aStatus,TDes8& a1,TDes8& a2) const;
+	TInt DoControl(TInt aFunction) const;
+	TInt DoControl(TInt aFunction,TDes8& a1) const;
+	TInt DoControl(TInt aFunction,TDes8& a1,TDes8& a2) const;
+	void DoCancel(TUint aReqMask) const;
+	};
+
+void dismountAllPlugins()
+	{
+	TheFs.DismountPlugin(KObserverPluginName);
+	TheFs.DismountPlugin(KModifierPluginName);
+	TheFs.DismountPlugin(KPreModifierPluginName);
+	TheFs.DismountPlugin(KCombinationalPluginName);
+	TheFs.DismountPlugin(KCombinational2PluginName);
+	TheFs.DismountPlugin(KAllSupportedDrivesPluginName);
+	TheFs.DismountPlugin(KDriveZPluginName);
+	TheFs.DismountPlugin(KDriveCPluginName);
+	TheFs.DismountPlugin(KStackedPluginName);
+	TheFs.DismountPlugin(KStacked2PluginName);
+	TheFs.DismountPlugin(KStacked3PluginName);
+	TheFs.DismountPlugin(KExclusiveAccessPluginName);
+	TheFs.DismountPlugin(KUnremovablePluginName);
+
+	TheFs.RemovePlugin(KObserverPluginName);
+	TheFs.RemovePlugin(KModifierPluginName);
+	TheFs.RemovePlugin(KPreModifierPluginName);
+	TheFs.RemovePlugin(KCombinationalPluginName);
+	TheFs.RemovePlugin(KCombinational2PluginName);
+	TheFs.RemovePlugin(KAllSupportedDrivesPluginName);
+	TheFs.RemovePlugin(KDriveZPluginName);
+	TheFs.RemovePlugin(KDriveCPluginName);
+	TheFs.RemovePlugin(KStackedPluginName);
+	TheFs.RemovePlugin(KStacked2PluginName);
+	TheFs.RemovePlugin(KStacked3PluginName);
+	TheFs.RemovePlugin(KExclusiveAccessPluginName);
+	TheFs.RemovePlugin(KUnremovablePluginName);
+	}
+
+inline void safe_test(TInt aError, TInt aLine, TText* aName)
+	{
+	if(aError!=KErrNone)
+		{
+		test.Printf(_L("Error: %d receieved on line %d\n"),aError,aLine);
+		dismountAllPlugins();
+		test.operator()(aError==KErrNone,aLine,(TText*)aName);
+		}
+	}
+
+inline void plugin_test(RTest& test, TInt aUniquePluginPos, TInt aLine, TText* aName)
+	{
+	__UHEAP_MARK;
+	MyRPlugin rplugin;
+	TInt error = KErrNone;
+	TInt lineNumber;
+	TPckg<TInt> errCodePckg(error);
+	TPckg<TInt> lineNumberPckg(lineNumber);
+
+	test.Next(_L("Open RPlugin connection"));
+	TInt r = rplugin.Open(TheFs,aUniquePluginPos);
+	if(r!=KErrNone)
+		{
+		dismountAllPlugins();
+		}
+
+	//This next lines aren't needed though I'm leaving them here
+	//for reference.
+	// ...
+	//const TText name[16] = (const TText *) Expand(__FILE__);
+	//TPckg<TText[16]> namePckg(name);
+	//test.operator()(r==KErrNone,aLine,(TText*)&namePckg());
+	// ...
+
+	//test for Open
+	test.operator()(r==KErrNone,aLine,(TText*)aName);
+
+	test.Next(_L("Check plugin for any errors"));
+	r = rplugin.DoControl(KPluginGetError,errCodePckg,lineNumberPckg);
+	//test for DoControl
+	if(r!=KErrNone)
+		{
+		dismountAllPlugins();
+		test.operator()(r==KErrNone,aLine,(TText*)aName);
+		}
+
+	if(error != KErrNone)
+		{
+		test.Printf(_L("Error code == %d, from lineNumber == %d"),error,lineNumber);
+		}
+
+	//test for actual error
+	if(r!=KErrNone)
+		{
+		dismountAllPlugins();
+		test.operator()(error==KErrNone,aLine,(TText*)aName);
+		}
+	rplugin.Close();
+	__UHEAP_MARKEND;
+	}
+
+
+
+void MyRPlugin::DoRequest(TInt aReqNo,TRequestStatus& aStatus) const
+	{
+	RPlugin::DoRequest(aReqNo,aStatus);
+	}
+void MyRPlugin::DoRequest(TInt aReqNo,TRequestStatus& aStatus,TDes8& a1) const
+	{
+	RPlugin::DoRequest(aReqNo,aStatus,a1);
+	}
+void MyRPlugin::DoRequest(TInt aReqNo,TRequestStatus& aStatus,TDes8& a1,TDes8& a2) const
+	{
+	RPlugin::DoRequest(aReqNo,aStatus,a1,a2);
+	}
+TInt MyRPlugin::DoControl(TInt aFunction) const
+	{
+	return RPlugin::DoControl(aFunction);
+	}
+TInt MyRPlugin::DoControl(TInt aFunction,TDes8& a1) const
+	{
+	return RPlugin::DoControl(aFunction,a1);
+	}
+TInt MyRPlugin::DoControl(TInt aFunction,TDes8& a1,TDes8& a2) const
+	{
+	return RPlugin::DoControl(aFunction,a1,a2);
+	}
+void MyRPlugin::DoCancel(TUint aReqMask) const
+	{
+	RPlugin::DoCancel(aReqMask);
+	}
+
+TInt ReplaceFiles(TDes16 &aPath, TDes8 &aContent, TInt aLine)
+	{
+	RFile file;
+	TInt r=KErrNone;
+
+	r = file.Replace(TheFs, aPath, EFileWrite);
+	test.operator()(r==KErrNone,aLine,_S("t_plugin_v2.cpp"));
+
+	r = file.Write(aContent);
+	test.operator()(r==KErrNone,aLine,_S("t_plugin_v2.cpp"));
+	file.Close();
+
+	return r;
+	}
+
+
+void SetupTestFiles()
+	{
+	test.Next(_L("Setting up test files"));
+
+	TBuf<40> path1;
+	TBuf<40> path2;
+	TBuf<40> path3;
+
+	TInt theDrive;
+	TInt r=TheFs.CharToDrive(gDriveToTest,theDrive);
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+	path1.Append(gDriveToTest);
+	path1.Append(_L(":\\data\\oldtest.tst"));
+
+	path2.Append(gDriveToTest);
+	path2.Append(_L(":\\data\\"));
+
+	path3.Append(gDriveToTest);
+	path3.Append(_L(":\\data2\\"));
+
+
+	test.Next(_L("Setting up test files"));
+
+	r = TheFs.Delete(path1);
+	test(r==KErrNone || r==KErrNotFound || r==KErrPathNotFound);
+
+	r = TheFs.MkDir(path2);
+	test(r==KErrNone || r==KErrAlreadyExists);
+
+	r = TheFs.MkDir(path3);
+	test(r==KErrNone || r==KErrAlreadyExists);
+
+	}
+
+
+void LoadAndMountPlugins()
+	{
+	TInt r = KErrNone;
+
+	test.Next(_L("Loading Observer plugin"));
+	r = TheFs.AddPlugin(KObserverPluginFileName);
+	if (r == KErrAlreadyExists) r = KErrNone;
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+	r = TheFs.MountPlugin(KObserverPluginName);
+	if (r == KErrInUse) r = KErrNone;
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+	test.Next(_L("Loading PreModifier plugin"));
+	r = TheFs.AddPlugin(KPreModifierPluginFileName);
+	if (r == KErrAlreadyExists) r = KErrNone;
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+	r = TheFs.MountPlugin(KPreModifierPluginName);
+	if (r == KErrInUse) r = KErrNone;
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+	test.Next(_L("Loading Modifier plugin"));
+	r = TheFs.AddPlugin(KModifierPluginFileName);
+	if (r == KErrAlreadyExists) r = KErrNone;
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+	r = TheFs.MountPlugin(KModifierPluginName,KPluginAutoAttach);
+	if (r == KErrInUse) r = KErrNone;
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+	r = TheFs.MountPlugin(KModifierPluginName,20);
+	if(r==KErrInUse) r = KErrNone;
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.exe"));
+
+
+	//Use RPlugin to communicate to the plugins which drive they should be
+	//testing on.
+	//This is needed because sometimes a plugin may open a different file etc and will need
+	//to know which drive it should be testing on.
+
+	MyRPlugin rplugin;
+	TPckg<TChar> drivePckg(gDriveToTest);
+
+	test.Next(_L("Open RPlugin connection for ModifierPlugin"));
+	r = rplugin.Open(TheFs,KModifierPos);
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+	test.Next(_L("Send drive letter to test down to plugin"));
+	r = rplugin.DoControl(KPluginSetDrive,drivePckg);
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+	rplugin.Close();
+
+	test.Next(_L("Open RPlugin connection for PreModifierPlugin"));
+	r = rplugin.Open(TheFs,KPreModifierPos);
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+	test.Next(_L("Send drive letter to test down to plugin"));
+	r = rplugin.DoControl(KPluginSetDrive,drivePckg);
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+	rplugin.Close();
+
+	// As an extra test, open an RPlugin handle but don't close to test subsession cleanup on session closure...
+
+	RFs myFs;
+	r = myFs.Connect();
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+	r = rplugin.Open(myFs,KModifierPos);
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+	
+	// Don't close:	rplugin.Close();
+
+	myFs.Close();
+	
+	// Test the memory cleanup for asynchronous request
+
+	r = rplugin.Open(TheFs,KModifierPos);
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+	TRequestStatus aStatus; 
+	rplugin.DoRequest(1,aStatus,drivePckg);
+	User::WaitForRequest(aStatus);
+	rplugin.Close();
+		
+	}
+//-------------------------------------------------------------------------------------------------
+//! @SYMTestCaseID				KBASE-t_plugin_v2-1336
+//! @SYMTestType				CT
+//! @SYMTestCaseDesc			Client request to read data directly from a file
+//! @SYMPREQ					REQ7902
+//! @SYMTestPriority			High
+//! @SYMTestActions				TestReadFileDirect() disables intercepts on any mounted plugin.
+//!								Following this, it opens a test file and sends a read request directly
+//!								to the fileserver.
+//!
+//!								1.	Disable intercepts.
+//!								2.  Set up test file name and path.
+//!								3.	Open file for read access.
+//!								4.	Read data from test file.
+//!								5.	Close test file.
+//!								6.	Enable intercepts.
+//!
+//!
+//! @SYMTestExpectedResults		1.	Intercepts disabled without any panic
+//!								2.	Test file created without any panic
+//!								3.	File opened without any panic
+//!								4.	Read request completes by bypassing plug-in without any panic
+//!								5.	File close without any panic.
+//!								6.	Intercepts enabled.
+//!
+//! @SYMTestPriority			High
+//! @SYMTestStatus				Implemented
+//-------------------------------------------------------------------------------------------------
+void TestReadFileDirect()
+	{
+
+	//As the plugin is installed at this point, rather than removing it
+	//or not mounting it until after, lets disable intercepts
+	//and enabled them at the end of this function.
+	MyRPlugin rplugin;
+	TInt r = rplugin.Open(TheFs,KModifierPos);
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+	TBool interceptsStatus;
+	TPckg<TBool> interceptsStatusDes(interceptsStatus);
+	test.Next(_L("RPlugin: togle itnercepts (Modifier)"));
+	r = rplugin.DoControl(KPluginToggleIntercepts,interceptsStatusDes);
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+	test.Next(_L("Ensure that intercepts are now disabled"));
+	if(!interceptsStatus) r = KErrNone;
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+	rplugin.Close();
+
+	interceptsStatus = ETrue;
+
+	r = rplugin.Open(TheFs,KObserverPos);
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+	test.Next(_L("RPlugin: togle itnercepts (Observer)"));
+	r = rplugin.DoControl(KPluginToggleIntercepts,interceptsStatusDes);
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+	test.Next(_L("Ensure that intercepts are now disabled"));
+	if(!interceptsStatus) r = KErrNone;
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+	rplugin.Close();
+
+
+	RFile file;
+	TBuf8<4> narrow_buffer;
+	TBuf16<4> wide_buffer;
+	TBuf<256> filename;
+	TBuf8<10> content;
+
+	//setting up test files
+	filename.Append(gDriveToTest);
+	filename.Append(_L(":\\data\\test.txt"));
+	content.Copy(_L8("1234567890"));
+	ReplaceFiles(filename, content,__LINE__);
+
+	r = file.Open(TheFs, filename, EFileRead);
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+	test.Next(_L("Reading from a file directly first time"));
+	r = file.Read(narrow_buffer); // -> returns data from pos 0 to 3
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+	wide_buffer.Copy(narrow_buffer);
+	test.Printf(_L("read: %S\n"), &wide_buffer);
+
+	test.Next(_L("Reading from a file directly second time"));
+	r = file.Read(narrow_buffer); // -> returns data from pos 4 to 8
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+	wide_buffer.Copy(narrow_buffer);
+	test.Printf(_L("read: %S\n"), &wide_buffer);
+
+	test.Next(_L("Reading from a file directly complete"));
+	file.Close();
+
+	//Turn intercepts back on.
+    interceptsStatus = EFalse;
+
+	r = rplugin.Open(TheFs,KModifierPos);
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+	test.Next(_L("RPlugin: togle itnercepts (Observer)"));
+	r = rplugin.DoControl(KPluginToggleIntercepts,interceptsStatusDes);
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+	test.Next(_L("Ensure that intercepts are now enabled"));
+	if(interceptsStatus) r = KErrNone;
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+	rplugin.Close();
+
+	interceptsStatus = EFalse;
+
+	r = rplugin.Open(TheFs,KObserverPos);
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+	test.Next(_L("RPlugin: togle itnercepts (Observer)"));
+	r = rplugin.DoControl(KPluginToggleIntercepts,interceptsStatusDes);
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+	test.Next(_L("Ensure that intercepts are now enabled"));
+	if(interceptsStatus) r = KErrNone;
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+	rplugin.Close();
+
+	}
+//-------------------------------------------------------------------------------------------------
+//! @SYMTestCaseID				KBASE-t_plugin_v2-1337
+//! @SYMTestType				CT
+//! @SYMTestCaseDesc			Client request to read data via a plugin from a file
+//! @SYMPREQ					REQ7902
+//! @SYMTestPriority			High
+//! @SYMTestActions				TestReadFileDirect() opens a file for read access.
+//!								Following this, it sends a read request via a plugin to the fileserver.
+//!
+//!								1.	Set up test file name and path.
+//!								2.  Open file for read access.
+//!								3.	Read data from test file.
+//!								4.  Get current size of file.
+//!								5.  Read data from test file .
+//!								6.	Verify that the correct data was read from the test file.
+//!								7.	Close test file.
+//!
+//!
+//!
+//! @SYMTestExpectedResults		1.	Test file created without any panic.
+//!								2.	File opened without any panic.
+//!								3.	Read request completes by bypassing plug-in without any panic.
+//!								4.	Size of file returned without any panic.
+//!								5.	Read request completes by bypassing plug-in without any panic.
+//!								6.	Correct data read by from test file.
+//!								7.	File close without any panic.
+//!
+//!
+//! @SYMTestPriority			High
+//! @SYMTestStatus				Implemented
+//-------------------------------------------------------------------------------------------------
+void TestReadFileViaPlugin()
+	{
+	RFile file;
+	TBuf8<4> narrow_buffer;
+	narrow_buffer.FillZ(4);
+	TBuf16<4> wide_buffer;
+	wide_buffer.FillZ(4);
+
+	TBuf<256> filename;
+	TBuf8<10> content;
+
+	//setting up test files
+	filename.Append(gDriveToTest);
+	filename.Append(_L(":\\data\\test.tst"));
+	content.Copy(_L8("1234567890"));
+	ReplaceFiles(filename, content,__LINE__);
+
+	TInt r = file.Open(TheFs, filename, EFileRead);
+	plugin_test(test,KModifierPos,__LINE__,(TText*)Expand("modifier_plugin.cpp"));
+	plugin_test(test,KPreModifierPos,__LINE__,(TText*)Expand("premodifier_plugin.cpp"));
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+	test.Next(_L("Reading from a file via a plugin using CFsPlugin::FileRead first time"));
+	r = file.Read(narrow_buffer); // -> returns data from pos 0 to 3
+	plugin_test(test,KModifierPos,__LINE__,(TText*)Expand("modifier_plugin.cpp"));
+	plugin_test(test,KPreModifierPos,__LINE__,(TText*)Expand("premodifier_plugin.cpp"));
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+	wide_buffer.Copy(narrow_buffer);
+	RDebug::Print(_L("read: %S\n"), &wide_buffer);
+	TInt size=0;
+	r = file.Size(size);
+	plugin_test(test,KModifierPos,__LINE__,(TText*)Expand("modifier_plugin.cpp"));
+	plugin_test(test,KPreModifierPos,__LINE__,(TText*)Expand("premodifier_plugin.cpp"));
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+	RDebug::Print(_L("RFile::size = %d"),size);
+
+	test.Next(_L("Reading from a file via a plugin using CFsPlugin::FileRead second time"));
+	r = file.Read(narrow_buffer); // -> returns data from pos 4 to 8
+	plugin_test(test,KModifierPos,__LINE__,(TText*)Expand("modifier_plugin.cpp"));
+	plugin_test(test,KPreModifierPos,__LINE__,(TText*)Expand("premodifier_plugin.cpp"));
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+	wide_buffer.Copy(narrow_buffer);
+	RDebug::Print(_L("read: %S\n"), &wide_buffer);
+
+	test.Next(_L("Reading from a file via a plugin using CFsPlugin::FileRead complete"));
+	file.Close();
+	}
+//-------------------------------------------------------------------------------------------------
+//! @SYMTestCaseID				KBASE-t_plugin_v2-1338
+//! @SYMTestType				CT
+//! @SYMTestCaseDesc			Client request to write to a file directly
+//! @SYMPREQ					REQ7902
+//! @SYMTestPriority			High
+//! @SYMTestActions				TestWriteFileDirect() disables intercepts on any mounted plugin.
+//!								Following this, it opens a test file and sends a write request directly
+//!								to the fileserver.
+//!
+//!								1.	Disable intercepts.
+//!								2.  Set up test file name and path.
+//!								3.	Open file for write access.
+//!								4.	Write to test file.
+//!								5.  Seek to the beginning of test file.
+//!								6.  Read from test file.
+//!								7.  Verify that the correct data was read from the test file.
+//!								8.	Close test file.
+//!								9.	Enable intercepts.
+//!
+//!
+//! @SYMTestExpectedResults		1.	Intercepts disabled without any panic
+//!								2.	Test file created without any panic
+//!								3.	File opened without any panic
+//!								4.	Write request completes by bypassing plug-in without any panic
+//!								6.  Seek to beginning of test file completes without any panic.
+//!								5.  Read from test file completes without any panic.
+//!								6.  Correct data read by from test file.
+//!								7.	File close without any panic.
+//!								8.	Intercepts enabled.
+//!
+//! @SYMTestPriority			High
+//! @SYMTestStatus				Implemented
+//-------------------------------------------------------------------------------------------------
+void TestWriteFileDirect()
+	{
+	//As the plugin is installed at this point, rather than removing it
+	//or not mounting it until after, lets disable intercepts
+	//and enabled them at the end of this function.
+	MyRPlugin rplugin;
+	TInt r = rplugin.Open(TheFs,KModifierPos);
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+	TBool interceptsStatus;
+	TPckg<TBool> interceptsStatusDes(interceptsStatus);
+	test.Next(_L("RPlugin: togle itnercepts (Modifier)"));
+	r = rplugin.DoControl(KPluginToggleIntercepts,interceptsStatusDes);
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+	test.Next(_L("Ensure that intercepts are now disabled"));
+	r = interceptsStatus == EFalse;
+	if(r) r = KErrNone;
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+	rplugin.Close();
+
+	interceptsStatus = ETrue;
+
+	r = rplugin.Open(TheFs,KObserverPos);
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+	test.Next(_L("RPlugin: togle itnercepts (Observer)"));
+	r = rplugin.DoControl(KPluginToggleIntercepts,interceptsStatusDes);
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+	test.Next(_L("Ensure that intercepts are now disabled"));
+	r = interceptsStatus == EFalse;
+	if(r) r = KErrNone;
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+	rplugin.Close();
+
+
+
+	RFile file;
+	TBuf8<64> buffer;
+	buffer.FillZ(64);
+    TBuf8<64> wbuffer;
+	wbuffer.FillZ(64);
+    wbuffer.Copy(_L8("TestTestTest"));
+
+	TBuf<256> filename;
+	TBuf8<10> content;
+
+	//setting up test files
+	filename.Append(gDriveToTest);
+	filename.Append(_L(":\\data\\test.txt"));
+	content.Copy(_L8("1234567890"));
+	ReplaceFiles(filename, content,__LINE__);
+
+    test.Next(_L("Opening file test.txt"));
+    // we assume that file test.txt still exists
+    r = file.Open(TheFs,filename, EFileWrite);
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+	test.Next(_L("Writing to file test.txt"));
+    r = file.Write(wbuffer);
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+	test.Next(_L("Seeking to beginning of file test.txt"));
+	TInt pos = 0;
+	r = file.Seek(ESeekStart, pos);
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+	test.Next(_L("Reading file test.txt"));
+    r = file.Read(buffer);
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+	test.Next(_L("Comparing buffers"));
+	r = wbuffer.Compare(buffer);
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+	test.Next(_L("Closing file test.txt"));
+    file.Close();
+
+    //Turn intercepts back on.
+    interceptsStatus = EFalse;
+
+	r = rplugin.Open(TheFs,KModifierPos);
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+	test.Next(_L("RPlugin: togle itnercepts (Observer)"));
+	r = rplugin.DoControl(KPluginToggleIntercepts,interceptsStatusDes);
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+	test.Next(_L("Ensure that intercepts are now enabled"));
+	if(interceptsStatus) r = KErrNone;
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+	rplugin.Close();
+
+	interceptsStatus = EFalse;
+
+	r = rplugin.Open(TheFs,KObserverPos);
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+	test.Next(_L("RPlugin: togle itnercepts (Observer)"));
+	r = rplugin.DoControl(KPluginToggleIntercepts,interceptsStatusDes);
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+	test.Next(_L("Ensure that intercepts are now enabled"));
+	if(interceptsStatus) r = KErrNone;
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+	rplugin.Close();
+
+	}
+//-------------------------------------------------------------------------------------------------
+//! @SYMTestCaseID				KBASE-t_plugin_v2-1339
+//! @SYMTestType				CT
+//! @SYMTestCaseDesc			Client request to write to a file via a plug-in
+//! @SYMPREQ					REQ7902
+//! @SYMTestPriority			High
+//! @SYMTestActions				TestWriteViaPlugin() opens a file for write access.
+//!								Following this, it sends a write request via a plugin to the fileserver.
+//!
+//!								1.	Set up test file name and path.
+//!								2.  Open file for write access.
+//!								3.	Write to test file.
+//!								4.  Seek to the beginning of test file.
+//!								5.  Read data from test file .
+//!								6.	Verify that the correct data was read from the test file.
+//!								7.	Close test file.
+//!
+//! @SYMTestExpectedResults		1.	Test file created without any panic.
+//!								2.	File opened without any panic.
+//!								3.	Read request completes by bypassing plug-in without any panic.
+//!								4.	Seek to beginning of test file completes without any panic.
+//!								5.	Read request completes by bypassing plug-in without any panic.
+//!								6.	Correct data read by from test file.
+//!								7.	File close without any panic.
+//!
+//! @SYMTestPriority			High
+//! @SYMTestStatus				Implemented
+//-------------------------------------------------------------------------------------------------
+void TestWriteFileViaPlugin()
+	{
+	RFile file;
+	TBuf8<64> buffer;
+	buffer.FillZ(64);
+    TBuf8<64> wbuffer;
+	wbuffer.FillZ(64);
+    wbuffer.Copy(_L8("TestTestTest"));
+
+
+	TBuf<256> filename;
+	TBuf8<10> content;
+
+	//setting up test files
+	filename.Append(gDriveToTest);
+	filename.Append(_L(":\\data\\test.tst"));
+	content.Copy(_L8("1234567890"));
+	ReplaceFiles(filename, content,__LINE__);
+
+    test.Next(_L("TestWriteFileViaPlugin(): Opening file test.tst"));
+    // we assume that file test.tst still exists
+    TInt r = file.Open(TheFs, filename, EFileWrite);
+	plugin_test(test,KModifierPos,__LINE__,(TText*)Expand("modifier_plugin.cpp"));
+	plugin_test(test,KPreModifierPos,__LINE__,(TText*)Expand("premodifier_plugin.cpp"));
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+	test.Next(_L("Writing to file test.tst"));
+    r = file.Write(0,wbuffer);
+	plugin_test(test,KModifierPos,__LINE__,(TText*)Expand("modifier_plugin.cpp"));
+	plugin_test(test,KPreModifierPos,__LINE__,(TText*)Expand("premodifier_plugin.cpp"));
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+	test.Next(_L("Seeking to beginning of file test.tst"));
+	TInt pos = 0;
+	r = file.Seek(ESeekStart, pos);
+	plugin_test(test,KModifierPos,__LINE__,(TText*)Expand("modifier_plugin.cpp"));
+	plugin_test(test,KPreModifierPos,__LINE__,(TText*)Expand("premodifier_plugin.cpp"));
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+	test.Next(_L("Reading file test.tst"));
+	TInt length = wbuffer.Length();
+	r = file.Read(buffer, length);
+	plugin_test(test,KModifierPos,__LINE__,(TText*)Expand("modifier_plugin.cpp"));
+	plugin_test(test,KPreModifierPos,__LINE__,(TText*)Expand("premodifier_plugin.cpp"));
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+	test.Next(_L("Comparing buffers"));
+	r = wbuffer.Compare(buffer);
+	plugin_test(test,KModifierPos,__LINE__,(TText*)Expand("modifier_plugin.cpp"));
+	plugin_test(test,KPreModifierPos,__LINE__,(TText*)Expand("premodifier_plugin.cpp"));
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+	test.Next(_L("Closing file test.tst"));
+    file.Close();
+	}
+//-------------------------------------------------------------------------------------------------
+//! @SYMTestCaseID				KBASE-t_plugin_v2-1350
+//! @SYMTestType				CT
+//! @SYMTestCaseDesc			Client request to rename a file
+//! @SYMPREQ					REQ7901
+//! @SYMTestPriority			High
+//! @SYMTestActions				TestRename() opens a file for write access.
+//!								Following this, it sends a rename request via a plugin to the fileserver.
+//!
+//!								1.	Set up test file name and path.
+//!								2.  Open file for write access.
+//!								3.	Rename test file.
+//!								4.  Write to file.
+//!								5.  Rename test file again
+//!								6.	Close test file.
+//!
+//! @SYMTestExpectedResults		1.	Test files created without any panic.
+//!								2.	File opened without any panic.
+//!								3.	Rename request intercepted by plugin and completes without any panic.
+//!								4.	Write request comletes without any panic.
+//!								5.	Rename request intercepted by plugin and completes without any panic.
+//!								6.	File close without any panic.
+//!
+//! @SYMTestPriority			High
+//! @SYMTestStatus				Implemented
+//-------------------------------------------------------------------------------------------------
+void TestRename()
+	{
+	RFile file;
+
+	TBuf<256> filename1;
+	TBuf<256> filename2;
+
+	//setting up test files
+	filename1.Append(gDriveToTest);
+	filename1.Append(_L(":\\data\\renametest.tst"));
+
+	filename2.Append(gDriveToTest);
+	filename2.Append(_L(":\\Data\\test.tst\n"));
+
+	TInt r = TheFs.Delete(filename1);
+	if(r == KErrNotFound || r == KErrPathNotFound)
+		r = KErrNone;
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+	test.Next(_L("TestRename(): Opening file test.tst"));
+	// we assume that file test.tst exists
+	r = file.Open(TheFs, filename2, EFileWrite);
+	plugin_test(test,KModifierPos,__LINE__,(TText*)Expand("modifier_plugin.cpp"));
+	plugin_test(test,KPreModifierPos,__LINE__,(TText*)Expand("premodifier_plugin.cpp"));
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+	filename1.Append(_L("\n"));
+	test.Next(_L("Renaming file test.tst to renametest.tst"));
+	r = file.Rename(filename1);
+	plugin_test(test,KModifierPos,__LINE__,(TText*)Expand("modifier_plugin.cpp"));
+	plugin_test(test,KPreModifierPos,__LINE__,(TText*)Expand("premodifier_plugin.cpp"));
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+	test.Next(_L("Write to file"));
+	r=file.Write(_L8("Hello World"),11);
+	plugin_test(test,KModifierPos,__LINE__,(TText*)Expand("modifier_plugin.cpp"));
+	plugin_test(test,KPreModifierPos,__LINE__,(TText*)Expand("premodifier_plugin.cpp"));
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+	file.Close();
+
+	test.Next(_L("Renaming file renametest.tst to test.tst"));
+	r = TheFs.Rename(filename1,filename2);
+	plugin_test(test,KModifierPos,__LINE__,(TText*)Expand("modifier_plugin.cpp"));
+	plugin_test(test,KPreModifierPos,__LINE__,(TText*)Expand("premodifier_plugin.cpp"));
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+	test.Next(_L("Closing renamed file renametest.tst"));
+	file.Close();
+	}
+//-------------------------------------------------------------------------------------------------
+//! @SYMTestCaseID				KBASE-t_plugin_v2-1343
+//! @SYMTestType				CT
+//! @SYMTestCaseDesc			Client request to open directory and read entries
+//! @SYMPREQ					REQ7901
+//! @SYMTestPriority			High
+//! @SYMTestActions				TestDir() opens a directory.
+//!								Following this, it sends a reads the directory entry and closes directory
+//!
+//!								1.	Set up path for directory and test files
+//!								2.  Open a directory
+//!								3.	Read directory entry via plugin.
+//!								4.  Close directory.
+//!								5.  Open another directory.
+//!								6.  Read directory entry directly
+//!								7.  Close directory.
+//!								8.  Compare entry read via plugin with entry read directly.
+//!								9.  Open another directory.
+//!								10. Read one entry via plugin
+//!								11. Compare Read One entry with Read Packed.
+//!								12. Close directory.
+//!
+//! @SYMTestExpectedResults		1.	Test path creat ed without any panic.
+//!								2.	Directory open request intercepted by plugin and directory opened without any panic.
+//!								3.	Directory read request intercepted by plugin and read entry completes without any panic.
+//!								4.	Directory close request comletes without any panic.
+//!								5.	Directory open request intercepted by plugin and directory opened without any panic.
+//!								6.	Directory read request bypasses plugin and read entry completes without any panic.
+//!								7.	Directory close request comletes without any panic.
+//!								8.	Enrties read are identical.
+//!								9.	Open another directory.
+//!								10. Read directory entry intercepted by plugin and read entry completes without any panic.
+//!								11. Enrties read are identical.
+//!								12. Directory close request comletes without any panic
+//!
+//! @SYMTestPriority			High
+//! @SYMTestStatus				Implemented
+//-------------------------------------------------------------------------------------------------
+void TestDir()
+	{
+	test.Next(_L("TestDir()"));
+
+	//READ MANY
+
+	// "Via PLugin"
+	RDir dir;
+
+	TBuf<256> filename1;
+	TBuf<256> filename2;
+
+	filename1.Append(gDriveToTest);
+	filename1.Append(_L(":\\"));
+
+	filename2.Append(gDriveToTest);
+	filename2.Append(_L(":\\Data\\"));
+
+	test.Next(_L("Opening directory "));
+
+	//Need to send which filename we want to read to the plugin
+	//This is a hack until there's a proper way of getting the directory filename.
+	test.Next(_L("Open RPlugin connection for KModifierPos"));
+	MyRPlugin rplugin;
+	TInt r = rplugin.Open(TheFs,KModifierPos);
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+	test.Next(_L("Send dir name down to plugin"));
+	typedef TBuf<256> TDirName;
+	TPckg<TDirName> dirname1Pckg(filename1);
+	r = rplugin.DoControl(KPluginSetDirFullName,dirname1Pckg);
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+	rplugin.Close();
+
+	 r = dir.Open(TheFs,filename1,KEntryAttMatchMask);
+	plugin_test(test,KModifierPos,__LINE__,(TText*)Expand("modifier_plugin.cpp"));
+	plugin_test(test,KPreModifierPos,__LINE__,(TText*)Expand("premodifier_plugin.cpp"));
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+	TEntryArray eA;
+	r = dir.Read(eA);
+	if(r==KErrEof) r = KErrNone;
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+	TEntry a = eA[0];
+	RDebug::Print(_L("Filename : %S"),&a.iName);
+
+	test.Next(_L("Closing directory \\Data\\"));
+	dir.Close();
+
+
+
+
+	//Need to send which filename we want to read to the plugin
+	//This is a hack until there's a proper way of getting the directory filename.
+	test.Next(_L("Open RPlugin connection for KModifierPos"));
+	r = rplugin.Open(TheFs,KModifierPos);
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+	test.Next(_L("Send dir name down to plugin"));
+	TPckg<TDirName> dirname2Pckg(filename2);
+	r = rplugin.DoControl(KPluginSetDirFullName,dirname2Pckg);
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+	rplugin.Close();
+
+	test.Next(_L("Opening directory \\Data\\"));
+	r = dir.Open(TheFs,filename2,KEntryAttMatchMask);
+	plugin_test(test,KModifierPos,__LINE__,(TText*)Expand("modifier_plugin.cpp"));
+	plugin_test(test,KPreModifierPos,__LINE__,(TText*)Expand("premodifier_plugin.cpp"));
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+	// "Direct"
+	TEntryArray eA2;
+	r = dir.Read(eA2);
+	if(r==KErrEof) r = KErrNone;
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+	TEntry a2 = eA2[0];
+	RDebug::Print(_L("Filename : %S"),&a2.iName);
+
+	test.Next(_L("Compare plugin and direct read on \\Data\\"));
+	test(a.iName.Compare(a2.iName));
+
+	test.Next(_L("Closing directory \\Data\\"));
+	dir.Close();
+
+
+
+
+
+	// READ ONE
+
+
+	//Need to send which filename we want to read to the plugin
+	//This is a hack until there's a proper way of getting the directory filename.
+	test.Next(_L("Open RPlugin connection for KModifierPos"));
+	r = rplugin.Open(TheFs,KModifierPos);
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+	test.Next(_L("Send dir name down to plugin"));
+	r = rplugin.DoControl(KPluginSetDirFullName,dirname1Pckg);
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+	rplugin.Close();
+
+
+	test.Next(_L("Opening directory "));
+	r = dir.Open(TheFs,filename1,KEntryAttMatchMask);
+	plugin_test(test,KModifierPos,__LINE__,(TText*)Expand("modifier_plugin.cpp"));
+	plugin_test(test,KPreModifierPos,__LINE__,(TText*)Expand("premodifier_plugin.cpp"));
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+	test.Next(_L("Read One entry via plugin - \\"));
+	TEntry oneEntry;
+	r= dir.Read(oneEntry);
+
+	test.Next(_L("Compare Read One entry with Read Packed 1st TEntry"));
+	RDebug::Print(_L("ReadOne Filename : %S"),&oneEntry.iName);
+
+	safe_test(oneEntry.iName.Compare(a.iName),__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+	dir.Close();
+	}
+//-------------------------------------------------------------------------------------------------
+//! @SYMTestCaseID				KBASE-t_plugin_v2-1344
+//! @SYMTestType				CT
+//! @SYMTestCaseDesc			Client request to create and open a new file.
+//! @SYMPREQ					REQ8113
+//! @SYMTestPriority			High
+//! @SYMTestActions				TestCreate() creates and opens a new file.
+//!								Following this, it sends a write request to the file.
+//!
+//!								1.	Set up test file name and path.
+//!								2.  Delete any existing test file.
+//!								3.  Send create request to create and open a new file.
+//!								4.	Write to file.
+//!								5.	Delete file.
+//!								6.  Close test file.
+//!
+//! @SYMTestExpectedResults		1.	Test file created without any panic.
+//!								2.  Any existing test file deleted without any panic.
+//!								2.	Create request intercepted by plugin and completes without any panic.
+//!								3.  Write request comletes without any panic.
+//!								4.	Test file deleted without any panic.
+//!								6.  Test file close without any panic.
+//!
+//! @SYMTestPriority			High
+//! @SYMTestStatus				Implemented
+//-------------------------------------------------------------------------------------------------
+void TestCreate()
+	{
+	RFile file;
+
+	test.Next(_L("Creating file createtest.tst"));
+
+	TBuf<256> filename1;
+
+	//setting up test files
+	filename1.Append(gDriveToTest);
+	filename1.Append(_L(":\\data\\createtest.tst"));
+
+	TInt r = TheFs.Delete(filename1);
+	if(r == KErrNotFound || r == KErrPathNotFound)
+		r = KErrNone;
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+	r = file.Create(TheFs, filename1, EFileWrite);
+	plugin_test(test,KModifierPos,__LINE__,(TText*)Expand("modifier_plugin.cpp"));
+	plugin_test(test,KPreModifierPos,__LINE__,(TText*)Expand("premodifier_plugin.cpp"));
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+	test.Next(_L("Write to file"));
+	r=file.Write(_L8("Hello World"),11);
+	plugin_test(test,KModifierPos,__LINE__,(TText*)Expand("modifier_plugin.cpp"));
+	plugin_test(test,KPreModifierPos,__LINE__,(TText*)Expand("premodifier_plugin.cpp"));
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+	test.Next(_L("Closing created file createtest.tst"));
+	file.Close();
+
+	r = TheFs.Delete(filename1);
+	plugin_test(test,KModifierPos,__LINE__,(TText*)Expand("modifier_plugin.cpp"));
+	plugin_test(test,KPreModifierPos,__LINE__,(TText*)Expand("premodifier_plugin.cpp"));
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+	}
+//-------------------------------------------------------------------------------------------------
+//! @SYMTestCaseID				KBASE-t_plugin_v2-1345
+//! @SYMTestType				CT
+//! @SYMTestCaseDesc			Client request to open a file
+//! @SYMPREQ					REQ8113
+//! @SYMTestPriority			High
+//! @SYMTestActions				TestOpen() opens a file for write access.
+//!								Following this, it sends a write request via a plugin to the fileserver
+//!
+//!								1.	Set up test file name and path.
+//!								2.  Open file for write access.
+//!								3.	Write to file.
+//!								4.  Close test file.
+//!
+//!
+//! @SYMTestExpectedResults		1.	Test files created without any panic.
+//!								2.	Open request intercepted by plugin and completes without any panic.
+//!								3.  Write request comletes without any panic.
+//!								4.	File close without any panic.
+//!
+//! @SYMTestPriority			High
+//! @SYMTestStatus				Implemented
+//-------------------------------------------------------------------------------------------------
+void TestOpen()
+	{
+	RFile file;
+
+	TBuf<256> filename;
+	TBuf8<10> content;
+
+	//setting up test files
+	filename.Append(gDriveToTest);
+	filename.Append(_L(":\\data\\test.tst"));
+	content.Copy(_L8("1234567890"));
+	ReplaceFiles(filename, content,__LINE__);
+
+	test.Next(_L("Opening file test.tst"));
+	// we assume that file test.tst does not exists
+	TInt r = file.Open(TheFs, filename, EFileWrite);
+	plugin_test(test,KModifierPos,__LINE__,(TText*)Expand("modifier_plugin.cpp"));
+	plugin_test(test,KPreModifierPos,__LINE__,(TText*)Expand("premodifier_plugin.cpp"));
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+	test.Next(_L("Write to file test.tst"));
+	r=file.Write(_L8("Hello World"),11);
+	plugin_test(test,KModifierPos,__LINE__,(TText*)Expand("modifier_plugin.cpp"));
+	plugin_test(test,KPreModifierPos,__LINE__,(TText*)Expand("premodifier_plugin.cpp"));
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+	test.Next(_L("Closing created file test.tst"));
+	file.Close();
+	}
+//-------------------------------------------------------------------------------------------------
+//! @SYMTestCaseID				KBASE-t_plugin_v2-1348
+//! @SYMTestType				CT
+//! @SYMTestCaseDesc			Client request to create and open a temporary file.
+//! @SYMPREQ					REQ8113
+//! @SYMTestPriority			High
+//! @SYMTestActions				TestTemp() sends a temp request via a plugin to the fileserver
+//!								Following this, it writes to the file.
+//!
+//!								1.	Set up test path.
+//!								2.  Send temp request to create and open a temporary file.
+//!								3.	Write to file.
+//!								4.  Close test file.
+//!
+//! @SYMTestExpectedResults		1.	Test path created without any panic.
+//!								2.	Temp request intercepted by plugin and completes without any panic.
+//!								3.  Write request comletes without any panic.
+//!								4.	File close without any panic.
+//!
+//! @SYMTestPriority			High
+//! @SYMTestStatus				Implemented
+//-------------------------------------------------------------------------------------------------
+void TestTemp()
+	{
+	RFile file;
+	TFileName fileName;
+
+	TBuf<256> filename1;
+	filename1.Append(gDriveToTest);
+	filename1.Append(_L(":\\data\\"));
+
+	TInt r = file.Temp(TheFs, filename1,fileName, EFileWrite);
+	plugin_test(test,KModifierPos,__LINE__,(TText*)Expand("modifier_plugin.cpp"));
+	plugin_test(test,KPreModifierPos,__LINE__,(TText*)Expand("premodifier_plugin.cpp"));
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+	r=file.Write(_L8("Temp File"),9);
+	plugin_test(test,KModifierPos,__LINE__,(TText*)Expand("modifier_plugin.cpp"));
+	plugin_test(test,KPreModifierPos,__LINE__,(TText*)Expand("premodifier_plugin.cpp"));
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+	file.Close();
+	}
+//-------------------------------------------------------------------------------------------------
+//! @SYMTestCaseID				KBASE-t_plugin_v2-1346
+//! @SYMTestType				CT
+//! @SYMTestCaseDesc			Client request to replace a file
+//! @SYMPREQ					REQ8113
+//! @SYMTestPriority			High
+//! @SYMTestActions				TestReplace() opens a file for writing by creating a new file
+//!								Following this, it sends a write request via a plugin to the fileserver.
+//!                             It also replaces an existing file with another.
+//!
+//!								1.	Set up test file name and path.
+//!								2.  Delete any existing test file.
+//!								3.  Send replace request to create and open a new file for write.
+//!								4.  Write to file.
+//!								5.	Close test file.
+//!								6.	Send replace request to create and open a new file for write.
+//!								7.	Delete test files.
+//!
+//! @SYMTestExpectedResults		1.	Test files created without any panic.
+//!								2.	Any existing file deleted without any panic.
+//!								3.	Replace request intercepted by plugin and completes without any panic.
+//!								4.  Write request comletes without any panic.
+//!								5.	Test file close without any panic.
+//!								5.	Test file deleted without any panic.
+//!
+//! @SYMTestPriority			High
+//! @SYMTestStatus				Implemented
+//-------------------------------------------------------------------------------------------------
+void TestReplace()
+	{
+	RFile file;
+
+	test.Next(_L("Creating file replacetest.tst"));
+
+	TBuf<256> filename1;
+	filename1.Append(gDriveToTest);
+	filename1.Append(_L(":\\data\\replacetest.tst"));
+
+
+	TBuf<256> filename2;
+	filename2.Append(gDriveToTest);
+	filename2.Append(_L(":\\data\\replacetest2.tst"));
+
+
+	TInt r = TheFs.Delete(filename1);
+	if(r == KErrNotFound || r == KErrPathNotFound)
+		r = KErrNone;
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+	r = file.Replace(TheFs, filename1, EFileWrite);
+	plugin_test(test,KModifierPos,__LINE__,(TText*)Expand("modifier_plugin.cpp"));
+	plugin_test(test,KPreModifierPos,__LINE__,(TText*)Expand("premodifier_plugin.cpp"));
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+	test.Next(_L("Write to file"));
+	r=file.Write(_L8("Hello World"),11);
+	plugin_test(test,KModifierPos,__LINE__,(TText*)Expand("modifier_plugin.cpp"));
+	plugin_test(test,KPreModifierPos,__LINE__,(TText*)Expand("premodifier_plugin.cpp"));
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+	test.Next(_L("Closing replaced file replacetest.tst"));
+	file.Close();
+
+	r = TheFs.Replace(filename1,filename2);
+	plugin_test(test,KModifierPos,__LINE__,(TText*)Expand("modifier_plugin.cpp"));
+	plugin_test(test,KPreModifierPos,__LINE__,(TText*)Expand("premodifier_plugin.cpp"));
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+	r = TheFs.Delete(filename1);
+	if(r==KErrNotFound) r = KErrNone;
+	else r = KErrGeneral;
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+	r = TheFs.Delete(filename2);
+	plugin_test(test,KModifierPos,__LINE__,(TText*)Expand("modifier_plugin.cpp"));
+	plugin_test(test,KPreModifierPos,__LINE__,(TText*)Expand("premodifier_plugin.cpp"));
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+	}
+//-------------------------------------------------------------------------------------------------
+//! @SYMTestCaseID				KBASE-t_plugin_v2-1347
+//! @SYMTestType				CT
+//! @SYMTestCaseDesc			Client request to read a section of a file
+//! @SYMPREQ					REQ7902
+//! @SYMTestPriority			High
+//! @SYMTestActions				TestReadFileSection() creates and opens a file for writing.
+//!								Following this, it reads a section of the file by sending a ReadFileSection
+//!								request via a plugin to the fileserver.
+//!
+//!								1.	Set up test file name and path.
+//!								2.  Delete any existing test file.
+//!								3.  Send create request to create and open a test file for write.
+//!								4.  Write to test file.
+//!								5.	Close test file.
+//!								6.	Send Readfilesection request to read a section of the testfile.
+//!								7.	Verify that the correct section was read.
+//!								8.	Delete test files.
+//!
+//! @SYMTestExpectedResults		1.	Test files created without any panic.
+//!								2.	Any existing file deleted without any panic.
+//!								3.	Create request completes without any panic.
+//!								4.  Write request comletes without any panic.
+//!								5.  close request comletes without any panic.
+//!								6.  Readfilesection request intercepted by plugin and completes without any panic.
+//!								7.	Correct file section read.
+//!								8.	Test file deleted without any panic.
+//!
+//! @SYMTestPriority			High
+//! @SYMTestStatus				Implemented
+//-------------------------------------------------------------------------------------------------
+void TestReadFileSection()
+{
+
+	test.Next(_L("Reading a file section enter"));
+
+	RFile file;
+
+	TBuf<256> filename1;
+	filename1.Append(gDriveToTest);
+	filename1.Append(_L(":\\data\\testReadFileSection.tst"));
+
+
+	TInt r = TheFs.Delete(filename1);
+	if(r == KErrNotFound || r == KErrPathNotFound)
+		r = KErrNone;
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+	r = file.Create(TheFs, filename1, EFileWrite);
+	plugin_test(test,KModifierPos,__LINE__,(TText*)Expand("modifier_plugin.cpp"));
+	plugin_test(test,KPreModifierPos,__LINE__,(TText*)Expand("premodifier_plugin.cpp"));
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+	test.Next(_L("Write to file"));
+	r=file.Write(0, _L8("Read File Section"));
+	plugin_test(test,KModifierPos,__LINE__,(TText*)Expand("modifier_plugin.cpp"));
+	plugin_test(test,KPreModifierPos,__LINE__,(TText*)Expand("premodifier_plugin.cpp"));
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+	file.Close();
+
+	TBuf8<64> temp1;
+	temp1.FillZ(64);
+
+	test.Next(_L("ReadFileSection:Enter"));
+	r=TheFs.ReadFileSection(filename1,0,temp1,9);
+	plugin_test(test,KModifierPos,__LINE__,(TText*)Expand("modifier_plugin.cpp"));
+	plugin_test(test,KPreModifierPos,__LINE__,(TText*)Expand("premodifier_plugin.cpp"));
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+	test.Printf(_L("ReadFileSection - read: %s\n"),&temp1);
+	test.Printf(_L("ReadFileSection - temp1.Length()=%d\n"),temp1.Length());
+
+
+	test.Next(_L("ReadFileSection:Exit"));
+	test.Printf(_L("ReadFileSection - read: %s"),temp1.Ptr());
+	TInt compare = (temp1.Length()==9);
+	if(compare) compare = KErrNone;
+	safe_test(compare,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+	compare = (temp1==_L8("Read File")); // This should be .Compare()?
+	if(compare) compare = KErrNone;
+	safe_test(compare,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+	test.Next(_L("Reading a file section complete"));
+
+	test.Next(_L("ReadFileSection:Delete"));
+	r = TheFs.Delete(filename1);
+	if(r == KErrNotFound || r == KErrPathNotFound)
+		r = KErrNone;
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+}
+//-------------------------------------------------------------------------------------------------
+//! @SYMTestCaseID				KBASE-t_plugin_v2-1342
+//! @SYMTestType				CT
+//! @SYMTestCaseDesc			Client request to change and get the size of a file
+//! @SYMPREQ					REQ7901
+//! @SYMTestPriority			High
+//! @SYMTestActions				TestFileSize() creates and opens a file for read.
+//!								Following this, it performs operations on the test file to set and change its size
+//!								request via a plugin to the fileserver.
+//!
+//!								1.	Set up test file name and path.
+//!								2.	Open first test file for read
+//!								3	Retrieve size of test file.
+//!								4	Close first test file
+//!								5	Open second test file for read
+//!								6	Retrieve size of test file
+//!								7   Verify that size of both first and second files are the same
+//!								8	Close second test file
+//!								9.	Open third test file for write
+//!								10	Retrieve size of test file.
+//!								11	Change the size of test file by reducing the size.
+//!								12.	Retrieve new size of test file.
+//!								13.	Verify that new size of file is the same as the size to which the file was changed to.
+//!								14.	Change the size of test file by increasing it.
+//!								16.	Retrieve new size of test file.
+//!								17.	Close third test file
+//!								18.	Verify that new size of file is the same as the size to which the file was changed to.
+
+//!
+//! @SYMTestExpectedResults		1.	Test files created without any panic.
+//!								2.	Test files created without any panic.
+//!								3.	First test file opened for read without any panic
+//!								4.	KErrNone returned and current file size returned directly without any panic
+//!								5.	First file closed with no panic
+//!								6.	Second test file opened for read without any panic
+//!								7.	KErrNone returned and current size of first file returned via  a plug in directly without any panic
+//!								8.	Size of both files are the same.
+//!								9.	Second file closed with no panic
+//!								10.	Third test file opened for read without any panic
+//!								11.	KErrNone returned  and current file size returned directly without any panic
+//!								12.	KErrNone returned and file size changed directly without any panic
+//!								13.	KErrNone returned and current file size returned directly without any panic
+//!								14.	Size of both files are the same.
+//!								15.	KErrNone and current file size changed directly without any panic
+//!								16.	Current file size returned directly without any panic
+//!								17.	Third file closed with no panic
+//!								18.	Size of both files are the same.
+//!
+//! @SYMTestPriority			High
+//! @SYMTestStatus				Implemented
+//-------------------------------------------------------------------------------------------------
+void TestFileSize()
+	{
+	RFile file;
+
+	// Drive thread Direct
+	TBuf<256> filename1;
+	TBuf<256> filename2;
+	TBuf<256> filename3;
+	TBuf8<10> content;
+
+	//setting up test files
+	filename1.Append(gDriveToTest);
+	filename1.Append(_L(":\\data\\test.size.2"));
+	content.Copy(_L8("0987654321"));
+	ReplaceFiles(filename1, content,__LINE__);
+
+	filename2.Append(gDriveToTest);
+	filename2.Append(_L(":\\data\\test.size"));
+	ReplaceFiles(filename2, content,__LINE__);
+
+	filename3.Append(gDriveToTest);
+	filename3.Append(_L(":\\data\\test.setsize"));
+	ReplaceFiles(filename3, content,__LINE__);
+
+	TInt r = file.Open(TheFs, filename1, EFileRead);
+    TInt size=0;
+    r = file.Size(size);
+	plugin_test(test,KModifierPos,__LINE__,(TText*)Expand("modifier_plugin.cpp"));
+	plugin_test(test,KPreModifierPos,__LINE__,(TText*)Expand("premodifier_plugin.cpp"));
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+    file.Close();
+
+    //Via Plugin
+	r = file.Open(TheFs, filename2, EFileRead);
+    TInt psize=0;
+    r = file.Size(psize);
+	plugin_test(test,KModifierPos,__LINE__,(TText*)Expand("modifier_plugin.cpp"));
+	plugin_test(test,KPreModifierPos,__LINE__,(TText*)Expand("premodifier_plugin.cpp"));
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+    file.Close();
+
+    r = psize==size;
+    if(r) r = KErrNone;
+    safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.exe"));
+
+    //Via Plugin
+	r = file.Open(TheFs, filename3, EFileWrite);
+    size=0;
+    r = file.Size(size);
+	plugin_test(test,KModifierPos,__LINE__,(TText*)Expand("modifier_plugin.cpp"));
+	plugin_test(test,KPreModifierPos,__LINE__,(TText*)Expand("premodifier_plugin.cpp"));
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+    r = file.SetSize(size-1);
+	plugin_test(test,KModifierPos,__LINE__,(TText*)Expand("modifier_plugin.cpp"));
+	plugin_test(test,KPreModifierPos,__LINE__,(TText*)Expand("premodifier_plugin.cpp"));
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+    TInt endSize=0;
+    r = file.Size(endSize);
+	plugin_test(test,KModifierPos,__LINE__,(TText*)Expand("modifier_plugin.cpp"));
+	plugin_test(test,KPreModifierPos,__LINE__,(TText*)Expand("premodifier_plugin.cpp"));
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+	r = (endSize==size-1);
+	if(r) r = KErrNone;
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+    r = file.SetSize(endSize+1);
+	plugin_test(test,KModifierPos,__LINE__,(TText*)Expand("modifier_plugin.cpp"));
+	plugin_test(test,KPreModifierPos,__LINE__,(TText*)Expand("premodifier_plugin.cpp"));
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+    r = file.Size(endSize);
+	plugin_test(test,KModifierPos,__LINE__,(TText*)Expand("modifier_plugin.cpp"));
+	plugin_test(test,KPreModifierPos,__LINE__,(TText*)Expand("premodifier_plugin.cpp"));
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+    file.Close();
+
+    r = endSize==size;
+    if(r) r=KErrNone;
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+	}
+//-------------------------------------------------------------------------------------------------
+//! @SYMTestCaseID				KBASE-t_plugin_v2-1340
+//! @SYMTestType				CT
+//! @SYMTestCaseDesc			Client request to lock a section of a file
+//! @SYMPREQ					REQ7902
+//! @SYMTestPriority			High
+//! @SYMTestActions				TestFileLock() creates and opens a file
+//!								Following this, it performs operations on the test file to lock and unlock the file
+//!								by sending request via a plugin to the fileserver.
+//!
+//!								1.	Set up test file name and path.
+//!								2.	Open first test file for write
+//!								3.	Open same test file read
+//!								4.	Lock test file open for write.
+//!								5.	Read data from test file open for read
+//!								6.	Unlock test file opened for write.
+//!								7.	Close opened files
+//!								8.	Open second test file for write
+//!								9.	Open same test file read
+//!								10.	Lock test file open for write.
+//!								11.	Read data from test file open for read
+//!								12.	Unlock test file opened for write.
+//!								13.	Close opened files
+//!
+//! @SYMTestExpectedResults		1.	Test files created without any panic.
+//!								2   First test file opened for write without any panic
+//!								3.	First test file opened for read without any panic
+//!								4.	First test file is locked via plug-In without any panic
+//!								5.	KErrLocked is returned from read request
+//!								6.	Test file opened for write is unlocked without any panic
+//!								7.	Second test file opened for write without any panic
+//!								8.	Files closed with no panic
+//!								9.	Second test file opened for read without any panic
+//!								10.	Secondt test files is locked directly without any panic
+//!								11.	KErrLocked is returned from read request
+//!								12.	Test file opened for write is unlocked without any panic
+//!								13.	Files closed with no panic
+//!
+//!
+//! @SYMTestPriority			High
+//! @SYMTestStatus				Implemented
+//-------------------------------------------------------------------------------------------------
+void TestFileLock()
+	{
+
+	//Lock Via Plugin
+	RFile file;
+    TBuf8<64> wbuffer;
+    wbuffer.Copy(_L8("TestTestTest"));
+
+	// Drive thread Direct
+	TBuf<256> filename1;
+	TBuf<256> filename2;
+	TBuf8<10> content;
+
+	//setting up test files
+	filename1.Append(gDriveToTest);
+	filename1.Append(_L(":\\data\\test.lock"));
+	content.Copy(_L8("0987654321"));
+	ReplaceFiles(filename1, content,__LINE__);
+
+
+	filename2.Append(gDriveToTest);
+	filename2.Append(_L(":\\data\\test.tst"));
+	content.Copy(_L8("1234567890"));
+	ReplaceFiles(filename2, content,__LINE__);
+
+
+    test.Next(_L("Opening file test.lock"));
+
+    TInt r = file.Open(TheFs, filename1, EFileShareReadersOrWriters | EFileWrite);
+	plugin_test(test,KModifierPos,__LINE__,(TText*)Expand("modifier_plugin.cpp"));
+	plugin_test(test,KPreModifierPos,__LINE__,(TText*)Expand("premodifier_plugin.cpp"));
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+	RFile file2;
+	r = file2.Open(TheFs, filename1, EFileShareReadersOrWriters | EFileRead );
+	plugin_test(test,KModifierPos,__LINE__,(TText*)Expand("modifier_plugin.cpp"));
+	plugin_test(test,KPreModifierPos,__LINE__,(TText*)Expand("premodifier_plugin.cpp"));
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+	TBuf8<64> lockbuffer;
+	r = file.Lock(0,2); // This will lock via plugin call to RFilePlugin::Lock
+	plugin_test(test,KModifierPos,__LINE__,(TText*)Expand("modifier_plugin.cpp"));
+	plugin_test(test,KPreModifierPos,__LINE__,(TText*)Expand("premodifier_plugin.cpp"));
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+	r = file2.Read(lockbuffer);
+	// Test & Ensure KErrLocked returned.
+	if(r==KErrLocked) r = KErrNone;
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+	file2.Close();
+
+	//Unlock file (was locked in plugin)
+	r = file.UnLock(0,2);
+	plugin_test(test,KModifierPos,__LINE__,(TText*)Expand("modifier_plugin.cpp"));
+	plugin_test(test,KPreModifierPos,__LINE__,(TText*)Expand("premodifier_plugin.cpp"));
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+	
+	file.Close();
+
+	//Lock via RFile
+    wbuffer.Copy(_L8("TestTestTest"));
+    test.Next(_L("TestFileLock(): Opening file test.tst"));
+    // we assume that file test.tst still exists
+    r = file.Open(TheFs, filename2, EFileShareReadersOrWriters | EFileWrite);
+	plugin_test(test,KModifierPos,__LINE__,(TText*)Expand("modifier_plugin.cpp"));
+	plugin_test(test,KPreModifierPos,__LINE__,(TText*)Expand("premodifier_plugin.cpp"));
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+	r = file2.Open(TheFs, filename2, EFileShareReadersOrWriters | EFileRead );
+	plugin_test(test,KModifierPos,__LINE__,(TText*)Expand("modifier_plugin.cpp"));
+	plugin_test(test,KPreModifierPos,__LINE__,(TText*)Expand("premodifier_plugin.cpp"));
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+	r = file.Lock(0,2); // This will lock via drive thread directly; RFile::Lock
+	plugin_test(test,KModifierPos,__LINE__,(TText*)Expand("modifier_plugin.cpp"));
+	plugin_test(test,KPreModifierPos,__LINE__,(TText*)Expand("premodifier_plugin.cpp"));
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+	r = file2.Read(lockbuffer);
+
+	r = (r==KErrLocked);
+	if(r) r = KErrNone;
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+	file2.Close();
+
+	//Unlock file (was locked in plugin)
+	r = file.UnLock(0,2);
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+	file.Close();
+
+	}
+//-------------------------------------------------------------------------------------------------
+//! @SYMTestCaseID				KBASE-t_plugin_v2-1341
+//! @SYMTestType				CT
+//! @SYMTestCaseDesc			Client request to get current file position
+//! @SYMPREQ					REQ7901
+//! @SYMTestPriority			High
+//! @SYMTestActions				TestFileSeek() creates and opens a file for writing.
+//!								Following this, it sends a request to get the current file position
+//!
+//!
+//!								1.	Set up test file name and path.
+//!								2.  Open first test file for read.
+//!								3.  Send seek request to retrieve current file position of using a zero offset.
+//!								4.  Close test file.
+//!								5.	Open second test file for read
+//!								6.	Send seek request to retrieve current file position of using a zero offset.
+//!								7.  Close test file.
+//!							    8.  Verify that current file position for both files are the same.
+//!
+//! @SYMTestExpectedResults		1.	Test files created without any panic.
+//!								2.	Test file opened for read without any panic.
+//!								3.	Seek request intercepted by plugin and completes without any panic.
+//!								4.  Close request completes without any panic.
+//!								5.  Test file opened for read without any panic.
+//!								6.  Seek request intercepted by plugin and completes without any panic.
+//!								7.	Close request completes without any panic.
+//!								8.	Current file position for both files are the same.
+//!
+//! @SYMTestPriority			High
+//! @SYMTestStatus				Implemented
+//-------------------------------------------------------------------------------------------------
+void TestFileSeek()
+	{
+	RFile file;
+
+	// Drive thread Direct
+	TBuf<256> filename1;
+	TBuf<256> filename2;
+	TBuf8<10> content;
+
+	//setting up test files
+	filename1.Append(gDriveToTest);
+	filename1.Append(_L(":\\Data\\test.seek"));
+	content.Copy(_L8("0987654321"));
+	ReplaceFiles(filename1, content,__LINE__);
+
+
+	filename2.Append(gDriveToTest);
+	filename2.Append(_L(":\\data\\test.tst"));
+	content.Copy(_L8("1234567890"));
+	ReplaceFiles(filename2, content,__LINE__);
+
+	// Drive thread
+	TInt r = file.Open(TheFs,filename2, EFileRead);
+    TInt pos=0;
+    TSeek mode = ESeekCurrent;
+    r = file.Seek(mode,pos);
+	plugin_test(test,KModifierPos,__LINE__,(TText*)Expand("modifier_plugin.cpp"));
+	plugin_test(test,KPreModifierPos,__LINE__,(TText*)Expand("premodifier_plugin.cpp"));
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+    file.Close();
+
+    //Via Plugin
+	r = file.Open(TheFs, filename1, EFileRead);
+    TInt pos2=0;
+    mode = ESeekCurrent;
+    r = file.Seek(mode,pos2);
+	plugin_test(test,KModifierPos,__LINE__,(TText*)Expand("modifier_plugin.cpp"));
+	plugin_test(test,KPreModifierPos,__LINE__,(TText*)Expand("premodifier_plugin.cpp"));
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+    file.Close();
+
+    r = (pos == pos2);
+    if(r) r = KErrNone;
+    safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+	}
+
+//-------------------------------------------------------------------------------------------------
+//! @SYMTestCaseID				KBASE-t_plugin_v2-1349
+//! @SYMTestType				CT
+//! @SYMTestCaseDesc			Client request to get and set both the attributes for a file or directory
+//! @SYMPREQ					REQ7901
+//! @SYMTestPriority			High
+//! @SYMTestActions				TestFileEntry() sets up a test file
+//!								Following this, it perfoms operations on the file and direct to get and set attributes
+//!
+//!
+//!								1.	Set up test file name and path.
+//!								2.	Send get entry request for test file
+//!								3.	Set new date and time
+//!								4.	Send set entry request to test file using new data and time
+//!								5.	Send get entry request for test file
+//!
+//!
+//! @SYMTestExpectedResults		1.	Test files created without any panic.
+//!								2.	KErrNone returned and get entry request completes via plug in without any panic
+//!								3.	Date and time set without any panic
+//!								4.	KErrNone returned and set entry request completes via plug in without any panic
+//!								5	KErrNone returned and get entry request completes via plug in without any panic
+//!
+//! @SYMTestPriority			High
+//! @SYMTestStatus				Implemented
+//-------------------------------------------------------------------------------------------------
+void TestEntry()
+	{
+	TEntry entry;
+
+	//Drive thread Direct
+	TBuf<256> filename1;
+	TBuf8<10> content;
+
+	//setting up test files
+	filename1.Append(gDriveToTest);
+	filename1.Append(_L(":\\data\\test.size"));
+	content.Copy(_L8("0987654321"));
+	ReplaceFiles(filename1, content,__LINE__);
+
+	TInt r = TheFs.Entry(filename1, entry);
+	plugin_test(test,KModifierPos,__LINE__,(TText*)Expand("modifier_plugin.cpp"));
+	plugin_test(test,KPreModifierPos,__LINE__,(TText*)Expand("premodifier_plugin.cpp"));
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+    test.Next(_L("Test SetEntry - Set to Read Only"));
+	TDateTime dateTime(2008,EMay,27,15,35,0,0);
+	TTime time(dateTime);
+	r=TheFs.SetEntry(filename1,time,KEntryAttReadOnly,KEntryAttArchive);
+	plugin_test(test,KModifierPos,__LINE__,(TText*)Expand("modifier_plugin.cpp"));
+	plugin_test(test,KPreModifierPos,__LINE__,(TText*)Expand("premodifier_plugin.cpp"));
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+	TEntry entry1;
+	r = TheFs.Entry(filename1, entry1);
+	plugin_test(test,KModifierPos,__LINE__,(TText*)Expand("modifier_plugin.cpp"));
+	plugin_test(test,KPreModifierPos,__LINE__,(TText*)Expand("premodifier_plugin.cpp"));
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+	r = entry1.iModified == dateTime;
+	if(r) r = KErrNone;
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+	r = (entry1.iAtt == ((entry.iAtt &~ KEntryAttArchive) | KEntryAttReadOnly));
+	if(r) r = KErrNone;
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+    test.Next(_L("Test SetEntry - Remove Read Only attribute and compare"));
+	r=TheFs.SetEntry(filename1,time,0,KEntryAttReadOnly);
+	plugin_test(test,KModifierPos,__LINE__,(TText*)Expand("modifier_plugin.cpp"));
+	plugin_test(test,KPreModifierPos,__LINE__,(TText*)Expand("premodifier_plugin.cpp"));
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+	r = TheFs.Entry(filename1, entry1);
+	plugin_test(test,KModifierPos,__LINE__,(TText*)Expand("modifier_plugin.cpp"));
+	plugin_test(test,KPreModifierPos,__LINE__,(TText*)Expand("premodifier_plugin.cpp"));
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+	r = entry1.iModified == dateTime;
+	if(r) r = KErrNone;
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+	r = (entry1.iAtt == (entry.iAtt &~ KEntryAttArchive));
+	if(r) r = KErrNone;
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+	}
+
+//-------------------------------------------------------------------------------------------------
+//! @SYMTestCaseID				KBASE-t_plugin_v2-1352
+//! @SYMTestType				CT
+//! @SYMTestCaseDesc			Testing various negative scenarios using lock ,read and close
+//! @SYMPREQ					REQ8114
+//! @SYMTestPriority			High
+//! @SYMTestActions				TestComLock() sets up test files
+//!								Following this, it perfoms lock, read and close operations the file via
+//!								a  plugin
+//!
+//!
+//! @SYMTestExpectedResults		Operations complete without any panic
+//!
+//! @SYMTestPriority			High
+//! @SYMTestStatus				Implemented
+//-------------------------------------------------------------------------------------------------
+void TestComLock()
+	{
+	//Lock Via Plugin
+	RFile file;
+	RFile file2;
+    TBuf8<64> wbuffer;
+	TBuf<256> filename1;
+	TBuf<256> filename2;
+	TBuf8<10> content;
+
+    wbuffer.Copy(_L8("TestLockRead"));
+
+	//setting up test files
+	filename1.Append(gDriveToTest);
+	filename1.Append(_L(":\\data\\test.lockread"));
+	content.Copy(_L8("0987654321"));
+	ReplaceFiles(filename1, content,__LINE__);
+
+	filename2.Append(gDriveToTest);
+	filename2.Append(_L(":\\data\\test.lockclose"));
+	content.Copy(_L8("1234567890"));
+	ReplaceFiles(filename2, content,__LINE__);
+
+   	// Lock and post intercept read
+	test.Next(_L("Opening file test.lockread"));
+
+	TInt r = file2.Open(TheFs, filename1, EFileShareReadersOrWriters | EFileWrite );
+	plugin_test(test,KModifierPos,__LINE__,(TText*)Expand("modifier_plugin.cpp"));
+	plugin_test(test,KPreModifierPos,__LINE__,(TText*)Expand("premodifier_plugin.cpp"));
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+	r = file.Open(TheFs, filename1, EFileShareReadersOrWriters | EFileRead );
+	plugin_test(test,KModifierPos,__LINE__,(TText*)Expand("modifier_plugin.cpp"));
+	plugin_test(test,KPreModifierPos,__LINE__,(TText*)Expand("premodifier_plugin.cpp"));
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+	//This will lock via plugin call to RFilePlugin::Lock and request a Read from post-interception
+	r = file.Lock(0,2);
+	plugin_test(test,KModifierPos,__LINE__,(TText*)Expand("modifier_plugin.cpp"));
+	plugin_test(test,KPreModifierPos,__LINE__,(TText*)Expand("premodifier_plugin.cpp"));
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+	file2.Close();
+
+	//Unlock file (was locked in plugin)
+	r = file.UnLock(0,2);
+	plugin_test(test,KModifierPos,__LINE__,(TText*)Expand("modifier_plugin.cpp"));
+	plugin_test(test,KPreModifierPos,__LINE__,(TText*)Expand("premodifier_plugin.cpp"));
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+	file.Close();
+
+	// Lock and post intercept close
+	test.Next(_L("Opening file test.lockclose"));
+
+	r = file2.Open(TheFs, filename2, EFileShareReadersOrWriters | EFileWrite );
+	plugin_test(test,KModifierPos,__LINE__,(TText*)Expand("modifier_plugin.cpp"));
+	plugin_test(test,KPreModifierPos,__LINE__,(TText*)Expand("premodifier_plugin.cpp"));
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+	 r = file.Open(TheFs, filename2, EFileShareReadersOrWriters | EFileRead );
+	plugin_test(test,KModifierPos,__LINE__,(TText*)Expand("modifier_plugin.cpp"));
+	plugin_test(test,KPreModifierPos,__LINE__,(TText*)Expand("premodifier_plugin.cpp"));
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+	//This will lock via plugin call to RFilePlugin::Lock and request a close from post-interception
+	r = file.Lock(0,2);
+	plugin_test(test,KModifierPos,__LINE__,(TText*)Expand("modifier_plugin.cpp"));
+	plugin_test(test,KPreModifierPos,__LINE__,(TText*)Expand("premodifier_plugin.cpp"));
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+	file2.Close();
+	//Unlock file (was locked in plugin)
+	r= file.UnLock(0,2);
+	plugin_test(test,KModifierPos,__LINE__,(TText*)Expand("modifier_plugin.cpp"));
+	plugin_test(test,KPreModifierPos,__LINE__,(TText*)Expand("premodifier_plugin.cpp"));
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+	file.Close();
+	}
+
+//-------------------------------------------------------------------------------------------------
+//! @SYMTestCaseID				KBASE-t_plugin_v2-1351
+//! @SYMTestType				CT
+//! @SYMTestCaseDesc			Testing various negative scenarios using read, readfilesection and size
+//! @SYMPREQ					REQ7902
+//! @SYMTestPriority			High
+//! @SYMTestActions				TestComReadFileSection() sets up a test file
+//!								Following this, it perfoms read request which is intercepted by a plugin
+//!			                    and replaced by a readfilesection request
+//!
+//! @SYMTestExpectedResults	    Operations complete without any panic
+//!
+//! @SYMTestPriority			High
+//! @SYMTestStatus				Implemented
+//-------------------------------------------------------------------------------------------------
+void TestComReadFileSection()
+	{
+	RFile file;
+	TBuf8<4> narrow_buffer;
+	narrow_buffer.FillZ(4);
+	TBuf16<4> wide_buffer;
+	wide_buffer.FillZ(4);
+	TBuf<256> filename;
+	TBuf8<10> content;
+
+	//setting up test files
+	filename.Append(gDriveToTest);
+	filename.Append(_L(":\\data\\test.readfile"));
+	content.Copy(_L8("1234567890"));
+	ReplaceFiles(filename, content,__LINE__);
+
+
+	//opening test file
+	TInt r = file.Open(TheFs,filename, EFileRead);
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+	test.Next(_L("Reading from a file via a plugin using CFsPlugin::FileRead but issuing a ReadFileSection request"));
+	r = file.Read(narrow_buffer); // -> returns data from pos 0 to 3
+	plugin_test(test,KModifierPos,__LINE__,(TText*)Expand("modifier_plugin.cpp"));
+	plugin_test(test,KPreModifierPos,__LINE__,(TText*)Expand("premodifier_plugin.cpp"));
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+	wide_buffer.Copy(narrow_buffer);
+	RDebug::Print(_L("read: %S\n"), &wide_buffer);
+	TInt size=0;
+	r = file.Size(size);
+	plugin_test(test,KModifierPos,__LINE__,(TText*)Expand("modifier_plugin.cpp"));
+	plugin_test(test,KPreModifierPos,__LINE__,(TText*)Expand("premodifier_plugin.cpp"));
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+	RDebug::Print(_L("RFile::size = %d"),size);
+
+	test.Next(_L("Reading from a file via a plugin using CFsPlugin::FileRead but issuing a ReadFileSection request complete"));
+	file.Close();
+	}
+
+
+
+void DismountAndUnloadPlugins()
+	{
+	test.Next(_L("Un-Loading Observer plugin"));
+	TInt r = TheFs.DismountPlugin(KObserverPluginName);
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+	r = TheFs.RemovePlugin(KObserverPluginName);
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+	test.Next(_L("Un-Loading Modifier plugin"));
+	r = TheFs.DismountPlugin(KModifierPluginName);
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+	r = TheFs.RemovePlugin(KModifierPluginName);
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+	test.Next(_L("Un-Loading Pre-Modifier plugin"));
+	r = TheFs.DismountPlugin(KPreModifierPluginName);
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+	r = TheFs.RemovePlugin(KPreModifierPluginName);
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+	}
+//-------------------------------------------------------------------------------------------------
+//! @SYMTestCaseID				KBASE-t_plugin_v2-1357
+//! @SYMTestType				CT
+//! @SYMTestCaseDesc			Testing plugin interception on certain drives
+//! @SYMPREQ					REQ8109
+//! @SYMTestPriority			High
+//! @SYMTestActions				LoadPluginsForSpecificDriveTests() mounts three plugins and send request down the plugins
+//!
+//!								1.	Add and mount plugins.
+//!								2.	Send replace and  open request.
+//!								3.	close test files
+//!								4.	Dismount plugins.
+//!
+//! @SYMTestExpectedResults	    1.  Plugin added and mounted without any panic.
+//!								2.  Requests intercepted by plugins.
+//!								3.	Test file closed with no panic.
+//!								4.	Plugin dismount without any panic.
+//!
+//! @SYMTestPriority			High
+//! @SYMTestStatus				Implemented
+//-------------------------------------------------------------------------------------------------
+void LoadPluginsForSpecificDriveTests()
+	{
+	TInt r = KErrNone;
+
+	//Add Plugins for specific drive.
+	test.Next(_L("Loading DriveC plugin"));
+	r = TheFs.AddPlugin(KDriveCPluginFileName);
+	if (r == KErrAlreadyExists) r = KErrNone;
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+	test.Next(_L("Mounting DriveC plugin on a different drive 25 (Z) : should return -5 KErrNotSupported"));
+	r = TheFs.MountPlugin(KDriveCPluginName,25);
+	test(r==KErrNotSupported);
+
+	test.Next(_L("Mounting DriveC plugin on drive 2 (C)"));
+	r = TheFs.MountPlugin(KDriveCPluginName,2);
+	if (r == KErrInUse) r = KErrNone;
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+
+	test.Next(_L("Loading DriveZ plugin"));
+	r = TheFs.AddPlugin(KDriveZPluginFileName);
+	if (r == KErrAlreadyExists) r = KErrNone;
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+
+	test.Next(_L("Mounting DriveZ plugin on drive (Z)"));
+	r = TheFs.MountPlugin(KDriveZPluginName,KPluginMountDriveZ);
+	if (r == KErrInUse) r = KErrNone;
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+	test.Next(_L("Loading AllSupportedDrives plugin"));
+	r = TheFs.AddPlugin(KAllSupportedDrivesPluginFileName);
+	if (r == KErrAlreadyExists) r = KErrNone;
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+
+	test.Next(_L("Mounting AllSupportedDrives plugin on all supported drives"));
+	r = TheFs.MountPlugin(KAllSupportedDrivesPluginName);
+	if (r == KErrInUse) r = KErrNone;
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+
+	#ifdef __WINS__
+		RFile file;
+		r = file.Replace(TheFs,_L("x:\\drivexplugin.txt"),EFileWrite);
+		safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+		file.Close();
+
+		r = file.Open(TheFs,_L("z:\\TEST\\clean.txt"),EFileRead);
+		//if this fails, did you forget to do a \f32test\group\wintest ?
+		plugin_test(test,KDriveZPos,__LINE__,(TText*)Expand("drivez_plugin.cpp"));
+		safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp")); //if this fails, did you forget to do a \f32test\group\wintest ?
+		file.Close(); 
+
+		r = file.Replace(TheFs,_L("c:\\drivecplugin.txt"),EFileWrite);
+		plugin_test(test,KDriveCPos,__LINE__,(TText*)Expand("drivec_plugin.cpp"));
+		safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+		file.Close();
+
+	#endif
+
+	r = TheFs.DismountPlugin(KAllSupportedDrivesPluginName);
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+	r = TheFs.RemovePlugin(KAllSupportedDrivesPluginName);
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+	r = TheFs.DismountPlugin(KDriveZPluginName,25);
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+	r = TheFs.RemovePlugin(KDriveZPluginName);
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+	r = TheFs.DismountPlugin(KDriveCPluginName,2);
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+	r = TheFs.RemovePlugin(KDriveCPluginName);
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+	}
+
+//-------------------------------------------------------------------------------------------------
+//! @SYMTestCaseID				KBASE-t_plugin_v2-1357
+//! @SYMTestType				CT
+//! @SYMTestCaseDesc			Testing unremovable plugins
+//! @SYMPREQ					REQ8794
+//! @SYMTestPriority			High
+//! @SYMTestActions				LoadUnremovablePluginAndTest() mounts a unremovable plugin and attempts to
+//!                             dismounts it
+//!
+//!								1.	Add and mount an unremovale plugin.
+//!								2.	Attempt to dismount plugin.
+//!								3.	Make plugin removable.
+//!								4.	Attempt to dismount plugin.
+//!
+//! @SYMTestExpectedResults	    1.  Unremovale plugin added and mounted without any panic.
+//!								2.  KErrAccessDenied returned and plugin does not dismount.
+//!								3.	KErrNone returned
+//!								4.	Plugin dismount without any panic.
+
+//! @SYMTestPriority			High
+//! @SYMTestStatus				Implemented
+//-------------------------------------------------------------------------------------------------
+void LoadUnremovablePluginAndTest()
+	{
+	TInt r = KErrNone;
+
+	//Add Unremovable Plugin.
+	test.Next(_L("Loading Unremovable plugin"));
+	r = TheFs.AddPlugin(KUnremovablePluginFileName);
+	if (r == KErrAlreadyExists) r = KErrNone;
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+	//Mount
+	test.Next(_L("Mounting Unremovable Plugin"));
+	r = TheFs.MountPlugin(KUnremovablePluginName);
+	if (r == KErrInUse) r = KErrNone;
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+	//Attempt to dismount this plugin
+	//It's setup such that it is intercepting EFsDismountPlugin
+	//and returns KErrAccessDenied.
+	//Mount
+	test.Next(_L("Attempting to dismount Unremovable Plugin"));
+	r = TheFs.DismountPlugin(KUnremovablePluginName);
+	r = (r==KErrPermissionDenied);
+	if(r)
+		{
+		r = KErrNone;
+		}
+	else
+		{
+		r = KErrGeneral;
+		}
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+	MyRPlugin rplugin;
+	TPckg<TBool> removablePckg(ETrue);
+	test.Next(_L("Open RPlugin connection for UnremovablePlugin"));
+	r = rplugin.Open(TheFs,KUnremovablePos);
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+	test.Next(_L("Set removable to true"));
+	r = rplugin.DoControl(KPluginSetRemovable,removablePckg);
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+	rplugin.Close();
+
+	//Attempt to dismount this plugin
+	//Should now work.
+	test.Next(_L("Dismounting Unremovable Plugin"));
+	r = TheFs.DismountPlugin(KUnremovablePluginName);
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+	test.Next(_L("Removing Unremovable Plugin"));
+	r = TheFs.RemovePlugin(KUnremovablePluginName);
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+	}
+
+//-------------------------------------------------------------------------------------------------
+//! @SYMTestCaseID				KBASE-t_plugin_v2-1353
+//! @SYMTestType				CT
+//! @SYMTestCaseDesc			Testing that plug-ins can perform file reads and writes regardless of the permissions a file is open with.
+//!
+//! @SYMPREQ					REQ8114
+//! @SYMTestPriority			High
+//! @SYMTestActions				LoadExclusiveAccessPluginAndTest() mounts a plugin and performs operations on files
+//!								open in exclusive access mode.
+//!
+//!								1.	Add and mount plugin.
+//!								2.	Replace a file and open it in exclusive access mode.
+//!								3.	Send a read request down.
+//!								4.	Send a write request down.
+//!								5.	Verify data sent down.
+//!								6.	Close test file.
+//!								7.	Dismount plugin.
+//!
+//! @SYMTestExpectedResults	    1.  Plugin added and mounted without any panic.
+//!								2.  Request intercepted by plugin test file opened in exclisive access mode
+//!								3.	Read request completes and KErrNone returned.
+//!								4.	Write request completes and KErrNone returned.
+//!								5.  Correct data returned.
+//!								6.	Test file closed without any panic.
+//!								7.	Plugin dismount without any panic.
+//!
+//!
+//! @SYMTestPriority			High
+//! @SYMTestStatus				Implemented
+//-------------------------------------------------------------------------------------------------
+void LoadExclusiveAccessPluginAndTest()
+	{
+	TInt r = KErrNone;
+
+	//Add Plugins for specific drive.
+	test.Next(_L("Loading Exclusive Access plugin"));
+	r = TheFs.AddPlugin(KExclusiveAccessPluginFileName);
+	if (r == KErrAlreadyExists) r = KErrNone;
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+	//Mount
+	test.Next(_L("Mounting Exclusive Access Plugin"));
+	r = TheFs.MountPlugin(KExclusiveAccessPluginName);
+	if (r == KErrInUse) r = KErrNone;
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+	TBuf<256> filename;
+	filename.Append(gDriveToTest);
+	filename.Append(_L(":\\exclusiveaccess.file"));
+
+	test.Next(_L("Replacing file and opening it in ReadOnly mode"));
+	test.Printf(_L("Filename : %s\n"), &filename);
+
+	//Replace a file and open it in exclusive access mode.
+	RFile file;
+	r = file.Replace(TheFs,filename, EFsFileRead | EFsFileWrite | EFileShareExclusive);
+	plugin_test(test,KExclusiveAccessPos,__LINE__,(TText*)Expand("exclusiveaccess_plugin.cpp"));
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+	//Try to send a read request down.
+	TBuf8<256> rdata;
+	r = file.Read(rdata);
+	plugin_test(test,KExclusiveAccessPos,__LINE__,(TText*)Expand("exclusiveaccess_plugin.cpp"));
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+	_LIT8(KData,"0123456789");
+	TPtrC8 wdata(KData());
+
+	//Try to send a write request down.
+	r = file.Write(wdata);
+	plugin_test(test,KExclusiveAccessPos,__LINE__,(TText*)Expand("exclusiveaccess_plugin.cpp"));
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+	//We need a way to determine whether the plugin did actually write anything.
+	//Just read the data back and compare?
+	r = file.Read(rdata);
+	plugin_test(test,KExclusiveAccessPos,__LINE__,(TText*)Expand("exclusiveaccess_plugin.cpp"));
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp")); //read should be ok
+	safe_test(rdata.Compare(wdata),__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+	file.Close();
+
+	test.Next(_L("Un-Mounting ExclusiveAccess plugin"));
+	r = TheFs.DismountPlugin(KExclusiveAccessPluginName);
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+	test.Next(_L("Removing ExclusiveAccess plugin"));
+	r = TheFs.RemovePlugin(KExclusiveAccessPluginName);
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+	}
+//-------------------------------------------------------------------------------------------------
+//! @SYMTestCaseID				KBASE-t_plugin_v2-1355
+//! @SYMTestType				CT
+//! @SYMTestCaseDesc			Testing various scenarios using write, replace, read, Entry and Dir
+//!
+//! @SYMPREQ					REQ8110
+//! @SYMTestPriority			High
+//! @SYMTestActions				LoadCombinationPluginAndTest() mounts two plugins and performs operations on files and directories
+//!
+//!
+//!
+//! @SYMTestExpectedResults	    Operations complete without any panic
+//!
+//!
+//! @SYMTestPriority			High
+//! @SYMTestStatus				Implemented
+//-------------------------------------------------------------------------------------------------
+void LoadCombinationPluginAndTest()
+	{
+	TInt r = KErrNone;
+	RFile file;
+	TBuf<256> filename1;
+	TBuf<256> filename2;
+	TBuf<256> filename3;
+	TBuf<256> filename4;
+	TBuf<256> filename6;
+	TBuf<256> filename7;
+	TBuf<256> filename8;
+	TBuf<256> dirname1;
+	TBuf<256> dirname2;
+	TBuf<256> dirname3;
+	TBuf8<10> content;
+	TBuf8<64> wbuffer;
+
+	test.Next(_L("Loading Combinational2 plugin"));
+	r = TheFs.AddPlugin(KCombinational2PluginFileName);
+	if (r == KErrAlreadyExists) r = KErrNone;
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+	test.Next(_L("Mounting Combinational2 plugin"));
+	r = TheFs.MountPlugin(KCombinational2PluginName);
+	if (r == KErrInUse) r = KErrNone;
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+	// Load Plugins
+	test.Next(_L("Loading Combinational plugin"));
+
+	r = TheFs.AddPlugin(KCombinationalPluginFileName);
+	if (r == KErrAlreadyExists) r = KErrNone;
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+	test.Next(_L("Mounting Combinational plugin"));
+	r = TheFs.MountPlugin(KCombinationalPluginName);
+	if (r == KErrInUse) r = KErrNone;
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+	//Use RPlugin to communicate to the plugins which drive they should be
+	//testing on.
+	//This is needed because sometimes a plugin may open a different file etc and will need
+	//to know which drive it should be testing on.
+
+	test.Next(_L("Open RPlugin connection for CombinationalPlugin"));
+	MyRPlugin rplugin;
+	r = rplugin.Open(TheFs,KCombinationalPos);
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+	TPckg<TChar> drivePckg(gDriveToTest);
+
+	test.Next(_L("Send drive letter to test down to plugin"));
+	r = rplugin.DoControl(KPluginSetDrive,drivePckg);
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+	rplugin.Close();
+
+
+
+	//setting up test files
+	filename1.Append(gDriveToTest);
+	filename1.Append(_L(":\\combi.txt"));
+	content.Copy(_L8("combi0"));
+	ReplaceFiles(filename1, content,__LINE__);
+
+	filename2.Append(gDriveToTest);
+	filename2.Append(_L(":\\combi1.txt"));
+	content.Copy(_L8("combi1"));
+	ReplaceFiles(filename2, content,__LINE__);
+
+	filename3.Append(gDriveToTest);
+	filename3.Append(_L(":\\combi2.txt"));
+	content.Copy(_L8("combi2"));
+	ReplaceFiles(filename3, content,__LINE__);
+
+	filename4.Append(gDriveToTest);
+	filename4.Append(_L(":\\combiReplace.txt"));
+
+	//File Tests
+
+	r = file.Open(TheFs, filename1, EFileWrite);
+	plugin_test(test,KCombinationalPos,__LINE__,(TText*)Expand("combinational_plugin.cpp"));
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+	wbuffer.FillZ(64);
+	wbuffer.Copy(_L8("CombiCombiCombi"));
+	r = file.Write(2,wbuffer);
+	plugin_test(test,KCombinationalPos,__LINE__,(TText*)Expand("combinational_plugin.cpp"));
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+	file.Close();
+
+	RFile file2;
+
+	r = file2.Replace(TheFs,filename4,EFileWrite);
+	plugin_test(test,KCombinationalPos,__LINE__,(TText*)Expand("combinational_plugin.cpp"));
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+	file2.Close(); //combiReplace
+
+	TEntry entry;
+	r = TheFs.Entry(filename1,entry);
+	plugin_test(test,KCombinationalPos,__LINE__,(TText*)Expand("combinational_plugin.cpp"));
+	plugin_test(test,KCombinational2Pos,__LINE__,(TText*)Expand("combinational2_plugin.cpp"));
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+	TEntry entry2;
+	r = TheFs.Entry(filename4,entry2);
+	plugin_test(test,KCombinationalPos,__LINE__,(TText*)Expand("combinational_plugin.cpp"));
+	plugin_test(test,KCombinational2Pos,__LINE__,(TText*)Expand("combinational2_plugin.cpp"));
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+	//DIRECTORY TESTS
+
+	//Lets make some directories (allow KErrAlreadyExists)
+	//Then open 1 via RDir and then open the 2 from the plugin then open 3
+	//Return the contents of 3, and then read 3's contents from
+	// RDir and compare that it's the same.
+
+	dirname1.Append(gDriveToTest);
+	dirname1.Append(_L(":\\dir1\\"));
+
+	dirname2.Append(gDriveToTest);
+	dirname2.Append(_L(":\\dir2\\"));
+
+	dirname3.Append(gDriveToTest);
+	dirname3.Append(_L(":\\dir3\\"));
+
+
+	r = TheFs.MkDir(dirname1);
+	if(r == KErrAlreadyExists) r = KErrNone;
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+	r = TheFs.MkDir(dirname2);
+	if(r == KErrAlreadyExists) r = KErrNone;
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+	r = TheFs.MkDir(dirname3);
+	if(r == KErrAlreadyExists) r = KErrNone;
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+
+	filename6.Append(gDriveToTest);
+	filename7.Append(gDriveToTest);
+	filename8.Append(gDriveToTest);
+
+	filename6.Append(_L(":\\dir1\\dir1.file"));
+	filename7.Append(_L(":\\dir2\\dir2.file"));
+	filename8.Append(_L(":\\dir3\\dir3.file"));
+
+	r = file.Replace(TheFs,filename6,EFileWrite);
+	plugin_test(test,KCombinationalPos,__LINE__,(TText*)Expand("combinational_plugin.cpp"));
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+	file.Close();
+
+	r = file.Replace(TheFs,filename7,EFileWrite);
+	plugin_test(test,KCombinationalPos,__LINE__,(TText*)Expand("combinational_plugin.cpp"));
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+	file.Close();
+
+	r = file.Replace(TheFs,filename8,EFileWrite);
+	plugin_test(test,KCombinationalPos,__LINE__,(TText*)Expand("combinational_plugin.cpp"));
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+	file.Close();
+
+	RDir dir;
+	r = dir.Open(TheFs,dirname1,KEntryAttNormal);
+	plugin_test(test,KCombinationalPos,__LINE__,(TText*)Expand("combinational_plugin.cpp"));
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+
+	//Need to send which filename we want to read to the plugin
+	//This is a hack until there's a proper way of getting the directory filename.
+
+	test.Next(_L("Open RPlugin connection for CombinationalPlugin"));
+	r = rplugin.Open(TheFs,KCombinationalPos);
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+	test.Next(_L("Send dir name down to plugin"));
+
+	typedef TBuf<256> TDirName;
+	TPckg<TDirName> dirname1Pckg(dirname1);
+
+	r = rplugin.DoControl(KPluginSetDirFullName,dirname1Pckg);
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+	rplugin.Close();
+
+	TEntryArray entryarray1;
+	r = dir.Read(entryarray1); //returns read results for directory3
+	plugin_test(test,KCombinationalPos,__LINE__,(TText*)Expand("combinational_plugin.cpp"));
+	if(r == KErrEof) r = KErrNone;
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+	RDir dir2;
+	r = dir2.Open(TheFs,dirname3,KEntryAttNormal);
+	plugin_test(test,KCombinationalPos,__LINE__,(TText*)Expand("combinational_plugin.cpp"));
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+	test.Next(_L("Open RPlugin connection for CombinationalPlugin"));
+	r = rplugin.Open(TheFs,KCombinationalPos);
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+	test.Next(_L("Send dir name down to plugin"));
+	TPckg<TDirName> dirname3Pckg(dirname3);
+	r = rplugin.DoControl(KPluginSetDirFullName,dirname3Pckg);
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+	rplugin.Close();
+
+	TEntryArray entryarray2;
+	r = dir2.Read(entryarray2);
+	plugin_test(test,KCombinationalPos,__LINE__,(TText*)Expand("combinational_plugin.cpp"));
+	if(r == KErrEof) r = KErrNone;
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+	//compare results
+	safe_test(entryarray1[0].iName.Compare(entryarray2[0].iName),__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+	//cleanup
+	dir.Close();
+	dir2.Close();
+
+	TheFs.DismountPlugin(KCombinational2PluginName);
+	TheFs.DismountPlugin(KCombinationalPluginName);
+	TheFs.RemovePlugin(KCombinational2PluginName);
+	TheFs.RemovePlugin(KCombinationalPluginName);
+	}
+
+//-------------------------------------------------------------------------------------------------
+//! @SYMTestCaseID				KBASE-t_plugin_v2-1356
+//! @SYMTestType				CT
+//! @SYMTestCaseDesc			Testing various scenarios using write, replace, read, Entry and Dir
+//!
+//! @SYMPREQ					REQ8110
+//! @SYMTestPriority			High
+//! @SYMTestActions				LoadStackedPluginAndTest() mounts three plugins and performs read and write
+//!								operations on a test file by sending the request down the stack of plugins
+//!
+//!
+//!
+//! @SYMTestExpectedResults	    Operations complete without any panic
+//!
+//!
+//! @SYMTestPriority			High
+//! @SYMTestStatus				Implemented
+//-------------------------------------------------------------------------------------------------
+void LoadStackedPluginAndTest()
+	{
+	RFile file;
+	TBuf<256> filename;
+
+	//Setting up test files
+    filename.Append(gDriveToTest);
+	filename.Append(_L(":\\test.stack"));
+
+	TBuf8<20> content;
+	content.Copy(_L8("HELLO SYMBIAN WORLD1"));
+	ReplaceFiles(filename, content,__LINE__);
+
+
+	//Load Plugins
+	test.Next(_L("Loading Stacked plugin"));
+	TInt r = TheFs.AddPlugin(KStackedPluginFileName);
+	if (r == KErrAlreadyExists) r = KErrNone;
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+	test.Next(_L("Mounting Stacked plugin"));
+	r = TheFs.MountPlugin(KStackedPluginName);
+	if (r == KErrInUse) r = KErrNone;
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+	//Using RPlugin to communicate to the plugins which drive they should be testing on.
+	test.Next(_L("Open RPlugin connection for StackedPlugin"));
+	MyRPlugin rplugin;
+	r = rplugin.Open(TheFs,KStackedPos);
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+	TPckg<TChar> drivePckg(gDriveToTest);
+	test.Next(_L("Send drive letter to test down to plugin"));
+	r = rplugin.DoControl(KPluginSetDrive,drivePckg);
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+	rplugin.Close();
+
+	test.Next(_L("Loading Stacked2 plugin"));
+	r = TheFs.AddPlugin(KStacked2PluginFileName);
+	if (r == KErrAlreadyExists) r = KErrNone;
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+	test.Next(_L("Mounting Stacked2 plugin"));
+	r = TheFs.MountPlugin(KStacked2PluginName);
+	if (r == KErrInUse) r = KErrNone;
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+	test.Next(_L("Loading Stacked3 plugin"));
+	r = TheFs.AddPlugin(KStacked3PluginFileName);
+	if (r == KErrAlreadyExists) r = KErrNone;
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+	test.Next(_L("Mounting Stacked3 plugin"));
+	r = TheFs.MountPlugin(KStacked3PluginName);
+	if (r == KErrInUse) r = KErrNone;
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+
+
+
+	//Setting up test data
+    TBuf8<20> wbuffer;
+	wbuffer.FillZ(20);
+	wbuffer.Copy(_L8("HELLO WORLD  SYMBIAN"));
+
+    TBuf8<20> rbuffer;
+	rbuffer.FillZ(20);
+
+	//Open  test file and send a write request
+	r = file.Open(TheFs, filename, EFileWrite);
+	plugin_test(test,KStackedPos,__LINE__,(TText*)Expand("stacked_plugin.cpp"));
+	plugin_test(test,KStacked2Pos,__LINE__,(TText*)Expand("stacked2_plugin.cpp"));
+	plugin_test(test,KStacked3Pos,__LINE__,(TText*)Expand("stacked3_plugin.cpp"));
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+	//Writing to test file via plugins
+	test.Next(_L("Writing to file test.stack"));
+    r = file.Write(wbuffer);
+    plugin_test(test,KStackedPos,__LINE__,(TText*)Expand("stacked_plugin.cpp"));
+    plugin_test(test,KStacked2Pos,__LINE__,(TText*)Expand("stacked2_plugin.cpp"));
+    plugin_test(test,KStacked3Pos,__LINE__,(TText*)Expand("stacked3_plugin.cpp"));
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+	//Reading from test files
+	test.Next(_L("Reading file test.stack"));
+	plugin_test(test,KStackedPos,__LINE__,(TText*)Expand("stacked_plugin.cpp"));
+	plugin_test(test,KStacked2Pos,__LINE__,(TText*)Expand("stacked2_plugin.cpp"));
+	plugin_test(test,KStacked3Pos,__LINE__,(TText*)Expand("stacked3_plugin.cpp"));
+    r = file.Read(rbuffer);
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+	// Check data returned
+	test.Next(_L("Comparing buffers"));
+	r = wbuffer.Compare(rbuffer);
+	plugin_test(test,KStackedPos,__LINE__,(TText*)Expand("stacked_plugin.cpp"));
+	plugin_test(test,KStacked2Pos,__LINE__,(TText*)Expand("stacked2_plugin.cpp"));
+	plugin_test(test,KStacked3Pos,__LINE__,(TText*)Expand("stacked3_plugin.cpp"));
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+	file.Close();
+
+	// Dismounting Plugins
+	r = TheFs.DismountPlugin(KStacked3PluginName);
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+	r = TheFs.DismountPlugin(KStacked2PluginName);
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+	r = TheFs.DismountPlugin(KStackedPluginName);
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+	// Removing Plugins
+	r = TheFs.RemovePlugin(KStacked3PluginName);
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+	r = TheFs.RemovePlugin(KStacked2PluginName);
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+	r = TheFs.RemovePlugin(KStackedPluginName);
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+	}
+
+
+GLDEF_C void CallTestsL()
+	{
+	__UHEAP_MARK;
+	TInt theDrive;
+	TInt r = TheFs.CharToDrive(gDriveToTest,theDrive);
+	test(r == KErrNone);
+
+	TVolumeInfo volInfo;
+	r = TheFs.Volume(volInfo, theDrive);
+	test (r == KErrNone);
+
+	TDriveInfo drvInfo;
+	r = TheFs.Drive(drvInfo,theDrive);
+	test (r == KErrNone);
+
+	if(drvInfo.iType == EMediaRam || drvInfo.iType == EMediaRom || drvInfo.iMediaAtt == KMediaAttWriteProtected || drvInfo.iMediaAtt == KMediaAttLocked)
+		{
+		test.Printf(_L("Local Buffers are not supported on RAM or ROM drives\n"));
+		if(drvInfo.iMediaAtt == KMediaAttLocked)
+			{
+			test.Printf(_L("This media is locked. Drive %d\n"),theDrive);
+			}
+		test.Printf(_L("Skipping Test\n"));
+		return;
+		}
+	
+	test.Next(_L("Loading Observer plugin"));
+	r = TheFs.AddPlugin(KObserverPluginFileName);
+	if (r == KErrAlreadyExists) r = KErrNone;
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+	r = TheFs.MountPlugin(KObserverPluginName, (TUint)gDriveToTest.GetUpperCase() - 65);
+	if (r == KErrNotSupported)
+		{
+		test.Printf(_L("Plugins are not supported on pagable drives.\nSkipping test.\n"));
+
+		r = TheFs.RemovePlugin(KObserverPluginName);
+		safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+		
+		return;
+		}
+	
+	test.Next(_L("Un-Loading Observer plugin"));
+	r = TheFs.DismountPlugin(KObserverPluginName);
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+	r = TheFs.RemovePlugin(KObserverPluginName);
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+	TBuf<256> theFSName;
+
+	r = TheFs.FileSystemName(theFSName, theDrive);
+
+	TBool Win32Filesystem = (theFSName.CompareF(_L("Win32")) == 0);
+
+    if(!Win32Filesystem)
+        {
+		// Drive is not mapped to local pc filesystem so can be formatted
+		test.Next(_L("Formating Drive......... "));
+		Format(theDrive);
+		}
+
+	// This should be changed to an actual mechanism of determining if the drives filesystem and extensions has local buffer support
+	TBool LocalBufferSupported = ETrue;
+
+	if (!LocalBufferSupported)
+		{
+		if((volInfo.iDrive.iType == EMediaRam) && !Win32Filesystem)
+			{
+			test.Printf(_L("Local Buffers are not supported on RAM drive\n"));
+			test.Printf(_L("Skipping Test\n"));
+			return;
+			}
+		else if(IsFileSystemLFFS(TheFs, theDrive))
+			{
+			test.Printf(_L("Local Buffers are not supported on LFFS drives\n"));
+			test.Printf(_L("Skipping Test\n"));
+			return;
+			}
+		else
+			{
+			test.Printf(_L("Error: Local Buffers are not supported on the selected drive\n"));
+			test(EFalse);
+			}
+		}
+
+	TBuf<10> extensionName;
+	for(TInt i = 0; i < 2; i++)
+		{
+		r = TheFs.ExtensionName(extensionName,CurrentDrive(),i);
+		if(r==KErrNone && extensionName.Compare(_L("Nandftl")) == 0)
+			{
+			test.Printf(_L("Local Buffers are not supported on the nandftl extension\n"));
+			test.Printf(_L("Skipping Test\n"));
+			return;
+			}
+		}
+
+	SetupTestFiles();
+
+
+
+
+	test.Next(_L("////////////////////////////"));
+	test.Next(_L("////////////////////////////"));
+	test.Next(_L("////////////////////////////"));
+	test.Next(_L("////////////////////////////"));
+
+	test.Next(_L("Reading a file section enter"));
+
+	RFile file;
+	TBuf<256> filename1;
+	filename1.Append(gDriveToTest);
+	filename1.Append(_L(":\\data\\testReadFileSection.tst"));
+
+
+	r = TheFs.Delete(filename1);
+	if(r == KErrNotFound || r == KErrPathNotFound)
+		r = KErrNone;
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+	r = file.Create(TheFs, filename1, EFileWrite);
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+	test.Next(_L("Write to file"));
+	r=file.Write(0, _L8("Read File Section"));
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+	file.Close();
+
+	TBuf8<64> temp1;
+	temp1.FillZ(64);
+
+	test.Next(_L("ReadFileSection:Enter"));
+	r=TheFs.ReadFileSection(filename1,0,temp1,9);
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+	TBuf16<64> temp1_wide;
+	temp1_wide.Copy(temp1);
+	test.Printf(_L("\nReadFileSection - read: %s\n"),&temp1_wide);
+	test.Printf(_L("ReadFileSection - temp1.Length()=%d\n\n"),temp1.Length());
+
+
+	test.Next(_L("ReadFileSection:Exit"));
+	test.Printf(_L("ReadFileSection - read: %S"),&temp1);
+	TInt compare = temp1.Length()==9;
+	if(compare) compare = KErrNone;
+	safe_test(compare,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+	compare = temp1.Compare(_L8("Read File"));
+	compare = (temp1==_L8("Read File")); // This should be .Compare()?
+	if(compare) compare = KErrNone;
+	safe_test(compare,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+	test.Next(_L("Reading a file section complete"));
+
+	test.Next(_L("ReadFileSection:Delete"));
+	r = TheFs.Delete(filename1);
+	if(r == KErrNotFound || r==KErrPathNotFound)
+		r = KErrNone;
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+
+	test.Next(_L("////////////////////////////"));
+	test.Next(_L("////////////////////////////"));
+	test.Next(_L("////////////////////////////"));
+	test.Next(_L("////////////////////////////"));
+
+
+	LoadAndMountPlugins();
+
+	#if defined __WINS__ && defined __DEBUG__
+	// Turn on request tracing (for debug purposes)
+	r = TheFs.SetDebugRegister(KPLUGIN | KCACHE);
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+	#endif
+
+	TInt drive = EDriveX;
+	TBuf<25> path;
+	r = TheFs.Subst(path,drive);
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+
+
+	TestReadFileDirect();
+	TestReadFileViaPlugin();
+	TestWriteFileDirect();
+	TestWriteFileViaPlugin();
+	//TestFileLock();
+	TestFileSeek();
+	TestFileSize();
+	TestDir();
+	TestCreate();
+	TestOpen();
+	TestReplace();
+	TestReadFileSection();
+	TestTemp();
+	TestEntry();
+	TestRename();
+	TestComReadFileSection();
+	//TestComLock();
+
+	DismountAndUnloadPlugins();
+
+	LoadExclusiveAccessPluginAndTest();
+	LoadPluginsForSpecificDriveTests();
+	LoadCombinationPluginAndTest();
+	LoadStackedPluginAndTest();
+
+	//Unremovable plugin is removed by setting a flag via RPlugin
+	LoadUnremovablePluginAndTest();
+
+	__UHEAP_MARKEND;
+
+	#if defined __WINS__ && defined __DEBUG__
+	// Turn off request tracing
+	r = TheFs.SetDebugRegister(0);
+	safe_test(r,__LINE__,(TText*)Expand("t_plugin_v2.cpp"));
+	#endif
+
+}