Esempio n. 1
0
        public async Task PostActivityUsingInvokeResponse(string expectedResponseBodyJson)
        {
            var httpClient = CreateHttpClientWithMockHandler((request, cancellationToken) =>
            {
                // Create mock response.
                var response = new HttpResponseMessage(HttpStatusCode.OK)
                {
                    Content = expectedResponseBodyJson == null ? null : new StringContent(expectedResponseBodyJson)
                };
                return(Task.FromResult(response));
            });

            var sut      = new BotFrameworkHttpClient(httpClient, new Mock <ICredentialProvider>().Object);
            var activity = new Activity {
                Conversation = new ConversationAccount()
            };
            var result = await sut.PostActivityAsync(string.Empty, string.Empty, new Uri("https://skillbot.com/api/messages"), new Uri("https://parentbot.com/api/messages"), "NewConversationId", activity);

            // Assert
            Assert.IsType <InvokeResponse <object> >(result);
            Assert.Equal(200, result.Status);
            if (expectedResponseBodyJson == null)
            {
                Assert.Null(result.Body);
            }
            else
            {
                var typedContent = JsonConvert.DeserializeObject <TestContentBody>(JsonConvert.SerializeObject(result.Body));
                Assert.Equal("someId", typedContent.Id);
                Assert.Equal("theProp", typedContent.SomeProp);
            }
        }
Esempio n. 2
0
        public async Task PostActivityUsingInvokeResponseOfTToSelf()
        {
            var activity = new Activity {
                Conversation = new ConversationAccount(id: Guid.NewGuid().ToString())
            };
            var httpClient = CreateHttpClientWithMockHandler((request, cancellationToken) =>
            {
                var sentActivity = JsonConvert.DeserializeObject <Activity>(request.Content.ReadAsStringAsync().Result);

                // Assert the activity we are sending is what we passed in.
                Assert.Equal(activity.Conversation.Id, sentActivity.Conversation.Id);

                // Create mock response.
                var response = new HttpResponseMessage(HttpStatusCode.OK)
                {
                    Content = new StringContent(JObject.FromObject(new TestContentBody("someId", "theProp")).ToString())
                };
                return(Task.FromResult(response));
            });

            var client = new BotFrameworkHttpClient(httpClient, new Mock <ICredentialProvider>().Object);
            var result = await client.PostActivityAsync <TestContentBody>(string.Empty, new Uri("https://skillbot.com/api/messages"), activity);

            Assert.IsType <InvokeResponse <TestContentBody> >(result);
            Assert.Equal((int)HttpStatusCode.OK, result.Status);
            Assert.NotNull(result.Body);
        }
 public ForwardController(BotFrameworkHttpClient client, IConfiguration configuration, SkillConversationIdFactoryBase factory)
 {
     _client     = client;
     _toUri      = new Uri(configuration["Next"]);
     _serviceUrl = new Uri(configuration["ServiceUrl"]);
     _factory    = factory;
 }
Esempio n. 4
0
        public void ConstructorAddsHttpClientHeaders()
        {
            var httpClient             = new HttpClient();
            var mockCredentialProvider = new Mock <ICredentialProvider>();

            Assert.False(httpClient.DefaultRequestHeaders.Any());
            _ = new BotFrameworkHttpClient(httpClient, mockCredentialProvider.Object);
            Assert.True(httpClient.DefaultRequestHeaders.Any());
        }
Esempio n. 5
0
 public ParentBot(BotFrameworkHttpClient client, IConfiguration configuration, MainDialog dialog, ConversationState conversationState, UserState userState)
 {
     _client            = client;
     _dialog            = dialog;
     _conversationState = conversationState;
     _userState         = userState;
     _fromBotId         = configuration.GetSection("MicrosoftAppId")?.Value;
     _toBotId           = configuration.GetSection("SkillMicrosoftAppId")?.Value;
     _connectionName    = configuration.GetSection("ConnectionName")?.Value;
 }
        public void ConstructorValidations()
        {
            var mockHttpClient         = new Mock <HttpClient>();
            var mockCredentialProvider = new Mock <ICredentialProvider>();

            Assert.Throws <ArgumentNullException>(() =>
            {
                var client = new BotFrameworkHttpClient(null, mockCredentialProvider.Object);
            });
            Assert.Throws <ArgumentNullException>(() =>
            {
                var client = new BotFrameworkHttpClient(mockHttpClient.Object, null);
            });
        }
        public async void DoesNotOverwriteNonNullRecipientValues()
        {
            const string skillRecipientId = "skillBot";
            Func <HttpRequestMessage, Task <HttpResponseMessage> > verifyRequestAndCreateResponse = (HttpRequestMessage request) =>
            {
                var content = request.Content.ReadAsStringAsync().Result;
                var a       = JsonConvert.DeserializeObject <Activity>(content);
                Assert.NotNull(a.Recipient);
                Assert.Equal(skillRecipientId, a.Recipient?.Id);
                var response = new HttpResponseMessage(HttpStatusCode.OK);

                response.Content = new StringContent(new JObject {
                }.ToString());
                return(Task.FromResult(response));
            };

            var mockHttpMessageHandler = new Mock <HttpMessageHandler>();

            mockHttpMessageHandler.Protected()
            .Setup <Task <HttpResponseMessage> >("SendAsync", ItExpr.IsAny <HttpRequestMessage>(), ItExpr.IsAny <CancellationToken>())
            .Returns((HttpRequestMessage request, CancellationToken cancellationToken) => verifyRequestAndCreateResponse(request))
            .Verifiable();

            var httpClient             = new HttpClient(mockHttpMessageHandler.Object);
            var mockCredentialProvider = new Mock <ICredentialProvider>();

            var client   = new BotFrameworkHttpClient(httpClient, mockCredentialProvider.Object);
            var activity = new Activity
            {
                Conversation = new ConversationAccount(),
                Recipient    = new ChannelAccount("skillBot")
            };

            await client.PostActivityAsync(string.Empty, string.Empty, new Uri("https://skillbot.com/api/messages"), new Uri("https://parentbot.com/api/messages"), "NewConversationId", activity);

            // Assert
            Assert.Equal("skillBot", activity?.Recipient?.Id);
        }
Esempio n. 8
0
 public ParentBot(BotFrameworkHttpClient client)
 {
     _client = client;
 }
Esempio n. 9
0
        public async Task PostActivityUsingInvokeResponseOfT(string testRecipientId)
        {
            // The test activity being sent.
            var testActivity = new Activity
            {
                Conversation = new ConversationAccount
                {
                    Id               = "TheActivityConversationId",
                    Name             = "TheActivityConversationName",
                    ConversationType = "TheActivityConversationType",
                    AadObjectId      = "TheActivityAadObjectId",
                    IsGroup          = true,
                    Properties       = new JObject(),
                    Role             = "TheActivityRole",
                    TenantId         = "TheActivityTenantId",
                },
                ServiceUrl = "https://theactivityServiceUrl",
                Recipient  = testRecipientId == null ? null : new ChannelAccount(testRecipientId),
                RelatesTo  = null,
            };

            var httpClient = CreateHttpClientWithMockHandler((request, cancellationToken) =>
            {
                // Assert the request properties
                Assert.Equal(new Uri("https://skillbot.com/api/messages"), request.RequestUri);

                // Assert expected values are in the activity being sent.
                var activitySent = JsonConvert.DeserializeObject <Activity>(request.Content.ReadAsStringAsync().Result);
                Assert.Equal("https://parentbot.com/api/messages", activitySent.ServiceUrl);
                Assert.Equal("NewConversationId", activitySent.Conversation.Id);
                if (testRecipientId == null)
                {
                    // Ensure a default recipient is set if we don't pass one.
                    Assert.NotNull(activitySent.Recipient);
                }
                else
                {
                    // Ensure the recipient we want is set if it is passed.
                    Assert.Equal("42", activitySent.Recipient.Id);
                }

                Assert.NotNull(activitySent.RelatesTo);
                Assert.Equal(testActivity.Conversation.Id, activitySent.RelatesTo.Conversation.Id);
                Assert.Equal("TheActivityConversationName", activitySent.RelatesTo.Conversation.Name);
                Assert.Equal("TheActivityConversationType", activitySent.RelatesTo.Conversation.ConversationType);
                Assert.Equal("TheActivityAadObjectId", activitySent.RelatesTo.Conversation.AadObjectId);
                Assert.Equal(true, activitySent.RelatesTo.Conversation.IsGroup);
                Assert.NotNull(activitySent.RelatesTo.Conversation.Properties);
                Assert.Equal("TheActivityRole", activitySent.RelatesTo.Conversation.Role);
                Assert.Equal("TheActivityTenantId", activitySent.RelatesTo.Conversation.TenantId);
                Assert.Equal("https://theactivityServiceUrl", activitySent.RelatesTo.ServiceUrl);

                // Create mock response.
                var response = new HttpResponseMessage(HttpStatusCode.OK)
                {
                    Content = new StringContent(JObject.FromObject(new TestContentBody("someId", "theProp")).ToString())
                };
                return(Task.FromResult(response));
            });

            var client = new BotFrameworkHttpClient(httpClient, new Mock <ICredentialProvider>().Object);
            var result = await client.PostActivityAsync <TestContentBody>(string.Empty, string.Empty, new Uri("https://skillbot.com/api/messages"), new Uri("https://parentbot.com/api/messages"), "NewConversationId", testActivity);

            // Assert
            Assert.Equal((int)HttpStatusCode.OK, result.Status);
            Assert.IsType <InvokeResponse <TestContentBody> >(result);
            Assert.NotNull(result.Body);

            var typedContent = JsonConvert.DeserializeObject <TestContentBody>(JsonConvert.SerializeObject(result.Body));

            Assert.Equal("someId", typedContent.Id);
            Assert.Equal("theProp", typedContent.SomeProp);
        }
Esempio n. 10
0
        private async Task ProcessSocketAsync(WebSocket webSocket)
        {
            var botClient = new BotFrameworkHttpClient(
                _httpClientFactory.CreateClient(),
                new SimpleCredentialProvider());

            var proxyBot = new DelegateStreamingBot(activity =>
            {
                return(botClient.PostActivityAsync(
                           _msaAppId,
                           _botAppId,
                           _botEndpoint,
                           _serviceEndpoint,
                           activity.Conversation.Id,
                           activity));
            });

            var streamingRequestHandler = new StreamingRequestHandler(proxyBot, proxyBot, webSocket);

            _server = new WebSocketServer(webSocket, streamingRequestHandler);

            var closedTask = _server.StartAsync();

            var buffer = new byte[1024 * 4];

            var cts = new CancellationTokenSource();
            Task <Tuple <Activity, TaskCompletionSource <ResourceResponse> > > bufferReceiveTask = null;

            try
            {
                while (!cts.IsCancellationRequested)
                {
                    if (bufferReceiveTask == null)
                    {
                        bufferReceiveTask = Task.Run(() => _replyBuffer.ReceiveAsync(cts.Token));
                    }

                    await Task.WhenAny(closedTask, bufferReceiveTask);

                    // Send from bot to socket
                    if (bufferReceiveTask.IsCompleted)
                    {
                        var activity = bufferReceiveTask.Result.Item1;
                        var tcs      = bufferReceiveTask.Result.Item2;
                        bufferReceiveTask = null;

                        var response = await streamingRequestHandler.SendActivityAsync(activity);

                        tcs.SetResult(response);
                    }

                    if (closedTask.IsCompleted)
                    {
                        break;
                    }
                }
            }
            finally
            {
                _server.Disconnect();
                cts.Cancel();

                if (bufferReceiveTask != null)
                {
                    try
                    {
                        await bufferReceiveTask;
                    }
                    catch (TaskCanceledException)
                    {
                    }
                }

                if (closedTask != null)
                {
                    try
                    {
                        await closedTask;
                    }
                    catch (TaskCanceledException)
                    {
                    }
                }
            }
        }