Exemplo n.º 1
0
        /// <summary>
        /// Invokes the P# testing engine.
        /// </summary>
        /// <param name="configuration">Configuration</param>
        public void Execute(Configuration configuration)
        {
            // Creates and runs the P# testing engine to find bugs in the P# program.
            ITestingEngine testingEngine = TestingEngineFactory.CreateBugFindingEngine(configuration);

            var assembly = Assembly.LoadFrom(configuration.AssemblyToBeAnalyzed);

            new RaceInstrumentationEngine(testingEngine, configuration);

            this.TryLoadReferencedAssemblies(new[] { assembly });

            testingEngine.Run();

            IO.Error.PrintLine(testingEngine.Report());
            if (testingEngine.TestReport.NumOfFoundBugs > 0 ||
                configuration.PrintTrace)
            {
                testingEngine.TryEmitTraces();
            }

            if (configuration.ReportCodeCoverage)
            {
                testingEngine.TryEmitCoverageReport();
            }
        }
Exemplo n.º 2
0
        public static void Main(string[] args)
        {
            // Optional: increases verbosity level to see the P# runtime log.
            var configuration = Configuration.Create();

            configuration.SchedulingIterations = 10;
            var engine = TestingEngineFactory.CreateBugFindingEngine(configuration, DefaultImpl.Execute);

            engine.Run();
            var bug = engine.TestReport.BugReports.FirstOrDefault();

            if (bug != null)
            {
                Console.WriteLine(bug);
            }

            /*
             * // Creates a new P# runtime instance, and passes an optional configuration.
             * var runtime = PSharpRuntime.Create(configuration);
             *
             * // Executes the P# program.
             * DefaultImpl.Execute(runtime);
             *
             * // The P# runtime executes asynchronously, so we wait
             * // to not terminate the process.
             * Console.WriteLine("Press Enter to terminate...");
             */
        }
Exemplo n.º 3
0
        static void Main(string[] args)
        {
            var configuration = Configuration.Create().
                                WithLivenessCheckingEnabled().
                                WithNumberOfIterations(10).
                                WithVerbosityEnabled(2);

            TestingEngineFactory.CreateBugFindingEngine(configuration, Execute).Run();
        }
Exemplo n.º 4
0
        /// <summary>
        /// Starts the P# replaying process.
        /// </summary>
        public void Start()
        {
            Output.WriteLine(". Reproducing trace in " + this.Configuration.AssemblyToBeAnalyzed);

            // Creates a new P# replay engine to reproduce a bug.
            ITestingEngine engine = TestingEngineFactory.CreateReplayEngine(this.Configuration);

            engine.Run();
            Output.WriteLine(engine.Report());
        }
Exemplo n.º 5
0
        public void TestDefaultEventHandled()
        {
            var configuration = Configuration.Create();
            configuration.SuppressTrace = true;
            configuration.Verbose = 2;

            var engine = TestingEngineFactory.CreateBugFindingEngine(
                configuration, TestProgram.Execute);
            engine.Run();

            Assert.AreEqual(0, engine.TestReport.NumOfFoundBugs);
        }
        /// <summary>
        /// Invokes the P# testing engine.
        /// </summary>
        /// <param name="configuration">Configuration</param>
        public void Execute(Configuration configuration)
        {
            // Creates and runs the P# testing engine to find bugs in the P# program.
            ITestingEngine testingEngine = TestingEngineFactory.CreateBugFindingEngine(configuration);

            var assembly = Assembly.LoadFrom(configuration.AssemblyToBeAnalyzed);

            new RaceInstrumentationEngine(testingEngine.Reporter, configuration);

            this.TryLoadReferencedAssemblies(new[] { assembly });

            testingEngine.Run();

            Output.WriteLine(testingEngine.Report());
            if (testingEngine.TestReport.NumOfFoundBugs > 0)
            {
                string file = Path.GetFileNameWithoutExtension(configuration.AssemblyToBeAnalyzed);
                file += "_" + configuration.TestingProcessId;

                string directoryPath;
                string suffix = "";

                if (configuration.OutputFilePath != "")
                {
                    directoryPath = configuration.OutputFilePath + Path.DirectorySeparatorChar;
                }
                else
                {
                    var subpath = Path.GetDirectoryName(configuration.AssemblyToBeAnalyzed);
                    if (subpath == "")
                    {
                        subpath = ".";
                    }

                    directoryPath = subpath +
                                    Path.DirectorySeparatorChar + "Output" + Path.DirectorySeparatorChar;
                }

                if (suffix.Length > 0)
                {
                    directoryPath += suffix + Path.DirectorySeparatorChar;
                }

                Directory.CreateDirectory(directoryPath);
                Output.WriteLine($"... Emitting task {configuration.TestingProcessId} traces:");
                testingEngine.TryEmitTraces(directoryPath, file);
            }

            //if (configuration.ReportCodeCoverage)
            //{
            //    testingEngine.TryEmitCoverageReport();
            //}
        }
        /// <summary>
        /// Invokes the P# testing engine.
        /// </summary>
        /// <param name="configuration">Configuration</param>
        public void Execute(Configuration configuration)
        {
            // Creates and runs the P# testing engine to find bugs in the P# program.
            ITestingEngine testingEngine = TestingEngineFactory.CreateBugFindingEngine(configuration);

            var assembly = Assembly.LoadFrom(configuration.AssemblyToBeAnalyzed);

            new RaceInstrumentationEngine(testingEngine, configuration);

            this.TryLoadReferencedAssemblies(new[] { assembly });

            testingEngine.Run();
        }
Exemplo n.º 8
0
        public void TestNullHandlerInheritedByPushTransition()
        {
            var configuration = Configuration.Create();

            configuration.SuppressTrace = true;
            configuration.Verbose       = 2;

            var engine = TestingEngineFactory.CreateBugFindingEngine(
                configuration, TestProgram.Execute);

            engine.Run();

            Assert.AreEqual(1, engine.TestReport.NumOfFoundBugs);
        }
Exemplo n.º 9
0
        public void TestPushImplicitPopWithSend()
        {
            var configuration = Configuration.Create();

            configuration.SuppressTrace = true;
            configuration.Verbose       = 2;

            var engine = TestingEngineFactory.CreateBugFindingEngine(
                configuration, TestProgram.Execute);

            engine.Run();

            Assert.AreEqual(1, engine.TestReport.NumOfFoundBugs);
        }
Exemplo n.º 10
0
        public void TestActions6Fail()
        {
            var configuration = Configuration.Create();

            configuration.SuppressTrace      = true;
            configuration.Verbose            = 2;
            configuration.SchedulingStrategy = SchedulingStrategy.DFS;

            var engine = TestingEngineFactory.CreateBugFindingEngine(
                configuration, TestProgram.Execute);

            engine.Run();

            Assert.AreEqual(1, engine.TestReport.NumOfFoundBugs);
        }
Exemplo n.º 11
0
        public void TestReceivingExternalEvents()
        {
            var configuration = Configuration.Create();

            configuration.ThrowInternalExceptions = true;
            configuration.SuppressTrace           = true;
            configuration.Verbose = 2;

            var engine = TestingEngineFactory.CreateBugFindingEngine(
                configuration, TestProgram.Execute);

            engine.Run();

            Assert.AreEqual(0, engine.TestReport.NumOfFoundBugs);
        }
Exemplo n.º 12
0
        public static void Main(string[] args)
        {
            // Optional: increases verbosity level to see the Coyote runtime log.
            var configuration = Configuration.Create();

            configuration.SchedulingIterations = 10;
            var engine = TestingEngineFactory.CreateBugFindingEngine(configuration, Test0.Execute);

            engine.Run();
            var bug = engine.TestReport.BugReports.FirstOrDefault();

            if (bug != null)
            {
                Console.WriteLine(bug);
            }
        }
Exemplo n.º 13
0
        public void TestLiveness2LoopMachine()
        {
            var configuration = Configuration.Create();

            configuration.SuppressTrace                = true;
            configuration.Verbose                      = 2;
            configuration.SchedulingIterations         = 100;
            configuration.LivenessTemperatureThreshold = 200;

            var engine = TestingEngineFactory.CreateBugFindingEngine(
                configuration, TestProgram.Execute);

            engine.Run();

            Assert.AreEqual(1, engine.TestReport.NumOfFoundBugs);
        }
Exemplo n.º 14
0
        public void TestGroupState()
        {
            var configuration = Configuration.Create();

            configuration.SuppressTrace = true;
            configuration.Verbose       = 2;

            var engine = TestingEngineFactory.CreateBugFindingEngine(
                configuration, TestProgram.Execute);

            engine.Run();

            var bugReport = "Assertion failure.";

            Assert.AreEqual(bugReport, engine.TestReport.BugReport);
        }
        public void TestGotoStateTopLevelActionFail3()
        {
            var configuration = Configuration.Create();

            configuration.SuppressTrace = true;
            configuration.Verbose       = 2;

            var engine = TestingEngineFactory.CreateBugFindingEngine(
                configuration, TestProgram.Execute3);

            engine.Run();

            Assert.AreEqual(1, engine.TestReport.NumOfFoundBugs);
            Assert.AreEqual("Machine 'Microsoft.PSharp.TestingServices.Tests.Unit.GotoStateTopLevelActionFailTest+Program(1)' " +
                            "cannot call API 'Send' after calling raise/goto/pop in the same action.",
                            engine.TestReport.BugReport);
        }
Exemplo n.º 16
0
        public void TestBangaloreToRedmond()
        {
            var configuration = Configuration.Create();

            configuration.SuppressTrace      = true;
            configuration.Verbose            = 2;
            configuration.SchedulingStrategy = SchedulingStrategy.DFS;
            configuration.MaxSchedulingSteps = 300;

            var engine = TestingEngineFactory.CreateBugFindingEngine(
                configuration, TestProgram.Execute);

            engine.Run();

            //Assert.AreEqual(0, TestingEngine.NumOfFoundBugs);
            //Assert.AreEqual(5, TestingEngine.ExploredDepth);
        }
        public void TestGotoStateTopLevelActionFail4()
        {
            var configuration = Configuration.Create();

            configuration.SuppressTrace = true;
            configuration.Verbose       = 2;

            var engine = TestingEngineFactory.CreateBugFindingEngine(
                configuration, TestProgram.Execute4);

            engine.Run();

            Assert.AreEqual(1, engine.TestReport.NumOfFoundBugs);
            Assert.AreEqual("Machine 'Microsoft.PSharp.TestingServices.Tests.Unit.GotoStateTopLevelActionFailTest+Program(1)' " +
                            "has called raise/goto/pop inside an OnExit method.",
                            engine.TestReport.BugReport);
        }
Exemplo n.º 18
0
        public void TestLiveness2()
        {
            var configuration = Configuration.Create();

            configuration.SuppressTrace      = true;
            configuration.Verbose            = 2;
            configuration.CacheProgramState  = true;
            configuration.SchedulingStrategy = SchedulingStrategy.DFS;

            var engine = TestingEngineFactory.CreateBugFindingEngine(
                configuration, TestProgram.Execute);

            engine.Run();

            var bugReport = "Monitor 'WatchDog' detected infinite execution that violates a liveness property.";

            Assert.AreEqual(bugReport, engine.TestReport.BugReport);
        }
Exemplo n.º 19
0
        public void TestFairNondet1()
        {
            var configuration = Configuration.Create();
            configuration.SuppressTrace = true;
            configuration.Verbose = 3;
            configuration.CacheProgramState = true;
            configuration.LivenessTemperatureThreshold = 0;
            configuration.SchedulingStrategy = SchedulingStrategy.DFS;
            configuration.MaxSchedulingSteps = 300;

            IO.Debugging = true;

            var engine = TestingEngineFactory.CreateBugFindingEngine(
                configuration, TestProgram.Execute);
            engine.Run();

            Assert.AreEqual(0, engine.TestReport.NumOfFoundBugs);
        }
Exemplo n.º 20
0
        public void TestLiveness2BugFound()
        {
            var configuration = Configuration.Create();

            configuration.SuppressTrace      = true;
            configuration.Verbose            = 2;
            configuration.SchedulingStrategy = SchedulingStrategy.DFS;

            var engine = TestingEngineFactory.CreateBugFindingEngine(
                configuration, TestProgram.Execute);

            engine.Run();

            var bugReport = "Monitor 'WatchDog' detected liveness bug in hot state " +
                            "'Microsoft.PSharp.TestingServices.Tests.Unit.Liveness2BugFoundTest+WatchDog.CannotGetUserInput' " +
                            "at the end of program execution.";

            Assert.AreEqual(bugReport, engine.TestReport.BugReport);
        }
Exemplo n.º 21
0
        public void TestSimpleAsyncAwaitFail()
        {
            var configuration = Configuration.Create();

            configuration.SuppressTrace                   = true;
            configuration.Verbose                         = 2;
            configuration.SchedulingIterations            = 2;
            configuration.SchedulingStrategy              = SchedulingStrategy.DFS;
            configuration.ScheduleIntraMachineConcurrency = true;

            var engine = TestingEngineFactory.CreateBugFindingEngine(
                configuration, TestProgram.Execute);

            engine.Run();

            var bugReport = "Value is '3' (expected less than '3').";

            Assert.AreEqual(bugReport, engine.TestReport.BugReport);
        }
Exemplo n.º 22
0
        public void TestReceiveEventFailure()
        {
            var configuration = Configuration.Create();

            configuration.SuppressTrace      = true;
            configuration.Verbose            = 2;
            configuration.SchedulingStrategy = SchedulingStrategy.DFS;

            var engine = TestingEngineFactory.CreateBugFindingEngine(
                configuration, TestProgram.Execute);

            engine.Run();

            Assert.AreEqual(1, engine.TestReport.NumOfFoundBugs);
            var bugReport = "Livelock detected. Machine 'Microsoft.PSharp.TestingServices." +
                            "Tests.Unit.ReceiveEventFailTest+Client(2)' is waiting for an event, but " +
                            "no other machine is enabled.";

            Assert.AreEqual(bugReport, engine.TestReport.BugReport);
        }
Exemplo n.º 23
0
        public void TestHotStateMonitor()
        {
            var configuration = Configuration.Create();

            configuration.SuppressTrace      = true;
            configuration.Verbose            = 2;
            configuration.SchedulingStrategy = SchedulingStrategy.DFS;

            IO.Debugging = true;

            var engine = TestingEngineFactory.CreateBugFindingEngine(
                configuration, TestProgram.Execute);

            engine.Run();

            var bugReport = "Monitor 'M' detected liveness bug in hot state " +
                            "'Microsoft.PSharp.TestingServices.Tests.Unit.HotStateTest+M.Init' " +
                            "at the end of program execution.";

            Assert.AreEqual(bugReport, engine.TestReport.BugReport);
        }