camappengine/asynchfilesavequeue/tsrc/public/basic/src/AFSQTestAdd.cpp
author Pat Downey <patd@symbian.org>
Wed, 01 Sep 2010 12:23:23 +0100
branchRCL_3
changeset 21 27fe719c32e6
parent 0 9b3e960ffc8a
permissions -rw-r--r--
Revert incorrect RCL_3 drop: Revision: 201031 Kit: 201035

/*
* Copyright (c) 2002-2007 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:  FSQ Test DLL
*
*/


#include "../inc/AFSQTestAsynchSave.h"
#include <f32file.h> // for opening / creating files
#include <bautils.h> // for deleting files

void CAFSQTestAsynchSave::TestAddEmptyObjectToQueueL()
    {
    // Group:   Asynch Save
    // 
    // ID:      CAE.FM.TESTADDOBJECT.001
    // 
    // Action : Test that adding an null object to the queue will return an error.
    //      
    // Output : An error code.   

    RDebug::Print( _L("CAFSQTestAsynchSave::TestAddEmptyObjectToQueueL in") );

    TInt error = KErrNone;
    currentTest = EADD001p1;
    numSaved = 0;
    wait = ETrue;
    
    HBufC8 * myData = HBufC8::NewL(1000);
    delete myData;
    myData = NULL;
    
    TRAPD( err, 
        iFSQ = CAsynchFSQ::NewL();
        iFSQ->SetCallback( this );
        TFileName add001 = KNibblesADD001;
        error = iFSQ->SaveAndDestroy( *myData, add001);
        );
    TRAPD( err2,
        delete iFSQ;
        iFSQ = NULL;
        );
    
    RDebug::Print( _L("CAFSQTestAsynchSave::TestAddEmptyObjectToQueueL isKErrArgument=%d notErr=%d notErr2=%d"), (error == KErrArgument), !err, !err2 );
    
    //do not delay assert because queue should not be active
    assertL( (error == KErrArgument) && !err && !err2);
    
    RDebug::Print( _L("CAFSQTestAsynchSave::TestAddEmptyObjectToQueueL out") );
    }

void CAFSQTestAsynchSave::TestAddObjectToEmptyQueueL()
    {
    // Group:   Asynch Save
    // 
    // ID:      CAE.FM.TESTADDOBJECT.002
    // 
    // Action : Test that adding an object to an empty queue will at least start OK.
    //      
    // Output : An error code.  

    RDebug::Print( _L("CAFSQTestAsynchSave::TestAddObjectToEmptyQueueL in") );

    TInt error = KErrNone;
    currentTest = EADD002p1;
    numSaved = 0;
    wait = ETrue;

    // Read the file to be used in testing.
    TFileName aFilename = KNibbles;
    RFs aFs;
    User::LeaveIfError(aFs.Connect());
    RFile file;
    TInt connectErr = file.Open(aFs, aFilename, EFileRead);
    TInt iSize;   
    file.Size(iSize);
    HBufC8* buf = HBufC8::NewL(iSize);
    TPtr8  myData = buf->Des();
    if ( !connectErr )
        {
        file.Read( myData );
        }
    file.Close();
    
    // Delete the file if it exists
    TFileName add002 = KNibblesADD002;
    RFile deleter;
    TInt isDeleted = deleter.Open(aFs, add002, EFileRead);
    deleter.Close();

    if ( isDeleted == KErrNone )
        {
        // if no error, assume the file exists, so delete it
    	RDebug::Print( _L("CAFSQTestAsynchSave::TestAddObjectToEmptyQueueL exists, deleting") );
        BaflUtils ba;
        ba.DeleteFile(aFs, add002);
        }
    aFs.Close();
    
    // Save    
    TRAPD( err, 
        iFSQ = CAsynchFSQ::NewL();        
        //add this as a callback
        iFSQ->SetCallback( this );
        error = iFSQ->SaveAndDestroy( *buf, add002 );
        buf = NULL; // transfer ownership 
        );
    
    RDebug::Print( _L("CAFSQTestAsynchSave::TestAddObjectToEmptyQueueL isKErrNone=%d notErr=%d"), (error == KErrNone), !err );
   
    delayedBool = ( (error == KErrNone) && !err );
    //wait for callback to assert
    WaitForAsynchCompleteL();
    
    RDebug::Print( _L("CAFSQTestAsynchSave::TestAddObjectToEmptyQueueL out") );
    }

void CAFSQTestAsynchSave::TestAddObjectToEmptyQueueWillSaveL()
    {
    // Group:   Asynch Save
    // 
    // ID:      CAE.FM.TESTADDOBJECT.003
    // 
    // Action : Test that adding an object to an empty queue will finish OK.
    //      
    // Output : Asynchronous report.    

    RDebug::Print( _L("CAFSQTestAsynchSave::TestAddObjectToEmptyQueueWillSaveL in") );

    currentTest = EADD003p1;
    numSaved = 0;
    wait = ETrue;
    
    // Read the file to be used in testing.
    TFileName aFilename = KNibbles;
    RFs aFs;
    User::LeaveIfError(aFs.Connect());
    RFile file;
    TInt connectErr = file.Open(aFs, aFilename, EFileRead);
    TInt iSize;   
    file.Size(iSize);
    HBufC8* buf = HBufC8::NewL(iSize);
    TPtr8  myData = buf->Des();
    if ( !connectErr )
        {
        file.Read( myData );
        }
    file.Close();
    
    // Delete the file if it exists
    TFileName add003 = KNibblesADD003;
    RFile deleter;
    TInt isDeleted = deleter.Open(aFs, add003, EFileRead);
    deleter.Close();
    if ( isDeleted == KErrNone )
        {
        // if no error, assume the file exists, so delete it
    	RDebug::Print( _L("CAFSQTestAsynchSave::TestAddObjectToEmptyQueueL exists, deleting") );
        BaflUtils ba;
        ba.DeleteFile(aFs, add003);
        }
    aFs.Close();
    
    TRAP_IGNORE(  
        iFSQ = CAsynchFSQ::NewL();
        //add this as a callback
        iFSQ->SetCallback( this );
        iFSQ->SaveAndDestroy( *buf, add003 );
        buf = NULL; // transfer ownership
        );
    
    //wait for callback to assert
    WaitForAsynchCompleteL();
    
    RDebug::Print( _L("CAFSQTestAsynchSave::TestAddObjectToEmptyQueueWillSaveL out") );
    }

void CAFSQTestAsynchSave::TestAddObjectToNonEmptyQueueL()
    {
    // Group:   Asynch Save
    // 
    // ID:      CAE.FM.TESTADDOBJECT.004
    // 
    // Action : Test that adding an object to a non empty queue will at least start OK.
    //      
    // Output : An error code.

    RDebug::Print( _L("CAFSQTestAsynchSave::TestAddObjectToNonEmptyQueueL in") );

    TInt error = KErrNone;
    TInt error2 = KErrNone;
    currentTest = EADD004p1;
    numSaved = 0;
    numToSave = 2;
    wait = ETrue;
   
    // Read the file to be used in testing.
    TFileName aFilename = KNibbles;
    RFs aFs;
    User::LeaveIfError(aFs.Connect());
    RFile file;
    TInt connectErr = file.Open(aFs, aFilename,EFileRead);
    TInt iSize;   
    file.Size(iSize);
    HBufC8* buf = HBufC8::NewL(iSize);
    TPtr8  myData = buf->Des();
    if ( !connectErr )
        {
        file.Read( myData );
        }
    file.Close();

    // Read the file to be used in testing.
    TFileName aFilename2 = KNibbles2;
    RFile file2;
    TInt connectErr2 = file2.Open(aFs, aFilename2,EFileRead);
    file2.Size(iSize);
    HBufC8* buf2 = HBufC8::NewL(iSize);
    TPtr8  myData2 = buf2->Des();
    if ( !connectErr2 )
        {
        file2.Read( myData2 );
        }
    file2.Close();

    // Delete the file if it exists
    TFileName add004A = KNibblesADD004A;
    RFile deleter;
    TInt isDeleted = deleter.Open(aFs, add004A, EFileRead);
    deleter.Close();
    if ( isDeleted == KErrNone )
        {
        // if no error, assume the file exists, so delete it
    	RDebug::Print( _L("CAFSQTestAsynchSave::TestAddObjectToEmptyQueueL 1st exists, deleting") );
        BaflUtils ba;
        ba.DeleteFile(aFs, add004A);
        }

    // Delete the file if it exists
    TFileName add004B = KNibblesADD004B;
    RFile deleter2;
    TInt isDeleted2 = deleter2.Open(aFs, add004B, EFileRead);
    deleter2.Close();
    if ( isDeleted2 == KErrNone )
        {
        // if no error, assume the file exists, so delete it
    	RDebug::Print( _L("CAFSQTestAsynchSave::TestAddObjectToEmptyQueueL 2nd exists, deleting") );
        BaflUtils ba;
        ba.DeleteFile(aFs, add004B);
        }
    aFs.Close();

    // Save    
    TRAPD( err, 
        iFSQ = CAsynchFSQ::NewL();
        iFSQ->SetCallback( this );
        error = iFSQ->SaveAndDestroy( *buf, add004A );
        buf = NULL; // transfer ownership
        error2 = iFSQ->SaveAndDestroy( *buf2, add004B );
        buf2 = NULL; // transfer ownership
        );
    
    RDebug::Print( _L("CAFSQTestAsynchSave::TestAddObjectToNonEmptyQueueL isKErrNone=%d is2KErrNone=%d notErr=%d"), (error == KErrNone), (error2 == KErrNone), !err );
    
    delayedBool = ( (error == KErrNone) && (error2 == KErrNone) && (!err) );
    //wait for callback to assert
    WaitForAsynchCompleteL();
    
    RDebug::Print( _L("CAFSQTestAsynchSave::TestAddObjectToNonEmptyQueueL out") );
    }

void CAFSQTestAsynchSave::TestAddObjectToNonEmptyQueueWillSaveL()
    {
    // Group:   Asynch Save
    // 
    // ID:      CAE.FM.TESTADDOBJECT.005
    // 
    // Action : Test that adding an object to a non empty queue will finish OK.
    //      
    // Output : Asynchronous report.   
	
    RDebug::Print( _L("CAFSQTestAsynchSave::TestAddObjectToNonEmptyQueueWillSaveL in") );

    //TInt error = KErrNone;
    currentTest = EADD005p1;
    numSaved = 0;
    numToSave = 2;
    wait = ETrue;
    
    // Read the file to be used in testing.
    TFileName aFilename = KNibbles;
    RFs aFs;
    User::LeaveIfError(aFs.Connect());
    RFile file;
    TInt connectErr = file.Open(aFs, aFilename,EFileRead);
    TInt iSize;   
    file.Size(iSize);
    HBufC8* buf = HBufC8::NewL(iSize);
    TPtr8  myData = buf->Des();
    if ( !connectErr )
        {
        file.Read( myData );
        }
    file.Close();

    // Read the file to be used in testing.
    TFileName aFilename2 = KNibbles2;
    RFile file2;
    TInt connectErr2 = file2.Open(aFs, aFilename2,EFileRead);
    file2.Size(iSize);
    HBufC8* buf2 = HBufC8::NewL(iSize);
    TPtr8  myData2 = buf2->Des();
    if ( !connectErr2 )
        {
        file2.Read( myData2 );
        }
    file2.Close();

    // Delete the file if it exists
    TFileName add005A = KNibblesADD005A;
    RFile deleter;
    TInt isDeleted = deleter.Open(aFs, add005A, EFileRead);
    deleter.Close();
    if ( isDeleted == KErrNone )
        {
        // if no error, assume the file exists, so delete it
    	RDebug::Print( _L("CAFSQTestAsynchSave::TestAddObjectToNonEmptyQueueWillSaveL 1st exists, deleting") );
        BaflUtils ba;
        ba.DeleteFile(aFs, add005A);
        }

    // Delete the file if it exists
    TFileName add005B = KNibblesADD005B;
    RFile deleter2;
    TInt isDeleted2 = deleter2.Open(aFs, add005B, EFileRead);
    deleter2.Close();
    if ( isDeleted2 == KErrNone )
        {
        // if no error, assume the file exists, so delete it
    	RDebug::Print( _L("CAFSQTestAsynchSave::TestAddObjectToNonEmptyQueueWillSaveL 2nd exists, deleting") );
        BaflUtils ba;
        ba.DeleteFile(aFs, add005B);
        }
    aFs.Close();

    // Save    
    TRAPD( err, 
        iFSQ = CAsynchFSQ::NewL();
        iFSQ->SetCallback( this );
        iFSQ->SaveAndDestroy( *buf, add005A );
        buf = NULL; // transfer ownership
        iFSQ->SaveAndDestroy( *buf2, add005B );
        buf2 = NULL; // transfer ownership
        );
    
    RDebug::Print( _L("CAFSQTestAsynchSave::TestAddObjectToNonEmptyQueueWillSaveL notErr=%d"), !err );
    
    //wait for callback to assert
    WaitForAsynchCompleteL();
    
    RDebug::Print( _L("CAFSQTestAsynchSave::TestAddObjectToNonEmptyQueueWillSaveL out") );
    }

void CAFSQTestAsynchSave::TestAddObjectThatExistsAlreadyL()
    {
    // Group:   Asynch Save
    // 
    // ID:      CAE.FM.TESTADDOBJECT.006
    // 
    // Action : Test that adding an object to an empty queue which exists int the file
    //          system will report KErrAlreadyExists.
    //      
    // Output : An error code.  

    RDebug::Print( _L("CAFSQTestAsynchSave::TestAddObjectThatExistsAlready in") );

    TInt error = KErrNone;
    currentTest = EADD006p1;
    numSaved = 0;
    wait = ETrue;

    // Read the file to be used in testing.
    TFileName aFilename = KNibbles;
    RFs aFs;
    User::LeaveIfError(aFs.Connect());
    RFile file;
    TInt connectErr = file.Open(aFs, aFilename,EFileRead);
    TInt iSize;   
    file.Size(iSize);
    HBufC8* buf = HBufC8::NewL(iSize);
    TPtr8  myData = buf->Des();
    if ( !connectErr )
        {
        file.Read( myData );
        }
    file.Close();

    // Delete the file if it exists
    TFileName add006 = KNibblesADD006;
    RFile deleter;
    TInt isDeleted = deleter.Open(aFs, add006, EFileRead);
    deleter.Close();
    if ( isDeleted == KErrNone )
        {
        // if no error, assume the file exists, so delete it
    	RDebug::Print( _L("CAFSQTestAsynchSave::TestAddObjectThatExistsAlreadyL exists, deleting") );
        BaflUtils ba;
        ba.DeleteFile(aFs, add006);
        }
    aFs.Close();

    // Write the file to be used in testing
    TInt err2 = KErrNone;
    RFs fsSession;
    err2 = fsSession.Connect();
    RFile myFile;
    if ( !err2 )
        {
        err2 = myFile.Create( fsSession, add006, 
                             EFileStream | EFileShareExclusive | EFileWrite );
        }
    if( !err2 )
        {
        err2 = myFile.Write( myData );
        }
    if( !err2 )
        {
        err2 = myFile.Flush();
        }
	myFile.Close();
	fsSession.Close();
	
    // Reuse the file name, to write where it exists.
    TRAPD( err, 
        iFSQ = CAsynchFSQ::NewL();
        //add this as a callback
        iFSQ->SetCallback( this );
        error = iFSQ->SaveAndDestroy( *buf, add006, EFalse );
        buf = NULL; // transfer ownership 
        );
    
    RDebug::Print( _L("CAFSQTestAsynchSave::TestAddObjectThatExistsAlreadyL isKErrNone=%d notErr=%d"), (error == KErrNone), !err );
   
    delayedBool = ( (error == KErrNone) && !err );
    //wait for callback to assert
    WaitForAsynchCompleteL();
    
    RDebug::Print( _L("CAFSQTestAsynchSave::TestAddObjectThatExistsAlreadyL out") );
    }


void CAFSQTestAsynchSave::TestAddObjectToEmptyQueueLManualStart()
    {
    // Group:   Asynch Save
    // 
    // ID:      CAE.FM.TESTADDOBJECT.007
    // 
    // Action : Test that adding an object to an empty manual queue will be OK.
    //      
    // Output : An error code.  

    RDebug::Print( _L("CAFSQTestAsynchSave::TestAddObjectToEmptyQueueLManualStart in") );

    TInt error = KErrNone;
    TInt error2 = KErrNone;
    currentTest = EADD007p1;
    numSaved = 0;
    wait = ETrue;

    // Read the file to be used in testing.
    TFileName aFilename = KNibbles;
    RFs aFs;
    User::LeaveIfError(aFs.Connect());
    RFile file;
    TInt connectErr = file.Open(aFs, aFilename, EFileRead);
    TInt iSize;   
    file.Size(iSize);
    HBufC8* buf = HBufC8::NewL(iSize);
    TPtr8  myData = buf->Des();
    if ( !connectErr )
        {
        file.Read( myData );
        }
    file.Close();
    
    // Delete the file if it exists
    TFileName add007 = KNibblesADD007;
    RFile deleter;
    TInt isDeleted = deleter.Open(aFs, add007, EFileRead);
    deleter.Close();

    if ( isDeleted == KErrNone )
        {
        // if no error, assume the file exists, so delete it
        RDebug::Print( _L("CAFSQTestAsynchSave::TestAddObjectToEmptyQueueLManualStart exists, deleting") );
        BaflUtils ba;
        ba.DeleteFile(aFs, add007);
        }
    aFs.Close();
    
    // Save    
    TRAPD( err, 
        iFSQ = CAsynchFSQ::NewL();        
        //add this as a callback
        iFSQ->SetCallback( this );
        iFSQ->SetManualStart( ETrue );
        error = iFSQ->SaveAndDestroy( *buf, add007 );
        buf = NULL; // transfer ownership 
        error2 = iFSQ->Go();
        );
    
    RDebug::Print( _L("CAFSQTestAsynchSave::TestAddObjectToEmptyQueueLManualStart isKErrNone=%d notErr=%d"), ((error == KErrNone) && (error2 == KErrNone)), !err );
   
    delayedBool = ( (error == KErrNone) && (error2 == KErrNone) && !err );
    //wait for callback to assert
    WaitForAsynchCompleteL();
    
    RDebug::Print( _L("CAFSQTestAsynchSave::TestAddObjectToEmptyQueueLManualStart out") );
    }