datacommsserver/esockserver/test/providers/dummy/src/activityTest.cpp
author hgs
Mon, 24 May 2010 18:44:15 +0100
changeset 32 d2396c80c344
parent 30 df67dc5d759e
permissions -rw-r--r--
201019_03
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
30
df67dc5d759e 201019_01
hgs
parents:
diff changeset
     1
// Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
df67dc5d759e 201019_01
hgs
parents:
diff changeset
     2
// All rights reserved.
df67dc5d759e 201019_01
hgs
parents:
diff changeset
     3
// This component and the accompanying materials are made available
df67dc5d759e 201019_01
hgs
parents:
diff changeset
     4
// under the terms of "Eclipse Public License v1.0"
df67dc5d759e 201019_01
hgs
parents:
diff changeset
     5
// which accompanies this distribution, and is available
df67dc5d759e 201019_01
hgs
parents:
diff changeset
     6
// at the URL "http://www.eclipse.org/legal/epl-v10.html".
df67dc5d759e 201019_01
hgs
parents:
diff changeset
     7
//
df67dc5d759e 201019_01
hgs
parents:
diff changeset
     8
// Initial Contributors:
df67dc5d759e 201019_01
hgs
parents:
diff changeset
     9
// Nokia Corporation - initial contribution.
df67dc5d759e 201019_01
hgs
parents:
diff changeset
    10
//
df67dc5d759e 201019_01
hgs
parents:
diff changeset
    11
// Contributors:
df67dc5d759e 201019_01
hgs
parents:
diff changeset
    12
//
df67dc5d759e 201019_01
hgs
parents:
diff changeset
    13
// Description:
df67dc5d759e 201019_01
hgs
parents:
diff changeset
    14
// TestDummy implementation file for a TierManager
df67dc5d759e 201019_01
hgs
parents:
diff changeset
    15
// 
df67dc5d759e 201019_01
hgs
parents:
diff changeset
    16
//
df67dc5d759e 201019_01
hgs
parents:
diff changeset
    17
df67dc5d759e 201019_01
hgs
parents:
diff changeset
    18
/**
df67dc5d759e 201019_01
hgs
parents:
diff changeset
    19
 @file
df67dc5d759e 201019_01
hgs
parents:
diff changeset
    20
 @internalComponent
df67dc5d759e 201019_01
hgs
parents:
diff changeset
    21
*/
df67dc5d759e 201019_01
hgs
parents:
diff changeset
    22
df67dc5d759e 201019_01
hgs
parents:
diff changeset
    23
#include <elements/nm_messages_base.h>
df67dc5d759e 201019_01
hgs
parents:
diff changeset
    24
#include <comms-infras/ss_nodemessages_dataclient.h>
df67dc5d759e 201019_01
hgs
parents:
diff changeset
    25
#include <ss_glob.h>
df67dc5d759e 201019_01
hgs
parents:
diff changeset
    26
#include "activityTest.h"
df67dc5d759e 201019_01
hgs
parents:
diff changeset
    27
df67dc5d759e 201019_01
hgs
parents:
diff changeset
    28
using namespace Messages;
df67dc5d759e 201019_01
hgs
parents:
diff changeset
    29
using namespace MeshMachine;
df67dc5d759e 201019_01
hgs
parents:
diff changeset
    30
using namespace ESock;
df67dc5d759e 201019_01
hgs
parents:
diff changeset
    31
df67dc5d759e 201019_01
hgs
parents:
diff changeset
    32
void CActivityCancelTest::StoreRequestL(const TSignatureBase& aRequest)
df67dc5d759e 201019_01
hgs
parents:
diff changeset
    33
    {
df67dc5d759e 201019_01
hgs
parents:
diff changeset
    34
    TBuf8<__Align8(TSignalBase::KMaxInlineMessageSize + TSignalBase::KMaxUnstoredOverhead)> msgBuf;
df67dc5d759e 201019_01
hgs
parents:
diff changeset
    35
    aRequest.Store(msgBuf);
df67dc5d759e 201019_01
hgs
parents:
diff changeset
    36
    TPtrC8 messageStore(msgBuf);
df67dc5d759e 201019_01
hgs
parents:
diff changeset
    37
    TlsGlobals::Get().VirtualCtor()->New(messageStore, iStoredRequest);
df67dc5d759e 201019_01
hgs
parents:
diff changeset
    38
    }
df67dc5d759e 201019_01
hgs
parents:
diff changeset
    39
df67dc5d759e 201019_01
hgs
parents:
diff changeset
    40
df67dc5d759e 201019_01
hgs
parents:
diff changeset
    41
DEFINE_SMELEMENT(CActivityCancelTest::TNoTagForwardOrActiveTagBackward, NetStateMachine::MStateFork, TContext)
df67dc5d759e 201019_01
hgs
parents:
diff changeset
    42
TInt CActivityCancelTest::TNoTagForwardOrActiveTagBackward::TransitionTag()
df67dc5d759e 201019_01
hgs
parents:
diff changeset
    43
    {
df67dc5d759e 201019_01
hgs
parents:
diff changeset
    44
    if (message_cast<TEBase::TError>(&iContext.iMessage))
df67dc5d759e 201019_01
hgs
parents:
diff changeset
    45
        {
df67dc5d759e 201019_01
hgs
parents:
diff changeset
    46
        return KActiveTag | NetStateMachine::EBackward;
df67dc5d759e 201019_01
hgs
parents:
diff changeset
    47
        }
df67dc5d759e 201019_01
hgs
parents:
diff changeset
    48
    return KNoTag | NetStateMachine::EForward;
df67dc5d759e 201019_01
hgs
parents:
diff changeset
    49
    }
df67dc5d759e 201019_01
hgs
parents:
diff changeset
    50
df67dc5d759e 201019_01
hgs
parents:
diff changeset
    51
DEFINE_SMELEMENT(CActivityCancelTest::TBeginTest, NetStateMachine::MStateTransition, TContext)
df67dc5d759e 201019_01
hgs
parents:
diff changeset
    52
void CActivityCancelTest::TBeginTest::DoL()
df67dc5d759e 201019_01
hgs
parents:
diff changeset
    53
    {
df67dc5d759e 201019_01
hgs
parents:
diff changeset
    54
    ASSERT(iContext.iNodeActivity);
df67dc5d759e 201019_01
hgs
parents:
diff changeset
    55
    CActivityCancelTest& act = static_cast<CActivityCancelTest&>(*iContext.iNodeActivity);
df67dc5d759e 201019_01
hgs
parents:
diff changeset
    56
    act.StoreRequestL(iContext.iMessage);
df67dc5d759e 201019_01
hgs
parents:
diff changeset
    57
    }
df67dc5d759e 201019_01
hgs
parents:
diff changeset
    58
    
df67dc5d759e 201019_01
hgs
parents:
diff changeset
    59
DEFINE_SMELEMENT(CActivityCancelTest::TBeginLoop, NetStateMachine::MStateTransition, TContext)
df67dc5d759e 201019_01
hgs
parents:
diff changeset
    60
void CActivityCancelTest::TBeginLoop::DoL()
df67dc5d759e 201019_01
hgs
parents:
diff changeset
    61
    {
df67dc5d759e 201019_01
hgs
parents:
diff changeset
    62
    ASSERT(iContext.iNodeActivity);
df67dc5d759e 201019_01
hgs
parents:
diff changeset
    63
    CActivityCancelTest& act = static_cast<CActivityCancelTest&>(*iContext.iNodeActivity);    
df67dc5d759e 201019_01
hgs
parents:
diff changeset
    64
    act.PostRequestTo(iContext.Node().Id(), act.StoredRequest());  
df67dc5d759e 201019_01
hgs
parents:
diff changeset
    65
    act.NextLoop();
df67dc5d759e 201019_01
hgs
parents:
diff changeset
    66
    }
df67dc5d759e 201019_01
hgs
parents:
diff changeset
    67
df67dc5d759e 201019_01
hgs
parents:
diff changeset
    68
df67dc5d759e 201019_01
hgs
parents:
diff changeset
    69
DEFINE_SMELEMENT(CActivityCancelTest::TCancel, NetStateMachine::MStateTransition, TContext)
df67dc5d759e 201019_01
hgs
parents:
diff changeset
    70
void CActivityCancelTest::TCancel::DoL()
df67dc5d759e 201019_01
hgs
parents:
diff changeset
    71
    {
df67dc5d759e 201019_01
hgs
parents:
diff changeset
    72
    ASSERT(iContext.iNodeActivity);
df67dc5d759e 201019_01
hgs
parents:
diff changeset
    73
    CActivityCancelTest& act = static_cast<CActivityCancelTest&>(*iContext.iNodeActivity);    
df67dc5d759e 201019_01
hgs
parents:
diff changeset
    74
    act.PostRequestTo(iContext.Node().Id(), TEBase::TCancel());
df67dc5d759e 201019_01
hgs
parents:
diff changeset
    75
    }
df67dc5d759e 201019_01
hgs
parents:
diff changeset
    76
df67dc5d759e 201019_01
hgs
parents:
diff changeset
    77
DEFINE_SMELEMENT(CActivityCancelTest::TEndTest, NetStateMachine::MStateTransition, TContext)
df67dc5d759e 201019_01
hgs
parents:
diff changeset
    78
void CActivityCancelTest::TEndTest::DoL()
df67dc5d759e 201019_01
hgs
parents:
diff changeset
    79
    {
df67dc5d759e 201019_01
hgs
parents:
diff changeset
    80
    ASSERT(iContext.iNodeActivity);
df67dc5d759e 201019_01
hgs
parents:
diff changeset
    81
    CActivityCancelTest& act = static_cast<CActivityCancelTest&>(*iContext.iNodeActivity);   
df67dc5d759e 201019_01
hgs
parents:
diff changeset
    82
    act.PostToOriginators(iContext.iMessage);
df67dc5d759e 201019_01
hgs
parents:
diff changeset
    83
    ASSERT(act.Error() != KErrNone); //if the activity has done its job, the activity have been invariably errored; 
df67dc5d759e 201019_01
hgs
parents:
diff changeset
    84
    act.SetError(KErrNone); //No point reporting this error though.
df67dc5d759e 201019_01
hgs
parents:
diff changeset
    85
    }
df67dc5d759e 201019_01
hgs
parents:
diff changeset
    86
df67dc5d759e 201019_01
hgs
parents:
diff changeset
    87
df67dc5d759e 201019_01
hgs
parents:
diff changeset
    88
namespace CancelTestBindToActivity
df67dc5d759e 201019_01
hgs
parents:
diff changeset
    89
{
df67dc5d759e 201019_01
hgs
parents:
diff changeset
    90
/* This is a largely generic activity written to test cancelling behaviour of another (typically 
df67dc5d759e 201019_01
hgs
parents:
diff changeset
    91
 * production code) activity. In this case it is put on top of and to test the TBindTo 
df67dc5d759e 201019_01
hgs
parents:
diff changeset
    92
 * activity, by the virtue of awaiting TCFDataClient::TBindTo. In principle though it can be put on
df67dc5d759e 201019_01
hgs
parents:
diff changeset
    93
 * top of any other activity by awaiting for something else instead. CancelTestBindToActivity hijacks
df67dc5d759e 201019_01
hgs
parents:
diff changeset
    94
 * and stores the original request (in this case TCFDataClient::TBindTo). It then goes to perform a 
df67dc5d759e 201019_01
hgs
parents:
diff changeset
    95
 * loop:
df67dc5d759e 201019_01
hgs
parents:
diff changeset
    96
 * { 
df67dc5d759e 201019_01
hgs
parents:
diff changeset
    97
 * - It forwards the stored request to the overriden activity (in this case the TBindTo activity), 
df67dc5d759e 201019_01
hgs
parents:
diff changeset
    98
 * - then follows it with a TCancel 
df67dc5d759e 201019_01
hgs
parents:
diff changeset
    99
 * - and awaits for TError. 
df67dc5d759e 201019_01
hgs
parents:
diff changeset
   100
 * }
df67dc5d759e 201019_01
hgs
parents:
diff changeset
   101
 * Each loop will send the TCancel slightly later, i.e.: at consecutive ticks triggered by messages 
df67dc5d759e 201019_01
hgs
parents:
diff changeset
   102
 * received by the local node (and subsequently resulting in AMMNodeBase::SignalActivities). 
df67dc5d759e 201019_01
hgs
parents:
diff changeset
   103
 * If you examine CActivityCancelTest::TProgressiveCancel you will see that it is blocked 
df67dc5d759e 201019_01
hgs
parents:
diff changeset
   104
 * (as any other synchronised activity) against gradually increasing number of ticks. It has been
df67dc5d759e 201019_01
hgs
parents:
diff changeset
   105
 * pointed out that the tick resolution may be too small - i.e.: that we may want to tick the
df67dc5d759e 201019_01
hgs
parents:
diff changeset
   106
 * activity with every message sent within the local thread (and thus with every even that can
df67dc5d759e 201019_01
hgs
parents:
diff changeset
   107
 * change the state of the activity peers). This can be done by signalling CActivityCancelTest
df67dc5d759e 201019_01
hgs
parents:
diff changeset
   108
 * from the transport upon every dispatch (or post). This is so far not done. Instead CancelTestBindToActivity
df67dc5d759e 201019_01
hgs
parents:
diff changeset
   109
 * is put against every mm node performing bind to (CPR and SCPR).
df67dc5d759e 201019_01
hgs
parents:
diff changeset
   110
 */
df67dc5d759e 201019_01
hgs
parents:
diff changeset
   111
DEFINE_CUSTOM_NODEACTIVITY(CActivityCancelTest::ECancelTestActivity, CancelBindTo, TCFDataClient::TBindTo, CActivityCancelTest::NewL)
df67dc5d759e 201019_01
hgs
parents:
diff changeset
   112
    FIRST_NODEACTIVITY_ENTRY(CActivityCancelTest::TAwaitingMessageState<TCFDataClient::TBindTo>, MeshMachine::TNoTag)
df67dc5d759e 201019_01
hgs
parents:
diff changeset
   113
    THROUGH_NODEACTIVITY_ENTRY(KNoTag, CActivityCancelTest::TBeginTest, MeshMachine::TTag<KActiveTag>)
df67dc5d759e 201019_01
hgs
parents:
diff changeset
   114
    THROUGH_NODEACTIVITY_ENTRY(KActiveTag, CActivityCancelTest::TBeginLoop, MeshMachine::TNoTag)    
df67dc5d759e 201019_01
hgs
parents:
diff changeset
   115
    NODEACTIVITY_ENTRY(KNoTag, CActivityCancelTest::TProgressiveCancel, MeshMachine::TAcceptErrorState<MeshMachine::TAwaitingMessageState<TCFDataClient::TBindToComplete>  >, CActivityCancelTest::TNoTagForwardOrActiveTagBackward)
df67dc5d759e 201019_01
hgs
parents:
diff changeset
   116
    LAST_NODEACTIVITY_ENTRY(KNoTag, CActivityCancelTest::TEndTest)
df67dc5d759e 201019_01
hgs
parents:
diff changeset
   117
NODEACTIVITY_END()
df67dc5d759e 201019_01
hgs
parents:
diff changeset
   118
}
df67dc5d759e 201019_01
hgs
parents:
diff changeset
   119
df67dc5d759e 201019_01
hgs
parents:
diff changeset
   120
df67dc5d759e 201019_01
hgs
parents:
diff changeset
   121