Skip to content

Commit be7c86d

Browse files
authored
Update tests (#236)
* Update/add performance tests for streams * Update RingBuffer to allow for token cancelation
1 parent 8feb39a commit be7c86d

File tree

9 files changed

+406
-321
lines changed

9 files changed

+406
-321
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -250,3 +250,4 @@ paket-files/
250250
# JetBrains Rider
251251
.idea/
252252
*.sln.iml
253+
/test/ICSharpCode.SharpZipLib.TestBootstrapper/Properties/launchSettings.json

test/ICSharpCode.SharpZipLib.TestBootstrapper/Program.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@ public class Program
99
{
1010
static void Main(string[] args)
1111
{
12-
new AutoRun(typeof(ICSharpCode.SharpZipLib.Tests.Base.InflaterDeflaterTestSuite).GetTypeInfo().Assembly)
13-
.Execute(args, new ExtendedTextWrapper(Console.Out), Console.In);
12+
new AutoRun(typeof(Tests.Base.InflaterDeflaterTestSuite).GetTypeInfo().Assembly)
13+
.Execute(args);
1414
}
1515

1616
}

test/ICSharpCode.SharpZipLib.Tests/BZip2/Bzip2Tests.cs

Lines changed: 18 additions & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
using ICSharpCode.SharpZipLib.Tests.TestSupport;
55
using NUnit.Framework;
66
using System.Threading;
7+
using System.Diagnostics;
78

89
namespace ICSharpCode.SharpZipLib.Tests.BZip2
910
{
@@ -86,90 +87,29 @@ public void CreateEmptyArchive()
8687

8788
[Test]
8889
[Category("BZip2")]
89-
[Ignore("TODO : Fix this")]
90-
public void Performance()
90+
[Category("Performance")]
91+
[Explicit("Long-running")]
92+
public void WriteThroughput()
9193
{
92-
window_ = new WindowedStream(0x150000);
93-
94-
outStream_ = new BZip2OutputStream(window_, 1);
95-
96-
const long Target = 0x10000000;
97-
readTarget_ = writeTarget_ = Target;
98-
99-
Thread reader = new Thread(Reader);
100-
reader.Name = "Reader";
101-
102-
Thread writer = new Thread(Writer);
103-
writer.Name = "Writer";
104-
105-
DateTime startTime = DateTime.Now;
106-
writer.Start();
107-
108-
inStream_ = new BZip2InputStream(window_);
109-
110-
reader.Start();
111-
112-
Assert.IsTrue(writer.Join(TimeSpan.FromMinutes(5.0D)));
113-
Assert.IsTrue(reader.Join(TimeSpan.FromMinutes(5.0D)));
114-
115-
DateTime endTime = DateTime.Now;
116-
TimeSpan span = endTime - startTime;
117-
Console.WriteLine("Time {0} throughput {1} KB/Sec", span, (Target / 1024) / span.TotalSeconds);
94+
PerformanceTesting.TestWrite(
95+
size: TestDataSize.Small,
96+
output: w => new BZip2OutputStream(w)
97+
);
11898
}
11999

120-
void Reader()
100+
[Test]
101+
[Category("BZip2")]
102+
[Category("Performance")]
103+
[Explicit("Long-running")]
104+
public void ReadWriteThroughput()
121105
{
122-
const int Size = 8192;
123-
int readBytes = 1;
124-
byte[] buffer = new byte[Size];
125-
126-
long passifierLevel = readTarget_ - 0x10000000;
127-
128-
while ((readTarget_ > 0) && (readBytes > 0)) {
129-
int count = Size;
130-
if (count > readTarget_) {
131-
count = (int)readTarget_;
132-
}
133-
134-
readBytes = inStream_.Read(buffer, 0, count);
135-
readTarget_ -= readBytes;
136-
137-
if (readTarget_ <= passifierLevel) {
138-
Console.WriteLine("Reader {0} bytes remaining", readTarget_);
139-
passifierLevel = readTarget_ - 0x10000000;
140-
}
141-
}
142-
143-
Assert.IsTrue(window_.IsClosed, "Window should be closed");
144-
145-
// This shouldnt read any data but should read the footer
146-
readBytes = inStream_.Read(buffer, 0, 1);
147-
Assert.AreEqual(0, readBytes, "Stream should be empty");
148-
Assert.AreEqual(0, window_.Length, "Window should be closed");
149-
inStream_.Close();
106+
PerformanceTesting.TestReadWrite(
107+
size: TestDataSize.Small,
108+
input: w => new BZip2InputStream(w),
109+
output: w => new BZip2OutputStream(w)
110+
);
150111
}
151112

152-
void WriteTargetBytes()
153-
{
154-
const int Size = 8192;
155-
156-
byte[] buffer = new byte[Size];
157113

158-
while (writeTarget_ > 0) {
159-
int thisTime = Size;
160-
if (thisTime > writeTarget_) {
161-
thisTime = (int)writeTarget_;
162-
}
163-
164-
outStream_.Write(buffer, 0, thisTime);
165-
writeTarget_ -= thisTime;
166-
}
167-
}
168-
169-
void Writer()
170-
{
171-
WriteTargetBytes();
172-
outStream_.Close();
173-
}
174114
}
175115
}

test/ICSharpCode.SharpZipLib.Tests/GZip/GZipTests.cs

Lines changed: 18 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
using ICSharpCode.SharpZipLib.Tests.TestSupport;
55
using NUnit.Framework;
66
using System.Threading;
7+
using System.Diagnostics;
78

89
namespace ICSharpCode.SharpZipLib.Tests.GZip
910
{
@@ -280,90 +281,32 @@ public void TrailingGarbage()
280281

281282
[Test]
282283
[Category("GZip")]
284+
[Category("Performance")]
283285
[Category("Long Running")]
284-
[Ignore("TODO : Fix this")]
285-
public void BigStream()
286+
[Explicit("Long Running")]
287+
public void WriteThroughput()
286288
{
287-
window_ = new WindowedStream(0x3ffff);
288-
outStream_ = new GZipOutputStream(window_);
289-
inStream_ = new GZipInputStream(window_);
289+
PerformanceTesting.TestWrite(
290+
size: TestDataSize.Large,
291+
output: w => new GZipOutputStream(w)
292+
);
290293

291-
long target = 0x10000000;
292-
readTarget_ = writeTarget_ = target;
293-
294-
Thread reader = new Thread(Reader);
295-
reader.Name = "Reader";
296-
reader.Start();
297-
298-
Thread writer = new Thread(Writer);
299-
writer.Name = "Writer";
300-
301-
DateTime startTime = DateTime.Now;
302-
writer.Start();
303-
304-
writer.Join();
305-
reader.Join();
306-
307-
DateTime endTime = DateTime.Now;
308-
309-
TimeSpan span = endTime - startTime;
310-
Console.WriteLine("Time {0} processes {1} KB/Sec", span, (target / 1024) / span.TotalSeconds);
311294
}
312295

313-
void Reader()
296+
[Test]
297+
[Category("GZip")]
298+
[Category("Performance")]
299+
[Explicit("Long Running")]
300+
public void ReadWriteThroughput()
314301
{
315-
const int Size = 8192;
316-
int readBytes = 1;
317-
byte[] buffer = new byte[Size];
318-
319-
long passifierLevel = readTarget_ - 0x10000000;
320-
321-
while ((readTarget_ > 0) && (readBytes > 0)) {
322-
int count = Size;
323-
if (count > readTarget_) {
324-
count = (int)readTarget_;
325-
}
326-
327-
readBytes = inStream_.Read(buffer, 0, count);
328-
readTarget_ -= readBytes;
302+
PerformanceTesting.TestReadWrite(
303+
size: TestDataSize.Large,
304+
input: w => new GZipInputStream(w),
305+
output: w => new GZipOutputStream(w)
306+
);
329307

330-
if (readTarget_ <= passifierLevel) {
331-
Console.WriteLine("Reader {0} bytes remaining", readTarget_);
332-
passifierLevel = readTarget_ - 0x10000000;
333-
}
334-
}
335-
336-
Assert.IsTrue(window_.IsClosed, "Window should be closed");
337-
338-
// This shouldnt read any data but should read the footer
339-
readBytes = inStream_.Read(buffer, 0, 1);
340-
Assert.AreEqual(0, readBytes, "Stream should be empty");
341-
Assert.AreEqual(0, window_.Length, "Window should be closed");
342-
inStream_.Close();
343308
}
344309

345-
void Writer()
346-
{
347-
const int Size = 8192;
348-
349-
byte[] buffer = new byte[Size];
350-
351-
while (writeTarget_ > 0) {
352-
int thisTime = Size;
353-
if (thisTime > writeTarget_) {
354-
thisTime = (int)writeTarget_;
355-
}
356-
357-
outStream_.Write(buffer, 0, thisTime);
358-
writeTarget_ -= thisTime;
359-
}
360-
outStream_.Close();
361-
}
362310

363-
WindowedStream window_;
364-
GZipOutputStream outStream_;
365-
GZipInputStream inStream_;
366-
long readTarget_;
367-
long writeTarget_;
368311
}
369312
}

test/ICSharpCode.SharpZipLib.Tests/Tar/TarTests.cs

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -612,5 +612,65 @@ public void InputStreamOwnership()
612612
Assert.IsFalse(memStream.IsClosed, "Should not be closed after parent owner close");
613613
Assert.IsFalse(memStream.IsDisposed, "Should not be disposed after parent owner close");
614614
}
615+
616+
[Test]
617+
[Category("Tar")]
618+
[Category("Performance")]
619+
[Explicit("Long Running")]
620+
public void WriteThroughput()
621+
{
622+
const string EntryName = "LargeTarEntry";
623+
624+
PerformanceTesting.TestWrite(TestDataSize.Large, bs =>
625+
{
626+
var tos = new TarOutputStream(bs);
627+
tos.PutNextEntry(new TarEntry(new TarHeader()
628+
{
629+
Name = EntryName,
630+
Size = (int)TestDataSize.Large,
631+
}));
632+
return tos;
633+
},
634+
stream =>
635+
{
636+
((TarOutputStream)stream).CloseEntry();
637+
});
638+
}
639+
640+
[Test]
641+
[Category("Tar")]
642+
[Category("Performance")]
643+
[Explicit("Long Running")]
644+
public void SingleLargeEntry()
645+
{
646+
const string EntryName = "LargeTarEntry";
647+
const TestDataSize dataSize = TestDataSize.Large;
648+
649+
PerformanceTesting.TestReadWrite(
650+
size: dataSize,
651+
input: bs =>
652+
{
653+
var tis = new TarInputStream(bs);
654+
var entry = tis.GetNextEntry();
655+
656+
Assert.AreEqual(entry.Name, EntryName);
657+
return tis;
658+
},
659+
output: bs =>
660+
{
661+
var tos = new TarOutputStream(bs);
662+
tos.PutNextEntry(new TarEntry(new TarHeader()
663+
{
664+
Name = EntryName,
665+
Size = (int)dataSize,
666+
}));
667+
return tos;
668+
},
669+
outputClose: stream =>
670+
{
671+
((TarOutputStream)stream).CloseEntry();
672+
}
673+
);
674+
}
615675
}
616676
}

0 commit comments

Comments
 (0)