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);