Пример #1
0
        private async Task PerformCallbacks(
            HttpContext httpContext,
            IMockacoContext mockacoContext,
            IScriptContext scriptContext,
            ITemplateTransformer templateTransformer,
            MockacoOptions options)
        {
            try
            {
                var stopwatch = Stopwatch.StartNew();

                var template = await templateTransformer.Transform(mockacoContext.Mock.RawTemplate, scriptContext);

                var callbackTasks = new List <Task>();

                foreach (var callbackTemplate in template.Callbacks)
                {
                    callbackTasks.Add(PerformCallback(httpContext, callbackTemplate, options, stopwatch.ElapsedMilliseconds));
                }

                await Task.WhenAll(callbackTasks);
            }
            catch (Exception ex)
            {
                _logger.LogError(ex, "Error preparing callback(s)");
            }
        }
Пример #2
0
 public MailController(INotificationsSettings notificationsSettings, ISmtpClient mail, ITemplateTransformer templateTransformer, ILogger logger)
 {
     _notificationsSettings = notificationsSettings ?? throw new ArgumentNullException(nameof(notificationsSettings));
     _mail = mail ?? throw new ArgumentNullException(nameof(mail));
     _templateTransformer = templateTransformer ?? throw new ArgumentNullException(nameof(templateTransformer));
     _logger = logger ?? throw new ArgumentNullException(nameof(logger));
 }
Пример #3
0
        private async Task PerformCallback(
            HttpContext httpContext,
            IMockacoContext mockacoContext,
            IScriptContext scriptContext,
            ITemplateTransformer templateTransformer,
            MockacoOptions options)
        {
            try
            {
                var stopwatch = Stopwatch.StartNew();

                var callbackTemplate = await PrepareCallbackTemplate(mockacoContext, scriptContext, templateTransformer);

                var request = PrepareHttpRequest(callbackTemplate, options);

                var httpClient = PrepareHttpClient(httpContext, callbackTemplate);

                await DelayRequest(callbackTemplate, stopwatch.ElapsedMilliseconds);

                stopwatch.Restart();

                _logger.LogDebug("Callback started");

                await PerformRequest(request, httpClient);

                _logger.LogDebug("Callback finished in {0} ms", stopwatch.ElapsedMilliseconds);
            }
            catch (Exception ex)
            {
                _logger.LogError(ex, "Callback error");
            }
        }
        public async Task Invoke(
            HttpContext httpContext,
            IMockacoContext mockacoContext,
            IScriptContext scriptContext,
            IMockProvider mockProvider,
            ITemplateTransformer templateTransformer,
            IEnumerable <IRequestMatcher> requestMatchers
            )
        {
            LogHttpContext(httpContext);

            AttachRequestToScriptContext(httpContext, mockacoContext, scriptContext);

            if (mockacoContext.Errors.Any())
            {
                return;
            }

            foreach (var mock in mockProvider.GetMocks())
            {
                if (requestMatchers.All(_ => _.IsMatch(httpContext.Request, mock)))
                {
                    scriptContext.AttachRouteParameters(httpContext.Request, mock);

                    var template = await templateTransformer.Transform(mock.RawTemplate, scriptContext);

                    var conditionIsMatch = template.Request?.Condition ?? true;

                    if (conditionIsMatch)
                    {
                        _logger.LogInformation("Incoming request matched {mock}", mock);

                        mockacoContext.Mock = mock;
                        mockacoContext.TransformedTemplate = template;

                        await _next(httpContext);

                        return;
                    }
                    else
                    {
                        _logger.LogDebug("Incoming request didn't match condition for {mock}", mock);
                    }
                }
                else
                {
                    _logger.LogDebug("Incoming request didn't match {mock}", mock);
                }
            }

            _logger.LogInformation("Incoming request didn't match any mock");

            mockacoContext.Errors.Add(new Error("Incoming request didn't match any mock"));
        }
 public RequestConditionMatcher(
     ITemplateTransformer templateTransformer,
     IFakerFactory fakerFactory,
     IRequestBodyFactory requestBodyFactory,
     IMockacoContext mockacoContext,
     IGlobalVariableStorage globalVariableStoreage,
     ILogger <RequestConditionMatcher> logger)
 {
     _templateTransformer  = templateTransformer;
     _fakerFactory         = fakerFactory;
     _requestBodyFactory   = requestBodyFactory;
     _mockacoContext       = mockacoContext;
     _globalVarialeStorage = globalVariableStoreage;
     _logger = logger;
 }
        protected virtual string FillTemplateProperty(ITemplateProvider provider, ITemplateTransformer transformer,
                                                      TemplateData templateData)
        {
            if (provider == null || transformer == null)
            {
                return(null);
            }

            Dictionary <string, string> filledTemplates = transformer.Transform(
                provider, new List <TemplateData> {
                templateData
            });

            return(filledTemplates[templateData.Language ?? string.Empty]);
        }
Пример #7
0
        public Task Invoke(
            HttpContext httpContext,
            IMockacoContext mockacoContext,
            IScriptContext scriptContext,
            ITemplateTransformer templateTransformer,
            IOptionsSnapshot <MockacoOptions> options)
        {
            if (mockacoContext.TransformedTemplate?.Callback == null)
            {
                return(Task.CompletedTask);
            }

            httpContext.Response.OnCompleted(
                () =>
            {
                var fireAndForgetTask = PerformCallback(httpContext, mockacoContext, scriptContext, templateTransformer, options.Value);
                return(Task.CompletedTask);
            });

            return(Task.CompletedTask);
        }
Пример #8
0
        public Task Invoke(
            HttpContext httpContext,
            IMockacoContext mockacoContext,
            IScriptContext scriptContext,
            ITemplateTransformer templateTransformer,
            IOptionsSnapshot <MockacoOptions> options)
        {
            if (mockacoContext.TransformedTemplate?.Callbacks?.Any() != true)
            {
                return(Task.CompletedTask);
            }

            httpContext.Response.OnCompleted(
                () =>
            {
                //TODO Refactor to avoid method with too many parameters (maybe a CallbackRunnerFactory?)
                var fireAndForgetTask = PerformCallbacks(httpContext, mockacoContext, scriptContext, templateTransformer, options.Value);
                return(Task.CompletedTask);
            });

            return(Task.CompletedTask);
        }
 //инициализация
 public NotificationSettings(ITemplateProvider templateProvider, ITemplateTransformer templateTransformer)
 {
     TemplateProvider = templateProvider;
     TemplateTransformer = templateTransformer;
 }
Пример #10
0
 public MailKitSmtpClient(ITemplateTransformer templateTransformer, ILogger logger, ISmtpSettings smtpSettings)
 {
     _viewRenderService = templateTransformer ?? throw new ArgumentNullException(nameof(templateTransformer));
     _logger = logger ?? throw new ArgumentNullException(nameof(logger));
     _smtpSettings = smtpSettings ?? throw new ArgumentNullException(nameof(smtpSettings));
 }
Пример #11
0
        private static async Task <CallbackTemplate> PrepareCallbackTemplate(IMockacoContext mockacoContext, IScriptContext scriptContext, ITemplateTransformer templateTransformer)
        {
            var template = await templateTransformer.Transform(mockacoContext.Mock.RawTemplate, scriptContext);

            return(template.Callback);
        }
        protected virtual List <string> FillTemplateProperty(ITemplateProvider provider, ITemplateTransformer transformer,
                                                             List <Subscriber <TKey> > subscribers, List <TemplateData> templateData)
        {
            if (provider == null || transformer == null)
            {
                return(subscribers
                       .Select(x => (string)null)
                       .ToList());
            }

            Dictionary <string, string> filledTemplates = transformer.Transform(provider, templateData);

            return(subscribers
                   .Select(subscriber => filledTemplates[subscriber.Language ?? string.Empty])
                   .ToList());
        }