public async Task InvokeActivity() { // Arrange var headerDictionaryMock = new Mock <IHeaderDictionary>(); headerDictionaryMock.Setup(h => h[It.Is <string>(v => v == "Authorization")]).Returns <string>(null); var httpRequestMock = new Mock <HttpRequest>(); httpRequestMock.Setup(r => r.Body).Returns(CreateInvokeActivityStream()); httpRequestMock.Setup(r => r.Headers).Returns(headerDictionaryMock.Object); var response = new MemoryStream(); var httpResponseMock = new Mock <HttpResponse>(); httpResponseMock.Setup(r => r.Body).Returns(response); var bot = new InvokeResponseBot(); // Act var adapter = new BotFrameworkHttpAdapter(); await adapter.ProcessAsync(httpRequestMock.Object, httpResponseMock.Object, bot); // Assert using (var stream = new MemoryStream(response.GetBuffer())) using (var reader = new StreamReader(stream)) { var s = reader.ReadToEnd(); var json = JObject.Parse(s); Assert.Equal("im.feeling.really.attacked.right.now", json["quite.honestly"]); } }
public async Task WebSocketRequest() { // Arrange var headerDictionaryMock = new Mock <IHeaderDictionary>(); headerDictionaryMock.Setup(h => h[It.Is <string>(v => v == "Authorization")]).Returns <string>(null); var httpRequestMock = new Mock <HttpRequest>(); httpRequestMock.Setup(r => r.Body).Returns(CreateMessageActivityStream()); httpRequestMock.Setup(r => r.Headers).Returns(headerDictionaryMock.Object); httpRequestMock.Setup(r => r.Method).Returns(HttpMethods.Get); httpRequestMock.Setup(r => r.HttpContext.WebSockets.IsWebSocketRequest).Returns(true); httpRequestMock.Setup(r => r.HttpContext.WebSockets.AcceptWebSocketAsync()).Returns(async() => await Task.FromResult(new FauxSock())); var httpResponseMock = new Mock <HttpResponse>(); var botMock = new Mock <IBot>(); botMock.Setup(b => b.OnTurnAsync(It.IsAny <TurnContext>(), It.IsAny <CancellationToken>())).Returns(Task.CompletedTask); // Act var adapter = new BotFrameworkHttpAdapter(); await adapter.ProcessAsync(httpRequestMock.Object, httpResponseMock.Object, botMock.Object); // Assert, we should have made the call to accept the web socket httpRequestMock.Verify(m => m.HttpContext.WebSockets.AcceptWebSocketAsync(), Times.Once()); }
public async Task MessageActivityWithHttpClient() { // Arrange var headerDictionaryMock = new Mock <IHeaderDictionary>(); headerDictionaryMock.Setup(h => h[It.Is <string>(v => v == "Authorization")]).Returns <string>(null); var httpRequestMock = new Mock <HttpRequest>(); httpRequestMock.Setup(r => r.Body).Returns(CreateMessageActivityStream()); httpRequestMock.Setup(r => r.Headers).Returns(headerDictionaryMock.Object); var httpResponseMock = new Mock <HttpResponse>(); var mockHttpMessageHandler = new Mock <HttpMessageHandler>(); mockHttpMessageHandler.Protected() .Setup <Task <HttpResponseMessage> >("SendAsync", ItExpr.IsAny <HttpRequestMessage>(), ItExpr.IsAny <CancellationToken>()) .Returns((HttpRequestMessage request, CancellationToken cancellationToken) => Task.FromResult(CreateInternalHttpResponse())); var httpClient = new HttpClient(mockHttpMessageHandler.Object); var bot = new MessageBot(); // Act var adapter = new BotFrameworkHttpAdapter(null, null, httpClient, null); await adapter.ProcessAsync(httpRequestMock.Object, httpResponseMock.Object, bot); // Assert mockHttpMessageHandler.Protected().Verify <Task <HttpResponseMessage> >("SendAsync", Times.Once(), ItExpr.IsAny <HttpRequestMessage>(), ItExpr.IsAny <CancellationToken>()); }
public async Task BasicMessageActivity() { // Arrange var headerDictionaryMock = new Mock <IHeaderDictionary>(); headerDictionaryMock.Setup(h => h[It.Is <string>(v => v == "Authorization")]).Returns <string>(null); var httpRequestMock = new Mock <HttpRequest>(); httpRequestMock.Setup(r => r.Body).Returns(CreateMessageActivityStream()); httpRequestMock.Setup(r => r.Headers).Returns(headerDictionaryMock.Object); var httpResponseMock = new Mock <HttpResponse>(); var botMock = new Mock <IBot>(); botMock.Setup(b => b.OnTurnAsync(It.IsAny <TurnContext>(), It.IsAny <CancellationToken>())).Returns(Task.CompletedTask); // Act var adapter = new BotFrameworkHttpAdapter(); await adapter.ProcessAsync(httpRequestMock.Object, httpResponseMock.Object, botMock.Object); // Assert botMock.Verify(m => m.OnTurnAsync(It.Is <TurnContext>(tc => true), It.Is <CancellationToken>(ct => true)), Times.Once()); }
public async Task MessageActivityWithHttpClient() { // Arrange var httpRequest = new HttpRequestMessage(); httpRequest.Method = HttpMethod.Post; httpRequest.Content = CreateMessageActivityContent(); var httpResponse = new HttpResponseMessage(); var mockHttpMessageHandler = new Mock <HttpMessageHandler>(); mockHttpMessageHandler.Protected() .Setup <Task <HttpResponseMessage> >("SendAsync", ItExpr.IsAny <HttpRequestMessage>(), ItExpr.IsAny <CancellationToken>()) .Returns((HttpRequestMessage request, CancellationToken cancellationToken) => Task.FromResult(CreateInternalHttpResponse())); var httpClient = new HttpClient(mockHttpMessageHandler.Object); var bot = new MessageBot(); // Act var adapter = new BotFrameworkHttpAdapter(null, null, httpClient, null); await adapter.ProcessAsync(httpRequest, httpResponse, bot); // Assert mockHttpMessageHandler.Protected().Verify <Task <HttpResponseMessage> >("SendAsync", Times.Once(), ItExpr.IsAny <HttpRequestMessage>(), ItExpr.IsAny <CancellationToken>()); }
/// <summary> /// In the case of a WebSocket upgrade request this method hands off to the registered Bot Framework Protocol v3 with Streaming Extensions compliant adapter. /// In all other cases acts as a passthrough to the registered Bot Framework adapter. /// Throws <see cref="ArgumentNullException"/> when required arguments are null. /// </summary> /// <param name="httpRequest">The request captured by the bot controller.</param> /// <param name="httpResponse">A response to be sent in answer to the request.</param> /// <param name="bot">The bot to use when processing the request.</param> /// <param name="cancellationToken">Optional cancellation token.</param> /// <returns>A task that represents the work queued to execute.</returns> public async Task ProcessAsync(HttpRequest httpRequest, HttpResponse httpResponse, IBot bot, CancellationToken cancellationToken = default(CancellationToken)) { if (httpRequest == null) { throw new ArgumentNullException(nameof(httpRequest)); } if (httpResponse == null) { throw new ArgumentNullException(nameof(httpResponse)); } if (bot == null) { throw new ArgumentNullException(nameof(bot)); } if (HttpMethods.IsGet(httpRequest.Method) && httpRequest.HttpContext.WebSockets.IsWebSocketRequest) { await _webSocketConnector.ProcessAsync(OnTurnError, middlewares, httpRequest, httpResponse, cancellationToken).ConfigureAwait(false); } else { bool check = _ensureMiddlewareSet.Value; await _botFrameworkHttpAdapter.ProcessAsync(httpRequest, httpResponse, bot, cancellationToken).ConfigureAwait(false); } }
public async Task PostAsync() { // Delegate the processing of the HTTP POST to the adapter. // The adapter will invoke the bot. var bot = SkillValidation.IsSkillToken(Request.Headers["Authorization"]) ? _echoBot : _rootBot; await _adapter.ProcessAsync(Request, Response, bot); }
public async Task <IActionResult> Run( [HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = null)] HttpRequest req, ILogger log) { log.LogInformation($"Messages endpoint triggered."); await _adapter.ProcessAsync(req, req.HttpContext.Response, _bot); return(new StatusCodeResult(req.HttpContext.Response.StatusCode)); }
public async Task PostAsync() { try { await _adapter.ProcessAsync(Request, Response, _bot); } catch (Exception ex) { Console.WriteLine(ex); throw; } }
public async Task BasicMessageActivity() { // Arrange var httpRequest = new HttpRequestMessage(); httpRequest.Content = CreateMessageActivityContent(); var httpResponse = new HttpResponseMessage(); var botMock = new Mock<IBot>(); botMock.Setup(b => b.OnTurnAsync(It.IsAny<TurnContext>(), It.IsAny<CancellationToken>())).Returns(Task.CompletedTask); // Act var adapter = new BotFrameworkHttpAdapter(); await adapter.ProcessAsync(httpRequest, httpResponse, botMock.Object); // Assert botMock.Verify(m => m.OnTurnAsync(It.Is<TurnContext>(tc => true), It.Is<CancellationToken>(ct => true)), Times.Once()); }
public async Task <HttpResponseMessage> Message() { // DO NOT LEAVE IT LIKE THIS IN PRODUCTION! // Register the adapter and bot with an IoC container as singletons. var adapter = new BotFrameworkHttpAdapter( new ConfigurationCredentialProvider { AppId = ConfigurationManager.AppSettings["TeamsApp.ClientId"], Password = ConfigurationManager.AppSettings["TeamsApp.Password"] } ); var bot = new MessageBot(); // Process the request. var response = new HttpResponseMessage(); await adapter.ProcessAsync(Request, response, bot); return(response); }
public async Task InvokeActivity() { // Arrange var httpRequest = new HttpRequestMessage(); httpRequest.Content = CreateInvokeActivityContent(); var httpResponse = new HttpResponseMessage(); var bot = new InvokeResponseBot(); // Act var adapter = new BotFrameworkHttpAdapter(); await adapter.ProcessAsync(httpRequest, httpResponse, bot); // Assert var s = await httpResponse.Content.ReadAsStringAsync(); var json = JObject.Parse(s); Assert.Equal("im.feeling.really.attacked.right.now", json["quite.honestly"]); }
public async Task BadRequest() { // Arrange var httpRequest = new HttpRequestMessage(); httpRequest.Content = new StringContent("this.is.not.json", Encoding.UTF8, "application/json"); var httpResponse = new HttpResponseMessage(); var botMock = new Mock <IBot>(); botMock.Setup(b => b.OnTurnAsync(It.IsAny <TurnContext>(), It.IsAny <CancellationToken>())).Returns(Task.CompletedTask); // Act var adapter = new BotFrameworkHttpAdapter(); await adapter.ProcessAsync(httpRequest, httpResponse, botMock.Object); // Assert botMock.Verify(m => m.OnTurnAsync(It.Is <TurnContext>(tc => true), It.Is <CancellationToken>(ct => true)), Times.Never()); Assert.Equal(HttpStatusCode.BadRequest, httpResponse.StatusCode); }
public async Task ProcessAsync(HttpRequest httpRequest, HttpResponse httpResponse, IBot bot, CancellationToken cancellationToken = default(CancellationToken)) { bool _ = _ensureMiddlewareSet.Value; await _botFrameworkHttpAdapter.ProcessAsync(httpRequest, httpResponse, bot, cancellationToken).ConfigureAwait(false); }
public async Task PostAsync() { await _adapter.ProcessAsync(Request, Response, _bot); }
public async Task PostAsync() { // Delegate the processing of the HTTP POST to the adapter. // The adapter will invoke the bot. await _adapter.ProcessAsync(Request, Response, _bot); }