tracesrv/tracecore/btrace_handler/test/t_tracecore_wdp/src/t_tracecore_wdp.cpp
changeset 56 aa2539c91954
--- /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);
+    }