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 0000000..e7868ad Binary files /dev/null and b/skyscraper8.Tests/Resources/PushMacManagementMessage_Version4_Type45.bin differ 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);