Moved from MSTest to NUnit
All checks were successful
🚀 Pack skyscraper8 / make-zip (push) Successful in 6m10s

This commit is contained in:
feyris-tan 2026-06-15 22:53:52 +02:00
parent 1b01ed8553
commit 37a070b665
52 changed files with 611 additions and 781 deletions

3
.gitignore vendored
View File

@ -135,3 +135,6 @@ imgui.ini
/.vs/skyscraper8/CopilotIndices/17.14.1431.25910 /.vs/skyscraper8/CopilotIndices/17.14.1431.25910
/.vs /.vs
/skyscraper8/bin/Debug/satip /skyscraper8/bin/Debug/satip
/skyscraper8.Tests.NUnit/bin/Debug/net8.0
/skyscraper8.Tests.NUnit/obj/Debug/net8.0
/skyscraper8.Tests.NUnit/obj

View File

@ -0,0 +1,3 @@
global using NUnit.Framework;
[assembly: LevelOfParallelism(1)]

View File

@ -8,7 +8,7 @@
// </auto-generated> // </auto-generated>
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
namespace skyscraper8.Tests { namespace skyscraper8.Tests.NUnit.Properties {
using System; using System;
@ -22,14 +22,14 @@ namespace skyscraper8.Tests {
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")] [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources1 { internal class Resources {
private static global::System.Resources.ResourceManager resourceMan; private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture; private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal Resources1() { internal Resources() {
} }
/// <summary> /// <summary>
@ -39,7 +39,7 @@ namespace skyscraper8.Tests {
internal static global::System.Resources.ResourceManager ResourceManager { internal static global::System.Resources.ResourceManager ResourceManager {
get { get {
if (object.ReferenceEquals(resourceMan, null)) { if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("skyscraper8.Tests.Resources1", typeof(Resources1).Assembly); global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("skyscraper8.Tests.NUnit.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp; resourceMan = temp;
} }
return resourceMan; return resourceMan;
@ -110,26 +110,6 @@ namespace skyscraper8.Tests {
} }
} }
/// <summary>
/// Sucht eine lokalisierte Ressource vom Typ System.Byte[].
/// </summary>
internal static byte[] MultipartRegistrationResponseTest {
get {
object obj = ResourceManager.GetObject("MultipartRegistrationResponseTest", resourceCulture);
return ((byte[])(obj));
}
}
/// <summary>
/// Sucht eine lokalisierte Ressource vom Typ System.Byte[].
/// </summary>
internal static byte[] MultipartRegistrationResponseTest2 {
get {
object obj = ResourceManager.GetObject("MultipartRegistrationResponseTest2", resourceCulture);
return ((byte[])(obj));
}
}
/// <summary> /// <summary>
/// Sucht eine lokalisierte Ressource vom Typ System.Byte[]. /// Sucht eine lokalisierte Ressource vom Typ System.Byte[].
/// </summary> /// </summary>
@ -160,6 +140,26 @@ namespace skyscraper8.Tests {
} }
} }
/// <summary>
/// Sucht eine lokalisierte Ressource vom Typ System.Byte[].
/// </summary>
internal static byte[] T45_V4_MultipartRegistrationResponseTest {
get {
object obj = ResourceManager.GetObject("T45_V4_MultipartRegistrationResponseTest", resourceCulture);
return ((byte[])(obj));
}
}
/// <summary>
/// Sucht eine lokalisierte Ressource vom Typ System.Byte[].
/// </summary>
internal static byte[] T45_V4_MultipartRegistrationResponseTest2 {
get {
object obj = ResourceManager.GetObject("T45_V4_MultipartRegistrationResponseTest2", resourceCulture);
return ((byte[])(obj));
}
}
/// <summary> /// <summary>
/// Sucht eine lokalisierte Ressource vom Typ System.Byte[]. /// Sucht eine lokalisierte Ressource vom Typ System.Byte[].
/// </summary> /// </summary>

View File

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<root> <root>
<!-- <!--
Microsoft ResX Schema Microsoft ResX Schema
@ -118,49 +118,49 @@
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader> </resheader>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="ModemCapabilitiesEncodingTest" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>Resources\ModemCapabilitiesEncodingTest.bin;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="MultipartRegistrationResponseTest" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>Resources\T45_V4_MultipartRegistrationResponseTest.bin;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="PushMacManagementMessage_Version4_Type45" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>Resources\PushMacManagementMessage_Version4_Type45.bin;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="ranging_response_test" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>Resources\ranging_response_test.bin;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="MultipartRegistrationResponseTest2" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>Resources\T45_V4_MultipartRegistrationResponseTest2.bin;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="test-1packet-01" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>Resources\test-1packet-01.ts;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="test-2packets-02-03" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>Resources\test-2packets-02-03.ts;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="test-3packets-04-05-06" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>Resources\test-3packets-04-05-06.ts;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="TransmitChannelConfigurationObject" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>Resources\TransmitChannelConfigurationObject.bin;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="UpstreamChannelDescriptorTest" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>Resources\UpstreamChannelDescriptorTest.bin;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="Frame00001343_TSGS1_MIS000_SYNC001" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>Resources\Frame00001343_TSGS1_MIS000_SYNC001.bbf;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="Frame00000008_TSGS1_MIS000_SYNC001" type="System.Resources.ResXFileRef, System.Windows.Forms"> <data name="Frame00000008_TSGS1_MIS000_SYNC001" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>Resources\Frame00000008_TSGS1_MIS000_SYNC001.bbf;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> <value>..\Resources\Frame00000008_TSGS1_MIS000_SYNC001.bbf;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data> </data>
<data name="Frame00000012_TSGS1_MIS000_SYNC001" type="System.Resources.ResXFileRef, System.Windows.Forms"> <data name="Frame00000012_TSGS1_MIS000_SYNC001" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>Resources\Frame00000012_TSGS1_MIS000_SYNC001.bbf;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> <value>..\Resources\Frame00000012_TSGS1_MIS000_SYNC001.bbf;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="sdpTest" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>Resources\sdpTest.sdp;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data> </data>
<data name="Frame00000357_TSGS1_MIS000_SYNC184" type="System.Resources.ResXFileRef, System.Windows.Forms"> <data name="Frame00000357_TSGS1_MIS000_SYNC184" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>Resources\Frame00000357_TSGS1_MIS000_SYNC184.bbframe;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> <value>..\Resources\Frame00000357_TSGS1_MIS000_SYNC184.bbframe;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data> </data>
</root> <data name="Frame00001343_TSGS1_MIS000_SYNC001" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Frame00001343_TSGS1_MIS000_SYNC001.bbf;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="ModemCapabilitiesEncodingTest" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\ModemCapabilitiesEncodingTest.bin;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="PushMacManagementMessage_Version4_Type45" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\PushMacManagementMessage_Version4_Type45.bin;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="ranging_response_test" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\ranging_response_test.bin;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="sdpTest" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\sdpTest.sdp;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="T45_V4_MultipartRegistrationResponseTest" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\T45_V4_MultipartRegistrationResponseTest.bin;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="T45_V4_MultipartRegistrationResponseTest2" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\T45_V4_MultipartRegistrationResponseTest2.bin;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="test-1packet-01" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\test-1packet-01.ts;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="test-2packets-02-03" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\test-2packets-02-03.ts;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="test-3packets-04-05-06" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\test-3packets-04-05-06.ts;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="TransmitChannelConfigurationObject" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\TransmitChannelConfigurationObject.bin;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="UpstreamChannelDescriptorTest" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\UpstreamChannelDescriptorTest.bin;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
</root>

View File

@ -0,0 +1,79 @@
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<TException>(TestDelegate action)
where TException : Exception
{
TargetInvocationException exeption = Assert.Throws<TargetInvocationException>(action);
Assert.That(exeption.InnerException, Is.TypeOf<TException>());
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();
}
}

View File

@ -0,0 +1,30 @@
using log4net.Appender;
using log4net.Core;
namespace skyscraper8.Tests.NUnit;
public class TestLog4NetAppender : AppenderSkeleton
{
private List<LoggingEvent> _events;
public IReadOnlyList<LoggingEvent> Events
{
get
{
return _events.AsReadOnly();
}
}
protected override void Append(LoggingEvent loggingEvent)
{
loggingEvent.Fix = FixFlags.All;
if (_events == null)
_events = new List<LoggingEvent>();
_events.Add(loggingEvent);
}
public string GetText()
{
return String.Join("\n", Events.Select(e => e.RenderedMessage));
}
}

View File

@ -1,28 +1,27 @@
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel; using System.Collections.ObjectModel;
using System.IO;
using System.Net; using System.Net;
using System.Net.NetworkInformation; using System.Net.NetworkInformation;
using Microsoft.VisualStudio.TestTools.UnitTesting; using log4net;
using skyscraper5.Docsis; using skyscraper5.Docsis;
using skyscraper5.Docsis.AnnexC; using skyscraper5.Docsis.AnnexC;
using skyscraper5.Docsis.MacManagement; using skyscraper5.Docsis.MacManagement;
using skyscraper5.Docsis.MacManagement.BaselinePrivacyKeyManagementMessages; using skyscraper5.Docsis.MacManagement.BaselinePrivacyKeyManagementMessages;
namespace skyscraper8.Tests.RootTests; namespace skyscraper8.Tests.NUnit.Tests.CoverageTests;
[TestClass] [TestFixture]
public class DocsisTests : Feyllure public class DocsisCoverageTests : SkyscrapersTestingFramework
{ {
[TestMethod] private static readonly ILog logger = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name);
[Test]
public void MacManagementMessageTypeAttributeTest() public void MacManagementMessageTypeAttributeTest()
{ {
MacManagementMessageTypeAttribute mmmta = new MacManagementMessageTypeAttribute(1, 2); MacManagementMessageTypeAttribute mmmta = new MacManagementMessageTypeAttribute(1, 2);
Print(mmmta.ToString()); logger.Info(mmmta.ToString());
} }
[TestMethod] [Test]
public void RcpIdEncodingTest() public void RcpIdEncodingTest()
{ {
RcpIdEncoding rie = new RcpIdEncoding(new byte[] { 7, 1, 0 }); RcpIdEncoding rie = new RcpIdEncoding(new byte[] { 7, 1, 0 });
@ -31,7 +30,7 @@ public class DocsisTests : Feyllure
Assert.Throws<NotImplementedException>(() => new RcpIdEncoding(new byte[] { 255, 1, 0 })); Assert.Throws<NotImplementedException>(() => new RcpIdEncoding(new byte[] { 255, 1, 0 }));
} }
[TestMethod] [Test]
public void EthernetLlcPacketClassificationEncodingTest() public void EthernetLlcPacketClassificationEncodingTest()
{ {
EthernetLlcPacketClassificationEncoding epce = new EthernetLlcPacketClassificationEncoding(new byte[] { 3, 3, 1, 0, 1 }); EthernetLlcPacketClassificationEncoding epce = new EthernetLlcPacketClassificationEncoding(new byte[] { 3, 3, 1, 0, 1 });
@ -41,7 +40,7 @@ public class DocsisTests : Feyllure
Assert.Throws<NotImplementedException>(() => new EthernetLlcPacketClassificationEncoding(new byte[] { 255, 1, 0 })); Assert.Throws<NotImplementedException>(() => new EthernetLlcPacketClassificationEncoding(new byte[] { 255, 1, 0 }));
} }
[TestMethod] [Test]
public void SimplifiedReceiveChannelAssignmentEncodingTest() public void SimplifiedReceiveChannelAssignmentEncodingTest()
{ {
SimplifiedReceiveChannelAssignmentEncoding srcae = SimplifiedReceiveChannelAssignmentEncoding srcae =
@ -52,7 +51,7 @@ public class DocsisTests : Feyllure
Assert.Throws<NotImplementedException>(() => new SimplifiedReceiveChannelAssignmentEncoding(new byte[] { 254,0,1 })); Assert.Throws<NotImplementedException>(() => new SimplifiedReceiveChannelAssignmentEncoding(new byte[] { 254,0,1 }));
} }
[TestMethod] [Test]
public void TransmitChannelConfigurationObjectTest() public void TransmitChannelConfigurationObjectTest()
{ {
CommonTlvEncodingObject.TransmitChannelConfigurationObject tcco = CommonTlvEncodingObject.TransmitChannelConfigurationObject tcco =
@ -83,7 +82,7 @@ public class DocsisTests : Feyllure
new CommonTlvEncodingObject.TransmitChannelConfigurationObject(new byte[] { 254, 1, 0 })); new CommonTlvEncodingObject.TransmitChannelConfigurationObject(new byte[] { 254, 1, 0 }));
} }
[TestMethod] [Test]
public void CommonTlvEncodingObjectTest() public void CommonTlvEncodingObjectTest()
{ {
MemoryStream ms = new MemoryStream(new byte[] MemoryStream ms = new MemoryStream(new byte[]
@ -109,7 +108,7 @@ public class DocsisTests : Feyllure
Assert.Throws<NotImplementedException>(() => new CommonTlvEncodingObject(ms)); Assert.Throws<NotImplementedException>(() => new CommonTlvEncodingObject(ms));
} }
[TestMethod] [Test]
public void GeneralPacketClassifierEncodingTest() public void GeneralPacketClassifierEncodingTest()
{ {
GeneralPacketClassifierEncoding gpce = new GeneralPacketClassifierEncoding(new byte[] GeneralPacketClassifierEncoding gpce = new GeneralPacketClassifierEncoding(new byte[]
@ -151,7 +150,7 @@ public class DocsisTests : Feyllure
})); }));
} }
[TestMethod] [Test]
public void Ipv4PacketClassificationEncodingTest() public void Ipv4PacketClassificationEncodingTest()
{ {
GeneralPacketClassifierEncoding.Ipv4PacketClassificationEncodings ipce = GeneralPacketClassifierEncoding.Ipv4PacketClassificationEncodings ipce =
@ -184,7 +183,7 @@ public class DocsisTests : Feyllure
})); }));
} }
[TestMethod] [Test]
public void ServiceFlowSidClusterAssignmentObjectTest() public void ServiceFlowSidClusterAssignmentObjectTest()
{ {
ServiceFlowSidClusterAssignmentObject sfscao = new ServiceFlowSidClusterAssignmentObject(new byte[] ServiceFlowSidClusterAssignmentObject sfscao = new ServiceFlowSidClusterAssignmentObject(new byte[]
@ -203,7 +202,7 @@ public class DocsisTests : Feyllure
})); }));
} }
[TestMethod] [Test]
public void SidClusterEncodingObjectTest() public void SidClusterEncodingObjectTest()
{ {
ServiceFlowSidClusterAssignmentObject.SidClusterEncodingObject sceo = ServiceFlowSidClusterAssignmentObject.SidClusterEncodingObject sceo =
@ -221,7 +220,7 @@ public class DocsisTests : Feyllure
})); }));
} }
[TestMethod] [Test]
public void SidToChannelMappingObjectTest() public void SidToChannelMappingObjectTest()
{ {
ServiceFlowSidClusterAssignmentObject.SidClusterEncodingObject.SidToChannelMappingObject stcmo = ServiceFlowSidClusterAssignmentObject.SidClusterEncodingObject.SidToChannelMappingObject stcmo =
@ -242,7 +241,7 @@ public class DocsisTests : Feyllure
})); }));
} }
[TestMethod] [Test]
public void Ipv6PacketClassificationEncodingTest() public void Ipv6PacketClassificationEncodingTest()
{ {
byte[] buffer = new byte[] byte[] buffer = new byte[]
@ -262,7 +261,7 @@ public class DocsisTests : Feyllure
Assert.AreEqual(0x0800, ipce.NextHeaderType); Assert.AreEqual(0x0800, ipce.NextHeaderType);
} }
[TestMethod] [Test]
public void SidClusterSwitchoverCriteriaObjectTest() public void SidClusterSwitchoverCriteriaObjectTest()
{ {
byte[] buffer = new byte[] byte[] buffer = new byte[]
@ -284,7 +283,7 @@ public class DocsisTests : Feyllure
new ServiceFlowSidClusterAssignmentObject.SidClusterSwitchoverCriteriaObject(buffer)); new ServiceFlowSidClusterAssignmentObject.SidClusterSwitchoverCriteriaObject(buffer));
} }
[TestMethod] [Test]
public void ModemCapabilitiesEncodingTest() public void ModemCapabilitiesEncodingTest()
{ {
byte[] buffer = new byte[] byte[] buffer = new byte[]
@ -489,7 +488,7 @@ public class DocsisTests : Feyllure
Assert.Throws<NotImplementedException>(() => new ModemCapabilitiesEncoding(buffer)); Assert.Throws<NotImplementedException>(() => new ModemCapabilitiesEncoding(buffer));
} }
[TestMethod] [Test]
public void GeneralServiceFlowEncodingTest() public void GeneralServiceFlowEncodingTest()
{ {
byte[] buffer = new byte[] byte[] buffer = new byte[]
@ -550,7 +549,7 @@ public class DocsisTests : Feyllure
Assert.IsTrue(gsfe.DoNotUseRequest2ForRequests); Assert.IsTrue(gsfe.DoNotUseRequest2ForRequests);
Assert.IsTrue(gsfe.DoNotUsePriorityRequest); Assert.IsTrue(gsfe.DoNotUsePriorityRequest);
Assert.IsTrue(gsfe.DoNotUseAllCms); Assert.IsTrue(gsfe.DoNotUseAllCms);
this.Print(gsfe.ToString()); logger.InfoFormat(gsfe.ToString());
buffer = new byte[] buffer = new byte[]
{ {
@ -581,7 +580,7 @@ public class DocsisTests : Feyllure
} }
} }
[TestMethod] [Test]
public void MacManagementMessageTest() public void MacManagementMessageTest()
{ {
Random rng = new Random(); Random rng = new Random();
@ -603,7 +602,7 @@ public class DocsisTests : Feyllure
Assert.IsNull(ummm.MessageType); Assert.IsNull(ummm.MessageType);
} }
[TestMethod] [Test]
public void UpstreamChannelDescriptorTests() public void UpstreamChannelDescriptorTests()
{ {
byte[] buffer = new byte[] byte[] buffer = new byte[]
@ -672,7 +671,7 @@ public class DocsisTests : Feyllure
Assert.AreEqual(3, ucd.UpstreamChannelID); Assert.AreEqual(3, ucd.UpstreamChannelID);
} }
[TestMethod] [Test]
public void BurstDescriptorTests() public void BurstDescriptorTests()
{ {
byte[] buffer = new byte[] byte[] buffer = new byte[]
@ -751,7 +750,7 @@ public class DocsisTests : Feyllure
Assert.Throws<NotImplementedException>(() => new UpstreamChannelDescriptor.BurstDescriptor(buffer)); Assert.Throws<NotImplementedException>(() => new UpstreamChannelDescriptor.BurstDescriptor(buffer));
} }
[TestMethod] [Test]
public void UcdChangeIndicatorBitmaskTest() public void UcdChangeIndicatorBitmaskTest()
{ {
UpstreamChannelDescriptor.UcdChangeIndicatorBitmask ucdcib = UpstreamChannelDescriptor.UcdChangeIndicatorBitmask ucdcib =
@ -770,7 +769,7 @@ public class DocsisTests : Feyllure
Assert.AreEqual(0xffff,ucdcib.GetRawValue()); Assert.AreEqual(0xffff,ucdcib.GetRawValue());
} }
[TestMethod] [Test]
public void MultipartRegistrationResponse() public void MultipartRegistrationResponse()
{ {
Random rng = new Random(); Random rng = new Random();
@ -796,7 +795,7 @@ public class DocsisTests : Feyllure
Assert.IsNotNull(mrr.TlvEncodedInformation); Assert.IsNotNull(mrr.TlvEncodedInformation);
} }
[TestMethod] [Test]
public void RangingResponseTest() public void RangingResponseTest()
{ {
Random rng = new Random(); Random rng = new Random();
@ -952,7 +951,7 @@ public class DocsisTests : Feyllure
} }
[TestMethod] [Test]
public void CommandPowerObjectTest() public void CommandPowerObjectTest()
{ {
byte[] payload = new byte[] byte[] payload = new byte[]
@ -978,7 +977,7 @@ public class DocsisTests : Feyllure
Assert.IsFalse(commandPower.Valid); Assert.IsFalse(commandPower.Valid);
} }
[TestMethod] [Test]
public void PrivacyKeyManagementResponseTest() public void PrivacyKeyManagementResponseTest()
{ {
NullDocsisEventHandler nullDocsisEventHandler = new NullDocsisEventHandler(); NullDocsisEventHandler nullDocsisEventHandler = new NullDocsisEventHandler();
@ -1130,7 +1129,7 @@ public class DocsisTests : Feyllure
} }
} }
[TestMethod] [Test]
public void KeyReplyTest() public void KeyReplyTest()
{ {
byte[] payload = new byte[] byte[] payload = new byte[]
@ -1140,7 +1139,7 @@ public class DocsisTests : Feyllure
Assert.Throws<NotImplementedException>(() => new KeyReply(payload)); Assert.Throws<NotImplementedException>(() => new KeyReply(payload));
} }
[TestMethod] [Test]
public void TekParameterTest() public void TekParameterTest()
{ {
byte[] payload = new byte[] byte[] payload = new byte[]
@ -1155,10 +1154,10 @@ public class DocsisTests : Feyllure
8, 0, 1, 2 8, 0, 1, 2
}; };
KeyReply.TekParameter tekParameter = new KeyReply.TekParameter(payload); KeyReply.TekParameter tekParameter = new KeyReply.TekParameter(payload);
Print(tekParameter.ToString()); logger.InfoFormat(tekParameter.ToString());
} }
[TestMethod] [Test]
public void DynamicServiceAdditionResponseTest() public void DynamicServiceAdditionResponseTest()
{ {
NullDocsisEventHandler nullDocsisEventHandler = new NullDocsisEventHandler(); NullDocsisEventHandler nullDocsisEventHandler = new NullDocsisEventHandler();
@ -1178,7 +1177,7 @@ public class DocsisTests : Feyllure
docsisEnvironment.PushMacManagementMessage(null, 2, 16, srcAddr, dstAddr, payload); docsisEnvironment.PushMacManagementMessage(null, 2, 16, srcAddr, dstAddr, payload);
} }
[TestMethod] [Test]
public void NullDocsisEventHandlerTest() public void NullDocsisEventHandlerTest()
{ {
NullDocsisEventHandler nullDocsisEventHandler = new NullDocsisEventHandler(); NullDocsisEventHandler nullDocsisEventHandler = new NullDocsisEventHandler();
@ -1189,12 +1188,12 @@ public class DocsisTests : Feyllure
nullDocsisEventHandler.OnParticipantDetected(srcAddr); nullDocsisEventHandler.OnParticipantDetected(srcAddr);
HashSet<PhysicalAddress> physicalAddresses = nullDocsisEventHandler.GetParticipants(); HashSet<PhysicalAddress> physicalAddresses = nullDocsisEventHandler.GetParticipants();
Assert.Contains(srcAddr, physicalAddresses); Assert.IsTrue(physicalAddresses.Contains(srcAddr));
rng.NextBytes(srcBuffer); rng.NextBytes(srcBuffer);
srcAddr = new PhysicalAddress(srcBuffer); srcAddr = new PhysicalAddress(srcBuffer);
nullDocsisEventHandler.OnCmtsTimestamp(srcAddr, 1); nullDocsisEventHandler.OnCmtsTimestamp(srcAddr, 1);
Assert.Contains(srcAddr, physicalAddresses); Assert.IsTrue(physicalAddresses.Contains(srcAddr));
Assert.AreEqual(1u, nullDocsisEventHandler.GetTiming()); Assert.AreEqual(1u, nullDocsisEventHandler.GetTiming());
byte[] ucdPayload = new byte[] byte[] ucdPayload = new byte[]
@ -1224,7 +1223,7 @@ public class DocsisTests : Feyllure
Assert.AreEqual(IPAddress.None, readOnlyDictionary[PhysicalAddress.None]); Assert.AreEqual(IPAddress.None, readOnlyDictionary[PhysicalAddress.None]);
} }
[TestMethod] [Test]
public void MacDomainDescriptorTest() public void MacDomainDescriptorTest()
{ {
Random rng = new Random(); Random rng = new Random();
@ -1263,15 +1262,15 @@ public class DocsisTests : Feyllure
Assert.AreEqual(1, mmd.FragmentSequenceNumber); Assert.AreEqual(1, mmd.FragmentSequenceNumber);
Assert.AreEqual(1, mmd.CurrentChannelDcid); Assert.AreEqual(1, mmd.CurrentChannelDcid);
Assert.IsNotNull(mmd.DownstreamServiceGroup); Assert.IsNotNull(mmd.DownstreamServiceGroup);
Assert.HasCount(1, mmd.DownstreamAmbiguityResolutionFrequencyList); Assert.AreEqual(1, mmd.DownstreamAmbiguityResolutionFrequencyList.Length);
Assert.IsNotNull(mmd.ReceiveChannelProfileReportingControl); Assert.IsNotNull(mmd.ReceiveChannelProfileReportingControl);
Assert.IsNotNull(mmd.IpInitalizationParameters); Assert.IsNotNull(mmd.IpInitalizationParameters);
Assert.AreEqual(1, mmd.EarlyAuthentication.Value); Assert.AreEqual(1, mmd.EarlyAuthentication.Value);
Assert.HasCount(1, mmd.ActiveUpstreamChannelList); Assert.AreEqual(1, mmd.ActiveUpstreamChannelList.Count);
Assert.AreEqual(1, mmd.UpstreamChannelIds[0]); Assert.AreEqual(1, mmd.UpstreamChannelIds[0]);
Assert.AreEqual(1, mmd.UpstreamFrequencyRange.Value); Assert.AreEqual(1, mmd.UpstreamFrequencyRange.Value);
Assert.IsTrue(mmd.SymbolClockLocking); Assert.IsTrue(mmd.SymbolClockLocking);
Assert.HasCount(1, mmd.EventControlEncoding); Assert.AreEqual(1, mmd.EventControlEncoding.Count);
Assert.AreEqual(1, mmd.UpstreamTransmitPowerReporting.Value); Assert.AreEqual(1, mmd.UpstreamTransmitPowerReporting.Value);
Assert.IsTrue(mmd.SequenceOutOfRange); Assert.IsTrue(mmd.SequenceOutOfRange);
Assert.IsTrue(mmd.CmOperatingOnBatteryBackup); Assert.IsTrue(mmd.CmOperatingOnBatteryBackup);

View File

@ -1,13 +1,11 @@
using Microsoft.VisualStudio.TestTools.UnitTesting;
using skyscraper5.Mpeg2; using skyscraper5.Mpeg2;
namespace skyscraper8.Tests.RootTests; namespace skyscraper8.Tests.NUnit.Tests.CoverageTests;
[TestFixture]
[TestClass] public class Mpeg2CoverageTests : SkyscrapersTestingFramework
public class Mpeg2Tests : Feyllure
{ {
[TestMethod] [Test]
public void PsiSectionTest() public void PsiSectionTest()
{ {
PsiSection section = new PsiSection(); PsiSection section = new PsiSection();

View File

@ -1,15 +1,12 @@
using System;
using System.IO;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using skyscraper5.Skyscraper; using skyscraper5.Skyscraper;
using skyscraper8.Skyscraper.Scraper.Storage.Tar; using skyscraper8.Skyscraper.Scraper.Storage.Tar;
namespace skyscraper8.Tests; namespace skyscraper8.Tests.NUnit.Tests.IntegrationTests;
[TestClass] [TestFixture]
public class IntegrationTests public class SkyscraperIntegrationTests : SkyscrapersTestingFramework
{ {
[TestMethod] [Test]
public void CreateTarArchive() public void CreateTarArchive()
{ {
string filename = String.Format("{0}.tar", DateTime.Now.ToUnixTime()); string filename = String.Format("{0}.tar", DateTime.Now.ToUnixTime());

View File

@ -1,125 +1,125 @@
using System.IO; using skyscraper5.Mpeg2;
using Microsoft.VisualStudio.TestTools.UnitTesting; using skyscraper5.Skyscraper.Scraper;
using skyscraper5.Mpeg2; using skyscraper5.Skyscraper.Scraper.Storage.InMemory;
using skyscraper5.Skyscraper.Scraper; using skyscraper8.Skyscraper.Scraper.Storage;
using skyscraper5.Skyscraper.Scraper.Storage.InMemory; using skyscraper8.Tests.NUnit;
using skyscraper8.Skyscraper.Scraper.Storage;
namespace skyscraper8.Tests.NUnit.Tests;
namespace skyscraper8.Tests;
[TestFixture]
[TestClass] public class RecordedSamplesTests : SkyscrapersTestingFramework
public class CapturedTests : Feyllure {
{ [Test]
[TestMethod] public void RussianT2Mi()
public void RussianT2Mi() {
{ FileStream streamSample = GetStreamSample("express_3928L_t2mi.ts");
FileStream streamSample = GetStreamSample("express_3928L_t2mi.ts"); ProcessSample(streamSample);
ProcessSample(streamSample); streamSample.Close();
streamSample.Close(); //42931 uncovered
//42931 uncovered }
}
[Test]
[TestMethod] public void Simmin()
public void Simmin() {
{ FileStream streamSample = GetStreamSample("thor_11049v_simmin-radiomidun.ts");
FileStream streamSample = GetStreamSample("thor_11049v_simmin-radiomidun.ts"); ProcessSample(streamSample);
ProcessSample(streamSample); streamSample.Close();
streamSample.Close(); //36611 uncovered
//36611 uncovered }
}
[Test]
[TestMethod] public void GseDab()
public void GseDab() {
{ FileStream streamSample = GetStreamSample("thor_10717v_gse-dab.ts");
FileStream streamSample = GetStreamSample("thor_10717v_gse-dab.ts"); ProcessSample(streamSample);
ProcessSample(streamSample); streamSample.Close();
streamSample.Close(); //36446 uncovered
//36446 uncovered }
}
[Test]
[TestMethod] public void SouthAmericanNip()
public void SouthAmericanNip() {
{ FileStream streamSample = GetStreamSample("brazilian-dvb-nip-000000.ts");
FileStream streamSample = GetStreamSample("argentinian-dvb-nip-000000.ts"); ProcessSample(streamSample);
ProcessSample(streamSample); streamSample.Close();
streamSample.Close(); //35222
//35222 }
}
[Test]
[TestMethod] public void GseNip()
public void GseNip() {
{ FileStream streamSample = GetStreamSample("astra1_12441v_gse-nip.ts");
FileStream streamSample = GetStreamSample("astra1_12441v_gse-nip.ts"); ProcessSample(streamSample);
ProcessSample(streamSample); streamSample.Close();
streamSample.Close(); //34545
//34545 }
}
[Test]
[TestMethod] public void GseNip2()
public void GseNip2() {
{ FileStream streamSample = GetStreamSample("astra1_11141h_gse_nip.ts");
FileStream streamSample = GetStreamSample("astra1_11141h_gse_nip.ts"); ProcessSample(streamSample);
ProcessSample(streamSample); streamSample.Close();
streamSample.Close(); //34462
//34462 }
}
[Test]
[TestMethod] public void TsNipIncludingLegacyChannel()
public void TsNipIncludingLegacyChannel() {
{ FileStream streamSample = GetStreamSample("hotbird_12380v_nip.ts");
FileStream streamSample = GetStreamSample("hotbird_12380v_nip.ts"); ProcessSample(streamSample);
ProcessSample(streamSample); streamSample.Close();
streamSample.Close(); //33518
//33518 }
}
[Test]
[TestMethod] public void TsNip()
public void TsNip() {
{ FileStream streamSample = GetStreamSample("hotbird_12226v_nip.ts");
FileStream streamSample = GetStreamSample("hotbird_12226v_nip.ts"); ProcessSample(streamSample);
ProcessSample(streamSample); streamSample.Close();
streamSample.Close(); //33518
//33518 }
}
[Test]
[TestMethod] public void GseRcs2()
public void GseRcs2() {
{ FileStream streamSample = GetStreamSample("telstar12v-bfbs-000000.ts");
FileStream streamSample = GetStreamSample("telstar12v-bfbs-000000.ts"); ProcessSample(streamSample);
ProcessSample(streamSample); streamSample.Close();
streamSample.Close(); //32559
//32559 }
}
[Test]
[TestMethod] public void BadrDvbSis()
public void BadrDvbSis() {
{ FileStream streamSample = GetStreamSample("badr_12563v_dvb-sis.ts");
FileStream streamSample = GetStreamSample("badr_12563v_dvb-sis.ts"); ProcessSample(streamSample);
ProcessSample(streamSample); streamSample.Close();
streamSample.Close(); }
}
[Test]
[TestMethod] public void Eutelsat5DvbSis()
public void Eutelsat5DvbSis() {
{ FileStream streamSample = GetStreamSample("eutelsat5_12522v_dvb-sis.ts");
FileStream streamSample = GetStreamSample("eutelsat5_12522v_dvb-sis.ts"); ProcessSample(streamSample);
ProcessSample(streamSample); streamSample.Close();
streamSample.Close(); }
}
private void ProcessSample(Stream sample)
private void ProcessSample(Stream sample) {
{ TsContext ts = new TsContext();
TsContext ts = new TsContext();
InMemoryScraperStorageFactory inMemoryStorageFactory = new InMemoryScraperStorageFactory();
InMemoryScraperStorageFactory inMemoryStorageFactory = new InMemoryScraperStorageFactory(); DataStorage dataStorage = inMemoryStorageFactory.CreateDataStorage();
DataStorage dataStorage = inMemoryStorageFactory.CreateDataStorage();
NullObjectStorage nullObjectStorage = new NullObjectStorage();
NullObjectStorage nullObjectStorage = new NullObjectStorage();
SkyscraperContext context = new SkyscraperContext(ts, dataStorage, nullObjectStorage);
SkyscraperContext context = new SkyscraperContext(ts, dataStorage, nullObjectStorage); context.InitalizeFilterChain();
context.InitalizeFilterChain(); context.IngestFromStream(sample);
context.IngestFromStream(sample); }
}
} }

View File

@ -1,24 +1,22 @@
using System; using System.Net.NetworkInformation;
using skyscraper5.Docsis; using skyscraper5.Docsis;
using skyscraper5.Docsis.AnnexC; using skyscraper5.Docsis.AnnexC;
using skyscraper5.Docsis.MacManagement; using skyscraper5.Docsis.MacManagement;
using System.Net.NetworkInformation;
using Microsoft.VisualStudio.TestTools.UnitTesting;
namespace skyscraper8.Tests.ResourceTests namespace skyscraper8.Tests.NUnit.Tests.ResourceTests;
[TestFixture]
public class DocsisResourceTests : SkyscrapersTestingFramework
{ {
[TestClass] [Test]
public class DocsisTests : Feyllure public void ModemCapabilitiesEncoding()
{ {
[TestMethod] byte[] buffer = Properties.Resources.ModemCapabilitiesEncodingTest;
public void ModemCapabilitiesEncoding() ModemCapabilitiesEncoding modemCapabilitiesEncoding = new ModemCapabilitiesEncoding(buffer);
{ Assert.IsTrue(modemCapabilitiesEncoding.Valid);
byte[] buffer = Resources1.ModemCapabilitiesEncodingTest; }
ModemCapabilitiesEncoding modemCapabilitiesEncoding = new ModemCapabilitiesEncoding(buffer);
Assert.IsTrue(modemCapabilitiesEncoding.Valid); [Test]
}
[TestMethod]
public void MultipartRegistrationResponse() public void MultipartRegistrationResponse()
{ {
Random rng = new Random(); Random rng = new Random();
@ -31,18 +29,18 @@ namespace skyscraper8.Tests.ResourceTests
rng.NextBytes(targetBuffer); rng.NextBytes(targetBuffer);
PhysicalAddress target = new PhysicalAddress(targetBuffer); PhysicalAddress target = new PhysicalAddress(targetBuffer);
byte[] buffer = Resources1.MultipartRegistrationResponseTest; byte[] buffer = Properties.Resources.T45_V4_MultipartRegistrationResponseTest;
T45_V4_MultipartRegistrationResponse test = new T45_V4_MultipartRegistrationResponse(source, target, buffer); T45_V4_MultipartRegistrationResponse test = new T45_V4_MultipartRegistrationResponse(source, target, buffer);
Assert.IsTrue(test.Valid); Assert.IsTrue(test.Valid);
} }
[TestMethod] [Test]
public void MacManagement_4_45() public void MacManagement_4_45()
{ {
NullDocsisEventHandler docsisEventHandler = new NullDocsisEventHandler(); NullDocsisEventHandler docsisEventHandler = new NullDocsisEventHandler();
DocsisEnvironment environment = new DocsisEnvironment(docsisEventHandler); DocsisEnvironment environment = new DocsisEnvironment(docsisEventHandler);
byte[] testPayload = Resources1.PushMacManagementMessage_Version4_Type45; byte[] testPayload = Properties.Resources.PushMacManagementMessage_Version4_Type45;
Random rng = new Random(); Random rng = new Random();
byte[] sourceBuffer = new byte[6]; byte[] sourceBuffer = new byte[6];
@ -56,10 +54,10 @@ namespace skyscraper8.Tests.ResourceTests
environment.PushMacManagementMessage(testPayload, 4, 45, source, target, testPayload); environment.PushMacManagementMessage(testPayload, 4, 45, source, target, testPayload);
} }
[TestMethod] [Test]
public void InvalidUpstreamChannelDescriptorTest() public void InvalidUpstreamChannelDescriptorTest()
{ {
byte[] testPayload = Resources1.UpstreamChannelDescriptorTest; byte[] testPayload = Properties.Resources.UpstreamChannelDescriptorTest;
Random rng = new Random(); Random rng = new Random();
byte[] sourceBuffer = new byte[6]; byte[] sourceBuffer = new byte[6];
@ -74,16 +72,16 @@ namespace skyscraper8.Tests.ResourceTests
Assert.IsFalse(ucd.Valid); Assert.IsFalse(ucd.Valid);
} }
[TestMethod] [Test]
public void TransmitChannelConfigurationObjectTest() public void TransmitChannelConfigurationObjectTest()
{ {
byte[] testPayload = Resources1.TransmitChannelConfigurationObject; byte[] testPayload = Properties.Resources.TransmitChannelConfigurationObject;
CommonTlvEncodingObject.TransmitChannelConfigurationObject child = new CommonTlvEncodingObject.TransmitChannelConfigurationObject(testPayload); CommonTlvEncodingObject.TransmitChannelConfigurationObject child = new CommonTlvEncodingObject.TransmitChannelConfigurationObject(testPayload);
Assert.IsTrue(child.Valid); Assert.IsTrue(child.Valid);
} }
[TestMethod] [Test]
public void MultipartRegistrationResponse2() public void MultipartRegistrationResponse2()
{ {
Random rng = new Random(); Random rng = new Random();
@ -96,15 +94,15 @@ namespace skyscraper8.Tests.ResourceTests
rng.NextBytes(targetBuffer); rng.NextBytes(targetBuffer);
PhysicalAddress target = new PhysicalAddress(targetBuffer); PhysicalAddress target = new PhysicalAddress(targetBuffer);
byte[] buffer = Resources1.MultipartRegistrationResponseTest2; byte[] buffer = Properties.Resources.T45_V4_MultipartRegistrationResponseTest2;
T45_V4_MultipartRegistrationResponse test = new T45_V4_MultipartRegistrationResponse(source, target, buffer); T45_V4_MultipartRegistrationResponse test = new T45_V4_MultipartRegistrationResponse(source, target, buffer);
Assert.IsTrue(test.Valid); Assert.IsTrue(test.Valid);
} }
[TestMethod] [Test]
public void OffsetBreakerTest() public void OffsetBreakerTest()
{ {
byte[] blob = Resources1.ranging_response_test; byte[] blob = Properties.Resources.ranging_response_test;
Random rng = new Random(); Random rng = new Random();
byte[] sourceMacBuffer = new byte[6]; byte[] sourceMacBuffer = new byte[6];
@ -118,5 +116,4 @@ namespace skyscraper8.Tests.ResourceTests
RangingResponse rangingResponse = new RangingResponse(sourceAddress, targetAddress, blob); RangingResponse rangingResponse = new RangingResponse(sourceAddress, targetAddress, blob);
Assert.IsTrue(rangingResponse.Valid); Assert.IsTrue(rangingResponse.Valid);
} }
}
} }

View File

@ -1,17 +1,16 @@
using Microsoft.VisualStudio.TestTools.UnitTesting;
using skyscraper8.GS; using skyscraper8.GS;
using skyscraper8.GS.GSE_RollingSyncByte; using skyscraper8.GS.GSE_RollingSyncByte;
using skyscraper8.GSE; using skyscraper8.GSE;
namespace skyscraper8.Tests.ResourceTests; namespace skyscraper8.Tests.NUnit.Tests.ResourceTests;
[TestClass] [TestFixture]
public class Ses12GseTest public class GsResourceTests
{ {
[TestMethod] [Test]
public void TestShortPdu() public void TestShortPdu()
{ {
byte[] datasource = Resources1.Frame00000357_TSGS1_MIS000_SYNC184; byte[] datasource = Properties.Resources.Frame00000357_TSGS1_MIS000_SYNC184;
GsContextDto dto = new GsContextDto(); GsContextDto dto = new GsContextDto();
GseWithRollingSyncByteReader reader = new GseWithRollingSyncByteReader(dto); GseWithRollingSyncByteReader reader = new GseWithRollingSyncByteReader(dto);
reader.PushFrame(new BBHeader(new byte[10], 0), datasource); reader.PushFrame(new BBHeader(new byte[10], 0), datasource);

View File

@ -0,0 +1,17 @@
using skyscraper8.Ietf.Rfc4566_SDP;
namespace skyscraper8.Tests.NUnit.Tests.ResourceTests;
[TestFixture]
public class IetfSdpResourceTests : SkyscrapersTestingFramework
{
[Test]
public void TestSdpParser()
{
MemoryStream ms = new MemoryStream(Properties.Resources.sdpTest, false);
Assert.IsTrue(SDP.IsSDP(ms));
SDP loaded = SDP.Load(ms);
Assert.IsNotNull(loaded);
}
}

View File

@ -1,31 +1,28 @@
using System;
using System.IO;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using skyscraper5.Mpeg2; using skyscraper5.Mpeg2;
namespace skyscraper8.Tests.ResourceTests; namespace skyscraper8.Tests.NUnit.Tests.ResourceTests;
[TestClass] [TestFixture]
public class GsType1SanityTest : Feyllure public class Mpeg2ResourceTests
{ {
[TestMethod] [Test]
public void CheckBfbsCrc() public void CheckBfbsCrc()
{ {
byte[] blob = Resources1.Frame00001343_TSGS1_MIS000_SYNC001; byte[] blob = Properties.Resources.Frame00001343_TSGS1_MIS000_SYNC001;
MemoryStream ms = new MemoryStream(blob, false); MemoryStream ms = new MemoryStream(blob, false);
bool result = DvbCrc32.ValidateCrc(ms, 0, (int)ms.Length); bool result = DvbCrc32.ValidateCrc(ms, 0, (int)ms.Length);
Assert.IsTrue(result); Assert.IsTrue(result);
blob = Resources1.Frame00000008_TSGS1_MIS000_SYNC001; blob = Properties.Resources.Frame00000008_TSGS1_MIS000_SYNC001;
ms = new MemoryStream(blob, false); ms = new MemoryStream(blob, false);
result = DvbCrc32.ValidateCrc(ms, 0, (int)ms.Length); result = DvbCrc32.ValidateCrc(ms, 0, (int)ms.Length);
Assert.IsTrue(result); Assert.IsTrue(result);
} }
[TestMethod] [Test]
public void CheckBfbsCrcSpan() public void CheckBfbsCrcSpan()
{ {
byte[] blob = Resources1.Frame00000012_TSGS1_MIS000_SYNC001; byte[] blob = Properties.Resources.Frame00000012_TSGS1_MIS000_SYNC001;
ReadOnlySpan<byte> span = new ReadOnlySpan<byte>(blob); ReadOnlySpan<byte> span = new ReadOnlySpan<byte>(blob);
bool result = DvbCrc32.ValidateCrc(span); bool result = DvbCrc32.ValidateCrc(span);
Assert.IsTrue(result); Assert.IsTrue(result);

View File

@ -0,0 +1,39 @@
using skyscraper5.Mpeg2;
using skyscraper5.Skyscraper.Scraper;
using skyscraper5.Skyscraper.Scraper.Storage.InMemory;
using skyscraper8.Skyscraper.Scraper.Storage;
namespace skyscraper8.Tests.NUnit.Tests.ResourceTests;
[TestFixture]
public class SkyscraperResourceTests : SkyscrapersTestingFramework
{
[Test]
public void RunTestPatterns()
{
byte[][] buffers = new byte[][]
{
Properties.Resources.test_1packet_01,
Properties.Resources.test_2packets_02_03,
Properties.Resources.test_3packets_04_05_06
};
InMemoryScraperStorageFactory imssf = new InMemoryScraperStorageFactory();
foreach (byte[] buffer in buffers)
{
TsContext mpeg2 = new TsContext();
DataStorage ds = new InMemoryScraperStorageFactory().CreateDataStorage();
ObjectStorage os = new NullObjectStorage();
SkyscraperContext skyscraper = new SkyscraperContext(mpeg2, ds, os);
MemoryStream ms = new MemoryStream(buffer, false);
skyscraper.InitalizeFilterChain();
skyscraper.IngestFromStream(ms);
ms.Close();
ms.Dispose();
}
}
}

View File

@ -0,0 +1,44 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<IsPackable>false</IsPackable>
<IsTestProject>true</IsTestProject>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.6.0" />
<PackageReference Include="NUnit" Version="3.13.3" />
<PackageReference Include="NUnit3TestAdapter" Version="4.2.1" />
<PackageReference Include="NUnit.Analyzers" Version="3.6.1" />
<PackageReference Include="coverlet.collector" Version="6.0.0" />
</ItemGroup>
<ItemGroup>
<Compile Update="Properties\Resources.Designer.cs">
<DesignTime>True</DesignTime>
<AutoGen>True</AutoGen>
<DependentUpon>Resources.resx</DependentUpon>
</Compile>
<Compile Update="Resources1.Designer.cs">
<DesignTime>True</DesignTime>
<AutoGen>True</AutoGen>
<DependentUpon>Resources1.resx</DependentUpon>
</Compile>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\skyscraper8\skyscraper8.csproj" />
</ItemGroup>
<ItemGroup>
<EmbeddedResource Update="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
</EmbeddedResource>
</ItemGroup>
</Project>

View File

@ -1,9 +1,4 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup /> <PropertyGroup />
<ItemGroup>
<EmbeddedResource Update="Resources1.resx">
<SubType>Designer</SubType>
</EmbeddedResource>
</ItemGroup>
</Project> </Project>

View File

@ -1,5 +0,0 @@
{
"allure": {
"directory": "allure-results"
}
}

View File

@ -1,193 +0,0 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Reflection;
using System.Runtime.InteropServices;
using Allure.Net.Commons;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using TestResult = Allure.Net.Commons.TestResult;
namespace skyscraper8.Tests;
[TestClass]
public class Feyllure
{
public TestContext TestContext { get; set; }
protected static readonly AllureLifecycle Allure = AllureLifecycle.Instance;
private bool assemblyWasInited;
private void AssemblyInit(TestContext context)
{
// Ensure allure-results exists
var resultsDir = Allure.ResultsDirectory;
Directory.CreateDirectory(resultsDir);
var envFile = Path.Combine(resultsDir, "environment.properties");
using (var writer = new StreamWriter(envFile))
{
writer.WriteLine($"SkyscraperRelease={VersionInfo.GetPublicReleaseNumber()}");
writer.WriteLine($"SkyscraperCodeVersion={VersionInfo.GetCurrentAssemblyDisplayVersion()}");
writer.WriteLine($"OS={RuntimeInformation.OSDescription}");
writer.WriteLine($".NET={Environment.Version}");
writer.WriteLine($"Machine={Environment.MachineName}");
writer.WriteLine($"User={Environment.UserName}");
writer.WriteLine($"Framework={System.Runtime.InteropServices.RuntimeInformation.FrameworkDescription}");
writer.WriteLine($"BuildDate={DateTime.UtcNow:yyyy-MM-dd HH:mm:ss}");
}
var executorFile = Path.Combine(resultsDir, "executor.json");
var executorInfo = new
{
name = Environment.MachineName,
buildName = "My build name",
buildUrl = "http://127.0.0.2",
};
var executorJson = Newtonsoft.Json.JsonConvert.SerializeObject(executorInfo);
File.WriteAllText(executorFile, executorJson);
}
[TestInitialize]
public void Setup()
{
if (!assemblyWasInited){
AssemblyInit(TestContext);
assemblyWasInited = true;
}
var testName = TestContext.TestName;
var fqClass = TestContext.FullyQualifiedTestClassName;
// Extract namespace and class name
var lastDot = fqClass.LastIndexOf('.');
var ns = lastDot > 0 ? fqClass.Substring(0, lastDot) : "";
var cls = lastDot > 0 ? fqClass.Substring(lastDot + 1) : fqClass;
TestResult testResult = new TestResult();
testResult.uuid = Guid.NewGuid().ToString();
testResult.name = testName;
testResult.fullName = String.Format("{0}.{1}", TestContext.FullyQualifiedTestClassName, testName);
testResult.labels = new List<Label>()
{
//Packages Tab
new Label { name = "package", value = ns},
new Label { name = "testClass", value = cls},
new Label { name = "testMethod", value = testName},
//Suites tab
new Label { name = "parentSuite", value = ns},
new Label { name = "suite", value = cls},
};
Allure.StartTestCase(testResult);
descriptionWriter = null;
}
[TestCleanup]
public void TearDown()
{
switch (TestContext.CurrentTestOutcome)
{
case UnitTestOutcome.Passed:
Allure.UpdateTestCase(tc => tc.status = Status.passed);
break;
case UnitTestOutcome.Failed:
Allure.UpdateTestCase(tc => tc.status = Status.failed);
break;
case UnitTestOutcome.Inconclusive:
Allure.UpdateTestCase(tc => tc.status = Status.skipped);
Print("\n\n" + TestContext.TestException.ToString());
break;
default:
StepResult stepResult = new StepResult();
stepResult.name = String.Format("Current Test Outcome: {0}", TestContext.CurrentTestOutcome);;
Allure.UpdateTestCase(tc =>
{
tc.status = Status.skipped;
tc.steps.Add(stepResult);
});
break;
}
if (descriptionWriter != null)
{
Allure.UpdateTestCase(tc => { tc.description = descriptionWriter.ToString(); });
}
Allure.StopTestCase();
Allure.WriteTestCase();
}
private StringWriter descriptionWriter;
public void Print(string message, params object[] args)
{
if (descriptionWriter == null)
descriptionWriter = new StringWriter();
string formattedMessage = String.Format(message, args);
Console.WriteLine(formattedMessage);
descriptionWriter.WriteLine(formattedMessage);
}
private DirectoryInfo testsuitePath;
protected DirectoryInfo GetTestsuitePath()
{
Print("Checking whether skyscraper-testsuite exists...");
if (Directory.Exists("skyscraper-testsuite"))
{
testsuitePath = new DirectoryInfo("skyscraper8-testsuite");
return testsuitePath;
}
Print("Checking TESTSUITE_PATH...");
string directory = Environment.GetEnvironmentVariable("TESTSUITE_PATH");
if (!string.IsNullOrEmpty(directory))
{
testsuitePath = new DirectoryInfo(directory);
return testsuitePath;
}
FileInfo pointerFile = new FileInfo("skyscraper8-testsuite-path.txt");
Print("Checking {0}...",pointerFile.FullName);
if (File.Exists(pointerFile.FullName))
{
string readAllText = File.ReadAllText(pointerFile.FullName);
readAllText = readAllText.Trim();
testsuitePath = new DirectoryInfo(readAllText);
return testsuitePath;
}
Assert.Inconclusive("Could not find the test suite path.");
return null;
}
protected FileStream GetStreamSample(string streamName)
{
DirectoryInfo testsuitePath = GetTestsuitePath();
string combine = Path.Combine(testsuitePath.FullName, streamName);
FileInfo result = new FileInfo(combine);
if (!result.Exists)
{
Assert.Inconclusive(String.Format("Could not find {0}",result.FullName));
return null;
}
return result.OpenRead();
}
protected void AssertTargetInvocation<T>(Action action)
where T: Exception
{
Assert.Throws<T>(() =>
{
try
{
action();
}
catch (TargetInvocationException tie)
{
throw tie.InnerException;
}
});
}
}

View File

@ -1,63 +0,0 @@
//------------------------------------------------------------------------------
// <auto-generated>
// Dieser Code wurde von einem Tool generiert.
// Laufzeitversion:4.0.30319.42000
//
// Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn
// der Code erneut generiert wird.
// </auto-generated>
//------------------------------------------------------------------------------
namespace skyscraper8.Tests.Properties {
using System;
/// <summary>
/// Eine stark typisierte Ressourcenklasse zum Suchen von lokalisierten Zeichenfolgen usw.
/// </summary>
// 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()]
internal class Resources {
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal Resources() {
}
/// <summary>
/// Gibt die zwischengespeicherte ResourceManager-Instanz zurück, die von dieser Klasse verwendet wird.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager {
get {
if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("skyscraper8.Tests.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// Überschreibt die CurrentUICulture-Eigenschaft des aktuellen Threads für alle
/// Ressourcenzuordnungen, die diese stark typisierte Ressourcenklasse verwenden.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set {
resourceCulture = value;
}
}
}
}

View File

@ -1,101 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 1.3
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">1.3</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1">this is my long string</data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
[base64 mime encoded serialized .NET Framework object]
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
[base64 mime encoded string representing a byte array form of the .NET Framework object]
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>1.3</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@ -1,25 +0,0 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using skyscraper8.Ietf.Rfc4566_SDP;
namespace skyscraper8.Tests.ResourceTests
{
[TestClass]
public class SdpTest : Feyllure
{
[TestMethod]
public void TestSdpParser()
{
MemoryStream ms = new MemoryStream(Resources1.sdpTest, false);
Assert.IsTrue(SDP.IsSDP(ms));
SDP loaded = SDP.Load(ms);
Assert.IsNotNull(loaded);
}
}
}

View File

@ -1,42 +0,0 @@
using System.IO;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using skyscraper5.Mpeg2;
using skyscraper5.Skyscraper.Scraper;
using skyscraper5.Skyscraper.Scraper.Storage.InMemory;
using skyscraper8.Skyscraper.Scraper.Storage;
namespace skyscraper8.Tests.ResourceTests
{
[TestClass]
public class SkyscraperTests : Feyllure
{
[TestMethod]
public void RunTestPatterns()
{
byte[][] buffers = new byte[][]
{
Resources1.test_1packet_01,
Resources1.test_2packets_02_03,
Resources1.test_3packets_04_05_06
};
InMemoryScraperStorageFactory imssf = new InMemoryScraperStorageFactory();
foreach (byte[] buffer in buffers)
{
TsContext mpeg2 = new TsContext();
DataStorage ds = new InMemoryScraperStorageFactory().CreateDataStorage();
ObjectStorage os = new NullObjectStorage();
SkyscraperContext skyscraper = new SkyscraperContext(mpeg2, ds, os);
MemoryStream ms = new MemoryStream(buffer, false);
skyscraper.InitalizeFilterChain();
skyscraper.IngestFromStream(ms);
ms.Close();
ms.Dispose();
}
}
}
}

View File

@ -1,47 +0,0 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<!-- Target .NET 8 -->
<TargetFramework>net8.0</TargetFramework>
<!-- Mark this as a test project -->
<IsTestProject>true</IsTestProject>
</PropertyGroup>
<ItemGroup>
<!-- MSTest framework -->
<PackageReference Include="Allure.Net.Commons" Version="2.14.1" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.0.1" />
<PackageReference Include="MSTest.TestAdapter" Version="4.0.2" />
<PackageReference Include="MSTest.TestFramework" Version="4.0.2" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\skyscraper8\skyscraper8.csproj" />
</ItemGroup>
<ItemGroup>
<Compile Update="Properties\Resources.Designer.cs">
<DesignTime>True</DesignTime>
<AutoGen>True</AutoGen>
<DependentUpon>Resources.resx</DependentUpon>
</Compile>
<Compile Update="Resources1.Designer.cs">
<DesignTime>True</DesignTime>
<AutoGen>True</AutoGen>
<DependentUpon>Resources1.resx</DependentUpon>
</Compile>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Update="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
</EmbeddedResource>
<EmbeddedResource Update="Resources1.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources1.Designer.cs</LastGenOutput>
</EmbeddedResource>
</ItemGroup>
</Project>

View File

@ -65,7 +65,7 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "skyscraper8.UI.MonoGame", "
EndProject 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}" 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 EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "skyscraper8.Tests", "skyscraper8.Tests\skyscraper8.Tests.csproj", "{84EE9FCD-2C7F-DF84-C1BA-99D018CE9412}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "skyscraper8.Tests.NUnit", "skyscraper8.Tests.NUnit\skyscraper8.Tests.NUnit.csproj", "{5FB2AA76-580E-4343-B155-5D596DDC27F2}"
EndProject EndProject
Global Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution GlobalSection(SolutionConfigurationPlatforms) = preSolution
@ -143,10 +143,10 @@ Global
{1A29F6E6-4B6A-DCCD-1DF1-AA8D020E17D2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {1A29F6E6-4B6A-DCCD-1DF1-AA8D020E17D2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{1A29F6E6-4B6A-DCCD-1DF1-AA8D020E17D2}.Release|Any CPU.ActiveCfg = Release|Any CPU {1A29F6E6-4B6A-DCCD-1DF1-AA8D020E17D2}.Release|Any CPU.ActiveCfg = Release|Any CPU
{1A29F6E6-4B6A-DCCD-1DF1-AA8D020E17D2}.Release|Any CPU.Build.0 = Release|Any CPU {1A29F6E6-4B6A-DCCD-1DF1-AA8D020E17D2}.Release|Any CPU.Build.0 = Release|Any CPU
{84EE9FCD-2C7F-DF84-C1BA-99D018CE9412}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {5FB2AA76-580E-4343-B155-5D596DDC27F2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{84EE9FCD-2C7F-DF84-C1BA-99D018CE9412}.Debug|Any CPU.Build.0 = Debug|Any CPU {5FB2AA76-580E-4343-B155-5D596DDC27F2}.Debug|Any CPU.Build.0 = Debug|Any CPU
{84EE9FCD-2C7F-DF84-C1BA-99D018CE9412}.Release|Any CPU.ActiveCfg = Release|Any CPU {5FB2AA76-580E-4343-B155-5D596DDC27F2}.Release|Any CPU.ActiveCfg = Release|Any CPU
{84EE9FCD-2C7F-DF84-C1BA-99D018CE9412}.Release|Any CPU.Build.0 = Release|Any CPU {5FB2AA76-580E-4343-B155-5D596DDC27F2}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection EndGlobalSection
GlobalSection(SolutionProperties) = preSolution GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE HideSolutionNode = FALSE

View File

@ -8,6 +8,7 @@
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AAssert_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FSourcesCache_003F62bb4746d7d14dc1cd4274a28788572a7a4641bd3a7d5736479c9697bcb4794_003FAssert_002Ecs/@EntryIndexedValue">ForceIncluded</s:String> <s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AAssert_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FSourcesCache_003F62bb4746d7d14dc1cd4274a28788572a7a4641bd3a7d5736479c9697bcb4794_003FAssert_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AAssert_002EInconclusive_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FSourcesCache_003F8e305e26401afcd395b5be2da0e23d61432655dc5f2c2e5e6d5bd873bb0cb90_003FAssert_002EInconclusive_002Ecs/@EntryIndexedValue">ForceIncluded</s:String> <s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AAssert_002EInconclusive_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FSourcesCache_003F8e305e26401afcd395b5be2da0e23d61432655dc5f2c2e5e6d5bd873bb0cb90_003FAssert_002EInconclusive_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AAssert_002EThrowsException_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FSourcesCache_003Fe6930caf46f7fcaa445fdd26a3884170a45a4766298259e7a29bae560adef_003FAssert_002EThrowsException_002Ecs/@EntryIndexedValue">ForceIncluded</s:String> <s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AAssert_002EThrowsException_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FSourcesCache_003Fe6930caf46f7fcaa445fdd26a3884170a45a4766298259e7a29bae560adef_003FAssert_002EThrowsException_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ABeforeAndAfterTestCommand_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2026_002E1_003Fresharper_002Dhost_003FSourcesCache_003Ff536671e825030c7f17fbf3f75511651c281f2429edc8fd6ea660418f825949_003FBeforeAndAfterTestCommand_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ACultureInfo_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F57d616db882b441b8c50720b4477e03db2e200_003F8e_003Fe58e5b4a_003FCultureInfo_002Ecs/@EntryIndexedValue">ForceIncluded</s:String> <s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ACultureInfo_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F57d616db882b441b8c50720b4477e03db2e200_003F8e_003Fe58e5b4a_003FCultureInfo_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ADictionary_00602_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F57d616db882b441b8c50720b4477e03db2e200_003F83_003Fc73c45bc_003FDictionary_00602_002Ecs/@EntryIndexedValue">ForceIncluded</s:String> <s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ADictionary_00602_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F57d616db882b441b8c50720b4477e03db2e200_003F83_003Fc73c45bc_003FDictionary_00602_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ADictionary_00602_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2026_002E1_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003Ffd0d7846a16a4147ad767b7c3ae2cf57b2e200_003F4a_003Ff8de026f_003FDictionary_00602_002Ecs/@EntryIndexedValue">ForceIncluded</s:String> <s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ADictionary_00602_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2026_002E1_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003Ffd0d7846a16a4147ad767b7c3ae2cf57b2e200_003F4a_003Ff8de026f_003FDictionary_00602_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>

View File

@ -14,5 +14,6 @@ namespace skyscraper8.Atsc.A331
void OnAtsc3Detected(); void OnAtsc3Detected();
void OnAtsc3ServiceList(sltType slt); void OnAtsc3ServiceList(sltType slt);
void OnAtsc3FileDelivery(IPEndPoint destination, ulong tsi, ulong toi, FluteListener targetListener, GuessedFluteDataType guessedFluteDataType, string outFileName); void OnAtsc3FileDelivery(IPEndPoint destination, ulong tsi, ulong toi, FluteListener targetListener, GuessedFluteDataType guessedFluteDataType, string outFileName);
void OnAtsc3MbmsEnvelope(MbmsEnvelope mbmsEnvelope);
} }
} }

View File

@ -169,6 +169,10 @@ namespace skyscraper8.Atsc.A331
case GuessedFluteDataType.Mime: case GuessedFluteDataType.Mime:
MimeMessage mimeMessage = MimeMessage.Load(targetListener.ToStream()); MimeMessage mimeMessage = MimeMessage.Load(targetListener.ToStream());
MbmsEnvelope mbmsEnvelope = new MbmsEnvelope(mimeMessage); MbmsEnvelope mbmsEnvelope = new MbmsEnvelope(mimeMessage);
if (mbmsEnvelope.HasContent)
{
eventHandler.OnAtsc3MbmsEnvelope(mbmsEnvelope);
}
filenames.LearnFilename(mbmsEnvelope); filenames.LearnFilename(mbmsEnvelope);
return true; return true;
case GuessedFluteDataType.Stuffing: case GuessedFluteDataType.Stuffing:

View File

@ -1,5 +1,6 @@
using MimeKit; using MimeKit;
using Schemas; using Schemas;
using skyscraper5.Skyscraper;
using skyscraper8.Atsc.A331.Schema; using skyscraper8.Atsc.A331.Schema;
using skyscraper8.MpegDash.Schema; using skyscraper8.MpegDash.Schema;
@ -48,4 +49,27 @@ public class MbmsEnvelope
public MPDtype MediaPresentationDescription { get; private set; } public MPDtype MediaPresentationDescription { get; private set; }
public metadataEnvelopeType MetadataEnvelope {get; private set;} public metadataEnvelopeType MetadataEnvelope {get; private set;}
public bool HasContent
{
get
{
if (Atsc3RouteUsd != null)
return true;
if (Atsc3Stsid != null)
return true;
if (Atsc3Held != null)
return true;
if (MediaPresentationDescription != null)
return true;
if (MetadataEnvelope != null)
return true;
return false;
}
}
} }

View File

@ -53,5 +53,17 @@ namespace skyscraper8.Skyscraper.Net.VirtualNetworks
return child; return child;
} }
} }
public ushort? GetPid()
{
VirtualNetworkIdentifier virtualNetworkIdentifier = wrapped;
PidNetworkIdentifier pid = wrapped as PidNetworkIdentifier;
if (pid != null)
{
return pid.PID;
}
return null;
}
} }
} }

View File

@ -21,6 +21,8 @@ using skyscraper5.src.InteractionChannel.Model2;
using skyscraper5.src.Skyscraper.FrequencyListGenerator; using skyscraper5.src.Skyscraper.FrequencyListGenerator;
using skyscraper5.T2MI.Packets; using skyscraper5.T2MI.Packets;
using skyscraper5.Teletext.Wss; using skyscraper5.Teletext.Wss;
using skyscraper8.Atsc.A331;
using skyscraper8.Atsc.A331.Schema;
using skyscraper8.DvbNip; using skyscraper8.DvbNip;
using skyscraper8.DvbNip.UiIntegration; using skyscraper8.DvbNip.UiIntegration;
using skyscraper8.DvbSis; using skyscraper8.DvbSis;
@ -251,5 +253,7 @@ namespace skyscraper5.Skyscraper.Scraper
void WneStoryError(uint sessionId); void WneStoryError(uint sessionId);
void WneStoryProgress(uint sessionId, string filename, long fileCaught, uint fileSize); void WneStoryProgress(uint sessionId, string filename, long fileCaught, uint fileSize);
void WneStoryComplete(uint sessionId, string filename); void WneStoryComplete(uint sessionId, string filename);
void Atsc3Service(sltType slt);
void Atsc3MbmsEnvelope(MbmsEnvelope mbmsEnvelope);
} }
} }

View File

@ -106,7 +106,8 @@ namespace skyscraper5.Skyscraper.Scraper
UpdateNotificationEventHandler, DataCarouselEventHandler, RdsEventHandler, IScte35EventHandler, UpdateNotificationEventHandler, DataCarouselEventHandler, RdsEventHandler, IScte35EventHandler,
IAutodetectionEventHandler, IRstEventHandler, IRntEventHandler, IMultiprotocolEncapsulationEventHandler, ObjectCarouselEventHandler, T2MIEventHandler, IAutodetectionEventHandler, IRstEventHandler, IRntEventHandler, IMultiprotocolEncapsulationEventHandler, ObjectCarouselEventHandler, T2MIEventHandler,
IDisposable, IFrameGrabberEventHandler, IntEventHandler, IRctEventHandler, ISkyscraperContext, IDocsisEventHandler, AbertisDecoderEventHandler, Id3Handler, IDisposable, IFrameGrabberEventHandler, IntEventHandler, IRctEventHandler, ISkyscraperContext, IDocsisEventHandler, AbertisDecoderEventHandler, Id3Handler,
InteractionChannelHandler, SgtEventHandler, IDvbNipEventHandler, UleEventHandler, OtvSsuHandler, NdsSsuHandler, ISubTsHandler, ILldpFrameHandler, SisHandler, IWneHandler, IAtscPlpEventHandler, IAtsc3EventHandler InteractionChannelHandler, SgtEventHandler, IDvbNipEventHandler, UleEventHandler, OtvSsuHandler, NdsSsuHandler, ISubTsHandler, ILldpFrameHandler, SisHandler, IWneHandler,
IAtscPlpEventHandler, IAtsc3EventHandler
{ {
public const bool ALLOW_STREAM_TYPE_AUTODETECTION = true; public const bool ALLOW_STREAM_TYPE_AUTODETECTION = true;
public const bool ALLOW_FFMPEG_FRAMEGRABBER = true; public const bool ALLOW_FFMPEG_FRAMEGRABBER = true;
@ -3034,6 +3035,15 @@ namespace skyscraper5.Skyscraper.Scraper
{ {
TeiOnOffFilter.SetExempt(pidId.PID); TeiOnOffFilter.SetExempt(pidId.PID);
} }
AtmAdaptationLayer5NetworkIdentifier aal5Id = network as AtmAdaptationLayer5NetworkIdentifier;
if (aal5Id != null)
{
ushort? pid = aal5Id.GetPid();
if (pid != null)
{
TeiOnOffFilter.SetExempt(pid.Value);
}
}
if (etherType <= 1500) if (etherType <= 1500)
@ -3095,7 +3105,7 @@ namespace skyscraper5.Skyscraper.Scraper
ushort newEtherType = BitConverter.ToUInt16(contents, 26); ushort newEtherType = BitConverter.ToUInt16(contents, 26);
byte[] newPacket = new byte[contents.Length - 28]; byte[] newPacket = new byte[contents.Length - 28];
Array.Copy(contents, 28, newPacket, 0, newPacket.Length); Array.Copy(contents, 28, newPacket, 0, newPacket.Length);
OnEthernetFrame(AtmAdaptationLayer5NetworkIdentifier.GetWrap(network), destination, source, newEtherType, newPacket); OnEthernetFrame(network, destination, source, newEtherType, newPacket);
} }
return; return;
case 0x94ad: case 0x94ad:
@ -3580,12 +3590,14 @@ namespace skyscraper5.Skyscraper.Scraper
public void OnAtsc3Detected() public void OnAtsc3Detected()
{ {
LogEvent(SkyscraperContextEvent.Atsc3Detected); LogEvent(SkyscraperContextEvent.Atsc3Detected);
UiJunction?.EnableUiFeature(SkyscraperUiFeature.Atsc3Analysis);
} }
public void OnAtsc3ServiceList(sltType slt) public void OnAtsc3ServiceList(sltType slt)
{ {
foreach (serviceType service in slt.Service) foreach (serviceType service in slt.Service)
{ {
UiJunction?.Atsc3Service(slt);
if (DataStorage.UpsertAtsc3Service(service)) if (DataStorage.UpsertAtsc3Service(service))
{ {
LogEvent(SkyscraperContextEvent.Atsc3ServiceFound, service.shortServiceName); LogEvent(SkyscraperContextEvent.Atsc3ServiceFound, service.shortServiceName);
@ -3604,5 +3616,25 @@ namespace skyscraper5.Skyscraper.Scraper
stream.Dispose(); stream.Dispose();
} }
} }
public void OnAtsc3MbmsEnvelope(MbmsEnvelope mbmsEnvelope)
{
UiJunction?.Atsc3MbmsEnvelope(mbmsEnvelope);
if (mbmsEnvelope.Atsc3Held != null)
{
foreach (HTMLEntryPackageType htmlEntryPackageType in mbmsEnvelope.Atsc3Held.HTMLEntryPackage)
{
if (DataStorage.UpsertAtsc3Held(htmlEntryPackageType))
{
LogEvent(SkyscraperContextEvent.Atsc3Held, htmlEntryPackageType.appContextId);
}
}
}
//ROUTE USD has no clear identifier.
//STSID has no clear identifier.
//MPD has no clear identifier.
//Metadata Envelope has no clear identifier
}
} }
} }

View File

@ -107,6 +107,7 @@
DvbSisDaughterSiteAdapterConfiguration, DvbSisDaughterSiteAdapterConfiguration,
Atsc3Detected, Atsc3Detected,
Atsc3ServiceFound, Atsc3ServiceFound,
Atsc3Segment Atsc3Segment,
Atsc3Held
} }
} }

View File

@ -15,6 +15,7 @@ namespace skyscraper8.Skyscraper.Scraper
GseAnalysis, GseAnalysis,
DvbNipAnalyis, DvbNipAnalyis,
RcsAnalysis, RcsAnalysis,
LlcSnapTrafficAnalysis LlcSnapTrafficAnalysis,
Atsc3Analysis
} }
} }

View File

@ -204,5 +204,12 @@ namespace skyscraper8.Skyscraper.Scraper.Storage
/// <param name="service">An ATSC3 Service</param> /// <param name="service">An ATSC3 Service</param>
/// <returns>true if the service was added or was changed, false if no changes in the DB were made.</returns> /// <returns>true if the service was added or was changed, false if no changes in the DB were made.</returns>
bool UpsertAtsc3Service(serviceType service); bool UpsertAtsc3Service(serviceType service);
/// <summary>
/// Inserts or Updates the HELD table row of an ATSC 3 service.
/// </summary>
/// <param name="htmlEntryPackageType">A row of a HELD table</param>
/// <returns>true if the service was added or was changed</returns>
bool UpsertAtsc3Held(HTMLEntryPackageType htmlEntryPackageType);
} }
} }

View File

@ -1788,6 +1788,11 @@ namespace skyscraper5.Skyscraper.Scraper.Storage.Filesystem
throw new NotImplementedException(); throw new NotImplementedException();
} }
public bool UpsertAtsc3Held(HTMLEntryPackageType htmlEntryPackageType)
{
throw new NotImplementedException();
}
public RfSpectrumData GetRfSpectrum(Guid jobGuid) public RfSpectrumData GetRfSpectrum(Guid jobGuid)
{ {
string filename = Path.Combine(rootDirectory.FullName, "rf", jobGuid.ToString() + ".rf"); string filename = Path.Combine(rootDirectory.FullName, "rf", jobGuid.ToString() + ".rf");

View File

@ -1905,5 +1905,22 @@ namespace skyscraper5.Skyscraper.Scraper.Storage.InMemory
return true; return true;
} }
} }
private Dictionary<string, HTMLEntryPackageType> _atsc3Helds;
public bool UpsertAtsc3Held(HTMLEntryPackageType htmlEntryPackageType)
{
if (_atsc3Helds == null)
_atsc3Helds = new Dictionary<string, HTMLEntryPackageType>();
if (_atsc3Helds.ContainsKey(htmlEntryPackageType.appContextId))
{
return false;
}
else
{
_atsc3Helds.Add(htmlEntryPackageType.appContextId, htmlEntryPackageType);
return true;
}
}
} }
} }