opensrv_plat/messagequeue_api/tsrc/src/messagequeue_apiBlocks.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Tue, 02 Feb 2010 01:10:06 +0200
changeset 0 d0f3a028347a
child 4 38249ef85f99
permissions -rw-r--r--
Revision: 201003 Kit: 201005

/*
* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). 
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "Eclipse Public License v1.0"
* which accompanies this distribution, and is available
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
*
* Initial Contributors:
* Nokia Corporation - initial contribution.
*
* Contributors:
* 
* Description: This file contains testclass implementation.
*
*/

// [INCLUDE FILES] - do not remove
#include <e32svr.h>
#include <StifParser.h>
#include <StifTestInterface.h>
#include <msgqlib.h>
#include <msg_enums.h>
#include <msgliterals.h>
#include <stdlib.h>
#include <msgqinternal.h>
#include "messagequeue_api.h"

// EXTERNAL DATA STRUCTURES
//extern  ?external_data;

// EXTERNAL FUNCTION PROTOTYPES  
//extern ?external_function( ?arg_type,?arg_type );

// CONSTANTS
//const ?type ?constant_var = ?constant;

// MACROS
//#define ?macro ?macro_def

// LOCAL CONSTANTS AND MACROS
//const ?type ?constant_var = ?constant;
//#define ?macro_name ?macro_def

// MODULE DATA STRUCTURES
//enum ?declaration
//typedef ?declaration

// LOCAL FUNCTION PROTOTYPES
//?type ?function_name( ?arg_type, ?arg_type );

// FORWARD DECLARATIONS
//class ?FORWARD_CLASSNAME;

// ============================= LOCAL FUNCTIONS ===============================

// -----------------------------------------------------------------------------
// ?function_name ?description.
// ?description
// Returns: ?value_1: ?description
//          ?value_n: ?description_line1
//                    ?description_line2
// -----------------------------------------------------------------------------
//
/*
?type ?function_name(
    ?arg_type arg,  // ?description
    ?arg_type arg)  // ?description
    {

    ?code  // ?comment

    // ?comment
    ?code
    }
*/
  //-----------------------------------------------------------------------------
// function_name    : running isolation server exe
// description      : Deallocates all the data
// Returns          : None
//-----------------------------------------------------------------------------
  int  run_isoserver()
  {
    // running isoserver 
    RProcess isosrv_launcher;
    TInt lunch_err = 0;
    _LIT(KProcess, "isoserver.exe");
    lunch_err = isosrv_launcher.Create( KProcess, KNullDesC );
     if ( KErrNone != lunch_err ) 
        {
        return KErrGeneral;
            
        }
    isosrv_launcher.Resume();
    return KErrNone;
  }
// ============================ MEMBER FUNCTIONS ===============================

// -----------------------------------------------------------------------------
// Cmessagequeue_api::Delete
// Delete here all resources allocated and opened from test methods. 
// Called from destructor. 
// -----------------------------------------------------------------------------
//
void Cmessagequeue_api::Delete() 
    {

    }

// -----------------------------------------------------------------------------
// Cmessagequeue_api::RunMethodL
// Run specified method. Contains also table of test mothods and their names.
// -----------------------------------------------------------------------------
//
TInt Cmessagequeue_api::RunMethodL( 
    CStifItemParser& aItem ) 
    {

    static TStifFunctionInfo const KFunctions[] =
        {  
        // Copy this line for every implemented function.
        // First string is the function name used in TestScripter script file.
        // Second is the actual implementation member function. 
        ENTRY( "TestMessageQCreate", Cmessagequeue_api::TestMessageQCreate ),
        ENTRY( "TestMessageQSend", Cmessagequeue_api::TestMessageQSend ),
        ENTRY( "TestMessageQDelete", Cmessagequeue_api::TestMessageQDelete ),
        ENTRY( "TestMessageQReceive", Cmessagequeue_api::TestMessageQReceive ),
        ENTRY( "TestMessageQClean", Cmessagequeue_api::TestMessageQClean ),
        ENTRY( "TestMessageQCheck", Cmessagequeue_api::TestMessageQCheck ),
        ENTRY( "TestMsgQMaxCheck", Cmessagequeue_api::TestMsgQMaxCheck ),
        //ADD NEW ENTRY HERE
        // [test cases entries] - Do not remove

        };

    const TInt count = sizeof( KFunctions ) / 
                        sizeof( TStifFunctionInfo );

    return RunInternalL( KFunctions, count, aItem );

    }

// -----------------------------------------------------------------------------
// Cmessagequeue_api::ExampleL
// Example test method function.
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
TInt Cmessagequeue_api::TestMessageQCreate( CStifItemParser& aItem )
    {
        char smsg[MAX_MSG_SIZE];
        char rmsg[MAX_MSG_SIZE];
        int index=0;
        int timeout = 100;
        int nBytes;
        int result = 0;
        int err = 0;
        int status = 0;
        int run_iso;
        FILE *fp;
        message_hdr_req *msgHdr = NULL;  
        message_hdr_resp* msg_struct = NULL;
        TInt return_value = 0;
        memset( smsg, '\0', MAX_MSG_SIZE );
        memset( rmsg, '\0', MAX_MSG_SIZE );
        //running isoserver   
        run_iso = run_isoserver(); 
        if(run_iso)
           {
           iLog->Log ( _L ( "running isolation server is failed" ) );
           return KErrGeneral;
            }             
         //create message queue for send request
        result = MsgQCreate(REQUEST_QUEUE, MAX_MSG_Q_SIZE , MSG_Q_FIFO, &err);
        if(err)
           {
           iLog->Log ( _L ( "creating requet queue is failed" ) );
           return KErrGeneral;
            }
       //create message queue for response request
        result = MsgQCreate(RESPONSE_QUEUE, MAX_MSG_Q_SIZE , MSG_Q_FIFO, &err);
        if(err)
           {
            iLog->Log ( _L ( "creating requet queue is failed" ) );
            return KErrGeneral;
            }
            index=0;
            memset( smsg, '\0', MAX_MSG_SIZE );
            memset( rmsg, '\0', MAX_MSG_SIZE );
            msgHdr = ( message_hdr_req* ) malloc( sizeof( message_hdr_req ) );
            memset( msgHdr, '\0', sizeof( message_hdr_req ) );
            msgHdr->message_type = EKill_Process;
            memcpy( smsg, msgHdr, sizeof( message_hdr_req ) );
            index += sizeof( message_hdr_req );
            result = MsgQSend(REQUEST_QUEUE, smsg, index, MSG_PRI_NORMAL, timeout, &err); 
            free(msgHdr);           
           return KErrNone;
            
    }


TInt Cmessagequeue_api::TestMessageQSend( CStifItemParser& aItem )
    {
        char smsg[MAX_MSG_SIZE];
        char rmsg[MAX_MSG_SIZE];
        int index=0;
        int timeout = 100;
        int nBytes;
        int result = 0;
        int err = 0;
        int status = 0;
        int run_iso;
        FILE *fp;
        message_hdr_req *msgHdr = NULL;  
        message_hdr_resp* msg_struct = NULL;
        TInt return_value = 0;
        memset( smsg, '\0', MAX_MSG_SIZE );
        memset( rmsg, '\0', MAX_MSG_SIZE );
        //running isoserver   
        run_iso = run_isoserver(); 
        if(run_iso)
           {
           iLog->Log ( _L ( "running isolation server is failed" ) );
           return KErrGeneral;
            }             
         //create message queue for send request
        result = MsgQCreate(REQUEST_QUEUE, MAX_MSG_Q_SIZE , MSG_Q_FIFO, &err);
        if(err)
           {
           iLog->Log ( _L ( "creating requet queue is failed" ) );
           return KErrGeneral;
            }
       //create message queue for response request
        result = MsgQCreate(RESPONSE_QUEUE, MAX_MSG_Q_SIZE , MSG_Q_FIFO, &err);
        if(err)
           {
            iLog->Log ( _L ( "creating requet queue is failed" ) );
            return KErrGeneral;
            }
            index=0;
            memset( smsg, '\0', MAX_MSG_SIZE );
            memset( rmsg, '\0', MAX_MSG_SIZE );
            msgHdr = ( message_hdr_req* ) malloc( sizeof( message_hdr_req ) );
            memset( msgHdr, '\0', sizeof( message_hdr_req ) );
            msgHdr->message_type = EKill_Process;
            memcpy( smsg, msgHdr, sizeof( message_hdr_req ) );
            index += sizeof( message_hdr_req );
            result = MsgQSend(REQUEST_QUEUE, smsg, index, MSG_PRI_NORMAL, timeout, &err); 
            free(msgHdr);           
           return KErrNone;
            
    }


TInt Cmessagequeue_api::TestMessageQDelete( CStifItemParser& aItem )
    {
        char smsg[MAX_MSG_SIZE];
        char rmsg[MAX_MSG_SIZE];
        int index=0;
        int timeout = 100;
        int nBytes;
        int result = 0;
        int err = 0;
        int status = 0;
        int run_iso;
        FILE *fp;
        message_hdr_req *msgHdr = NULL;  
        message_hdr_resp* msg_struct = NULL;
        TInt return_value = 0;
        memset( smsg, '\0', MAX_MSG_SIZE );
        memset( rmsg, '\0', MAX_MSG_SIZE );
        //running isoserver   
        run_iso = run_isoserver(); 
        if(run_iso)
           {
           iLog->Log ( _L ( "running isolation server is failed" ) );
           return KErrGeneral;
            }             
         //create message queue for send request
        result = MsgQCreate(REQUEST_QUEUE, MAX_MSG_Q_SIZE , MSG_Q_FIFO, &err);
        if(err)
           {
           iLog->Log ( _L ( "creating requet queue is failed" ) );
           return KErrGeneral;
            }
       //create message queue for response request
        result = MsgQCreate(RESPONSE_QUEUE, MAX_MSG_Q_SIZE , MSG_Q_FIFO, &err);
        if(err)
           {
            iLog->Log ( _L ( "creating requet queue is failed" ) );
            return KErrGeneral;
            }
            index=0;
            memset( smsg, '\0', MAX_MSG_SIZE );
            memset( rmsg, '\0', MAX_MSG_SIZE );
            msgHdr = ( message_hdr_req* ) malloc( sizeof( message_hdr_req ) );
            memset( msgHdr, '\0', sizeof( message_hdr_req ) );
            msgHdr->message_type = EKill_Process;
            memcpy( smsg, msgHdr, sizeof( message_hdr_req ) );
            index += sizeof( message_hdr_req );
            result = MsgQSend(REQUEST_QUEUE, smsg, index, MSG_PRI_NORMAL, timeout, &err); 
            free(msgHdr); 
            result=MsgQDelete( REQUEST_QUEUE, &err );
            if(result)
                {
            iLog->Log ( _L ( "failing at message queue" ) );  
            return KErrGeneral;
                }
           return KErrNone;
            
    }

TInt Cmessagequeue_api::TestMessageQReceive( CStifItemParser& aItem )
    {
        char smsg[MAX_MSG_SIZE];
        char rmsg[MAX_MSG_SIZE];
        int index=0;
        int timeout = 100;
        int nBytes;
        int result = 0;
        int err = 0;
        int status = 0;
        int run_iso;
        FILE *fp;
        message_hdr_req *msgHdr = NULL;  
        message_hdr_resp* msg_struct = NULL;
        TInt return_value = 0;
        memset( smsg, '\0', MAX_MSG_SIZE );
        memset( rmsg, '\0', MAX_MSG_SIZE );
        
        //running isoserver   
        run_iso = run_isoserver(); 
        if(run_iso)
           {
           iLog->Log ( _L ( "running isolation server is failed" ) );
           return KErrGeneral;
            }             
         //create message queue for send request
        result = MsgQCreate(REQUEST_QUEUE, MAX_MSG_Q_SIZE , MSG_Q_FIFO, &err);
        if(err)
           {
           iLog->Log ( _L ( "creating requet queue is failed" ) );
           return KErrGeneral;
            }
       //create message queue for response request
        result = MsgQCreate(RESPONSE_QUEUE, MAX_MSG_Q_SIZE , MSG_Q_FIFO, &err);
        if(err)
           {
            iLog->Log ( _L ( "creating requet queue is failed" ) );
            return KErrGeneral;
            }
        //request formation 
            memset( smsg, '\0', MAX_MSG_SIZE );
            memset( rmsg, '\0', MAX_MSG_SIZE );
            
            //message header use
            msgHdr = ( message_hdr_req* ) malloc( sizeof( message_hdr_req ) );
            memset( msgHdr, '\0', sizeof( message_hdr_req ) );
            
            msgHdr->message_type = ELogin_Request;
            
            memcpy( smsg, msgHdr, sizeof( message_hdr_req ) );
            index += sizeof( message_hdr_req );
            /* Send Message to queueOne */
                
            result = MsgQSend(REQUEST_QUEUE, smsg, index, MSG_PRI_NORMAL, timeout, &err);
                
            result = MsgQReceive(RESPONSE_QUEUE, rmsg, MAX_MSG_SIZE, timeout, &err); 
                
                if (status < 0)
                {
                return  KErrGeneral;
                  
                }
            
            index=0;
            memset( smsg, '\0', MAX_MSG_SIZE );
            memset( rmsg, '\0', MAX_MSG_SIZE );
            memset( msgHdr, '\0', sizeof( message_hdr_req ) );
            msgHdr->message_type = EKill_Process;
            memcpy( smsg, msgHdr, sizeof( message_hdr_req ) );
            index += sizeof( message_hdr_req );
            result = MsgQSend(REQUEST_QUEUE, smsg, index, MSG_PRI_NORMAL, timeout, &err); 
            free(msgHdr); 
            result=MsgQDelete( REQUEST_QUEUE, &err );
            if(result)
                {
            iLog->Log ( _L ( "failing at message queue" ) );  
            return KErrGeneral;
                }
           return KErrNone;
            
    }


TInt Cmessagequeue_api::TestMessageQCheck( CStifItemParser& aItem )
    {
    char smsg[MAX_MSG_SIZE];
    char rmsg[MAX_MSG_SIZE];
    int index=0;
    int timeout = 100;
    int nBytes;
    int result = 0,r1=0 ,r2=0;
    int err = 0;
    int status = 0;
    int run_iso;
    FILE *fp;
    message_hdr_req *msgHdr = NULL;  
    message_hdr_resp* msg_struct = NULL;
    TInt return_value = 0;
    memset( smsg, '\0', MAX_MSG_SIZE );
    memset( rmsg, '\0', MAX_MSG_SIZE );
    //running isoserver   
    run_iso = run_isoserver(); 
    if(run_iso)
       {
       iLog->Log ( _L ( "running isolation server is failed" ) );
       return KErrGeneral;
        }             
     //create message queue for send request
    result = MsgQCreate(REQUEST_QUEUE, MAX_MSG_Q_SIZE , MSG_Q_FIFO, &err);
    if(err)
       {
       iLog->Log ( _L ( "creating requet queue is failed" ) );
       return KErrGeneral;
        }
   
    //request formation 
        memset( smsg, '\0', MAX_MSG_SIZE );
               
        //message header use
        msgHdr = ( message_hdr_req* ) malloc( sizeof( message_hdr_req ) );
        memset( msgHdr, '\0', sizeof( message_hdr_req ) );
        
        msgHdr->message_type = ELogin_Request;
        
        memcpy( smsg, msgHdr, sizeof( message_hdr_req ) );
        index += sizeof( message_hdr_req );
        /* Send Message to queueOne */
            
        result = MsgQSend(REQUEST_QUEUE, smsg, index, MSG_PRI_NORMAL, timeout, &err);
        
        result = MsgQSend(REQUEST_QUEUE, smsg, index, MSG_PRI_NORMAL, timeout, &err);
        
        result = MsgQSend(REQUEST_QUEUE, smsg, index, MSG_PRI_NORMAL, timeout, &err);
        
        r1 = MsgQCheck(REQUEST_QUEUE,&err);
        
        result = MsgQClean(REQUEST_QUEUE,&err);
        
        r2 = MsgQCheck(REQUEST_QUEUE,&err);
        
        if(r1==r2)
            {
            iLog->Log ( _L ( "message q clean  is failed" ) );
            return KErrGeneral;
            }
        index=0;
        memset( smsg, '\0', MAX_MSG_SIZE );
        memset( rmsg, '\0', MAX_MSG_SIZE );
        memset( msgHdr, '\0', sizeof( message_hdr_req ) );
        msgHdr->message_type = EKill_Process;
        memcpy( smsg, msgHdr, sizeof( message_hdr_req ) );
        index += sizeof( message_hdr_req );
        result = MsgQSend(REQUEST_QUEUE, smsg, index, MSG_PRI_NORMAL, timeout, &err); 
        free(msgHdr); 
        result=MsgQDelete( REQUEST_QUEUE, &err );
        if(result)
            {
        iLog->Log ( _L ( "failing at message queue" ) );  
        return KErrGeneral;
            }
       return KErrNone;
        
}

TInt Cmessagequeue_api::TestMessageQClean( CStifItemParser& aItem )
    {
    char smsg[MAX_MSG_SIZE];
    char rmsg[MAX_MSG_SIZE];
    int index=0;
    int timeout = 100;
    int nBytes;
    int result = 0,r1=0 ,r2=0;
    int err = 0;
    int status = 0;
    int run_iso;
    FILE *fp;
    message_hdr_req *msgHdr = NULL;  
    message_hdr_resp* msg_struct = NULL;
    TInt return_value = 0;
    memset( smsg, '\0', MAX_MSG_SIZE );
    memset( rmsg, '\0', MAX_MSG_SIZE );
    //running isoserver   
    run_iso = run_isoserver(); 
    if(run_iso)
       {
       iLog->Log ( _L ( "running isolation server is failed" ) );
       return KErrGeneral;
        }             
     //create message queue for send request
    result = MsgQCreate(REQUEST_QUEUE, MAX_MSG_Q_SIZE , MSG_Q_FIFO, &err);
    if(err)
       {
       iLog->Log ( _L ( "creating requet queue is failed" ) );
       return KErrGeneral;
        }
   
    //request formation 
        memset( smsg, '\0', MAX_MSG_SIZE );
               
        //message header use
        msgHdr = ( message_hdr_req* ) malloc( sizeof( message_hdr_req ) );
        memset( msgHdr, '\0', sizeof( message_hdr_req ) );
        
        msgHdr->message_type = ELogin_Request;
        
        memcpy( smsg, msgHdr, sizeof( message_hdr_req ) );
        index += sizeof( message_hdr_req );
        /* Send Message to queueOne */
            
        result = MsgQSend(REQUEST_QUEUE, smsg, index, MSG_PRI_NORMAL, timeout, &err);
        
        result = MsgQSend(REQUEST_QUEUE, smsg, index, MSG_PRI_NORMAL, timeout, &err);
        
        result = MsgQSend(REQUEST_QUEUE, smsg, index, MSG_PRI_NORMAL, timeout, &err);
        
        r1 = MsgQCheck(REQUEST_QUEUE,&err);
        
        r1 = MsgQMaxCheck(REQUEST_QUEUE,&err);
        
        result = MsgQClean(REQUEST_QUEUE,&err);
        
        r2 = MsgQCheck(REQUEST_QUEUE,&err);
        
        if(r1==r2)
            {
            iLog->Log ( _L ( "message q clean  is failed" ) );
            return KErrGeneral;
            }
        index=0;
        memset( smsg, '\0', MAX_MSG_SIZE );
        memset( rmsg, '\0', MAX_MSG_SIZE );
        memset( msgHdr, '\0', sizeof( message_hdr_req ) );
        msgHdr->message_type = EKill_Process;
        memcpy( smsg, msgHdr, sizeof( message_hdr_req ) );
        index += sizeof( message_hdr_req );
        result = MsgQSend(REQUEST_QUEUE, smsg, index, MSG_PRI_NORMAL, timeout, &err); 
        free(msgHdr); 
        result=MsgQDelete( REQUEST_QUEUE, &err );
        if(result)
            {
        iLog->Log ( _L ( "failing at message queue" ) );  
        return KErrGeneral;
            }
       return KErrNone;
        
}

TInt Cmessagequeue_api::TestMsgQMaxCheck( CStifItemParser& aItem )
    {
    char smsg[MAX_MSG_SIZE];
    char rmsg[MAX_MSG_SIZE];
    int index=0;
    int timeout = 100;
    int nBytes;
    int result = 0,r1=0 ,r2=0;
    int err = 0;
    int status = 0;
    int run_iso;
    FILE *fp;
    message_hdr_req *msgHdr = NULL;  
    message_hdr_resp* msg_struct = NULL;
    TInt return_value = 0;
    memset( smsg, '\0', MAX_MSG_SIZE );
    memset( rmsg, '\0', MAX_MSG_SIZE );
    //running isoserver   
    run_iso = run_isoserver(); 
    if(run_iso)
       {
       iLog->Log ( _L ( "running isolation server is failed" ) );
       return KErrGeneral;
        }             
     //create message queue for send request
    result = MsgQCreate(REQUEST_QUEUE, MAX_MSG_Q_SIZE , MSG_Q_FIFO, &err);
    if(err)
       {
       iLog->Log ( _L ( "creating requet queue is failed" ) );
       return KErrGeneral;
        }
   
    //request formation 
        memset( smsg, '\0', MAX_MSG_SIZE );
               
        //message header use
        msgHdr = ( message_hdr_req* ) malloc( sizeof( message_hdr_req ) );
        memset( msgHdr, '\0', sizeof( message_hdr_req ) );
        
        msgHdr->message_type = ELogin_Request;
        
        memcpy( smsg, msgHdr, sizeof( message_hdr_req ) );
        index += sizeof( message_hdr_req );
        /* Send Message to queueOne */
            
        result = MsgQSend(REQUEST_QUEUE, smsg, index, MSG_PRI_NORMAL, timeout, &err);
        
        result = MsgQSend(REQUEST_QUEUE, smsg, index, MSG_PRI_NORMAL, timeout, &err);
        
        result = MsgQSend(REQUEST_QUEUE, smsg, index, MSG_PRI_NORMAL, timeout, &err);
        
        r1 = MsgQCheck(REQUEST_QUEUE,&err);
        
        r1 = MsgQMaxCheck(REQUEST_QUEUE,&err);
        
        result = MsgQClean(REQUEST_QUEUE,&err);
        
        r2 = MsgQCheck(REQUEST_QUEUE,&err);
        
        if(r1==r2)
            {
            iLog->Log ( _L ( "message q clean  is failed" ) );
            return KErrGeneral;
            }
        index=0;
        memset( smsg, '\0', MAX_MSG_SIZE );
        memset( rmsg, '\0', MAX_MSG_SIZE );
        memset( msgHdr, '\0', sizeof( message_hdr_req ) );
        msgHdr->message_type = EKill_Process;
        memcpy( smsg, msgHdr, sizeof( message_hdr_req ) );
        index += sizeof( message_hdr_req );
        result = MsgQSend(REQUEST_QUEUE, smsg, index, MSG_PRI_NORMAL, timeout, &err); 
        free(msgHdr); 
        result=MsgQDelete( REQUEST_QUEUE, &err );
        if(result)
            {
        iLog->Log ( _L ( "failing at message queue" ) );  
        return KErrGeneral;
            }
       return KErrNone;
        
}

// -----------------------------------------------------------------------------
// Cmessagequeue_api::?member_function
// ?implementation_description
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
/*
TInt Cmessagequeue_api::?member_function(
   CItemParser& aItem )
   {

   ?code

   }
*/

// ========================== OTHER EXPORTED FUNCTIONS =========================
// None

//  [End of File] - Do not remove