/// <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(); } }
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..."); */ }
static void Main(string[] args) { var configuration = Configuration.Create(). WithLivenessCheckingEnabled(). WithNumberOfIterations(10). WithVerbosityEnabled(2); TestingEngineFactory.CreateBugFindingEngine(configuration, Execute).Run(); }
/// <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()); }
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(); }
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); }
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); }
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); }
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); }
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); } }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }