--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tracesrv/tracecore/btrace_handler/test/t_tracecore_wdp/src/t_tracecore_wdp.cpp Fri Oct 08 14:56:39 2010 +0300
@@ -0,0 +1,185 @@
+// Copyright (c) 2005-2010 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// t_tracecore_wdp.cpp
+// Overview:
+// Tests WDP TraceCore
+// kernel - side APIs
+//
+
+#define __E32TEST_EXTENSION__
+#include <e32std.h>
+#include <dptest.h>
+#include "t_tracecore_wdp.h"
+#include "t_rtest_panic.h"
+
+
+RTest test(_L("T_TRACECORE_WDP"));
+
+TInt CreateProcess (const TDesC &aProcessName, const TDesC &aCommand, RProcess &aProcess)
+ {
+ TInt err = aProcess.Create(aProcessName,aCommand);
+
+ if (err != KErrNone)
+ test.Printf(_L("Unable to create process handle. Error: %d"),err);
+
+ return err;
+ }
+
+void StartProcess (RProcess &aProcess, TRequestStatus &aStatus)
+ {
+ aProcess.Logon(aStatus);
+ aProcess.Resume();
+ }
+
+TInt CreateAndStartProcess (const TDesC &aProcessName, const TDesC &aCommand, RProcess &aProcess, TRequestStatus &aStatus)
+ {
+ TInt err = CreateProcess(aProcessName,aCommand,aProcess);
+ if (err != KErrNone)
+ return err;
+
+ StartProcess(aProcess,aStatus);
+ return KErrNone;
+ }
+
+TInt ContinueFlushingPageCache(TRequestStatus &aTestStatus)
+ {
+ while (aTestStatus==KRequestPending)
+ {
+ //Flush the cache
+ DPTest::FlushCache();
+ //wait for 100 microseconds
+ User::After(100);
+ }
+ return KErrNone;
+ }
+
+TInt CheckExecutableReturn(const TDesC &aProcessName, RProcess &aTestProcess)
+ {
+ TInt exitreason = aTestProcess.ExitReason();
+ TPtrC exitcategory(KExitCategoryUser);
+
+ //if the test didn't complete with error, just return KErrNone
+ if (exitreason == KErrNone)
+ return exitreason;
+
+ //most of this next bit will not be needed tests pass
+
+ //if it completed with error ensure it wasn't t_tracecore.exe because
+ //that test should pass. If it was t_tracecore.exe return the exit reason
+ //and fail the test.
+ if (((aProcessName.Compare(KTTraceCore))==0)||((aProcessName.Compare(KTRTraceBuffer))==0)||((aProcessName.Compare(KTOstBuffer))==0)
+ ||((aProcessName.Compare(KTOstBufferStress))==0)||((aProcessName.Compare(KTMultipart))==0)||((aProcessName.Compare(KTTraceCoreOstLdd))==0))
+ {
+ test.Printf(_L("Test completed with error where it shouldn't: Category: %S, Code: %d"),&exitcategory,exitreason);
+ return exitreason;
+ }
+
+ //if it was any of the other executables i.e t_tracecoreostldd.exe
+ //or TraceCoreTestApp.exe that completed with error check it's USER 84
+ //because that is what is expected at the moment. If that wasn't the panic
+ //return the exit reason and fail the test. Else return KErrNone.
+ if ((exitreason==84)&&((exitcategory.Compare(KExitCategoryUser))==0))
+ return KErrNone;
+ else
+ {
+ test.Printf(_L("Test completed with unknown error: Category: %S, Code: %d"),&exitcategory,exitreason);
+ }
+ return exitreason;
+ }
+
+TInt RunTestExecutable(const TDesC &aProcessName)
+ {
+ TInt err = KErrNone;
+ RProcess testprocess;
+ TRequestStatus teststatus;
+
+ //Create and start the test process
+ err = CreateAndStartProcess(aProcessName,KNullCmd,testprocess,teststatus);
+ if (err!=KErrNone)
+ {
+ testprocess.Close();
+ return err;
+ }
+
+ //Flush Cache every 100us until test finishes running
+ err = ContinueFlushingPageCache(teststatus);
+ if (err!=KErrNone)
+ {
+ testprocess.Close();
+ return err;
+ }
+
+ //Check return from test executable
+ err = CheckExecutableReturn(aProcessName,testprocess);
+ if (err!=KErrNone)
+ {
+ TExitCategoryName exitCategory = testprocess.ExitCategory();
+ testprocess.Close();
+ if ((err==84)&&((exitCategory.Compare(KExitCategoryUser))==0))
+ {
+ // If process exited with RTest panic, then use process name as panic category
+ User::Panic(aProcessName, err);
+ }
+ else
+ {
+ // If process exited with any other panic, use that as the panic category
+ User::Panic(exitCategory, err);
+ }
+ }
+
+ return err;
+ }
+
+GLDEF_C TInt E32Main()
+ {
+
+ test.Title();
+ test.Start(_L("Trace Core WDP tests"));
+ TInt err = KErrNone;
+
+ test.Next(_L("Run t_tracecore.exe while repeatedly flushing the page cache"));
+ err = RunTestExecutable(KTTraceCore);
+ TEST_KErrNone(err);
+
+ test.Next(_L("Run t_ostbuffer_stress.exe while repeatedly flushing the page cache"));
+ err = RunTestExecutable(KTOstBufferStress);
+ TEST_KErrNone(err);
+
+ test.Next(_L("Run t_multipart.exe while repeatedly flushing the page cache"));
+ err = RunTestExecutable(KTMultipart);
+ TEST_KErrNone(err);
+
+ test.Next(_L("Run t_rtracebuffer.exe while repeatedly flushing the page cache"));
+ err = RunTestExecutable(KTRTraceBuffer);
+ TEST_KErrNone(err);
+
+ test.Next(_L("Run t_ostbuffer.exe while repeatedly flushing the page cache"));
+ err = RunTestExecutable(KTOstBuffer);
+ TEST_KErrNone(err);
+
+// test.Next(_L("Run t_tracecoreostldd.exe while repeatedly flushing the page cache"));
+// err = RunTestExecutable(KTTraceCoreOstLdd);
+// TEST_KErrNone(err);
+//
+// test.Next(_L("Run TraceCoreTestApp.exe while repeatedly flushing the page cache"));
+// err = RunTestExecutable(KTraceCoreTestApp);
+// TEST_KErrNone(err);
+
+
+ test.Printf(_L("\nFinished Trace Core WDP tests!!!"));
+
+ test.End();
+ test.Close();
+ return (0);
+ }