commsconfig/commsdatabaseshim/TE_commdb/src/Step_046_xx.cpp
author hgs
Mon, 06 Sep 2010 13:49:23 +0100
changeset 72 ae47d0499bee
permissions -rw-r--r--
201033_02
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
72
ae47d0499bee 201033_02
hgs
parents:
diff changeset
     1
//
ae47d0499bee 201033_02
hgs
parents:
diff changeset
     2
// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
ae47d0499bee 201033_02
hgs
parents:
diff changeset
     3
// All rights reserved.
ae47d0499bee 201033_02
hgs
parents:
diff changeset
     4
// This component and the accompanying materials are made available
ae47d0499bee 201033_02
hgs
parents:
diff changeset
     5
// under the terms of "Eclipse Public License v1.0"
ae47d0499bee 201033_02
hgs
parents:
diff changeset
     6
// which accompanies this distribution, and is available
ae47d0499bee 201033_02
hgs
parents:
diff changeset
     7
// at the URL "http://www.eclipse.org/legal/epl-v10.html".
ae47d0499bee 201033_02
hgs
parents:
diff changeset
     8
//
ae47d0499bee 201033_02
hgs
parents:
diff changeset
     9
// Initial Contributors:
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    10
// Nokia Corporation - initial contribution.
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    11
//
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    12
// Contributors:
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    13
//
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    14
// Description:
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    15
//
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    16
//
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    17
//
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    18
// This contains CommDb Unit Test Cases 046.XX
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    19
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    20
// EPOC includes
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    21
#include <e32base.h>
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    22
#include <commdb.h>
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    23
#include <d32comm.h>
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    24
#include <cdbstore.h>
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    25
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    26
// Test system includes
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    27
#include "Teststepcommdb.h"
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    28
#include "Step_046_xx.h"
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    29
#include <e32math.h>
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    30
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    31
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    32
const TInt KTest04605Repeats = 20;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    33
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    34
/////////////////////
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    35
//	Test step 046.01
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    36
/////////////////////
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    37
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    38
// constructor
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    39
CCommDbTest046_01::CCommDbTest046_01()
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    40
	{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    41
	// store the name of this test case
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    42
	SetTestStepName(_L("step_046_01"));
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    43
	}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    44
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    45
// destructor
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    46
CCommDbTest046_01::~CCommDbTest046_01()
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    47
	{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    48
	}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    49
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    50
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    51
TVerdict CCommDbTest046_01::doTestStepPreambleL()
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    52
	{	
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    53
	openDbL();
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    54
        SetTestStepResult(EPass);	return TestStepResult();
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    55
	}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    56
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    57
TInt CCommDbTest046_01::executeStepL()
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    58
	{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    59
	TInt ret=KErrGeneral;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    60
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    61
	//This step checks that record id's are created in the expected manner,
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    62
	//and that the record cursor also behaves as expected ie it moves to
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    63
	//the next record, when the record it points to is deleted.
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    64
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    65
	iTheView = iTheDb->OpenTableLC( TPtrC(DIAL_OUT_ISP) );
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    66
	CleanupStack::Pop(iTheView);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    67
	//Insert 4 records checking the id each time
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    68
	TUint32 id;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    69
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    70
	CDBLEAVE(iTheView->InsertRecord( id ), KErrNone);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    71
	if ( id != 1 )
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    72
		User::Leave( ret );
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    73
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    74
	iTheView->WriteTextL(TPtrC(COMMDB_NAME),_L("My Service #1"));
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    75
	iTheView->WriteBoolL(TPtrC(ISP_DIAL_RESOLUTION),ETrue);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    76
	iTheView->WriteBoolL(TPtrC(ISP_USE_LOGIN_SCRIPT),EFalse);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    77
	iTheView->WriteBoolL(TPtrC(ISP_PROMPT_FOR_LOGIN),ETrue);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    78
//	iTheView->WriteTextL(TPtrC(ISP_IF_NAME),_L("ppp"));
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    79
	iTheView->WriteBoolL(TPtrC(ISP_IF_PROMPT_FOR_AUTH),ETrue);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    80
	iTheView->WriteBoolL(TPtrC(ISP_IP_ADDR_FROM_SERVER),ETrue);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    81
	iTheView->WriteBoolL(TPtrC(ISP_IP_DNS_ADDR_FROM_SERVER),ETrue);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    82
	iTheView->WriteBoolL(TPtrC(ISP_IP6_DNS_ADDR_FROM_SERVER),ETrue);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    83
	CDBLEAVE( iTheView->PutRecordChanges(), KErrNone );
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    84
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    85
	CDBLEAVE(iTheView->InsertRecord( id ), KErrNone);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    86
	if ( id != 2 )
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    87
		User::Leave( ret );
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    88
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    89
	iTheView->WriteTextL(TPtrC(COMMDB_NAME),_L("My Service #2"));
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    90
	iTheView->WriteBoolL(TPtrC(ISP_DIAL_RESOLUTION),ETrue);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    91
	iTheView->WriteBoolL(TPtrC(ISP_USE_LOGIN_SCRIPT),EFalse);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    92
	iTheView->WriteBoolL(TPtrC(ISP_PROMPT_FOR_LOGIN),ETrue);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    93
//	iTheView->WriteTextL(TPtrC(ISP_IF_NAME),_L("ppp"));
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    94
	iTheView->WriteBoolL(TPtrC(ISP_IF_PROMPT_FOR_AUTH),ETrue);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    95
	iTheView->WriteBoolL(TPtrC(ISP_IP_ADDR_FROM_SERVER),ETrue);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    96
	iTheView->WriteBoolL(TPtrC(ISP_IP_DNS_ADDR_FROM_SERVER),ETrue);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    97
	iTheView->WriteBoolL(TPtrC(ISP_IP6_DNS_ADDR_FROM_SERVER),ETrue);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    98
	CDBLEAVE( iTheView->PutRecordChanges(), KErrNone );
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    99
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   100
	CDBLEAVE(iTheView->InsertRecord( id ), KErrNone);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   101
	if ( id !=3 )
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   102
		User::Leave( ret );
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   103
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   104
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   105
	iTheView->WriteTextL(TPtrC(COMMDB_NAME),_L("My Service #3"));
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   106
	iTheView->WriteBoolL(TPtrC(ISP_DIAL_RESOLUTION),ETrue);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   107
	iTheView->WriteBoolL(TPtrC(ISP_USE_LOGIN_SCRIPT),EFalse);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   108
	iTheView->WriteBoolL(TPtrC(ISP_PROMPT_FOR_LOGIN),ETrue);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   109
//	iTheView->WriteTextL(TPtrC(ISP_IF_NAME),_L("ppp"));
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   110
	iTheView->WriteBoolL(TPtrC(ISP_IF_PROMPT_FOR_AUTH),ETrue);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   111
	iTheView->WriteBoolL(TPtrC(ISP_IP_ADDR_FROM_SERVER),ETrue);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   112
	iTheView->WriteBoolL(TPtrC(ISP_IP_DNS_ADDR_FROM_SERVER),ETrue);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   113
	iTheView->WriteBoolL(TPtrC(ISP_IP6_DNS_ADDR_FROM_SERVER),ETrue);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   114
	CDBLEAVE( iTheView->PutRecordChanges(), KErrNone );
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   115
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   116
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   117
	CDBLEAVE(iTheView->InsertRecord( id ), KErrNone);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   118
	if ( id !=4 )
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   119
		User::Leave( ret );
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   120
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   121
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   122
	iTheView->WriteTextL(TPtrC(COMMDB_NAME),_L("My Service #4"));
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   123
	iTheView->WriteBoolL(TPtrC(ISP_DIAL_RESOLUTION),ETrue);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   124
	iTheView->WriteBoolL(TPtrC(ISP_USE_LOGIN_SCRIPT),EFalse);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   125
	iTheView->WriteBoolL(TPtrC(ISP_PROMPT_FOR_LOGIN),ETrue);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   126
//	iTheView->WriteTextL(TPtrC(ISP_IF_NAME),_L("ppp"));
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   127
	iTheView->WriteBoolL(TPtrC(ISP_IF_PROMPT_FOR_AUTH),ETrue);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   128
	iTheView->WriteBoolL(TPtrC(ISP_IP_ADDR_FROM_SERVER),ETrue);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   129
	iTheView->WriteBoolL(TPtrC(ISP_IP_DNS_ADDR_FROM_SERVER),ETrue);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   130
	iTheView->WriteBoolL(TPtrC(ISP_IP6_DNS_ADDR_FROM_SERVER),ETrue);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   131
	CDBLEAVE( iTheView->PutRecordChanges(), KErrNone );
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   132
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   133
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   134
	//Open a new view and move to the last record
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   135
	delete iTheView;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   136
	iTheView = 0;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   137
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   138
	iTheView = iTheDb->OpenTableLC( TPtrC(DIAL_OUT_ISP) );
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   139
	CleanupStack::Pop(iTheView);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   140
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   141
	CDBLEAVE( iTheView->GotoFirstRecord(), KErrNone );
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   142
	CDBLEAVE( iTheView->GotoNextRecord(), KErrNone );
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   143
	CDBLEAVE( iTheView->GotoNextRecord(), KErrNone );
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   144
	CDBLEAVE( iTheView->GotoNextRecord(), KErrNone );
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   145
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   146
	//Delete the last record
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   147
	CDBLEAVE( iTheView->DeleteRecord(), KErrNone );
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   148
	CDBLEAVE( iTheView->GotoPreviousRecord(), KErrNone);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   149
	//Check the cursor is now pointing at the previous record
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   150
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   151
	TUint32 value;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   152
	iTheView->ReadUintL( TPtrC(COMMDB_ID), value );
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   153
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   154
	if ( value != 3 )
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   155
		User::Leave( ret );
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   156
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   157
	//Goto the first record and delete that
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   158
	CDBLEAVE( iTheView->GotoFirstRecord(), KErrNone );
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   159
	CDBLEAVE( iTheView->DeleteRecord(), KErrNone );
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   160
	CDBLEAVE( iTheView->GotoNextRecord(), KErrNone );
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   161
	//Check the cursor is now pointing at the second record
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   162
	
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   163
	iTheView->ReadUintL( TPtrC(COMMDB_ID), value );
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   164
	if ( value != 2 )
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   165
		User::Leave( ret );
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   166
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   167
	//Insert a new record and check the id is correct
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   168
	
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   169
	CDBLEAVE(iTheView->InsertRecord( id ), KErrNone);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   170
	/* 
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   171
	DBMS supports cyclic id allocation..commsdat was forced
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   172
	to do that too..but looks like we do reuse the record ids
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   173
	if the deleted record was the last one. I think we should forget about
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   174
	this slip because 
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   175
		a)Its not a behaviour worth having for us and we got away with it anyway
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   176
		b)None of our client seem to give a damn about this for last few years  
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   177
					
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   178
	if ( id != 5 )
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   179
		User::Leave( ret );*/
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   180
		
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   181
	if ( id != 4 )
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   182
		User::Leave( ret );	
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   183
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   184
	iTheView->WriteTextL(TPtrC(COMMDB_NAME),_L("My Service #5"));
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   185
	iTheView->WriteBoolL(TPtrC(ISP_DIAL_RESOLUTION),ETrue);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   186
	iTheView->WriteBoolL(TPtrC(ISP_USE_LOGIN_SCRIPT),EFalse);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   187
	iTheView->WriteBoolL(TPtrC(ISP_PROMPT_FOR_LOGIN),ETrue);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   188
//	iTheView->WriteTextL(TPtrC(ISP_IF_NAME),_L("ppp"));
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   189
	iTheView->WriteBoolL(TPtrC(ISP_IF_PROMPT_FOR_AUTH),ETrue);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   190
	iTheView->WriteBoolL(TPtrC(ISP_IP_ADDR_FROM_SERVER),ETrue);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   191
	iTheView->WriteBoolL(TPtrC(ISP_IP_DNS_ADDR_FROM_SERVER),ETrue);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   192
	iTheView->WriteBoolL(TPtrC(ISP_IP6_DNS_ADDR_FROM_SERVER),ETrue);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   193
	CDBLEAVE( iTheView->PutRecordChanges(), KErrNone );
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   194
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   195
	ret = KErrNone; //Passed if we get this far
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   196
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   197
	return ret;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   198
	}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   199
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   200
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   201
TVerdict CCommDbTest046_01::doTestStepL( )
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   202
	{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   203
	INFO_PRINTF1(_L("Step 046.01 called "));
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   204
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   205
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   206
	if ( executeStepL() == KErrNone )
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   207
		SetTestStepResult(EPass);	else
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   208
		SetTestStepResult(EFail);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   209
	return TestStepResult();
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   210
	}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   211
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   212
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   213
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   214
/////////////////////
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   215
//	Test step 046.02
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   216
/////////////////////
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   217
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   218
// constructor
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   219
CCommDbTest046_02::CCommDbTest046_02()
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   220
	{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   221
	// store the name of this test case
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   222
	SetTestStepName(_L("step_046_02"));
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   223
	}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   224
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   225
// destructor
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   226
CCommDbTest046_02::~CCommDbTest046_02()
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   227
	{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   228
	}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   229
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   230
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   231
TVerdict CCommDbTest046_02::doTestStepPreambleL()
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   232
	{	
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   233
	openDbL();
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   234
        SetTestStepResult(EPass);	return TestStepResult();
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   235
	}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   236
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   237
void CCommDbTest046_02::insertTestRecordsL( TUint aQuantity )
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   238
	{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   239
	TUint count;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   240
	TUint32 id;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   241
	CCommsDbTableView* dbView;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   242
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   243
	dbView  = iTheDb->OpenTableLC( TPtrC(DIAL_OUT_ISP) );
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   244
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   245
	for( count=0; count < aQuantity; count++ )
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   246
		{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   247
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   248
		CDBLEAVE(dbView->InsertRecord( id ), KErrNone);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   249
		dbView->WriteTextL(TPtrC(COMMDB_NAME),_L("My Service Test Record"));
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   250
		dbView->WriteBoolL(TPtrC(ISP_DIAL_RESOLUTION),ETrue);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   251
		dbView->WriteBoolL(TPtrC(ISP_USE_LOGIN_SCRIPT),EFalse);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   252
		dbView->WriteBoolL(TPtrC(ISP_PROMPT_FOR_LOGIN),ETrue);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   253
//		dbView->WriteTextL(TPtrC(ISP_IF_NAME),_L("ppp"));
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   254
		dbView->WriteBoolL(TPtrC(ISP_IF_PROMPT_FOR_AUTH),ETrue);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   255
		dbView->WriteBoolL(TPtrC(ISP_IP_ADDR_FROM_SERVER),ETrue);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   256
		dbView->WriteBoolL(TPtrC(ISP_IP_DNS_ADDR_FROM_SERVER),ETrue);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   257
		dbView->WriteBoolL(TPtrC(ISP_IP6_DNS_ADDR_FROM_SERVER),ETrue);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   258
		CDBLEAVE( dbView->PutRecordChanges(), KErrNone );
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   259
		
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   260
		}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   261
	
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   262
	CleanupStack::PopAndDestroy(dbView);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   263
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   264
	}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   265
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   266
void CCommDbTest046_02::deleteLastRecordsL( TUint aQuantity )
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   267
	{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   268
	TUint count;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   269
	TInt ret = KErrGeneral;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   270
	CCommsDbTableView* dbView;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   271
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   272
	dbView  = iTheDb->OpenTableLC( TPtrC(DIAL_OUT_ISP) );
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   273
	CDBLEAVE( dbView->GotoFirstRecord(), KErrNone );
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   274
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   275
	//Move to the end of the view
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   276
	do
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   277
	{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   278
		ret = dbView->GotoNextRecord();
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   279
	}while ( ret != KErrNotFound );
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   280
	
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   281
	//Need to move the cursor back into the view
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   282
	dbView->GotoPreviousRecord();
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   283
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   284
	//Now delete the record and move back one
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   285
	for ( count=0; count< aQuantity; count++)
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   286
		{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   287
		CDBLEAVE( dbView->DeleteRecord(), KErrNone );
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   288
		CDBLEAVE( dbView->GotoPreviousRecord(), KErrNone );
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   289
		}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   290
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   291
	CleanupStack::PopAndDestroy(dbView);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   292
	}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   293
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   294
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   295
TInt CCommDbTest046_02::executeStepL()
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   296
	{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   297
	TInt ret=KErrGeneral, count;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   298
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   299
	// NOTE: count limit reduced from 100 to 5, because commsdat has an id limit
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   300
	// of 128 when inserting records.  After this, you get a KErrOverflow from
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   301
	// CCommsDbTableView::InsertRecord() in insertTestRecordsL(...).
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   302
	for ( count=0; count < 5; count++ )
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   303
		{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   304
		insertTestRecordsL( 10 );
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   305
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   306
		//Start a transaction, write 10 records, then rollback
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   307
		CDBLEAVE( iTheDb->BeginTransaction(), KErrNone );
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   308
		insertTestRecordsL( 10 );
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   309
		iTheDb->RollbackTransaction();
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   310
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   311
		//Start a transaction, write 10 records, delete them, then rollback
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   312
		CDBLEAVE( iTheDb->BeginTransaction(), KErrNone );
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   313
		insertTestRecordsL( 10 );
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   314
		deleteLastRecordsL( 10 );
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   315
		iTheDb->RollbackTransaction();
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   316
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   317
		//Start a transaction, write 10 records and commit them
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   318
		CDBLEAVE( iTheDb->BeginTransaction(), KErrNone );
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   319
		insertTestRecordsL( 10 );
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   320
		CDBLEAVE( iTheDb->CommitTransaction(), KErrNone );
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   321
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   322
		}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   323
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   324
	ret = KErrNone;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   325
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   326
	return ret;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   327
	}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   328
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   329
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   330
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   331
TVerdict CCommDbTest046_02::doTestStepL( )
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   332
	{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   333
	INFO_PRINTF1(_L("Step 046.02 called "));
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   334
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   335
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   336
	if ( executeStepL() == KErrNone )
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   337
		SetTestStepResult(EPass);	else
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   338
		SetTestStepResult(EFail);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   339
	return TestStepResult();
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   340
	}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   341
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   342
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   343
///////////////////////////////////////////////////////////////////////////
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   344
//Thread1 does the first right, our main thread then does the second.
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   345
//They continue to take it in turns to do writes
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   346
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   347
CCommDbTest046_03::CCommDbTest046_03()
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   348
	{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   349
	// store the name of this test case
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   350
	SetTestStepName(_L("step_046_03"));
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   351
	}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   352
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   353
CCommDbTest046_03::~CCommDbTest046_03()
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   354
	{}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   355
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   356
TVerdict CCommDbTest046_03::doTestStepL( void )
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   357
	{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   358
	if(executeStepL()!=KErrNone)
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   359
         SetTestStepResult(EFail);        SetTestStepResult(EPass);	return TestStepResult();
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   360
	}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   361
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   362
TVerdict CCommDbTest046_03::doTestStepPreambleL()
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   363
	{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   364
	iTheDb=CCommsDatabase::NewL();
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   365
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   366
        SetTestStepResult(EPass);	return TestStepResult();
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   367
	}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   368
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   369
TInt CCommDbTest046_03::Thread1Function(TAny* aPtr)
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   370
	{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   371
	CTrapCleanup* cleanup=CTrapCleanup::New();
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   372
	if (cleanup==NULL)
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   373
		return(KErrNoMemory);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   374
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   375
	TRAPD(err, DoThread1TestL(aPtr));
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   376
	if(err != KErrNone)
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   377
		{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   378
		return err;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   379
		}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   380
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   381
	delete cleanup;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   382
	return(KErrNone);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   383
	}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   384
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   385
void CCommDbTest046_03::DoThread1TestL(TAny* aPtr)
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   386
	{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   387
	TThreadInfo* syncInfo = (TThreadInfo*) aPtr;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   388
	TRequestStatus localStatus(KRequestPending);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   389
	syncInfo->iThread1Status = &localStatus;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   390
	
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   391
	CCommsDatabase* cDb = CCommsDatabase::NewL();
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   392
	CleanupStack::PushL(cDb);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   393
	CCommsDbTableView* modemTable = cDb->OpenTableLC(TPtrC(MODEM_BEARER));
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   394
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   395
	TUint32 dummyId;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   396
	modemTable->InsertRecord(dummyId);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   397
	modemTable->WriteTextL(TPtrC(COMMDB_NAME),_L("Thread1, Entry1"));
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   398
	User::LeaveIfError(modemTable->PutRecordChanges());
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   399
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   400
	//this thread is the first on to do all its rights
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   401
	CleanupStack::PopAndDestroy(modemTable);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   402
	CleanupStack::PopAndDestroy(cDb);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   403
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   404
	syncInfo->iMainThread.RequestComplete(syncInfo->iMainThreadStatus, KErrNone);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   405
	}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   406
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   407
TInt CCommDbTest046_03::executeStepL()
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   408
	{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   409
	//First thing is to empty the modem table
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   410
	CCommsDbTableView* modemTable = iTheDb->OpenTableLC(TPtrC(MODEM_BEARER));
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   411
	while(modemTable->GotoFirstRecord()==KErrNone)
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   412
		modemTable->DeleteRecord();
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   413
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   414
	RThread thread1;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   415
	TThreadInfo sync1;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   416
	TRequestStatus status1(KRequestPending);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   417
	sync1.iMainThreadStatus=&status1;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   418
	sync1.iMainThread.Duplicate(RThread(),EOwnerProcess);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   419
	_LIT(KThread1Name,"Thread1");
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   420
	User::LeaveIfError(thread1.Create(KThread1Name,Thread1Function,KDefaultStackSize,NULL,&sync1));
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   421
	CleanupClosePushL(thread1);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   422
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   423
	iTheDb->BeginTransaction();
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   424
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   425
	TUint32 dummyId;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   426
	modemTable->InsertRecord(dummyId);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   427
	_LIT(KTestName, "Main, Entry1");
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   428
	modemTable->WriteTextL(TPtrC(COMMDB_NAME), KTestName);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   429
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   430
	//OK, lets start the other thread off now.
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   431
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   432
	TRequestStatus status2(KRequestPending);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   433
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   434
	thread1.Logon(status2);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   435
	thread1.Resume();
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   436
	User::WaitForRequest(status1,status2);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   437
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   438
	//OK, one of the status has completed, if it's status1 then that means thread1 didn't panic
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   439
	//which is a bad thing.
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   440
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   441
	if(status1 != KRequestPending)
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   442
		User::Leave(KErrGeneral);	//Report error by leaving
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   443
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   444
	if(thread1.ExitType() != EExitPanic)
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   445
		User::Leave(KErrGeneral);	//Thread1 didn't panic, something else has gone wrong.
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   446
	
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   447
	CleanupStack::PopAndDestroy();	//thread1
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   448
	//Lets finish our entry off, and check it's OK.
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   449
	User::LeaveIfError(modemTable->PutRecordChanges());
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   450
	
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   451
	iTheDb->CommitTransaction();
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   452
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   453
	CleanupStack::PopAndDestroy(modemTable);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   454
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   455
	//Lets make a new modem view and check it's only got our entry in.
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   456
	modemTable=NULL;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   457
	modemTable = iTheDb->OpenTableLC(TPtrC(MODEM_BEARER));
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   458
	User::LeaveIfError(modemTable->GotoFirstRecord());
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   459
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   460
	TBuf<KCommsDbSvrMaxFieldLength> tempBuf;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   461
	modemTable->ReadTextL(TPtrC(COMMDB_NAME), tempBuf);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   462
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   463
	if(tempBuf!=KTestName)
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   464
		User::Leave(KErrGeneral);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   465
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   466
	CleanupStack::PopAndDestroy(modemTable);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   467
        SetTestStepResult(EPass);	return TestStepResult();
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   468
	}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   469
	
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   470
TVerdict CCommDbTest046_03::doTestStepPostambleL()
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   471
	{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   472
	delete iTheDb;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   473
	iTheDb=NULL;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   474
        SetTestStepResult(EPass);	return TestStepResult();
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   475
	}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   476
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   477
///////////////////////////////////////////////////////////////////////////
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   478
/*
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   479
Note for anyone who looks at this code.
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   480
It's a bit of a mess, but it seems to do the job. Basically thread1 is the thread trying to
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   481
do a write to the database, and our main thread is the one responsible for checking that
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   482
the change hasn't gone in before PutRecordChanges is called by thread1. After thread1 has
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   483
done it's write, we check that the write was sucessfull. This is done by our main thread
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   484
right at the end of CCommDbTest046_04::executeStepL().
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   485
*/
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   486
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   487
CCommDbTest046_04::CCommDbTest046_04()
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   488
	{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   489
	// store the name of this test case
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   490
	SetTestStepName(_L("step_046_04"));
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   491
	}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   492
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   493
CCommDbTest046_04::~CCommDbTest046_04()
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   494
	{}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   495
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   496
TVerdict CCommDbTest046_04::doTestStepL( void )
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   497
	{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   498
	if(executeStepL()!=KErrNone)
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   499
         SetTestStepResult(EFail);        SetTestStepResult(EPass);	return TestStepResult();
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   500
	}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   501
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   502
TVerdict CCommDbTest046_04::doTestStepPreambleL()
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   503
	{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   504
	iTheDb=CCommsDatabase::NewL();
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   505
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   506
        SetTestStepResult(EPass);	return TestStepResult();
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   507
	}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   508
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   509
TInt CCommDbTest046_04::Thread1Function(TAny* aPtr)
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   510
	{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   511
	CTrapCleanup* cleanup=CTrapCleanup::New();
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   512
	if (cleanup==NULL)
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   513
		return(KErrNoMemory);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   514
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   515
	TRAPD(err, DoThread1TestL(aPtr));
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   516
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   517
	delete cleanup;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   518
	return(err);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   519
	}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   520
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   521
void CCommDbTest046_04::DoThread1TestL(TAny* aPtr)
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   522
	{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   523
	TThreadInfo* remoteThreadInfo = (TThreadInfo*) aPtr;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   524
	CCommsDatabase* cDb =CCommsDatabase::NewL();
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   525
	CleanupStack::PushL(cDb);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   526
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   527
	CCommsDbTableView* dialInIspView = cDb->OpenTableLC(TPtrC(DIAL_IN_ISP));
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   528
	User::LeaveIfError(dialInIspView->GotoFirstRecord());
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   529
	dialInIspView->UpdateRecord();
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   530
	dialInIspView->WriteLongTextL(TPtrC(ISP_LOGIN_SCRIPT), _L("Changed"));
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   531
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   532
	remoteThreadInfo->iCaller.RequestComplete(remoteThreadInfo->iStatus1,KErrNone);//We're now ready to kick of the other thread
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   533
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   534
	User::After(10000000);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   535
	TInt err = dialInIspView->PutRecordChanges();
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   536
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   537
	CleanupStack::PopAndDestroy(dialInIspView);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   538
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   539
	CleanupStack::PopAndDestroy(cDb);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   540
	remoteThreadInfo->iCaller.RequestComplete(remoteThreadInfo->iStatus2,err);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   541
	}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   542
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   543
TInt CCommDbTest046_04::executeStepL()
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   544
	{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   545
	//Set the commdb up so we know what's in the first record of the Dial in ISP before we start.
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   546
	CCommsDbTableView* dialInIspView = iTheDb->OpenTableLC(TPtrC(DIAL_IN_ISP));
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   547
	User::LeaveIfError(dialInIspView->GotoFirstRecord());
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   548
	dialInIspView->UpdateRecord();
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   549
	dialInIspView->WriteLongTextL(TPtrC(ISP_LOGIN_SCRIPT), _L("Original"));
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   550
	User::LeaveIfError(dialInIspView->PutRecordChanges());
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   551
	CleanupStack::PopAndDestroy(dialInIspView);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   552
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   553
	//Start off the first thread, this will run until it has done all but PutRecordChanges is called on the transaction.
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   554
	RThread thread1;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   555
	TThreadInfo sync1;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   556
	TRequestStatus status1(KRequestPending);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   557
	TRequestStatus status2(KRequestPending);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   558
	sync1.iStatus1=&status1;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   559
	sync1.iStatus2=&status2;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   560
	sync1.iCaller.Duplicate(RThread(),EOwnerProcess);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   561
	_LIT(KThread1Name,"Thread1");
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   562
	TInt err=thread1.Create(KThread1Name,Thread1Function,KDefaultStackSize,NULL,&sync1);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   563
	CleanupClosePushL(thread1);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   564
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   565
	if(err==KErrNone)
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   566
		{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   567
		thread1.Resume();
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   568
		User::WaitForRequest(status1);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   569
		}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   570
	//Thread just kicked off will have run to User::After(10000000); by the time we get to here
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   571
	//We've basically got 10 seconds from here to check that the record hasn't been committed, which sould be plenty long enough. 
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   572
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   573
	dialInIspView = iTheDb->OpenTableLC(TPtrC(DIAL_IN_ISP));
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   574
	User::LeaveIfError(dialInIspView->GotoFirstRecord());
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   575
	
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   576
	HBufC* retrievedString = dialInIspView->ReadLongTextLC(TPtrC(ISP_LOGIN_SCRIPT));
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   577
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   578
	if(*retrievedString!=_L("Original"))
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   579
		User::Leave(KErrGeneral);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   580
	
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   581
	CleanupStack::PopAndDestroy();	//retrievedString
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   582
	retrievedString=NULL;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   583
	CleanupStack::PopAndDestroy(dialInIspView);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   584
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   585
	User::WaitForRequest(status2);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   586
	User::LeaveIfError(status2.Int());	//status2.Int() is the value returned when PutRecordChanges is called by thread1.
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   587
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   588
	//Might as well check that thread1s changes got through....
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   589
	dialInIspView = iTheDb->OpenTableLC(TPtrC(DIAL_IN_ISP));
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   590
	User::LeaveIfError(dialInIspView->GotoFirstRecord());
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   591
	retrievedString= dialInIspView->ReadLongTextLC(TPtrC(ISP_LOGIN_SCRIPT));
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   592
	err=KErrNone;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   593
	if(*retrievedString!=_L("Changed"))
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   594
		err= KErrGeneral;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   595
	CleanupStack::PopAndDestroy();	//retrievedString
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   596
	CleanupStack::PopAndDestroy(dialInIspView);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   597
	CleanupStack::PopAndDestroy();	//thread1
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   598
	return err;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   599
	}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   600
	
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   601
TVerdict CCommDbTest046_04::doTestStepPostambleL()
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   602
	{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   603
	delete iTheDb;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   604
	iTheDb=NULL;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   605
        SetTestStepResult(EPass);	return TestStepResult();
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   606
	}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   607
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   608
///////////////////////////////////////////////////////////////////////////
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   609
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   610
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   611
CCommDbTest046_05::CCommDbTest046_05()
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   612
	{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   613
	// store the name of this test case
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   614
	SetTestStepName(_L("step_046_05"));
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   615
	}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   616
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   617
CCommDbTest046_05::~CCommDbTest046_05()
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   618
	{}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   619
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   620
TVerdict CCommDbTest046_05::doTestStepL( void )
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   621
	{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   622
	if(executeStepL()!=KErrNone)
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   623
         SetTestStepResult(EFail);        SetTestStepResult(EPass);	return TestStepResult();
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   624
	}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   625
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   626
TVerdict CCommDbTest046_05::doTestStepPreambleL()
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   627
	{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   628
	iTheDb=CCommsDatabase::NewL();
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   629
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   630
        SetTestStepResult(EPass);	return TestStepResult();
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   631
	}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   632
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   633
TInt CCommDbTest046_05::Thread1Function(TAny* aPtr)
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   634
	{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   635
	CTrapCleanup* cleanup=CTrapCleanup::New();
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   636
	if (cleanup==NULL)
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   637
		return(KErrNoMemory);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   638
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   639
	TRAPD(err, DoThread1TestL(aPtr));
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   640
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   641
	delete cleanup;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   642
	return(err);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   643
	}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   644
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   645
void CCommDbTest046_05::DoThread1TestL(TAny* aPtr)
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   646
	{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   647
	TInt ret;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   648
	TInt64 seed;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   649
	TThreadInfo* remoteThreadInfo = (TThreadInfo*) aPtr;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   650
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   651
	CCommsDatabase* cDb = CCommsDatabase::NewL();
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   652
	CleanupStack::PushL(cDb);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   653
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   654
	for (TInt count=0; count < KTest04605Repeats; count++ )
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   655
		{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   656
		PrintDebug(_L("DoThread1TestL() - 1. InsertTestRecords"));
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   657
		InsertTestRecordsL(EFalse, 10 , *cDb);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   658
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   659
		
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   660
		// Start a transaction, write 10 records, then rollback
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   661
		RandomDelay(seed);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   662
		while(ret = cDb->BeginTransaction(), ret!=KErrNone)
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   663
			{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   664
			PrintDebug(_L("DoThread1TestL() - 2. BeginTransaction failed"));
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   665
			User::After(2000);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   666
			}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   667
		PrintDebug(_L("DoThread1TestL() - 2. BeginTransaction"));
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   668
		TRequestStatus status1(KRequestPending);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   669
		cDb->RequestNotification(status1);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   670
		PrintDebug(_L("DoThread1TestL() - 3. InsertTestRecords"));
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   671
		while(!InsertTestRecordsL(EFalse, 10 , *cDb))
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   672
			{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   673
			// Error during record insertion, most likely the other thread beat
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   674
			// us to it, Rollback and try again
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   675
			PrintDebug(_L("DoThread1TestL() - Rolling back Transaction"));
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   676
			cDb->RollbackTransaction();
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   677
			User::WaitForRequest(status1);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   678
			status1 = KRequestPending;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   679
			RandomDelay(seed);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   680
			while(ret = cDb->BeginTransaction(), ret!=KErrNone)
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   681
				{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   682
				PrintDebug(_L("DoThread1TestL() - Begin Transaction Again failed"));
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   683
				User::After(2000);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   684
				}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   685
			PrintDebug(_L("DoThread1TestL() - Begin Transaction Again"));
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   686
			cDb->RequestNotification(status1);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   687
			}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   688
		// 10 records inserted successfully, now rollback and wait for CommDb
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   689
		PrintDebug(_L("DoThread1TestL() - 4. Rollback"));
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   690
		cDb->RollbackTransaction();
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   691
		PrintDebug(_L("DoThread1TestL() - 5. WaitForRequest"));
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   692
		User::WaitForRequest(status1);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   693
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   694
		
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   695
		
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   696
		//Start a transaction, write 10 records, delete them, then rollback
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   697
		RandomDelay(seed);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   698
		while(ret = cDb->BeginTransaction(), ret!=KErrNone)
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   699
			{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   700
			PrintDebug(_L("DoThread1TestL() - 6. BeginTransaction failed"));
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   701
			User::After(2000);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   702
			}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   703
		PrintDebug(_L("DoThread1TestL() - 6. BeginTransaction"));
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   704
		TRequestStatus status2(KRequestPending);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   705
		cDb->RequestNotification(status2);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   706
		PrintDebug(_L("DoThread1TestL() - 7. InsertTestRecords"));
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   707
		while(!InsertTestRecordsL( EFalse, 10 , *cDb))
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   708
			{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   709
			// Error during record insertion, most likely the other thread beat
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   710
			// us to it, Rollback and try again
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   711
			PrintDebug(_L("DoThread1TestL() - Rolling back Transaction"));
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   712
			cDb->RollbackTransaction();
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   713
			User::WaitForRequest(status2);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   714
			status2 = KRequestPending;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   715
			RandomDelay(seed);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   716
			while(ret = cDb->BeginTransaction(), ret!=KErrNone)
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   717
				{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   718
				PrintDebug(_L("DoThread1TestL() - Begin Transaction Again failed"));
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   719
				User::After(2000);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   720
				}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   721
			PrintDebug(_L("DoThread1TestL() - Begin Transaction Again"));
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   722
			cDb->RequestNotification(status2);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   723
			}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   724
		// 10 records inserted successfully, now delete them, rollback and wait for commdb
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   725
		DeleteLastRecordsL(EFalse, 10, *cDb );
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   726
		PrintDebug(_L("DoThread1TestL() - 8. Rollback"));
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   727
		cDb->RollbackTransaction();
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   728
		PrintDebug(_L("DoThread1TestL() - 9. WaitForRequest"));
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   729
		User::WaitForRequest(status2);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   730
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   731
		
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   732
		//Start a transaction, write 10 records and commit them
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   733
		RandomDelay(seed);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   734
		while(ret = cDb->BeginTransaction(), ret!=KErrNone)
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   735
			{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   736
			PrintDebug(_L("DoThread1TestL() - 10. BeginTransaction failed"));
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   737
			User::After(2000);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   738
			}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   739
		PrintDebug(_L("DoThread1TestL() -10. BeginTransaction"));
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   740
		TRequestStatus status3(KRequestPending);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   741
		cDb->RequestNotification(status3);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   742
		PrintDebug(_L("DoThread1TestL() -11. InsertRecords"));
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   743
		while(!InsertTestRecordsL(EFalse, 10 , *cDb))
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   744
			{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   745
			// Error during record insertion, most likely the other thread beat
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   746
			// us to it, Rollback and try again
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   747
			PrintDebug(_L("DoThread1TestL() - Rolling back Transaction"));
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   748
			cDb->RollbackTransaction();
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   749
			User::WaitForRequest(status3);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   750
			status3 = KRequestPending;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   751
			RandomDelay(seed);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   752
			while(ret = cDb->BeginTransaction(), ret!=KErrNone)
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   753
				{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   754
				PrintDebug(_L("DoThread1TestL() - Begin Transaction Again failed"));
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   755
				User::After(2000);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   756
				}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   757
			PrintDebug(_L("DoThread1TestL() - Begin Transaction Again"));
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   758
			cDb->RequestNotification(status3);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   759
			}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   760
		// Commit the 10 records, wait for CommDb
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   761
		PrintDebug(_L("DoThread1TestL() -12. Commit"));
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   762
		User::LeaveIfError(cDb->CommitTransaction());
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   763
		PrintDebug(_L("DoThread1TestL() -13. WaitForRequest"));
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   764
		User::WaitForRequest(status3);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   765
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   766
		// Give the other thread a chance
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   767
		PrintDebug(_L("DoThread1TestL() -14. User::After"));
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   768
		RandomDelay(seed);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   769
		}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   770
	
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   771
	CleanupStack::PopAndDestroy(cDb);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   772
	PrintDebug(_L("DoThread1TestL() RequestComplete"));
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   773
	remoteThreadInfo->iCaller.RequestComplete(remoteThreadInfo->iStatus1, KErrNone);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   774
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   775
	}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   776
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   777
TInt CCommDbTest046_05::executeStepL()
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   778
	{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   779
	TInt ret;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   780
	
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   781
	//Start off the first thread, this will run until it has done all but PutRecordChanges is called on the transaction.
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   782
	RThread thread1;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   783
	TInt64 seed;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   784
	TThreadInfo sync1;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   785
	TRequestStatus remoteThreadStatus(KRequestPending);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   786
	sync1.iStatus1=&remoteThreadStatus;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   787
	sync1.iCaller.Duplicate(RThread(),EOwnerProcess);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   788
	_LIT(KThread1Name,"Thread1");
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   789
	User::LeaveIfError(thread1.Create(KThread1Name,Thread1Function,KDefaultStackSize,NULL,&sync1));
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   790
	CleanupClosePushL(thread1);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   791
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   792
	thread1.Resume();
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   793
	for (TInt count=0; count < KTest04605Repeats; count++ )
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   794
		{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   795
		PrintDebug(_L("ExecuteStepL() - 1. InsertTestRecords"));
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   796
		InsertTestRecordsL(ETrue, 10, *iTheDb );
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   797
		
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   798
		//Start a transaction, write 10 records, then rollback
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   799
		RandomDelay(seed);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   800
		while(ret = iTheDb->BeginTransaction(), ret!=KErrNone)
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   801
			{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   802
			PrintDebug(_L("ExecuteStepL() - 2. BeginTransaction failed"));
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   803
			User::After(2000);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   804
			}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   805
		PrintDebug(_L("ExecuteStepL() - 2. BeginTransaction"));
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   806
		TRequestStatus status1(KRequestPending);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   807
		iTheDb->RequestNotification(status1);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   808
		PrintDebug(_L("ExecuteStepL() - 3. InsertTestRecords"));
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   809
		while(!InsertTestRecordsL(ETrue, 10 , *iTheDb))
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   810
			{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   811
			// Error during record insertion, most likely the other thread beat
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   812
			// us to it, Rollback and try again
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   813
			PrintDebug(_L("ExecuteStepL() - Rolling back Transaction"));
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   814
			iTheDb->RollbackTransaction();
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   815
			User::WaitForRequest(status1);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   816
			status1 = KRequestPending;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   817
			RandomDelay(seed);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   818
			while(ret = iTheDb->BeginTransaction(), ret!=KErrNone)
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   819
				{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   820
				PrintDebug(_L("ExecuteStepL()  - Begin Transaction Again failed"));
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   821
				User::After(2000);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   822
				}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   823
			PrintDebug(_L("ExecuteStepL()   - Begin Transaction Again"));
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   824
			iTheDb->RequestNotification(status1);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   825
			}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   826
		// 10 records written, now rollback and wait for commdb
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   827
		PrintDebug(_L("ExecuteStepL() - 4. Rollback"));
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   828
		iTheDb->RollbackTransaction();
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   829
		PrintDebug(_L("ExecuteStepL() - 5. WaitForRequest"));
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   830
		User::WaitForRequest(status1);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   831
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   832
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   833
		
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   834
		//Start a transaction, write 10 records, delete them, then rollback
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   835
		RandomDelay(seed);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   836
		while(ret = iTheDb->BeginTransaction(), ret!=KErrNone)
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   837
			{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   838
			PrintDebug(_L("ExecuteStepL() - 6. BeginTransaction failed"));
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   839
			User::After(2000);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   840
			}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   841
		PrintDebug(_L("ExecuteStepL() - 6. BeginTransaction"));
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   842
		TRequestStatus status2(KRequestPending);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   843
		iTheDb->RequestNotification(status2);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   844
		PrintDebug(_L("ExecuteStepL() - 7. InsertTestRecordsL"));
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   845
		while(!InsertTestRecordsL(ETrue, 10 , *iTheDb))
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   846
			{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   847
			// Error during record insertion, most likely the other thread beat
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   848
			// us to it, Rollback and try again
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   849
			PrintDebug(_L("ExecuteStepL() - Rolling back Transaction"));
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   850
			iTheDb->RollbackTransaction();
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   851
			User::WaitForRequest(status2);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   852
			status2 = KRequestPending;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   853
			RandomDelay(seed);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   854
			while(ret = iTheDb->BeginTransaction(), ret!=KErrNone)
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   855
				{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   856
				PrintDebug(_L("ExecuteStepL()  - Begin Transaction Again failed"));
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   857
				User::After(2000);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   858
				}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   859
			PrintDebug(_L("ExecuteStepL()   - Begin Transaction Again"));
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   860
			iTheDb->RequestNotification(status2);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   861
			}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   862
		// 10 records written successfully, now delete them, rollback and wait for commmdb
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   863
		PrintDebug(_L("ExecuteStepL() - 8. DeleteTestRecordsL"));
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   864
		DeleteLastRecordsL(ETrue, 10, *iTheDb);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   865
		PrintDebug(_L("ExecuteStepL() - 9. Rollback"));
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   866
		iTheDb->RollbackTransaction();
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   867
		PrintDebug(_L("ExecuteStepL() -10. WaitForRequest"));
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   868
		User::WaitForRequest(status2);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   869
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   870
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   871
		
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   872
		//Start a transaction, write 10 records and commit them
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   873
		RandomDelay(seed);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   874
		while(ret = iTheDb->BeginTransaction(), ret!=KErrNone)
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   875
			{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   876
			PrintDebug(_L("ExecuteStepL() - 11. BeginTransaction failed"));
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   877
			User::After(2000);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   878
			}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   879
		PrintDebug(_L("ExecuteStepL() -11. BeginTransaction"));
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   880
		TRequestStatus status3(KRequestPending);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   881
		iTheDb->RequestNotification(status3);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   882
		PrintDebug(_L("ExecuteStepL() -12. InsertTestRecords"));
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   883
		while(!InsertTestRecordsL( ETrue,10 , *iTheDb))
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   884
			{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   885
			// Error during record insertion, most likely the other thread beat
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   886
			// us to it, Rollback and try again
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   887
			PrintDebug(_L("ExecuteStepL() - Rolling back Transaction"));
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   888
			iTheDb->RollbackTransaction();
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   889
			User::WaitForRequest(status3);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   890
			status3 = KRequestPending;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   891
			RandomDelay(seed);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   892
			while(ret = iTheDb->BeginTransaction(), ret!=KErrNone)
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   893
				{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   894
				PrintDebug(_L("ExecuteStepL()  - Begin Transaction Again failed"));
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   895
				User::After(2000);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   896
				}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   897
			PrintDebug(_L("ExecuteStepL()   - Begin Transaction Again"));
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   898
			iTheDb->RequestNotification(status3);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   899
			}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   900
		PrintDebug(_L("ExecuteStepL() -13. Commit"));
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   901
		User::LeaveIfError(iTheDb->CommitTransaction());
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   902
		PrintDebug(_L("ExecuteStepL() -14. WaitForRequest"));
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   903
		User::WaitForRequest(status3);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   904
		
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   905
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   906
		// Give the other thread a chance to do stuff
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   907
		PrintDebug(_L("ExecuteStepL() -15. User::After"));
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   908
		RandomDelay(seed);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   909
		}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   910
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   911
	PrintDebug(_L("ExecuteStepL() - Wait For Remote Thread"));
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   912
	User::WaitForRequest(remoteThreadStatus);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   913
	CleanupStack::PopAndDestroy();	//thread1
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   914
	PrintDebug(_L("ExecuteStepL() - Exiting"));
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   915
	return KErrNone;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   916
	}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   917
	
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   918
TVerdict CCommDbTest046_05::doTestStepPostambleL()
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   919
	{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   920
	delete iTheDb;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   921
	iTheDb=NULL;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   922
        SetTestStepResult(EPass);	return TestStepResult();
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   923
	}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   924
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   925
TBool CCommDbTest046_05::InsertTestRecordsL( TBool aCallerIsMainThread, TUint aQuantity, CCommsDatabase& aDb )
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   926
	{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   927
	TUint32 id;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   928
	CCommsDbTableView* dbView = aDb.OpenTableLC( TPtrC(DIAL_OUT_ISP) );
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   929
	for(TUint count=0; count < aQuantity; count++ )
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   930
		{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   931
		while(dbView->InsertRecord( id )!= KErrNone)
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   932
			{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   933
			if(aCallerIsMainThread)
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   934
				PrintDebug(_L("ExecuteStepL()    Insert Record failed..."));
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   935
			else PrintDebug(_L("DoThread1TestL() Insert Record failed..."));
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   936
			CleanupStack::PopAndDestroy(dbView);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   937
			return EFalse;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   938
			}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   939
		dbView->WriteTextL(TPtrC(COMMDB_NAME),_L("My Service Test Record"));
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   940
		dbView->WriteBoolL(TPtrC(ISP_DIAL_RESOLUTION),ETrue);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   941
		dbView->WriteBoolL(TPtrC(ISP_USE_LOGIN_SCRIPT),EFalse);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   942
		dbView->WriteBoolL(TPtrC(ISP_PROMPT_FOR_LOGIN),ETrue);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   943
//		dbView->WriteTextL(TPtrC(ISP_IF_NAME),_L("ppp"));
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   944
		dbView->WriteBoolL(TPtrC(ISP_IF_PROMPT_FOR_AUTH),ETrue);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   945
		dbView->WriteBoolL(TPtrC(ISP_IP_ADDR_FROM_SERVER),ETrue);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   946
		dbView->WriteBoolL(TPtrC(ISP_IP_DNS_ADDR_FROM_SERVER),ETrue);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   947
		dbView->WriteBoolL(TPtrC(ISP_IP6_DNS_ADDR_FROM_SERVER),ETrue);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   948
		User::LeaveIfError(dbView->PutRecordChanges());
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   949
		if(aCallerIsMainThread)
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   950
			PrintDebug(_L("ExecuteStepL()    InsertingRecord..."));
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   951
		else PrintDebug(_L("DoThread1TestL() InsertingRecord..."));
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   952
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   953
	// Allow the other thread to do things between each record insertion
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   954
	User::After(5000);	
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   955
	}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   956
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   957
	CleanupStack::PopAndDestroy(dbView);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   958
	return ETrue;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   959
	}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   960
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   961
void CCommDbTest046_05::DeleteLastRecordsL( TBool aCallerIsMainThread, TUint aQuantity, CCommsDatabase& aDb)
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   962
	{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   963
	TUint count;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   964
	TInt ret = KErrGeneral;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   965
	CCommsDbTableView* dbView;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   966
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   967
	dbView  = aDb.OpenTableLC( TPtrC(DIAL_OUT_ISP) );
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   968
	CDBLEAVE( dbView->GotoFirstRecord(), KErrNone );
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   969
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   970
	//Move to the end of the view
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   971
	do
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   972
	{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   973
		ret = dbView->GotoNextRecord();
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   974
	}while ( ret != KErrNotFound );
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   975
	
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   976
	//Need to move the cursor back into the view
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   977
	dbView->GotoPreviousRecord();
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   978
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   979
	//Now delete the record and move back one
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   980
	for ( count=0; count< aQuantity; count++)
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   981
		{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   982
		// Allow the other thread to do things between each record deletion
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   983
		User::After(5000);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   984
		User::LeaveIfError(dbView->DeleteRecord());
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   985
		User::LeaveIfError( dbView->GotoPreviousRecord());
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   986
		if(aCallerIsMainThread)
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   987
			PrintDebug(_L("ExecuteStepL()    Record Deleted..."));
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   988
		else PrintDebug(_L("DoThread1TestL() Record Deleted..."));
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   989
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   990
		}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   991
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   992
	CleanupStack::PopAndDestroy(dbView);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   993
	}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   994
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   995
void CCommDbTest046_05::RandomDelay(TInt64 &aSeed)
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   996
	{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   997
	// Random delay for between 0-1 seconds
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   998
	// Gives a thread a chance to access the database while the other 
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   999
	// thread is still sleeping
ae47d0499bee 201033_02
hgs
parents:
diff changeset
  1000
ae47d0499bee 201033_02
hgs
parents:
diff changeset
  1001
	// If this delay is made excessively large, the test is pointeless, 
ae47d0499bee 201033_02
hgs
parents:
diff changeset
  1002
	// the two threads will just take turns to do things with the database
ae47d0499bee 201033_02
hgs
parents:
diff changeset
  1003
ae47d0499bee 201033_02
hgs
parents:
diff changeset
  1004
	// If the delay is too short both threads will hammer CommDb simulataneously and 
ae47d0499bee 201033_02
hgs
parents:
diff changeset
  1005
	// they will effectively deadlock, neither getting the chance to complete anything
ae47d0499bee 201033_02
hgs
parents:
diff changeset
  1006
ae47d0499bee 201033_02
hgs
parents:
diff changeset
  1007
	
ae47d0499bee 201033_02
hgs
parents:
diff changeset
  1008
	TInt32 delay;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
  1009
	TReal rnd = Math::FRand(aSeed);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
  1010
	rnd*=1000000;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
  1011
	delay=(TInt32) rnd;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
  1012
	User::After(delay);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
  1013
	}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
  1014
ae47d0499bee 201033_02
hgs
parents:
diff changeset
  1015
void CCommDbTest046_05::PrintDebug(TPtrC )//aString)
ae47d0499bee 201033_02
hgs
parents:
diff changeset
  1016
	{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
  1017
	// Uncomment this line to see whats going on in the debug trace
ae47d0499bee 201033_02
hgs
parents:
diff changeset
  1018
	//RDebug::Print(aString);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
  1019
	}