コード例 #1
0
ファイル: SalsaRepositoryTests.cs プロジェクト: peterzhao/aft
        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);
        }
コード例 #2
0
ファイル: SalsaRepositoryTests.cs プロジェクト: peterzhao/aft
        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));
        }
コード例 #3
0
ファイル: SalsaRepository.cs プロジェクト: peterzhao/aft
        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;
                }
            }
        }