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;