Example #1
0
        /// <summary>
        /// Runner for ensuring ExtractInfoHttpTrigger runs correctly against a remote Azure Function.
        /// </summary>
        /// <param name="httpClient">The HttpClient instance to use.</param>
        /// <param name="functionSettings">Configuration information required for calling the Azure Function.</param>
        /// <param name="queue">The queue of tests to run.</param>
        /// <returns>An asynchronous task.</returns>
        public async Task ExtractInfoRunnerAsync(HttpClient httpClient, FunctionSettings functionSettings, ConcurrentQueue <TestConfiguration> queue)
        {
            TestConfiguration nextTestConfiguration = null;

            while (!queue.IsEmpty)
            {
                if (queue.TryDequeue(out nextTestConfiguration))
                {
                    HttpContent requestContent = CreateHttpPostContent(nextTestConfiguration.CallSid, nextTestConfiguration.Transcript);

                    HttpResponseMessage httpResponse = await httpClient.PostAsync(functionSettings.ExtractInfoUrl, requestContent);

                    string responseContent = await httpResponse.Content.ReadAsStringAsync();

                    ExtractInfoResponse response = JsonConvert.DeserializeObject <ExtractInfoResponse>(responseContent);

                    Assert.AreEqual(nextTestConfiguration.CallSid, response.CallSid);
                    Assert.IsNotNull(response.Data);

                    _log.LogInformation("Writing extracted data to test configuration...");
                    nextTestConfiguration.Data = response.Data;
                }

                TH.Thread.Sleep(2000);
            }
        }
Example #2
0
        public void ExtractInfoHttpTriggerRun()
        {
            HttpRequest request = CreateHttpPostRequest(_config.CallSid, _config.Transcript);

            ExecutionContext context = new ExecutionContext()
            {
                FunctionAppDirectory = Directory.GetCurrentDirectory(),
            };

            IActionResult result = ExtractInfoHttpTrigger.Run(request, _log, context).Result;

            Assert.IsInstanceOfType(result, typeof(OkObjectResult));

            OkObjectResult okResult = (OkObjectResult)result;

            Assert.AreEqual(200, okResult.StatusCode);
            Assert.IsInstanceOfType(okResult.Value, typeof(ExtractInfoResponse));

            ExtractInfoResponse response = (ExtractInfoResponse)okResult.Value;

            Assert.AreEqual(_config.CallSid, response.CallSid);
            Assert.IsNotNull(response.Data);
            Assert.AreEqual(_config.Transcript.Length < 500 ? _config.Transcript : _config.Transcript.Substring(0, 500), response.Data.Transcription);

            if (_config.ExpectedEntities.Contains("Dates"))
            {
                Assert.IsNotNull(response.Data.Dates);
                Assert.IsTrue(response.Data.Dates.Count > 0);
            }

            if (_config.ExpectedEntities.Contains("Location"))
            {
                Assert.IsNotNull(response.Data.Location);
            }

            if (_config.ExpectedEntities.Contains("Person"))
            {
                Assert.IsNotNull(response.Data.Person);
            }

            if (_config.ExpectedAdditionalEntities != null &&
                _config.ExpectedAdditionalEntities.Count > 0)
            {
                foreach (KeyValuePair <string, string> expectedAdditionalEntity in _config.ExpectedAdditionalEntities)
                {
                    Assert.IsTrue(
                        response
                        .Data
                        .AdditionalData
                        .ContainsKey(expectedAdditionalEntity.Key));
                    Assert.AreEqual(
                        expectedAdditionalEntity.Value,
                        response.Data.AdditionalData[expectedAdditionalEntity.Key]);
                }
            }

            Assert.IsFalse(response.HasError);
            Assert.AreEqual((int)CommonErrorCode.NoError, response.ErrorCode);
            Assert.IsNull(response.ErrorDetails);
        }
Example #3
0
        /// <summary>
        /// Runner for ensuring ExtractInfoHttpTrigger.Run() implementation runs correctly for concurrent executions.
        /// </summary>
        /// <param name="queue">The queue of tests to run.</param>
        public void ExtractInfoRunnerLocal(ConcurrentQueue <TestConfiguration> queue)
        {
            TestConfiguration nextTestConfiguration = null;

            while (!queue.IsEmpty)
            {
                if (queue.TryDequeue(out nextTestConfiguration))
                {
                    HttpRequest request = CreateHttpPostRequest(nextTestConfiguration.CallSid, nextTestConfiguration.Transcript);

                    ExecutionContext context = new ExecutionContext()
                    {
                        FunctionAppDirectory = Directory.GetCurrentDirectory(),
                    };

                    IActionResult result = ExtractInfoHttpTrigger.Run(request, _log, context).Result;

                    Assert.IsInstanceOfType(result, typeof(OkObjectResult));

                    OkObjectResult okResult = (OkObjectResult)result;

                    Assert.AreEqual(200, okResult.StatusCode);
                    Assert.IsInstanceOfType(okResult.Value, typeof(ExtractInfoResponse));

                    ExtractInfoResponse response = (ExtractInfoResponse)okResult.Value;

                    Assert.AreEqual(nextTestConfiguration.CallSid, response.CallSid);
                    Assert.IsNotNull(response.Data);

                    _log.LogInformation("Writing extracted data to test configuration...");
                    nextTestConfiguration.Data = response.Data;
                }

                TH.Thread.Sleep(2000);
            }

            _concurrentConfig.Save(GlobalTestConstants.ConcurrentTestConfigurationFilePath);
        }