feyris-tan 36969eede2
All checks were successful
🚀 Pack skyscraper8 / make-zip (push) Successful in 2m4s
Refactored Tests.
2025-11-17 22:13:31 +01:00

591 lines
21 KiB
C#

using Allure.Commons;
using Allure.Xunit.Attributes;
using skyscraper5.Docsis;
using skyscraper5.Docsis.AnnexC;
namespace skyscraper8.Tests.RootTests;
public class DocsisTests
{
[Fact]
[AllureSuite("Root")]
[AllureFeature("DOCSIS")]
void MacManagementMessageTypeAttributeTest()
{
MacManagementMessageTypeAttribute mmmta = new MacManagementMessageTypeAttribute(1, 2);
Console.WriteLine(mmmta.ToString());
}
[Fact]
[AllureSuite("Root")]
[AllureFeature("DOCSIS")]
void RcpIdEncodingTest()
{
RcpIdEncoding rie = new RcpIdEncoding(new byte[] { 7, 1, 0 });
SimplifiedReceiveChannelAssignmentEncoding simplifiedReceiveChannelAssignmentEncoding = rie.SimplifiedReceiveChannelConfiguration;
Assert.NotNull(simplifiedReceiveChannelAssignmentEncoding);
Assert.Throws<NotImplementedException>(() => new RcpIdEncoding(new byte[] { 255, 1, 0 }));
}
[Fact]
[AllureSuite("Root")]
[AllureFeature("DOCSIS")]
void EthernetLlcPacketClassificationEncodingTest()
{
EthernetLlcPacketClassificationEncoding epce = new EthernetLlcPacketClassificationEncoding(new byte[] { 3, 3, 1, 0, 1 });
ushort epceEProt = epce.EProt;
Assert.Equal(1, epce.EProt);
Assert.Equal(1, epce.Type);
Assert.Throws<NotImplementedException>(() => new EthernetLlcPacketClassificationEncoding(new byte[] { 255, 1, 0 }));
}
[Fact]
[AllureSuite("Root")]
[AllureFeature("DOCSIS")]
void SimplifiedReceiveChannelAssignmentEncodingTest()
{
SimplifiedReceiveChannelAssignmentEncoding srcae =
new SimplifiedReceiveChannelAssignmentEncoding(new byte[] { 1, 1, 0, 2, 1, 0, 3, 1, 0 });
Assert.Equal(0,srcae.DownstreamChannelAssignment[0]);
Assert.Equal(0, srcae.DownstreamProfileAssignment[0]);
Assert.Equal(0, srcae.PrimaryDownstreamChannelAssignment[0]);
Assert.Throws<NotImplementedException>(() => new SimplifiedReceiveChannelAssignmentEncoding(new byte[] { 254,0,1 }));
}
[Fact]
[AllureSuite("Root")]
[AllureFeature("DOCSIS")]
void TransmitChannelConfigurationObjectTest()
{
CommonTlvEncodingObject.TransmitChannelConfigurationObject tcco =
new CommonTlvEncodingObject.TransmitChannelConfigurationObject(
new byte[]
{
1, 1, 0,
2, 1, 0,
3, 1, 0,
5, 4, 0, 0, 0, 0,
6, 2, 0, 0,
7, 1, 1,
9, 1, 0,
10, 1, 0,
11, 1, 0
});
Assert.Equal(0, tcco.TccReferenceId.Value);
Assert.Equal(CommonTlvEncodingObject.TransmitChannelConfigurationObject.UpstreamChannelActionEnum.NoAction, tcco.UpstreamChannelAction.Value);
Assert.Equal(0, tcco.UpstreamChannelId.Value);
Assert.NotNull(tcco.UpstreamChannelDescriptor);
Assert.Equal(0, tcco.RangingSid.Value);
Assert.Equal(InitalizationTechniqueEnum.BroadcastInitialRanging, tcco.InitializationTechnique.Value);
Assert.Equal(0, tcco.DynamicRangeWindow);
Assert.Equal(0, tcco.P16Hi);
Assert.Equal(0, tcco.ListOfIucs[0]);
Assert.Throws<NotImplementedException>(() =>
new CommonTlvEncodingObject.TransmitChannelConfigurationObject(new byte[] { 254, 1, 0 }));
}
[Fact]
[AllureSuite("Root")]
[AllureFeature("DOCSIS")]
void CommonTlvEncodingObjectTest()
{
MemoryStream ms = new MemoryStream(new byte[]
{
5, 1, 0,
47, 1, 0,
49, 1, 0,
31, 1, 0,
27, 1, 0,
30, 1, 0,
52, 2, 0, 1
});
CommonTlvEncodingObject commonTlv = new CommonTlvEncodingObject(ms);
Assert.NotNull(commonTlv.ModemCapabilitiesEncoding);
Assert.NotNull(commonTlv.ServiceFlowSidClusterAssignment);
Assert.NotNull(commonTlv.RcpId);
Assert.Equal(0, commonTlv.KeySequenceNumber);
Assert.Equal(0, commonTlv.HmacDigest[0]);
Assert.NotNull(commonTlv.AuthorizationHint);
Assert.Equal(new TimeSpan(0, 0, 1), commonTlv.InitializingChannelTimeout);
ms = new MemoryStream(new byte[] { 254, 1, 0 });
Assert.Throws<NotImplementedException>(() => new CommonTlvEncodingObject(ms));
}
[Fact]
[AllureSuite("Root")]
[AllureFeature("DOCSIS")]
void GeneralPacketClassifierEncodingTest()
{
GeneralPacketClassifierEncoding gpce = new GeneralPacketClassifierEncoding(new byte[]
{
6, 1, 1,
5, 1, 0,
9, 1, 0,
3, 2, 0, 1,
1, 1, 0,
2, 2, 0, 1,
4, 4, 0, 0, 0, 1,
7, 1, 0,
10, 1, 0,
12, 16,
//IPv6 Packet Classification Encoding
3, 2, 0, 1,
4, 4, 127, 0, 0, 1,
6, 4, 127, 0, 0, 1
});
Assert.True(gpce.ClassifierActivationState.Value);
Assert.Equal(0, gpce.RulePriority.Value);
Assert.NotNull(gpce.Ipv4PacketClassification);
Assert.Equal(1, gpce.ServiceFlowReference.Value);
Assert.Equal(0, gpce.ClassifierReference.Value);
Assert.Equal(1, gpce.ClassifierIdentifier.Value);
Assert.Equal((uint)1, gpce.ServiceFlowIdentifier.Value);
Assert.Equal(GeneralPacketClassifierEncoding.DynamicServiceChangeActionEnum.Add, gpce.DynamicServiceChangeAction.Value);
Assert.NotNull(gpce.EthernetLlcPacketClassificationEncodings);
Assert.Throws<NotImplementedException>(() => new GeneralPacketClassifierEncoding(new byte[]
{
12, 4,
255, 1, 0, 0
}));
Assert.Throws<NotImplementedException>(() => new GeneralPacketClassifierEncoding(new byte[]
{
254, 1, 0
}));
}
[Fact]
[AllureSuite("Root")]
[AllureFeature("DOCSIS")]
public void Ipv4PacketClassificationEncodingTest()
{
GeneralPacketClassifierEncoding.Ipv4PacketClassificationEncodings ipce =
new GeneralPacketClassifierEncoding.Ipv4PacketClassificationEncodings(new byte[]
{
3, 4, 127, 0, 0, 1,
5, 4, 127, 0, 0, 1,
2, 2, 0, 1,
4, 4, 255, 255, 255, 0,
6, 4, 255, 255, 255, 0,
9, 2, 0, 1,
10, 2, 0, 1,
7, 2, 0, 1,
8, 2, 0, 1
});
Assert.NotNull(ipce.Ipv4SourceAddress);
Assert.NotNull(ipce.Ipv4DestinationAddress);
Assert.Equal(1, ipce.IpProtocol.Value);
Assert.NotNull(ipce.Ipv4SourceMask);
Assert.NotNull(ipce.Ipv4DestinationMask);
Assert.Equal(1, ipce.DestinationPortStart.Value);
Assert.Equal(1, ipce.DestinationPortEnd.Value);
Assert.Equal(1, ipce.SourcePortStart.Value);
Assert.Equal(1, ipce.SourcePortEnd.Value);
Assert.Throws<NotImplementedException>(() =>
new GeneralPacketClassifierEncoding.Ipv4PacketClassificationEncodings(new byte[]
{
255, 1, 0
}));
}
[Fact]
[AllureSuite("Root")]
[AllureFeature("DOCSIS")]
public void ServiceFlowSidClusterAssignmentObjectTest()
{
ServiceFlowSidClusterAssignmentObject sfscao = new ServiceFlowSidClusterAssignmentObject(new byte[]
{
1, 4, 0, 0, 0, 1,
2, 1, 0,
3, 1, 0,
});
Assert.Equal(1u, sfscao.SFID.Value);
Assert.NotNull(sfscao.SidClusterEncoding);
Assert.NotNull(sfscao.SidClusterSwitchoverCriteria);
Assert.Throws<NotImplementedException>(() => new ServiceFlowSidClusterAssignmentObject(new byte[]
{
255, 1, 0
}));
}
[Fact]
[AllureSuite("Root")]
[AllureFeature("DOCSIS")]
public void SidClusterEncodingObjectTest()
{
ServiceFlowSidClusterAssignmentObject.SidClusterEncodingObject sceo =
new ServiceFlowSidClusterAssignmentObject.SidClusterEncodingObject(new byte[]
{
1, 1, 1,
2, 1, 0
});
Assert.Equal(1, sceo.SidClusterId.Value);
Assert.NotNull(sceo.SidToChannelMapping);
Assert.Throws<NotImplementedException>(() => new ServiceFlowSidClusterAssignmentObject.SidClusterEncodingObject(new byte[]
{
255, 1, 0
}));
}
[Fact]
[AllureSuite("Root")]
[AllureFeature("DOCSIS")]
public void SidToChannelMappingObjectTest()
{
ServiceFlowSidClusterAssignmentObject.SidClusterEncodingObject.SidToChannelMappingObject stcmo =
new ServiceFlowSidClusterAssignmentObject.SidClusterEncodingObject.SidToChannelMappingObject(new byte[]
{
1,1,1,
2,2,0,1,
3,1,1
});
Assert.Equal(1, stcmo.UpstreamChannelId.Value);
Assert.Equal(1, stcmo.SID.Value);
Assert.Equal(ServiceFlowSidClusterAssignmentObject.SidClusterEncodingObject.SidToChannelMappingObject.ActionEnum.Add,stcmo.Action.Value);
Assert.Throws<NotImplementedException>(() =>
new ServiceFlowSidClusterAssignmentObject.SidClusterEncodingObject.SidToChannelMappingObject(new byte[]
{
255, 1, 0
}));
}
[Fact]
[AllureSuite("Root")]
[AllureFeature("DOCSIS")]
public void Ipv6PacketClassificationEncodingTest()
{
byte[] buffer = new byte[]
{
12, //Type Ipv6 Packet Classification Encoding
40, //Length of IPv6 Packet Classification Encoding
3,2, 0x08,0x00, //Next Header Type
4,16, 0xfd,0x58,0x2f,0x40,0xec,0xe9,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
6,16, 0xfd,0x73,0x14,0x63,0x41,0x65,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01
};
GeneralPacketClassifierEncoding gpce = new GeneralPacketClassifierEncoding(buffer);
Ipv6PacketClassificationEncoding ipce = gpce.Ipv6PacketClassification;
Assert.NotNull(ipce);
Assert.NotNull(ipce.Ipv6DestinationAddress);
Assert.NotNull(ipce.Ipv6SourceAddress);
Assert.Equal(0x0800, ipce.NextHeaderType);
}
[Fact]
[AllureSuite("Root")]
[AllureFeature("DOCSIS")]
public void SidClusterSwitchoverCriteriaObjectTest()
{
byte[] buffer = new byte[]
{
1, 1, 1,
2, 4, 0, 0, 0, 1,
3, 4, 0, 0, 0, 1,
4, 2, 0, 1
};
ServiceFlowSidClusterAssignmentObject.SidClusterSwitchoverCriteriaObject scsco =
new ServiceFlowSidClusterAssignmentObject.SidClusterSwitchoverCriteriaObject(buffer);
Assert.Equal((byte)1,scsco.MaximumRequestPerSidCluster);
Assert.Equal((uint)1, scsco.MaximumOutstandingBytesPerSidCluster);
Assert.Equal((uint)1, scsco.MaximumTotalBytesRequestedPerSidCluster);
Assert.Equal((ushort)1, scsco.MaximumTimeInTheSidCluster);
buffer = new byte[] { 254, 1, 0 };
Assert.Throws<NotImplementedException>(() =>
new ServiceFlowSidClusterAssignmentObject.SidClusterSwitchoverCriteriaObject(buffer));
}
[Fact]
[AllureSuite("Root")]
[AllureFeature("DOCSIS")]
public void ModemCapabilitiesEncodingTest()
{
byte[] buffer = new byte[]
{
1, 1, 1,
2, 1, 0,
3, 1, 1,
4, 1, 1,
6, 1, 1,
7, 1, 1,
8, 1, 1,
10, 1, 1,
11, 1, 1,
12, 1, 1,
15, 1, 1,
16, 4, 1, 2, 3, 4,
17, 1, 1,
18, 7, 1, 0, 0, 0, 0, 0, 0,
19, 1, 1,
20, 1, 2,
21, 1, 255,
22, 1, 1,
23, 1, 1,
24, 1, 2,
25, 1, 2,
26, 1, 2,
27, 1, 2,
28, 1, 2,
29, 1, 2,
30, 1, 3,
31, 1, 3,
32, 1, 3,
33, 1, 2,
34, 1, 1,
35, 1, 255,
36, 1, 3,
37, 1, 0,
38, 2, 0, 3,
39, 1, 1,
40, 1, 4,
44, 0,
46, 1, 1,
47, 4, 0, 0, 0, 255,
48, 2, 0, 4,
49, 1, 4,
50, 1, 5,
51, 1, 5,
52, 2, 1, 2,
53, 2, 1, 2,
54, 1, 1,
55, 1, 1,
56, 1, 0,
57, 1, 3,
58, 1, 5,
59, 2, 0, 5,
60, 1, 3,
76, 1, 7,
};
ModemCapabilitiesEncoding mcs = new ModemCapabilitiesEncoding(buffer);
Assert.True(mcs.ConcatenationSupport);
Assert.Equal(new Version(1, 0), mcs.DocsisVersion);
Assert.True(mcs.FragmentationSupport);
Assert.True(mcs.PayloadHeaderSuppressionSupport);
Assert.Equal(ModemCapabilitiesEncoding.PrivacySupportValue.BpiPlusSupport,mcs.PrivacySupport.Value);
Assert.Equal(1, mcs.DownstreamSaidSupport.Value);
Assert.Equal(1, mcs.UpstreamServiceFlowSupport.Value);
Assert.Equal(1, mcs.TransmitPreEqualizerTapsPerModulationInterval.Value);
Assert.Equal(1, mcs.NumberOfTransmitEqualizerTaps.Value);
Assert.True(mcs.DccSupport);
Assert.NotNull(mcs.RangingHoldOffSupport);
Assert.True(mcs.L2VPN);
Assert.NotNull(mcs.ESafeHostCapability);
Assert.True(mcs.DownstreamUnencryptedTrafficFiltering);
Assert.Equal(ModemCapabilitiesEncoding.UpstreamFrequencyRangeSupportEnum.Extended, mcs.UpstreamFrequencyRangeSupport);
Assert.True(mcs._160kspsSymbolRateSupport);
Assert.True(mcs._320kspsSymbolRateSupport);
Assert.True(mcs._640kspsSymbolRateSupport);
Assert.True(mcs._1280kspsSymbolRateSupport);
Assert.True(mcs._2560kspsSymbolRateSupport);
Assert.True(mcs._5120kspsSymbolRateSupport);
Assert.True(mcs.SelectableActiveCodeMode2Support);
Assert.True(mcs.CodeHoppingMode2Support);
Assert.Equal(2,mcs.ScQamMultipleTransmitChannelSupport.Value);
Assert.Equal(2, mcs.TotalSidClusterSupport.Value);
Assert.Equal(2, mcs.SidClustersPerServiceFlowSupport.Value);
Assert.Equal(2, mcs.ScQamMultipleReceiveChannelSupport.Value);
Assert.Equal(3, mcs.TotalDsidSupport.Value);
Assert.Equal(3, mcs.ResequencingDsidSupport.Value);
Assert.Equal(3, mcs.MulticastDsidSupport.Value);
Assert.Equal(ModemCapabilitiesEncoding.MulticastDsidForwardingEnum.SupportPromiscious, mcs.MulticastDsidForwarding.Value);
Assert.True(mcs.FrameControlTypeForwardingCapability);
Assert.True(mcs.DpvPerPathSuppported);
Assert.True(mcs.DpvPerPacketSuppported);
Assert.Equal(3, mcs.UnsolicitedGrantServiceFlowSupport.Value);
Assert.True(mcs.MapAndUcdReceiptSupport);
Assert.Equal(3, mcs.UpstreamDropClassifierSupport);
Assert.True(mcs.Ipv6Support.Value);
Assert.Equal(4, mcs.ExtendedUpstreamTransmitPowerCapability.Value);
Assert.True(mcs.CmStatusAck);
Assert.True(mcs.EnergyManagement1x1Feature);
Assert.True(mcs.DocsisLightSleepMode);
Assert.Equal(4, mcs.ExtendedPacketLengthSupportCapability);
Assert.Equal(4, mcs.OfdmMultipleReceiveChannelSupport.Value);
Assert.Equal(5, mcs.OfdmaMultipleTransmitChannelSupport.Value);
Assert.Equal(5, mcs.DownstreamOfdmProfileSupport.Value);
Assert.NotNull(mcs.DownstreamOfdmChannelSubcarrierQamModulationSupport);
Assert.NotNull(mcs.UpstreamOfdmaChannelSubcarrierQamModulationSupport);
Assert.Equal(108, mcs.DownstreamFrequencyRangeStarting);
Assert.Equal(1218, mcs.DownstreamFrequencyRangeUpTo);
Assert.Equal(42, mcs.UpstreamFrequencyRangeUpTo);
Assert.Equal(ModemCapabilitiesEncoding.DtpMode.MasterOrSlave, mcs.DocsisTimeProtocolMode.Value);
Assert.Equal(ModemCapabilitiesEncoding.DtpPerformanceSupport.Level5, mcs.DocsisTimeProtocolPerformanceSupport.Value);
Assert.Equal(5, mcs.Pmax);
Assert.True(mcs.DownstreamFullDuplex);
Assert.Equal(7, mcs.LowLatencySupport.Value);
buffer = new byte[]
{
2, 1, 1,
54, 1, 2,
55, 1, 2,
56, 1, 1,
};
mcs = new ModemCapabilitiesEncoding(buffer);
Assert.True(mcs._160kspsSymbolRateSupport);
Assert.True(mcs._320kspsSymbolRateSupport);
Assert.True(mcs._640kspsSymbolRateSupport);
Assert.True(mcs._1280kspsSymbolRateSupport);
Assert.True(mcs._2560kspsSymbolRateSupport);
Assert.True(mcs._5120kspsSymbolRateSupport);
buffer = new byte[]
{
2, 1, 2,
55, 1, 4,
56, 1, 2,
60, 1, 1,
};
mcs = new ModemCapabilitiesEncoding(buffer);
buffer = new byte[]
{
2, 1, 3,
56, 1, 3,
60, 1, 2,
61, 1, 1
};
mcs = new ModemCapabilitiesEncoding(buffer);
buffer = new byte[]
{
2, 1, 4,
56, 1, 4,
61, 1, 2
};
mcs = new ModemCapabilitiesEncoding(buffer);
Assert.Null(mcs.DpvPerPathSuppported);
Assert.Null(mcs.DpvPerPacketSuppported);
Assert.Null(mcs.EnergyManagement1x1Feature);
Assert.Null(mcs.DocsisLightSleepMode);
buffer = new byte[]
{
2, 1, 5,
61, 1, 4,
62, 1, 0
};
mcs = new ModemCapabilitiesEncoding(buffer);
buffer = new byte[]
{
2, 1, 6,
62, 1, 1
};
mcs = new ModemCapabilitiesEncoding(buffer);
buffer = new byte[]
{
62, 1, 2
};
mcs = new ModemCapabilitiesEncoding(buffer);
buffer = new byte[]
{
62, 1, 3
};
mcs = new ModemCapabilitiesEncoding(buffer);
buffer = new byte[]
{
62, 1, 4
};
mcs = new ModemCapabilitiesEncoding(buffer);
buffer = new byte[]
{
255, 1, 1
};
Assert.Throws<NotImplementedException>(() => new ModemCapabilitiesEncoding(buffer));
}
[Fact]
[AllureSuite("Root")]
[AllureFeature("DOCSIS")]
public void GeneralServiceFlowEncodingTest()
{
byte[] buffer = new byte[]
{
1, 2, 0, 1,
2, 2, 0, 1,
6, 1, 255,
7, 1, 1,
8, 4, 0, 0, 0, 1,
9, 4, 0, 0, 0, 1,
10, 4, 0, 0, 0, 1,
11, 2, 0, 1,
12, 2, 0, 1,
14, 2, 0, 1,
15, 1, 7,
17, 1, 1,
19, 2, 0, 1,
20, 4, 0, 0, 0, 2,
21, 4, 0, 0, 0, 2,
22, 1, 2,
23, 1, 2,
24, 4, 0, 0, 0, 2,
26, 1, 2,
32, 4, 0, 0, 0, 3,
16, 4, 0, 0, 255, 255,
};
GeneralServiceFlowEncoding gsfe = new GeneralServiceFlowEncoding(buffer);
Assert.Equal((ushort)1, gsfe.ServiceFlowReference);
Assert.Equal((ushort)1, gsfe.ServiceFlowIdentifier);
Assert.True(gsfe.ProvisionedSet);
Assert.True(gsfe.AdmittedSet);
Assert.True(gsfe.ActiveSet);
Assert.Equal((byte)1, gsfe.TrafficPriority);
Assert.Equal((uint)1, gsfe.UpstreamMaximumSustainedTrafficRate);
Assert.Equal((uint)1, gsfe.MaximumTrafficBurst);
Assert.Equal((uint)1, gsfe.MinimumReservedTrafficRate);
Assert.Equal((ushort)1, gsfe.AssumedMinimumReservedRatePacketSize);
Assert.Equal((ushort)1, gsfe.TimeoutForActiveQosParameters);
Assert.Equal(1, gsfe.MaximumConcatenatedBurst);
Assert.Equal(GeneralServiceFlowEncoding.ServiceFlowSchedulingTypeEnum.ProactiveGrantService, gsfe.ServiceFlowSchedulingType);
Assert.Equal(1, gsfe.DownstreamResequencing.Value);
Assert.Equal(1, gsfe.UnsolicitedGrantSize.Value);
Assert.Equal((uint)2, gsfe.NominalGrantInterval.Value);
Assert.Equal((uint)2, gsfe.ToleratedGrantJitter.Value);
Assert.Equal(2, gsfe.GrantsPerInterval.Value);
Assert.NotNull(gsfe.IpTypeOfServiceOverwrite);
Assert.Equal((uint)2, gsfe.CmtsTimestamp.Value);
Assert.Equal(2, gsfe.MultiplierToNumberOfBytesRequested);
Assert.Equal((uint)3, gsfe.ServiceFlowForbiddenAttributeMask);
Assert.True(gsfe.DoNotUseContentionRegions);
Assert.True(gsfe.DoNotUseSegmentHeaders);
Assert.True(gsfe.DropPacketsTooBigForUnsolicitedGrant);
Assert.True(gsfe.DoNotSupressPayloadHeaders);
Assert.True(gsfe.DoNotFragmentData);
Assert.True(gsfe.DoNotConcatenateData);
Assert.True(gsfe.DoNotPiggybackRequests);
Assert.True(gsfe.DoNotUseRequest2ForData);
Assert.True(gsfe.DoNotUseRequest2ForRequests);
Assert.True(gsfe.DoNotUsePriorityRequest);
Assert.True(gsfe.DoNotUseAllCms);
AllureLog.Log(gsfe.ToString());
buffer = new byte[]
{
17, 4, 0, 0, 0, 1
};
gsfe = new GeneralServiceFlowEncoding(buffer);
Assert.Equal((uint)1, gsfe.NominalPollingInterval.Value);
buffer = new byte[]
{
254, 1, 1
};
Assert.Throws<NotImplementedException>(() => new GeneralServiceFlowEncoding(buffer));
}
}