Beispiel #1
0
        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)); }));
        }
Beispiel #2
0
        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);
        }
Beispiel #3
0
        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);
        }
Beispiel #4
0
        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);
            }
        }
Beispiel #5
0
        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);
        }
Beispiel #6
0
        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);
            }
        }
Beispiel #7
0
        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);
        }
Beispiel #8
0
        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); }));
        }
Beispiel #9
0
        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);
        }
Beispiel #10
0
        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);
        }
Beispiel #11
0
        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);
            }
        }