public void ValidateUadpPubSubConnectionNetworkMessagePublishMulticast() { //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 PubSubConfigurationDataType publisherConfiguration = UaPubSubConfigurationHelper.LoadConfiguration(PublisherConfigurationFileName); 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"); UadpPubSubConnection publisherConnection = publisherApplication.PubSubConnections[0] as UadpPubSubConnection; 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[0]; UaNetworkMessage networkMessage = publisherConnection.CreateNetworkMessage(writerGroup0); //Act publisherConnection.Start(); publisherConnection.PublishNetworkMessage(networkMessage); //Assert if (!m_shutdownEvent.WaitOne(EstimatedPublishingTime)) { Assert.Fail("The UADP message was not received"); } publisherConnection.Stop(); udpMulticastClient.Close(); udpMulticastClient.Dispose(); }
public void ValidateAddPublishedDataSet() { //Arrange DataCollector dataCollector = new DataCollector(new UaPubSubDataStore()); var pubSubConfiguration = UaPubSubConfigurationHelper.LoadConfiguration(ConfigurationFileName); //Act dataCollector.AddPublishedDataSet(pubSubConfiguration.PublishedDataSets[0]); DataSet collectedDataSet = dataCollector.CollectData(pubSubConfiguration.PublishedDataSets[0].Name); //Assert Assert.IsNotNull(collectedDataSet, "Cannot collect data therefore the '{0}' publishedDataSet was not registered correctly.", pubSubConfiguration.PublishedDataSets[0].Name); }
/// <summary> /// Creates a new <see cref="UaPubSubApplication"/> by loading the configuration parameters from the specified path. /// </summary> /// <param name="configFilePath">The path of the configuration path.</param> /// <param name="dataStore"> The current implementation of <see cref="IUaPubSubDataStore"/> used by this instance of pub sub application</param> /// <returns>New instance of <see cref="UaPubSubApplication"/></returns> public static UaPubSubApplication Create(string configFilePath, IUaPubSubDataStore dataStore = null) { // validate input argument if (configFilePath == null) { throw new ArgumentException(nameof(configFilePath)); } if (!File.Exists(configFilePath)) { throw new ArgumentException("The specified file {0} does not exist", configFilePath); } PubSubConfigurationDataType pubSubConfiguration = UaPubSubConfigurationHelper.LoadConfiguration(configFilePath); return(Create(pubSubConfiguration, dataStore)); }
public void ValidateAddPublishedDataSet() { //Arrange string configurationFile = Utils.GetAbsoluteFilePath(m_configurationFileName, true, true, false); var pubSubConfiguration = UaPubSubConfigurationHelper.LoadConfiguration(configurationFile); DataCollector dataCollector = new DataCollector(new UaPubSubDataStore()); //Act dataCollector.AddPublishedDataSet(pubSubConfiguration.PublishedDataSets.First()); DataSet collectedDataSet = dataCollector.CollectData(pubSubConfiguration.PublishedDataSets.First().Name); //Assert Assert.IsNotNull(collectedDataSet, "Cannot collect data therefore the '{0}' publishedDataSet was not registered correctly.", pubSubConfiguration.PublishedDataSets[0].Name); }
public void MyTestInitialize() { m_pubSubConfiguration = UaPubSubConfigurationHelper.LoadConfiguration(ConfigurationFileName); }
public void ValidateUadpPubSubConnectionNetworkMessageReceiveFromUnicast() { // Arrange var localhost = GetFirstNic(); Assert.IsNotNull(localhost, "localhost is null"); Assert.IsNotNull(localhost.Address, "localhost.Address is null"); PubSubConfigurationDataType subscriberConfiguration = UaPubSubConfigurationHelper.LoadConfiguration(SubscriberConfigurationFileName); Assert.IsNotNull(subscriberConfiguration, "subscriberConfiguration is null"); NetworkAddressUrlDataType subscriberAddress = new NetworkAddressUrlDataType(); subscriberAddress.Url = "opc.udp://" + localhost.Address.ToString() + ":4840"; subscriberConfiguration.Connections[0].Address = new ExtensionObject(subscriberAddress); UaPubSubApplication subscriberApplication = UaPubSubApplication.Create(subscriberConfiguration); Assert.IsNotNull(subscriberApplication, "subscriberApplication is null"); UadpPubSubConnection subscriberConnection = subscriberApplication.PubSubConnections[0] as UadpPubSubConnection; Assert.IsNotNull(subscriberConnection, "subscriberConnection is null"); subscriberConnection.UadpMessageReceived += DataReceived; PubSubConfigurationDataType publisherConfiguration = UaPubSubConfigurationHelper.LoadConfiguration(PublisherConfigurationFileName); Assert.IsNotNull(publisherConfiguration, "publisherConfiguration is null"); NetworkAddressUrlDataType publisherAddress = new NetworkAddressUrlDataType(); publisherAddress.Url = "opc.udp://" + localhost.Address.ToString() + ":4840"; publisherConfiguration.Connections[0].Address = new ExtensionObject(publisherAddress); UaPubSubApplication publisherApplication = UaPubSubApplication.Create(publisherConfiguration); Assert.IsNotNull(publisherApplication, "publisherApplication is null"); UadpPubSubConnection publisherConnection = publisherApplication.PubSubConnections[0] as UadpPubSubConnection; Assert.IsNotNull(publisherConnection, "publisherConnection is null"); //Act subscriberConnection.Start(); m_shutdownEvent = new ManualResetEvent(false); // physical network ip is mandatory on UdpClientUnicast as parameter UdpClient udpUnicastClient = new UdpClientUnicast(localhost.Address, 4840); Assert.IsNotNull(udpUnicastClient, "udpUnicastClient is null"); // first physical network ip = unicast address ip IPEndPoint remoteEndPoint = new IPEndPoint(localhost.Address, 4840); Assert.IsNotNull(remoteEndPoint, "remoteEndPoint is null"); m_sentBytes = PrepareData(publisherConnection); int sentBytesLen = udpUnicastClient.Send(m_sentBytes, m_sentBytes.Length, remoteEndPoint); Assert.AreEqual(sentBytesLen, m_sentBytes.Length, "Sent bytes size not equal to published bytes size!"); Thread.Sleep(EstimatedPublishingTime); // Assert if (!m_shutdownEvent.WaitOne(EstimatedPublishingTime)) { Assert.Fail("Subscriber unicast error ... published data not received"); } subscriberConnection.Stop(); }
public void ValidateUdpPubSubConnectionNetworkMessageReceiveFromDiscoveryResponse() { // Arrange var localhost = GetFirstNic(); Assert.IsNotNull(localhost, "localhost is null"); Assert.IsNotNull(localhost.Address, "localhost.Address is null"); //discovery IP address 224.0.2.14 IPAddress multicastIPAddress = new IPAddress(new byte[4] { 224, 0, 2, 14 }); Assert.IsNotNull(multicastIPAddress, "multicastIPAddress is null"); string configurationFile = Utils.GetAbsoluteFilePath(SubscriberConfigurationFileName, true, true, false); PubSubConfigurationDataType subscriberConfiguration = UaPubSubConfigurationHelper.LoadConfiguration(configurationFile); Assert.IsNotNull(subscriberConfiguration, "subscriberConfiguration is null"); NetworkAddressUrlDataType subscriberAddress = new NetworkAddressUrlDataType(); subscriberAddress.Url = string.Format(UdpUrlFormat, Utils.UriSchemeOpcUdp, multicastIPAddress.ToString()); subscriberConfiguration.Connections[0].Address = new ExtensionObject(subscriberAddress); UaPubSubApplication subscriberApplication = UaPubSubApplication.Create(subscriberConfiguration); Assert.IsNotNull(subscriberApplication, "subscriberApplication is null"); UdpPubSubConnection subscriberConnection = subscriberApplication.PubSubConnections.First() as UdpPubSubConnection; Assert.IsNotNull(subscriberConnection, "subscriberConnection is null"); subscriberApplication.RawDataReceived += RawDataReceived; configurationFile = Utils.GetAbsoluteFilePath(PublisherConfigurationFileName, true, true, false); PubSubConfigurationDataType publisherConfiguration = UaPubSubConfigurationHelper.LoadConfiguration(configurationFile); Assert.IsNotNull(publisherConfiguration, "publisherConfiguration is null"); NetworkAddressUrlDataType publisherAddress = new NetworkAddressUrlDataType(); publisherAddress.Url = string.Format(UdpUrlFormat, Utils.UriSchemeOpcUdp, multicastIPAddress.ToString()); publisherConfiguration.Connections.First().Address = new ExtensionObject(publisherAddress); UaPubSubApplication publisherApplication = UaPubSubApplication.Create(publisherConfiguration); Assert.IsNotNull(publisherApplication, "publisherApplication is null"); UdpPubSubConnection publisherConnection = publisherApplication.PubSubConnections.First() as UdpPubSubConnection; Assert.IsNotNull(publisherConnection, "publisherConnection is null"); //Act subscriberConnection.Start(); m_shutdownEvent = new ManualResetEvent(false); m_sentBytes = PrepareData(publisherConnection, UdpConnectionType.Discovery); // first physical network ip is mandatory on UdpClientMulticast as parameter, for multicast publisher the port must not be 4840 UdpClient udpMulticastClient = new UdpClientMulticast(localhost.Address, multicastIPAddress, 0); Assert.IsNotNull(udpMulticastClient, "udpMulticastClient is null"); IPEndPoint remoteEndPoint = new IPEndPoint(multicastIPAddress, DiscoveryPortNo); int sentBytesLen = udpMulticastClient.Send(m_sentBytes, m_sentBytes.Length, remoteEndPoint); Assert.AreEqual(sentBytesLen, m_sentBytes.Length, "Sent bytes size not equal to published bytes size!"); Thread.Sleep(EstimatedPublishingTime); // Assert if (!m_shutdownEvent.WaitOne(EstimatedPublishingTime)) { Assert.Fail("Subscriber multicast error ... published data not received"); } subscriberConnection.Stop(); }
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 ValidateUdpPubSubConnectionNetworkMessagePublishBroadcast() { //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 broadcastIPAddress = GetFirstNicLastIPByteChanged(255); Assert.IsNotNull(broadcastIPAddress, "broadcastIPAddress is null"); NetworkAddressUrlDataType publisherAddress = new NetworkAddressUrlDataType(); publisherAddress.Url = "opc.udp://" + broadcastIPAddress.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[0] 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 broadcast (simulate a subscriber broadcast) UdpClient udpBroadcastClient = new UdpClientBroadcast(localhost.Address, 4840, UsedInContext.Subscriber); udpBroadcastClient.BeginReceive(new AsyncCallback(OnReceive), udpBroadcastClient); // 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(); udpBroadcastClient.Close(); udpBroadcastClient.Dispose(); }
public void ValidateUdpPubSubConnectionNetworkMessageReceiveFromBroadcast() { // Arrange var localhost = GetFirstNic(); Assert.IsNotNull(localhost, "localhost is null"); Assert.IsNotNull(localhost.Address, "localhost.Address is null"); string configurationFile = Utils.GetAbsoluteFilePath(m_subscriberConfigurationFileName, true, true, false); PubSubConfigurationDataType subscriberConfiguration = UaPubSubConfigurationHelper.LoadConfiguration(configurationFile); Assert.IsNotNull(subscriberConfiguration, "subscriberConfiguration is null"); NetworkAddressUrlDataType subscriberAddress = new NetworkAddressUrlDataType(); subscriberAddress.Url = string.Format(kUdpUrlFormat, Utils.UriSchemeOpcUdp, localhost.Address.ToString()); subscriberConfiguration.Connections.First().Address = new ExtensionObject(subscriberAddress); UaPubSubApplication subscriberApplication = UaPubSubApplication.Create(subscriberConfiguration); Assert.IsNotNull(subscriberApplication, "subscriberApplication is null"); UdpPubSubConnection subscriberConnection = subscriberApplication.PubSubConnections.First() as UdpPubSubConnection; Assert.IsNotNull(subscriberConnection, "subscriberConnection is null"); subscriberApplication.RawDataReceived += RawDataReceived; configurationFile = Utils.GetAbsoluteFilePath(m_publisherConfigurationFileName, true, true, false); PubSubConfigurationDataType publisherConfiguration = UaPubSubConfigurationHelper.LoadConfiguration(configurationFile); Assert.IsNotNull(publisherConfiguration, "publisherConfiguration is null"); IPAddress broadcastIPAddress = GetFirstNicLastIPByteChanged(255); Assert.IsNotNull(broadcastIPAddress, "broadcastIPAddress is null"); NetworkAddressUrlDataType publisherAddress = new NetworkAddressUrlDataType(); publisherAddress.Url = string.Format(kUdpUrlFormat, Utils.UriSchemeOpcUdp, broadcastIPAddress.ToString()); publisherConfiguration.Connections.First().Address = new ExtensionObject(publisherAddress); UaPubSubApplication publisherApplication = UaPubSubApplication.Create(publisherConfiguration); Assert.IsNotNull(publisherApplication, "publisherApplication is null"); UdpPubSubConnection publisherConnection = publisherApplication.PubSubConnections.First() as UdpPubSubConnection; Assert.IsNotNull(publisherConnection, "publisherConnection is null"); //Act subscriberConnection.Start(); m_shutdownEvent = new ManualResetEvent(false); m_sentBytes = PrepareData(publisherConnection); // first physical network ip is mandatory on UdpClientBroadcast as parameter UdpClient udpBroadcastClient = new UdpClientBroadcast(localhost.Address, kDiscoveryPortNo, UsedInContext.Publisher); Assert.IsNotNull(udpBroadcastClient, "udpBroadcastClient is null"); IPEndPoint remoteEndPoint = new IPEndPoint(broadcastIPAddress, kDiscoveryPortNo); int sentBytesLen = udpBroadcastClient.Send(m_sentBytes, m_sentBytes.Length, remoteEndPoint); Assert.AreEqual(sentBytesLen, m_sentBytes.Length, "Sent bytes size not equal to published bytes size!"); Thread.Sleep(kEstimatedPublishingTime); // Assert if (!m_shutdownEvent.WaitOne(kEstimatedPublishingTime)) { Assert.Fail("Subscriber broadcast error ... published data not received"); } subscriberConnection.Stop(); }
public void ValidateUdpPubSubConnectionNetworkMessageDiscoveryPublish() { //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(m_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"); //discovery IP adress 224.0.2.14 IPAddress[] multicastIPAddresses = Dns.GetHostAddresses(kUdpDiscoveryIp); IPAddress multicastIPAddress = multicastIPAddresses.First(); Assert.IsNotNull(multicastIPAddress, "multicastIPAddress is null"); NetworkAddressUrlDataType publisherAddress = new NetworkAddressUrlDataType(); publisherAddress.Url = string.Format(kUdpUrlFormat, Utils.UriSchemeOpcUdp, multicastIPAddress.ToString()); 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, kDiscoveryPortNo); udpMulticastClient.BeginReceive(new AsyncCallback(OnReceive), udpMulticastClient); // prepare a network message WriterGroupDataType writerGroup0 = publisherConnection.PubSubConnectionConfiguration.WriterGroups.First(); List <UInt16> dataSetWriterIds = new List <UInt16>(); foreach (DataSetWriterDataType dataSetWriterDataType in writerGroup0.DataSetWriters) { dataSetWriterIds.Add(dataSetWriterDataType.DataSetWriterId); } IList <UaNetworkMessage> networkMessages = publisherConnection.CreateDataSetMetaDataNetworkMessages(dataSetWriterIds.ToArray()); 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(kEstimatedPublishingTime)) { noMessageReceived = true; } publisherConnection.Stop(); udpMulticastClient.Close(); udpMulticastClient.Dispose(); if (noMessageReceived) { Assert.Fail("The UDP message was not received"); } }
public void MyTestInitialize() { string configurationFile = Utils.GetAbsoluteFilePath(ConfigurationFileName, true, true, false); m_pubSubConfiguration = UaPubSubConfigurationHelper.LoadConfiguration(configurationFile); }