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(() => 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(() => 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(() => 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(() => 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(() => 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(() => new GeneralPacketClassifierEncoding(new byte[] { 12, 4, 255, 1, 0, 0 })); Assert.Throws(() => 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(() => 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(() => 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(() => 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(() => 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(() => 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(() => 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(() => new GeneralServiceFlowEncoding(buffer)); } }