public void T01_Mask_CSV_Test() { var config = MaskConfig.ReadConfig(utility.TestInstanceConfigfile); //Console.WriteLine($"Config: InputFile = {config.InputFile}"); //Console.WriteLine($"Config: OutputFile = {config.OutputFile}"); var masker = new DataMasking(config); masker.Mask(); Assert.True(File.Exists(config.OutputFile)); var contents = new List <string>(File.ReadLines(config.OutputFile)); Assert.Equal(5, contents.Count); }
static void Main(string[] args) { if (args.Length == 0) { Console.WriteLine(@"Usage: Zoro.exe <path to config file>"); Console.WriteLine(@"E.g. Zoro.exe c:\temp\mask.xml"); Console.WriteLine(@"Sample config file:"); Console.WriteLine("<?xml version=\"1.0\"?>"); Console.WriteLine("<MaskConfig xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">"); Console.WriteLine(@" <FieldMasks>"); Console.WriteLine(@" <FieldMask>"); Console.WriteLine(@" <FieldName>Name</FieldName>"); Console.WriteLine(@" <MaskType>Similar</MaskType>"); Console.WriteLine(@" </FieldMask>"); Console.WriteLine(@" <FieldMask>"); Console.WriteLine(@" <FieldName>MainPhone</FieldName>"); Console.WriteLine(@" <MaskType>Similar</MaskType>"); Console.WriteLine(@" <RegExMatch>^(\+\d\d)?(.*)$</RegExMatch>"); Console.WriteLine(@" <RegExGroupToReplace>2</RegExGroupToReplace>"); Console.WriteLine(@" </FieldMask>"); Console.WriteLine(@" <FieldMask>"); Console.WriteLine(@" <FieldName>Fax</FieldName>"); Console.WriteLine(@" <MaskType>Asterisk</MaskType>"); Console.WriteLine(@" <Asterisk>9</Asterisk>"); Console.WriteLine(@" <RegExMatch>^(\+\d\d)?(.*)$</RegExMatch>"); Console.WriteLine(@" <RegExGroupToReplace>2</RegExGroupToReplace>"); Console.WriteLine(@" </FieldMask>"); Console.WriteLine(@" <FieldMask>"); Console.WriteLine(@" <FieldName>BankAccount</FieldName>"); Console.WriteLine(@" <MaskType>Asterisk</MaskType>"); Console.WriteLine(@" <Asterisk>9</Asterisk>"); Console.WriteLine(@" </FieldMask>"); Console.WriteLine(@" <FieldMask>"); Console.WriteLine(@" <FieldName>Street</FieldName>"); Console.WriteLine(@" <MaskType>List</MaskType>"); Console.WriteLine(@" <ListOfPossibleReplacements>"); Console.WriteLine(@" <Replacement Selector=""Country=Netherlands"" List=""Nootdorpstraat,Nolensstraat,Statensingel"" />"); Console.WriteLine(@" <Replacement Selector=""Country=Germany"" List=""Bahnhofstraße,Freigaße,Hauptstraße"" />"); Console.WriteLine(@" <Replacement Selector=""Country=France"" List=""Rue Nationale,Boulevard Vauban,Rue des Stations"" />"); Console.WriteLine(@" <Replacement Selector="""" List=""Bedford Gardens,Sheffield Terrace,Kensington Palace Gardens"" />"); Console.WriteLine(@" </ListOfPossibleReplacements>"); Console.WriteLine(@" </FieldMask>"); Console.WriteLine(@" </FieldMasks>"); Console.WriteLine(@" <InputFile>C:\\temp\\Zorotests\\data.csv</InputFile>"); Console.WriteLine(@" <OutputFile>C:\\temp\\Zorotests\\maskeddata.csv</OutputFile>"); Console.WriteLine(@" <Delimiter>;</Delimiter>"); Console.WriteLine(@"</MaskConfig>"); return; } // cross platform configfile = Path.GetFullPath(args[0] .Replace('/', Path.DirectorySeparatorChar) .Replace('\\', Path.DirectorySeparatorChar)); if (!File.Exists(configfile)) { Console.WriteLine($"WARNING: Config file {configfile} was not found, exiting."); Console.WriteLine(@"Usage: Zoro.exe <path to config file>"); return; } try { var config = MaskConfig.ReadConfig(configfile); var masker = new DataMasking(config); masker.Mask(); } catch (Exception ex) { Console.WriteLine("An error occured:"); Console.WriteLine("{0}: {1}\r\n{2}", ex.GetType(), ex.Message, ex.StackTrace); } }
public void T01_Save_Read_Config_Test() { var config = new MaskConfig() { InputFile = Path.Combine(utility.TestInstanceDir, "data2.csv"), OutputFile = Path.Combine(utility.TestInstanceDir, "maskeddata2.csv"), DataSource = DataSource.CsvFile, ConnectionString = "(none)", SqlSelect = "(none)" }; string[] fields = new[] { "BIRTHDAY", "BANKACCOUNTNR", "FINANCIALINSTITUTE", "BANKZIPNR", "STREET1", "LAND", "ZIP1", "STREET2", "ZIP2", "STREET3", "ZIP3", "PHONEID1", "PHONEFIELDSTR1", "PHONEID2", "PHONEFIELDSTR2", "PHONEID3", "PHONEFIELDSTR3", "PHONEID4", "PHONEFIELDSTR4", "PHONEID5", "PHONEFIELDSTR5", "PHONEID6", "PHONEFIELDSTR6", "PHONEID7", "PHONEFIELDSTR7", "PHONEID8", "PHONEFIELDSTR8", "PHONEID9", "PHONEFIELDSTR9", "PHONEID10", "PHONEFIELDSTR10", "MAILFIELDSTR1", "MAILFIELDSTR2", "MAILFIELDSTR3", "MAILFIELDSTR4", "GWIBAN", "GWBIC", "GWTRADEREGISTER", "WCM_KURZNA", "ART_STREET_EXPORT", "ART_NAME_EXPORT", "ART_ZIP_EXPORT", "ART_CHRISTIANNAME_EXPORT" }; string[] nameFields = new[] { "NAME", "CHRISTIANNAME" }; string[] zipFields = new[] { "ZIP1", "ZIP2", "ZIP3" }; foreach (string field in fields.Where(x => !nameFields.Contains(x) && !zipFields.Contains(x))) { config.FieldMasks.Add(new FieldMask() { FieldName = field, MaskType = MaskType.Similar }); } foreach (string field in nameFields) { config.FieldMasks.Add(new FieldMask() { FieldName = field, MaskType = MaskType.List, ListOfPossibleReplacements = new List <Replacement>() { new Replacement() { Selector = "GWGENDER=weiblich", ReplacementList = "Kerry,Laura" }, new Replacement() { Selector = "", ReplacementList = "Nick,John,Papadopoulos,Smith" } } }); } foreach (string field in zipFields) { config.FieldMasks.Add(new FieldMask() { FieldName = field, MaskType = MaskType.Query, QueryReplacement = new QueryReplacement() { Query = "SELECT postcode, country FROM postcode", ValueDbField = "postcode", GroupDbField = "country", SelectorField = "LAND" } }); } testConfigFile = Path.Combine(utility.TestInstanceDir, $"config_{Guid.NewGuid()}.xml"); MaskConfig.SaveConfig(testConfigFile, config); // test writing Assert.True(File.Exists(utility.TestInstanceConfigfile)); // test reading var config2 = MaskConfig.ReadConfig(testConfigFile); //Console.WriteLine($"Config: InputFile = {config2.InputFile}"); //Console.WriteLine($"Config: OutputFile = {config2.OutputFile}"); Assert.Equal(45, config2.FieldMasks.Count); }
public void T02_Read_Config_Test() { var config = MaskConfig.ReadConfig(utility.TestInstanceConfigfile); Assert.Equal(2, config.FieldMasks.Count); }