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);
            }
        }
Exemple #7
0
 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);
 }
Exemple #8
0
        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);
        }
Exemple #14
0
 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);
 }
Exemple #16
0
 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);
 }