public void TestResponse()
        {
            // Arrange
            _endpoint
            .Setup(c => c.SendAsync(It.IsAny <CoapPacket>(), It.IsAny <CancellationToken>()))
            .Returns(Task.FromResult(0))
            .Verifiable();

            var mockResource = new Mock <CoapResource>("/test")
            {
                CallBase = true
            };

            mockResource.Setup(r => r.Get(It.IsAny <CoapMessage>())).Returns(new CoapMessage());

            var request = new CoapMessage {
                Code = CoapMessageCode.Get
            };

            request.SetUri(new Uri(_baseUri, "/test"));

            // Act
            var service = new CoapResourceHandler();

            service.Resources.Add(mockResource.Object);

            service.ProcessRequestAsync(new MockConnectionInformation(_endpoint.Object), request.ToBytes()).Wait();
            //_client.Raise(c => c.OnMessageReceived += null, new CoapMessageReceivedEventArgs {Message = request});

            // Assert
            Mock.Verify(_endpoint, mockResource);
        }
        public void TestGetRequest()
        {
            // Arrange
            var mockResource = new Mock <CoapResource>("/test")
            {
                CallBase = true
            };

            mockResource
            .Setup(r => r.Get(It.IsAny <CoapMessage>()))
            .Returns(new CoapMessage())
            .Verifiable();

            var request = new CoapMessage {
                Code = CoapMessageCode.Get
            };

            request.SetUri(new Uri(_baseUri, "/test"));

            // Act
            var service = new CoapResourceHandler();

            service.Resources.Add(mockResource.Object);
            service.ProcessRequestAsync(new MockConnectionInformation(_endpoint.Object), request.ToBytes()).Wait();

            // Assert
            Mock.Verify(_endpoint, mockResource);
        }
        public void TestResourceInternalError()
        {
            // Arrange
            var expectedMessage = CoapMessage.Create(CoapMessageCode.InternalServerError, "An unexpected error occured", CoapMessageType.Reset).ToBytes();

            _endpoint
            .Setup(e => e.SendAsync(It.Is <CoapPacket>(p => p.Payload.SequenceEqual(expectedMessage)), It.IsAny <CancellationToken>()))
            .Returns(Task.FromResult(0))
            .Verifiable();

            var mockResource = new Mock <CoapResource>("/test")
            {
                CallBase = true
            };

            mockResource
            .Setup(r => r.Get(It.IsAny <CoapMessage>()))
            .Throws(new Exception("Somne generic exception"));

            var request = new CoapMessage {
                Code = CoapMessageCode.Get
            };

            request.SetUri(new Uri(_baseUri, "/test"));

            // Act
            var service = new CoapResourceHandler();

            service.Resources.Add(mockResource.Object);

            Assert.Throws <Exception>(() => service.ProcessRequestAsync(new MockConnectionInformation(_endpoint.Object), request.ToBytes()).GetAwaiter().GetResult());

            // Assert
            Mock.Verify(_endpoint);
        }
        public void TestResourceMethodBadOption()
        {
            // Arrange
            var expectedMessage = CoapMessage.FromException(new CoapOptionException("Unsupported critical option (45575)")).ToBytes();

            _endpoint
            .Setup(c => c.SendAsync(It.Is <CoapPacket>(p => p.Payload.SequenceEqual(expectedMessage)), It.IsAny <CancellationToken>()))
            .Returns(Task.FromResult(0))
            .Verifiable();

            var mockResource = new Mock <CoapResource>("/test")
            {
                CallBase = true
            };

            mockResource
            .Setup(r => r.Get(It.IsAny <CoapMessage>()))
            .Throws(new NotImplementedException());

            var request = new CoapMessage {
                Code = CoapMessageCode.Get, Options = { new CoapOption(45575) }
            };

            request.SetUri(new Uri(_baseUri, "/test"));

            // Act
            var service = new CoapResourceHandler();

            service.Resources.Add(mockResource.Object);
            service.ProcessRequestAsync(new MockConnectionInformation(_endpoint.Object), request.ToBytes()).Wait();

            // Assert
            Mock.Verify(_endpoint);
        }
Пример #5
0
        static async Task Main(string[] args)
        {
            // Create a task that finishes when Ctrl+C is pressed
            var taskCompletionSource = new TaskCompletionSource <bool>();

            // Capture the Control + C event
            Console.CancelKeyPress += (s, e) =>
            {
                Console.WriteLine("Exiting");
                taskCompletionSource.SetResult(true);

                // Prevent the Main task from being destroyed prematurely.
                e.Cancel = true;
            };

            Console.WriteLine("Press <Ctrl>+C to exit");

            // Create a resource handler.
            var myHandler = new CoapResourceHandler();

            // Register a /hello resource.
            myHandler.Resources.Add(new HelloResource("/hello"));

            // Create a new CoapServer using UDP as it's base transport
            var myServer = new CoapServer(new CoapUdpTransportFactory());

            try
            {
                // Listen to all ip address and subscribe to multicast requests.
                await myServer.BindTo(new CoapUdpEndPoint(Coap.Port) { JoinMulticast = true });

                // Start our server.
                await myServer.StartAsync(myHandler, CancellationToken.None);

                Console.WriteLine("Server Started!");

                // Wait indefinitely until the application quits.
                await taskCompletionSource.Task;
            }
            catch (Exception ex)
            {
                // Canceled tasks are expected, safe to ignore.
                if (ex is TaskCanceledException)
                {
                    return;
                }

                Console.WriteLine($"Exception caught: {ex}");

                Console.WriteLine($"Press <Enter> to exit");
                Console.Read();
            }
            finally
            {
                Console.WriteLine("Shutting Down Server");
                await myServer.StopAsync(CancellationToken.None);
            }
        }
Пример #6
0
        static void Main(string[] args)
        {
            var failed = false;

            var myHandler = new CoapResourceHandler();

            myHandler.Resources.Add(new HelloResource("/hello"));

            var myServer = new CoapServer(new CoapUdpTransportFactory());

            try
            {
                myServer.BindTo(new CoapUdpEndPoint(IPAddress.Any, Coap.Port)
                {
                    JoinMulticast = true
                });

                myServer.StartAsync(myHandler, CancellationToken.None).GetAwaiter().GetResult();

                Console.WriteLine("Server Started!");

                Console.WriteLine("Press <Enter> to exit");
                Console.ReadLine();
            }
            catch (Exception ex)
            {
                failed = true;
                Console.WriteLine($"{ex.GetType().Name} occured: {ex.Message}");
                Console.WriteLine(ex.StackTrace);
            }
            finally
            {
                Console.WriteLine("Shutting Down Server");
                myServer.StopAsync(CancellationToken.None).GetAwaiter().GetResult();
            }

            if (failed)
            {
                Console.ReadLine();
            }
        }
        public void TestResourceNotFound()
        {
            // Arrange
            var expectedMessage = CoapMessage.Create(CoapMessageCode.NotFound, $"Resouce {new Uri(_baseUri, "/test")} was not found", CoapMessageType.Acknowledgement).ToBytes();

            _endpoint
            .Setup(e => e.SendAsync(It.Is <CoapPacket>(p => p.Payload.SequenceEqual(expectedMessage)), It.IsAny <CancellationToken>()))
            .Returns(Task.FromResult(0))
            .Verifiable();

            var request = new CoapMessage {
                Code = CoapMessageCode.Get
            };

            request.SetUri(new Uri(_baseUri, "/test"));

            // Act
            var service = new CoapResourceHandler();

            service.ProcessRequestAsync(new MockConnectionInformation(_endpoint.Object), request.ToBytes()).Wait();

            // Assert
            Mock.Verify(_endpoint);
        }