|
|
//+-------------------------------------------------------------------------
//
// 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]); }
|