From ed3f2732384c3ca9dce43dd0a5569b1a1aef4695 Mon Sep 17 00:00:00 2001 From: feyris-tan <4116042+feyris-tan@users.noreply.github.com> Date: Sun, 25 May 2025 21:11:44 +0200 Subject: [PATCH] Built tests for TransmitChannelConfigurationObject and UpstreamChannelDescriptor --- skyscraper8.Tests/DocsisTests.cs | 33 ++++++++++++++++-- skyscraper8.Tests/DocsisTestsLong.cs | 12 +++++-- .../Properties/Resources.Designer.cs | 20 +++++++++++ skyscraper8.Tests/Properties/Resources.resx | 6 ++++ .../TransmitChannelConfigurationObject.bin | Bin 0 -> 15 bytes .../UpstreamChannelDescriptorTest.bin | Bin 0 -> 211 bytes .../Docsis/AnnexC/CommonTlvEncodings.cs | 11 +++++- .../T29_V3_UpstreamChannelDescriptor.cs | 5 +++ skyscraper8/Skyscraper/IO/M3U8Stream.cs | 2 ++ 9 files changed, 83 insertions(+), 6 deletions(-) create mode 100644 skyscraper8.Tests/Resources/TransmitChannelConfigurationObject.bin create mode 100644 skyscraper8.Tests/Resources/UpstreamChannelDescriptorTest.bin diff --git a/skyscraper8.Tests/DocsisTests.cs b/skyscraper8.Tests/DocsisTests.cs index f04062b..6faf0bd 100644 --- a/skyscraper8.Tests/DocsisTests.cs +++ b/skyscraper8.Tests/DocsisTests.cs @@ -25,7 +25,7 @@ namespace skyscraper8.Tests public class DocsisTests { [Fact] - public void AAA_ModemCapabilitiesEncodingTest() + public void ModemCapabilitiesEncoding() { byte[] buffer = Resources.ModemCapabilitiesEncodingTest; ModemCapabilitiesEncoding modemCapabilitiesEncoding = new ModemCapabilitiesEncoding(buffer); @@ -33,7 +33,7 @@ namespace skyscraper8.Tests } [Fact] - public void AAB_MultipartRegistrationResponseTest() + public void MultipartRegistrationResponse() { Random rng = new Random(); @@ -53,7 +53,7 @@ namespace skyscraper8.Tests } [Fact] - public void AAC_MacManagement_4_45() + public void MacManagement_4_45() { DocsisEventHandlerImpl docsisEventHandler = new DocsisEventHandlerImpl(); DocsisEnvironment environment = new DocsisEnvironment(docsisEventHandler); @@ -71,5 +71,32 @@ namespace skyscraper8.Tests environment.PushMacManagementMessage(testPayload, 4, 45, source, target, testPayload); } + + [Fact] + public void InvalidUpstreamChannelDescriptorTest() + { + byte[] testPayload = Resources.UpstreamChannelDescriptorTest; + + Random rng = new Random(); + byte[] sourceBuffer = new byte[6]; + rng.NextBytes(sourceBuffer); + PhysicalAddress source = new PhysicalAddress(sourceBuffer); + + byte[] targetBuffer = new byte[6]; + rng.NextBytes(targetBuffer); + PhysicalAddress target = new PhysicalAddress(targetBuffer); + + UpstreamChannelDescriptor ucd = new UpstreamChannelDescriptor(source, target, testPayload); + Assert.False(ucd.Valid); + } + + [Fact] + public void TransmitChannelConfigurationObjectTest() + { + byte[] testPayload = Resources.TransmitChannelConfigurationObject; + + CommonTlvEncodingObject.TransmitChannelConfigurationObject child = new CommonTlvEncodingObject.TransmitChannelConfigurationObject(testPayload); + Assert.True(child.Valid); + } } } diff --git a/skyscraper8.Tests/DocsisTestsLong.cs b/skyscraper8.Tests/DocsisTestsLong.cs index 78f258b..b1467f0 100644 --- a/skyscraper8.Tests/DocsisTestsLong.cs +++ b/skyscraper8.Tests/DocsisTestsLong.cs @@ -20,7 +20,11 @@ namespace skyscraper8.Tests public void TestLongBoiSingleStreams() { DirectoryInfo di = new DirectoryInfo("D:\\DocsisDemo"); - Skip.If(!di.Exists, "Files not available."); + if (!di.Exists) + { + Debug.WriteLine("Files not available!"); + return; + } FilesystemScraperStorageFactory storageFactory = new FilesystemScraperStorageFactory(); storageFactory.Directory = "docsis_longboi"; @@ -34,7 +38,11 @@ namespace skyscraper8.Tests public void TestM3u8Stream() { FileInfo docsisM3u8 = new FileInfo("D:\\DocsisDemo\\docsis.m3u8"); - Skip.If(!docsisM3u8.Exists, "Index file not available."); + if (!docsisM3u8.Exists) + { + Debug.WriteLine("File not available!"); + return; + } FileInfo alreadyTested = new FileInfo("docsis_m3u8_test.complete"); if (alreadyTested.Exists) diff --git a/skyscraper8.Tests/Properties/Resources.Designer.cs b/skyscraper8.Tests/Properties/Resources.Designer.cs index f7f2405..f36aaee 100644 --- a/skyscraper8.Tests/Properties/Resources.Designer.cs +++ b/skyscraper8.Tests/Properties/Resources.Designer.cs @@ -129,5 +129,25 @@ namespace skyscraper8.Tests.Properties { return ((byte[])(obj)); } } + + /// + /// Sucht eine lokalisierte Ressource vom Typ System.Byte[]. + /// + internal static byte[] TransmitChannelConfigurationObject { + get { + object obj = ResourceManager.GetObject("TransmitChannelConfigurationObject", resourceCulture); + return ((byte[])(obj)); + } + } + + /// + /// Sucht eine lokalisierte Ressource vom Typ System.Byte[]. + /// + internal static byte[] UpstreamChannelDescriptorTest { + get { + object obj = ResourceManager.GetObject("UpstreamChannelDescriptorTest", resourceCulture); + return ((byte[])(obj)); + } + } } } diff --git a/skyscraper8.Tests/Properties/Resources.resx b/skyscraper8.Tests/Properties/Resources.resx index 25b3e13..b384543 100644 --- a/skyscraper8.Tests/Properties/Resources.resx +++ b/skyscraper8.Tests/Properties/Resources.resx @@ -139,4 +139,10 @@ ..\Resources\test-3packets-04-05-06.ts;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + ..\Resources\TransmitChannelConfigurationObject.bin;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + ..\Resources\UpstreamChannelDescriptorTest.bin;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + \ No newline at end of file diff --git a/skyscraper8.Tests/Resources/TransmitChannelConfigurationObject.bin b/skyscraper8.Tests/Resources/TransmitChannelConfigurationObject.bin new file mode 100644 index 0000000000000000000000000000000000000000..926d9c27cb741205e0e6b17756285f3edfe27f02 GIT binary patch literal 15 WcmZQ%WMg7vVrFFEWHjSqJOTg$%K;$( literal 0 HcmV?d00001 diff --git a/skyscraper8.Tests/Resources/UpstreamChannelDescriptorTest.bin b/skyscraper8.Tests/Resources/UpstreamChannelDescriptorTest.bin new file mode 100644 index 0000000000000000000000000000000000000000..b2b5c23401523a2752cd267106f73f29da0c8879 GIT binary patch literal 211 zcmZ|I!41MN5JXY`VRx~eKoL1df>xjk%Ai{)gJ2{iOY!~9pXDg-6(%@C;X1=fIr(aU y&_O&+DI5=$k-il0rqjb@=G5T!)fua(E UpstreamDropPacketClassificationEncoding { get; set; } public List TransmitChannelConfiguration { get; set; } - public class TransmitChannelConfigurationObject + public class TransmitChannelConfigurationObject : Validatable { public TransmitChannelConfigurationObject(byte[] buffer) { @@ -116,6 +117,12 @@ namespace skyscraper5.Docsis.AnnexC case 7: InitializationTechnique = (InitalizationTechniqueEnum?)v[0]; break; + case 9: + DynamicRangeWindow = v[0]; + break; + case 10: + P16Hi = v[0]; + break; case 11: ListOfIucs = v; break; @@ -124,6 +131,7 @@ namespace skyscraper5.Docsis.AnnexC throw new NotImplementedException(string.Format("TCC TLV Type {0}", type)); } } + Valid = true; } public byte[] ListOfIucs { get; set; } @@ -146,6 +154,7 @@ namespace skyscraper5.Docsis.AnnexC public byte? TccReferenceId { get; set; } public InitalizationTechniqueEnum? InitializationTechnique { get; } public UpstreamChannelDescriptor UpstreamChannelDescriptor { get; } + public byte DynamicRangeWindow { get; } } public byte KeySequenceNumber { get; set; } diff --git a/skyscraper8/Docsis/MacManagement/T29_V3_UpstreamChannelDescriptor.cs b/skyscraper8/Docsis/MacManagement/T29_V3_UpstreamChannelDescriptor.cs index c7943a2..6d7d793 100644 --- a/skyscraper8/Docsis/MacManagement/T29_V3_UpstreamChannelDescriptor.cs +++ b/skyscraper8/Docsis/MacManagement/T29_V3_UpstreamChannelDescriptor.cs @@ -115,6 +115,11 @@ namespace skyscraper5.Docsis.MacManagement RandomizationSeed = BitConverter.ToUInt32(v2, 0); break; default: + if (type > 34) + { + Valid = false; + return; + } throw new NotImplementedException(String.Format("{0} TLV type {1}", nameof(UpstreamChannelDescriptor), type)); } diff --git a/skyscraper8/Skyscraper/IO/M3U8Stream.cs b/skyscraper8/Skyscraper/IO/M3U8Stream.cs index 938bf01..df939de 100644 --- a/skyscraper8/Skyscraper/IO/M3U8Stream.cs +++ b/skyscraper8/Skyscraper/IO/M3U8Stream.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Diagnostics; using System.Linq; using System.Net; using System.Text; @@ -68,6 +69,7 @@ namespace skyscraper8.Skyscraper.IO private Stream GetSegmentStream(string segmentName) { Console.WriteLine("open segment {0}", segmentName); + Debug.WriteLine(String.Format("open segment {0}", segmentName)); if (source.StartsWith("http://") || source.StartsWith("https://")) { return webClient.GetStreamAsync(segmentName).Result;