Exemplo n.º 1
0
 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;
     });
 }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        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);
        }