websrv_pub/hostlet_connection_api/tsrc/bc/hostconn/src/hostletconnection.cpp
changeset 0 62f9d29f7211
equal deleted inserted replaced
-1:000000000000 0:62f9d29f7211
       
     1 /*
       
     2 * Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies).
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:          SenHostletConnection class member functions
       
    15 *
       
    16 */
       
    17 
       
    18 
       
    19 
       
    20 
       
    21 
       
    22 
       
    23 
       
    24 
       
    25 
       
    26 // INCLUDE FILES
       
    27 #include <StifTestInterface.h>
       
    28 #include "senhostletconnectionbctest.h"
       
    29 
       
    30 // EXTERNAL DATA STRUCTURES
       
    31 //extern  ?external_data;
       
    32 
       
    33 // EXTERNAL FUNCTION PROTOTYPES  
       
    34 //extern ?external_function( ?arg_type,?arg_type );
       
    35 
       
    36 // CONSTANTS
       
    37 //const ?type ?constant_var = ?constant;
       
    38 
       
    39 // MACROS
       
    40 //#define ?macro ?macro_def
       
    41 
       
    42 // LOCAL CONSTANTS AND MACROS
       
    43 //const ?type ?constant_var = ?constant;
       
    44 //#define ?macro_name ?macro_def
       
    45 
       
    46 // MODULE DATA STRUCTURES
       
    47 //enum ?declaration
       
    48 //typedef ?declaration
       
    49 
       
    50 // LOCAL FUNCTION PROTOTYPES
       
    51 //?type ?function_name( ?arg_type, ?arg_type );
       
    52 
       
    53 // FORWARD DECLARATIONS
       
    54 //class ?FORWARD_CLASSNAME;
       
    55 
       
    56 // ============================= LOCAL FUNCTIONS ===============================
       
    57 
       
    58 // -----------------------------------------------------------------------------
       
    59 // ?function_name ?description.
       
    60 // ?description
       
    61 // Returns: ?value_1: ?description
       
    62 //          ?value_n: ?description_line1
       
    63 //                    ?description_line2
       
    64 // -----------------------------------------------------------------------------
       
    65 //
       
    66 /*
       
    67 ?type ?function_name(
       
    68     ?arg_type arg,  // ?description
       
    69     ?arg_type arg)  // ?description
       
    70     {
       
    71 
       
    72     ?code  // ?comment
       
    73 
       
    74     // ?comment
       
    75     ?code
       
    76     }
       
    77 */
       
    78 
       
    79 // ============================ MEMBER FUNCTIONS ===============================
       
    80 
       
    81 // -----------------------------------------------------------------------------
       
    82 // CSenHostletConnectionBCTest::CSenHostletConnectionBCTest
       
    83 // C++ default constructor can NOT contain any code, that
       
    84 // might leave.
       
    85 // -----------------------------------------------------------------------------
       
    86 //
       
    87 CSenHostletConnectionBCTest::CSenHostletConnectionBCTest()
       
    88     {
       
    89 
       
    90     }
       
    91 
       
    92 // -----------------------------------------------------------------------------
       
    93 // CSenHostletConnectionBCTest::ConstructL
       
    94 // Symbian 2nd phase constructor can leave.
       
    95 //
       
    96 // Note: If OOM test case uses STIF Logger, then STIF Logger must be created
       
    97 // with static buffer size parameter (aStaticBufferSize). Otherwise Logger 
       
    98 // allocates memory from heap and therefore causes error situations with OOM 
       
    99 // testing. For more information about STIF Logger construction, see STIF Users 
       
   100 // Guide.
       
   101 // -----------------------------------------------------------------------------
       
   102 //
       
   103 void CSenHostletConnectionBCTest::ConstructL()
       
   104     {
       
   105     iLog = CStifLogger::NewL( KSenHostletConnection_stifLogPath, 
       
   106                           KSenHostletConnection_stifLogFile);
       
   107 
       
   108     // Sample how to use logging
       
   109     _LIT( KLogStart, "KSenHostletConnection_stif logging starts!" );
       
   110     iLog->Log( KLogStart );
       
   111     
       
   112     iActiveScheduler = new CActiveScheduler;
       
   113 	CActiveScheduler::Install( iActiveScheduler );
       
   114 
       
   115     }
       
   116 //-----------------------------------------------------------------------------
       
   117 // CSenHostletConnectionBCTest::SendTestClassVersion
       
   118 // Method used to send version of test class
       
   119 //-----------------------------------------------------------------------------
       
   120 //
       
   121 void CSenHostletConnectionBCTest::SendTestModuleVersion()
       
   122 	{
       
   123 	TVersion moduleVersion;
       
   124 	moduleVersion.iMajor = TEST_MODULE_VERSION_MAJOR;
       
   125 	moduleVersion.iMinor = TEST_MODULE_VERSION_MINOR;
       
   126 	moduleVersion.iBuild = TEST_MODULE_VERSION_BUILD;
       
   127 	
       
   128 	TFileName moduleName;
       
   129 	moduleName = _L("HostletConnectionBCTest.dll");
       
   130 	
       
   131 
       
   132 	TBool newVersionOfMethod = ETrue;
       
   133 	CTestModuleIf &test=TestModuleIf();
       
   134 	test.SendTestModuleVersion(moduleVersion, moduleName, newVersionOfMethod);
       
   135 	test.SetBehavior(CTestModuleIf::ETestLeaksHandles);
       
   136 	}
       
   137 
       
   138 // -----------------------------------------------------------------------------
       
   139 // CSenHostletConnectionBCTest::NewL
       
   140 // Two-phased constructor.
       
   141 // -----------------------------------------------------------------------------
       
   142 //
       
   143 CSenHostletConnectionBCTest* CSenHostletConnectionBCTest::NewL()
       
   144     {
       
   145     CSenHostletConnectionBCTest* self = new (ELeave) CSenHostletConnectionBCTest;
       
   146 
       
   147     CleanupStack::PushL( self );
       
   148     self->ConstructL();
       
   149     CleanupStack::Pop();
       
   150 
       
   151     return self;
       
   152 
       
   153     }
       
   154 
       
   155 // Destructor
       
   156 CSenHostletConnectionBCTest::~CSenHostletConnectionBCTest()
       
   157     {
       
   158     delete iLog;
       
   159     
       
   160     delete iActiveScheduler;
       
   161    
       
   162     }
       
   163 
       
   164 // -----------------------------------------------------------------------------
       
   165 // CSenHostletConnectionBCTest::InitL
       
   166 // InitL is used to initialize the Test Module.
       
   167 // -----------------------------------------------------------------------------
       
   168 //
       
   169 TInt CSenHostletConnectionBCTest::InitL( 
       
   170     TFileName& /*aIniFile*/, 
       
   171     TBool /*aFirstTime*/ )
       
   172     {
       
   173     return KErrNone;
       
   174 
       
   175     }
       
   176 
       
   177 // -----------------------------------------------------------------------------
       
   178 // CSenHostletConnectionBCTest::GetTestCasesL
       
   179 // GetTestCases is used to inquire test cases from the Test Module. Test
       
   180 // cases are stored to array of test cases. The Test Framework will be 
       
   181 // the owner of the data in the RPointerArray after GetTestCases return
       
   182 // and it does the memory deallocation. 
       
   183 // -----------------------------------------------------------------------------
       
   184 //
       
   185 TInt CSenHostletConnectionBCTest::GetTestCasesL( 
       
   186     const TFileName& /*aConfig*/, 
       
   187     RPointerArray<TTestCaseInfo>& aTestCases )
       
   188     {
       
   189 
       
   190     // Loop through all test cases and create new
       
   191     // TTestCaseInfo items and append items to aTestCase array    
       
   192     for( TInt i = 0; Case(i).iMethod != NULL; i++ )
       
   193         {
       
   194 
       
   195         // Allocate new TTestCaseInfo from heap for a testcase definition.
       
   196         TTestCaseInfo* newCase = new( ELeave ) TTestCaseInfo();
       
   197 
       
   198         // PushL TTestCaseInfo to CleanupStack.    
       
   199         CleanupStack::PushL( newCase );
       
   200 
       
   201         // Set number for the testcase.
       
   202         // When the testcase is run, this comes as a parameter to RunTestCaseL.
       
   203         newCase->iCaseNumber = i;
       
   204 
       
   205         // Set title for the test case. This is shown in UI to user.
       
   206         newCase->iTitle.Copy( Case(i).iCaseName );
       
   207 
       
   208         // Append TTestCaseInfo to the testcase array. After appended 
       
   209         // successfully the TTestCaseInfo object is owned (and freed) 
       
   210         // by the TestServer. 
       
   211         User::LeaveIfError(aTestCases.Append ( newCase ) );
       
   212 
       
   213         // Pop TTestCaseInfo from the CleanupStack.
       
   214         CleanupStack::Pop( newCase );
       
   215 
       
   216         }
       
   217 
       
   218     return KErrNone;
       
   219 
       
   220     }
       
   221 
       
   222 // -----------------------------------------------------------------------------
       
   223 // CSenHostletConnectionBCTest::RunTestCaseL
       
   224 // RunTestCaseL is used to run an individual test case specified 
       
   225 // by aTestCase. Test cases that can be run may be requested from 
       
   226 // Test Module by GetTestCases method before calling RunTestCase.
       
   227 // -----------------------------------------------------------------------------
       
   228 //
       
   229 TInt CSenHostletConnectionBCTest::RunTestCaseL( 
       
   230     const TInt aCaseNumber,   
       
   231     const TFileName& /*aConfig*/,
       
   232     TTestResult& aResult )
       
   233     {
       
   234 		SendTestModuleVersion();
       
   235     // Return value
       
   236     TInt execStatus = KErrNone;
       
   237 
       
   238     // Get the pointer to test case function
       
   239     TCaseInfo tmp = Case ( aCaseNumber );
       
   240 
       
   241     _LIT( KLogStartTC, "Starting testcase [%S]" );
       
   242     iLog->Log( KLogStartTC, &tmp.iCaseName);
       
   243 
       
   244     // Check that case number was valid
       
   245     if ( tmp.iMethod != NULL )
       
   246         {
       
   247         // Valid case was found, call it via function pointer
       
   248         iMethod = tmp.iMethod;        
       
   249         execStatus  = ( this->*iMethod )( aResult );
       
   250         }
       
   251     else
       
   252         {
       
   253         // Valid case was not found, return error.
       
   254         execStatus = KErrNotFound;
       
   255         }
       
   256 
       
   257     // Return case execution status (not the result of the case execution)
       
   258     return execStatus;
       
   259 
       
   260     }
       
   261 
       
   262 // -----------------------------------------------------------------------------
       
   263 // CSenHostletConnectionBCTest::OOMTestQueryL
       
   264 // Used to check if a particular test case should be run in OOM conditions and 
       
   265 // which memory allocations should fail.    
       
   266 // -----------------------------------------------------------------------------
       
   267 //
       
   268 TBool CSenHostletConnectionBCTest::OOMTestQueryL( 
       
   269                                 const TFileName& /* aTestCaseFile */, 
       
   270                                 const TInt aCaseNumber, 
       
   271                                 TOOMFailureType& /* aFailureType */, 
       
   272                                 TInt& aFirstMemFailure, 
       
   273                                 TInt& aLastMemFailure ) 
       
   274     {
       
   275     _LIT( KLogOOMTestQueryL, "CSenHostletConnectionBCTest::OOMTestQueryL" );
       
   276     iLog->Log( KLogOOMTestQueryL );     
       
   277 
       
   278     aFirstMemFailure = Case( aCaseNumber ).iFirstMemoryAllocation;
       
   279     aLastMemFailure = Case( aCaseNumber ).iLastMemoryAllocation;
       
   280 
       
   281     return Case( aCaseNumber ).iIsOOMTest;
       
   282 
       
   283     }
       
   284 
       
   285 // -----------------------------------------------------------------------------
       
   286 // CSenHostletConnectionBCTest::OOMTestInitializeL
       
   287 // Used to perform the test environment setup for a particular OOM test case. 
       
   288 // Test Modules may use the initialization file to read parameters for Test 
       
   289 // Module initialization but they can also have their own configure file or 
       
   290 // some other routine to initialize themselves.  
       
   291 //
       
   292 // NOTE: User may add implementation for OOM test environment initialization.
       
   293 // Usually no implementation is required.
       
   294 // -----------------------------------------------------------------------------
       
   295 //
       
   296 void CSenHostletConnectionBCTest::OOMTestInitializeL( 
       
   297                                 const TFileName& /* aTestCaseFile */, 
       
   298                                 const TInt /* aCaseNumber */ )
       
   299     {
       
   300     }
       
   301 
       
   302 // -----------------------------------------------------------------------------
       
   303 // CSenHostletConnectionBCTest::OOMHandleWarningL
       
   304 // In some cases the heap memory allocation should be skipped, either due to
       
   305 // problems in the OS code or components used by the code being tested, or even 
       
   306 // inside the tested components which are implemented this way on purpose (by 
       
   307 // design), so it is important to give the tester a way to bypass allocation 
       
   308 // failures.
       
   309 //
       
   310 // NOTE: User may add implementation for OOM test warning handling. Usually no
       
   311 // implementation is required.
       
   312 // -----------------------------------------------------------------------------
       
   313 //
       
   314 void CSenHostletConnectionBCTest::OOMHandleWarningL( 
       
   315                                 const TFileName& /* aTestCaseFile */,
       
   316                                 const TInt /* aCaseNumber */, 
       
   317                                 TInt& /* aFailNextValue */ )
       
   318     {
       
   319     }
       
   320 
       
   321 // -----------------------------------------------------------------------------
       
   322 // CSenHostletConnectionBCTest::OOMTestFinalizeL
       
   323 // Used to perform the test environment cleanup for a particular OOM test case.
       
   324 //
       
   325 // NOTE: User may add implementation for OOM test environment finalization.
       
   326 // Usually no implementation is required.
       
   327 // -----------------------------------------------------------------------------
       
   328 //
       
   329 void CSenHostletConnectionBCTest::OOMTestFinalizeL( 
       
   330                                 const TFileName& /* aTestCaseFile */, 
       
   331                                 const TInt /* aCaseNumber */ )
       
   332     {
       
   333     }
       
   334 
       
   335 // ========================== OTHER EXPORTED FUNCTIONS =========================
       
   336 
       
   337 // -----------------------------------------------------------------------------
       
   338 // LibEntryL is a polymorphic Dll entry point
       
   339 // Returns: CTestModuleBase*: Pointer to Test Module object
       
   340 // -----------------------------------------------------------------------------
       
   341 //
       
   342 EXPORT_C CTestModuleBase* LibEntryL()
       
   343     {
       
   344     return CSenHostletConnectionBCTest::NewL();
       
   345 
       
   346     }
       
   347 
       
   348 // -----------------------------------------------------------------------------
       
   349 // SetRequirements handles test module parameters(implements evolution
       
   350 // version 1 for test module's heap and stack sizes configuring).
       
   351 // Returns: TInt: Symbian error code.
       
   352 // -----------------------------------------------------------------------------
       
   353 //
       
   354 EXPORT_C TInt SetRequirements( CTestModuleParam*& /*aTestModuleParam*/, 
       
   355                                 TUint32& /*aParameterValid*/ )
       
   356     {
       
   357 
       
   358     /* --------------------------------- NOTE ---------------------------------
       
   359     USER PANICS occurs in test thread creation when:
       
   360     1) "The panic occurs when the value of the stack size is negative."
       
   361     2) "The panic occurs if the minimum heap size specified is less
       
   362        than KMinHeapSize".
       
   363        KMinHeapSize: "Functions that require a new heap to be allocated will
       
   364        either panic, or will reset the required heap size to this value if
       
   365        a smaller heap size is specified".
       
   366     3) "The panic occurs if the minimum heap size specified is greater than
       
   367        the maximum size to which the heap can grow".
       
   368     Other:
       
   369     1) Make sure that your hardware or Symbian OS is supporting given sizes.
       
   370        e.g. Hardware might support only sizes that are divisible by four.
       
   371     ------------------------------- NOTE end ------------------------------- */
       
   372 
       
   373     // Normally STIF uses default heap and stack sizes for test thread, see:
       
   374     // KTestThreadMinHeap, KTestThreadMinHeap and KStackSize.
       
   375     // If needed heap and stack sizes can be configured here by user. Remove
       
   376     // comments and define sizes.
       
   377 
       
   378 /*
       
   379     aParameterValid = KStifTestModuleParameterChanged;
       
   380 
       
   381     CTestModuleParamVer01* param = CTestModuleParamVer01::NewL();
       
   382     // Stack size
       
   383     param->iTestThreadStackSize= 16384; // 16K stack
       
   384     // Heap sizes
       
   385     param->iTestThreadMinHeap = 4096;   // 4K heap min
       
   386     param->iTestThreadMaxHeap = 1048576;// 1M heap max
       
   387 
       
   388     aTestModuleParam = param;
       
   389 */
       
   390     return KErrNone;
       
   391 
       
   392     }
       
   393 
       
   394 
       
   395 //  End of File