Files
mars-flaim/xflaim/util/colldeftestsrv.cpp
ahodgkinson 12a621dc04 Changed license to LGPL.
git-svn-id: https://svn.code.sf.net/p/flaim/code/trunk@1010 0109f412-320b-0410-ab79-c3e0c5ffbbe6
2007-01-23 11:22:22 +00:00

1017 lines
19 KiB
C++

//------------------------------------------------------------------------------
// Desc: Collection definition unit tests
// Tabs: 3
//
// Copyright (c) 2003-2007 Novell, Inc. All Rights Reserved.
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; version 2.1
// of the License.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// Library Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, contact Novell, Inc.
//
// To contact Novell about this file by physical or electronic mail,
// you may find current contact information at www.novell.com.
//
// $Id$
//------------------------------------------------------------------------------
#include "flmunittest.h"
#if defined( FLM_NLM)
#define DB_NAME_STR "SYS:\\TST.DB"
#else
#define DB_NAME_STR "tst.db"
#endif
static FLMBYTE gv_ucLargeBuffer[8192];
static void buildLargeBuffer( void);
/****************************************************************************
Desc:
****************************************************************************/
class ICollDefTestImpl : public TestBase
{
public:
const char * getName();
RCODE execute( void);
private:
RCODE importEncDefs( void);
RCODE importToCollection(
FLMUINT uiDictNum);
RCODE verifyDocument(
FLMUINT uiDictNum);
RCODE createDODocument(
FLMUINT uiCollNum,
FLMUINT64 * pui64NodeId);
RCODE verifyDODocument(
FLMUINT uiCollNum,
FLMUINT64 ui64NodeId);
FLMUINT m_uiAESDef;
FLMUINT m_uiDES3Def;
};
/****************************************************************************
Desc:
****************************************************************************/
RCODE getTest(
IFlmTest ** ppTest)
{
RCODE rc = NE_XFLM_OK;
if( (*ppTest = f_new ICollDefTestImpl) == NULL)
{
rc = NE_XFLM_MEM;
goto Exit;
}
Exit:
return rc;
}
/****************************************************************************
Desc:
****************************************************************************/
const char * ICollDefTestImpl::getName( void)
{
return( "Collection Definition Test");
}
/****************************************************************************
Desc:
****************************************************************************/
RCODE ICollDefTestImpl::importEncDefs( void)
{
RCODE rc = NE_XFLM_OK;
char * ppszEncDefs[] = {XFLM_ENC_AES_OPTION_STR, XFLM_ENC_DES3_OPTION_STR};
FLMUINT puiEncDef[ 2];
char szEncDef[ 200];
FLMUINT uiLoop = 0;
for(
uiLoop = 0;
uiLoop < sizeof(ppszEncDefs)/sizeof(ppszEncDefs[0]);
uiLoop++)
{
f_sprintf(
szEncDef,
"<xflaim:EncDef "
"xmlns:xs=\"http://www.w3.org/2001/XMLSchema\" "
"xmlns:xflaim=\"http://www.novell.com/XMLDatabase/Schema\" "
"xflaim:name=\"%s definition\" "
"xflaim:type=\"%s\" />",
ppszEncDefs[uiLoop],
ppszEncDefs[uiLoop]);
if ( RC_BAD( rc = importBuffer( szEncDef, XFLM_DICT_COLLECTION)))
{
MAKE_ERROR_STRING( "importBuffer failed.", m_szDetails, rc);
goto Exit;
}
f_sprintf( szEncDef, "%s definition", ppszEncDefs[uiLoop]);
if (RC_BAD( rc = m_pDb->getEncDefId( (char *)szEncDef,
(FLMUINT *)&puiEncDef[ uiLoop])))
{
goto Exit;
}
}
m_uiAESDef = puiEncDef[ 0];
m_uiDES3Def = puiEncDef[ 1];
Exit:
return rc;
}
/****************************************************************************
Desc:
****************************************************************************/
RCODE ICollDefTestImpl::importToCollection(
FLMUINT uiDictNum)
{
RCODE rc = NE_XFLM_OK;
char szBuffer[ 200];
FLMBOOL bTransBegun = FALSE;
if( RC_BAD( rc = m_pDb->transBegin( XFLM_UPDATE_TRANS)))
{
MAKE_ERROR_STRING( "transBegin failed.", m_szDetails, rc);
goto Exit;
}
bTransBegun = TRUE;
f_sprintf(
szBuffer,
"<sample> "
"<address>"
"<street>\"2999 Birches Lane\"</street>"
"<city>\"Anytown\"</city>"
"<state>\"MyState\"</state>"
"<zip>\"86507\"</zip>"
"</address>"
"</sample>");
if ( RC_BAD( rc = importBuffer( szBuffer, uiDictNum)))
{
MAKE_ERROR_STRING( "importBuffer failed.", m_szDetails, rc);
goto Exit;
}
if ( RC_BAD( rc = m_pDb->transCommit( )))
{
MAKE_ERROR_STRING( "transCommit failed.", m_szDetails, rc);
goto Exit;
}
bTransBegun = FALSE;
Exit:
if (bTransBegun)
{
m_pDb->transAbort();
}
return rc;
}
/****************************************************************************
Desc:
****************************************************************************/
RCODE ICollDefTestImpl::verifyDocument(
FLMUINT uiDictNum)
{
RCODE rc = NE_XFLM_OK;
IF_DOMNode * pNode = NULL;
char szValue[ 20];
char szLocalName[ 20];
FLMUINT uiBufSize = sizeof(szValue);
FLMUINT uiCharsReturned;
// Get the first ( and only) document
if (RC_BAD( rc = m_pDb->getFirstDocument( uiDictNum, &pNode)))
{
goto Exit;
}
// Verify the root node - s/b <sample>
if (RC_BAD( rc = pNode->getLocalName( m_pDb, szLocalName, uiBufSize,
&uiCharsReturned)))
{
goto Exit;
}
if (uiCharsReturned != f_strlen("sample"))
{
rc = RC_SET( NE_XFLM_FAILURE);
goto Exit;
}
if (f_strcmp( szLocalName, "sample"))
{
rc = RC_SET( NE_XFLM_FAILURE);
goto Exit;
}
// Verify the child node - s/b <address>
if (RC_BAD( rc = pNode->getFirstChild( m_pDb, &pNode)))
{
goto Exit;
}
if (RC_BAD( rc = pNode->getLocalName( m_pDb, szLocalName, uiBufSize,
&uiCharsReturned)))
{
goto Exit;
}
if (uiCharsReturned != f_strlen("address"))
{
rc = RC_SET( NE_XFLM_FAILURE);
goto Exit;
}
if (f_strcmp( szLocalName, "address"))
{
rc = RC_SET( NE_XFLM_FAILURE);
goto Exit;
}
// Verify the child node - s/b <street>
if (RC_BAD( rc = pNode->getFirstChild( m_pDb, &pNode)))
{
goto Exit;
}
if (RC_BAD( rc = pNode->getLocalName( m_pDb, szLocalName, uiBufSize,
&uiCharsReturned)))
{
goto Exit;
}
if (uiCharsReturned != f_strlen("street"))
{
rc = RC_SET( NE_XFLM_FAILURE);
goto Exit;
}
if (f_strcmp( szLocalName, "street"))
{
rc = RC_SET( NE_XFLM_FAILURE);
goto Exit;
}
// Verify the value.
if (RC_BAD( rc = pNode->getUTF8( m_pDb, (FLMBYTE *)szValue, uiBufSize,
0, uiBufSize, &uiCharsReturned)))
{
goto Exit;
}
if (uiCharsReturned != f_strlen("\"2999 Birches Lane\""))
{
rc = RC_SET( NE_XFLM_FAILURE);
goto Exit;
}
if (f_strcmp( szValue, "\"2999 Birches Lane\""))
{
rc = RC_SET( NE_XFLM_FAILURE);
goto Exit;
}
// Verify the sibling node - s/b <city>
if (RC_BAD( rc = pNode->getNextSibling( m_pDb, &pNode)))
{
goto Exit;
}
if (RC_BAD( rc = pNode->getLocalName( m_pDb, szLocalName, uiBufSize,
&uiCharsReturned)))
{
goto Exit;
}
if( uiCharsReturned != f_strlen("city"))
{
rc = RC_SET( NE_XFLM_FAILURE);
goto Exit;
}
if( f_strcmp( szLocalName, "city"))
{
rc = RC_SET( NE_XFLM_FAILURE);
goto Exit;
}
// Verify the value.
if (RC_BAD( rc = pNode->getUTF8( m_pDb, (FLMBYTE *)szValue, uiBufSize,
0, uiBufSize, &uiCharsReturned)))
{
goto Exit;
}
if (uiCharsReturned != f_strlen("\"AnyTown\""))
{
rc = RC_SET( NE_XFLM_FAILURE);
goto Exit;
}
if (f_strcmp( szValue, "\"Anytown\""))
{
rc = RC_SET( NE_XFLM_FAILURE);
goto Exit;
}
// Verify the sibling node - s/b <state>
if (RC_BAD( rc = pNode->getNextSibling( m_pDb, &pNode)))
{
goto Exit;
}
if (RC_BAD( rc = pNode->getLocalName( m_pDb, szLocalName, uiBufSize,
&uiCharsReturned)))
{
goto Exit;
}
if (uiCharsReturned != f_strlen("state"))
{
rc = RC_SET( NE_XFLM_FAILURE);
goto Exit;
}
if (f_strcmp( szLocalName, "state"))
{
rc = RC_SET( NE_XFLM_FAILURE);
goto Exit;
}
// Verify the value.
if (RC_BAD( rc = pNode->getUTF8( m_pDb, (FLMBYTE *)szValue, uiBufSize,
0, uiBufSize, &uiCharsReturned)))
{
goto Exit;
}
if (uiCharsReturned != f_strlen("\"MyState\""))
{
rc = RC_SET( NE_XFLM_FAILURE);
goto Exit;
}
if (f_strcmp( szValue, "\"MyState\""))
{
rc = RC_SET( NE_XFLM_FAILURE);
goto Exit;
}
// Verify the sibling node - s/b <zip>
if (RC_BAD( rc = pNode->getNextSibling( m_pDb, &pNode)))
{
goto Exit;
}
if (RC_BAD( rc = pNode->getLocalName( m_pDb, szLocalName, uiBufSize,
&uiCharsReturned)))
{
goto Exit;
}
if (uiCharsReturned != f_strlen("zip"))
{
rc = RC_SET( NE_XFLM_FAILURE);
goto Exit;
}
if (f_strcmp( szLocalName, "zip"))
{
rc = RC_SET( NE_XFLM_FAILURE);
goto Exit;
}
// Verify the value.
if (RC_BAD( rc = pNode->getUTF8( m_pDb, (FLMBYTE *)szValue, uiBufSize,
0, uiBufSize, &uiCharsReturned)))
{
goto Exit;
}
if (uiCharsReturned != f_strlen("\"86507\""))
{
rc = RC_SET( NE_XFLM_FAILURE);
goto Exit;
}
if (f_strcmp( szValue, "\"86507\""))
{
rc = RC_SET( NE_XFLM_FAILURE);
goto Exit;
}
Exit:
if (pNode)
{
pNode->Release();
}
return rc;
}
/****************************************************************************
Desc:
****************************************************************************/
RCODE ICollDefTestImpl::createDODocument(
FLMUINT uiCollNum,
FLMUINT64 * pui64NodeId)
{
RCODE rc = NE_XFLM_OK;
IF_DOMNode * pNode = NULL;
IF_DOMNode * pAttr = NULL;
FLMUINT uiBuffSize = sizeof(gv_ucLargeBuffer);
FLMBOOL bTransBegun = FALSE;
if( RC_BAD( rc = m_pDb->transBegin( XFLM_UPDATE_TRANS)))
{
MAKE_ERROR_STRING( "transBegin failed.", m_szDetails, rc);
goto Exit;
}
bTransBegun = TRUE;
// Create a new document
if (RC_BAD( rc = m_pDb->createRootElement( uiCollNum, ELM_ELEMENT_TAG,
&pNode, pui64NodeId)))
{
goto Exit;
}
if (RC_BAD( rc = pNode->createAttribute( m_pDb,
ATTR_ENCRYPTION_KEY_TAG, &pAttr)))
{
goto Exit;
}
if (RC_BAD( rc = pAttr->setBinary( m_pDb, gv_ucLargeBuffer,
uiBuffSize, TRUE, 0)))
{
goto Exit;
}
if ( RC_BAD( rc = m_pDb->transCommit()))
{
MAKE_ERROR_STRING( "transCommit failed.", m_szDetails, rc);
goto Exit;
}
bTransBegun = FALSE;
Exit:
if (pAttr)
{
pAttr->Release();
}
if (pNode)
{
pNode->Release();
}
if (bTransBegun)
{
m_pDb->transAbort();
}
return( rc);
}
/****************************************************************************
Desc:
****************************************************************************/
RCODE ICollDefTestImpl::verifyDODocument(
FLMUINT uiCollNum,
FLMUINT64 ui64NodeId)
{
RCODE rc = NE_XFLM_OK;
IF_DOMNode * pNode = NULL;
IF_DOMNode * pAttr = NULL;
FLMBYTE * pucBuff = NULL;
FLMUINT uiLength;
FLMUINT uiLengthRV;
FLMUINT uiLoop;
// Create a new document
if (RC_BAD( rc = m_pDb->getDocument( uiCollNum, XFLM_EXACT,
ui64NodeId, &pNode)))
{
goto Exit;
}
if (RC_BAD( rc = pNode->getAttribute( m_pDb,
ATTR_ENCRYPTION_KEY_TAG, &pAttr)))
{
goto Exit;
}
if (RC_BAD( rc = pAttr->getDataLength(m_pDb, &uiLength)))
{
goto Exit;
}
if (uiLength != sizeof( gv_ucLargeBuffer))
{
rc = RC_SET( NE_XFLM_FAILURE);
goto Exit;
}
if (RC_BAD( rc = f_alloc( sizeof( gv_ucLargeBuffer), &pucBuff)))
{
goto Exit;
}
if (RC_BAD( rc = pAttr->getBinary( m_pDb, pucBuff, 0, uiLength, &uiLengthRV)))
{
goto Exit;
}
if (uiLength != uiLengthRV)
{
rc = RC_SET( NE_XFLM_FAILURE);
goto Exit;
}
for (uiLoop = 0; uiLoop < sizeof( gv_ucLargeBuffer); uiLoop++)
{
if (gv_ucLargeBuffer[ uiLoop] != pucBuff[ uiLoop])
{
rc = RC_SET( NE_XFLM_FAILURE);
goto Exit;
}
}
Exit:
if (pucBuff)
{
f_free( &pucBuff);
}
if (pAttr)
{
pAttr->Release();
}
if (pNode)
{
pNode->Release();
}
return( rc);
}
/****************************************************************************
Desc:
****************************************************************************/
RCODE ICollDefTestImpl::execute( void)
{
RCODE rc = NE_XFLM_OK;
FLMBOOL bDibCreated = FALSE;
FLMUINT uiAESDictNum = 0;
FLMUINT uiDES3DictNum = 0;
FLMUINT64 ui64AESDoc;
FLMUINT64 ui64DES3Doc;
IF_DOMNode * pNode = NULL;
IF_DOMNode * pAttr = NULL;
IF_DOMNode * pCollDef = NULL;
IF_DOMNode * pTmpNode = NULL;
FLMBOOL bTransBegun = FALSE;
beginTest(
"Encrypted Collection Definition Test",
"Define encrypted collections tests.",
"1) create a database 2) create required encryption definitions "
"3) create some encrypted collection definitions.",
"none");
f_strcpy (m_szDetails, "No Additional Info.");
if ( RC_BAD( rc = initCleanTestState( DB_NAME_STR)))
{
MAKE_ERROR_STRING( "Failed to initialize test state.", m_szDetails, rc);
goto Exit;
}
#ifdef FLM_USE_NICI
if ( RC_BAD( rc = m_pDb->transBegin( XFLM_UPDATE_TRANS, FLM_NO_TIMEOUT)))
{
MAKE_ERROR_STRING( "transBegin failed.", m_szDetails, rc);
goto Exit;
}
bTransBegun = TRUE;
if ( RC_BAD( rc = importEncDefs()))
{
goto Exit;
}
if ( RC_BAD( rc = m_pDb->transCommit( )))
{
MAKE_ERROR_STRING( "transCommit failed.", m_szDetails, rc);
goto Exit;
}
bTransBegun = FALSE;
#endif
// Start an update transaction
if( RC_BAD( rc = m_pDb->transBegin( XFLM_UPDATE_TRANS)))
{
MAKE_ERROR_STRING( "transBegin failed.", m_szDetails, rc);
goto Exit;
}
bTransBegun = TRUE;
bDibCreated = TRUE;
// Create a collection def
/*
<Collection name="Encrypted Collection AES" encId=1/>
*/
if ( RC_BAD( rc = m_pDb->createRootElement(
XFLM_DICT_COLLECTION,
ELM_COLLECTION_TAG,
&pCollDef)))
{
MAKE_ERROR_STRING( "createRootElement failed.", m_szDetails, rc);
goto Exit;
}
if ( RC_BAD( rc = pCollDef->createAttribute(
m_pDb,
ATTR_NAME_TAG,
&pAttr)))
{
MAKE_ERROR_STRING( "createAttribute failed.", m_szDetails, rc);
goto Exit;
}
if ( RC_BAD( rc = pAttr->setUTF8( m_pDb,
(FLMBYTE *)"Encrypted Collection AES")))
{
MAKE_ERROR_STRING( "setUTF8 failed.", m_szDetails, rc);
goto Exit;
}
#ifdef FLM_USE_NICI
if ( RC_BAD( rc = pCollDef->createAttribute(
m_pDb,
ATTR_ENCRYPTION_ID_TAG,
&pAttr)))
{
MAKE_ERROR_STRING( "createAttribute failed.", m_szDetails, rc);
goto Exit;
}
if ( RC_BAD( rc = pAttr->setUINT(
m_pDb,
m_uiAESDef)))
{
MAKE_ERROR_STRING( "setUINT failed.", m_szDetails, rc);
goto Exit;
}
#endif
if ( RC_BAD( rc = m_pDb->documentDone( pCollDef)))
{
MAKE_ERROR_STRING( "documentDone failed.", m_szDetails, rc);
goto Exit;
}
if ( RC_BAD( rc = pCollDef->getAttribute(
m_pDb,
ATTR_DICT_NUMBER_TAG,
&pAttr)))
{
MAKE_ERROR_STRING( "getAttribute failed.", m_szDetails, rc);
goto Exit;
}
// Get the dictionary number (used by later tests)
if ( RC_BAD( rc = pAttr->getUINT(
m_pDb,
&uiAESDictNum)))
{
MAKE_ERROR_STRING( "getUINT failed.", m_szDetails, rc);
goto Exit;
}
if ( RC_BAD( rc = m_pDb->transCommit( )))
{
MAKE_ERROR_STRING( "transCommit failed.", m_szDetails, rc);
goto Exit;
}
bTransBegun = FALSE;
// Create an encrypted collection definition for DES3 encryption
if( RC_BAD( rc = m_pDb->transBegin( XFLM_UPDATE_TRANS)))
{
MAKE_ERROR_STRING( "transBegin failed.", m_szDetails, rc);
goto Exit;
}
bTransBegun = TRUE;
/*
<Collection name="Encrypted Collection DES3" encId=2/>
*/
if ( RC_BAD( rc = m_pDb->createRootElement(
XFLM_DICT_COLLECTION,
ELM_COLLECTION_TAG,
&pCollDef)))
{
MAKE_ERROR_STRING( "createRootElement failed.", m_szDetails, rc);
goto Exit;
}
if ( RC_BAD( rc = pCollDef->createAttribute(
m_pDb,
ATTR_NAME_TAG,
&pAttr)))
{
MAKE_ERROR_STRING( "createAttribute failed.", m_szDetails, rc);
goto Exit;
}
if ( RC_BAD( rc = pAttr->setUTF8(
m_pDb,
(FLMBYTE *)"Encrypted Collection DES3")))
{
MAKE_ERROR_STRING( "setUTF8 failed.", m_szDetails, rc);
goto Exit;
}
#ifdef FLM_USE_NICI
if ( RC_BAD( rc = pCollDef->createAttribute(
m_pDb,
ATTR_ENCRYPTION_ID_TAG,
&pAttr)))
{
MAKE_ERROR_STRING( "createAttribute failed.", m_szDetails, rc);
goto Exit;
}
if ( RC_BAD( rc = pAttr->setUINT(
m_pDb,
m_uiDES3Def)))
{
MAKE_ERROR_STRING( "setUINT failed.", m_szDetails, rc);
goto Exit;
}
#endif
if ( RC_BAD( rc = m_pDb->documentDone( pCollDef)))
{
MAKE_ERROR_STRING( "documentDone failed.", m_szDetails, rc);
goto Exit;
}
if ( RC_BAD( rc = pCollDef->getAttribute(
m_pDb,
ATTR_DICT_NUMBER_TAG,
&pAttr)))
{
MAKE_ERROR_STRING( "getAttribute failed.", m_szDetails, rc);
goto Exit;
}
// Get the dictionary number (used by later tests)
if ( RC_BAD( rc = pAttr->getUINT(
m_pDb,
&uiDES3DictNum)))
{
MAKE_ERROR_STRING( "getUINT failed.", m_szDetails, rc);
goto Exit;
}
if ( RC_BAD( rc = m_pDb->transCommit( )))
{
MAKE_ERROR_STRING( "transCommit failed.", m_szDetails, rc);
goto Exit;
}
bTransBegun = FALSE;
endTest("PASS");
beginTest( "Import to Encrypted Collections Tests",
"Verify that we can import data into an encrypted collection",
"Import a document into each of the previously defined collections."
" Retrieve them and verify them against the original document.",
"none");
if (RC_BAD( rc = importToCollection( uiAESDictNum)))
{
goto Exit;
}
if (RC_BAD( rc = importToCollection( uiDES3DictNum)))
{
goto Exit;
}
// Close the database, reopen it and verify the documents.
if( pNode)
{
pNode->Release();
pNode = NULL;
}
if( pAttr)
{
pAttr->Release();
pAttr = NULL;
}
if( pCollDef)
{
pCollDef->Release();
pCollDef = NULL;
}
if( pTmpNode)
{
pTmpNode->Release();
pTmpNode = NULL;
}
if( m_pDb->Release())
{
rc = RC_SET( NE_XFLM_FAILURE);
goto Exit;
}
m_pDb = NULL;
// Open the database.
if( RC_BAD( rc = m_pDbSystem->dbOpen( DB_NAME_STR, NULL, NULL, NULL,
FALSE, &m_pDb)))
{
goto Exit;
}
// Verify the documents at a time and compare them.
if (RC_BAD( rc = verifyDocument( uiAESDictNum)))
{
goto Exit;
}
if (RC_BAD( rc = verifyDocument( uiDES3DictNum)))
{
goto Exit;
}
endTest( "PASS");
beginTest( "Encrypted Data Only Block Test",
"Verify that we can encrypt the data only blocks that are part of an encrypted collection",
"Create a document with a very large value, then retrieve and verify it.",
"none");
buildLargeBuffer();
if (RC_BAD( rc = createDODocument( uiAESDictNum, &ui64AESDoc)))
{
goto Exit;
}
if (RC_BAD( rc = createDODocument( uiDES3DictNum, &ui64DES3Doc)))
{
goto Exit;
}
// Close the database, reopen it and verify the documents.
if ( m_pDb->Release())
{
rc = RC_SET( NE_XFLM_FAILURE);
goto Exit;
}
m_pDb = NULL;
// Open the database.
if( RC_BAD( rc = m_pDbSystem->dbOpen( DB_NAME_STR, NULL, NULL,
NULL, FALSE, &m_pDb)))
{
goto Exit;
}
if( RC_BAD( rc = verifyDODocument( uiAESDictNum, ui64AESDoc)))
{
goto Exit;
}
if( RC_BAD( rc = verifyDODocument( uiDES3DictNum, ui64DES3Doc)))
{
goto Exit;
}
endTest( "PASS");
Exit:
if ( RC_BAD( rc))
{
endTest( "FAIL");
}
if( pNode)
{
pNode->Release();
}
if( pAttr)
{
pAttr->Release();
}
if( pCollDef)
{
pCollDef->Release();
}
if( pTmpNode)
{
pTmpNode->Release();
}
if( bTransBegun)
{
if( RC_OK( rc))
{
m_pDb->transCommit();
}
else
{
m_pDb->transAbort();
}
}
shutdownTestState( DB_NAME_STR, bDibCreated);
return( rc);
}
/****************************************************************************
Desc:
****************************************************************************/
static void buildLargeBuffer( void)
{
FLMUINT uiLoop;
for (uiLoop = 0; uiLoop < sizeof(gv_ucLargeBuffer); uiLoop++)
{
gv_ucLargeBuffer[ uiLoop] = (FLMBYTE)(uiLoop & 0xFF);
}
}