static void Main(string[] args) { Parser.Default.ParseArguments <CommandLineOptions>(args) .WithParsed(opts => { var file = opts.InputFile; var testDefinitions = new List <TestDefinition>(); var inputLines = File.ReadAllLines(file); var lineNo = 1; foreach (var line in inputLines) { try { var testDef = TestDefinition.ParseDefinition(line); testDefinitions.Add(testDef); } catch (ArgumentException ex) { Log.Error("Illegal test definition in line {0}. {1}", lineNo, ex.Message); } lineNo++; } if (testDefinitions.Count > 0) { RunTests(testDefinitions, opts.TestCount); } }) .WithNotParsed((errs) => { Log.Info("Command line argument problem"); return; }); }
public static TestDefinition ParseDefinition(string line) { bool ok; if (string.IsNullOrEmpty(line)) { throw new ArgumentException("Line is empty"); } var result = new TestDefinition(); var parts = line.Split(';'); result.Url = parts[0]; if (string.IsNullOrEmpty(result.Url)) { throw new ArgumentException("Url definition empty"); } if (parts.Length > 1) { var ports = parts[1]; if (string.IsNullOrEmpty(ports)) { throw new ArgumentException("Ports definition empty"); } var portParts = ports.Split('-'); ok = int.TryParse(portParts[0], out int portFrom); if (!ok) { throw new ArgumentException("Port value can't be parsed as number"); } result.PortFrom = portFrom; if (portParts.Length < 2) { result.PortTo = result.PortFrom; } else { ok = int.TryParse(portParts[1], out int portTo); if (!ok) { throw new ArgumentException("Port value can't be parsed as number"); } result.PortTo = portTo; } } if (parts.Length > 2) { var dataSize = parts[2]; if (string.IsNullOrEmpty(dataSize)) { throw new ArgumentException("Data size definition empty"); } var dataSizeParts = dataSize.Split('-'); ok = int.TryParse(dataSizeParts[0], out int dataSizeFrom); if (!ok) { throw new ArgumentException("Data size value can't be parsed as number"); } result.DataSizeFrom = dataSizeFrom; if (dataSizeParts.Length < 2) { result.DataSizeTo = result.DataSizeFrom; } else { ok = int.TryParse(dataSizeParts[1], out int dataSizeTo); if (!ok) { throw new ArgumentException("Data size value can't be parsed as number"); } result.DataSizeTo = dataSizeTo; } } return(result); }
public void TestDefinitionParser() { string line = ""; var testUrl = "http://http://pinkibrejn2.playkontrol.com"; var ex = Assert.ThrowsException <ArgumentException>(() => TestDefinition.ParseDefinition(line)); Assert.AreEqual(ex.Message, "Line is empty"); line = ";"; ex = Assert.ThrowsException <ArgumentException>(() => TestDefinition.ParseDefinition(line)); Assert.AreEqual(ex.Message, "Url definition empty"); line = $"{testUrl}:8072?cmd=getdata"; var result = TestDefinition.ParseDefinition(line); Assert.AreEqual(result.Url, line); line = $"{testUrl}{{port}}?cmd=getdata;"; ex = Assert.ThrowsException <ArgumentException>(() => TestDefinition.ParseDefinition(line)); Assert.AreEqual(ex.Message, "Ports definition empty"); line = $"{testUrl}:{{port}}?cmd=getdata&kb=1000;abc"; ex = Assert.ThrowsException <ArgumentException>(() => TestDefinition.ParseDefinition(line)); Assert.AreEqual(ex.Message, "Port value can't be parsed as number"); line = $"{testUrl}:{{port}}?cmd=getdata&kb=1000;8072-xxx"; ex = Assert.ThrowsException <ArgumentException>(() => TestDefinition.ParseDefinition(line)); Assert.AreEqual(ex.Message, "Port value can't be parsed as number"); line = $"{testUrl}:{{port}}?cmd=getdata&kb=1000;8072"; result = TestDefinition.ParseDefinition(line); Assert.AreEqual(result.PortFrom, 8072); Assert.AreEqual(result.PortTo, 8072); line = $"{testUrl}:{{port}}?cmd=getdata&kb=1000;8072-8080"; result = TestDefinition.ParseDefinition(line); Assert.AreEqual(result.PortFrom, 8072); Assert.AreEqual(result.PortTo, 8080); line = $"{testUrl}:{{port}}?cmd=getdata&kb={{size}};8072-8080;"; ex = Assert.ThrowsException <ArgumentException>(() => TestDefinition.ParseDefinition(line)); Assert.AreEqual(ex.Message, "Data size definition empty"); line = $"{testUrl}:{{port}}?cmd=getdata&kb={{size}};8072-8080;xxx"; ex = Assert.ThrowsException <ArgumentException>(() => TestDefinition.ParseDefinition(line)); Assert.AreEqual(ex.Message, "Data size value can't be parsed as number"); line = $"{testUrl}:{{port}}?cmd=getdata&kb={{size}};8072-8080;1000-xxx"; ex = Assert.ThrowsException <ArgumentException>(() => TestDefinition.ParseDefinition(line)); Assert.AreEqual(ex.Message, "Data size value can't be parsed as number"); line = $"{testUrl}:{{port}}?cmd=getdata&kb={{size}};8072-8080;1000"; result = TestDefinition.ParseDefinition(line); Assert.AreEqual(result.DataSizeFrom, 1000); Assert.AreEqual(result.DataSizeTo, 1000); line = $"{testUrl}:{{port}}?cmd=getdata&kb={{size}};8072-8080;1000-3000"; result = TestDefinition.ParseDefinition(line); Assert.AreEqual(result.DataSizeFrom, 1000); Assert.AreEqual(result.DataSizeTo, 3000); }