summaryrefslogblamecommitdiffstats
path: root/private/oleutest/perform/cairole/tests/bm_nest.cxx
blob: 0ac425ac5f36b28a3bad17109d459aeded931940 (plain) (tree)





























































































































































































                                                                                
//+------------------------------------------------------------------------
//
//  Microsoft Windows
//  Copyright (C) Microsoft Corporation, 1993.
//
//  File:	bm_nest.cxx
//
//  Contents:	Nested Object Rpc Method Invocation tests
//
//  Classes:	CNestTest
//
//  History:    1-July-93 t-martig    Created
//
//--------------------------------------------------------------------------
#include <headers.cxx>
#pragma hdrstop

#include <bm_nest.hxx>
#include <oletest.hxx>
#include <tracelog.hxx>


TCHAR *CNestTest::Name ()
{
	return TEXT("Nested");
}


SCODE CNestTest::Setup (CTestInput *pInput)
{
	CTestBase::Setup(pInput);

	//  get iteration count
	m_ulIterations = pInput->GetIterations(Name());

	//  get CLSID of server
	SCODE sc = pInput->GetGUID(&m_ClsID, Name(), TEXT("Clsid_Local"));
	if (FAILED(sc))
	{
	    Log (TEXT("Setup - GetClassID failed."), sc);
	    return sc;
	}

	//  initialize timing arrays
	INIT_RESULTS(m_ulNest2Time);
	INIT_RESULTS(m_ulNest3Time);
	INIT_RESULTS(m_ulNest4Time);
	INIT_RESULTS(m_ulNest5Time);


	sc = InitCOM();
	if (FAILED(sc))
	{
	    Log (TEXT("Setup - CoInitialize failed."), sc);
	    return  sc;
	}

	m_pILoop1=NULL;
	sc = CoCreateInstance(m_ClsID, NULL, CLSCTX_LOCAL_SERVER,
			      IID_ILoop, (void **)&m_pILoop1);
	if (FAILED(sc))
	{
	    Log (TEXT("Setup - CoCreateInstance of first Server failed."), sc);
	    return sc;
	}

	m_pILoop2=NULL;
	sc = CoCreateInstance(m_ClsID, NULL, CLSCTX_LOCAL_SERVER,
			      IID_ILoop, (void **)&m_pILoop2);
	if (FAILED(sc))
	{
	    Log (TEXT("Setup - CoCreateInstance of second Server failed."), sc);
	    return sc;
	}

	//  pass the pointers to each other
	sc = m_pILoop1->Init(m_pILoop2);
	if (FAILED(sc))
	{
	    Log (TEXT("Setup - Initialization of first Server failed."), sc);
	    return sc;
	}

	sc = m_pILoop2->Init(m_pILoop1);
	if (FAILED(sc))
	{
	    Log (TEXT("Setup - Initialization of second Server failed."), sc);
	    return sc;
	}


	return S_OK;
}


SCODE CNestTest::Cleanup ()
{
	if (m_pILoop1)
	{
	    m_pILoop1->Uninit();
	    m_pILoop1->Release();
	}

	if (m_pILoop2)
	{
	    m_pILoop2->Uninit();
	    m_pILoop2->Release();
	}

	UninitCOM();
	return S_OK;
}


SCODE CNestTest::Run ()
{
	CStopWatch  sw;
	SCODE sc;

	//
	//  nesting 2 levels. Note we pass in 3 not 2, since the server
	//  subtracts 1 from the passed in value and then stops the nesting
	//  if the count is zero.
	//
	//  a value of 3 represents a single nested call.
	//

	for (ULONG iIter=0; iIter<m_ulIterations; iIter++)
	{
	    sw.Reset();
	    sc = m_pILoop1->Loop(3);
	    m_ulNest2Time[iIter] = sw.Read();
	    Log (TEXT("Loop (2)"), sc);
	}

	//
	//  nesting 3 levels
	//

	for (iIter=0; iIter<m_ulIterations; iIter++)
	{
	    sw.Reset();
	    sc= m_pILoop1->Loop(4);
	    m_ulNest3Time[iIter] = sw.Read();
	    Log (TEXT("Loop (3)"), sc);
	}

	//
	//  nesting 4 levels
	//

	for (iIter=0; iIter<m_ulIterations; iIter++)
	{
	    sw.Reset();
	    sc = m_pILoop1->Loop(5);
	    m_ulNest4Time[iIter] = sw.Read();
	    Log (TEXT("Loop (4)"), sc);
	}

	//
	//  nesting 5 levels
	//

	for (iIter=0; iIter<m_ulIterations; iIter++)
	{
	    sw.Reset();
	    sc = m_pILoop1->Loop(6);
	    m_ulNest5Time[iIter] = sw.Read();
	    Log (TEXT("Loop (5)"), sc);
	}

	return S_OK;
}					  



SCODE CNestTest::Report (CTestOutput &output)
{
    output.WriteSectionHeader (Name(), TEXT("Nested ORpc Calls"), *m_pInput);

    output.WriteString (TEXT("\n"));
    output.WriteResults (TEXT("Nesting 2    "), m_ulIterations, m_ulNest2Time);
    output.WriteResults (TEXT("Nesting 3    "), m_ulIterations, m_ulNest3Time);
    output.WriteResults (TEXT("Nesting 4    "), m_ulIterations, m_ulNest4Time);
    output.WriteResults (TEXT("Nesting 5    "), m_ulIterations, m_ulNest5Time);

    return S_OK;
}