From 92364dbb030f9be1d95f42ba610f5c75813c45ce Mon Sep 17 00:00:00 2001 From: feyris-tan <4116042+feyris-tan@users.noreply.github.com> Date: Sat, 24 May 2025 10:58:50 +0200 Subject: [PATCH] Added a test for pushing a Mac Management Message. --- .../DocsisTests/DocsisEventHandlerImpl.cs | 40 +++++++++++ skyscraper8.Tests/DocsisTests.cs | 63 +++++++----------- skyscraper8.Tests/DocsisTestsLong.cs | 60 +++++++++++++++++ .../Properties/Resources.Designer.cs | 10 +++ skyscraper8.Tests/Properties/Resources.resx | 3 + ...shMacManagementMessage_Version4_Type45.bin | Bin 0 -> 1251 bytes skyscraper8/Docsis/DocsisEnvironment.cs | 7 +- skyscraper8/Docsis/IDocsisEventHandler.cs | 2 +- 8 files changed, 142 insertions(+), 43 deletions(-) create mode 100644 skyscraper8.Tests/ClassDependencies/DocsisTests/DocsisEventHandlerImpl.cs create mode 100644 skyscraper8.Tests/DocsisTestsLong.cs create mode 100644 skyscraper8.Tests/Resources/PushMacManagementMessage_Version4_Type45.bin diff --git a/skyscraper8.Tests/ClassDependencies/DocsisTests/DocsisEventHandlerImpl.cs b/skyscraper8.Tests/ClassDependencies/DocsisTests/DocsisEventHandlerImpl.cs new file mode 100644 index 0000000..d517961 --- /dev/null +++ b/skyscraper8.Tests/ClassDependencies/DocsisTests/DocsisEventHandlerImpl.cs @@ -0,0 +1,40 @@ +using skyscraper5.Docsis; +using skyscraper5.Docsis.MacManagement; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net; +using System.Net.NetworkInformation; +using System.Text; +using System.Threading.Tasks; + +namespace skyscraper8.Tests.ClassDependencies.DocsisTests +{ + internal class DocsisEventHandlerImpl : IDocsisEventHandler + { + public void OnCmtsTimestamp(PhysicalAddress source, uint timing) + { + throw new NotImplementedException(); + } + + public void OnDownstreamChannel(PhysicalAddress physicalAddress, MacDomainDescriptor.DownstreamActiveChannel downstreamActiveChannel) + { + throw new NotImplementedException(); + } + + public void OnLearnedIpFromMac(PhysicalAddress arpHeaderSenderHardwareAddress, IPAddress arpHeaderSenderProtocolAddress) + { + throw new NotImplementedException(); + } + + public void OnParticipantDetected(PhysicalAddress pa) + { + throw new NotImplementedException(); + } + + public void OnUpstreamChannel(UpstreamChannelDescriptor mmm) + { + throw new NotImplementedException(); + } + } +} diff --git a/skyscraper8.Tests/DocsisTests.cs b/skyscraper8.Tests/DocsisTests.cs index 45a8b70..f04062b 100644 --- a/skyscraper8.Tests/DocsisTests.cs +++ b/skyscraper8.Tests/DocsisTests.cs @@ -1,12 +1,15 @@ using skyscraper5; +using skyscraper5.Docsis; using skyscraper5.Docsis.AnnexC; using skyscraper5.Docsis.MacManagement; using skyscraper5.Mpeg2; +using skyscraper5.Skyscraper.Plugins; using skyscraper5.Skyscraper.Scraper; using skyscraper5.Skyscraper.Scraper.Storage; using skyscraper5.Skyscraper.Scraper.Storage.Filesystem; using skyscraper5.Skyscraper.Scraper.Storage.InMemory; using skyscraper8.Skyscraper.IO; +using skyscraper8.Tests.ClassDependencies.DocsisTests; using skyscraper8.Tests.Properties; using System; using System.Collections.Generic; @@ -21,46 +24,6 @@ namespace skyscraper8.Tests { public class DocsisTests { - [Fact] - public void TestLongBoiSingleStreams() - { - DirectoryInfo di = new DirectoryInfo("D:\\DocsisDemo"); - Skip.If(!di.Exists, "Files not available."); - - FilesystemScraperStorageFactory storageFactory = new FilesystemScraperStorageFactory(); - storageFactory.Directory = "docsis_longboi"; - - Passing passing = new Passing(); - passing.ScraperStorage = storageFactory.CreateScraperStroage(); - passing.MassImportDirectory(di); - } - - [Fact] - public void TestM3u8Stream() - { - FileInfo docsisM3u8 = new FileInfo("D:\\DocsisDemo\\docsis.m3u8"); - Skip.If(!docsisM3u8.Exists, "Index file not available."); - - FileInfo alreadyTested = new FileInfo("docsis_m3u8_test.complete"); - if (alreadyTested.Exists) - { - Debug.WriteLine("Hello!"); - return; - } - - - M3U8Stream m3u8 = new M3U8Stream(docsisM3u8.FullName); - - TsContext tsContext = new TsContext(); - InMemoryScraperStorageFactory storageFactory = new InMemoryScraperStorageFactory(); - IScraperStroage scraperStorage = storageFactory.CreateScraperStroage(); - SkyscraperContext skyscraperContext = new SkyscraperContext(tsContext, null, scraperStorage); - skyscraperContext.InitalizeFilterChain(); - skyscraperContext.IngestFromStream(m3u8); - - File.WriteAllText("docsis_m3u8_test.complete", "1"); - } - [Fact] public void AAA_ModemCapabilitiesEncodingTest() { @@ -88,5 +51,25 @@ namespace skyscraper8.Tests T45_V4_MultipartRegistrationResponse test = new T45_V4_MultipartRegistrationResponse(source, target, buffer); Assert.True(test.Valid); } + + [Fact] + public void AAC_MacManagement_4_45() + { + DocsisEventHandlerImpl docsisEventHandler = new DocsisEventHandlerImpl(); + DocsisEnvironment environment = new DocsisEnvironment(docsisEventHandler); + + byte[] testPayload = Resources.PushMacManagementMessage_Version4_Type45; + + 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); + + environment.PushMacManagementMessage(testPayload, 4, 45, source, target, testPayload); + } } } diff --git a/skyscraper8.Tests/DocsisTestsLong.cs b/skyscraper8.Tests/DocsisTestsLong.cs new file mode 100644 index 0000000..78f258b --- /dev/null +++ b/skyscraper8.Tests/DocsisTestsLong.cs @@ -0,0 +1,60 @@ +using skyscraper5.Mpeg2; +using skyscraper5.Skyscraper.Scraper.Storage.Filesystem; +using skyscraper5.Skyscraper.Scraper.Storage.InMemory; +using skyscraper5.Skyscraper.Scraper.Storage; +using skyscraper5.Skyscraper.Scraper; +using skyscraper5; +using skyscraper8.Skyscraper.IO; +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace skyscraper8.Tests +{ + public class DocsisTestsLong + { + [Fact] + public void TestLongBoiSingleStreams() + { + DirectoryInfo di = new DirectoryInfo("D:\\DocsisDemo"); + Skip.If(!di.Exists, "Files not available."); + + FilesystemScraperStorageFactory storageFactory = new FilesystemScraperStorageFactory(); + storageFactory.Directory = "docsis_longboi"; + + Passing passing = new Passing(); + passing.ScraperStorage = storageFactory.CreateScraperStroage(); + passing.MassImportDirectory(di); + } + + [Fact] + public void TestM3u8Stream() + { + FileInfo docsisM3u8 = new FileInfo("D:\\DocsisDemo\\docsis.m3u8"); + Skip.If(!docsisM3u8.Exists, "Index file not available."); + + FileInfo alreadyTested = new FileInfo("docsis_m3u8_test.complete"); + if (alreadyTested.Exists) + { + Debug.WriteLine("Hello!"); + return; + } + + + M3U8Stream m3u8 = new M3U8Stream(docsisM3u8.FullName); + + TsContext tsContext = new TsContext(); + InMemoryScraperStorageFactory storageFactory = new InMemoryScraperStorageFactory(); + IScraperStroage scraperStorage = storageFactory.CreateScraperStroage(); + SkyscraperContext skyscraperContext = new SkyscraperContext(tsContext, null, scraperStorage); + skyscraperContext.InitalizeFilterChain(); + skyscraperContext.IngestFromStream(m3u8); + + File.WriteAllText("docsis_m3u8_test.complete", "1"); + } + + } +} diff --git a/skyscraper8.Tests/Properties/Resources.Designer.cs b/skyscraper8.Tests/Properties/Resources.Designer.cs index c63e692..f7f2405 100644 --- a/skyscraper8.Tests/Properties/Resources.Designer.cs +++ b/skyscraper8.Tests/Properties/Resources.Designer.cs @@ -80,6 +80,16 @@ namespace skyscraper8.Tests.Properties { } } + /// + /// Sucht eine lokalisierte Ressource vom Typ System.Byte[]. + /// + internal static byte[] PushMacManagementMessage_Version4_Type45 { + get { + object obj = ResourceManager.GetObject("PushMacManagementMessage_Version4_Type45", resourceCulture); + return ((byte[])(obj)); + } + } + /// /// Sucht eine lokalisierte Ressource vom Typ System.Byte[]. /// diff --git a/skyscraper8.Tests/Properties/Resources.resx b/skyscraper8.Tests/Properties/Resources.resx index cef920a..25b3e13 100644 --- a/skyscraper8.Tests/Properties/Resources.resx +++ b/skyscraper8.Tests/Properties/Resources.resx @@ -124,6 +124,9 @@ ..\Resources\T45_V4_MultipartRegistrationResponseTest.bin;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + ..\Resources\PushMacManagementMessage_Version4_Type45.bin;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + ..\Resources\ranging_response_test.bin;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 diff --git a/skyscraper8.Tests/Resources/PushMacManagementMessage_Version4_Type45.bin b/skyscraper8.Tests/Resources/PushMacManagementMessage_Version4_Type45.bin new file mode 100644 index 0000000000000000000000000000000000000000..e7868ad73d56ab67d451015f756794a903cd6996 GIT binary patch literal 1251 zcmb_cOK(k46kgxjd!NUB^q$+^cT2BFsghg09<8?MoQcQWNOU5R7!iq!fk_95A7CI% z2uYiGj7kJU8i|f1M)hhV5p*DqwYPhz$3)^J`($UYZ++jl)>&uM0x6g~05P-zX^;o_ z7z+?2fFyzxkO3l1L|ztX_il z#O5f}c3=l`yP@lKD8feusa^nF1uJblKL``aRJtt_W!pP)`9iT&u5@-STYm4p!c@J( z=6td_q0K?k9y+4W|3(xE(f+*TXpi-y_yLtGU}BbX&PE=59~9_l-%Tn?X~lKGA!Wl% z&<}Fpt>ZXew9xS;l>Y|ZGZT}8QmIcAVHIhzrKqZpDU_2qwz_Q` z#~E-1Q9)>53oS%XSz4N0>cBV$o^xQKZ<h>spj48cQ_4A*at?H$Y4hcCMIIk- z>UILBg)Aky#*qmS38R$C6bceN(+qmQ27A^QWN;>$LH|cEOeviZ_tF7*mt@>1?euT8 zIzTJVPdByufjMDFi+11`1cX#sj{3c*k53UzM@NLlJw67@mQK4*m|a>|gG(<4v4q-5kpdX3mkWi%ua1WK=NIPG-QyP%H?Dj0*NP{OUAg`Ab9hK&Q%m&p;KtnTm2FAlTZUCa* literal 0 HcmV?d00001 diff --git a/skyscraper8/Docsis/DocsisEnvironment.cs b/skyscraper8/Docsis/DocsisEnvironment.cs index f9f2cc7..e6cd6c7 100644 --- a/skyscraper8/Docsis/DocsisEnvironment.cs +++ b/skyscraper8/Docsis/DocsisEnvironment.cs @@ -28,7 +28,7 @@ namespace skyscraper5.Docsis { private readonly IDocsisEventHandler eventHandler; - internal DocsisEnvironment(IDocsisEventHandler eventHandler) + public DocsisEnvironment(IDocsisEventHandler eventHandler) { this.eventHandler = eventHandler; this._stats = new Statistics(); @@ -276,7 +276,7 @@ namespace skyscraper5.Docsis private ReadOnlyDictionary _macManagementMessageTypes; - private void PushMacManagementMessage(byte[] ms, byte version, byte type, PhysicalAddress sourceAddress, PhysicalAddress destinationAddress, byte[] readBytes) + public void PushMacManagementMessage(byte[] ms, byte version, byte type, PhysicalAddress sourceAddress, PhysicalAddress destinationAddress, byte[] readBytes) { if (_macManagementMessageTypes == null) @@ -367,6 +367,9 @@ namespace skyscraper5.Docsis case nameof(DynamicServiceDeletionResponse): //nothing in there break; + case nameof(T45_V4_MultipartRegistrationResponse): + //doesn't look interesting either + break; default: throw new NotImplementedException(); } diff --git a/skyscraper8/Docsis/IDocsisEventHandler.cs b/skyscraper8/Docsis/IDocsisEventHandler.cs index 19489a8..b586c39 100644 --- a/skyscraper8/Docsis/IDocsisEventHandler.cs +++ b/skyscraper8/Docsis/IDocsisEventHandler.cs @@ -9,7 +9,7 @@ using skyscraper5.Docsis.MacManagement; namespace skyscraper5.Docsis { - internal interface IDocsisEventHandler + public interface IDocsisEventHandler { void OnParticipantDetected(PhysicalAddress pa); void OnCmtsTimestamp(PhysicalAddress source, uint timing);