From b78520e2fe5fda86d820465a2a02f9e2a65fbade Mon Sep 17 00:00:00 2001 From: feyris-tan <4116042+feyris-tan@users.noreply.github.com> Date: Sat, 20 Jun 2026 16:06:14 +0200 Subject: [PATCH] Renamed te skyscraper8.Tests.NUnit project to skyscraper8.Tests --- .../SkyscrapersTestingFramework.cs | 79 ------- .../skyscraper8.Tests.NUnit.csproj.user | 4 - .../GlobalUsings.cs | 0 .../Properties/Resources.Designer.cs | 97 ++------- .../Properties/Resources.resx | 3 + .../Resources/ExampleVoileOnlinePost.json | 20 ++ .../Frame00000008_TSGS1_MIS000_SYNC001.bbf | Bin .../Frame00000012_TSGS1_MIS000_SYNC001.bbf | Bin ...Frame00000357_TSGS1_MIS000_SYNC184.bbframe | Bin .../Frame00001343_TSGS1_MIS000_SYNC001.bbf | Bin .../ModemCapabilitiesEncodingTest.bin | Bin ...shMacManagementMessage_Version4_Type45.bin | Bin ...5_V4_MultipartRegistrationResponseTest.bin | Bin ..._V4_MultipartRegistrationResponseTest2.bin | Bin .../TransmitChannelConfigurationObject.bin | Bin .../UpstreamChannelDescriptorTest.bin | Bin .../Resources/ranging_response_test.bin | Bin .../Resources/sdpTest.sdp | 0 .../Resources/test-1packet-01.ts | 0 .../Resources/test-2packets-02-03.ts | 0 .../Resources/test-3packets-04-05-06.ts | 0 skyscraper8.Tests/SkyscraperTestException.cs | 23 ++ .../SkyscrapersTestingFramework.cs | 201 ++++++++++++++++++ .../TestLog4NetAppender.cs | 2 + .../CoverageTests/DocsisCoverageTests.cs | 0 .../Tests/CoverageTests/Mpeg2CoverageTests.cs | 0 .../SkyscraperIntegrationTests.cs | 0 .../Tests/RecordedSamplesTests.cs | 0 .../ResourceTests/DocsisResourceTests.cs | 0 .../Tests/ResourceTests/GsResourceTests.cs | 0 .../ResourceTests/IetfSdpResourceTests.cs | 0 .../Tests/ResourceTests/Mpeg2ResourceTests.cs | 0 .../ResourceTests/SkyscraperResourceTests.cs | 0 .../Tests/ResourceTests/TestingTests.cs | 21 ++ skyscraper8.Tests/VoileOnlineTestPost.cs | 7 + skyscraper8.Tests/VoileOnlineTestResult.cs | 16 ++ .../VoileOnlineTestSessionMetadata.cs | 10 + skyscraper8.Tests/VoileOnlineUploader.cs | 84 ++++++++ .../skyscraper8.Tests.csproj | 1 + skyscraper8.sln | 2 +- skyscraper8.sln.DotSettings.user | 21 +- .../Scraper/Storage/Tar/TarArchive.cs | 7 +- 42 files changed, 423 insertions(+), 175 deletions(-) delete mode 100644 skyscraper8.Tests.NUnit/SkyscrapersTestingFramework.cs delete mode 100644 skyscraper8.Tests.NUnit/skyscraper8.Tests.NUnit.csproj.user rename {skyscraper8.Tests.NUnit => skyscraper8.Tests}/GlobalUsings.cs (100%) rename {skyscraper8.Tests.NUnit => skyscraper8.Tests}/Properties/Resources.Designer.cs (53%) rename {skyscraper8.Tests.NUnit => skyscraper8.Tests}/Properties/Resources.resx (97%) create mode 100644 skyscraper8.Tests/Resources/ExampleVoileOnlinePost.json rename {skyscraper8.Tests.NUnit => skyscraper8.Tests}/Resources/Frame00000008_TSGS1_MIS000_SYNC001.bbf (100%) rename {skyscraper8.Tests.NUnit => skyscraper8.Tests}/Resources/Frame00000012_TSGS1_MIS000_SYNC001.bbf (100%) rename {skyscraper8.Tests.NUnit => skyscraper8.Tests}/Resources/Frame00000357_TSGS1_MIS000_SYNC184.bbframe (100%) rename {skyscraper8.Tests.NUnit => skyscraper8.Tests}/Resources/Frame00001343_TSGS1_MIS000_SYNC001.bbf (100%) rename {skyscraper8.Tests.NUnit => skyscraper8.Tests}/Resources/ModemCapabilitiesEncodingTest.bin (100%) rename {skyscraper8.Tests.NUnit => skyscraper8.Tests}/Resources/PushMacManagementMessage_Version4_Type45.bin (100%) rename {skyscraper8.Tests.NUnit => skyscraper8.Tests}/Resources/T45_V4_MultipartRegistrationResponseTest.bin (100%) rename {skyscraper8.Tests.NUnit => skyscraper8.Tests}/Resources/T45_V4_MultipartRegistrationResponseTest2.bin (100%) rename {skyscraper8.Tests.NUnit => skyscraper8.Tests}/Resources/TransmitChannelConfigurationObject.bin (100%) rename {skyscraper8.Tests.NUnit => skyscraper8.Tests}/Resources/UpstreamChannelDescriptorTest.bin (100%) rename {skyscraper8.Tests.NUnit => skyscraper8.Tests}/Resources/ranging_response_test.bin (100%) rename {skyscraper8.Tests.NUnit => skyscraper8.Tests}/Resources/sdpTest.sdp (100%) rename {skyscraper8.Tests.NUnit => skyscraper8.Tests}/Resources/test-1packet-01.ts (100%) rename {skyscraper8.Tests.NUnit => skyscraper8.Tests}/Resources/test-2packets-02-03.ts (100%) rename {skyscraper8.Tests.NUnit => skyscraper8.Tests}/Resources/test-3packets-04-05-06.ts (100%) create mode 100644 skyscraper8.Tests/SkyscraperTestException.cs create mode 100644 skyscraper8.Tests/SkyscrapersTestingFramework.cs rename {skyscraper8.Tests.NUnit => skyscraper8.Tests}/TestLog4NetAppender.cs (88%) rename {skyscraper8.Tests.NUnit => skyscraper8.Tests}/Tests/CoverageTests/DocsisCoverageTests.cs (100%) rename {skyscraper8.Tests.NUnit => skyscraper8.Tests}/Tests/CoverageTests/Mpeg2CoverageTests.cs (100%) rename {skyscraper8.Tests.NUnit => skyscraper8.Tests}/Tests/IntegrationTests/SkyscraperIntegrationTests.cs (100%) rename {skyscraper8.Tests.NUnit => skyscraper8.Tests}/Tests/RecordedSamplesTests.cs (100%) rename {skyscraper8.Tests.NUnit => skyscraper8.Tests}/Tests/ResourceTests/DocsisResourceTests.cs (100%) rename {skyscraper8.Tests.NUnit => skyscraper8.Tests}/Tests/ResourceTests/GsResourceTests.cs (100%) rename {skyscraper8.Tests.NUnit => skyscraper8.Tests}/Tests/ResourceTests/IetfSdpResourceTests.cs (100%) rename {skyscraper8.Tests.NUnit => skyscraper8.Tests}/Tests/ResourceTests/Mpeg2ResourceTests.cs (100%) rename {skyscraper8.Tests.NUnit => skyscraper8.Tests}/Tests/ResourceTests/SkyscraperResourceTests.cs (100%) create mode 100644 skyscraper8.Tests/Tests/ResourceTests/TestingTests.cs create mode 100644 skyscraper8.Tests/VoileOnlineTestPost.cs create mode 100644 skyscraper8.Tests/VoileOnlineTestResult.cs create mode 100644 skyscraper8.Tests/VoileOnlineTestSessionMetadata.cs create mode 100644 skyscraper8.Tests/VoileOnlineUploader.cs rename skyscraper8.Tests.NUnit/skyscraper8.Tests.NUnit.csproj => skyscraper8.Tests/skyscraper8.Tests.csproj (95%) diff --git a/skyscraper8.Tests.NUnit/SkyscrapersTestingFramework.cs b/skyscraper8.Tests.NUnit/SkyscrapersTestingFramework.cs deleted file mode 100644 index 182aad7..0000000 --- a/skyscraper8.Tests.NUnit/SkyscrapersTestingFramework.cs +++ /dev/null @@ -1,79 +0,0 @@ -using System.Reflection; -using log4net; - -namespace skyscraper8.Tests.NUnit; - -[NonParallelizable] -public class SkyscrapersTestingFramework -{ - private static readonly ILog logger = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name); - private static Guid? _sessionId; - - [SetUp] - public void Setup() - { - if (_sessionId == null) - { - _sessionId = Guid.NewGuid(); - Console.WriteLine("New session: " + _sessionId); - } - Console.WriteLine("Setup"); - } - - [TearDown] - public void TearDown() - { - Console.WriteLine("TearDown"); - - TestContext currentContext = TestContext.CurrentContext; - } - - public TException AssertTargetInvocation(TestDelegate action) - where TException : Exception - { - TargetInvocationException exeption = Assert.Throws(action); - - Assert.That(exeption.InnerException, Is.TypeOf()); - - return (TException)exeption.InnerException; - } - - private DirectoryInfo _samplesDirectory; - private DirectoryInfo GetSamplesDirectory() - { - if (_samplesDirectory == null) - { - FileInfo fi = new FileInfo("sample_path.txt"); - if (!fi.Exists) - { - logger.WarnFormat("Could not find {0}", fi.FullName); - } - else - { - logger.InfoFormat("Reading samples path from: {0}", fi.FullName); - string readAllText = File.ReadAllText(fi.FullName).Trim(); - _samplesDirectory = new DirectoryInfo(readAllText); - } - - - } - - if (_samplesDirectory == null) - { - Assert.Inconclusive("Could not find samples directory"); - } - - return _samplesDirectory; - } - - protected FileStream GetStreamSample(string filename) - { - DirectoryInfo samplesDirectory = GetSamplesDirectory(); - FileInfo file = new FileInfo(Path.Combine(samplesDirectory.FullName, filename)); - if (!file.Exists) - { - Assert.Inconclusive(String.Format("Could not find sample file: {0}", file.FullName)); - } - return file.OpenRead(); - } -} diff --git a/skyscraper8.Tests.NUnit/skyscraper8.Tests.NUnit.csproj.user b/skyscraper8.Tests.NUnit/skyscraper8.Tests.NUnit.csproj.user deleted file mode 100644 index 88a5509..0000000 --- a/skyscraper8.Tests.NUnit/skyscraper8.Tests.NUnit.csproj.user +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/skyscraper8.Tests.NUnit/GlobalUsings.cs b/skyscraper8.Tests/GlobalUsings.cs similarity index 100% rename from skyscraper8.Tests.NUnit/GlobalUsings.cs rename to skyscraper8.Tests/GlobalUsings.cs diff --git a/skyscraper8.Tests.NUnit/Properties/Resources.Designer.cs b/skyscraper8.Tests/Properties/Resources.Designer.cs similarity index 53% rename from skyscraper8.Tests.NUnit/Properties/Resources.Designer.cs rename to skyscraper8.Tests/Properties/Resources.Designer.cs index ee3869e..fdece84 100644 --- a/skyscraper8.Tests.NUnit/Properties/Resources.Designer.cs +++ b/skyscraper8.Tests/Properties/Resources.Designer.cs @@ -1,10 +1,9 @@ //------------------------------------------------------------------------------ // -// Dieser Code wurde von einem Tool generiert. -// Laufzeitversion:4.0.30319.42000 +// This code was generated by a tool. // -// Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn -// der Code erneut generiert wird. +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. // //------------------------------------------------------------------------------ @@ -12,46 +11,32 @@ namespace skyscraper8.Tests.NUnit.Properties { using System; - /// - /// Eine stark typisierte Ressourcenklasse zum Suchen von lokalisierten Zeichenfolgen usw. - /// - // Diese Klasse wurde von der StronglyTypedResourceBuilder automatisch generiert - // -Klasse über ein Tool wie ResGen oder Visual Studio automatisch generiert. - // Um einen Member hinzuzufügen oder zu entfernen, bearbeiten Sie die .ResX-Datei und führen dann ResGen - // mit der /str-Option erneut aus, oder Sie erstellen Ihr VS-Projekt neu. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")] + [System.Diagnostics.DebuggerNonUserCodeAttribute()] + [System.Runtime.CompilerServices.CompilerGeneratedAttribute()] internal class Resources { - private static global::System.Resources.ResourceManager resourceMan; + private static System.Resources.ResourceManager resourceMan; - private static global::System.Globalization.CultureInfo resourceCulture; + private static System.Globalization.CultureInfo resourceCulture; - [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] internal Resources() { } - /// - /// Gibt die zwischengespeicherte ResourceManager-Instanz zurück, die von dieser Klasse verwendet wird. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Resources.ResourceManager ResourceManager { + [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] + internal static System.Resources.ResourceManager ResourceManager { get { - if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("skyscraper8.Tests.NUnit.Properties.Resources", typeof(Resources).Assembly); + if (object.Equals(null, resourceMan)) { + System.Resources.ResourceManager temp = new System.Resources.ResourceManager("skyscraper8.Tests.NUnit.Properties.Resources", typeof(Resources).Assembly); resourceMan = temp; } return resourceMan; } } - /// - /// Überschreibt die CurrentUICulture-Eigenschaft des aktuellen Threads für alle - /// Ressourcenzuordnungen, die diese stark typisierte Ressourcenklasse verwenden. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Globalization.CultureInfo Culture { + [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] + internal static System.Globalization.CultureInfo Culture { get { return resourceCulture; } @@ -60,9 +45,6 @@ namespace skyscraper8.Tests.NUnit.Properties { } } - /// - /// Sucht eine lokalisierte Ressource vom Typ System.Byte[]. - /// internal static byte[] Frame00000008_TSGS1_MIS000_SYNC001 { get { object obj = ResourceManager.GetObject("Frame00000008_TSGS1_MIS000_SYNC001", resourceCulture); @@ -70,9 +52,6 @@ namespace skyscraper8.Tests.NUnit.Properties { } } - /// - /// Sucht eine lokalisierte Ressource vom Typ System.Byte[]. - /// internal static byte[] Frame00000012_TSGS1_MIS000_SYNC001 { get { object obj = ResourceManager.GetObject("Frame00000012_TSGS1_MIS000_SYNC001", resourceCulture); @@ -80,9 +59,6 @@ namespace skyscraper8.Tests.NUnit.Properties { } } - /// - /// Sucht eine lokalisierte Ressource vom Typ System.Byte[]. - /// internal static byte[] Frame00000357_TSGS1_MIS000_SYNC184 { get { object obj = ResourceManager.GetObject("Frame00000357_TSGS1_MIS000_SYNC184", resourceCulture); @@ -90,9 +66,6 @@ namespace skyscraper8.Tests.NUnit.Properties { } } - /// - /// Sucht eine lokalisierte Ressource vom Typ System.Byte[]. - /// internal static byte[] Frame00001343_TSGS1_MIS000_SYNC001 { get { object obj = ResourceManager.GetObject("Frame00001343_TSGS1_MIS000_SYNC001", resourceCulture); @@ -100,9 +73,6 @@ namespace skyscraper8.Tests.NUnit.Properties { } } - /// - /// Sucht eine lokalisierte Ressource vom Typ System.Byte[]. - /// internal static byte[] ModemCapabilitiesEncodingTest { get { object obj = ResourceManager.GetObject("ModemCapabilitiesEncodingTest", resourceCulture); @@ -110,9 +80,6 @@ namespace skyscraper8.Tests.NUnit.Properties { } } - /// - /// Sucht eine lokalisierte Ressource vom Typ System.Byte[]. - /// internal static byte[] PushMacManagementMessage_Version4_Type45 { get { object obj = ResourceManager.GetObject("PushMacManagementMessage_Version4_Type45", resourceCulture); @@ -120,9 +87,6 @@ namespace skyscraper8.Tests.NUnit.Properties { } } - /// - /// Sucht eine lokalisierte Ressource vom Typ System.Byte[]. - /// internal static byte[] ranging_response_test { get { object obj = ResourceManager.GetObject("ranging_response_test", resourceCulture); @@ -130,9 +94,6 @@ namespace skyscraper8.Tests.NUnit.Properties { } } - /// - /// Sucht eine lokalisierte Ressource vom Typ System.Byte[]. - /// internal static byte[] sdpTest { get { object obj = ResourceManager.GetObject("sdpTest", resourceCulture); @@ -140,9 +101,6 @@ namespace skyscraper8.Tests.NUnit.Properties { } } - /// - /// Sucht eine lokalisierte Ressource vom Typ System.Byte[]. - /// internal static byte[] T45_V4_MultipartRegistrationResponseTest { get { object obj = ResourceManager.GetObject("T45_V4_MultipartRegistrationResponseTest", resourceCulture); @@ -150,9 +108,6 @@ namespace skyscraper8.Tests.NUnit.Properties { } } - /// - /// Sucht eine lokalisierte Ressource vom Typ System.Byte[]. - /// internal static byte[] T45_V4_MultipartRegistrationResponseTest2 { get { object obj = ResourceManager.GetObject("T45_V4_MultipartRegistrationResponseTest2", resourceCulture); @@ -160,9 +115,6 @@ namespace skyscraper8.Tests.NUnit.Properties { } } - /// - /// Sucht eine lokalisierte Ressource vom Typ System.Byte[]. - /// internal static byte[] test_1packet_01 { get { object obj = ResourceManager.GetObject("test-1packet-01", resourceCulture); @@ -170,9 +122,6 @@ namespace skyscraper8.Tests.NUnit.Properties { } } - /// - /// Sucht eine lokalisierte Ressource vom Typ System.Byte[]. - /// internal static byte[] test_2packets_02_03 { get { object obj = ResourceManager.GetObject("test-2packets-02-03", resourceCulture); @@ -180,9 +129,6 @@ namespace skyscraper8.Tests.NUnit.Properties { } } - /// - /// Sucht eine lokalisierte Ressource vom Typ System.Byte[]. - /// internal static byte[] test_3packets_04_05_06 { get { object obj = ResourceManager.GetObject("test-3packets-04-05-06", resourceCulture); @@ -190,9 +136,6 @@ namespace skyscraper8.Tests.NUnit.Properties { } } - /// - /// Sucht eine lokalisierte Ressource vom Typ System.Byte[]. - /// internal static byte[] TransmitChannelConfigurationObject { get { object obj = ResourceManager.GetObject("TransmitChannelConfigurationObject", resourceCulture); @@ -200,14 +143,18 @@ namespace skyscraper8.Tests.NUnit.Properties { } } - /// - /// Sucht eine lokalisierte Ressource vom Typ System.Byte[]. - /// internal static byte[] UpstreamChannelDescriptorTest { get { object obj = ResourceManager.GetObject("UpstreamChannelDescriptorTest", resourceCulture); return ((byte[])(obj)); } } + + internal static byte[] ExampleVoileOnlinePost { + get { + object obj = ResourceManager.GetObject("ExampleVoileOnlinePost", resourceCulture); + return ((byte[])(obj)); + } + } } } diff --git a/skyscraper8.Tests.NUnit/Properties/Resources.resx b/skyscraper8.Tests/Properties/Resources.resx similarity index 97% rename from skyscraper8.Tests.NUnit/Properties/Resources.resx rename to skyscraper8.Tests/Properties/Resources.resx index 3798142..a5af008 100644 --- a/skyscraper8.Tests.NUnit/Properties/Resources.resx +++ b/skyscraper8.Tests/Properties/Resources.resx @@ -163,4 +163,7 @@ ..\Resources\UpstreamChannelDescriptorTest.bin;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + ..\Resources\ExampleVoileOnlinePost.json;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + \ No newline at end of file diff --git a/skyscraper8.Tests/Resources/ExampleVoileOnlinePost.json b/skyscraper8.Tests/Resources/ExampleVoileOnlinePost.json new file mode 100644 index 0000000..88dc18c --- /dev/null +++ b/skyscraper8.Tests/Resources/ExampleVoileOnlinePost.json @@ -0,0 +1,20 @@ +{ + "SessionMetadata" : { + "OS" : "Unix 6.8.0.124", + "Guid" : "ad50ca18-0401-4f73-b2bc-60a3cf9437fb", + "MachineName" : "meiko", + "StartTime" : "2026-06-20T16:03:27.5038363+02:00", + "ProductName" : "skyscraper8.Tests" + }, + "TestResult" : { + "ClassName" : "skyscraper8.Tests.NUnit.Tests.CoverageTests.DocsisCoverageTests", + "MethodName" : "BurstDescriptorTests", + "TimeTaken" : 116, + "LogOutput" : "", + "AssertionCount" : 28, + "TestId" : 1051, + "OutcomeLabel" : "", + "OutcomeSite" : 0, + "OutcomeStatus" : 2 + } +} diff --git a/skyscraper8.Tests.NUnit/Resources/Frame00000008_TSGS1_MIS000_SYNC001.bbf b/skyscraper8.Tests/Resources/Frame00000008_TSGS1_MIS000_SYNC001.bbf similarity index 100% rename from skyscraper8.Tests.NUnit/Resources/Frame00000008_TSGS1_MIS000_SYNC001.bbf rename to skyscraper8.Tests/Resources/Frame00000008_TSGS1_MIS000_SYNC001.bbf diff --git a/skyscraper8.Tests.NUnit/Resources/Frame00000012_TSGS1_MIS000_SYNC001.bbf b/skyscraper8.Tests/Resources/Frame00000012_TSGS1_MIS000_SYNC001.bbf similarity index 100% rename from skyscraper8.Tests.NUnit/Resources/Frame00000012_TSGS1_MIS000_SYNC001.bbf rename to skyscraper8.Tests/Resources/Frame00000012_TSGS1_MIS000_SYNC001.bbf diff --git a/skyscraper8.Tests.NUnit/Resources/Frame00000357_TSGS1_MIS000_SYNC184.bbframe b/skyscraper8.Tests/Resources/Frame00000357_TSGS1_MIS000_SYNC184.bbframe similarity index 100% rename from skyscraper8.Tests.NUnit/Resources/Frame00000357_TSGS1_MIS000_SYNC184.bbframe rename to skyscraper8.Tests/Resources/Frame00000357_TSGS1_MIS000_SYNC184.bbframe diff --git a/skyscraper8.Tests.NUnit/Resources/Frame00001343_TSGS1_MIS000_SYNC001.bbf b/skyscraper8.Tests/Resources/Frame00001343_TSGS1_MIS000_SYNC001.bbf similarity index 100% rename from skyscraper8.Tests.NUnit/Resources/Frame00001343_TSGS1_MIS000_SYNC001.bbf rename to skyscraper8.Tests/Resources/Frame00001343_TSGS1_MIS000_SYNC001.bbf diff --git a/skyscraper8.Tests.NUnit/Resources/ModemCapabilitiesEncodingTest.bin b/skyscraper8.Tests/Resources/ModemCapabilitiesEncodingTest.bin similarity index 100% rename from skyscraper8.Tests.NUnit/Resources/ModemCapabilitiesEncodingTest.bin rename to skyscraper8.Tests/Resources/ModemCapabilitiesEncodingTest.bin diff --git a/skyscraper8.Tests.NUnit/Resources/PushMacManagementMessage_Version4_Type45.bin b/skyscraper8.Tests/Resources/PushMacManagementMessage_Version4_Type45.bin similarity index 100% rename from skyscraper8.Tests.NUnit/Resources/PushMacManagementMessage_Version4_Type45.bin rename to skyscraper8.Tests/Resources/PushMacManagementMessage_Version4_Type45.bin diff --git a/skyscraper8.Tests.NUnit/Resources/T45_V4_MultipartRegistrationResponseTest.bin b/skyscraper8.Tests/Resources/T45_V4_MultipartRegistrationResponseTest.bin similarity index 100% rename from skyscraper8.Tests.NUnit/Resources/T45_V4_MultipartRegistrationResponseTest.bin rename to skyscraper8.Tests/Resources/T45_V4_MultipartRegistrationResponseTest.bin diff --git a/skyscraper8.Tests.NUnit/Resources/T45_V4_MultipartRegistrationResponseTest2.bin b/skyscraper8.Tests/Resources/T45_V4_MultipartRegistrationResponseTest2.bin similarity index 100% rename from skyscraper8.Tests.NUnit/Resources/T45_V4_MultipartRegistrationResponseTest2.bin rename to skyscraper8.Tests/Resources/T45_V4_MultipartRegistrationResponseTest2.bin diff --git a/skyscraper8.Tests.NUnit/Resources/TransmitChannelConfigurationObject.bin b/skyscraper8.Tests/Resources/TransmitChannelConfigurationObject.bin similarity index 100% rename from skyscraper8.Tests.NUnit/Resources/TransmitChannelConfigurationObject.bin rename to skyscraper8.Tests/Resources/TransmitChannelConfigurationObject.bin diff --git a/skyscraper8.Tests.NUnit/Resources/UpstreamChannelDescriptorTest.bin b/skyscraper8.Tests/Resources/UpstreamChannelDescriptorTest.bin similarity index 100% rename from skyscraper8.Tests.NUnit/Resources/UpstreamChannelDescriptorTest.bin rename to skyscraper8.Tests/Resources/UpstreamChannelDescriptorTest.bin diff --git a/skyscraper8.Tests.NUnit/Resources/ranging_response_test.bin b/skyscraper8.Tests/Resources/ranging_response_test.bin similarity index 100% rename from skyscraper8.Tests.NUnit/Resources/ranging_response_test.bin rename to skyscraper8.Tests/Resources/ranging_response_test.bin diff --git a/skyscraper8.Tests.NUnit/Resources/sdpTest.sdp b/skyscraper8.Tests/Resources/sdpTest.sdp similarity index 100% rename from skyscraper8.Tests.NUnit/Resources/sdpTest.sdp rename to skyscraper8.Tests/Resources/sdpTest.sdp diff --git a/skyscraper8.Tests.NUnit/Resources/test-1packet-01.ts b/skyscraper8.Tests/Resources/test-1packet-01.ts similarity index 100% rename from skyscraper8.Tests.NUnit/Resources/test-1packet-01.ts rename to skyscraper8.Tests/Resources/test-1packet-01.ts diff --git a/skyscraper8.Tests.NUnit/Resources/test-2packets-02-03.ts b/skyscraper8.Tests/Resources/test-2packets-02-03.ts similarity index 100% rename from skyscraper8.Tests.NUnit/Resources/test-2packets-02-03.ts rename to skyscraper8.Tests/Resources/test-2packets-02-03.ts diff --git a/skyscraper8.Tests.NUnit/Resources/test-3packets-04-05-06.ts b/skyscraper8.Tests/Resources/test-3packets-04-05-06.ts similarity index 100% rename from skyscraper8.Tests.NUnit/Resources/test-3packets-04-05-06.ts rename to skyscraper8.Tests/Resources/test-3packets-04-05-06.ts diff --git a/skyscraper8.Tests/SkyscraperTestException.cs b/skyscraper8.Tests/SkyscraperTestException.cs new file mode 100644 index 0000000..1663d9e --- /dev/null +++ b/skyscraper8.Tests/SkyscraperTestException.cs @@ -0,0 +1,23 @@ +using System.Runtime.Serialization; +using skyscraper5; + +namespace skyscraper8.Tests.NUnit; + +public class SkyscraperTestException : SkyscraperException +{ + public SkyscraperTestException() + { + } + + public SkyscraperTestException(string message) : base(message) + { + } + + public SkyscraperTestException(string message, Exception inner) : base(message, inner) + { + } + + protected SkyscraperTestException(SerializationInfo info, StreamingContext context) : base(info, context) + { + } +} diff --git a/skyscraper8.Tests/SkyscrapersTestingFramework.cs b/skyscraper8.Tests/SkyscrapersTestingFramework.cs new file mode 100644 index 0000000..d74d103 --- /dev/null +++ b/skyscraper8.Tests/SkyscrapersTestingFramework.cs @@ -0,0 +1,201 @@ +using System.Reflection; +using log4net; +using log4net.Repository.Hierarchy; +using Newtonsoft.Json; + +namespace skyscraper8.Tests.NUnit; + +[NonParallelizable] +public class SkyscrapersTestingFramework +{ + private static readonly ILog logger = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name); + private Dictionary _testTimes; + + private VoileOnlineTestSessionMetadata _voileOnlineTestSessionMetadata; + + private VoileOnlineTestSessionMetadata GetVoileOnlineTestSessionMetadata() + { + if (_voileOnlineTestSessionMetadata == null) + { + _voileOnlineTestSessionMetadata = new VoileOnlineTestSessionMetadata(); + _voileOnlineTestSessionMetadata.Guid = Guid.NewGuid(); + _voileOnlineTestSessionMetadata.MachineName = Environment.MachineName; + _voileOnlineTestSessionMetadata.StartTime = DateTime.Now; + _voileOnlineTestSessionMetadata.OS = Environment.OSVersion.ToString(); + _voileOnlineTestSessionMetadata.ProductName = Assembly.GetExecutingAssembly().GetName().Name; + } + return _voileOnlineTestSessionMetadata; + } + + private HashSet testIds; + private long ResolveTestId() + { + string testId = TestContext.CurrentContext.Test.ID; + if (testIds == null) + testIds = new HashSet(); + + long decodedTestId = 0; + for (int i = 0; i < testId.Length; i++) + { + char current = testId[i]; + if (!char.IsDigit(current)) + continue; + int currentDigit = current - '0'; + if (i != 0) + decodedTestId *= 10; + decodedTestId += currentDigit; + } + if (testIds.Contains(decodedTestId)) + throw new SkyscraperTestException("Test ID already used"); + testIds.Add(decodedTestId); + return decodedTestId; + } + private long GetTestDuration() + { + if (_testTimes == null) + return -1; + + string key = TestContext.CurrentContext.Test.FullName; + if (!_testTimes.ContainsKey(key)) + return -2; + + return DateTime.Now.Subtract(_testTimes[key]).Milliseconds; + } + + private DirectoryInfo _samplesDirectory; + private DirectoryInfo GetSamplesDirectory() + { + if (_samplesDirectory == null) + { + FileInfo fi = new FileInfo("sample_path.txt"); + if (!fi.Exists) + { + logger.WarnFormat("Could not find {0}", fi.FullName); + } + else + { + logger.InfoFormat("Reading samples path from: {0}", fi.FullName); + string readAllText = File.ReadAllText(fi.FullName).Trim(); + _samplesDirectory = new DirectoryInfo(readAllText); + } + + + } + + if (_samplesDirectory == null) + { + Assert.Inconclusive("Could not find samples directory"); + } + + return _samplesDirectory; + } + + protected FileStream GetStreamSample(string filename) + { + DirectoryInfo samplesDirectory = GetSamplesDirectory(); + FileInfo file = new FileInfo(Path.Combine(samplesDirectory.FullName, filename)); + if (!file.Exists) + { + Assert.Inconclusive(String.Format("Could not find sample file: {0}", file.FullName)); + } + return file.OpenRead(); + } + + [SetUp] + public void Setup() + { + Console.WriteLine("Setup"); + if (_testTimes == null) + _testTimes = new Dictionary(); + + SetUpLogCapture(); + + string key = TestContext.CurrentContext.Test.FullName; + DateTime value = DateTime.Now; + _testTimes[key] = value; + } + + [TearDown] + public void TearDown() + { + Console.WriteLine("TearDown"); + + TestContext currentContext = TestContext.CurrentContext; + + VoileOnlineTestResult voileOnlineTestResult = new VoileOnlineTestResult(); + voileOnlineTestResult.ClassName = currentContext.Test.ClassName; + voileOnlineTestResult.MethodName = currentContext.Test.MethodName; + voileOnlineTestResult.OutcomeLabel = currentContext.Result.Outcome.Label; + voileOnlineTestResult.OutcomeSite = (int)currentContext.Result.Outcome.Site; + voileOnlineTestResult.OutcomeStatus = (int)currentContext.Result.Outcome.Status; + voileOnlineTestResult.TimeTaken = GetTestDuration(); + voileOnlineTestResult.LogOutput = TearDownLogCapture(); + voileOnlineTestResult.AssertionCount = currentContext.AssertCount; + voileOnlineTestResult.TestId = ResolveTestId(); + + + + + VoileOnlineTestPost voileOnlinePost = new VoileOnlineTestPost(); + voileOnlinePost.SessionMetadata = GetVoileOnlineTestSessionMetadata(); + voileOnlinePost.TestResult = voileOnlineTestResult; + VoileOnlineUploader.Upload(voileOnlinePost); + } + + public TException AssertTargetInvocation(TestDelegate action) + where TException : Exception + { + TargetInvocationException exeption = Assert.Throws(action); + + Assert.That(exeption.InnerException, Is.TypeOf()); + + return (TException)exeption.InnerException; + } + + private TestLog4NetAppender? _testLogAppender; + + protected TestLog4NetAppender TestLogAppender => + _testLogAppender ?? throw new InvalidOperationException("Test log appender is not initialized."); + + private void SetUpLogCapture() + { + Hierarchy hierarchy = (Hierarchy)LogManager.GetRepository(); + + _testLogAppender = new TestLog4NetAppender + { + Name = $"TestLogAppender-{TestContext.CurrentContext.Test.ID}" + }; + + _testLogAppender.ActivateOptions(); + + hierarchy.Root.AddAppender(_testLogAppender); + + if (hierarchy.Root.Level == null) + { + hierarchy.Root.Level = log4net.Core.Level.Debug; + } + + hierarchy.Configured = true; + } + + private string TearDownLogCapture() + { + string logText = _testLogAppender?.GetText() ?? string.Empty; + + if (!string.IsNullOrWhiteSpace(logText)) + { + TestContext.WriteLine("Captured log4net output:"); + TestContext.WriteLine(logText); + } + + if (_testLogAppender is not null) + { + Hierarchy hierarchy = (Hierarchy)LogManager.GetRepository(); + hierarchy.Root.RemoveAppender(_testLogAppender); + _testLogAppender.Close(); + _testLogAppender = null; + } + + return logText; + } +} diff --git a/skyscraper8.Tests.NUnit/TestLog4NetAppender.cs b/skyscraper8.Tests/TestLog4NetAppender.cs similarity index 88% rename from skyscraper8.Tests.NUnit/TestLog4NetAppender.cs rename to skyscraper8.Tests/TestLog4NetAppender.cs index 0b56e5f..5e81a49 100644 --- a/skyscraper8.Tests.NUnit/TestLog4NetAppender.cs +++ b/skyscraper8.Tests/TestLog4NetAppender.cs @@ -11,6 +11,8 @@ public class TestLog4NetAppender : AppenderSkeleton { get { + if (_events == null) + return new List(); return _events.AsReadOnly(); } } diff --git a/skyscraper8.Tests.NUnit/Tests/CoverageTests/DocsisCoverageTests.cs b/skyscraper8.Tests/Tests/CoverageTests/DocsisCoverageTests.cs similarity index 100% rename from skyscraper8.Tests.NUnit/Tests/CoverageTests/DocsisCoverageTests.cs rename to skyscraper8.Tests/Tests/CoverageTests/DocsisCoverageTests.cs diff --git a/skyscraper8.Tests.NUnit/Tests/CoverageTests/Mpeg2CoverageTests.cs b/skyscraper8.Tests/Tests/CoverageTests/Mpeg2CoverageTests.cs similarity index 100% rename from skyscraper8.Tests.NUnit/Tests/CoverageTests/Mpeg2CoverageTests.cs rename to skyscraper8.Tests/Tests/CoverageTests/Mpeg2CoverageTests.cs diff --git a/skyscraper8.Tests.NUnit/Tests/IntegrationTests/SkyscraperIntegrationTests.cs b/skyscraper8.Tests/Tests/IntegrationTests/SkyscraperIntegrationTests.cs similarity index 100% rename from skyscraper8.Tests.NUnit/Tests/IntegrationTests/SkyscraperIntegrationTests.cs rename to skyscraper8.Tests/Tests/IntegrationTests/SkyscraperIntegrationTests.cs diff --git a/skyscraper8.Tests.NUnit/Tests/RecordedSamplesTests.cs b/skyscraper8.Tests/Tests/RecordedSamplesTests.cs similarity index 100% rename from skyscraper8.Tests.NUnit/Tests/RecordedSamplesTests.cs rename to skyscraper8.Tests/Tests/RecordedSamplesTests.cs diff --git a/skyscraper8.Tests.NUnit/Tests/ResourceTests/DocsisResourceTests.cs b/skyscraper8.Tests/Tests/ResourceTests/DocsisResourceTests.cs similarity index 100% rename from skyscraper8.Tests.NUnit/Tests/ResourceTests/DocsisResourceTests.cs rename to skyscraper8.Tests/Tests/ResourceTests/DocsisResourceTests.cs diff --git a/skyscraper8.Tests.NUnit/Tests/ResourceTests/GsResourceTests.cs b/skyscraper8.Tests/Tests/ResourceTests/GsResourceTests.cs similarity index 100% rename from skyscraper8.Tests.NUnit/Tests/ResourceTests/GsResourceTests.cs rename to skyscraper8.Tests/Tests/ResourceTests/GsResourceTests.cs diff --git a/skyscraper8.Tests.NUnit/Tests/ResourceTests/IetfSdpResourceTests.cs b/skyscraper8.Tests/Tests/ResourceTests/IetfSdpResourceTests.cs similarity index 100% rename from skyscraper8.Tests.NUnit/Tests/ResourceTests/IetfSdpResourceTests.cs rename to skyscraper8.Tests/Tests/ResourceTests/IetfSdpResourceTests.cs diff --git a/skyscraper8.Tests.NUnit/Tests/ResourceTests/Mpeg2ResourceTests.cs b/skyscraper8.Tests/Tests/ResourceTests/Mpeg2ResourceTests.cs similarity index 100% rename from skyscraper8.Tests.NUnit/Tests/ResourceTests/Mpeg2ResourceTests.cs rename to skyscraper8.Tests/Tests/ResourceTests/Mpeg2ResourceTests.cs diff --git a/skyscraper8.Tests.NUnit/Tests/ResourceTests/SkyscraperResourceTests.cs b/skyscraper8.Tests/Tests/ResourceTests/SkyscraperResourceTests.cs similarity index 100% rename from skyscraper8.Tests.NUnit/Tests/ResourceTests/SkyscraperResourceTests.cs rename to skyscraper8.Tests/Tests/ResourceTests/SkyscraperResourceTests.cs diff --git a/skyscraper8.Tests/Tests/ResourceTests/TestingTests.cs b/skyscraper8.Tests/Tests/ResourceTests/TestingTests.cs new file mode 100644 index 0000000..bcda431 --- /dev/null +++ b/skyscraper8.Tests/Tests/ResourceTests/TestingTests.cs @@ -0,0 +1,21 @@ +using System.Text; +using Newtonsoft.Json; + +namespace skyscraper8.Tests.NUnit.Tests.ResourceTests; + +[TestFixture] +public class TestingTests +{ + [Test] + public void ReadVoileOnlineTest() + { + byte[] buffer = Properties.Resources.ExampleVoileOnlinePost; + VoileOnlineTestPost? voileOnlineTestPost = JsonConvert.DeserializeObject(Encoding.UTF8.GetString(buffer)); + Assert.IsNotNull(voileOnlineTestPost); + Assert.IsNotNull(voileOnlineTestPost.SessionMetadata); + Assert.IsNotNull(voileOnlineTestPost.TestResult); + Assert.AreEqual(2, voileOnlineTestPost.TestResult.OutcomeStatus); + Assert.AreEqual("meiko",voileOnlineTestPost.SessionMetadata.MachineName); + + } +} diff --git a/skyscraper8.Tests/VoileOnlineTestPost.cs b/skyscraper8.Tests/VoileOnlineTestPost.cs new file mode 100644 index 0000000..93ba62b --- /dev/null +++ b/skyscraper8.Tests/VoileOnlineTestPost.cs @@ -0,0 +1,7 @@ +namespace skyscraper8.Tests.NUnit; + +public class VoileOnlineTestPost +{ + public VoileOnlineTestSessionMetadata SessionMetadata { get; set; } + public VoileOnlineTestResult TestResult { get; set; } +} diff --git a/skyscraper8.Tests/VoileOnlineTestResult.cs b/skyscraper8.Tests/VoileOnlineTestResult.cs new file mode 100644 index 0000000..6026574 --- /dev/null +++ b/skyscraper8.Tests/VoileOnlineTestResult.cs @@ -0,0 +1,16 @@ +using NUnit.Framework.Interfaces; + +namespace skyscraper8.Tests.NUnit; + +public class VoileOnlineTestResult +{ + public string? ClassName { get; set; } + public string? MethodName { get; set; } + public long TimeTaken { get; set; } + public string LogOutput { get; set; } + public int AssertionCount { get; set; } + public long TestId { get; set; } + public string OutcomeLabel { get; set; } + public int OutcomeSite { get; set; } + public int OutcomeStatus { get; set; } +} diff --git a/skyscraper8.Tests/VoileOnlineTestSessionMetadata.cs b/skyscraper8.Tests/VoileOnlineTestSessionMetadata.cs new file mode 100644 index 0000000..1da4a0b --- /dev/null +++ b/skyscraper8.Tests/VoileOnlineTestSessionMetadata.cs @@ -0,0 +1,10 @@ +namespace skyscraper8.Tests.NUnit; + +public class VoileOnlineTestSessionMetadata +{ + public string OS { get; set; } + public Guid Guid { get; set; } + public string MachineName { get; set; } + public DateTime StartTime { get; set; } + public string? ProductName { get; set; } +} diff --git a/skyscraper8.Tests/VoileOnlineUploader.cs b/skyscraper8.Tests/VoileOnlineUploader.cs new file mode 100644 index 0000000..02e1931 --- /dev/null +++ b/skyscraper8.Tests/VoileOnlineUploader.cs @@ -0,0 +1,84 @@ +using Newtonsoft.Json; + +namespace skyscraper8.Tests.NUnit; + +public sealed class VoileOnlineUploader +{ + public static void Upload(VoileOnlineTestPost voileOnlinePost) + { + if (_instance == null) + { + _instance = new VoileOnlineUploader(); + } + + _instance.PushResult(voileOnlinePost); + } + + private static VoileOnlineUploader _instance; + private Thread _uploaderThread; + private Queue _queue; + + private void PushResult(VoileOnlineTestPost voileOnlinePost) + { + if (_queue == null) + _queue = new Queue(); + + lock (_queue) + { + _queue.Enqueue(voileOnlinePost); + } + + if (_uploaderThread == null) + { + _uploaderThread = new Thread(PusherThread); + _uploaderThread.Priority = ThreadPriority.Lowest; + _uploaderThread.Name = "VoileOnlineUploader"; + } + + switch (_uploaderThread.ThreadState) + { + case ThreadState.Unstarted: + _uploaderThread.Start(); + break; + case ThreadState.Running: + break; + case ThreadState.Stopped: + _uploaderThread = new Thread(PusherThread); + _uploaderThread.Priority = ThreadPriority.Lowest; + _uploaderThread.Name = "VoileOnlineUploader"; + _uploaderThread.Start(); + break; + default: + throw new NotImplementedException(String.Format("ThreadState: {0}", _uploaderThread.ThreadState)); + } + } + + private void PusherThread() + { + int numElements = 0; + lock (_queue) + { + numElements = _queue.Count; + } + while (numElements > 0) + { + VoileOnlineTestPost voileOnlinePost; + lock (_queue) + { + voileOnlinePost = _queue.Dequeue(); + } + + string json = JsonConvert.SerializeObject(voileOnlinePost); + DoPost(json); + + lock (_queue) + { + numElements = _queue.Count; + } + } + } + + private void DoPost(string json) + { + } +} diff --git a/skyscraper8.Tests.NUnit/skyscraper8.Tests.NUnit.csproj b/skyscraper8.Tests/skyscraper8.Tests.csproj similarity index 95% rename from skyscraper8.Tests.NUnit/skyscraper8.Tests.NUnit.csproj rename to skyscraper8.Tests/skyscraper8.Tests.csproj index 0958a3a..55b75f6 100644 --- a/skyscraper8.Tests.NUnit/skyscraper8.Tests.NUnit.csproj +++ b/skyscraper8.Tests/skyscraper8.Tests.csproj @@ -7,6 +7,7 @@ false true + skyscraper8.Tests.NUnit diff --git a/skyscraper8.sln b/skyscraper8.sln index 660d655..4b5b6af 100644 --- a/skyscraper8.sln +++ b/skyscraper8.sln @@ -65,7 +65,7 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "skyscraper8.UI.MonoGame", " EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "skyscraper8.UI.MonoGame.Bridge", "GUIs\skyscraper8.UI.ImGui.MonoGame.Bridge\skyscraper8.UI.MonoGame.Bridge.csproj", "{1A29F6E6-4B6A-DCCD-1DF1-AA8D020E17D2}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "skyscraper8.Tests.NUnit", "skyscraper8.Tests.NUnit\skyscraper8.Tests.NUnit.csproj", "{5FB2AA76-580E-4343-B155-5D596DDC27F2}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "skyscraper8.Tests", "skyscraper8.Tests\skyscraper8.Tests.csproj", "{5FB2AA76-580E-4343-B155-5D596DDC27F2}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution diff --git a/skyscraper8.sln.DotSettings.user b/skyscraper8.sln.DotSettings.user index 53ea3b3..c9938f9 100644 --- a/skyscraper8.sln.DotSettings.user +++ b/skyscraper8.sln.DotSettings.user @@ -6,6 +6,7 @@ ForceIncluded ForceIncluded ForceIncluded + ForceIncluded ForceIncluded ForceIncluded ForceIncluded @@ -15,10 +16,13 @@ ForceIncluded ForceIncluded ForceIncluded + ForceIncluded ForceIncluded + ForceIncluded ForceIncluded ForceIncluded ForceIncluded + ForceIncluded ForceIncluded ForceIncluded ForceIncluded @@ -36,25 +40,20 @@ ForceIncluded ForceIncluded ForceIncluded + ForceIncluded ForceIncluded ForceIncluded ForceIncluded ForceIncluded ForceIncluded + /home/schiemas/.cache/JetBrains/Rider2026.1/resharper-host/temp/Rider/vAny/CoverageData/_skyscraper8.1808907683/Snapshot/snapshot.utdcvr <AssemblyExplorer> <Assembly Path="/home/schiemas/.dotnet/packs/Microsoft.NETCore.App.Ref/8.0.21/ref/net8.0/System.Windows.dll" /> <Assembly Path="/home/schiemas/.nuget/packages/allure.net.commons/2.14.1/lib/netstandard2.0/Allure.Net.Commons.dll" /> </AssemblyExplorer> /home/schiemas/.cache/JetBrains/Rider2025.1/resharper-host/temp/Rider/vAny/CoverageData/_skyscraper8.1808907683/Snapshot/snapshot.utdcvr - <SessionState ContinuousTestingMode="0" Name="All tests from &lt;skyscraper8.Tests&gt;" xmlns="urn:schemas-jetbrains-com:jetbrains-ut-session"> - <And> - <Namespace>skyscraper8.Tests</Namespace> - <Project Location="\home\schiemas\RiderProjects\skyscraper8\skyscraper8.Tests" Presentation="&lt;skyscraper8.Tests&gt;" /> - </And> -</SessionState> - <SessionState ContinuousTestingMode="0" Name="Continuous Testing" xmlns="urn:schemas-jetbrains-com:jetbrains-ut-session"> - <Project Location="\home\schiemas\RiderProjects\skyscraper8\skyscraper8.Tests" Presentation="&lt;skyscraper8.Tests&gt;" /> -</SessionState> + + <SessionState ContinuousTestingMode="0" IsActive="True" Name="All tests from &lt;skyscraper8.Tests&gt;" xmlns="urn:schemas-jetbrains-com:jetbrains-ut-session"> <Solution /> </SessionState> @@ -65,7 +64,9 @@ <data><HostParameters type="LocalHostParameters" /><Argument type="StandaloneArgument"><Arguments IsNull="False"></Arguments><FileName IsNull="False"></FileName><WorkingDirectory IsNull="False"></WorkingDirectory><Scope><ProcessFilters /></Scope></Argument><Info type="TimelineInfo" /><CoreOptions type="CoreOptions"><CoreTempPath IsNull="False"></CoreTempPath><RemoteEndPoint IsNull="False"></RemoteEndPoint><AdditionalEnvironmentVariables /></CoreOptions><HostOptions type="HostOptions"><HostTempPath IsNull="False"></HostTempPath></HostOptions></data> - False + False + True + True True True False diff --git a/skyscraper8/Skyscraper/Scraper/Storage/Tar/TarArchive.cs b/skyscraper8/Skyscraper/Scraper/Storage/Tar/TarArchive.cs index d0953d9..a145260 100644 --- a/skyscraper8/Skyscraper/Scraper/Storage/Tar/TarArchive.cs +++ b/skyscraper8/Skyscraper/Scraper/Storage/Tar/TarArchive.cs @@ -11,6 +11,7 @@ public class TarArchive : IDisposable, IAsyncDisposable backend = stream; byte[] headerBuffer = null; + entries = new List(); while (stream.Position < stream.Length) { if (headerBuffer == null) @@ -26,8 +27,6 @@ public class TarArchive : IDisposable, IAsyncDisposable stream.Position += header.GetSizeOnTape(); - if (entries == null) - entries = new List(); entries.Add(entry); } } @@ -117,8 +116,6 @@ public class TarArchive : IDisposable, IAsyncDisposable public bool HasEntry(string filename) { - if (entries == null) - return false; if (entries.Count == 0) return false; @@ -133,8 +130,6 @@ public class TarArchive : IDisposable, IAsyncDisposable public byte[] ReadEntry(string filename) { - if (entries == null) - return null; if (entries.Count == 0) return null;