public void DeviceLocator_Notifications_RaisesDeviceUnavailableWithMatchedNotificationFilter() { var publishedDevice = CreateDeviceTree(); var server = new MockCommsServer(); var deviceLocator = new MockDeviceLocator(server); var discoveredDevices = new List <DiscoveredSsdpDevice>(); using (var eventSignal = new System.Threading.ManualResetEvent(false)) { deviceLocator.DeviceUnavailable += (sender, args) => { discoveredDevices.Add(args.DiscoveredDevice); eventSignal.Set(); }; deviceLocator.NotificationFilter = publishedDevice.Devices.First().Udn; deviceLocator.StartListeningForNotifications(); server.MockReceiveBroadcast(GetMockByeByeNotification(publishedDevice)); server.WaitForMessageToProcess(10000); server.MockReceiveBroadcast(GetMockByeByeNotification(publishedDevice.Devices.First().Devices.First())); server.WaitForMessageToProcess(10000); server.MockReceiveBroadcast(GetMockByeByeNotification(publishedDevice.Devices.First())); server.WaitForMessageToProcess(10000); eventSignal.WaitOne(10000); } Assert.IsTrue(discoveredDevices.Any()); Assert.IsFalse(discoveredDevices.Any((d) => { return(!d.Usn.StartsWith(publishedDevice.Devices.First().Udn)); })); }
public void DeviceLocator_Notifications_ReceivesByeByeNotificationsForKnownDevice() { var server = new MockCommsServer(); var deviceLocator = new MockDeviceLocator(server); var receivedNotification = false; DiscoveredSsdpDevice device = null; bool expired = false; using (var eventSignal = new System.Threading.AutoResetEvent(false)) { deviceLocator.DeviceUnavailable += (sender, args) => { device = args.DiscoveredDevice; expired = args.Expired; receivedNotification = true; eventSignal.Set(); }; deviceLocator.StartListeningForNotifications(); server.MockReceiveBroadcast(GetMockAliveNotification()); server.WaitForMessageToProcess(10000); server.MockReceiveBroadcast(GetMockByeByeNotification()); eventSignal.WaitOne(10000); } Assert.IsTrue(receivedNotification); Assert.IsNotNull(device); Assert.IsFalse(expired); }
public void DeviceLocator_Notifications_HandlesByeByeDuringSearch() { var server = new MockCommsServer(); var deviceLocator = new MockDeviceLocator(server); DiscoveredSsdpDevice device = null; var receivedNotification = false; using (var eventSignal = new System.Threading.AutoResetEvent(false)) { deviceLocator.DeviceUnavailable += (sender, args) => { device = args.DiscoveredDevice; receivedNotification = true; eventSignal.Set(); }; deviceLocator.StartListeningForNotifications(); server.MockReceiveBroadcast(GetMockAliveNotification()); server.WaitForMessageToProcess(10000); var t = deviceLocator.SearchAsync(TimeSpan.FromSeconds(3)); System.Threading.Thread.Sleep(500); server.MockReceiveBroadcast(GetMockByeByeNotification()); eventSignal.WaitOne(10000); var results = t.GetAwaiter().GetResult(); Assert.IsNotNull(results); Assert.IsFalse(results.Any()); } Assert.IsTrue(receivedNotification); Assert.IsNotNull(device); }
public void DeviceLocator_SearchAsync_FiltersNotificationsDuringSearch() { var server = new MockCommsServer(); var deviceLocator = new MockDeviceLocator(server); var publishedDevice = CreateDeviceTree(); var publishedDevice2 = CreateDeviceTree(); deviceLocator.NotificationFilter = publishedDevice.Udn; deviceLocator.StartListeningForNotifications(); DiscoveredSsdpDevice device = null; bool newlyDiscovered = false; var receivedNotification = false; using (var eventSignal = new System.Threading.AutoResetEvent(false)) { deviceLocator.DeviceAvailable += (sender, args) => { device = args.DiscoveredDevice; newlyDiscovered = args.IsNewlyDiscovered; receivedNotification = true; eventSignal.Set(); }; var task = deviceLocator.SearchAsync(publishedDevice.Udn); server.MockReceiveBroadcast(GetMockAliveNotification(publishedDevice2)); server.WaitForMessageToProcess(5000); eventSignal.Reset(); server.MockReceiveBroadcast(GetMockAliveNotification(publishedDevice)); server.WaitForMessageToProcess(5000); eventSignal.WaitOne(10000); Assert.IsTrue(receivedNotification); var results = task.GetAwaiter().GetResult(); Assert.IsNotNull(results); Assert.AreEqual(1, results.Count()); Assert.IsTrue(results.First().Usn == device.Usn); } }
public void DeviceLocator_Notifications_IgnoresNonNotifyRequest() { var server = new MockCommsServer(); var deviceLocator = new MockDeviceLocator(server); var receivedNotification = false; DiscoveredSsdpDevice device = null; bool expired = false; deviceLocator.DeviceUnavailable += (sender, args) => { device = args.DiscoveredDevice; expired = args.Expired; receivedNotification = true; }; deviceLocator.StartListeningForNotifications(); server.MockReceiveBroadcast(GetMockNonNotifyRequest()); server.WaitForMessageToProcess(10000); server.Dispose(); Assert.IsFalse(receivedNotification); }
public void DeviceLocator_SearchAsync_FiltersNotificationsDuringSearch() { var server = new MockCommsServer(); var deviceLocator = new MockDeviceLocator(server); var publishedDevice = CreateDeviceTree(); var publishedDevice2 = CreateDeviceTree(); deviceLocator.NotificationFilter = publishedDevice.Udn; deviceLocator.StartListeningForNotifications(); DiscoveredSsdpDevice device = null; bool newlyDiscovered = false; var receivedNotification = false; using (var eventSignal = new System.Threading.AutoResetEvent(false)) { deviceLocator.DeviceAvailable += (sender, args) => { device = args.DiscoveredDevice; newlyDiscovered = args.IsNewlyDiscovered; receivedNotification = true; eventSignal.Set(); }; var task = deviceLocator.SearchAsync(publishedDevice.Udn); server.MockReceiveBroadcast(GetMockAliveNotification(publishedDevice2)); server.WaitForMessageToProcess(5000); eventSignal.Reset(); server.MockReceiveBroadcast(GetMockAliveNotification(publishedDevice)); server.WaitForMessageToProcess(5000); eventSignal.WaitOne(10000); Assert.IsTrue(receivedNotification); var results = task.GetAwaiter().GetResult(); Assert.IsNotNull(results); Assert.AreEqual(1, results.Count()); Assert.IsTrue(results.First().Usn == device.Usn); } }
public void DeviceLocator_Notifications_ReceivesByeByeNotificationsForKnownDevice() { var server = new MockCommsServer(); var deviceLocator = new MockDeviceLocator(server); var receivedNotification = false; DiscoveredSsdpDevice device = null; bool expired = false; using (var eventSignal = new System.Threading.AutoResetEvent(false)) { deviceLocator.DeviceUnavailable += (sender, args) => { device = args.DiscoveredDevice; expired = args.Expired; receivedNotification = true; eventSignal.Set(); }; deviceLocator.StartListeningForNotifications(); server.MockReceiveBroadcast(GetMockAliveNotification()); server.WaitForMessageToProcess(10000); server.MockReceiveBroadcast(GetMockByeByeNotification()); eventSignal.WaitOne(10000); } Assert.IsTrue(receivedNotification); Assert.IsNotNull(device); Assert.IsFalse(expired); }
public void DeviceLocator_Notifications_RaisesDeviceUnavailableWithMatchedNotificationFilter() { var publishedDevice = CreateDeviceTree(); var server = new MockCommsServer(); var deviceLocator = new MockDeviceLocator(server); var discoveredDevices = new List<DiscoveredSsdpDevice>(); using (var eventSignal = new System.Threading.ManualResetEvent(false)) { deviceLocator.DeviceUnavailable += (sender, args) => { discoveredDevices.Add(args.DiscoveredDevice); eventSignal.Set(); }; deviceLocator.NotificationFilter = publishedDevice.Devices.First().Udn; deviceLocator.StartListeningForNotifications(); server.MockReceiveBroadcast(GetMockByeByeNotification(publishedDevice)); server.WaitForMessageToProcess(10000); server.MockReceiveBroadcast(GetMockByeByeNotification(publishedDevice.Devices.First().Devices.First())); server.WaitForMessageToProcess(10000); server.MockReceiveBroadcast(GetMockByeByeNotification(publishedDevice.Devices.First())); server.WaitForMessageToProcess(10000); eventSignal.WaitOne(10000); } Assert.IsTrue(discoveredDevices.Any()); Assert.IsFalse(discoveredDevices.Any((d) => { return !d.Usn.StartsWith(publishedDevice.Devices.First().Udn); })); }
public void DeviceLocator_Notifications_IgnoresNonNotifyRequest() { var server = new MockCommsServer(); var deviceLocator = new MockDeviceLocator(server); var receivedNotification = false; DiscoveredSsdpDevice device = null; bool expired = false; deviceLocator.DeviceUnavailable += (sender, args) => { device = args.DiscoveredDevice; expired = args.Expired; receivedNotification = true; }; deviceLocator.StartListeningForNotifications(); server.MockReceiveBroadcast(GetMockNonNotifyRequest()); server.WaitForMessageToProcess(10000); server.Dispose(); Assert.IsFalse(receivedNotification); }
public void DeviceLocator_Notifications_HandlesByeByeDuringSearch() { var server = new MockCommsServer(); var deviceLocator = new MockDeviceLocator(server); DiscoveredSsdpDevice device = null; var receivedNotification = false; using (var eventSignal = new System.Threading.AutoResetEvent(false)) { deviceLocator.DeviceUnavailable += (sender, args) => { device = args.DiscoveredDevice; receivedNotification = true; eventSignal.Set(); }; deviceLocator.StartListeningForNotifications(); server.MockReceiveBroadcast(GetMockAliveNotification()); server.WaitForMessageToProcess(10000); var t = deviceLocator.SearchAsync(TimeSpan.FromSeconds(3)); System.Threading.Thread.Sleep(500); server.MockReceiveBroadcast(GetMockByeByeNotification()); eventSignal.WaitOne(10000); var results = t.GetAwaiter().GetResult(); Assert.IsNotNull(results); Assert.IsFalse(results.Any()); } Assert.IsTrue(receivedNotification); Assert.IsNotNull(device); }
public void Publisher_SearchResponse_DoesNotIgnoreDelayedDuplicateSearchRequest() { var rootDevice = CreateValidRootDevice(); var server = new MockCommsServer(); using (var publisher = new TestDevicePublisher(server)) { publisher.SupportPnpRootDevice = false; publisher.AddDevice(rootDevice); ReceivedUdpData searchRequest = GetSearchRequestMessage(SsdpConstants.UpnpDeviceTypeRootDevice); server.MockReceiveMessage(searchRequest); server.WaitForMessageToProcess(5000); server.WaitForMockMessage(1500); server.SentMessages.Clear(); System.Threading.Thread.Sleep(500); server.MockReceiveMessage(searchRequest); server.WaitForMessageToProcess(5000); server.WaitForMockMessage(2000); System.Threading.Thread.Sleep(100); var searchResponses = GetSentMessages(server.SentMessages); Assert.AreEqual(0, searchResponses.Where((r) => !r.IsSuccessStatusCode).Count()); Assert.IsTrue(GetResponses(searchResponses, SsdpConstants.UpnpDeviceTypeRootDevice).Count() == 1); } }