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); }
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); } }
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); }