Author: alanmc
Date: 2008-02-14 16:12:55 -0500 (Thu, 14 Feb 2008)
New Revision: 95700

Added:
   trunk/bitsharp/src/MonoTorrent.Tests/PieceWriterTests.cs
Log:
Added tests for piecewriter

Added: trunk/bitsharp/src/MonoTorrent.Tests/PieceWriterTests.cs
===================================================================
--- trunk/bitsharp/src/MonoTorrent.Tests/PieceWriterTests.cs    2008-02-14 
21:12:41 UTC (rev 95699)
+++ trunk/bitsharp/src/MonoTorrent.Tests/PieceWriterTests.cs    2008-02-14 
21:12:55 UTC (rev 95700)
@@ -0,0 +1,169 @@
+using System;
+using System.Collections.Generic;
+using NUnit.Framework;
+using MonoTorrent.Client;
+using MonoTorrent.Client.PieceWriter;
+using MonoTorrent.Client.Messages.Standard;
+using MonoTorrent.Common;
+
+namespace MonoTorrent.Tests
+{
+       public class NullWriter : IPieceWriter
+       {
+               PieceWriterTests tester;
+               public NullWriter(PieceWriterTests tests)
+               {
+                       tester = tests;
+               }
+
+               public int Read(FileManager manager, byte[] buffer, int 
bufferOffset, long offset, int count)
+               {
+                       return 0;
+               }
+
+               public void Write(PieceData data)
+               {
+                       tester.blocks.Remove(data);
+                       Console.WriteLine("Flushed through to the null");
+                       PieceWriterTests.Buffer.FreeBuffer(ref data.Buffer);
+               }
+
+               public void CloseFileStreams(TorrentManager manager)
+               {
+
+               }
+
+               public void Flush(TorrentManager manager)
+               {
+
+               }
+
+               public void Dispose()
+               {
+
+               }
+       }
+
+       [TestFixture]
+       public class PieceWriterTests
+       {
+               public static BufferManager Buffer = new BufferManager();
+               SampleClient.EngineTestRig rig;
+
+               MemoryWriter level1;
+               MemoryWriter level2;
+               public List<PieceData> blocks;
+
+               [SetUp]
+               public void Setup()
+               {
+                       rig = new SampleClient.EngineTestRig("Downloads", 
10000);
+
+                       blocks = new List<PieceData>();
+                       level2 = new MemoryWriter(new NullWriter(this), 50000);
+                       level1 = new MemoryWriter(level2, 50000);
+
+                       for (int piece = 0; piece < 2; piece++)
+                       {
+                               for (int block = 0; block < 5; block++)
+                               {
+                                       PieceData d = CreateBlock(piece, block);
+                                       blocks.Add(d);
+                                       level1.Write(d);
+                               }
+                       }
+               }
+
+               private PieceData CreateBlock(int piece, int block)
+               {
+                       ArraySegment<byte> b = BufferManager.EmptyBuffer;
+                       Buffer.GetBuffer(ref b, 1000);
+                       for (int i = 0; i < b.Count; i++)
+                               b.Array[b.Offset + i] = (byte)(piece * 10 + 
block);
+                       return new PieceData(b, piece, block * 1000, 1000, 
rig.Manager.FileManager);
+               }
+
+               [Test]
+               public void TestMemoryWrites()
+               {
+                       // Generate a load of pieces and flush them through the 
double buffer
+                       for (int piece = 0; piece < 6; piece++)
+                       {
+                               for (int block = 0; block < 10; block++)
+                               {
+                                       PieceData d = CreateBlock(piece, block);
+                                       blocks.Add(d);
+                                       level1.Write(d);
+                               }
+                       }
+
+                       // For the pieces which weren't flushed to the null 
buffer, make sure they weren't overwritten incorrectly
+                       for (int i = 0; i < blocks.Count; i++)
+                       {
+                               ArraySegment<byte> b = blocks[i].Buffer;
+                               PieceData data = blocks[i];
+                               for (int j = 0; j < b.Count; j++)
+                                       Assert.AreEqual(b.Array[b.Offset + j], 
data.PieceIndex * 10 + data.StartOffset / data.Count, "#1");
+                       }
+               }
+
+               [Test]
+               public void TestMemoryStandardReads()
+               {
+
+                       ArraySegment<byte> buffer = BufferManager.EmptyBuffer;
+                       Buffer.GetBuffer(ref buffer, 1000);
+                       Initialise(buffer);
+                       for (int piece=0; piece < 2; piece++)
+                       {
+                               for(int block = 0; block < 5; block++)
+                               {
+                                       long readIndex = (long)piece * 
rig.Manager.Torrent.PieceLength + block * 1000;
+                                       level1.Read(rig.Manager.FileManager, 
buffer.Array, buffer.Offset, readIndex, 1000);
+
+                                       for (int i = 0; i < 1000; i++)
+                                               
Assert.AreEqual(buffer.Array[buffer.Offset + i], piece * 10 + block, "#1");
+                               }
+                       }
+               }
+
+
+               [Test]
+               public void TestMemoryOffsetReads()
+               {
+
+                       ArraySegment<byte> buffer = BufferManager.EmptyBuffer;
+                       Buffer.GetBuffer(ref buffer, 10000);
+                       Initialise(buffer);
+                       int piece = 0;
+                       int block = 0;
+
+                       long readIndex = (long)piece * 
rig.Manager.Torrent.PieceLength + block * 1000;
+                       level1.Read(rig.Manager.FileManager, buffer.Array, 
buffer.Offset, readIndex, 10000);
+
+                       for (int i = 0; i < 1000; i++)
+                               Assert.AreEqual(buffer.Array[buffer.Offset + 
i], 0, "#0");
+                       for (int i = 0; i < 1000; i++)
+                               Assert.AreEqual(buffer.Array[buffer.Offset + 
i], 1, "#1");
+                       for (int i = 0; i < 1000; i++)
+                               Assert.AreEqual(buffer.Array[buffer.Offset + 
i], 2, "#2");
+                       for (int i = 0; i < 1000; i++)
+                               Assert.AreEqual(buffer.Array[buffer.Offset + 
i], 3, "#3");
+                       for (int i = 0; i < 1000; i++)
+                               Assert.AreEqual(buffer.Array[buffer.Offset + 
i], 4, "#4");
+               }
+
+               private void Initialise(ArraySegment<byte> buffer)
+               {
+                       for (int i = 0; i < buffer.Count; i++)
+                               buffer.Array[buffer.Offset + i] = 0;
+               }
+
+               public static void Main(string[] args)
+               {
+                       PieceWriterTests t = new PieceWriterTests();
+                       t.Setup();
+                       t.TestMemoryOffsetReads();
+               }
+       }
+}


Property changes on: trunk/bitsharp/src/MonoTorrent.Tests/PieceWriterTests.cs
___________________________________________________________________
Name: svn:eol-style
   + native

_______________________________________________
Mono-patches maillist  -  [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches

Reply via email to