/// <summary> /// Prepare data /// </summary> /// <param name="publisherConnection"></param> /// <returns></returns> private byte[] PrepareData(UdpPubSubConnection publisherConnection, UdpConnectionType udpConnectionType = UdpConnectionType.Networking, int networkMessageIndex = 0) { try { WriterGroupDataType writerGroup0 = publisherConnection.PubSubConnectionConfiguration.WriterGroups.First(); IList <UaNetworkMessage> networkMessages = null; if (udpConnectionType == UdpConnectionType.Discovery) { List <UInt16> dataSetWriterIds = new List <UInt16>(); foreach (DataSetWriterDataType dataSetWriterDataType in writerGroup0.DataSetWriters) { dataSetWriterIds.Add(dataSetWriterDataType.DataSetWriterId); } networkMessages = publisherConnection.CreateDataSetMetaDataNetworkMessages(dataSetWriterIds.ToArray()); } else { networkMessages = publisherConnection.CreateNetworkMessages(writerGroup0, new WriterGroupPublishState()); } Assert.IsNotNull(networkMessages, "CreateNetworkMessages returned null"); Assert.IsTrue(networkMessages.Count > networkMessageIndex, "networkMessageIndex is outside of bounds"); UaNetworkMessage message = networkMessages[networkMessageIndex]; byte[] bytes = message.Encode(ServiceMessageContext.GlobalContext); return(bytes); } catch { return(Array.Empty <byte>()); } }
public void ValidateUdpPubSubConnectionCreateNetworkMessage() { Assert.IsNotNull(m_udpPublisherConnection, "The UADP connection from standard configuration is invalid."); //Arrange WriterGroupDataType writerGroup0 = m_udpPublisherConnection.PubSubConnectionConfiguration.WriterGroups.First(); UadpWriterGroupMessageDataType messageSettings = ExtensionObject.ToEncodeable(writerGroup0.MessageSettings) as UadpWriterGroupMessageDataType; //Act m_udpPublisherConnection.ResetSequenceNumber(); var networkMessages = m_udpPublisherConnection.CreateNetworkMessages(writerGroup0, new WriterGroupPublishState()); Assert.IsNotNull(networkMessages, "connection.CreateNetworkMessages shall not return null"); var networkMessagesNetworkType = networkMessages.FirstOrDefault(net => net.IsMetaDataMessage == false); Assert.IsNotNull(networkMessagesNetworkType, "connection.CreateNetworkMessages shall return only one network message"); UadpNetworkMessage networkMessage0 = networkMessagesNetworkType as UadpNetworkMessage; Assert.IsNotNull(networkMessage0, "networkMessageEncode should not be null"); //Assert Assert.IsNotNull(networkMessage0, "CreateNetworkMessage did not return an UadpNetworkMessage."); Assert.AreEqual(networkMessage0.DataSetClassId, Guid.Empty, "UadpNetworkMessage.DataSetClassId is invalid."); Assert.AreEqual(networkMessage0.WriterGroupId, writerGroup0.WriterGroupId, "UadpNetworkMessage.WriterGroupId is invalid."); Assert.AreEqual(networkMessage0.UADPVersion, 1, "UadpNetworkMessage.UADPVersion is invalid."); Assert.AreEqual(networkMessage0.SequenceNumber, 1, "UadpNetworkMessage.SequenceNumber is not 1."); Assert.AreEqual(networkMessage0.GroupVersion, messageSettings.GroupVersion, "UadpNetworkMessage.GroupVersion is not valid."); Assert.AreEqual(networkMessage0.PublisherId, m_udpPublisherConnection.PubSubConnectionConfiguration.PublisherId.Value, "UadpNetworkMessage.PublisherId is not valid."); Assert.IsNotNull(networkMessage0.DataSetMessages, "UadpNetworkMessage.UadpDataSetMessages is null."); Assert.AreEqual(networkMessage0.DataSetMessages.Count, 3, "UadpNetworkMessage.UadpDataSetMessages.Count is not 3."); //validate flags Assert.AreEqual((uint)networkMessage0.NetworkMessageContentMask, messageSettings.NetworkMessageContentMask, "UadpNetworkMessage.messageSettings.NetworkMessageContentMask is not valid."); }
/// <summary> /// Prepare data /// </summary> /// <param name="publisherConnection"></param> /// <returns></returns> private byte[] PrepareData(UdpPubSubConnection publisherConnection, int networkMessageIndex = 0) { try { WriterGroupDataType writerGroup0 = publisherConnection.PubSubConnectionConfiguration.WriterGroups.First(); IList <UaNetworkMessage> networkMessages = publisherConnection.CreateNetworkMessages(writerGroup0); Assert.IsNotNull(networkMessages, "CreateNetworkMessages returned null"); Assert.IsTrue(networkMessages.Count > networkMessageIndex, "networkMessageIndex is outside of bounds"); UaNetworkMessage message = networkMessages[networkMessageIndex]; byte[] bytes = message.Encode(); return(bytes); } catch { return(Array.Empty <byte>()); } }
public void ValidateUdpPubSubConnectionNetworkMessagePublishUnicast() { //Arrange var localhost = GetFirstNic(); Assert.IsNotNull(localhost, "localhost is null"); Assert.IsNotNull(localhost.Address, "localhost.Address is null"); //create publisher configuration object with modified port string configurationFile = Utils.GetAbsoluteFilePath(PublisherConfigurationFileName, true, true, false); PubSubConfigurationDataType publisherConfiguration = UaPubSubConfigurationHelper.LoadConfiguration(configurationFile); Assert.IsNotNull(publisherConfiguration, "publisherConfiguration is null"); Assert.Greater(publisherConfiguration.Connections.Count, 1, "publisherConfiguration.Connection should be > 0"); IPAddress unicastIPAddress = localhost.Address; Assert.IsNotNull(unicastIPAddress, "unicastIPAddress is null"); NetworkAddressUrlDataType publisherAddress = new NetworkAddressUrlDataType(); publisherAddress.Url = string.Format(UdpUrlFormat, Utils.UriSchemeOpcUdp, unicastIPAddress.ToString()); publisherConfiguration.Connections.First().Address = new ExtensionObject(publisherAddress); //create publisher UaPubSubApplication with changed configuration settings UaPubSubApplication publisherApplication = UaPubSubApplication.Create(publisherConfiguration); Assert.IsNotNull(publisherApplication, "publisherApplication is null"); UdpPubSubConnection publisherConnection = publisherApplication.PubSubConnections.First() as UdpPubSubConnection; Assert.IsNotNull(publisherConnection, "publisherConnection is null"); // will signal that the uadp message was received from local ip m_shutdownEvent = new ManualResetEvent(false); //setup uadp client for receiving from multicast (simulate a subscriber unicast) UdpClient udpUnicastClient = new UdpClientUnicast(localhost.Address, DiscoveryPortNo); Assert.IsNotNull(udpUnicastClient, "udpUnicastClient is null"); udpUnicastClient.BeginReceive(new AsyncCallback(OnReceive), udpUnicastClient); // prepare a network message WriterGroupDataType writerGroup0 = publisherConnection.PubSubConnectionConfiguration.WriterGroups.First(); Assert.IsNotNull(writerGroup0, "writerGroup0 is null"); System.Collections.Generic.IList <UaNetworkMessage> networkMessages = publisherConnection.CreateNetworkMessages(writerGroup0, new WriterGroupPublishState()); Assert.IsNotNull(networkMessages, "connection.CreateNetworkMessages shall not return null"); //Act publisherConnection.Start(); if (networkMessages != null) { foreach (UaNetworkMessage uaNetworkMessage in networkMessages) { if (uaNetworkMessage != null) { publisherConnection.PublishNetworkMessage(uaNetworkMessage); } } } //Assert bool noMessageReceived = false; if (!m_shutdownEvent.WaitOne(EstimatedPublishingTime)) { noMessageReceived = true; } publisherConnection.Stop(); udpUnicastClient.Close(); udpUnicastClient.Dispose(); if (noMessageReceived == true) { Assert.Fail("The UDP message was not received"); } }
public void ValidateUdpPubSubConnectionNetworkMessagePublishMulticast() { //Arrange var localhost = GetFirstNic(); Assert.IsNotNull(localhost, "localhost is null"); Assert.IsNotNull(localhost.Address, "localhost.Address is null"); //create publisher configuration object with modified port string configurationFile = Utils.GetAbsoluteFilePath(PublisherConfigurationFileName, true, true, false); PubSubConfigurationDataType publisherConfiguration = UaPubSubConfigurationHelper.LoadConfiguration(configurationFile); Assert.IsNotNull(publisherConfiguration, "publisherConfiguration is null"); IPAddress multicastIPAddress = new IPAddress(new byte[4] { 239, 0, 0, 1 }); Assert.IsNotNull(multicastIPAddress, "multicastIPAddress is null"); NetworkAddressUrlDataType publisherAddress = new NetworkAddressUrlDataType(); publisherAddress.Url = "opc.udp://" + multicastIPAddress.ToString() + ":4840"; publisherConfiguration.Connections[0].Address = new ExtensionObject(publisherAddress); //create publisher UaPubSubApplication with changed configuration settings UaPubSubApplication publisherApplication = UaPubSubApplication.Create(publisherConfiguration); Assert.IsNotNull(publisherApplication, "publisherApplication is null"); UdpPubSubConnection publisherConnection = publisherApplication.PubSubConnections.First() as UdpPubSubConnection; Assert.IsNotNull(publisherConnection, "publisherConnection is null"); // will signal that the uadp message was received from local ip m_shutdownEvent = new ManualResetEvent(false); //setup uadp client for receiving from multicast (simulate a subscriber multicast) UdpClient udpMulticastClient = new UdpClientMulticast(localhost.Address, multicastIPAddress, 4840); udpMulticastClient.BeginReceive(new AsyncCallback(OnReceive), udpMulticastClient); // prepare a network message WriterGroupDataType writerGroup0 = publisherConnection.PubSubConnectionConfiguration.WriterGroups.First(); IList <UaNetworkMessage> networkMessages = publisherConnection.CreateNetworkMessages(writerGroup0); Assert.IsNotNull(networkMessages, "connection.CreateNetworkMessages shall not return null"); //Act publisherConnection.Start(); if (networkMessages != null) { foreach (UaNetworkMessage uaNetworkMessage in networkMessages) { if (uaNetworkMessage != null) { publisherConnection.PublishNetworkMessage(uaNetworkMessage); } } } //Assert if (!m_shutdownEvent.WaitOne(EstimatedPublishingTime)) { Assert.Fail("The UADP message was not received"); } publisherConnection.Stop(); udpMulticastClient.Close(); udpMulticastClient.Dispose(); }