2667 lines
55 KiB
C++
2667 lines
55 KiB
C++
|
//+-------------------------------------------------------------------------
|
||
|
//
|
||
|
// Microsoft Windows
|
||
|
// Copyright (C) Microsoft Corporation, 1992 - 1992.
|
||
|
//
|
||
|
// File: Fail.CXX
|
||
|
//
|
||
|
// Contents: Docfile Failure Test
|
||
|
//
|
||
|
// History: 21-Jan-93 AlexT Created
|
||
|
//
|
||
|
// Notes: This test cycles through all failure points for each call,
|
||
|
// verifying that we clean up correctly.
|
||
|
//
|
||
|
//--------------------------------------------------------------------------
|
||
|
|
||
|
#include <headers.cxx>
|
||
|
|
||
|
#pragma hdrstop
|
||
|
|
||
|
#include <sift.hxx>
|
||
|
|
||
|
#if DBG != 1
|
||
|
#error FAIL.EXE requires DBG == 1
|
||
|
#endif
|
||
|
|
||
|
// #define BREADTHTEST // Comment out for depth testing (just most recent tests)
|
||
|
|
||
|
//+-------------------------------------------------------------------------
|
||
|
//
|
||
|
// Function: VerifyDisk
|
||
|
//
|
||
|
// Synopsis: verify that disk file does or does not exist
|
||
|
//
|
||
|
// Arguments: [fExist] -- TRUE if file should exist, else FALSE
|
||
|
// [iteration] -- iteration number
|
||
|
//
|
||
|
// History: 22-Jan-93 AlexT Created
|
||
|
//
|
||
|
//--------------------------------------------------------------------------
|
||
|
|
||
|
void VerifyDisk(BOOL fExist, LONG iteration)
|
||
|
{
|
||
|
if (_access("c:\\testfail.dfl", 0) == 0)
|
||
|
{
|
||
|
if (!fExist)
|
||
|
{
|
||
|
printf("..Iteration %ld, file still exists\n", iteration);
|
||
|
}
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
if (fExist)
|
||
|
{
|
||
|
printf("..Iteration %ld, file doesn't exist\n", iteration);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//+-------------------------------------------------------------------------
|
||
|
//
|
||
|
// Function: VerifyMemory
|
||
|
//
|
||
|
// Arguments: [iteration] -- iteration number
|
||
|
//
|
||
|
// Requires: Caller should expect 0 memory to be allocated
|
||
|
//
|
||
|
// History: 22-Jan-93 AlexT Created
|
||
|
//
|
||
|
//--------------------------------------------------------------------------
|
||
|
|
||
|
void VerifyMemory(LONG iteration)
|
||
|
{
|
||
|
if (DfGetMemAlloced() > 0L)
|
||
|
{
|
||
|
printf("..Iteration %ld - memory allocated\n", iteration);
|
||
|
DfPrintAllocs();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//+-------------------------------------------------------------------------
|
||
|
//
|
||
|
// Function: VerifyClean
|
||
|
//
|
||
|
// Synopsis: checks disk, memory
|
||
|
//
|
||
|
// Arguments: [sc] -- status code
|
||
|
// [dwMode] -- Docfile mode
|
||
|
// [iteration] -- iteration
|
||
|
//
|
||
|
// History: 22-Jan-93 AlexT Created
|
||
|
//
|
||
|
//--------------------------------------------------------------------------
|
||
|
|
||
|
void VerifyClean(SCODE sc, DWORD dwMode, LONG iteration)
|
||
|
{
|
||
|
VerifyDisk(SUCCEEDED(sc) &&
|
||
|
!(dwMode & STGM_DELETEONRELEASE), iteration);
|
||
|
VerifyMemory(iteration);
|
||
|
}
|
||
|
|
||
|
//+-------------------------------------------------------------------------
|
||
|
//
|
||
|
// Function: CreateWorkingDocfile
|
||
|
//
|
||
|
// Synopsis: create and verify the test Docfile
|
||
|
//
|
||
|
// Arguments: [dwMode] -- Docfile creation mode
|
||
|
// [ppstg] -- placeholder for IStorage
|
||
|
// [iteration] -- iteration number
|
||
|
//
|
||
|
// Returns: SCODE
|
||
|
//
|
||
|
// Modifies: ppstg
|
||
|
//
|
||
|
// History: 22-Jan-93 AlexT Created
|
||
|
//
|
||
|
//--------------------------------------------------------------------------
|
||
|
|
||
|
SCODE CreateWorkingDocfile(DWORD dwMode, IStorage **ppstg, LONG iteration)
|
||
|
{
|
||
|
SCODE sc;
|
||
|
|
||
|
// Make sample call
|
||
|
remove("c:\\testfail.dfl");
|
||
|
sc = DfGetScode(StgCreateDocfile(
|
||
|
"c:\\testfail.dfl",
|
||
|
dwMode,
|
||
|
0,
|
||
|
ppstg));
|
||
|
|
||
|
if (FAILED(sc))
|
||
|
{
|
||
|
if (iteration == 0)
|
||
|
{
|
||
|
// This was a prep call. Prep calls aren't supposed to fail
|
||
|
if (sc == STG_E_INVALIDFLAG)
|
||
|
{
|
||
|
// Probably a bad combination of mode flags
|
||
|
printf("..Iteration %ld, sc = STG_E_INVALIDFLAG (OK)\n",
|
||
|
iteration);
|
||
|
}
|
||
|
else if (FAILED(sc))
|
||
|
{
|
||
|
// Something unexpected
|
||
|
printf("..Iteration %ld failed - sc = 0x%lX\n",
|
||
|
iteration, sc);
|
||
|
}
|
||
|
}
|
||
|
else // iteration != 0
|
||
|
{
|
||
|
if (sc == STG_E_INSUFFICIENTMEMORY || sc == STG_E_MEDIUMFULL)
|
||
|
{
|
||
|
// we expected these failures; do nothing
|
||
|
;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
printf("..Iteration %ld failed - sc = 0x%lX (??)\n",
|
||
|
iteration, sc);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return(sc);
|
||
|
}
|
||
|
|
||
|
//+-------------------------------------------------------------------------
|
||
|
//
|
||
|
// Class: CTestStgCreate
|
||
|
//
|
||
|
// Purpose: Test StgCreateDocfile
|
||
|
//
|
||
|
// Interface: CTestCase
|
||
|
//
|
||
|
// History: 26-Jan-93 AlexT Created
|
||
|
//
|
||
|
// Notes:
|
||
|
//
|
||
|
//--------------------------------------------------------------------------
|
||
|
|
||
|
class CTestStgCreate : public CTestCase
|
||
|
{
|
||
|
private:
|
||
|
SCODE _sc;
|
||
|
CModeDf _mdf;
|
||
|
IStorage *_pstg;
|
||
|
|
||
|
public:
|
||
|
virtual BOOL Init(void);
|
||
|
virtual SCODE Prep(LONG iteration);
|
||
|
virtual SCODE Call(LONG iteration);
|
||
|
virtual void EndCall(LONG iteration);
|
||
|
virtual void CallVerify(LONG iteration);
|
||
|
virtual void EndPrep(LONG iteration);
|
||
|
virtual void EndVerify(LONG iteration);
|
||
|
virtual BOOL Next(void);
|
||
|
};
|
||
|
|
||
|
BOOL CTestStgCreate::Init(void)
|
||
|
{
|
||
|
printf("SIFT StgCreateDocfile\n");
|
||
|
_mdf.Init();
|
||
|
return(TRUE);
|
||
|
}
|
||
|
|
||
|
SCODE CTestStgCreate::Prep(LONG iteration)
|
||
|
{
|
||
|
// inherit this?
|
||
|
return(NOERROR);
|
||
|
}
|
||
|
|
||
|
SCODE CTestStgCreate::Call(LONG iteration)
|
||
|
{
|
||
|
if (iteration == 0)
|
||
|
printf("Docfile Mode 0x%lX\n", _mdf.GetMode());
|
||
|
|
||
|
_sc = CreateWorkingDocfile(_mdf.GetMode(), &_pstg, iteration);
|
||
|
|
||
|
return(_sc);
|
||
|
}
|
||
|
|
||
|
void CTestStgCreate::EndCall(LONG iteration)
|
||
|
{
|
||
|
_pstg->Release();
|
||
|
}
|
||
|
|
||
|
void CTestStgCreate::CallVerify(LONG iteration)
|
||
|
{
|
||
|
VerifyClean(_sc, _mdf.GetMode(), iteration);
|
||
|
}
|
||
|
|
||
|
void CTestStgCreate::EndPrep(LONG iteration)
|
||
|
{
|
||
|
// inherit this?
|
||
|
}
|
||
|
|
||
|
void CTestStgCreate::EndVerify(LONG iteration)
|
||
|
{
|
||
|
VerifyClean(_sc, _mdf.GetMode(), iteration);
|
||
|
}
|
||
|
|
||
|
BOOL CTestStgCreate::Next(void)
|
||
|
{
|
||
|
if (!_mdf.Next())
|
||
|
return FALSE;
|
||
|
|
||
|
return(TRUE);
|
||
|
}
|
||
|
|
||
|
//+-------------------------------------------------------------------------
|
||
|
//
|
||
|
// Class: CTestCreateStorage
|
||
|
//
|
||
|
// Purpose: Test IStorage::CreateStorage
|
||
|
//
|
||
|
// Interface: CTestCase
|
||
|
//
|
||
|
// History: 26-Jan-93 AlexT Created
|
||
|
//
|
||
|
// Notes:
|
||
|
//
|
||
|
//--------------------------------------------------------------------------
|
||
|
|
||
|
class CTestCreateStorage : public CTestCase
|
||
|
{
|
||
|
private:
|
||
|
SCODE _sc;
|
||
|
|
||
|
CModeDf _mdf;
|
||
|
IStorage *_pstg;
|
||
|
|
||
|
CModeStg _mstg;
|
||
|
IStorage *_pstgChild;
|
||
|
|
||
|
public:
|
||
|
virtual BOOL Init(void);
|
||
|
virtual SCODE Prep(LONG iteration);
|
||
|
virtual SCODE Call(LONG iteration);
|
||
|
virtual void EndCall(LONG iteration);
|
||
|
virtual void CallVerify(LONG iteration);
|
||
|
virtual void EndPrep(LONG iteration);
|
||
|
virtual void EndVerify(LONG iteration);
|
||
|
virtual BOOL Next(void);
|
||
|
};
|
||
|
|
||
|
BOOL CTestCreateStorage::Init(void)
|
||
|
{
|
||
|
printf("SIFT IStorage::CreateStorage\n");
|
||
|
_mdf.Init();
|
||
|
_mstg.Init();
|
||
|
return(TRUE);
|
||
|
}
|
||
|
|
||
|
SCODE CTestCreateStorage::Prep(LONG iteration)
|
||
|
{
|
||
|
_sc = CreateWorkingDocfile(_mdf.GetMode(), &_pstg, 0);
|
||
|
return(_sc);
|
||
|
}
|
||
|
|
||
|
SCODE CTestCreateStorage::Call(LONG iteration)
|
||
|
{
|
||
|
SCODE sc;
|
||
|
|
||
|
if (iteration == 0)
|
||
|
printf("Docfile Mode 0x%lX, Child Storage Mode 0x%lX\n",
|
||
|
_mdf.GetMode(), _mstg.GetMode());
|
||
|
|
||
|
sc = DfGetScode(_pstg->CreateStorage(
|
||
|
"TestFail Storage",
|
||
|
_mstg.GetMode(),
|
||
|
0,
|
||
|
0,
|
||
|
&_pstgChild));
|
||
|
|
||
|
return(sc);
|
||
|
}
|
||
|
|
||
|
void CTestCreateStorage::EndCall(LONG iteration)
|
||
|
{
|
||
|
_pstgChild->Release();
|
||
|
}
|
||
|
|
||
|
void CTestCreateStorage::CallVerify(LONG iteration)
|
||
|
{
|
||
|
}
|
||
|
|
||
|
void CTestCreateStorage::EndPrep(LONG iteration)
|
||
|
{
|
||
|
_pstg->Release();
|
||
|
}
|
||
|
|
||
|
void CTestCreateStorage::EndVerify(LONG iteration)
|
||
|
{
|
||
|
VerifyClean(_sc, _mdf.GetMode(), iteration);
|
||
|
}
|
||
|
|
||
|
BOOL CTestCreateStorage::Next(void)
|
||
|
{
|
||
|
if (!_mstg.Next())
|
||
|
{
|
||
|
_mstg.Init();
|
||
|
if (!_mdf.Next())
|
||
|
return(FALSE);
|
||
|
}
|
||
|
|
||
|
return(TRUE);
|
||
|
}
|
||
|
|
||
|
//+-------------------------------------------------------------------------
|
||
|
//
|
||
|
// Class: CTestCreateStream
|
||
|
//
|
||
|
// Purpose: Test IStorage::CreateStream
|
||
|
//
|
||
|
// Interface: CTestCase
|
||
|
//
|
||
|
// History: 26-Jan-93 AlexT Created
|
||
|
//
|
||
|
// Notes:
|
||
|
//
|
||
|
//--------------------------------------------------------------------------
|
||
|
|
||
|
class CTestCreateStream : public CTestCase
|
||
|
{
|
||
|
private:
|
||
|
SCODE _sc;
|
||
|
|
||
|
CModeDf _mdf;
|
||
|
IStorage *_pstg;
|
||
|
|
||
|
CModeStm _mstm;
|
||
|
IStream *_pstmChild;
|
||
|
|
||
|
public:
|
||
|
virtual BOOL Init(void);
|
||
|
virtual SCODE Prep(LONG iteration);
|
||
|
virtual SCODE Call(LONG iteration);
|
||
|
virtual void EndCall(LONG iteration);
|
||
|
virtual void CallVerify(LONG iteration);
|
||
|
virtual void EndPrep(LONG iteration);
|
||
|
virtual void EndVerify(LONG iteration);
|
||
|
virtual BOOL Next(void);
|
||
|
};
|
||
|
|
||
|
BOOL CTestCreateStream::Init(void)
|
||
|
{
|
||
|
printf("SIFT IStorage::CreateStream\n");
|
||
|
_mdf.Init();
|
||
|
_mstm.Init();
|
||
|
return(TRUE);
|
||
|
}
|
||
|
|
||
|
SCODE CTestCreateStream::Prep(LONG iteration)
|
||
|
{
|
||
|
_sc = CreateWorkingDocfile(_mdf.GetMode(), &_pstg, 0);
|
||
|
return(_sc);
|
||
|
}
|
||
|
|
||
|
SCODE CTestCreateStream::Call(LONG iteration)
|
||
|
{
|
||
|
SCODE sc;
|
||
|
|
||
|
if (iteration == 0)
|
||
|
printf("Docfile Mode 0x%lX, Child Stream Mode 0x%lX\n",
|
||
|
_mdf.GetMode(), _mstm.GetMode());
|
||
|
|
||
|
sc = DfGetScode(_pstg->CreateStream(
|
||
|
"TestFail Stream",
|
||
|
_mstm.GetMode(),
|
||
|
0,
|
||
|
0,
|
||
|
&_pstmChild));
|
||
|
|
||
|
return(sc);
|
||
|
}
|
||
|
|
||
|
void CTestCreateStream::EndCall(LONG iteration)
|
||
|
{
|
||
|
_pstmChild->Release();
|
||
|
}
|
||
|
|
||
|
void CTestCreateStream::CallVerify(LONG iteration)
|
||
|
{
|
||
|
}
|
||
|
|
||
|
void CTestCreateStream::EndPrep(LONG iteration)
|
||
|
{
|
||
|
_pstg->Release();
|
||
|
}
|
||
|
|
||
|
void CTestCreateStream::EndVerify(LONG iteration)
|
||
|
{
|
||
|
VerifyClean(_sc, _mdf.GetMode(), iteration);
|
||
|
}
|
||
|
|
||
|
BOOL CTestCreateStream::Next(void)
|
||
|
{
|
||
|
if (!_mstm.Next())
|
||
|
{
|
||
|
_mstm.Init();
|
||
|
if (!_mdf.Next())
|
||
|
return(FALSE);
|
||
|
}
|
||
|
|
||
|
return(TRUE);
|
||
|
}
|
||
|
|
||
|
//+-------------------------------------------------------------------------
|
||
|
//
|
||
|
// Class: CTestWrite
|
||
|
//
|
||
|
// Purpose: Test IStream::Write
|
||
|
//
|
||
|
// Interface: CTestCase
|
||
|
//
|
||
|
// History: 26-Jan-93 AlexT Created
|
||
|
//
|
||
|
// Notes:
|
||
|
//
|
||
|
//--------------------------------------------------------------------------
|
||
|
|
||
|
class CTestWrite : public CTestCase
|
||
|
{
|
||
|
private:
|
||
|
SCODE _sc;
|
||
|
|
||
|
CModeDf _mdf;
|
||
|
IStorage *_pstg;
|
||
|
|
||
|
CModeStm _mstm;
|
||
|
IStream *_pstmChild;
|
||
|
|
||
|
public:
|
||
|
virtual BOOL Init(void);
|
||
|
virtual SCODE Prep(LONG iteration);
|
||
|
virtual SCODE Call(LONG iteration);
|
||
|
virtual void EndCall(LONG iteration);
|
||
|
virtual void CallVerify(LONG iteration);
|
||
|
virtual void EndPrep(LONG iteration);
|
||
|
virtual void EndVerify(LONG iteration);
|
||
|
virtual BOOL Next(void);
|
||
|
};
|
||
|
|
||
|
BOOL CTestWrite::Init(void)
|
||
|
{
|
||
|
printf("SIFT IStream::Write\n");
|
||
|
_mdf.Init();
|
||
|
_mstm.Init();
|
||
|
return(TRUE);
|
||
|
}
|
||
|
|
||
|
SCODE CTestWrite::Prep(LONG iteration)
|
||
|
{
|
||
|
_sc = CreateWorkingDocfile(_mdf.GetMode(), &_pstg, 0);
|
||
|
if (SUCCEEDED(_sc))
|
||
|
{
|
||
|
_sc = DfGetScode(_pstg->CreateStream(
|
||
|
"TestFail Stream",
|
||
|
_mstm.GetMode(),
|
||
|
0,
|
||
|
0,
|
||
|
&_pstmChild));
|
||
|
|
||
|
if (FAILED(_sc))
|
||
|
_pstg->Release();
|
||
|
}
|
||
|
return(_sc);
|
||
|
}
|
||
|
|
||
|
SCODE CTestWrite::Call(LONG iteration)
|
||
|
{
|
||
|
SCODE sc;
|
||
|
ULONG cb = 1;
|
||
|
char c = 'X';
|
||
|
ULONG cbWritten;
|
||
|
|
||
|
if (iteration == 0)
|
||
|
printf("Docfile Mode 0x%lX, Stream Mode 0x%lX, Write %ld bytes\n",
|
||
|
_mdf.GetMode(), _mstm.GetMode(), cb);
|
||
|
|
||
|
sc = DfGetScode(_pstmChild->Write(&c, cb, &cbWritten));
|
||
|
|
||
|
if (FAILED(sc))
|
||
|
{
|
||
|
if (sc != STG_E_MEDIUMFULL)
|
||
|
printf("..Iteration %ld - failed - sc = 0x%lX\n",
|
||
|
iteration, sc);
|
||
|
}
|
||
|
return(sc);
|
||
|
}
|
||
|
|
||
|
void CTestWrite::EndCall(LONG iteration)
|
||
|
{
|
||
|
}
|
||
|
|
||
|
void CTestWrite::CallVerify(LONG iteration)
|
||
|
{
|
||
|
}
|
||
|
|
||
|
void CTestWrite::EndPrep(LONG iteration)
|
||
|
{
|
||
|
_pstmChild->Release();
|
||
|
_pstg->Release();
|
||
|
}
|
||
|
|
||
|
void CTestWrite::EndVerify(LONG iteration)
|
||
|
{
|
||
|
VerifyClean(_sc, _mdf.GetMode(), iteration);
|
||
|
}
|
||
|
|
||
|
BOOL CTestWrite::Next(void)
|
||
|
{
|
||
|
if (!_mstm.Next())
|
||
|
{
|
||
|
_mstm.Init();
|
||
|
if (!_mdf.Next())
|
||
|
return(FALSE);
|
||
|
}
|
||
|
|
||
|
return(TRUE);
|
||
|
}
|
||
|
|
||
|
//+-------------------------------------------------------------------------
|
||
|
//
|
||
|
// Class: CTestOpenStream
|
||
|
//
|
||
|
// Purpose: Test IStorage::OpenStream
|
||
|
//
|
||
|
// Interface: CTestCase
|
||
|
//
|
||
|
// History: 26-Jan-93 AlexT Created
|
||
|
//
|
||
|
// Notes:
|
||
|
//
|
||
|
//--------------------------------------------------------------------------
|
||
|
|
||
|
class CTestOpenStream : public CTestCase
|
||
|
{
|
||
|
private:
|
||
|
SCODE _sc;
|
||
|
|
||
|
CModeDf _mdf;
|
||
|
IStorage *_pstg;
|
||
|
|
||
|
CModeStm _mstm;
|
||
|
IStream *_pstm;
|
||
|
|
||
|
public:
|
||
|
virtual BOOL Init(void);
|
||
|
virtual SCODE Prep(LONG iteration);
|
||
|
virtual SCODE Call(LONG iteration);
|
||
|
virtual void EndCall(LONG iteration);
|
||
|
virtual void CallVerify(LONG iteration);
|
||
|
virtual void EndPrep(LONG iteration);
|
||
|
virtual void EndVerify(LONG iteration);
|
||
|
virtual BOOL Next(void);
|
||
|
};
|
||
|
|
||
|
BOOL CTestOpenStream::Init(void)
|
||
|
{
|
||
|
printf("SIFT IStorage::OpenStream\n");
|
||
|
_mdf.Init();
|
||
|
_mstm.Init();
|
||
|
return(TRUE);
|
||
|
}
|
||
|
|
||
|
SCODE CTestOpenStream::Prep(LONG iteration)
|
||
|
{
|
||
|
_sc = CreateWorkingDocfile(_mdf.GetMode(), &_pstg, 0);
|
||
|
if (SUCCEEDED(_sc))
|
||
|
{
|
||
|
_sc = DfGetScode(_pstg->CreateStream(
|
||
|
"TestFail Stream",
|
||
|
_mstm.GetMode(),
|
||
|
0,
|
||
|
0,
|
||
|
&_pstm));
|
||
|
|
||
|
if (FAILED(_sc))
|
||
|
_pstg->Release();
|
||
|
else
|
||
|
_pstm->Release();
|
||
|
}
|
||
|
return(_sc);
|
||
|
}
|
||
|
|
||
|
SCODE CTestOpenStream::Call(LONG iteration)
|
||
|
{
|
||
|
SCODE sc;
|
||
|
|
||
|
if (iteration == 0)
|
||
|
printf("Docfile Mode 0x%lX, Stream Mode 0x%lX\n",
|
||
|
_mdf.GetMode(), _mstm.GetMode());
|
||
|
|
||
|
sc = DfGetScode(_pstg->OpenStream(
|
||
|
"TestFail Stream",
|
||
|
0,
|
||
|
_mstm.GetMode(),
|
||
|
0,
|
||
|
&_pstm));
|
||
|
|
||
|
return(sc);
|
||
|
}
|
||
|
|
||
|
void CTestOpenStream::EndCall(LONG iteration)
|
||
|
{
|
||
|
_pstm->Release();
|
||
|
}
|
||
|
|
||
|
void CTestOpenStream::CallVerify(LONG iteration)
|
||
|
{
|
||
|
}
|
||
|
|
||
|
void CTestOpenStream::EndPrep(LONG iteration)
|
||
|
{
|
||
|
_pstg->Release();
|
||
|
}
|
||
|
|
||
|
void CTestOpenStream::EndVerify(LONG iteration)
|
||
|
{
|
||
|
VerifyClean(_sc, _mdf.GetMode(), iteration);
|
||
|
}
|
||
|
|
||
|
BOOL CTestOpenStream::Next(void)
|
||
|
{
|
||
|
if (!_mstm.Next())
|
||
|
{
|
||
|
_mstm.Init();
|
||
|
if (!_mdf.Next())
|
||
|
return(FALSE);
|
||
|
}
|
||
|
|
||
|
return(TRUE);
|
||
|
}
|
||
|
|
||
|
//+-------------------------------------------------------------------------
|
||
|
//
|
||
|
// Class: CTestOpenStorage
|
||
|
//
|
||
|
// Purpose: Test IStorage::OpenStorage
|
||
|
//
|
||
|
// Interface: CTestCase
|
||
|
//
|
||
|
// History: 26-Jan-93 AlexT Created
|
||
|
//
|
||
|
// Notes:
|
||
|
//
|
||
|
//--------------------------------------------------------------------------
|
||
|
|
||
|
class CTestOpenStorage : public CTestCase
|
||
|
{
|
||
|
private:
|
||
|
SCODE _sc;
|
||
|
|
||
|
CModeDf _mdf;
|
||
|
IStorage *_pstg;
|
||
|
|
||
|
CModeStg _mstg;
|
||
|
IStorage *_pstgChild;
|
||
|
|
||
|
public:
|
||
|
virtual BOOL Init(void);
|
||
|
virtual SCODE Prep(LONG iteration);
|
||
|
virtual SCODE Call(LONG iteration);
|
||
|
virtual void EndCall(LONG iteration);
|
||
|
virtual void CallVerify(LONG iteration);
|
||
|
virtual void EndPrep(LONG iteration);
|
||
|
virtual void EndVerify(LONG iteration);
|
||
|
virtual BOOL Next(void);
|
||
|
};
|
||
|
|
||
|
BOOL CTestOpenStorage::Init(void)
|
||
|
{
|
||
|
printf("SIFT IStorage::OpenStorage\n");
|
||
|
_mdf.Init();
|
||
|
_mstg.Init();
|
||
|
return(TRUE);
|
||
|
}
|
||
|
|
||
|
SCODE CTestOpenStorage::Prep(LONG iteration)
|
||
|
{
|
||
|
_sc = CreateWorkingDocfile(_mdf.GetMode(), &_pstg, 0);
|
||
|
if (SUCCEEDED(_sc))
|
||
|
{
|
||
|
_sc = DfGetScode(_pstg->CreateStorage(
|
||
|
"TestFail Storage",
|
||
|
_mstg.GetMode(),
|
||
|
0,
|
||
|
0,
|
||
|
&_pstgChild));
|
||
|
|
||
|
if (FAILED(_sc))
|
||
|
_pstg->Release();
|
||
|
else
|
||
|
_pstgChild->Release();
|
||
|
}
|
||
|
return(_sc);
|
||
|
}
|
||
|
|
||
|
SCODE CTestOpenStorage::Call(LONG iteration)
|
||
|
{
|
||
|
SCODE sc;
|
||
|
|
||
|
if (iteration == 0)
|
||
|
printf("Docfile Mode 0x%lX, Storage Mode 0x%lX\n",
|
||
|
_mdf.GetMode(), _mstg.GetMode());
|
||
|
|
||
|
sc = DfGetScode(_pstg->OpenStorage("TestFail Storage", 0,
|
||
|
_mstg.GetMode(), 0, 0, &_pstgChild));
|
||
|
|
||
|
return(sc);
|
||
|
}
|
||
|
|
||
|
void CTestOpenStorage::EndCall(LONG iteration)
|
||
|
{
|
||
|
_pstgChild->Release();
|
||
|
}
|
||
|
|
||
|
void CTestOpenStorage::CallVerify(LONG iteration)
|
||
|
{
|
||
|
}
|
||
|
|
||
|
void CTestOpenStorage::EndPrep(LONG iteration)
|
||
|
{
|
||
|
_pstg->Release();
|
||
|
}
|
||
|
|
||
|
void CTestOpenStorage::EndVerify(LONG iteration)
|
||
|
{
|
||
|
VerifyClean(_sc, _mdf.GetMode(), iteration);
|
||
|
}
|
||
|
|
||
|
BOOL CTestOpenStorage::Next(void)
|
||
|
{
|
||
|
if (!_mstg.Next())
|
||
|
{
|
||
|
_mstg.Init();
|
||
|
if (!_mdf.Next())
|
||
|
return(FALSE);
|
||
|
}
|
||
|
|
||
|
return(TRUE);
|
||
|
}
|
||
|
|
||
|
//+-------------------------------------------------------------------------
|
||
|
//
|
||
|
// Class: CTestCommit
|
||
|
//
|
||
|
// Purpose: Test IStream::Write
|
||
|
//
|
||
|
// Interface: CTestCase
|
||
|
//
|
||
|
// History: 26-Jan-93 AlexT Created
|
||
|
//
|
||
|
// Notes:
|
||
|
//
|
||
|
//--------------------------------------------------------------------------
|
||
|
|
||
|
class CTestCommit : public CTestCase
|
||
|
{
|
||
|
private:
|
||
|
CModeDf _mdf;
|
||
|
IStorage *_pstg;
|
||
|
|
||
|
CModeStg _mstg;
|
||
|
IStorage *_pstgChild;
|
||
|
|
||
|
public:
|
||
|
virtual BOOL Init(void);
|
||
|
virtual SCODE Prep(LONG iteration);
|
||
|
virtual SCODE Call(LONG iteration);
|
||
|
virtual void EndCall(LONG iteration);
|
||
|
virtual void CallVerify(LONG iteration);
|
||
|
virtual void EndPrep(LONG iteration);
|
||
|
virtual void EndVerify(LONG iteration);
|
||
|
virtual BOOL Next(void);
|
||
|
};
|
||
|
|
||
|
BOOL CTestCommit::Init(void)
|
||
|
{
|
||
|
printf("SIFT IStorage::Commit\n");
|
||
|
_mdf.Init();
|
||
|
_mstg.Init();
|
||
|
return(TRUE);
|
||
|
}
|
||
|
|
||
|
SCODE CTestCommit::Prep(LONG iteration)
|
||
|
{
|
||
|
SCODE sc;
|
||
|
|
||
|
sc = CreateWorkingDocfile(_mdf.GetMode(), &_pstg, 0);
|
||
|
if (SUCCEEDED(sc))
|
||
|
{
|
||
|
sc = DfGetScode(_pstg->CreateStorage(
|
||
|
"TestFail Storage",
|
||
|
_mstg.GetMode(),
|
||
|
0,
|
||
|
0,
|
||
|
&_pstgChild));
|
||
|
|
||
|
if (FAILED(sc))
|
||
|
_pstg->Release();
|
||
|
}
|
||
|
return(sc);
|
||
|
}
|
||
|
|
||
|
SCODE CTestCommit::Call(LONG iteration)
|
||
|
{
|
||
|
SCODE sc;
|
||
|
|
||
|
if (iteration == 0)
|
||
|
printf("Docfile Mode 0x%lX, Storage Mode 0x%lX\n",
|
||
|
_mdf.GetMode(), _mstg.GetMode());
|
||
|
|
||
|
sc = DfGetScode(_pstgChild->Commit(0));
|
||
|
|
||
|
if (FAILED(sc))
|
||
|
{
|
||
|
if (sc != STG_E_MEDIUMFULL)
|
||
|
printf("..Iteration %ld - STG_E_MEDIUMFULL\n", iteration);
|
||
|
else
|
||
|
printf("..Iteration %ld - failed - sc = 0x%lX\n",
|
||
|
iteration, sc);
|
||
|
}
|
||
|
return(sc);
|
||
|
}
|
||
|
|
||
|
void CTestCommit::EndCall(LONG iteration)
|
||
|
{
|
||
|
}
|
||
|
|
||
|
void CTestCommit::CallVerify(LONG iteration)
|
||
|
{
|
||
|
}
|
||
|
|
||
|
void CTestCommit::EndPrep(LONG iteration)
|
||
|
{
|
||
|
_pstgChild->Release();
|
||
|
_pstg->Release();
|
||
|
}
|
||
|
|
||
|
void CTestCommit::EndVerify(LONG iteration)
|
||
|
{
|
||
|
VerifyClean(S_OK, _mdf.GetMode(), iteration);
|
||
|
}
|
||
|
|
||
|
BOOL CTestCommit::Next(void)
|
||
|
{
|
||
|
if (!_mstg.Next())
|
||
|
{
|
||
|
_mstg.Init();
|
||
|
if (!_mdf.Next())
|
||
|
return(FALSE);
|
||
|
}
|
||
|
|
||
|
return(TRUE);
|
||
|
}
|
||
|
|
||
|
//+-------------------------------------------------------------------------
|
||
|
//
|
||
|
// Class: CTestCommit2
|
||
|
//
|
||
|
// Purpose: Test IStorage::Commit
|
||
|
//
|
||
|
// Interface: CTestCase
|
||
|
//
|
||
|
// History: 26-Jan-93 AlexT Created
|
||
|
//
|
||
|
// Notes:
|
||
|
//
|
||
|
//--------------------------------------------------------------------------
|
||
|
|
||
|
class CTestCommit2 : public CTestCase
|
||
|
{
|
||
|
private:
|
||
|
CModeDf _mdf;
|
||
|
IStorage *_pstg;
|
||
|
|
||
|
CModeStg _mstg;
|
||
|
IStorage *_pstgChild;
|
||
|
|
||
|
IStream *_pstmChild;
|
||
|
|
||
|
public:
|
||
|
virtual BOOL Init(void);
|
||
|
virtual SCODE Prep(LONG iteration);
|
||
|
virtual SCODE Call(LONG iteration);
|
||
|
virtual void EndCall(LONG iteration);
|
||
|
virtual void CallVerify(LONG iteration);
|
||
|
virtual void EndPrep(LONG iteration);
|
||
|
virtual void EndVerify(LONG iteration);
|
||
|
virtual BOOL Next(void);
|
||
|
};
|
||
|
|
||
|
BOOL CTestCommit2::Init(void)
|
||
|
{
|
||
|
printf("SIFT IStorage::Commit\n");
|
||
|
_mdf.Init();
|
||
|
_mstg.Init();
|
||
|
return(TRUE);
|
||
|
}
|
||
|
|
||
|
SCODE CTestCommit2::Prep(LONG iteration)
|
||
|
{
|
||
|
SCODE sc;
|
||
|
ULONG cb = 1;
|
||
|
char c = 'X';
|
||
|
ULONG cbWritten;
|
||
|
|
||
|
sc = CreateWorkingDocfile(_mdf.GetMode(), &_pstg, 0);
|
||
|
if (SUCCEEDED(sc))
|
||
|
{
|
||
|
sc = DfGetScode(_pstg->CreateStorage(
|
||
|
"TestFail Storage",
|
||
|
_mstg.GetMode(),
|
||
|
0,
|
||
|
0,
|
||
|
&_pstgChild));
|
||
|
|
||
|
if (FAILED(sc))
|
||
|
_pstg->Release();
|
||
|
else
|
||
|
{
|
||
|
sc = DfGetScode(_pstgChild->CreateStream(
|
||
|
"TestFail Stream",
|
||
|
STGM_DIRECT | STGM_SHARE_EXCLUSIVE | STGM_READWRITE,
|
||
|
0,
|
||
|
0,
|
||
|
&_pstmChild));
|
||
|
|
||
|
if (FAILED(sc))
|
||
|
{
|
||
|
_pstgChild->Release();
|
||
|
_pstg->Release();
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
sc = DfGetScode(_pstmChild->Write(&c, cb, &cbWritten));
|
||
|
if (FAILED(sc))
|
||
|
{
|
||
|
_pstmChild->Release();
|
||
|
_pstgChild->Release();
|
||
|
_pstg->Release();
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
return(sc);
|
||
|
}
|
||
|
|
||
|
SCODE CTestCommit2::Call(LONG iteration)
|
||
|
{
|
||
|
SCODE sc;
|
||
|
|
||
|
if (iteration == 0)
|
||
|
printf("Docfile Mode 0x%lX, Storage Mode 0x%lX\n",
|
||
|
_mdf.GetMode(), _mstg.GetMode());
|
||
|
|
||
|
sc = DfGetScode(_pstgChild->Commit(0));
|
||
|
|
||
|
if (FAILED(sc))
|
||
|
{
|
||
|
if (sc == STG_E_MEDIUMFULL)
|
||
|
printf("..Iteration %ld - STG_E_MEDIUMFULL\n", iteration);
|
||
|
else
|
||
|
printf("..Iteration %ld - failed - sc = 0x%lX\n",
|
||
|
iteration, sc);
|
||
|
}
|
||
|
return(sc);
|
||
|
}
|
||
|
|
||
|
void CTestCommit2::EndCall(LONG iteration)
|
||
|
{
|
||
|
}
|
||
|
|
||
|
void CTestCommit2::CallVerify(LONG iteration)
|
||
|
{
|
||
|
}
|
||
|
|
||
|
void CTestCommit2::EndPrep(LONG iteration)
|
||
|
{
|
||
|
_pstmChild->Release();
|
||
|
_pstgChild->Release();
|
||
|
_pstg->Release();
|
||
|
}
|
||
|
|
||
|
void CTestCommit2::EndVerify(LONG iteration)
|
||
|
{
|
||
|
VerifyClean(S_OK, _mdf.GetMode(), iteration);
|
||
|
}
|
||
|
|
||
|
BOOL CTestCommit2::Next(void)
|
||
|
{
|
||
|
if (!_mstg.Next())
|
||
|
{
|
||
|
_mstg.Init();
|
||
|
if (!_mdf.Next())
|
||
|
return(FALSE);
|
||
|
}
|
||
|
|
||
|
return(TRUE);
|
||
|
}
|
||
|
|
||
|
//+-------------------------------------------------------------------------
|
||
|
//
|
||
|
// Class: CTestCommit3
|
||
|
//
|
||
|
// Purpose: Test IStorage::Commit
|
||
|
//
|
||
|
// Interface: CTestCase
|
||
|
//
|
||
|
// History: 26-Jan-93 AlexT Created
|
||
|
//
|
||
|
// Notes:
|
||
|
//
|
||
|
//--------------------------------------------------------------------------
|
||
|
|
||
|
class CTestCommit3 : public CTestCase
|
||
|
{
|
||
|
private:
|
||
|
CModeDf _mdf;
|
||
|
IStorage *_pstg;
|
||
|
|
||
|
public:
|
||
|
virtual BOOL Init(void);
|
||
|
virtual SCODE Prep(LONG iteration);
|
||
|
virtual SCODE Call(LONG iteration);
|
||
|
virtual void EndCall(LONG iteration);
|
||
|
virtual void CallVerify(LONG iteration);
|
||
|
virtual void EndPrep(LONG iteration);
|
||
|
virtual void EndVerify(LONG iteration);
|
||
|
virtual BOOL Next(void);
|
||
|
};
|
||
|
|
||
|
BOOL CTestCommit3::Init(void)
|
||
|
{
|
||
|
printf("SIFT IStorage::Commit\n");
|
||
|
_mdf.Init();
|
||
|
return(TRUE);
|
||
|
}
|
||
|
|
||
|
SCODE CTestCommit3::Prep(LONG iteration)
|
||
|
{
|
||
|
SCODE sc;
|
||
|
ULONG cb = 1;
|
||
|
char c = 'X';
|
||
|
|
||
|
sc = CreateWorkingDocfile(_mdf.GetMode(), &_pstg, 0);
|
||
|
|
||
|
if (FAILED(sc))
|
||
|
return(sc);
|
||
|
|
||
|
IStream *pstm;
|
||
|
sc = DfGetScode(_pstg->CreateStream(
|
||
|
"PP40",
|
||
|
STGM_DIRECT | STGM_SHARE_EXCLUSIVE | STGM_READWRITE,
|
||
|
0,
|
||
|
0,
|
||
|
&pstm));
|
||
|
pstm->Release();
|
||
|
|
||
|
IStorage *pstgChild;
|
||
|
sc = DfGetScode(_pstg->CreateStorage(
|
||
|
"TestFail Storage",
|
||
|
STGM_TRANSACTED | STGM_SHARE_EXCLUSIVE | STGM_READWRITE,
|
||
|
0,
|
||
|
0,
|
||
|
&pstgChild));
|
||
|
|
||
|
sc = DfGetScode(pstgChild->CreateStream(
|
||
|
"One",
|
||
|
STGM_DIRECT | STGM_SHARE_EXCLUSIVE | STGM_READWRITE,
|
||
|
0,
|
||
|
0,
|
||
|
&pstm));
|
||
|
pstm->Release();
|
||
|
sc = DfGetScode(pstgChild->CreateStream(
|
||
|
"Two",
|
||
|
STGM_DIRECT | STGM_SHARE_EXCLUSIVE | STGM_READWRITE,
|
||
|
0,
|
||
|
0,
|
||
|
&pstm));
|
||
|
pstm->Release();
|
||
|
sc = DfGetScode(pstgChild->CreateStream(
|
||
|
"Three",
|
||
|
STGM_DIRECT | STGM_SHARE_EXCLUSIVE | STGM_READWRITE,
|
||
|
0,
|
||
|
0,
|
||
|
&pstm));
|
||
|
pstm->Release();
|
||
|
|
||
|
sc = DfGetScode(pstgChild->Commit(0));
|
||
|
pstgChild->Release();
|
||
|
|
||
|
return(sc);
|
||
|
}
|
||
|
|
||
|
SCODE CTestCommit3::Call(LONG iteration)
|
||
|
{
|
||
|
SCODE sc;
|
||
|
|
||
|
if (iteration == 0)
|
||
|
printf("Docfile Mode 0x%lX\n",
|
||
|
_mdf.GetMode());
|
||
|
|
||
|
sc = DfGetScode(_pstg->Commit(0));
|
||
|
|
||
|
if (FAILED(sc))
|
||
|
{
|
||
|
if (sc == STG_E_MEDIUMFULL)
|
||
|
printf("..Iteration %ld - STG_E_MEDIUMFULL\n", iteration);
|
||
|
else
|
||
|
printf("..Iteration %ld - failed - sc = 0x%lX\n",
|
||
|
iteration, sc);
|
||
|
}
|
||
|
return(sc);
|
||
|
}
|
||
|
|
||
|
void CTestCommit3::EndCall(LONG iteration)
|
||
|
{
|
||
|
}
|
||
|
|
||
|
void CTestCommit3::CallVerify(LONG iteration)
|
||
|
{
|
||
|
}
|
||
|
|
||
|
void CTestCommit3::EndPrep(LONG iteration)
|
||
|
{
|
||
|
_pstg->Release();
|
||
|
}
|
||
|
|
||
|
void CTestCommit3::EndVerify(LONG iteration)
|
||
|
{
|
||
|
VerifyClean(S_OK, _mdf.GetMode(), iteration);
|
||
|
}
|
||
|
|
||
|
BOOL CTestCommit3::Next(void)
|
||
|
{
|
||
|
if (!_mdf.Next())
|
||
|
return(FALSE);
|
||
|
|
||
|
return(TRUE);
|
||
|
}
|
||
|
|
||
|
//+-------------------------------------------------------------------------
|
||
|
//
|
||
|
// Class: CTestCommit4
|
||
|
//
|
||
|
// Purpose: Test IStorage::Commit with resized streams
|
||
|
//
|
||
|
// Interface: CTestCase
|
||
|
//
|
||
|
// History: 08-Sep-93 DrewB Created
|
||
|
//
|
||
|
//--------------------------------------------------------------------------
|
||
|
|
||
|
class CTestCommit4 : public CTestCase
|
||
|
{
|
||
|
private:
|
||
|
CModeDf _mdf;
|
||
|
IStorage *_pstg;
|
||
|
|
||
|
public:
|
||
|
virtual BOOL Init(void);
|
||
|
virtual SCODE Prep(LONG iteration);
|
||
|
virtual SCODE Call(LONG iteration);
|
||
|
virtual void EndCall(LONG iteration);
|
||
|
virtual void CallVerify(LONG iteration);
|
||
|
virtual void EndPrep(LONG iteration);
|
||
|
virtual void EndVerify(LONG iteration);
|
||
|
virtual BOOL Next(void);
|
||
|
};
|
||
|
|
||
|
BOOL CTestCommit4::Init(void)
|
||
|
{
|
||
|
printf("SIFT IStorage::Commit\n");
|
||
|
_mdf.Init();
|
||
|
return(TRUE);
|
||
|
}
|
||
|
|
||
|
#define LARGE_SIZE 4097
|
||
|
#define SMALL_SIZE 4095
|
||
|
|
||
|
SCODE CTestCommit4::Prep(LONG iteration)
|
||
|
{
|
||
|
SCODE sc;
|
||
|
IStream *pstm;
|
||
|
ULARGE_INTEGER uli;
|
||
|
|
||
|
sc = CreateWorkingDocfile(_mdf.GetMode(), &_pstg, 0);
|
||
|
if (FAILED(sc))
|
||
|
goto EH_Err;
|
||
|
sc = DfGetScode(_pstg->CreateStream("Test",
|
||
|
STGM_DIRECT | STGM_SHARE_EXCLUSIVE |
|
||
|
STGM_READWRITE, 0, 0, &pstm));
|
||
|
if (FAILED(sc))
|
||
|
goto EH_pstg;
|
||
|
uli.HighPart = 0;
|
||
|
uli.LowPart = LARGE_SIZE;
|
||
|
sc = DfGetScode(pstm->SetSize(uli));
|
||
|
if (FAILED(sc))
|
||
|
goto EH_pstm;
|
||
|
sc = DfGetScode(_pstg->Commit(0));
|
||
|
if (FAILED(sc))
|
||
|
goto EH_pstm;
|
||
|
uli.LowPart = SMALL_SIZE;
|
||
|
sc = DfGetScode(pstm->SetSize(uli));
|
||
|
if (FAILED(sc))
|
||
|
goto EH_pstm;
|
||
|
pstm->Release();
|
||
|
return sc;
|
||
|
|
||
|
EH_pstm:
|
||
|
pstm->Release();
|
||
|
EH_pstg:
|
||
|
_pstg->Release();
|
||
|
EH_Err:
|
||
|
return sc;
|
||
|
}
|
||
|
|
||
|
SCODE CTestCommit4::Call(LONG iteration)
|
||
|
{
|
||
|
SCODE sc;
|
||
|
|
||
|
if (iteration == 0)
|
||
|
printf("Docfile Mode 0x%lX\n",
|
||
|
_mdf.GetMode());
|
||
|
|
||
|
sc = DfGetScode(_pstg->Commit(0));
|
||
|
|
||
|
if (FAILED(sc))
|
||
|
{
|
||
|
if (sc == STG_E_MEDIUMFULL)
|
||
|
printf("..Iteration %ld - STG_E_MEDIUMFULL\n", iteration);
|
||
|
else
|
||
|
printf("..Iteration %ld - failed - sc = 0x%lX\n",
|
||
|
iteration, sc);
|
||
|
}
|
||
|
return(sc);
|
||
|
}
|
||
|
|
||
|
void CTestCommit4::EndCall(LONG iteration)
|
||
|
{
|
||
|
}
|
||
|
|
||
|
void CTestCommit4::CallVerify(LONG iteration)
|
||
|
{
|
||
|
IStream *pstm;
|
||
|
SCODE sc;
|
||
|
STATSTG stat;
|
||
|
|
||
|
sc = DfGetScode(_pstg->OpenStream("Test", NULL, STGM_DIRECT |
|
||
|
STGM_SHARE_EXCLUSIVE, 0, &pstm));
|
||
|
if (FAILED(sc))
|
||
|
{
|
||
|
printf("Can't open stream - %lX\n", sc);
|
||
|
return;
|
||
|
}
|
||
|
sc = DfGetScode(pstm->Stat(&stat, STATFLAG_NONAME));
|
||
|
pstm->Release();
|
||
|
if (FAILED(sc))
|
||
|
{
|
||
|
printf("Can't stat stream - %lX\n", sc);
|
||
|
return;
|
||
|
}
|
||
|
if (stat.cbSize.LowPart != SMALL_SIZE)
|
||
|
{
|
||
|
printf("Stream length is %lu rather than %d\n",
|
||
|
stat.cbSize.LowPart, SMALL_SIZE);
|
||
|
return;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void CTestCommit4::EndPrep(LONG iteration)
|
||
|
{
|
||
|
_pstg->Release();
|
||
|
}
|
||
|
|
||
|
void CTestCommit4::EndVerify(LONG iteration)
|
||
|
{
|
||
|
VerifyClean(S_OK, _mdf.GetMode(), iteration);
|
||
|
}
|
||
|
|
||
|
BOOL CTestCommit4::Next(void)
|
||
|
{
|
||
|
if (!_mdf.Next())
|
||
|
return(FALSE);
|
||
|
|
||
|
return(TRUE);
|
||
|
}
|
||
|
|
||
|
//+-------------------------------------------------------------------------
|
||
|
//
|
||
|
// Class: CTestStgOpen
|
||
|
//
|
||
|
// Purpose: Test StgOpenStorage
|
||
|
//
|
||
|
// Interface: CTestCase
|
||
|
//
|
||
|
// History: 28-Jan-93 AlexT Created
|
||
|
//
|
||
|
// Notes:
|
||
|
//
|
||
|
//--------------------------------------------------------------------------
|
||
|
|
||
|
class CTestStgOpen : public CTestCase
|
||
|
{
|
||
|
private:
|
||
|
SCODE _sc;
|
||
|
|
||
|
CModeDf _mdf;
|
||
|
IStorage *_pstg;
|
||
|
|
||
|
public:
|
||
|
virtual BOOL Init(void);
|
||
|
virtual SCODE Prep(LONG iteration);
|
||
|
virtual SCODE Call(LONG iteration);
|
||
|
virtual void EndCall(LONG iteration);
|
||
|
virtual void CallVerify(LONG iteration);
|
||
|
virtual void EndPrep(LONG iteration);
|
||
|
virtual void EndVerify(LONG iteration);
|
||
|
virtual BOOL Next(void);
|
||
|
};
|
||
|
|
||
|
BOOL CTestStgOpen::Init(void)
|
||
|
{
|
||
|
printf("SIFT StgOpenStorage\n");
|
||
|
_mdf.Init();
|
||
|
return(TRUE);
|
||
|
}
|
||
|
|
||
|
SCODE CTestStgOpen::Prep(LONG iteration)
|
||
|
{
|
||
|
SCODE sc;
|
||
|
DWORD dwMode = STGM_DIRECT |
|
||
|
STGM_READWRITE |
|
||
|
STGM_SHARE_EXCLUSIVE |
|
||
|
STGM_FAILIFTHERE;
|
||
|
IStorage *pstg, *pstgChild;
|
||
|
IStream *pstmChild;
|
||
|
|
||
|
sc = CreateWorkingDocfile(dwMode, &pstg, 0);
|
||
|
if (SUCCEEDED(sc))
|
||
|
{
|
||
|
sc = DfGetScode(pstg->CreateStorage(
|
||
|
"TestFail Storage",
|
||
|
dwMode,
|
||
|
0,
|
||
|
0,
|
||
|
&pstgChild));
|
||
|
|
||
|
if (SUCCEEDED(sc))
|
||
|
{
|
||
|
sc = DfGetScode(pstgChild->CreateStream(
|
||
|
"TestFail Stream",
|
||
|
dwMode,
|
||
|
0,
|
||
|
0,
|
||
|
&pstmChild));
|
||
|
|
||
|
if (SUCCEEDED(sc))
|
||
|
pstmChild->Release();
|
||
|
|
||
|
pstgChild->Release();
|
||
|
}
|
||
|
|
||
|
pstg->Release();
|
||
|
}
|
||
|
return(sc);
|
||
|
}
|
||
|
|
||
|
SCODE CTestStgOpen::Call(LONG iteration)
|
||
|
{
|
||
|
if (iteration == 0)
|
||
|
printf("Docfile Mode 0x%lX\n", _mdf.GetMode());
|
||
|
|
||
|
_sc = DfGetScode(StgOpenStorage("c:\\testfail.dfl",
|
||
|
NULL,
|
||
|
_mdf.GetMode(),
|
||
|
NULL,
|
||
|
0,
|
||
|
&_pstg));
|
||
|
|
||
|
if (FAILED(_sc))
|
||
|
{
|
||
|
if (iteration == 0 && _sc == STG_E_INVALIDFLAG)
|
||
|
{
|
||
|
printf("..STG_E_INVALIDFLAG\n");
|
||
|
// Must have been a bad combination of flags - we
|
||
|
// ignore these for now.
|
||
|
}
|
||
|
else if (iteration > 0 && _sc == STG_E_INSUFFICIENTMEMORY)
|
||
|
{
|
||
|
// Do nothing (expected failure)
|
||
|
}
|
||
|
else if (iteration > 0 && _sc == STG_E_MEDIUMFULL)
|
||
|
{
|
||
|
// Do nothing (expected failure)
|
||
|
}
|
||
|
else
|
||
|
printf("..Iteration %ld, call failed - sc = 0x%lX\n",
|
||
|
iteration, _sc);
|
||
|
}
|
||
|
return(_sc);
|
||
|
}
|
||
|
|
||
|
void CTestStgOpen::EndCall(LONG iteration)
|
||
|
{
|
||
|
_pstg->Release();
|
||
|
}
|
||
|
|
||
|
void CTestStgOpen::CallVerify(LONG iteration)
|
||
|
{
|
||
|
}
|
||
|
|
||
|
void CTestStgOpen::EndPrep(LONG iteration)
|
||
|
{
|
||
|
}
|
||
|
|
||
|
void CTestStgOpen::EndVerify(LONG iteration)
|
||
|
{
|
||
|
// If the call failed, the file should still exist.
|
||
|
// If the call succeeded
|
||
|
// If mode was delete on release,
|
||
|
// file should not exist
|
||
|
// else file should exist
|
||
|
|
||
|
VerifyDisk((SUCCEEDED(_sc) && (!(_mdf.GetMode() & STGM_DELETEONRELEASE))) ||
|
||
|
FAILED(_sc), iteration);
|
||
|
VerifyMemory(iteration);
|
||
|
}
|
||
|
|
||
|
BOOL CTestStgOpen::Next(void)
|
||
|
{
|
||
|
if (!_mdf.Next())
|
||
|
return(FALSE);
|
||
|
|
||
|
return(TRUE);
|
||
|
}
|
||
|
|
||
|
|
||
|
//+-------------------------------------------------------------------------
|
||
|
//
|
||
|
// Class: CTestWrite2
|
||
|
//
|
||
|
// Purpose: Test IStream::Write for largish writes
|
||
|
//
|
||
|
// Interface: CTestCase
|
||
|
//
|
||
|
// History: 16-Feb-93 PhilipLa Created.
|
||
|
//
|
||
|
// Notes:
|
||
|
//
|
||
|
//--------------------------------------------------------------------------
|
||
|
|
||
|
class CTestWrite2 : public CTestCase
|
||
|
{
|
||
|
private:
|
||
|
SCODE _sc;
|
||
|
|
||
|
BYTE *_pb;
|
||
|
|
||
|
CModeDf _mdf;
|
||
|
IStorage *_pstg;
|
||
|
|
||
|
CModeStm _mstm;
|
||
|
IStream *_pstmChild;
|
||
|
|
||
|
ULONG _cb;
|
||
|
ULONG _cBlock;
|
||
|
|
||
|
ULONG _cbSize;
|
||
|
public:
|
||
|
virtual BOOL Init(void);
|
||
|
virtual SCODE Prep(LONG iteration);
|
||
|
virtual SCODE Call(LONG iteration);
|
||
|
virtual void EndCall(LONG iteration);
|
||
|
virtual void CallVerify(LONG iteration);
|
||
|
virtual void EndPrep(LONG iteration);
|
||
|
virtual void EndVerify(LONG iteration);
|
||
|
virtual BOOL Next(void);
|
||
|
};
|
||
|
|
||
|
BOOL CTestWrite2::Init(void)
|
||
|
{
|
||
|
printf("SIFT IStream::Write2 - large writes without Setsize\n");
|
||
|
_mdf.Init();
|
||
|
_mstm.Init();
|
||
|
|
||
|
_cb = 8192;
|
||
|
_cBlock = 8;
|
||
|
|
||
|
_pb = NULL;
|
||
|
return(TRUE);
|
||
|
}
|
||
|
|
||
|
SCODE CTestWrite2::Prep(LONG iteration)
|
||
|
{
|
||
|
|
||
|
_pb = new BYTE[8192];
|
||
|
memset(_pb, 'X', 8192);
|
||
|
|
||
|
_sc = CreateWorkingDocfile(_mdf.GetMode(), &_pstg, 0);
|
||
|
if (SUCCEEDED(_sc))
|
||
|
{
|
||
|
_sc = DfGetScode(_pstg->CreateStream(
|
||
|
"TestFail Stream",
|
||
|
_mstm.GetMode(),
|
||
|
0,
|
||
|
0,
|
||
|
&_pstmChild));
|
||
|
|
||
|
_cbSize = 0;
|
||
|
if (FAILED(_sc))
|
||
|
_pstg->Release();
|
||
|
|
||
|
}
|
||
|
return(_sc);
|
||
|
}
|
||
|
|
||
|
SCODE CTestWrite2::Call(LONG iteration)
|
||
|
{
|
||
|
SCODE sc;
|
||
|
ULONG cbWritten;
|
||
|
|
||
|
if (iteration == 0)
|
||
|
printf("Docfile Mode 0x%lX, Stream Mode 0x%lX, Write %ld bytes\n",
|
||
|
_mdf.GetMode(), _mstm.GetMode(), _cb * _cBlock);
|
||
|
|
||
|
for (ULONG i = 0; i < _cBlock; i++)
|
||
|
{
|
||
|
sc = DfGetScode(_pstmChild->Write(_pb, _cb, &cbWritten));
|
||
|
_cbSize += cbWritten;
|
||
|
|
||
|
if (FAILED(sc))
|
||
|
{
|
||
|
if (sc != STG_E_MEDIUMFULL)
|
||
|
printf("..Iteration %ld, block %lu - failed - sc = 0x%lX\n",
|
||
|
iteration, i + 1, sc);
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
return(sc);
|
||
|
}
|
||
|
|
||
|
void CTestWrite2::EndCall(LONG iteration)
|
||
|
{
|
||
|
STATSTG stat;
|
||
|
|
||
|
_pstmChild->Stat(&stat, STATFLAG_NONAME);
|
||
|
|
||
|
if (ULIGetLow(stat.cbSize) != _cbSize)
|
||
|
{
|
||
|
printf("..Iteration %lu - Size of stream is %lu. Expected %lu\n",
|
||
|
iteration, ULIGetLow(stat.cbSize), _cbSize);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void CTestWrite2::CallVerify(LONG iteration)
|
||
|
{
|
||
|
STATSTG stat;
|
||
|
|
||
|
_pstmChild->Stat(&stat, STATFLAG_NONAME);
|
||
|
|
||
|
if (ULIGetLow(stat.cbSize) != _cbSize)
|
||
|
{
|
||
|
printf("..Iteration %lu - Size of stream is %lu. Expected %lu\n",
|
||
|
iteration, ULIGetLow(stat.cbSize), _cbSize);
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
void CTestWrite2::EndPrep(LONG iteration)
|
||
|
{
|
||
|
delete _pb;
|
||
|
_pb = NULL;
|
||
|
|
||
|
_pstmChild->Release();
|
||
|
_pstg->Release();
|
||
|
}
|
||
|
|
||
|
void CTestWrite2::EndVerify(LONG iteration)
|
||
|
{
|
||
|
VerifyClean(_sc, _mdf.GetMode(), iteration);
|
||
|
}
|
||
|
|
||
|
BOOL CTestWrite2::Next(void)
|
||
|
{
|
||
|
if (!_mstm.Next())
|
||
|
{
|
||
|
_mstm.Init();
|
||
|
if (!_mdf.Next())
|
||
|
return(FALSE);
|
||
|
}
|
||
|
|
||
|
return(TRUE);
|
||
|
}
|
||
|
|
||
|
|
||
|
//+-------------------------------------------------------------------------
|
||
|
//
|
||
|
// Class: CTestWrite3
|
||
|
//
|
||
|
// Purpose: Test IStream::Write for largish writes
|
||
|
//
|
||
|
// Interface: CTestCase
|
||
|
//
|
||
|
// History: 16-Feb-93 PhilipLa Created.
|
||
|
//
|
||
|
// Notes:
|
||
|
//
|
||
|
//--------------------------------------------------------------------------
|
||
|
|
||
|
class CTestWrite3 : public CTestCase
|
||
|
{
|
||
|
private:
|
||
|
SCODE _sc;
|
||
|
|
||
|
BYTE *_pb;
|
||
|
|
||
|
CModeDf _mdf;
|
||
|
IStorage *_pstg;
|
||
|
|
||
|
CModeStm _mstm;
|
||
|
IStream *_pstmChild;
|
||
|
|
||
|
ULONG _cb;
|
||
|
ULONG _cBlock;
|
||
|
public:
|
||
|
virtual BOOL Init(void);
|
||
|
virtual SCODE Prep(LONG iteration);
|
||
|
virtual SCODE Call(LONG iteration);
|
||
|
virtual void EndCall(LONG iteration);
|
||
|
virtual void CallVerify(LONG iteration);
|
||
|
virtual void EndPrep(LONG iteration);
|
||
|
virtual void EndVerify(LONG iteration);
|
||
|
virtual BOOL Next(void);
|
||
|
};
|
||
|
|
||
|
BOOL CTestWrite3::Init(void)
|
||
|
{
|
||
|
printf("SIFT IStream::Write3 - large writes with prior Setsize\n");
|
||
|
_mdf.Init();
|
||
|
_mstm.Init();
|
||
|
|
||
|
_cb = 8192;
|
||
|
_cBlock = 8;
|
||
|
|
||
|
_pb = NULL;
|
||
|
return(TRUE);
|
||
|
}
|
||
|
|
||
|
SCODE CTestWrite3::Prep(LONG iteration)
|
||
|
{
|
||
|
|
||
|
_pb = new BYTE[8192];
|
||
|
memset(_pb, 'X', 8192);
|
||
|
|
||
|
_sc = CreateWorkingDocfile(_mdf.GetMode(), &_pstg, 0);
|
||
|
if (SUCCEEDED(_sc))
|
||
|
{
|
||
|
_sc = DfGetScode(_pstg->CreateStream(
|
||
|
"TestFail Stream",
|
||
|
_mstm.GetMode(),
|
||
|
0,
|
||
|
0,
|
||
|
&_pstmChild));
|
||
|
|
||
|
if (FAILED(_sc))
|
||
|
_pstg->Release();
|
||
|
else
|
||
|
{
|
||
|
ULARGE_INTEGER cbSize;
|
||
|
|
||
|
ULISet32(cbSize, _cb * _cBlock);
|
||
|
|
||
|
_sc = DfGetScode(_pstmChild->SetSize(cbSize));
|
||
|
|
||
|
if (FAILED(_sc))
|
||
|
{
|
||
|
_pstmChild->Release();
|
||
|
_pstg->Release();
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
return(_sc);
|
||
|
}
|
||
|
|
||
|
SCODE CTestWrite3::Call(LONG iteration)
|
||
|
{
|
||
|
SCODE sc;
|
||
|
ULONG cbWritten;
|
||
|
|
||
|
if (iteration == 0)
|
||
|
printf("Docfile Mode 0x%lX, Stream Mode 0x%lX, Write %ld bytes\n",
|
||
|
_mdf.GetMode(), _mstm.GetMode(), _cb * _cBlock);
|
||
|
else
|
||
|
printf("ERROR - shouldn't hit iteration %lu\n", iteration);
|
||
|
|
||
|
for (ULONG i = 0; i < _cBlock; i++)
|
||
|
{
|
||
|
sc = DfGetScode(_pstmChild->Write(_pb, _cb, &cbWritten));
|
||
|
if (FAILED(sc))
|
||
|
{
|
||
|
if (sc != STG_E_MEDIUMFULL)
|
||
|
printf("..Iteration %ld, block %lu - failed - sc = 0x%lX\n",
|
||
|
iteration, i + 1, sc);
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
return(sc);
|
||
|
}
|
||
|
|
||
|
void CTestWrite3::EndCall(LONG iteration)
|
||
|
{
|
||
|
}
|
||
|
|
||
|
void CTestWrite3::CallVerify(LONG iteration)
|
||
|
{
|
||
|
}
|
||
|
|
||
|
void CTestWrite3::EndPrep(LONG iteration)
|
||
|
{
|
||
|
delete _pb;
|
||
|
_pb = NULL;
|
||
|
|
||
|
_pstmChild->Release();
|
||
|
_pstg->Release();
|
||
|
}
|
||
|
|
||
|
void CTestWrite3::EndVerify(LONG iteration)
|
||
|
{
|
||
|
VerifyClean(_sc, _mdf.GetMode(), iteration);
|
||
|
}
|
||
|
|
||
|
BOOL CTestWrite3::Next(void)
|
||
|
{
|
||
|
if (!_mstm.Next())
|
||
|
{
|
||
|
_mstm.Init();
|
||
|
if (!_mdf.Next())
|
||
|
return(FALSE);
|
||
|
}
|
||
|
|
||
|
return(TRUE);
|
||
|
}
|
||
|
|
||
|
|
||
|
//+-------------------------------------------------------------------------
|
||
|
//
|
||
|
// Class: CTestSetsize
|
||
|
//
|
||
|
// Purpose: Test IStream::Write for largish writes
|
||
|
//
|
||
|
// Interface: CTestCase
|
||
|
//
|
||
|
// History: 16-Feb-93 PhilipLa Created.
|
||
|
//
|
||
|
// Notes:
|
||
|
//
|
||
|
//--------------------------------------------------------------------------
|
||
|
|
||
|
class CTestSetsize : public CTestCase
|
||
|
{
|
||
|
private:
|
||
|
SCODE _sc;
|
||
|
|
||
|
BYTE *_pb;
|
||
|
|
||
|
CModeDf _mdf;
|
||
|
IStorage *_pstg;
|
||
|
|
||
|
CModeStm _mstm;
|
||
|
IStream *_pstmChild;
|
||
|
|
||
|
ULONG _cb;
|
||
|
ULONG _cBlock;
|
||
|
public:
|
||
|
virtual BOOL Init(void);
|
||
|
virtual SCODE Prep(LONG iteration);
|
||
|
virtual SCODE Call(LONG iteration);
|
||
|
virtual void EndCall(LONG iteration);
|
||
|
virtual void CallVerify(LONG iteration);
|
||
|
virtual void EndPrep(LONG iteration);
|
||
|
virtual void EndVerify(LONG iteration);
|
||
|
virtual BOOL Next(void);
|
||
|
};
|
||
|
|
||
|
BOOL CTestSetsize::Init(void)
|
||
|
{
|
||
|
printf("SIFT IStream::Setsize\n");
|
||
|
_mdf.Init();
|
||
|
_mstm.Init();
|
||
|
|
||
|
_cb = 8192;
|
||
|
_cBlock = 9;
|
||
|
|
||
|
_pb = NULL;
|
||
|
return(TRUE);
|
||
|
}
|
||
|
|
||
|
SCODE CTestSetsize::Prep(LONG iteration)
|
||
|
{
|
||
|
|
||
|
_pb = new BYTE[8192];
|
||
|
memset(_pb, 'X', 8192);
|
||
|
|
||
|
_sc = CreateWorkingDocfile(_mdf.GetMode(), &_pstg, 0);
|
||
|
if (SUCCEEDED(_sc))
|
||
|
{
|
||
|
_sc = DfGetScode(_pstg->CreateStream(
|
||
|
"TestFail Stream",
|
||
|
_mstm.GetMode(),
|
||
|
0,
|
||
|
0,
|
||
|
&_pstmChild));
|
||
|
|
||
|
if (FAILED(_sc))
|
||
|
_pstg->Release();
|
||
|
}
|
||
|
return(_sc);
|
||
|
}
|
||
|
|
||
|
SCODE CTestSetsize::Call(LONG iteration)
|
||
|
{
|
||
|
SCODE sc;
|
||
|
ULONG cbWritten;
|
||
|
|
||
|
if (iteration == 0)
|
||
|
printf("Docfile Mode 0x%lX, Stream Mode 0x%lX, Write %ld bytes\n",
|
||
|
_mdf.GetMode(), _mstm.GetMode(), _cb * _cBlock);
|
||
|
|
||
|
ULARGE_INTEGER cbSize;
|
||
|
|
||
|
ULISet32(cbSize, _cb * _cBlock);
|
||
|
|
||
|
sc = DfGetScode(_pstmChild->SetSize(cbSize));
|
||
|
|
||
|
|
||
|
if (FAILED(sc))
|
||
|
{
|
||
|
if (sc != STG_E_MEDIUMFULL)
|
||
|
printf("..Iteration %ld - failed - sc = 0x%lX\n", iteration, sc);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
for (ULONG i = 0; i < _cBlock; i++)
|
||
|
{
|
||
|
sc = DfGetScode(_pstmChild->Write(_pb, _cb, &cbWritten));
|
||
|
if (FAILED(sc))
|
||
|
{
|
||
|
printf("..Iteration %ld, Write %lu failed - sc == 0x%lX\n",
|
||
|
iteration, i + 1, sc);
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
return(sc);
|
||
|
}
|
||
|
|
||
|
void CTestSetsize::EndCall(LONG iteration)
|
||
|
{
|
||
|
STATSTG stat;
|
||
|
|
||
|
_pstmChild->Stat(&stat, STATFLAG_NONAME);
|
||
|
|
||
|
if (ULIGetLow(stat.cbSize) != _cb * _cBlock)
|
||
|
{
|
||
|
printf("..Iteration %lu - Size of stream is %lu, expected %lu\n",
|
||
|
iteration, ULIGetLow(stat.cbSize), _cb * _cBlock);
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
void CTestSetsize::CallVerify(LONG iteration)
|
||
|
{
|
||
|
STATSTG stat;
|
||
|
|
||
|
_pstmChild->Stat(&stat, STATFLAG_NONAME);
|
||
|
|
||
|
if (ULIGetLow(stat.cbSize) != 0)
|
||
|
{
|
||
|
printf("..Iteration %lu - Size of stream is %lu, expected 0\n",
|
||
|
iteration, ULIGetLow(stat.cbSize));
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void CTestSetsize::EndPrep(LONG iteration)
|
||
|
{
|
||
|
delete _pb;
|
||
|
_pb = NULL;
|
||
|
|
||
|
_pstmChild->Release();
|
||
|
_pstg->Release();
|
||
|
}
|
||
|
|
||
|
void CTestSetsize::EndVerify(LONG iteration)
|
||
|
{
|
||
|
VerifyClean(_sc, _mdf.GetMode(), iteration);
|
||
|
}
|
||
|
|
||
|
BOOL CTestSetsize::Next(void)
|
||
|
{
|
||
|
if (!_mstm.Next())
|
||
|
{
|
||
|
_mstm.Init();
|
||
|
if (!_mdf.Next())
|
||
|
return(FALSE);
|
||
|
}
|
||
|
|
||
|
return(TRUE);
|
||
|
}
|
||
|
|
||
|
|
||
|
//+-------------------------------------------------------------------------
|
||
|
//
|
||
|
// Class: CTestCreateStream2
|
||
|
//
|
||
|
// Purpose: Test IStorage::CreateStream2
|
||
|
//
|
||
|
// Interface: CTestCase
|
||
|
//
|
||
|
// History: 26-Jan-93 AlexT Created
|
||
|
//
|
||
|
// Notes:
|
||
|
//
|
||
|
//--------------------------------------------------------------------------
|
||
|
|
||
|
class CTestCreateStream2 : public CTestCase
|
||
|
{
|
||
|
private:
|
||
|
SCODE _sc;
|
||
|
|
||
|
CModeDf _mdf;
|
||
|
IStorage *_pstg;
|
||
|
|
||
|
CModeStm _mstm;
|
||
|
IStream *_pstmChild;
|
||
|
|
||
|
public:
|
||
|
virtual BOOL Init(void);
|
||
|
virtual SCODE Prep(LONG iteration);
|
||
|
virtual SCODE Call(LONG iteration);
|
||
|
virtual void EndCall(LONG iteration);
|
||
|
virtual void CallVerify(LONG iteration);
|
||
|
virtual void EndPrep(LONG iteration);
|
||
|
virtual void EndVerify(LONG iteration);
|
||
|
virtual BOOL Next(void);
|
||
|
};
|
||
|
|
||
|
BOOL CTestCreateStream2::Init(void)
|
||
|
{
|
||
|
printf("SIFT IStorage::CreateStream2\n");
|
||
|
_mdf.Init();
|
||
|
_mstm.Init();
|
||
|
return(TRUE);
|
||
|
}
|
||
|
|
||
|
SCODE CTestCreateStream2::Prep(LONG iteration)
|
||
|
{
|
||
|
_sc = CreateWorkingDocfile(_mdf.GetMode(), &_pstg, 0);
|
||
|
return(_sc);
|
||
|
}
|
||
|
|
||
|
SCODE CTestCreateStream2::Call(LONG iteration)
|
||
|
{
|
||
|
SCODE sc;
|
||
|
ULONG cStream = 8;
|
||
|
|
||
|
char * pszName = "XTestFail Stream";
|
||
|
if (iteration == 0)
|
||
|
printf("Docfile Mode 0x%lX, Child Stream Mode 0x%lX\n",
|
||
|
_mdf.GetMode(), _mstm.GetMode());
|
||
|
|
||
|
for (ULONG i = 0; i < cStream; i++)
|
||
|
{
|
||
|
pszName[0] = ((char)i) + '0';
|
||
|
|
||
|
sc = DfGetScode(_pstg->CreateStream(
|
||
|
pszName,
|
||
|
_mstm.GetMode(),
|
||
|
0,
|
||
|
0,
|
||
|
&_pstmChild));
|
||
|
|
||
|
if (FAILED(sc))
|
||
|
{
|
||
|
if ((sc == STG_E_MEDIUMFULL) || (sc == STG_E_INSUFFICIENTMEMORY))
|
||
|
{
|
||
|
//Do nothing. We expected these.
|
||
|
}
|
||
|
else printf("..Iteration %ld, stream %lu - failed - sc = 0x%lX\n",
|
||
|
iteration, i + 1, sc);
|
||
|
break;
|
||
|
}
|
||
|
_pstmChild->Release();
|
||
|
}
|
||
|
|
||
|
return(sc);
|
||
|
}
|
||
|
|
||
|
void CTestCreateStream2::EndCall(LONG iteration)
|
||
|
{
|
||
|
}
|
||
|
|
||
|
void CTestCreateStream2::CallVerify(LONG iteration)
|
||
|
{
|
||
|
}
|
||
|
|
||
|
void CTestCreateStream2::EndPrep(LONG iteration)
|
||
|
{
|
||
|
_pstg->Release();
|
||
|
}
|
||
|
|
||
|
void CTestCreateStream2::EndVerify(LONG iteration)
|
||
|
{
|
||
|
VerifyClean(_sc, _mdf.GetMode(), iteration);
|
||
|
}
|
||
|
|
||
|
BOOL CTestCreateStream2::Next(void)
|
||
|
{
|
||
|
if (!_mstm.Next())
|
||
|
{
|
||
|
_mstm.Init();
|
||
|
if (!_mdf.Next())
|
||
|
return(FALSE);
|
||
|
}
|
||
|
|
||
|
return(TRUE);
|
||
|
}
|
||
|
|
||
|
//+-------------------------------------------------------------------------
|
||
|
//
|
||
|
// Class: CTestDestroyElement
|
||
|
//
|
||
|
// Purpose: Test IStorage::DestroyElement
|
||
|
//
|
||
|
// Interface: CTestCase
|
||
|
//
|
||
|
// History: 26-Jan-93 AlexT Created
|
||
|
//
|
||
|
// Notes:
|
||
|
//
|
||
|
//--------------------------------------------------------------------------
|
||
|
|
||
|
class CTestDestroyElement : public CTestCase
|
||
|
{
|
||
|
private:
|
||
|
SCODE _sc;
|
||
|
|
||
|
CModeDf _mdf;
|
||
|
IStorage *_pstg;
|
||
|
|
||
|
CModeStg _mstg;
|
||
|
IStorage *_pstgChild;
|
||
|
|
||
|
public:
|
||
|
virtual BOOL Init(void);
|
||
|
virtual SCODE Prep(LONG iteration);
|
||
|
virtual SCODE Call(LONG iteration);
|
||
|
virtual void EndCall(LONG iteration);
|
||
|
virtual void CallVerify(LONG iteration);
|
||
|
virtual void EndPrep(LONG iteration);
|
||
|
virtual void EndVerify(LONG iteration);
|
||
|
virtual BOOL Next(void);
|
||
|
};
|
||
|
|
||
|
BOOL CTestDestroyElement::Init(void)
|
||
|
{
|
||
|
printf("SIFT IStorage::DestroyElement\n");
|
||
|
_mdf.Init();
|
||
|
_mstg.Init();
|
||
|
return(TRUE);
|
||
|
}
|
||
|
|
||
|
SCODE CTestDestroyElement::Prep(LONG iteration)
|
||
|
{
|
||
|
_sc = CreateWorkingDocfile(_mdf.GetMode(), &_pstg, 0);
|
||
|
if (SUCCEEDED(_sc))
|
||
|
{
|
||
|
_sc = DfGetScode(_pstg->CreateStorage(
|
||
|
"TestFail Storage",
|
||
|
_mstg.GetMode(),
|
||
|
0,
|
||
|
0,
|
||
|
&_pstgChild));
|
||
|
|
||
|
_pstgChild->Release();
|
||
|
}
|
||
|
|
||
|
|
||
|
return(_sc);
|
||
|
}
|
||
|
|
||
|
SCODE CTestDestroyElement::Call(LONG iteration)
|
||
|
{
|
||
|
SCODE sc;
|
||
|
|
||
|
if (iteration == 0)
|
||
|
printf("Docfile Mode 0x%lX, Child Storage Mode 0x%lX\n",
|
||
|
_mdf.GetMode(), _mstg.GetMode());
|
||
|
|
||
|
sc = DfGetScode(_pstg->DestroyElement("TestFail Storage"));
|
||
|
|
||
|
if (FAILED(sc))
|
||
|
{
|
||
|
if ((sc == STG_E_MEDIUMFULL) || (sc == STG_E_INSUFFICIENTMEMORY))
|
||
|
{
|
||
|
//We expected these - do nothing.
|
||
|
}
|
||
|
else
|
||
|
printf("..Iteration %ld - failed - sc = 0x%lX\n",
|
||
|
iteration, sc);
|
||
|
}
|
||
|
|
||
|
return(sc);
|
||
|
}
|
||
|
|
||
|
void CTestDestroyElement::EndCall(LONG iteration)
|
||
|
{
|
||
|
SCODE sc;
|
||
|
|
||
|
sc = DfGetScode(_pstg->OpenStorage(
|
||
|
"TestFail Storage",
|
||
|
0,
|
||
|
_mstg.GetMode(),
|
||
|
0,
|
||
|
0,
|
||
|
&_pstgChild));
|
||
|
|
||
|
if (sc != STG_E_FILENOTFOUND)
|
||
|
{
|
||
|
printf("..Iteration %ld - open failed with 0x%lX, expected STG_E_FILENOTFOUND\n",
|
||
|
iteration,
|
||
|
sc);
|
||
|
}
|
||
|
|
||
|
if (SUCCEEDED(sc))
|
||
|
{
|
||
|
_pstgChild->Release();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void CTestDestroyElement::CallVerify(LONG iteration)
|
||
|
{
|
||
|
SCODE sc;
|
||
|
|
||
|
sc = DfGetScode(_pstg->OpenStorage(
|
||
|
"TestFail Storage",
|
||
|
0,
|
||
|
_mstg.GetMode(),
|
||
|
0,
|
||
|
0,
|
||
|
&_pstgChild));
|
||
|
|
||
|
if (FAILED(sc))
|
||
|
{
|
||
|
printf("..Iteration %ld - open failed with 0x%lX, expected success.\n",
|
||
|
iteration,
|
||
|
sc);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
_pstgChild->Release();
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
void CTestDestroyElement::EndPrep(LONG iteration)
|
||
|
{
|
||
|
_pstg->Release();
|
||
|
}
|
||
|
|
||
|
void CTestDestroyElement::EndVerify(LONG iteration)
|
||
|
{
|
||
|
VerifyClean(_sc, _mdf.GetMode(), iteration);
|
||
|
}
|
||
|
|
||
|
BOOL CTestDestroyElement::Next(void)
|
||
|
{
|
||
|
if (!_mstg.Next())
|
||
|
{
|
||
|
_mstg.Init();
|
||
|
if (!_mdf.Next())
|
||
|
return(FALSE);
|
||
|
}
|
||
|
|
||
|
return(TRUE);
|
||
|
}
|
||
|
|
||
|
|
||
|
//+-------------------------------------------------------------------------
|
||
|
//
|
||
|
// Class: CTestSetsize2
|
||
|
//
|
||
|
// Purpose: Test IStream::Write for largish writes
|
||
|
//
|
||
|
// Interface: CTestCase
|
||
|
//
|
||
|
// History: 16-Feb-93 PhilipLa Created.
|
||
|
//
|
||
|
// Notes:
|
||
|
//
|
||
|
//--------------------------------------------------------------------------
|
||
|
|
||
|
class CTestSetsize2 : public CTestCase
|
||
|
{
|
||
|
private:
|
||
|
SCODE _sc;
|
||
|
|
||
|
BYTE *_pb;
|
||
|
|
||
|
CModeDf _mdf;
|
||
|
IStorage *_pstg;
|
||
|
|
||
|
CModeStm _mstm;
|
||
|
IStream *_pstmChild;
|
||
|
|
||
|
ULONG _cb;
|
||
|
ULONG _cBlock;
|
||
|
public:
|
||
|
virtual BOOL Init(void);
|
||
|
virtual SCODE Prep(LONG iteration);
|
||
|
virtual SCODE Call(LONG iteration);
|
||
|
virtual void EndCall(LONG iteration);
|
||
|
virtual void CallVerify(LONG iteration);
|
||
|
virtual void EndPrep(LONG iteration);
|
||
|
virtual void EndVerify(LONG iteration);
|
||
|
virtual BOOL Next(void);
|
||
|
};
|
||
|
|
||
|
BOOL CTestSetsize2::Init(void)
|
||
|
{
|
||
|
printf("SIFT IStream::Setsize2\n");
|
||
|
_mdf.Init();
|
||
|
_mstm.Init();
|
||
|
|
||
|
_cb = 8192;
|
||
|
_cBlock = 9;
|
||
|
|
||
|
_pb = NULL;
|
||
|
return(TRUE);
|
||
|
}
|
||
|
|
||
|
SCODE CTestSetsize2::Prep(LONG iteration)
|
||
|
{
|
||
|
|
||
|
_pb = new BYTE[8192];
|
||
|
memset(_pb, 'X', 8192);
|
||
|
|
||
|
_sc = CreateWorkingDocfile(_mdf.GetMode(), &_pstg, 0);
|
||
|
if (SUCCEEDED(_sc))
|
||
|
{
|
||
|
_sc = DfGetScode(_pstg->CreateStream(
|
||
|
"TestFail Stream",
|
||
|
_mstm.GetMode(),
|
||
|
0,
|
||
|
0,
|
||
|
&_pstmChild));
|
||
|
|
||
|
if (FAILED(_sc))
|
||
|
_pstg->Release();
|
||
|
else
|
||
|
{
|
||
|
ULARGE_INTEGER ulSize;
|
||
|
ULISet32(ulSize, _cb * _cBlock);
|
||
|
|
||
|
_sc = DfGetScode(_pstmChild->SetSize(ulSize));
|
||
|
if (FAILED(_sc))
|
||
|
printf("Setsize failed in Prep()\n");
|
||
|
else
|
||
|
{
|
||
|
for (ULONG i = 0; i < _cBlock; i++)
|
||
|
{
|
||
|
ULONG cbWritten;
|
||
|
|
||
|
_sc = DfGetScode(_pstmChild->Write(_pb, _cb, &cbWritten));
|
||
|
if (FAILED(_sc))
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
return(_sc);
|
||
|
}
|
||
|
|
||
|
SCODE CTestSetsize2::Call(LONG iteration)
|
||
|
{
|
||
|
SCODE sc;
|
||
|
|
||
|
ULARGE_INTEGER ulSize;
|
||
|
ULISet32(ulSize, 2048L);
|
||
|
|
||
|
sc = DfGetScode(_pstmChild->SetSize(ulSize));
|
||
|
|
||
|
return(sc);
|
||
|
}
|
||
|
|
||
|
void CTestSetsize2::EndCall(LONG iteration)
|
||
|
{
|
||
|
|
||
|
STATSTG stat;
|
||
|
|
||
|
_pstmChild->Stat(&stat, STATFLAG_NONAME);
|
||
|
|
||
|
if (ULIGetLow(stat.cbSize) != 2048L)
|
||
|
{
|
||
|
printf("..Iteration %lu - Size of stream is %lu, expected %lu\n",
|
||
|
iteration, ULIGetLow(stat.cbSize), 2048L);
|
||
|
}
|
||
|
|
||
|
LARGE_INTEGER newPos;
|
||
|
ULISet32(newPos, 0);
|
||
|
ULARGE_INTEGER dummy;
|
||
|
|
||
|
_pstmChild->Seek(newPos, STREAM_SEEK_SET, &dummy);
|
||
|
ULONG cbRead;
|
||
|
|
||
|
_pstmChild->Read(_pb, 2048, &cbRead);
|
||
|
if (cbRead != 2048)
|
||
|
{
|
||
|
printf("Unknown error - read %lu bytes, expected 2048\n");
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
for (ULONG i = 0; i < 2048; i ++)
|
||
|
{
|
||
|
if (_pb[i] != 'X')
|
||
|
{
|
||
|
printf("Error in buffer data.\n");
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
void CTestSetsize2::CallVerify(LONG iteration)
|
||
|
{
|
||
|
|
||
|
STATSTG stat;
|
||
|
|
||
|
_pstmChild->Stat(&stat, STATFLAG_NONAME);
|
||
|
|
||
|
if (ULIGetLow(stat.cbSize) != _cb * _cBlock)
|
||
|
{
|
||
|
printf("..Iteration %lu - Size of stream is %lu, expected %lu\n",
|
||
|
iteration, ULIGetLow(stat.cbSize), _cb * _cBlock);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
LARGE_INTEGER newPos;
|
||
|
ULISet32(newPos, 0);
|
||
|
ULARGE_INTEGER dummy;
|
||
|
|
||
|
_pstmChild->Seek(newPos, STREAM_SEEK_SET, &dummy);
|
||
|
|
||
|
for (ULONG i = 0; i < _cBlock; i++)
|
||
|
{
|
||
|
ULONG cbRead;
|
||
|
|
||
|
_sc = DfGetScode(_pstmChild->Read(_pb, _cb, &cbRead));
|
||
|
if (FAILED(_sc))
|
||
|
{
|
||
|
printf("Read failed with %lX\n", _sc);
|
||
|
break;
|
||
|
}
|
||
|
if (cbRead != _cb)
|
||
|
{
|
||
|
printf("Read %lu bytes, expected %lu\n",cbRead,_cb);
|
||
|
break;
|
||
|
}
|
||
|
for (ULONG j = 0; j < _cb; j++)
|
||
|
{
|
||
|
if (_pb[j] != 'X')
|
||
|
{
|
||
|
printf("Data mismatch at byte %lu, block %lu\n",j,i);
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void CTestSetsize2::EndPrep(LONG iteration)
|
||
|
{
|
||
|
delete _pb;
|
||
|
_pb = NULL;
|
||
|
|
||
|
_pstmChild->Release();
|
||
|
_pstg->Release();
|
||
|
}
|
||
|
|
||
|
void CTestSetsize2::EndVerify(LONG iteration)
|
||
|
{
|
||
|
VerifyClean(_sc, _mdf.GetMode(), iteration);
|
||
|
}
|
||
|
|
||
|
BOOL CTestSetsize2::Next(void)
|
||
|
{
|
||
|
if (!_mstm.Next())
|
||
|
{
|
||
|
_mstm.Init();
|
||
|
if (!_mdf.Next())
|
||
|
return(FALSE);
|
||
|
}
|
||
|
|
||
|
return(TRUE);
|
||
|
}
|
||
|
|
||
|
|
||
|
//+-------------------------------------------------------------------------
|
||
|
//
|
||
|
// Class: CTestSwitchToFile
|
||
|
//
|
||
|
// Purpose: Test SwitchToFile
|
||
|
//
|
||
|
// Interface: CTestCase
|
||
|
//
|
||
|
// History: 18-Jun-93 PhilipLa Created.
|
||
|
//
|
||
|
// Notes:
|
||
|
//
|
||
|
//--------------------------------------------------------------------------
|
||
|
|
||
|
class CTestSwitchToFile : public CTestCase
|
||
|
{
|
||
|
private:
|
||
|
SCODE _sc;
|
||
|
|
||
|
CModeDf _mdf;
|
||
|
IStorage *_pstg;
|
||
|
|
||
|
public:
|
||
|
virtual BOOL Init(void);
|
||
|
virtual SCODE Prep(LONG iteration);
|
||
|
virtual SCODE Call(LONG iteration);
|
||
|
virtual void EndCall(LONG iteration);
|
||
|
virtual void CallVerify(LONG iteration);
|
||
|
virtual void EndPrep(LONG iteration);
|
||
|
virtual void EndVerify(LONG iteration);
|
||
|
virtual BOOL Next(void);
|
||
|
};
|
||
|
|
||
|
BOOL CTestSwitchToFile::Init(void)
|
||
|
{
|
||
|
printf("SIFT IStream::SwitchToFile\n");
|
||
|
_mdf.Init();
|
||
|
return(TRUE);
|
||
|
}
|
||
|
|
||
|
SCODE CTestSwitchToFile::Prep(LONG iteration)
|
||
|
{
|
||
|
IStream *pstm;
|
||
|
_unlink("c:\\tmp\\stf.dfl");
|
||
|
|
||
|
_sc = CreateWorkingDocfile(_mdf.GetMode(), &_pstg, 0);
|
||
|
if (SUCCEEDED(_sc))
|
||
|
{
|
||
|
_sc = DfGetScode(_pstg->CreateStream(
|
||
|
"TestFail Stream",
|
||
|
STGM_DIRECT|STGM_READWRITE|STGM_SHARE_EXCLUSIVE,
|
||
|
0,
|
||
|
0,
|
||
|
&pstm));
|
||
|
|
||
|
if (FAILED(_sc))
|
||
|
_pstg->Release();
|
||
|
else
|
||
|
{
|
||
|
ULARGE_INTEGER ul;
|
||
|
|
||
|
ULISet32(ul, 80000);
|
||
|
|
||
|
_sc = DfGetScode(pstm->SetSize(ul));
|
||
|
pstm->Release();
|
||
|
|
||
|
if (FAILED(_sc))
|
||
|
{
|
||
|
_pstg->Release();
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
return(_sc);
|
||
|
}
|
||
|
|
||
|
SCODE CTestSwitchToFile::Call(LONG iteration)
|
||
|
{
|
||
|
SCODE sc;
|
||
|
IRootStorage *pstgRoot;
|
||
|
|
||
|
sc = DfGetScode(_pstg->QueryInterface(
|
||
|
IID_IRootStorage,
|
||
|
(void **)&pstgRoot));
|
||
|
|
||
|
if (FAILED(sc))
|
||
|
return sc;
|
||
|
|
||
|
sc = DfGetScode(pstgRoot->SwitchToFile("c:\\tmp\\stf.dfl"));
|
||
|
|
||
|
pstgRoot->Release();
|
||
|
|
||
|
if (FAILED(sc))
|
||
|
return sc;
|
||
|
|
||
|
|
||
|
sc = DfGetScode(_pstg->Commit(STGC_OVERWRITE));
|
||
|
|
||
|
if (FAILED(sc))
|
||
|
{
|
||
|
printf("... Commit with overwrite failed.\n");
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
printf("... Commit succeeded.\n");
|
||
|
}
|
||
|
|
||
|
return(sc);
|
||
|
}
|
||
|
|
||
|
void CTestSwitchToFile::EndCall(LONG iteration)
|
||
|
{
|
||
|
}
|
||
|
|
||
|
|
||
|
void CTestSwitchToFile::CallVerify(LONG iteration)
|
||
|
{
|
||
|
}
|
||
|
|
||
|
void CTestSwitchToFile::EndPrep(LONG iteration)
|
||
|
{
|
||
|
_pstg->Release();
|
||
|
_unlink("c:\\tmp\\stf.dfl");
|
||
|
}
|
||
|
|
||
|
void CTestSwitchToFile::EndVerify(LONG iteration)
|
||
|
{
|
||
|
VerifyClean(_sc, _mdf.GetMode(), iteration);
|
||
|
}
|
||
|
|
||
|
BOOL CTestSwitchToFile::Next(void)
|
||
|
{
|
||
|
do
|
||
|
{
|
||
|
if (!_mdf.Next())
|
||
|
return FALSE;
|
||
|
}
|
||
|
while (((_mdf.GetMode() & 0x70) == STGM_SHARE_DENY_READ) ||
|
||
|
(_mdf.GetMode() & 0x70) == STGM_SHARE_DENY_NONE);
|
||
|
|
||
|
return(TRUE);
|
||
|
}
|
||
|
|
||
|
|
||
|
//+-------------------------------------------------------------------------
|
||
|
//
|
||
|
// Function: TestCount, TestItem
|
||
|
//
|
||
|
// Synopsis:
|
||
|
//
|
||
|
// Effects:
|
||
|
//
|
||
|
// Arguments:
|
||
|
//
|
||
|
// Returns:
|
||
|
//
|
||
|
// History: 26-Jan-93 AlexT Created
|
||
|
//
|
||
|
// Notes:
|
||
|
//
|
||
|
//--------------------------------------------------------------------------
|
||
|
|
||
|
CTestStgCreate tstStgCreate;
|
||
|
CTestCreateStorage tstCreateStorage;
|
||
|
CTestCreateStream tstCreateStream;
|
||
|
CTestWrite tstWrite;
|
||
|
CTestOpenStorage tstOpenStorage;
|
||
|
CTestOpenStream tstOpenStream;
|
||
|
CTestCommit tstCommit;
|
||
|
CTestCommit2 tstCommit2;
|
||
|
CTestStgOpen tstStgOpen;
|
||
|
CTestWrite2 tstWrite2;
|
||
|
CTestWrite3 tstWrite3;
|
||
|
CTestSetsize tstSetsize;
|
||
|
CTestSetsize2 tstSetsize2;
|
||
|
CTestCreateStream2 tstCreateStream2;
|
||
|
CTestDestroyElement tstDestroyElement;
|
||
|
CTestSwitchToFile tstSwitchToFile;
|
||
|
CTestCommit3 tstCommit3;
|
||
|
CTestCommit4 tstCommit4;
|
||
|
|
||
|
CTestCase *atst[] =
|
||
|
{
|
||
|
#if defined(BREADTHTEST)
|
||
|
&tstStgCreate,
|
||
|
&tstStgOpen,
|
||
|
&tstCreateStorage,
|
||
|
&tstCreateStream,
|
||
|
&tstWrite,
|
||
|
&tstCommit,
|
||
|
&tstCommit2,
|
||
|
&tstOpenStream,
|
||
|
&tstOpenStorage,
|
||
|
&tstWrite2,
|
||
|
&tstWrite3,
|
||
|
&tstSetsize,
|
||
|
&tstCreateStream2,
|
||
|
&tstDestroyElement,
|
||
|
&tstSetsize2,
|
||
|
&tstSwitchToFile,
|
||
|
&tstCommit3,
|
||
|
#endif
|
||
|
&tstCommit4
|
||
|
};
|
||
|
|
||
|
int TestCount(void)
|
||
|
{
|
||
|
return(sizeof(atst)/sizeof(CTestCase *));
|
||
|
}
|
||
|
|
||
|
CTestCase *TestItem(int iTest)
|
||
|
{
|
||
|
return(atst[iTest]);
|
||
|
}
|