public void ValidateSequenceNumber( [Values(DataSetFieldContentMask.None, DataSetFieldContentMask.RawData, // list here all possible DataSetFieldContentMask DataSetFieldContentMask.ServerPicoSeconds, DataSetFieldContentMask.ServerTimestamp, DataSetFieldContentMask.SourcePicoSeconds, DataSetFieldContentMask.SourceTimestamp, DataSetFieldContentMask.StatusCode, DataSetFieldContentMask.ServerPicoSeconds | DataSetFieldContentMask.ServerTimestamp, DataSetFieldContentMask.ServerPicoSeconds | DataSetFieldContentMask.SourcePicoSeconds, DataSetFieldContentMask.ServerPicoSeconds | DataSetFieldContentMask.SourceTimestamp, DataSetFieldContentMask.ServerPicoSeconds | DataSetFieldContentMask.StatusCode, DataSetFieldContentMask.ServerPicoSeconds | DataSetFieldContentMask.ServerTimestamp | DataSetFieldContentMask.SourcePicoSeconds, DataSetFieldContentMask.ServerPicoSeconds | DataSetFieldContentMask.ServerTimestamp | DataSetFieldContentMask.SourceTimestamp, DataSetFieldContentMask.ServerPicoSeconds | DataSetFieldContentMask.ServerTimestamp | DataSetFieldContentMask.StatusCode, DataSetFieldContentMask.ServerPicoSeconds | DataSetFieldContentMask.ServerTimestamp | DataSetFieldContentMask.SourcePicoSeconds | DataSetFieldContentMask.SourceTimestamp, DataSetFieldContentMask.ServerPicoSeconds | DataSetFieldContentMask.ServerTimestamp | DataSetFieldContentMask.SourcePicoSeconds | DataSetFieldContentMask.StatusCode, DataSetFieldContentMask.ServerPicoSeconds | DataSetFieldContentMask.ServerTimestamp | DataSetFieldContentMask.SourcePicoSeconds | DataSetFieldContentMask.SourceTimestamp | DataSetFieldContentMask.StatusCode )] DataSetFieldContentMask dataSetFieldContentMask) { // Arrange UadpDataSetMessage uadpDataSetMessage = GetFirstDataSetMessage(dataSetFieldContentMask); // Act uadpDataSetMessage.SetMessageContentMask(UadpDataSetMessageContentMask.SequenceNumber); uadpDataSetMessage.SequenceNumber = 1000; // Assert CompareEncodeDecode(uadpDataSetMessage); }
public void ValidateMajorVersionEqMinorVersionEq( [Values(DataSetFieldContentMask.None, DataSetFieldContentMask.RawData, // list here all possible DataSetFieldContentMask DataSetFieldContentMask.ServerPicoSeconds, DataSetFieldContentMask.ServerTimestamp, DataSetFieldContentMask.SourcePicoSeconds, DataSetFieldContentMask.SourceTimestamp, DataSetFieldContentMask.StatusCode, DataSetFieldContentMask.ServerPicoSeconds | DataSetFieldContentMask.ServerTimestamp, DataSetFieldContentMask.ServerPicoSeconds | DataSetFieldContentMask.SourcePicoSeconds, DataSetFieldContentMask.ServerPicoSeconds | DataSetFieldContentMask.SourceTimestamp, DataSetFieldContentMask.ServerPicoSeconds | DataSetFieldContentMask.StatusCode, DataSetFieldContentMask.ServerPicoSeconds | DataSetFieldContentMask.ServerTimestamp | DataSetFieldContentMask.SourcePicoSeconds, DataSetFieldContentMask.ServerPicoSeconds | DataSetFieldContentMask.ServerTimestamp | DataSetFieldContentMask.SourceTimestamp, DataSetFieldContentMask.ServerPicoSeconds | DataSetFieldContentMask.ServerTimestamp | DataSetFieldContentMask.StatusCode, DataSetFieldContentMask.ServerPicoSeconds | DataSetFieldContentMask.ServerTimestamp | DataSetFieldContentMask.SourcePicoSeconds | DataSetFieldContentMask.SourceTimestamp, DataSetFieldContentMask.ServerPicoSeconds | DataSetFieldContentMask.ServerTimestamp | DataSetFieldContentMask.SourcePicoSeconds | DataSetFieldContentMask.StatusCode, DataSetFieldContentMask.ServerPicoSeconds | DataSetFieldContentMask.ServerTimestamp | DataSetFieldContentMask.SourcePicoSeconds | DataSetFieldContentMask.SourceTimestamp | DataSetFieldContentMask.StatusCode )] DataSetFieldContentMask dataSetFieldContentMask) { const int VersionValue = 2; // Arrange UadpDataSetMessage uadpDataSetMessage = GetFirstDataSetMessage(dataSetFieldContentMask); // Act uadpDataSetMessage.SetMessageContentMask(UadpDataSetMessageContentMask.MajorVersion | UadpDataSetMessageContentMask.MinorVersion); uadpDataSetMessage.MetaDataVersion.MajorVersion = VersionValue; uadpDataSetMessage.MetaDataVersion.MinorVersion = VersionValue * 10; IServiceMessageContext messageContextEncode = new ServiceMessageContext(); byte[] bytes; var memoryStream = new MemoryStream(); using (BinaryEncoder encoder = new BinaryEncoder(memoryStream, messageContextEncode, true)) { uadpDataSetMessage.Encode(encoder); _ = encoder.Close(); bytes = ReadBytes(memoryStream); } UadpDataSetMessage uaDataSetMessageDecoded = new UadpDataSetMessage(); BinaryDecoder decoder = new BinaryDecoder(bytes, messageContextEncode); // Make sure the reader MajorVersion and MinorVersion are the same with the ones on the dataset message DataSetReaderDataType reader = (DataSetReaderDataType)m_firstDataSetReaderType.MemberwiseClone(); reader.DataSetMetaData.ConfigurationVersion.MajorVersion = VersionValue; reader.DataSetMetaData.ConfigurationVersion.MinorVersion = VersionValue * 10; // workaround uaDataSetMessageDecoded.DataSetWriterId = TestDataSetWriterId; uaDataSetMessageDecoded.DecodePossibleDataSetReader(decoder, reader); decoder.Dispose(); // Assert Assert.AreEqual(DataSetDecodeErrorReason.NoError, uaDataSetMessageDecoded.DecodeErrorReason); Assert.AreEqual(false, uaDataSetMessageDecoded.IsMetadataMajorVersionChange); Assert.AreNotEqual(null, uaDataSetMessageDecoded.DataSet); // compare uadpDataSetMessage with uaDataSetMessageDecoded CompareUadpDataSetMessages(uadpDataSetMessage, uaDataSetMessageDecoded); }
public void ValidateMinorVersion( [Values(DataSetFieldContentMask.None, DataSetFieldContentMask.RawData, // list here all possible DataSetFieldContentMask DataSetFieldContentMask.ServerPicoSeconds, DataSetFieldContentMask.ServerTimestamp, DataSetFieldContentMask.SourcePicoSeconds, DataSetFieldContentMask.SourceTimestamp, DataSetFieldContentMask.StatusCode, DataSetFieldContentMask.ServerPicoSeconds | DataSetFieldContentMask.ServerTimestamp, DataSetFieldContentMask.ServerPicoSeconds | DataSetFieldContentMask.SourcePicoSeconds, DataSetFieldContentMask.ServerPicoSeconds | DataSetFieldContentMask.SourceTimestamp, DataSetFieldContentMask.ServerPicoSeconds | DataSetFieldContentMask.StatusCode, DataSetFieldContentMask.ServerPicoSeconds | DataSetFieldContentMask.ServerTimestamp | DataSetFieldContentMask.SourcePicoSeconds, DataSetFieldContentMask.ServerPicoSeconds | DataSetFieldContentMask.ServerTimestamp | DataSetFieldContentMask.SourceTimestamp, DataSetFieldContentMask.ServerPicoSeconds | DataSetFieldContentMask.ServerTimestamp | DataSetFieldContentMask.StatusCode, DataSetFieldContentMask.ServerPicoSeconds | DataSetFieldContentMask.ServerTimestamp | DataSetFieldContentMask.SourcePicoSeconds | DataSetFieldContentMask.SourceTimestamp, DataSetFieldContentMask.ServerPicoSeconds | DataSetFieldContentMask.ServerTimestamp | DataSetFieldContentMask.SourcePicoSeconds | DataSetFieldContentMask.StatusCode, DataSetFieldContentMask.ServerPicoSeconds | DataSetFieldContentMask.ServerTimestamp | DataSetFieldContentMask.SourcePicoSeconds | DataSetFieldContentMask.SourceTimestamp | DataSetFieldContentMask.StatusCode )] DataSetFieldContentMask dataSetFieldContentMask) { // Arrange UadpDataSetMessage uadpDataSetMessage = GetFirstDataSetMessage(dataSetFieldContentMask); // Act uadpDataSetMessage.SetMessageContentMask(UadpDataSetMessageContentMask.MinorVersion); uadpDataSetMessage.MetaDataVersion.MinorVersion = 101; // Assert CompareEncodeDecode(uadpDataSetMessage); }
public void ValidateDataSetMessageMask( [Values(DataSetFieldContentMask.None, DataSetFieldContentMask.RawData, // list here all possible DataSetFieldContentMask DataSetFieldContentMask.ServerPicoSeconds, DataSetFieldContentMask.ServerTimestamp, DataSetFieldContentMask.SourcePicoSeconds, DataSetFieldContentMask.SourceTimestamp, DataSetFieldContentMask.StatusCode, DataSetFieldContentMask.ServerPicoSeconds | DataSetFieldContentMask.ServerTimestamp, DataSetFieldContentMask.ServerPicoSeconds | DataSetFieldContentMask.SourcePicoSeconds, DataSetFieldContentMask.ServerPicoSeconds | DataSetFieldContentMask.SourceTimestamp, DataSetFieldContentMask.ServerPicoSeconds | DataSetFieldContentMask.StatusCode, DataSetFieldContentMask.ServerPicoSeconds | DataSetFieldContentMask.ServerTimestamp | DataSetFieldContentMask.SourcePicoSeconds, DataSetFieldContentMask.ServerPicoSeconds | DataSetFieldContentMask.ServerTimestamp | DataSetFieldContentMask.SourceTimestamp, DataSetFieldContentMask.ServerPicoSeconds | DataSetFieldContentMask.ServerTimestamp | DataSetFieldContentMask.StatusCode, DataSetFieldContentMask.ServerPicoSeconds | DataSetFieldContentMask.ServerTimestamp | DataSetFieldContentMask.SourcePicoSeconds | DataSetFieldContentMask.SourceTimestamp, DataSetFieldContentMask.ServerPicoSeconds | DataSetFieldContentMask.ServerTimestamp | DataSetFieldContentMask.SourcePicoSeconds | DataSetFieldContentMask.StatusCode, DataSetFieldContentMask.ServerPicoSeconds | DataSetFieldContentMask.ServerTimestamp | DataSetFieldContentMask.SourcePicoSeconds | DataSetFieldContentMask.SourceTimestamp | DataSetFieldContentMask.StatusCode )] DataSetFieldContentMask dataSetFieldContentMask) { // Arrange UadpDataSetMessage uadpDataSetMessage = GetFirstDataSetMessage(dataSetFieldContentMask); // Act // change network message mask for (uint dataSetMessageContentMask = 0; dataSetMessageContentMask < MessageContentMask; dataSetMessageContentMask++) { uadpDataSetMessage.SetMessageContentMask((UadpDataSetMessageContentMask)dataSetMessageContentMask); // Assert CompareEncodeDecode(uadpDataSetMessage); } }
public void ValidateMinorVersionWithRawDataType() { // Arrange UadpDataSetMessage uadpDataSetMessage = GetFirstDataSetMessage(fieldContentMaskRawData); // Act uadpDataSetMessage.SetMessageContentMask(UadpDataSetMessageContentMask.MinorVersion); uadpDataSetMessage.ConfigurationMinorVersion = 101; // Assert CompareEncodeDecode(uadpDataSetMessage); }
public void ValidateSequenceNumberWithRawDataType() { // Arrange UadpDataSetMessage uadpDataSetMessage = GetFirstDataSetMessage(fieldContentMaskRawData); // Act uadpDataSetMessage.SetMessageContentMask(UadpDataSetMessageContentMask.SequenceNumber); uadpDataSetMessage.SequenceNumber = 1000; // Assert CompareEncodeDecode(uadpDataSetMessage); }
public void ValidateMajorVersionWithDataValueType() { // Arrange UadpDataSetMessage uadpDataSetMessage = GetFirstDataSetMessage(fieldContentMaskDataValue); // Act uadpDataSetMessage.SetMessageContentMask(UadpDataSetMessageContentMask.MajorVersion); uadpDataSetMessage.ConfigurationMajorVersion = 2; // Assert CompareEncodeDecode(uadpDataSetMessage); }
public void ValidateStatusWithDataValueType() { // Arrange UadpDataSetMessage uadpDataSetMessage = GetFirstDataSetMessage(fieldContentMaskDataValue); // Act uadpDataSetMessage.SetMessageContentMask(UadpDataSetMessageContentMask.Status); uadpDataSetMessage.Status = 0x0384; // Assert CompareEncodeDecode(uadpDataSetMessage); }
public void ValidatePicoSecondsWithRawDataType() { // Arrange UadpDataSetMessage uadpDataSetMessage = GetFirstDataSetMessage(fieldContentMaskRawData); // Act uadpDataSetMessage.SetMessageContentMask(UadpDataSetMessageContentMask.PicoSeconds); uadpDataSetMessage.PicoSeconds = 10; // Assert CompareEncodeDecode(uadpDataSetMessage); }
public void ValidateDataSetTimeStampWithRawDataType() { // Arrange UadpDataSetMessage uadpDataSetMessage = GetFirstDataSetMessage(fieldContentMaskRawData); // Act uadpDataSetMessage.SetMessageContentMask(UadpDataSetMessageContentMask.Timestamp); uadpDataSetMessage.TimeStamp = DateTime.UtcNow; // Assert CompareEncodeDecode(uadpDataSetMessage); }
public void ValidateDataSetMessageMaskWithRawDataType() { // Arrange UadpDataSetMessage uadpDataSetMessage = GetFirstDataSetMessage(fieldContentMaskRawData); // Act // change network message mask for (uint dataSetMessageContentMask = 0; dataSetMessageContentMask < MessageContentMask; dataSetMessageContentMask++) { uadpDataSetMessage.SetMessageContentMask((UadpDataSetMessageContentMask)dataSetMessageContentMask); // Assert CompareEncodeDecode(uadpDataSetMessage); } }
public void ValidateStatus( [Values(UadpDataSetMessageContentMask.None, UadpDataSetMessageContentMask.Timestamp, UadpDataSetMessageContentMask.MajorVersion, UadpDataSetMessageContentMask.MinorVersion, UadpDataSetMessageContentMask.SequenceNumber, UadpDataSetMessageContentMask.MajorVersion | UadpDataSetMessageContentMask.MinorVersion, UadpDataSetMessageContentMask.MajorVersion | UadpDataSetMessageContentMask.MinorVersion | UadpDataSetMessageContentMask.SequenceNumber)] UadpDataSetMessageContentMask messageContentMask, [Values(StatusCodes.Good, StatusCodes.UncertainDataSubNormal, StatusCodes.BadAggregateListMismatch, StatusCodes.BadUnknownResponse, StatusCodes.Bad, StatusCodes.BadAggregateConfigurationRejected, StatusCodes.BadAggregateInvalidInputs, StatusCodes.BadAlreadyExists)] uint statusCode ) { // Arrange UadpDataSetMessage uadpDataSetMessage = GetFirstDataSetMessage(DataSetFieldContentMask.None); // Act uadpDataSetMessage.SetMessageContentMask(messageContentMask | UadpDataSetMessageContentMask.Status); uadpDataSetMessage.Status = statusCode; // Assert CompareEncodeDecode(uadpDataSetMessage); }
/// <summary> /// Create the list of network messages built from the provided writerGroupConfiguration /// </summary> public override IList <UaNetworkMessage> CreateNetworkMessages(WriterGroupDataType writerGroupConfiguration) { UadpWriterGroupMessageDataType messageSettings = ExtensionObject.ToEncodeable(writerGroupConfiguration.MessageSettings) as UadpWriterGroupMessageDataType; if (messageSettings == null) { //Wrong configuration of writer group MessageSettings return(null); } DatagramWriterGroupTransportDataType transportSettings = ExtensionObject.ToEncodeable(writerGroupConfiguration.TransportSettings) as DatagramWriterGroupTransportDataType; if (transportSettings == null) { //Wrong configuration of writer group TransportSettings return(null); } //Create list of dataSet messages to be sent List <UaDataSetMessage> dataSetMessages = new List <UaDataSetMessage>(); foreach (DataSetWriterDataType dataSetWriter in writerGroupConfiguration.DataSetWriters) { //check if dataSetWriter enabled if (dataSetWriter.Enabled) { DataSet dataSet = Application.DataCollector.CollectData(dataSetWriter.DataSetName); if (dataSet != null) { UadpDataSetWriterMessageDataType dataSetMessageSettings = ExtensionObject.ToEncodeable(dataSetWriter.MessageSettings) as UadpDataSetWriterMessageDataType; // check MessageSettings to see how to encode DataSet if (dataSetMessageSettings != null) { UadpDataSetMessage uadpDataSetMessage = new UadpDataSetMessage(dataSet); uadpDataSetMessage.DataSetWriterId = dataSetWriter.DataSetWriterId; uadpDataSetMessage.SetMessageContentMask((UadpDataSetMessageContentMask)dataSetMessageSettings.DataSetMessageContentMask); uadpDataSetMessage.SetFieldContentMask((DataSetFieldContentMask)dataSetWriter.DataSetFieldContentMask); uadpDataSetMessage.SequenceNumber = (ushort)(Utils.IncrementIdentifier(ref m_dataSetSequenceNumber) % UInt16.MaxValue); uadpDataSetMessage.ConfiguredSize = dataSetMessageSettings.ConfiguredSize; uadpDataSetMessage.DataSetOffset = dataSetMessageSettings.DataSetOffset; uadpDataSetMessage.Timestamp = DateTime.UtcNow; uadpDataSetMessage.Status = StatusCodes.Good; dataSetMessages.Add(uadpDataSetMessage); } } } } //cancel send if no dataset message if (dataSetMessages.Count == 0) { return(null); } UadpNetworkMessage uadpNetworkMessage = new UadpNetworkMessage(writerGroupConfiguration, dataSetMessages); uadpNetworkMessage.SetNetworkMessageContentMask((UadpNetworkMessageContentMask)messageSettings.NetworkMessageContentMask); uadpNetworkMessage.WriterGroupId = writerGroupConfiguration.WriterGroupId; // Network message header uadpNetworkMessage.PublisherId = PubSubConnectionConfiguration.PublisherId.Value; uadpNetworkMessage.SequenceNumber = (ushort)(Utils.IncrementIdentifier(ref m_sequenceNumber) % UInt16.MaxValue); // Writer group header uadpNetworkMessage.GroupVersion = messageSettings.GroupVersion; uadpNetworkMessage.NetworkMessageNumber = 1; //only one network message per publish return(new List <UaNetworkMessage>() { uadpNetworkMessage }); }