protected void TestWithError(Action <IMachineRuntime> test, Configuration configuration = null, string[] expectedErrors = null, bool replay = false) { configuration = configuration ?? GetConfiguration(); var logger = new Common.TestOutputLogger(this.TestOutput); try { var bfEngine = BugFindingEngine.Create(configuration, test); bfEngine.SetLogger(logger); bfEngine.Run(); CheckErrors(bfEngine, expectedErrors); if (replay && !configuration.EnableCycleDetection) { var rEngine = ReplayEngine.Create(configuration, test, bfEngine.ReproducableTrace); rEngine.SetLogger(logger); rEngine.Run(); Assert.True(rEngine.InternalError.Length == 0, rEngine.InternalError); CheckErrors(rEngine, expectedErrors); } } catch (Exception ex) { Assert.False(true, ex.Message + "\n" + ex.StackTrace); } finally { logger.Dispose(); } }
protected void AssertFailed(Configuration configuration, Action <IMachineRuntime> test, int numExpectedErrors, ISet <string> expectedOutputs) { var logger = new Common.TestOutputLogger(this.TestOutput); try { var bfEngine = BugFindingEngine.Create(configuration, test); bfEngine.SetLogger(logger); bfEngine.Run(); CheckErrors(bfEngine, numExpectedErrors, expectedOutputs); if (!configuration.EnableCycleDetection) { var rEngine = ReplayEngine.Create(configuration, test, bfEngine.ReproducableTrace); rEngine.SetLogger(logger); rEngine.Run(); Assert.True(rEngine.InternalError.Length == 0, rEngine.InternalError); CheckErrors(rEngine, numExpectedErrors, expectedOutputs); } } catch (Exception ex) { Assert.False(true, ex.Message + "\n" + ex.StackTrace); } finally { logger.Dispose(); } }
protected void AssertFailedWithException(Configuration configuration, Action <IMachineRuntime> test, Type exceptionType) { Assert.True(exceptionType.IsSubclassOf(typeof(Exception)), "Please configure the test correctly. " + $"Type '{exceptionType}' is not an exception type."); var logger = new Common.TestOutputLogger(this.TestOutput); try { var bfEngine = BugFindingEngine.Create(configuration, test); bfEngine.SetLogger(logger); bfEngine.Run(); CheckErrors(bfEngine, exceptionType); if (!configuration.EnableCycleDetection) { var rEngine = ReplayEngine.Create(configuration, test, bfEngine.ReproducableTrace); rEngine.SetLogger(logger); rEngine.Run(); Assert.True(rEngine.InternalError.Length == 0, rEngine.InternalError); CheckErrors(rEngine, exceptionType); } } catch (Exception ex) { Assert.False(true, ex.Message + "\n" + ex.StackTrace); } finally { logger.Dispose(); } }
protected ITestingEngine AssertSucceeded(Configuration configuration, Action <PSharpRuntime> test) { BugFindingEngine engine = null; var logger = new Common.TestOutputLogger(this.TestOutput); try { engine = BugFindingEngine.Create(configuration, test); engine.SetLogger(logger); engine.Run(); var numErrors = engine.TestReport.NumOfFoundBugs; Assert.True(numErrors == 0, GetBugReport(engine)); } catch (Exception ex) { Assert.False(true, ex.Message + "\n" + ex.StackTrace); } finally { logger.Dispose(); } return(engine); }
protected void Run(Configuration configuration, Action <PSharpRuntime> test) { var logger = new ThreadSafeInMemoryLogger(); var outputLogger = new Common.TestOutputLogger(this.TestOutput); try { var runtime = PSharpRuntime.Create(configuration); runtime.SetLogger(logger); test(runtime); } catch (Exception ex) { Assert.False(true, ex.Message + "\n" + ex.StackTrace); } finally { this.TestOutput.WriteLine(logger.ToString()); logger.Dispose(); outputLogger.Dispose(); } }
private ITestingEngine Test(BugFindingEngine engine) { var logger = new Common.TestOutputLogger(this.TestOutput); try { engine.SetLogger(logger); engine.Run(); var numErrors = engine.TestReport.NumOfFoundBugs; Assert.True(numErrors == 0, GetBugReport(engine)); } catch (Exception ex) { Assert.False(true, ex.Message + "\n" + ex.StackTrace); } finally { logger.Dispose(); } return(engine); }