public void EstablishAvailability_ThrowsOnCircularReferences() { var cooker0 = new TestSourceDataCookerReference { Path = new DataCookerPath("TestSourceParser", "Cooker0"), }; var cooker1 = new TestSourceDataCookerReference { Path = new DataCookerPath("TestSourceParser", "Cooker1"), }; var cooker2 = new TestSourceDataCookerReference { Path = new DataCookerPath("TestSourceParser", "Cooker2"), }; // the repository has all source cookers var testRepo = new TestDataExtensionRepository(); testRepo.sourceCookersByPath.Add(cooker0.Path, cooker0); testRepo.sourceCookersByPath.Add(cooker1.Path, cooker1); testRepo.sourceCookersByPath.Add(cooker2.Path, cooker2); // setup the requirements for the cookers cooker0.requiredDataCookers.Add(cooker1.Path); cooker1.requiredDataCookers.Add(cooker2.Path); cooker2.requiredDataCookers.Add(cooker0.Path); cooker0.ProcessDependencies(testRepo); Assert.IsTrue(cooker0.Availability == DataExtensionAvailability.Error); Assert.AreEqual(cooker0.DependencyState.Errors.Count, 1); }
public void EstablishAvailability_OneErroredDataCooker() { var cooker0 = new TestSourceDataCookerReference { Path = new DataCookerPath("TestSourceParser", "Cooker0"), }; var cooker1 = new TestSourceDataCookerReference(false) { Path = new DataCookerPath("TestSourceParser", "Cooker1"), availability = DataExtensionAvailability.Error, }; var testRepo = new TestDataExtensionRepository(); testRepo.sourceCookersByPath.Add(cooker0.Path, cooker0); testRepo.sourceCookersByPath.Add(cooker1.Path, cooker1); cooker0.requiredDataCookers.Add(new DataCookerPath(cooker1.Path)); cooker0.ProcessDependencies(testRepo); Assert.IsTrue(cooker0.Availability == DataExtensionAvailability.IndirectError); Assert.AreEqual(cooker0.DependencyState.Errors.Count, 1); Assert.AreEqual(cooker0.DependencyReferences.RequiredSourceDataCookerPaths.Count, 1); }
public void CreateDataRetrievalForTable_NotAvailableCookerThrows() { var cookedDataRetrieval = new TestCookedDataRetrieval(); var dataExtensionRepository = new TestDataExtensionRepository(); var dataCookerReference = new TestCompositeDataCookerReference(false) { availability = DataExtensionAvailability.Error, Path = new DataCookerPath("CompositeCooker1"), }; var tableReference = new TestTableExtensionReference(false) { availability = DataExtensionAvailability.IndirectError, TableDescriptor = new TableDescriptor( Guid.Parse("{F0F20004-E159-447B-B122-BD820C2A9908}"), "Test Table", "Test Table"), }; dataExtensionRepository.compositeCookersByPath.Add(dataCookerReference.Path, dataCookerReference); dataExtensionRepository.tablesById.Add(tableReference.TableDescriptor.Guid, tableReference); var dataExtensionRetrievalFactory = new DataExtensionRetrievalFactory(cookedDataRetrieval, dataExtensionRepository); Assert.ThrowsException <ArgumentException>(() => dataExtensionRetrievalFactory.CreateDataRetrievalForTable(tableReference.TableDescriptor.Guid)); }
public void EstablishAvailability_AddOneCompositeDataCooker() { var cooker0 = new TestCompositeDataCookerReference { Path = new DataCookerPath("TestSourceParser", "Cooker0"), }; var cooker1 = new TestCompositeDataCookerReference { Path = new DataCookerPath(DataCookerPath.EmptySourceParserId, "Cooker1"), }; var testRepo = new TestDataExtensionRepository(); testRepo.compositeCookersByPath.Add(cooker0.Path, cooker0); testRepo.compositeCookersByPath.Add(cooker1.Path, cooker1); cooker0.requiredDataCookers.Add(new DataCookerPath(cooker1.Path)); cooker0.ProcessDependencies(testRepo); Assert.IsTrue(cooker1.Availability == DataExtensionAvailability.Available); Assert.IsTrue(cooker0.Availability == DataExtensionAvailability.Available); Assert.AreEqual(cooker0.DependencyState.Errors.Count, 0); Assert.AreEqual(cooker0.DependencyReferences.RequiredSourceDataCookerPaths.Count, 0); Assert.AreEqual(cooker0.DependencyReferences.RequiredCompositeDataCookerPaths.Count, 1); }
public void ConstructorTest2() { var table1 = new TestTableExtensionReference(false) { TableDescriptor = new TableDescriptor( Guid.Parse("{ADE569AF-4460-4DCC-A7C8-9748737AE592}"), "Table1", "Table1 Description", "General", false, TableLayoutStyle.GraphAndTable, new[] { Source1Cooker1Path }), BuildTableAction = (tableBuilder, dataRetrieval) => {}, availability = DataExtensionAvailability.MissingRequirement, }; var testRepo = new TestDataExtensionRepository(); testRepo.tablesById.Add(table1.TableDescriptor.Guid, table1); var tableSelector = new TableExtensionSelector(testRepo); Assert.AreEqual(tableSelector.Tables.Count, 0); Assert.AreEqual(tableSelector.TableCategories.Count, 0); }
public void ConstructorTest3() { var table1 = new TestTableExtensionReference(false) { TableDescriptor = new TableDescriptor( Guid.Parse("{ADE569AF-4460-4DCC-A7C8-9748737AE592}"), "Table1", "Table1 Description", "General", false, TableLayoutStyle.GraphAndTable, new[] { Source1Cooker1Path }), BuildTableAction = (tableBuilder, dataRetrieval) => { }, availability = DataExtensionAvailability.Available, }; var table2 = new TestTableExtensionReference(false) { TableDescriptor = new TableDescriptor( Guid.Parse("{42F33CCB-D1D4-48CD-BAF0-853A508C638D}"), "Table2", "Table1 Description", "Specific", false, TableLayoutStyle.GraphAndTable, new[] { Source1Cooker1Path }), BuildTableAction = (tableBuilder, dataRetrieval) => { }, availability = DataExtensionAvailability.Available, }; var table3 = new TestTableExtensionReference(false) { TableDescriptor = new TableDescriptor( Guid.Parse("{3A613426-6550-49AA-89F0-C6BBB6039EB4}"), "Table3", "Table1 Description", "General", false, TableLayoutStyle.GraphAndTable, new[] { Source1Cooker1Path }), BuildTableAction = (tableBuilder, dataRetrieval) => { }, availability = DataExtensionAvailability.Available, }; var testRepo = new TestDataExtensionRepository(); testRepo.tablesById.Add(table1.TableDescriptor.Guid, table1); testRepo.tablesById.Add(table2.TableDescriptor.Guid, table2); testRepo.tablesById.Add(table3.TableDescriptor.Guid, table3); var tableSelector = new TableExtensionSelector(testRepo); Assert.AreEqual(tableSelector.Tables.Count, 3); Assert.AreEqual(tableSelector.TableCategories.Count, 2); Assert.IsTrue(tableSelector.TableCategories.Contains(table2.TableDescriptor.Category)); Assert.IsTrue(tableSelector.TableCategories.Contains(table1.TableDescriptor.Category)); }
public void Constructor() { var cookedDataRetrieval = new TestCookedDataRetrieval(); var dataExtensionRepository = new TestDataExtensionRepository(); var dataExtensionRetrievalFactory = new DataExtensionRetrievalFactory(cookedDataRetrieval, dataExtensionRepository); Assert.AreEqual(cookedDataRetrieval, dataExtensionRetrievalFactory.CookedSourceData); Assert.AreEqual(dataExtensionRepository, dataExtensionRetrievalFactory.DataExtensionRepository); }
public void CreateDataRetrievalForTable_MissingCookerThrows() { var cookedDataRetrieval = new TestCookedDataRetrieval(); var dataExtensionRepository = new TestDataExtensionRepository(); var tableId = Guid.Parse("{6BB197C8-B3BE-4926-B23A-6F01451D80A3}"); var dataExtensionRetrievalFactory = new DataExtensionRetrievalFactory(cookedDataRetrieval, dataExtensionRepository); Assert.ThrowsException <ArgumentException>(() => dataExtensionRetrievalFactory.CreateDataRetrievalForTable(tableId)); }
public void CreateDataRetrievalForCompositeDataCooker_MissingCookerThrows() { var cookedDataRetrieval = new TestCookedDataRetrieval(); var dataExtensionRepository = new TestDataExtensionRepository(); var cookerPath = new DataCookerPath("CompositeCooker1"); var dataExtensionRetrievalFactory = new DataExtensionRetrievalFactory(cookedDataRetrieval, dataExtensionRepository); Assert.ThrowsException <ArgumentException>(() => dataExtensionRetrievalFactory.CreateDataRetrievalForCompositeDataCooker(cookerPath)); }
public void EstablishAvailability_NoDependencies() { var testRepo = new TestDataExtensionRepository(); var cooker0 = new TestSourceDataCookerReference { Path = new DataCookerPath("TestSourceParser", "Cooker0"), }; cooker0.ProcessDependencies(testRepo); Assert.IsTrue(cooker0.Availability == DataExtensionAvailability.Available); Assert.AreEqual(cooker0.DependencyState.Errors.Count, 0); Assert.AreEqual(cooker0.DependencyReferences.RequiredSourceDataCookerPaths.Count, 0); }
public void CreateDataRetrievalForTableSucceeds() { var cookedDataRetrieval = new TestCookedDataRetrieval(); var dataExtensionRepository = new TestDataExtensionRepository(); var sourceDataCookerReference1 = new TestSourceDataCookerReference(false) { availability = DataExtensionAvailability.Available, Path = new DataCookerPath("Source1", "SourceCooker1"), }; var dataCookerReference = new TestCompositeDataCookerReference(false) { availability = DataExtensionAvailability.Available, Path = new DataCookerPath("CompositeCooker1"), }; dataCookerReference.requiredDataCookers.Add(sourceDataCookerReference1.Path); var tableReference = new TestTableExtensionReference(false) { availability = DataExtensionAvailability.Available, TableDescriptor = new TableDescriptor( Guid.Parse("{F0F20004-E159-447B-B122-BD820C2A9908}"), "Test Table", "Test Table"), }; dataExtensionRepository.sourceCookersByPath.Add(sourceDataCookerReference1.Path, sourceDataCookerReference1); dataExtensionRepository.compositeCookersByPath.Add(dataCookerReference.Path, dataCookerReference); dataExtensionRepository.tablesById.Add(tableReference.TableDescriptor.Guid, tableReference); var dataExtensionRetrievalFactory = new DataExtensionRetrievalFactory(cookedDataRetrieval, dataExtensionRepository); var dataRetrieval = dataExtensionRetrievalFactory.CreateDataRetrievalForTable(tableReference.TableDescriptor.Guid); Assert.IsNotNull(dataRetrieval); // check that the cache is working as expected var dataRetrieval2 = dataExtensionRetrievalFactory.CreateDataRetrievalForTable(tableReference.TableDescriptor.Guid); Assert.IsNotNull(dataRetrieval2); Assert.IsTrue(object.ReferenceEquals(dataRetrieval, dataRetrieval2)); }
public void CreateDataRetrievalForCompositeDataCooker_NotAvailableCookerThrows() { var cookedDataRetrieval = new TestCookedDataRetrieval(); var dataExtensionRepository = new TestDataExtensionRepository(); var dataCookerReference = new TestCompositeDataCookerReference(false) { availability = DataExtensionAvailability.Error, Path = new DataCookerPath("CompositeCooker1"), }; dataExtensionRepository.compositeCookersByPath.Add(dataCookerReference.Path, dataCookerReference); var dataExtensionRetrievalFactory = new DataExtensionRetrievalFactory(cookedDataRetrieval, dataExtensionRepository); Assert.ThrowsException <ArgumentException>(() => dataExtensionRetrievalFactory.CreateDataRetrievalForCompositeDataCooker(dataCookerReference.Path)); }
private static void AddRequiredDataExtensions( TestTableExtensionReference table, TestDataExtensionRepository testRepo) { foreach (var cookerPath in table.RequiredDataCookers) { if (SourceCookersByPath.TryGetValue(cookerPath, out var sourceCookerReference)) { testRepo.sourceCookersByPath.Add(cookerPath, sourceCookerReference); } else if (CompositeCookersByPath.TryGetValue(cookerPath, out var compositeCookerReference)) { testRepo.compositeCookersByPath.Add(cookerPath, compositeCookerReference); } } if (table.DependencyState != null) { testRepo.FinalizeDataExtensions(); } }
public void GetSourceDataCookersForTablesTest1() { var requiredDataCookers = new List <DataCookerPath> { Source1Cooker1Path, }; var table1 = new TestTableExtensionReference { TableDescriptor = new TableDescriptor( Guid.Parse("{ADE569AF-4460-4DCC-A7C8-9748737AE592}"), "Table1", "Table1 Description", "General", false, TableLayoutStyle.GraphAndTable, requiredDataCookers), BuildTableAction = (tableBuilder, dataRetrieval) => { }, }; var testRepo = new TestDataExtensionRepository(); testRepo.tablesById.Add(table1.TableDescriptor.Guid, table1); AddRequiredDataExtensions(table1, testRepo); var tableSelector = new TableExtensionSelector(testRepo); Assert.AreEqual(tableSelector.Tables.Count, 1); var requiredSourceDataCookers = tableSelector.GetSourceDataCookersForTables(new [] { table1.TableDescriptor.Guid }); Assert.AreEqual(requiredSourceDataCookers.Count, 1); var sourceId = requiredDataCookers[0].SourceParserId; Assert.IsTrue(requiredSourceDataCookers.ContainsKey(sourceId)); Assert.AreEqual(requiredSourceDataCookers[sourceId].Count(), 1); }
public void EstablishAvailability_MissingDependency() { var cooker0 = new TestSourceDataCookerReference { Path = new DataCookerPath("TestSourceParser", "Cooker0"), }; // the repository has all source cookers var testRepo = new TestDataExtensionRepository(); testRepo.sourceCookersByPath.Add(cooker0.Path, cooker0); // setup the requirements for the cookers cooker0.requiredDataCookers.Add(new DataCookerPath("TestSourceParser", "Cooker1")); cooker0.ProcessDependencies(testRepo); Assert.IsTrue(cooker0.Availability == DataExtensionAvailability.MissingRequirement); Assert.AreEqual(cooker0.DependencyState.Errors.Count, 0); Assert.AreEqual(cooker0.DependencyState.MissingDataCookers.Count, 1); Assert.AreEqual(cooker0.DependencyReferences.RequiredSourceDataCookerPaths.Count, 0); }
public void EstablishAvailability_DataProcessorReliesOnAvailableDataCookers() { var dataProcessor = new TestDataProcessorReference { Id = "DataProcessor", }; var cooker0 = new TestSourceDataCookerReference { Path = new DataCookerPath("TestSource0", "Cooker0"), }; var cooker1 = new TestCompositeDataCookerReference { Path = new DataCookerPath(DataCookerPath.EmptySourceParserId, "Cooker0"), }; var testRepo = new TestDataExtensionRepository(); testRepo.sourceCookersByPath.Add(cooker0.Path, cooker0); testRepo.compositeCookersByPath.Add(cooker1.Path, cooker1); // setup the requirements dataProcessor.requiredDataCookers.Add(cooker0.Path); dataProcessor.requiredDataCookers.Add(cooker1.Path); dataProcessor.ProcessDependencies(testRepo); Assert.IsTrue(cooker0.Availability == DataExtensionAvailability.Available); Assert.IsTrue(cooker1.Availability == DataExtensionAvailability.Available); Assert.IsTrue(dataProcessor.Availability == DataExtensionAvailability.Available); Assert.AreEqual(dataProcessor.DependencyState.Errors.Count, 0); Assert.AreEqual(dataProcessor.DependencyReferences.RequiredSourceDataCookerPaths.Count, 1); Assert.AreEqual(dataProcessor.DependencyReferences.RequiredCompositeDataCookerPaths.Count, 1); Assert.AreEqual(dataProcessor.DependencyState.MissingDataCookers.Count, 0); }
public void EstablishAvailability_PerformAdditionalValidationIsCalled() { var cooker0 = new TestSourceDataCookerReference { Path = new DataCookerPath("TestSourceParser0", "Cooker0"), }; var cooker1 = new TestSourceDataCookerReference { Path = new DataCookerPath("TestSourceParser1", "Cooker1"), }; var testRepo = new TestDataExtensionRepository(); testRepo.sourceCookersByPath.Add(cooker0.Path, cooker0); testRepo.sourceCookersByPath.Add(cooker1.Path, cooker1); cooker0.requiredDataCookers.Add(new DataCookerPath(cooker1.Path)); cooker0.ProcessDependencies(testRepo); Assert.IsTrue(cooker0.Availability == DataExtensionAvailability.Error); Assert.AreEqual(cooker0.DependencyState.Errors.Count, 1); }
public void CreateDataRetrievalForCompositeDataCookerSucceeds() { var cookedDataRetrieval = new TestCookedDataRetrieval(); var dataExtensionRepository = new TestDataExtensionRepository(); var sourceDataCookerReference1 = new TestSourceDataCookerReference(false) { availability = DataExtensionAvailability.Available, Path = new DataCookerPath("Source1", "SourceCooker1"), }; var dataCookerReference = new TestCompositeDataCookerReference(false) { availability = DataExtensionAvailability.Available, Path = new DataCookerPath("CompositeCooker1"), }; dataCookerReference.requiredDataCookers.Add(sourceDataCookerReference1.Path); dataExtensionRepository.sourceCookersByPath.Add(sourceDataCookerReference1.Path, sourceDataCookerReference1); dataExtensionRepository.compositeCookersByPath.Add(dataCookerReference.Path, dataCookerReference); var dataExtensionRetrievalFactory = new DataExtensionRetrievalFactory(cookedDataRetrieval, dataExtensionRepository); var dataRetrieval = dataExtensionRetrievalFactory.CreateDataRetrievalForCompositeDataCooker(dataCookerReference.Path); Assert.IsNotNull(dataRetrieval); // check that the cache is working as expected var dataRetrieval2 = dataExtensionRetrievalFactory.CreateDataRetrievalForCompositeDataCooker(dataCookerReference.Path); Assert.IsNotNull(dataRetrieval2); Assert.IsTrue(object.ReferenceEquals(dataRetrieval, dataRetrieval2)); }