git-svn-id: https://svn.code.sf.net/p/flaim/code/trunk@955 0109f412-320b-0410-ab79-c3e0c5ffbbe6
138 lines
3.8 KiB
C#
138 lines
3.8 KiB
C#
//------------------------------------------------------------------------------
|
|
// Desc: Check database test
|
|
//
|
|
// Tabs: 3
|
|
//
|
|
// Copyright (c) 2006 Novell, Inc. All Rights Reserved.
|
|
//
|
|
// This program is free software; you can redistribute it and/or
|
|
// modify it under the terms of version 2 of the GNU General Public
|
|
// License as published by the Free Software Foundation.
|
|
//
|
|
// This program is distributed in the hope that it will be useful,
|
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
// GNU General Public License for more details.
|
|
//
|
|
// You should have received a copy of the GNU General Public License
|
|
// along with this program; if not, contact Novell, Inc.
|
|
//
|
|
// To contact Novell about this file by physical or electronic mail,
|
|
// you may find current contact information at www.novell.com
|
|
//
|
|
// $Id$
|
|
//------------------------------------------------------------------------------
|
|
|
|
using System;
|
|
using System.IO;
|
|
using System.Runtime.InteropServices;
|
|
using xflaim;
|
|
|
|
namespace cstest
|
|
{
|
|
|
|
//--------------------------------------------------------------------------
|
|
// Check database test.
|
|
//--------------------------------------------------------------------------
|
|
public class CheckDbTest : Tester
|
|
{
|
|
private class MyDbCheckStatus : DbCheckStatus
|
|
{
|
|
public MyDbCheckStatus()
|
|
{
|
|
m_bOutputLines = false;
|
|
System.Console.Write( "\n");
|
|
}
|
|
|
|
public RCODE reportProgress(
|
|
XFLM_PROGRESS_CHECK_INFO progressInfo)
|
|
{
|
|
if (progressInfo.bStartFlag != 0)
|
|
{
|
|
if (progressInfo.eCheckPhase == FlmCheckPhase.XFLM_CHECK_B_TREE)
|
|
{
|
|
System.Console.WriteLine( "\nChecking B-Tree: {0} ({1})",
|
|
progressInfo.uiLfNumber, progressInfo.eLfType);
|
|
}
|
|
else
|
|
{
|
|
System.Console.WriteLine( "\nCheck Phase: {0}", progressInfo.eCheckPhase);
|
|
}
|
|
}
|
|
System.Console.Write( "Bytes To Check: {0}, Bytes Checked: {1}\r",
|
|
progressInfo.ulDatabaseSize, progressInfo.ulBytesExamined);
|
|
m_bOutputLines = true;
|
|
return( RCODE.NE_XFLM_OK);
|
|
}
|
|
|
|
public RCODE reportCheckErr(
|
|
XFLM_CORRUPT_INFO corruptInfo)
|
|
{
|
|
printCorruption( corruptInfo);
|
|
m_bOutputLines = true;
|
|
return( RCODE.NE_XFLM_OK);
|
|
}
|
|
|
|
public bool outputLines()
|
|
{
|
|
return( m_bOutputLines);
|
|
}
|
|
|
|
private bool m_bOutputLines;
|
|
}
|
|
|
|
public bool checkDbTest(
|
|
string sDbName,
|
|
DbSystem dbSystem)
|
|
{
|
|
MyDbCheckStatus dbCheckStatus = null;
|
|
DbInfo dbInfo = null;
|
|
XFLM_DB_HDR dbHdr = new XFLM_DB_HDR();
|
|
|
|
// Try restoring the database
|
|
|
|
beginTest( "Check Database Test (" + sDbName + ")");
|
|
|
|
dbCheckStatus = new MyDbCheckStatus();
|
|
try
|
|
{
|
|
dbInfo = dbSystem.dbCheck( sDbName, null, null, null,
|
|
DbCheckFlags.XFLM_ONLINE | DbCheckFlags.XFLM_DO_LOGICAL_CHECK,
|
|
dbCheckStatus);
|
|
}
|
|
catch (XFlaimException ex)
|
|
{
|
|
endTest( dbCheckStatus.outputLines(), ex, "checking database");
|
|
return( false);
|
|
}
|
|
|
|
dbInfo.getDbHdr( dbHdr);
|
|
System.Console.Write( "\n");
|
|
System.Console.WriteLine( "Signature............. {0}", dbHdr.szSignature);
|
|
System.Console.WriteLine( "Database Version...... {0}", dbHdr.ui32DbVersion);
|
|
System.Console.WriteLine( "Block Size............ {0}", dbHdr.ui16BlockSize);
|
|
|
|
if (dbHdr.szSignature != "FLAIMDB")
|
|
{
|
|
endTest( true, false);
|
|
System.Console.WriteLine( "Invalid signature in database header");
|
|
return( false);
|
|
}
|
|
if (dbHdr.ui16BlockSize != 8192 && dbHdr.ui16BlockSize != 4096)
|
|
{
|
|
endTest( true, false);
|
|
System.Console.WriteLine( "Invalid block size in database header");
|
|
return( false);
|
|
}
|
|
if ((DBVersions)dbHdr.ui32DbVersion != DBVersions.XFLM_CURRENT_VERSION_NUM)
|
|
{
|
|
endTest( true, false);
|
|
System.Console.WriteLine( "Invalid version in database header");
|
|
return( false);
|
|
}
|
|
endTest( true, true);
|
|
return( true);
|
|
}
|
|
}
|
|
}
|