Example #1
0
        public async Task TransferFromJsonToCompressedJson_AllDataTransferred()
        {
            var transfer = new DataTransferAction();

            var sourceConfiguration =
                Mocks
                .Of <IJsonFileSourceAdapterConfiguration>(c =>
                                                          c.Files == new[] { @"InputData\Test.json" })
                .First();

            var sinkConfiguration =
                Mocks
                .Of <IJsonFileSinkAdapterConfiguration>(c =>
                                                        c.File == @"OutputData\Test3.gz" &&
                                                        c.Prettify == true &&
                                                        c.Compress == true)
                .First();

            using (var source = await new JsonFileSourceAdapterFactory()
                                .CreateAsync(sourceConfiguration, DataTransferContextMock.Instance, CancellationToken.None))
                using (var sink = await new JsonFileSinkAdapterFactory()
                                  .CreateAsync(sinkConfiguration, DataTransferContextMock.Instance, CancellationToken.None))
                {
                    await transfer.ExecuteAsync(source, sink, new DummyTransferStatisticsMock(), CancellationToken.None);
                }

            var resultFile = new FileInfo(@"OutputData\Test3.gz");

            Assert.IsTrue(resultFile.Exists, TestResources.OutputFileMissing);
            Assert.IsTrue(resultFile.Length > 0, TestResources.OutputFileEmpty);
        }
        public async Task ExecuteAsync_SampleData_NonFatalReadExceptionsSkipped()
        {
            const int NumberOfItems = 10;
            const int ThrowAfter    = 5;

            var action = new DataTransferAction();

            var sourceData = SampleData.GetSimpleDataItems(NumberOfItems);

            var transferredCount = 0;
            var sourceMock       = new DataSourceAdapterMock(sourceData, i =>
            {
                if (ThrowAfter <= ++transferredCount && transferredCount < NumberOfItems)
                {
                    throw new NonFatalReadException();
                }
            });
            var sinkMock = new DataSinkAdapterMock();

            var statistics = new InMemoryTransferStatistics(ErrorDetailsProviderMock.Instance);

            statistics.Start();
            using (var source = sourceMock)
                using (var sink = sinkMock)
                    await action.ExecuteAsync(source, sink, statistics, CancellationToken.None);
            statistics.Stop();

            var receivedData = sinkMock.ReceivedData;

            Assert.IsNotNull(receivedData, TestResources.NullDataInSink);
            Assert.AreEqual(ThrowAfter, receivedData.Count(), TestResources.InvalidNumberOfDataItems);

            var resultStatistics = statistics.GetSnapshot();

            Assert.AreEqual(ThrowAfter, resultStatistics.Transferred, TestResources.StatisticsInvalidTransferredCount);
            Assert.AreEqual(NumberOfItems - ThrowAfter, resultStatistics.Failed, TestResources.StatisticsInvalidFailedCount);
            Assert.AreNotEqual(TimeSpan.Zero, resultStatistics.ElapsedTime, TestResources.StatisticsElapsedTimeIsEmpty);

            var resultExceptions = resultStatistics.GetErrors();

            Assert.IsNotNull(resultExceptions, TestResources.NullTransferExceptions);
            Assert.AreEqual(NumberOfItems - ThrowAfter, resultExceptions.Count, TestResources.InvalidNumberOfTransferExceptions);
        }
        public async Task ExecuteAsync_SampleData_Transferred()
        {
            const int NumberOfItems = 10;

            var action = new DataTransferAction();

            var sourceData = SampleData.GetSimpleDataItems(NumberOfItems);
            var sinkMock   = new DataSinkAdapterMock();

            using (var source = new DataSourceAdapterMock(sourceData))
                using (var sink = sinkMock)
                    await action.ExecuteAsync(source, sink, new DummyTransferStatisticsMock(), CancellationToken.None);

            var receivedData = sinkMock.ReceivedData;

            Assert.IsNotNull(receivedData, TestResources.NullDataInSink);

            CollectionAssert.AreEquivalent(
                sourceData,
                receivedData.ToArray(),
                TestResources.ReceivedDataDoesNotMatch);
        }
        public async Task ExecuteAsync_SampleData_StatisticsPopulated()
        {
            const int NumberOfItems = 10;
            const int ThrowAfter    = 5;

            var action = new DataTransferAction();

            var sourceData = SampleData.GetSimpleDataItems(NumberOfItems);

            var transferredCount = 0;
            var sinkMock         = new DataSinkAdapterMock(i =>
            {
                if (++transferredCount > ThrowAfter)
                {
                    throw new Exception();
                }
            });

            var statistics = new ThreadSafeTransferStatistics();

            using (var source = new DataSourceAdapterMock(sourceData))
                using (var sink = sinkMock)
                    await action.ExecuteAsync(source, sink, statistics, CancellationToken.None);

            var receivedData = sinkMock.ReceivedData;

            Assert.IsNotNull(receivedData, TestResources.NullDataInSink);
            Assert.AreEqual(ThrowAfter, receivedData.Count(), TestResources.InvalidNumberOfDataItems);

            var resultStatistics = statistics.GetSnapshot();

            Assert.AreEqual(ThrowAfter, resultStatistics.Transferred, TestResources.StatisticsInvalidTransferredCount);
            Assert.AreNotEqual(TimeSpan.Zero, resultStatistics.ElapsedTime, TestResources.StatisticsElapsedTimeIsEmpty);

            var resultExceptions = resultStatistics.GetErrors();

            Assert.IsNotNull(resultExceptions, TestResources.NullTransferExceptions);
            Assert.AreEqual(NumberOfItems - ThrowAfter, resultExceptions.Count, TestResources.InvalidNumberOfTransferExceptions);
        }
Example #5
0
        public async Task TransferFromJsonToJson_AllDataTransferred()
        {
            var transfer = new DataTransferAction();

            var sourceConfiguration =
                Mocks
                .Of <IJsonFileSourceAdapterConfiguration>(c =>
                                                          c.Files == new[] { @"InputData\Test.json" })
                .First();

            var sinkConfiguration =
                Mocks
                .Of <IJsonFileSinkAdapterConfiguration>(c =>
                                                        c.File == @"OutputData\Test1.json" &&
                                                        c.Prettify == true)
                .First();

            using (var source = await new JsonFileSourceAdapterFactory()
                                .CreateAsync(sourceConfiguration, DataTransferContextMock.Instance, CancellationToken.None))
                using (var sink = await new JsonFileSinkAdapterFactory()
                                  .CreateAsync(sinkConfiguration, DataTransferContextMock.Instance, CancellationToken.None))
                {
                    await transfer.ExecuteAsync(source, sink, new DummyTransferStatisticsMock(), CancellationToken.None);
                }

            var resultFile = new FileInfo(@"OutputData\Test1.json");

            Assert.IsTrue(resultFile.Exists, TestResources.OutputFileMissing);
            Assert.IsTrue(resultFile.Length > 0, TestResources.OutputFileEmpty);
            using (var streamReader = new StreamReader(resultFile.FullName, System.Text.Encoding.UTF8))
            {
                string text = streamReader.ReadToEnd();
                Assert.IsTrue(text.Contains("2017-12-22T09:00:00Z"), "Date processing discrepancy");
                Assert.IsTrue(text.Contains("2018-12-31T09:00:00.0000000Z"), "Date processing discrepancy");
            }
        }