Пример #1
0
        public void Test_Cancelled( )
        {
            Mock <IRecordImporter>      mockImporter     = new Mock <IRecordImporter>(MockBehavior.Strict);
            Mock <IObjectsReader>       mockReader       = new Mock <IObjectsReader>(MockBehavior.Strict);
            Mock <ICancellationWatcher> mockCancellation = new Mock <ICancellationWatcher>(MockBehavior.Loose);

            IList <IObjectReader> readers;

            readers = Enumerable.Range(0, 10).Select(i => new Mock <IObjectReader>( ).Object).ToList( );

            mockReader.Setup(reader => reader.GetObjects( )).Returns(() => readers);
            mockCancellation.Setup(c => c.IsCancellationRequested).Returns(true);

            BatchRunner batchRunner = new BatchRunner
            {
                RecordImporter      = mockImporter.Object,
                ObjectsReader       = mockReader.Object,
                CancellationWatcher = mockCancellation.Object
            };

            batchRunner.ProcessAll( );

            mockReader.VerifyAll( );
            mockImporter.VerifyAll( );
        }
Пример #2
0
        public void Test_Runs(int sampleSize, int call1, int call2)
        {
            Mock <IRecordImporter>      mockImporter     = new Mock <IRecordImporter>(MockBehavior.Strict);
            Mock <IObjectsReader>       mockReader       = new Mock <IObjectsReader>(MockBehavior.Strict);
            Mock <ICancellationWatcher> mockCancellation = new Mock <ICancellationWatcher>(MockBehavior.Loose);

            IList <IObjectReader> readers;

            readers = Enumerable.Range(0, sampleSize).Select(i => new Mock <IObjectReader>( ).Object).ToList( );

            mockReader.Setup(reader => reader.GetObjects( )).Returns(() => readers);
            mockImporter.Setup(importer => importer.ImportRecords(It.Is <IEnumerable <IObjectReader> >(list => list.Count( ) == call1 && list.First() == readers[0])));
            if (call2 > 0)
            {
                mockImporter.Setup(importer => importer.ImportRecords(It.Is <IEnumerable <IObjectReader> >(list => list.Count( ) == call2 && list.First( ) == readers [call1])));
            }
            mockCancellation.Setup(c => c.IsCancellationRequested).Returns(false);

            BatchRunner batchRunner = new BatchRunner
            {
                RecordImporter      = mockImporter.Object,
                ObjectsReader       = mockReader.Object,
                CancellationWatcher = mockCancellation.Object
            };

            batchRunner.ProcessAll( );

            mockReader.VerifyAll( );
            mockImporter.VerifyAll( );
        }
Пример #3
0
        public void Test_RecordImporter_NotSet( )
        {
            BatchRunner batchRunner = new BatchRunner( );

            batchRunner.ObjectsReader = new Mock <IObjectsReader>( ).Object;
            Assert.Throws <InvalidOperationException>(() => batchRunner.ProcessAll( ));
        }
Пример #4
0
        public void Test_BatchSize_OutOfRange(int batchSize)
        {
            BatchRunner batchRunner = new BatchRunner( );

            batchRunner.RecordImporter = new Mock <IRecordImporter>( ).Object;
            batchRunner.ObjectsReader  = new Mock <IObjectsReader>( ).Object;
            batchRunner.BatchSize      = batchSize;
            Assert.Throws <InvalidOperationException>(() => batchRunner.ProcessAll( ));
        }
Пример #5
0
        /// <summary>
        /// Start processing an import run, after checking has been performed.
        /// </summary>
        /// <param name="importRun">A writable import run entity. Caller will save.</param>
        internal void StartImportSafe(ImportRun importRun)
        {
            ImportConfig importConfig = importRun.ImportConfigUsed;

            if (importConfig == null)
            {
                throw new ConnectorConfigException("Import configuration could not be loaded.");
            }
            if (importConfig.ImportConfigMapping == null)
            {
                throw new ConnectorConfigException("Import configuration has no mapping.");
            }

            IObjectsReader         recordsReader = null;
            IReaderToEntityAdapter entityAdapter;
            IImportReporter        importRunReporter;
            IRecordImporter        recordImporter;
            ICancellationWatcher   cancellationWatcher;
            BatchRunner            batchRunner;

            try
            {
                // Reads records out of the file to count
                recordsReader = GetRecordsReader(importRun, importConfig);
                importRun.ImportRecordsTotal = recordsReader.GetObjects( ).Count( );
                importRun.Save( );

                // Re-reads records out of the file for importing
                recordsReader = GetRecordsReader(importRun, importConfig);

                // Writes records into entities
                entityAdapter = GetEntityAdapter(importConfig);

                // Create a reporter to process progress notifications
                importRunReporter = new ImportRunReporter(importRun);

                // Create a reporter to process progress notifications
                cancellationWatcher = new ImportRunCancellationWatcher(importRun);

                // Activate record impoter
                bool testRun = importRun.ImportTestRun == true;
                recordImporter = _recordImporterActivator(entityAdapter, importRunReporter, importConfig.ImportConfigMapping, testRun);
                if (recordImporter == null)
                {
                    throw new Exception("recordImporter failed to activate.");
                }

                // Connects the reader to the writer
                batchRunner = new BatchRunner
                {
                    ObjectsReader       = recordsReader,
                    RecordImporter      = recordImporter,
                    CancellationWatcher = cancellationWatcher
                };

                // Go! Run as user
                using (new SecurityBypassContext(false))
                {
                    batchRunner.ProcessAll( );
                }
            }
            finally
            {
                recordsReader?.Dispose( );
            }
        }