public void Setup() { _options = new EasyMwsOptions(); var propertiesContainer = new FeedSubmissionPropertiesContainer("testFeedContent", "testFeedType", false, new List <string>(MwsMarketplaceGroup.AmazonEurope().Select(m => m.Id))); var serializedPropertiesContainer = JsonConvert.SerializeObject(propertiesContainer); _feedSubmissionEntries = new List <FeedSubmissionEntry> { new FeedSubmissionEntry(serializedPropertiesContainer) { Id = 2 }, new FeedSubmissionEntry(serializedPropertiesContainer) { Id = 1, AmazonRegion = AmazonRegion.Europe, TargetHandlerId = "TargetHandlerId", TargetHandlerArgs = JsonConvert.SerializeObject(new Dictionary <string, object> { { "key1", "value1" } }), FeedType = propertiesContainer.FeedType, FeedSubmissionData = JsonConvert.SerializeObject(propertiesContainer) } }; _loggerMock = new Mock <IEasyMwsLogger>(); _feedSubmissionCallbackRepoMock = new Mock <IFeedSubmissionEntryRepository>(); _feedSubmissionCallbackRepoMock.Setup(x => x.GetAll()).Returns(_feedSubmissionEntries.AsQueryable()); _feedSubmissionEntryService = new FeedSubmissionEntryService(_feedSubmissionCallbackRepoMock.Object, _options, _loggerMock.Object); }
internal FeedSubmissionProcessor(AmazonRegion region, string merchantId, string mWSAuthToken, IMarketplaceWebServiceClient marketplaceWebServiceClient, IEasyMwsLogger logger, EasyMwsOptions options) { _region = region; _merchantId = merchantId; _options = options; _logger = logger; _marketplaceWebServiceClient = marketplaceWebServiceClient; _mWSAuthToken = mWSAuthToken; }
public void GetNextFromQueueOfReportsToRequest_WithRetryPeriodTypeConfiguredAsGeometricProgression_AndNonInitialRetryCount_ReturnsReportRequestWithTheExpectedCompleteRetryPeriod() { var customOptions = new EasyMwsOptions(); var testRequestRetryCount = 5; var minutesBetweenRetries = 60; var reportRequestWithRequestRetryPeriodIncomplete = new ReportRequestEntry { AmazonRegion = AmazonRegion.Europe, MerchantId = _merchantId, Id = 2, RequestReportId = null, ReportRequestRetryCount = testRequestRetryCount, LastAmazonRequestDate = DateTime.UtcNow.AddMinutes(-61) }; customOptions.ReportRequestOptions.ReportRequestRetryInitialDelay = TimeSpan.FromMinutes(1); customOptions.ReportRequestOptions.ReportRequestRetryInterval = TimeSpan.FromMinutes(minutesBetweenRetries); customOptions.ReportRequestOptions.ReportRequestRetryType = RetryPeriodType.GeometricProgression; var reportRequestWithNoRetryPeriodComplete1 = new ReportRequestEntry { AmazonRegion = AmazonRegion.Europe, MerchantId = _merchantId, Id = 3, RequestReportId = null, ReportRequestRetryCount = testRequestRetryCount, LastAmazonRequestDate = DateTime.UtcNow.AddMinutes(-59) }; var reportRequestWithNoRetryPeriodComplete2 = new ReportRequestEntry { AmazonRegion = AmazonRegion.Europe, MerchantId = _merchantId, Id = 4, RequestReportId = null, ReportRequestRetryCount = testRequestRetryCount, LastAmazonRequestDate = DateTime.UtcNow.AddMinutes(-(testRequestRetryCount * minutesBetweenRetries - 1)) }; var reportRequestWithNoRetryPeriodComplete3 = new ReportRequestEntry { AmazonRegion = AmazonRegion.Europe, MerchantId = _merchantId, Id = 5, RequestReportId = null, ReportRequestRetryCount = testRequestRetryCount, LastAmazonRequestDate = DateTime.UtcNow.AddMinutes(-(testRequestRetryCount * minutesBetweenRetries - 1)) }; _reportRequestEntries.Add(reportRequestWithRequestRetryPeriodIncomplete); _reportRequestEntries.Add(reportRequestWithNoRetryPeriodComplete1); _reportRequestEntries.Add(reportRequestWithNoRetryPeriodComplete2); _reportRequestEntries.Add(reportRequestWithNoRetryPeriodComplete3); _reportRequestEntryService = new ReportRequestEntryService(_reportRequestCallbackReportMock.Object, customOptions, _loggerMock.Object); var reportRequestCallback = _reportRequestEntryService.GetNextFromQueueOfReportsToRequest(_merchantId, _amazonRegion); Assert.AreEqual(reportRequestWithNoRetryPeriodComplete2.Id, reportRequestCallback.Id); }
/// <summary> /// Constructor to be used for UnitTesting/Mocking (in the absence of a dedicated DependencyInjection framework) /// </summary> internal EasyMwsClient(AmazonRegion region, string merchantId, string accessKeyId, string mwsSecretAccessKey, string mWSAuthToken, IReportQueueingProcessor reportProcessor, IFeedQueueingProcessor feedProcessor, IEasyMwsLogger easyMwsLogger, EasyMwsOptions options) : this(region, merchantId, accessKeyId, mwsSecretAccessKey, mWSAuthToken, easyMwsLogger, options) { _reportProcessor = reportProcessor; _feedProcessor = feedProcessor; RegisterEvents(); }
internal FeedProcessor(AmazonRegion region, string merchantId, string mWSAuthToken, EasyMwsOptions options, IMarketplaceWebServiceClient mwsClient, IEasyMwsLogger logger) { _region = region; _merchantId = merchantId; _options = options; _logger = logger; _callbackActivator = _callbackActivator ?? new CallbackActivator(); _feedSubmissionProcessor = _feedSubmissionProcessor ?? new FeedSubmissionProcessor(_region, _merchantId, mWSAuthToken, mwsClient, _logger, _options); RegisterEvents(); }
public void SetUp() { _options = new EasyMwsOptions(); _dbContext = new EasyMwsContext(); _loggerMock = new Mock <IEasyMwsLogger>(); _mwsClientMock = new Mock <IMarketplaceWebServiceClient>(); var feedProcessorMock = new Mock <IFeedQueueingProcessor>(); var reportProcessor = new ReportProcessor(_region, _merchantId, _mwsAuthToken, _options, _mwsClientMock.Object, _loggerMock.Object); _easyMwsClient = new EasyMwsClient(AmazonRegion.Europe, _merchantId, _mwsAuthToken, "test", "test", reportProcessor, feedProcessorMock.Object, _loggerMock.Object, _options); }
public void SetUp() { var options = new EasyMwsOptions(); _reportRequestServiceMock = new Mock <IReportRequestEntryService>(); _marketplaceWebServiceClientMock = new Mock <IMarketplaceWebServiceClient>(); _requestReportProcessor = new Mock <IRequestReportProcessor>(); _callbackActivatorMock = new Mock <ICallbackActivator>(); _loggerMock = new Mock <IEasyMwsLogger>(); _callbackActivatorMock.Setup(cam => cam.SerializeCallback(It.IsAny <Action <Stream, object> >(), It.IsAny <object>())) .Returns(new Callback("", "", "", "")); _reportProcessor = new ReportProcessor(AmazonRegion.Europe, "testMerchantId1", "testMwsAuthToken", options, _marketplaceWebServiceClientMock.Object, _requestReportProcessor.Object, _callbackActivatorMock.Object, _loggerMock.Object); }
public void SetUp() { var options = new EasyMwsOptions(); _feedSubmissionServiceMock = new Mock <IFeedSubmissionEntryService>(); _marketplaceWebServiceClientMock = new Mock <IMarketplaceWebServiceClient>(); _feedSubmissionProcessorMock = new Mock <IFeedSubmissionProcessor>(); _callbackActivatorMock = new Mock <ICallbackActivator>(); _loggerMock = new Mock <IEasyMwsLogger>(); _callbackActivatorMock.Setup(cam => cam.SerializeCallback(It.IsAny <Action <Stream, object> >(), It.IsAny <object>())) .Returns(new Callback("", "", "", "")); _feedProcessor = new FeedProcessor(_amazonRegion, _merchantId, _mwsAuthToken, options, _marketplaceWebServiceClientMock.Object, _feedSubmissionProcessorMock.Object, _callbackActivatorMock.Object, _loggerMock.Object); }
public void EntryInvocationRestrictionHelper_WithForceInvocationByOriginatingInstanceOptionSetToTrue_AndDefaultInstanceId_ReturnsCorrectEntries(bool allowInvocationByAnyInstance, int expectedNumberOfEntries) { _options = new EasyMwsOptions(useDefaultValues: true); _options.EventPublishingOptions.RestrictInvocationToOriginatingInstance.CustomInstanceId = null; _originatingInstanceHash = _options.EventPublishingOptions.RestrictInvocationToOriginatingInstance.HashedInstanceId; _reportRequestEntries = new List <ReportRequestEntry> { new ReportRequestEntry { Id = 1, InstanceId = _originatingInstanceHash, InvokeCallbackRetryCount = 0 }, new ReportRequestEntry { Id = 2, InstanceId = "non-originating-instance1-hash", InvokeCallbackRetryCount = 3 }, new ReportRequestEntry { Id = 3, InstanceId = "non-originating-instance2-hash", InvokeCallbackRetryCount = 0 }, new ReportRequestEntry { Id = 4, InstanceId = _originatingInstanceHash, InvokeCallbackRetryCount = 0 }, }; _options.EventPublishingOptions.RestrictInvocationToOriginatingInstance.ForceInvocationByOriginatingInstance = true; _options.EventPublishingOptions.RestrictInvocationToOriginatingInstance.AllowInvocationByAnyInstanceIfInvocationFailedLimitReached = allowInvocationByAnyInstance; var allowedFailures = 2; _options.EventPublishingOptions.RestrictInvocationToOriginatingInstance.InvocationFailuresLimit = allowedFailures; var filteredEntries = EntryInvocationRestrictionHelper <ReportRequestEntry> .RestrictInvocationToOriginatingClientsIfEnabled(_reportRequestEntries, _options); CollectionAssert.AreNotEquivalent(_reportRequestEntries, filteredEntries); Assert.IsTrue(filteredEntries.Count == expectedNumberOfEntries); if (!allowInvocationByAnyInstance) { Assert.IsTrue(filteredEntries.All(e => e.InstanceId == _originatingInstanceHash)); } else { Assert.IsTrue( filteredEntries.Count(e => e.InstanceId == _originatingInstanceHash) == 2 && filteredEntries.Count(e => e.InstanceId != _originatingInstanceHash && e.InvokeCallbackRetryCount > allowedFailures) == 1); } }
public void GetNextFromQueueOfReportsToRequest_WithConfiguredTimeToWaitBeforeFirstRetry_AndInitialRetryCount_ReturnsReportRequestWithTheExpectedCompleteRetryPeriod() { var customOptions = new EasyMwsOptions(); var reportRequestWithRequestRetryPeriodIncomplete = new ReportRequestEntry { AmazonRegion = AmazonRegion.Europe, MerchantId = _merchantId, Id = 2, RequestReportId = null, ReportRequestRetryCount = 1, LastAmazonRequestDate = DateTime.UtcNow.AddMinutes(-59) }; customOptions.ReportRequestOptions.ReportRequestRetryInitialDelay = TimeSpan.FromMinutes(60); customOptions.ReportRequestOptions.ReportRequestRetryInterval = TimeSpan.FromMinutes(1); var reportRequestWithNoRetryPeriodComplete1 = new ReportRequestEntry { AmazonRegion = AmazonRegion.Europe, MerchantId = _merchantId, Id = 3, RequestReportId = null, ReportRequestRetryCount = 1, LastAmazonRequestDate = DateTime.UtcNow.AddMinutes(-61) }; var reportRequestWithNoRetryPeriodComplete2 = new ReportRequestEntry { AmazonRegion = AmazonRegion.Europe, MerchantId = _merchantId, Id = 4, RequestReportId = null, ReportRequestRetryCount = 1, LastAmazonRequestDate = DateTime.UtcNow.AddMinutes(-61) }; _reportRequestEntries.Add(reportRequestWithRequestRetryPeriodIncomplete); _reportRequestEntries.Add(reportRequestWithNoRetryPeriodComplete1); _reportRequestEntries.Add(reportRequestWithNoRetryPeriodComplete2); _reportRequestEntryService = new ReportRequestEntryService(_reportRequestCallbackReportMock.Object, customOptions, _loggerMock.Object); var reportRequestCallback = _reportRequestEntryService.GetNextFromQueueOfReportsToRequest(_merchantId, _amazonRegion); Assert.AreEqual(reportRequestWithNoRetryPeriodComplete1.Id, reportRequestCallback.Id); }
public void GetNextFromQueueOfReportsToRequest_ReturnsFirstReportRequestFromQueueWithNoRequestRetryCount_AndSkipsReportRequestsWithRequestRetryPeriodIncomplete() { var customOptions = new EasyMwsOptions(); var reportRequestWithRequestRetryPeriodIncomplete = new ReportRequestEntry { AmazonRegion = AmazonRegion.Europe, MerchantId = _merchantId, Id = 2, RequestReportId = null, ReportRequestRetryCount = 1, LastAmazonRequestDate = DateTime.UtcNow.AddHours(-1) }; customOptions.ReportRequestOptions.ReportRequestRetryInitialDelay = TimeSpan.FromHours(2); customOptions.ReportRequestOptions.ReportRequestRetryInterval = TimeSpan.FromHours(2); var reportRequestWithNoRequestRetryCount1 = new ReportRequestEntry { AmazonRegion = AmazonRegion.Europe, MerchantId = _merchantId, Id = 3, RequestReportId = null, ReportRequestRetryCount = 0, LastAmazonRequestDate = DateTime.MinValue }; var reportRequestWithNoRequestRetryCount2 = new ReportRequestEntry { AmazonRegion = AmazonRegion.Europe, MerchantId = _merchantId, Id = 4, RequestReportId = null, ReportRequestRetryCount = 0, LastAmazonRequestDate = DateTime.MinValue }; _reportRequestEntries.Add(reportRequestWithRequestRetryPeriodIncomplete); _reportRequestEntries.Add(reportRequestWithNoRequestRetryCount1); _reportRequestEntries.Add(reportRequestWithNoRequestRetryCount2); _reportRequestEntryService = new ReportRequestEntryService(_reportRequestCallbackReportMock.Object, customOptions, _loggerMock.Object); var reportRequestCallback = _reportRequestEntryService.GetNextFromQueueOfReportsToRequest(_merchantId, _amazonRegion); Assert.AreEqual(reportRequestWithNoRequestRetryCount1.Id, reportRequestCallback.Id); }
/// <param name="region">The region of the account. Required parameter. A finer grained region or country can be specified on a PropertiesContainer by specifying its marketplaceIdList constructor argument.</param> /// <param name="merchantId">Seller ID / Merchant ID. Required parameter.</param> /// <param name="accessKeyId">Amazon account access key. Required parameter. This key can either belong to a seller or to a developer account authorized by a seller. If the key belongs to a developer account authorized by the seller then also make sure to specify the MWSAuthToken argument.</param> /// <param name="mwsSecretAccessKey">Amazon account secret access key. Required parameter. This key can either belong to a seller or to a developer account authorized by a seller. If the key belongs to a developer account authorized by the seller then also make sure to specify the MWSAuthToken argument.</param> /// <param name="mwsAuthToken">MWS Authorization Token. Optional parameter. If the provided access keys belong to a developer account authorized by a seller, this argument is the MWS Authorization Token provided by the seller to the authorized developer.</param> /// <param name="easyMwsLogger">An optional IEasyMwsLogger instance that can provide access to logs. It is strongly recommended to use a logger implementation already existing in the EasyMws package.</param> /// <param name="options">Configuration options for EasyMwsClient</param> public EasyMwsClient(AmazonRegion region, string merchantId, string accessKeyId, string mwsSecretAccessKey, string mwsAuthToken = null, IEasyMwsLogger easyMwsLogger = null, EasyMwsOptions options = null) { if (string.IsNullOrEmpty(merchantId) || string.IsNullOrEmpty(accessKeyId) || string.IsNullOrEmpty(mwsSecretAccessKey)) { throw new ArgumentNullException( "One or more required parameters provided to initialize the EasyMwsClient were null or empty"); } _amazonRegion = region; _merchantId = merchantId; _options = options ?? new EasyMwsOptions(); _easyMwsLogger = easyMwsLogger ?? new EasyMwsLogger(isEnabled: false); var mwsClient = new MarketplaceWebServiceClient(accessKeyId, mwsSecretAccessKey, CreateConfig(_amazonRegion)); _reportProcessor = _reportProcessor ?? new ReportProcessor(_amazonRegion, _merchantId, mwsAuthToken, _options, mwsClient, _easyMwsLogger); _feedProcessor = _feedProcessor ?? new FeedProcessor(_amazonRegion, _merchantId, mwsAuthToken, _options, mwsClient, _easyMwsLogger); RegisterEvents(); }
public void Setup() { _options = new EasyMwsOptions(useDefaultValues: true); _options.EventPublishingOptions.RestrictInvocationToOriginatingInstance.CustomInstanceId = _originatingInstance; _originatingInstanceHash = _options.EventPublishingOptions.RestrictInvocationToOriginatingInstance.HashedInstanceId; _reportRequestEntries = new List <ReportRequestEntry> { new ReportRequestEntry { Id = 1, InstanceId = _originatingInstanceHash, InvokeCallbackRetryCount = 0 }, new ReportRequestEntry { Id = 2, InstanceId = "non-originating-instance1-hash", InvokeCallbackRetryCount = 3 }, new ReportRequestEntry { Id = 3, InstanceId = "non-originating-instance2-hash", InvokeCallbackRetryCount = 0 }, new ReportRequestEntry { Id = 4, InstanceId = _originatingInstanceHash, InvokeCallbackRetryCount = 0 }, }; }
/// <summary> /// Constructor to be used for UnitTesting/Mocking (in the absence of a dedicated DependencyInjection framework) /// </summary> internal FeedProcessor(AmazonRegion region, string merchantId, string mWSAuthToken, EasyMwsOptions options, IMarketplaceWebServiceClient mwsClient, IFeedSubmissionProcessor feedSubmissionProcessor, ICallbackActivator callbackActivator, IEasyMwsLogger logger) : this(region, merchantId, mWSAuthToken, options, mwsClient, logger) { _feedSubmissionProcessor = feedSubmissionProcessor; _callbackActivator = callbackActivator; RegisterEvents(); }
internal FeedSubmissionEntryService(IFeedSubmissionEntryRepository feedSubmissionRepo, EasyMwsOptions options = null, IEasyMwsLogger logger = null) : this(options, logger) => (_feedRepo) = (feedSubmissionRepo);
internal ReportRequestEntryService(IReportRequestEntryRepository reportRequestEntryRepository, EasyMwsOptions options = null, IEasyMwsLogger logger = null) : this(options, logger) => (_reportRequestEntryRepository) = (reportRequestEntryRepository);
internal static List <T> RestrictInvocationToOriginatingClientsIfEnabled(IEnumerable <IRestrictionableInvocationEntry> entries, EasyMwsOptions options) { var invocationRestrictionOptions = options?.EventPublishingOptions?.RestrictInvocationToOriginatingInstance; if (invocationRestrictionOptions == null || !invocationRestrictionOptions.ForceInvocationByOriginatingInstance) { // return the unaltered set of entries return(entries.Select(e => (T)e).ToList()); } var entriesEligibleForCallbackInvocation = entries.Where(e => e.InstanceId == invocationRestrictionOptions.HashedInstanceId).ToList(); if (!invocationRestrictionOptions.AllowInvocationByAnyInstanceIfInvocationFailedLimitReached) { // restrict callback invocation to clients matching the current hashedInstanceId return(entriesEligibleForCallbackInvocation.Select(e => (T)e).ToList()); } else { // allow any client to attempt callback invocation if the configured amount of invocation failures have happened var entriesWithInvocationFailureLimitReached = entries.Where(e => e.InvokeCallbackRetryCount >= invocationRestrictionOptions.InvocationFailuresLimit && e.InstanceId != invocationRestrictionOptions.HashedInstanceId).ToList(); entriesEligibleForCallbackInvocation.AddRange(entriesWithInvocationFailureLimitReached); return(entriesEligibleForCallbackInvocation.Select(e => (T)e).ToList()); } }
/// <summary> /// Constructor to be used for UnitTesting/Mocking (in the absence of a dedicated DependencyInjection framework) /// </summary> internal ReportProcessor(AmazonRegion region, string merchantId, string mWSAuthToken, EasyMwsOptions options, IMarketplaceWebServiceClient mwsClient, IRequestReportProcessor requestReportProcessor, ICallbackActivator callbackActivator, IEasyMwsLogger logger) : this(region, merchantId, mWSAuthToken, options, mwsClient, logger) { _requestReportProcessor = requestReportProcessor; _callbackActivator = callbackActivator; RegisterEvents(); }