// Copyright (C) 2004-2006 Autodesk, Inc.
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of version 2.1 of the GNU Lesser
// General Public License as published by the Free Software Foundation.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
using System;
using System.Diagnostics;
using System.Text;
using OSGeo.FDO.Common.Io;
#pragma warning disable
namespace Fdo_Test
{
///
/// Summary description for mgIoTest.
///
public class mgIoTest
{
private const int LINE_COUNT = 5000;
public mgIoTest()
{
Console.WriteLine("start mgIoTest");
}
public void setUp()
{
Console.WriteLine("start mgIoTest.setUp");
// Create a file used for various file tests.
IoFileStream fileStream = new IoFileStream("c:\\testFile.txt", "w");
fileStream.Write((new ASCIIEncoding()).GetBytes("test file contents"), 18 );
//Console.WriteLine("finish mgIoTest.setUp");
}
public void testStreams()
{
Console.WriteLine("start mgIoTest.testStreams");
try
{
IoMemoryStream memStream1 = new IoMemoryStream();
IoMemoryStream memStream2 = new IoMemoryStream();
IoMemoryStream memStream3 = new IoMemoryStream();
IoFileStream fileStream1 = new IoFileStream("c:\\testStream1.txt", "w+" );
IoFileStream fileStream2 = new IoFileStream("c:\\testStream2.txt", "w+" );
populateStream(memStream1);
// vldStream(memStream1);
bufferedWrite( memStream1, fileStream1);
vldStream(fileStream1);
streamedWrite( fileStream1, memStream2 );
vldStream(memStream2);
streamedWrite( memStream2, fileStream2 );
vldStream(fileStream2);
bufferedWrite( fileStream2, memStream3 );
vldStream(memStream3);
gisArrayRead(memStream3);
}
catch (OSGeo.FDO.Common.Exception e)
{
Debug.Assert(false, e.Message);
}
catch(System.Exception e)
{
Debug.Assert(false, e.Message);
}
//Console.WriteLine("finish mgIoTest.testStreams");
}
public void testFileOpen()
{
Console.WriteLine("start mgIoTest.testFileOpen");
try
{
IoFileStream fileStream;
// Try to open non-existent file for read, should fail.
bool bFailed = false;
try
{
fileStream = new IoFileStream("c:\\testNotExists", "r" );
}
catch
{
bFailed = true;
}
Debug.Assert(bFailed, "Opening non-existent file should have failed.");
// Try null file name.
bFailed = false;
try
{
fileStream = new IoFileStream( null, "r" );
}
catch
{
bFailed = true;
}
Debug.Assert(bFailed, "Opening file with null name should have failed.");
// Try null access modes.
bFailed = false;
try
{
fileStream = new IoFileStream( "c:\\aFile", null );
}
catch
{
bFailed = true;
}
Debug.Assert( bFailed, "Opening file with null modes should have failed." );
// Try null fp.
bFailed = false;
try
{
fileStream = new IoFileStream(null, null);
}
catch
{
bFailed = true;
}
Debug.Assert( bFailed, "Opening file with null fp should have failed." );
fileStream = new IoFileStream( "c:\\testFile.txt", "w" );
}
catch (OSGeo.FDO.Common.Exception e)
{
Debug.Assert(false, e.Message);
}
catch(System.Exception e)
{
Debug.Assert(false, e.Message);
}
//Console.WriteLine("finish mgIoTest.testFileOpen");
}
public void testFileRead()
{
Console.WriteLine("start mgIoTest.testFileRead");
try
{
IoFileStream fileStream;
byte[] buffer = new byte[1000];
Int64 count;
// Open file in write-only mode
fileStream = new IoFileStream( "c:\\testFileRead.txt", "w" );
// try reading into null buffer, should fail.
bool bFailed = false;
try
{
count = fileStream.Read( null, 5 );
}
catch ( OSGeo.FDO.Common.Exception e)
{
bFailed = true;
}
catch ( System.Exception ex)
{
bFailed = true;
}
Debug.Assert(bFailed, "Reading into null buffer should have failed.");
// try reading from write-only file, should fail
bFailed = false;
try
{
count = fileStream.Read( buffer, 5 );
}
catch ( OSGeo.FDO.Common.Exception e)
{
bFailed = true;
}
Debug.Assert(bFailed, "Reading from write-only file should have failed." );
}
catch ( System.Exception ex)
{
Debug.Assert(false, ex.Message);
}
//Console.WriteLine("finish mgIoTest.testFileRead");
}
public void testFileWrite()
{
Console.WriteLine("start mgIoTest.testFileWrite");
try
{
IoFileStream fileStream;
IoMemoryStream memoryStream;
byte[] buffer = new byte[1000];
memoryStream = new IoMemoryStream();
memoryStream.Write( (new ASCIIEncoding()).GetBytes( "stuff"), 5 );
memoryStream.Reset();
// Open file in read-only mode
fileStream = new IoFileStream("c:\\testFile.txt", "r" );
// try writing from null buffer, should fail.
bool bFailed = false;
try
{
fileStream.Write( (byte[])null, 5 );
}
catch ( OSGeo.FDO.Common.Exception e )
{
bFailed = true;
}
catch(System.Exception e)
{
bFailed = true;
}
Debug.Assert(bFailed, "Writing from null buffer should have failed.");
// try writing to read-only file, should fail
bFailed = false;
try
{
fileStream.Write( buffer, 5 );
}
catch ( OSGeo.FDO.Common.Exception e )
{
bFailed = true;
}
catch(System.Exception e)
{
bFailed = true;
}
Debug.Assert(bFailed, "Writing to read-only file should have failed." );
// retry writing tests, using a stream as input
bFailed = false;
try
{
fileStream.Write( (IoStream) null, 5 );
}
catch ( OSGeo.FDO.Common.Exception e )
{
bFailed = true;
}
catch(System.Exception e)
{
bFailed = true;
}
Debug.Assert(bFailed, "Writing from null stream should have failed." );
bFailed = false;
try
{
fileStream.Write( memoryStream );
}
catch ( OSGeo.FDO.Common.Exception e )
{
bFailed = true;
}
catch(System.Exception e)
{
bFailed = true;
}
Debug.Assert(bFailed, "Writing to read-only file should have failed." );
}
catch ( OSGeo.FDO.Common.Exception e )
{
Debug.Assert(false, e.Message);
}
catch(System.Exception e)
{
Debug.Assert(false, e.Message);
}
//Console.WriteLine("finish mgIoTest.testFileWrite");
}
public void testFileCapabilities()
{
Console.WriteLine("start mgIoTest.testFileCapabilities");
try
{
IoFileStream fileStream;
fileStream = new IoFileStream("c:\\testFile.txt", "r" );
Debug.Assert( fileStream.CanRead == true );
Debug.Assert( fileStream.CanWrite == false );
Debug.Assert( fileStream.HasContext == true );
fileStream = new IoFileStream( "c:\\testFileWrite.txt", "w" );
Debug.Assert( fileStream.CanRead == false );
Debug.Assert( fileStream.CanWrite == true );
Debug.Assert( fileStream.HasContext == true );
fileStream = new IoFileStream( "c:\\testFile.txt", "r+" );
Debug.Assert( fileStream.CanRead == true );
Debug.Assert( fileStream.CanWrite == true );
Debug.Assert( fileStream.HasContext == true );
fileStream = new IoFileStream( "c:\\testFile.txt", "w+" );
Debug.Assert( fileStream.CanRead == true );
Debug.Assert( fileStream.CanWrite == true );
Debug.Assert( fileStream.HasContext == true );
}
catch ( OSGeo.FDO.Common.Exception e )
{
Debug.Assert(false, e.Message);
}
catch(System.Exception e)
{
Debug.Assert(false, e.Message);
}
//Console.WriteLine("finish mgIoTest.testFileCapabilities");
}
public void testMemoryStream()
{
Console.WriteLine("start mgIoTest.testMemoryStream");
try
{
IoMemoryStream memoryStream = new IoMemoryStream();
memoryStream.Write((new ASCIIEncoding()).GetBytes("stuff"), 5 );
memoryStream.Reset();
// try reading to null buffer, should fail.
bool bFailed = false;
try
{
memoryStream.Read( null, 5 );
}
catch ( OSGeo.FDO.Common.Exception e )
{
bFailed = true;
}
catch(System.Exception e)
{
bFailed = true;
}
Debug.Assert(bFailed,"Reading to null buffer should have failed." );
// try writing from null buffer, should fail.
bFailed = false;
try
{
memoryStream.Write( (byte[]) null, 5 );
}
catch ( OSGeo.FDO.Common.Exception e )
{
bFailed = true;
}
catch(System.Exception e)
{
bFailed = true;
}
Debug.Assert(bFailed, "Writing from null buffer should have failed." );
// try writing from null stream, should fail
bFailed = false;
try
{
memoryStream.Write( (IoStream) null, 5 );
}
catch ( OSGeo.FDO.Common.Exception e )
{
bFailed = true;
}
catch(System.Exception e)
{
bFailed = true;
}
Debug.Assert(bFailed, "Writing from null stream should have failed." );
}
catch ( OSGeo.FDO.Common.Exception e )
{
Debug.Assert(false, e.Message);
}
catch(System.Exception e)
{
Debug.Assert(false, e.Message);
}
//Console.WriteLine("finish mgIoTest.testMemoryStream");
}
///
///
///
public void testLargeFile()
{
Console.WriteLine("start mgIoTest.testLargeFile");
try
{
byte [] buffer = new byte[11];
IoFileStream fileStream;
// Create a file larger than 4GB. The file contains a sequence
// of 10 digit numbers where the number is the offset plus
// 1,000,000,000.
fileStream = new IoFileStream( "c:\\testLargeFile", "w+" );
for ( Int64 j = 100000000; j < 800000000; j ++ )
{
fileStream.Write( (new ASCIIEncoding()).GetBytes(j.ToString() + "0"), 10 );
}
// Text randomly accessing the large file.
fileStream = new IoFileStream( "c:\\testLargeFile", "r+" );
Debug.Assert( fileStream.Length == 7000000000 );
// Absolute skip
fileStream.Skip( 5456235670 );
Int64 count = fileStream.Read( buffer, 10 );
buffer[count] = 0;
byte [] compb = (new ASCIIEncoding()).GetBytes("6456235670");
for (int i = 0; i < compb.Length; i ++)
{
Debug.Assert(buffer[i] == compb[i]);
}
// another absolute skip
fileStream.Reset();
fileStream.Skip( 5256265675 );
count = fileStream.Read( buffer, 10 );
buffer[count] = 0;
compb = (new ASCIIEncoding()).GetBytes("6567062562");
for (int i = 0; i < compb.Length; i ++)
{
Debug.Assert(buffer[i] == compb[i]);
}
// Relative skip
fileStream.Skip( 40 );
count = fileStream.Read( buffer, 10 );
buffer[count] = 0;
compb = (new ASCIIEncoding()).GetBytes("6572062562");
for (int i = 0; i < compb.Length; i ++)
{
Debug.Assert(buffer[i] == compb[i]);
}
Debug.Assert( fileStream.Index == 5256265735 );
// Skip past end of file. Should be add end of file.
fileStream.Skip( 5256265675 );
count = fileStream.Read( buffer, 10 );
Debug.Assert( count == 0 );
// Change the length and verify that new length can be retrieved.
fileStream.Length = 6200020058;
Debug.Assert( fileStream.Length == 6200020058 );
// try another skip after the length change.
fileStream.Reset();
fileStream.Skip( 6200020050 );
count = fileStream.Read( buffer, 10 );
buffer[count] = 0;
compb = (new ASCIIEncoding()).GetBytes("72000200");
for (int i = 0; i < compb.Length; i ++)
{
Debug.Assert(buffer[i] == compb[i]);
}
}
catch ( OSGeo.FDO.Common.Exception e )
{
Console.WriteLine(e.Message);
}
catch(System.Exception e)
{
Console.WriteLine(e.Message);
}
//Console.WriteLine("finish mgIoTest.testLargeFile");
}
private void populateStream( IoStream stream)
{
Int32 i;
stream.Reset();
for ( i = 0; i < LINE_COUNT; i++ )
{
stream.Write((new ASCIIEncoding()).GetBytes(i.ToString() + " ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789\n"), 48 );
}
}
private void vldStream( IoStream stream)
{
Int32 i;
char[] buffer = new char[49];
char[] expected = new char[49];
IoByteStreamReader reader = new IoByteStreamReader(stream);
reader.Reset();
Int64 len = reader.Length;
Debug.Assert(len == (LINE_COUNT * 48) );
Int64 pos = reader.Index;
Debug.Assert(pos == 0 );
for ( i = 0; ; i++ )
{
Int32 readCount = reader.ReadNext((new ASCIIEncoding()).GetBytes(i.ToString() + " ABCDEFGHIJKLMNOPQRSTUVWXYZ012345"), 0, 43 );
if ( readCount == 0 )
break;
Debug.Assert(readCount == 43);
buffer[readCount] = '\0';
for(int j = 0; j < buffer.Length; j ++)
{
Debug.Assert(buffer[j] == expected[j]);
}
reader.Skip(5);
pos = stream.Index;
Debug.Assert(pos == ((i + 1) * 48) );
}
Debug.Assert(i == LINE_COUNT);
}
private void bufferedWrite( IoStream inStream, IoStream outStream, UInt32 bufSize )
{
byte[] buffer = new byte[bufSize];
inStream.Reset();
outStream.Reset();
Int64 readCount = inStream.Read( buffer, bufSize );
while ( readCount > 0 )
{
outStream.Write( buffer, bufSize );
readCount = inStream.Read( buffer, bufSize );
}
}
private void bufferedWrite(IoStream inStream, IoStream outStream)
{
bufferedWrite(inStream, outStream, 100);
}
private void streamedWrite( IoStream inStream, IoStream outStream )
{
inStream.Reset();
outStream.Reset();
outStream.Write(inStream);
}
private void gisArrayRead( IoStream stream)
{
Int32 i;
byte [] byteArray = new byte[43];
string expected;
IoByteStreamReader reader = new IoByteStreamReader(stream);
reader.Reset();
for ( i = 0; ; i++ )
{
string temp = i.ToString() + " ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789\n"; //ΌΣΙΟΑΛ6789/n
expected = temp + new string(new char[49 - temp.Length]);
Int32 readCount = reader.ReadNext(byteArray, 0, 43 );
if ( readCount == 0 )
break;
Debug.Assert(readCount == 43);
string s1 = (new ASCIIEncoding()).GetString(byteArray);
string s2 = expected;
Debug.Assert((new ASCIIEncoding()).GetString(byteArray).Substring(0, readCount - 1) == expected.Substring(0, readCount - 1));
reader.Skip(5);
}
}
}
}