public void ShouldHandleLongSequenceOfInvalidObjects() { var syncObject = new SyncObject(ObjectType) { QueueId = 123 }; var xElement = XElement.Parse("<item/>"); var xElements = new List<XElement> { xElement }; var dateTime = new DateTime(2012, 7, 20); var originalBatchSize = 10; var originalStartKey = 200; var startBadKeys = 200; var endBadKeys = 5000; _salsaClient.Setup(s => s.GetNextKey(ObjectType, It.IsAny<int>(), dateTime)).Returns( (string objectType, int key, DateTime time) => key + 1); var salsaClientException = new SalsaClientException("bad data"); _salsaClient.Setup(s => s.GetObjects(ObjectType, It.IsAny<int>(), It.IsAny<int>(), dateTime, It.IsAny<IEnumerable<string>>())).Returns( (string objectType, int batchSize, int startKey, DateTime lastPulledDate, IEnumerable<string> fieldsToReturn) => { var startRequestedRange = startKey; var endRequestedRange = startKey + batchSize; if ( (startRequestedRange >= startBadKeys && startRequestedRange < endBadKeys) || (endRequestedRange >= startBadKeys && endRequestedRange < endBadKeys)) { throw salsaClientException; } return xElements; } ); _mapperMock.Setup(m => m.ToAft(xElement)).Returns(syncObject); _mapperMock.Setup(m => m.Mappings).Returns(_fieldMappings); var batchOfObjects = _repository.GetBatchOfObjects(ObjectType, originalBatchSize, originalStartKey, dateTime); Assert.AreEqual(new List<SyncObject> { syncObject }, batchOfObjects); }
public void ShouldSkipObjectWhenGettingOneObjectFails() { var syncObject = new SyncObject(ObjectType) { QueueId = 123 }; var xElement = XElement.Parse("<item/>"); var xElements = new List<XElement> { xElement }; var dateTime = new DateTime(2012, 7, 20); var originalBatchSize = 1; var originalStartKey = 200; var nextKey = 202; _salsaClient.Setup(s => s.GetNextKey(ObjectType, originalStartKey, dateTime)).Returns(nextKey); var salsaClientException = new SalsaClientException("bad data"); _salsaClient.Setup(s => s.GetObjects(ObjectType, originalBatchSize, originalStartKey, dateTime, _expectedSalsaFields)).Throws(salsaClientException); _salsaClient.Setup(s => s.GetObjects(ObjectType, originalBatchSize, nextKey, dateTime, _expectedSalsaFields)).Returns(xElements); _mapperMock.Setup(m => m.ToAft(xElement)).Returns(syncObject); _mapperMock.Setup(m => m.Mappings).Returns(_fieldMappings); Assert.AreEqual(new List<SyncObject> { syncObject }, _repository.GetBatchOfObjects(ObjectType, originalBatchSize, originalStartKey, dateTime)); _errorHandlerMock.Verify(handler => handler.HandleSalsaClientException(ObjectType, nextKey, _repository, salsaClientException)); }
private IEnumerable<SyncObject> FindNextValidObject(string objectType, int firstStartKey, DateTime minimumModifiedDate, SalsaClientException firstException, List<string> salsaFields) { SalsaClientException exception = firstException; int startKey = firstStartKey; for (;;) { startKey = _salsa.GetNextKey(objectType, startKey, minimumModifiedDate); _syncErrorHandler.HandleSalsaClientException(objectType, startKey, this, exception); Logger.Debug(string.Format("Skipped record {0}", startKey)); try { var xElements = _salsa.GetObjects(objectType, 1, startKey, minimumModifiedDate, salsaFields); return MapToSyncObjects(objectType, xElements); } catch (SalsaClientException newException) { exception = newException; } } }