public void ForeignCharacterTest() { string path = Path.Combine(Path.GetTempPath(), "文档.db"); File.Delete(path); database = new SQLite(); database.OpenDatabase(path, readOnly: false); var writer = new DataStoreWriter(database); DataTable data = new DataTable("Report"); data.Columns.Add("SimulationName", typeof(string)); data.Columns.Add("Col1", typeof(int)); DataRow row = data.NewRow(); row["SimulationName"] = "Sim1"; row["Col1"] = 10; data.Rows.Add(row); writer.WriteTable(data); writer.Stop(); Assert.IsTrue( Utilities.CreateTable(new string[] { "CheckpointID", "SimulationID", "Col1" }, new List <object[]> { new object[] { 1, 1, 10 } }) .IsSame(Utilities.GetTableFromDatabase(database, "Report"))); database.CloseDatabase(); File.Delete(path); }
public void ForeignCharacterTest() { string path = Path.Combine(Path.GetTempPath(), "文档.db"); File.Delete(path); database = new SQLite(); database.OpenDatabase(path, readOnly: false); var writer = new DataStoreWriter(database); DataTable data = new DataTable("Report"); data.Columns.Add("SimulationName", typeof(string)); data.Columns.Add("Col1", typeof(int)); DataRow row = data.NewRow(); row["SimulationName"] = "Sim1"; row["Col1"] = 10; data.Rows.Add(row); writer.WriteTable(data); writer.Stop(); Assert.AreEqual(Utilities.TableToString(database, "Report"), $"CheckpointID,SimulationID,Col1{Environment.NewLine}" + $" 1, 1, 10{Environment.NewLine}"); database.CloseDatabase(); File.Delete(path); }
/// <summary>Close the database.</summary> public void Close() { if (connection != null) { connection.CloseDatabase(); connection = null; } }
public void EnsurePassedITestWorks() { foreach (var typeOfRun in runTypes) { // Open an in-memory database. database = new SQLite(); database.OpenDatabase(":memory:", readOnly: false); var simulations = new Simulations() { Children = new List <IModel>() { new Simulation() { Name = "Sim", FileName = Path.GetTempFileName(), Children = new List <IModel>() { new Clock() { StartDate = new DateTime(1980, 1, 3), EndDate = new DateTime(1980, 1, 4) }, new MockSummary(), new DataStore(database), new Manager() { Code = "using System;\r\n" + "using Models.Core;\r\n" + "namespace Models\r\n" + "{\r\n" + " [Serializable]\r\n" + " public class Script : Model, ITest\r\n" + " {\r\n" + " [Link]\r\n" + " ISummary summary = null;\r\n" + " public void Run() { summary.WriteMessage(this, \"Passed Test\", MessageType.Information); }\r\n" + " }\r\n" + "}" } } } } }; // Run simulations. Runner runner = new Runner(simulations, runType: typeOfRun, runTests: true); List <Exception> errors = runner.Run(); Assert.NotNull(errors); Assert.AreEqual(0, errors.Count); // Make sure an exception is returned. Assert.IsNotNull(MockSummary.messages.Find(m => m.Contains("Passed Test"))); database.CloseDatabase(); } }
public void EnsureOnlyPostSimulationToolsAreRun() { foreach (var typeOfRun in runTypes) { // Open an in-memory database. database = new SQLite(); database.OpenDatabase(":memory:", readOnly: false); var simulation = new Simulation() { Name = "Sim", FileName = Path.GetTempFileName(), Children = new List <Model>() { new Clock() { StartDate = new DateTime(1980, 1, 3), EndDate = new DateTime(1980, 1, 4) }, new MockSummary(), new DataStore(database), new MockPostSimulationTool(doThrow: true) { Name = "PostSim" } } }; Runner runner = new Runner(simulation, runType: typeOfRun, runSimulations: false); // Ensure number of simulations is correct before any are run. Assert.AreEqual(runner.TotalNumberOfSimulations, 0); Assert.AreEqual(runner.NumberOfSimulationsCompleted, 0); AllJobsCompletedArgs argsOfAllCompletedJobs = null; runner.AllSimulationsCompleted += (sender, e) => { argsOfAllCompletedJobs = e; }; // Run simulations. runner.Run(); // Simulation shouldn't have run. Check the summary messages to make // sure there is NOT a 'Simulation completed' message. Assert.AreEqual(MockSummary.messages.Count, 0); // Ensure number of simulations is correct after all have been run. Assert.AreEqual(runner.TotalNumberOfSimulations, 0); Assert.AreEqual(runner.NumberOfSimulationsCompleted, 0); Assert.AreEqual(runner.PercentComplete(), 0); // Make sure the expected exception was sent through the all completed jobs event. Assert.AreEqual(argsOfAllCompletedJobs.AllExceptionsThrown.Count, 1); Assert.IsTrue(argsOfAllCompletedJobs.AllExceptionsThrown[0].ToString().Contains("Intentional exception")); database.CloseDatabase(); } }
public void EnsureFailedITestExceptionIsReturned() { foreach (var typeOfRun in runTypes) { // Open an in-memory database. database = new SQLite(); database.OpenDatabase(":memory:", readOnly: false); var simulations = new Simulations() { Children = new List <IModel>() { new Simulation() { Name = "Sim", FileName = Path.GetTempFileName(), Children = new List <IModel>() { new Clock() { StartDate = new DateTime(1980, 1, 3), EndDate = new DateTime(1980, 1, 4) }, new MockSummary(), new DataStore(database), new Manager() { Code = "using System;\r\n" + "using Models.Core;\r\n" + "namespace Models\r\n" + "{\r\n" + " [Serializable]\r\n" + " public class Script : Model, ITest\r\n" + " {\r\n" + " public void Run() { throw new Exception(\"Test has failed.\"); }\r\n" + " }\r\n" + "}" } } } } }; // Run simulations. Runner runner = new Runner(simulations, runType: typeOfRun, runTests: true); var exceptions = runner.Run(); // Make sure an exception is returned. Assert.IsTrue(exceptions[0].ToString().Contains("Test has failed."), $"Exception message {exceptions[0].ToString()} does not contain 'Test has failed.'."); database.CloseDatabase(); } }
public void EnsureSimulationRuns() { foreach (var typeOfRun in runTypes) { // Open an in-memory database. database = new SQLite(); database.OpenDatabase(":memory:", readOnly: false); // Create a simulation and add a datastore. var simulation = new Simulation() { Name = "Sim", FileName = Path.GetTempFileName(), Children = new List <IModel>() { new Clock() { StartDate = new DateTime(1980, 1, 1), EndDate = new DateTime(1980, 1, 2) }, new MockSummary(), new Models.Report() { Name = "Report", VariableNames = new string[] { "[Clock].Today" }, EventNames = new string[] { "[Clock].DoReport" } }, new DataStore(database) } }; // Run simulations. Runner runner = new Runner(simulation, runType: typeOfRun); List <Exception> errors = runner.Run(); Assert.NotNull(errors); Assert.AreEqual(0, errors.Count); Assert.IsTrue( Utilities.CreateTable(new string[] { "Clock.Today" }, new List <object[]> { new object[] { new DateTime(1980, 01, 01) }, new object[] { new DateTime(1980, 01, 02) } }) .IsSame(database.ExecuteQuery("SELECT [Clock.Today] FROM Report ORDER BY [Clock.Today]"))); database.CloseDatabase(); } }
public void EnsureSimulationRuns() { foreach (var typeOfRun in runTypes) { // Open an in-memory database. database = new SQLite(); database.OpenDatabase(":memory:", readOnly: false); // Create a simulation and add a datastore. var simulation = new Simulation() { Name = "Sim", FileName = Path.GetTempFileName(), Children = new List <Model>() { new Clock() { StartDate = new DateTime(1980, 1, 1), EndDate = new DateTime(1980, 1, 2) }, new MockSummary(), new Models.Report.Report() { Name = "Report", VariableNames = new string[] { "[Clock].Today" }, EventNames = new string[] { "[Clock].DoReport" } }, new DataStore(database) } }; // Run simulations. Runner runner = new Runner(simulation, runType: typeOfRun); Assert.IsNull(runner.Run()); // Check that data was written to database. Assert.AreEqual(Utilities.TableToStringUsingSQL(database, "SELECT [Clock.Today] FROM Report ORDER BY [Clock.Today]"), "Clock.Today\r\n" + " 1980-01-01\r\n" + " 1980-01-02\r\n"); database.CloseDatabase(); } }
public void EnsurePostSimulationToolsAreRun() { foreach (var typeOfRun in runTypes) { // Open an in-memory database. database = new SQLite(); database.OpenDatabase(":memory:", readOnly: false); var simulation = new Simulation() { Name = "Sim", FileName = Path.GetTempFileName(), Children = new List <IModel>() { new Clock() { StartDate = new DateTime(1980, 1, 3), EndDate = new DateTime(1980, 1, 4) }, new MockSummary(), new DataStore(database), new MockPostSimulationTool(doThrow: true) { Name = "PostSim" } } }; Runner runner = new Runner(simulation, runType: typeOfRun); AllJobsCompletedArgs argsOfAllCompletedJobs = null; runner.AllSimulationsCompleted += (sender, e) => { argsOfAllCompletedJobs = e; }; // Run simulations. runner.Run(); // Make sure the expected exception was sent through the all completed jobs event. Assert.AreEqual(argsOfAllCompletedJobs.AllExceptionsThrown.Count, 1); Assert.IsTrue(argsOfAllCompletedJobs.AllExceptionsThrown[0].ToString().Contains("Intentional exception")); database.CloseDatabase(); } }
public void EnsureRunErrorsAreReturned() { foreach (var typeOfRun in runTypes) { // Open an in-memory database. database = new SQLite(); database.OpenDatabase(":memory:", readOnly: false); // Create a simulation and add a datastore. var simulation = new Simulation() { Name = "Sim", FileName = Path.GetTempFileName(), Children = new List <IModel>() { new Clock() { StartDate = new DateTime(1980, 1, 3), EndDate = new DateTime(1980, 1, 4) }, new MockSummary(), new DataStore(database), new MockModelThatThrows() } }; // Run simulations. Runner runner = new Runner(simulation, runType: typeOfRun); var exceptions = runner.Run(); // Make sure an exception is returned. Assert.IsTrue(exceptions[0].ToString().Contains("Intentional exception")); database.CloseDatabase(); } }
public void RunDirectoryOfFiles() { var simulations = new Simulations() { Name = "Simulations", Version = Converter.LatestVersion, Children = new List <IModel>() { new Simulation() { Name = "Sim1", FileName = Path.GetTempFileName(), Children = new List <IModel>() { new Clock() { StartDate = new DateTime(1980, 1, 1), EndDate = new DateTime(1980, 1, 2) }, new Summary() } }, new DataStore(), } }; // Create a temporary directory. var path = Path.Combine(Path.GetTempPath(), "RunDirectoryOfFiles"); if (Directory.Exists(path)) { Directory.Delete(path, true); } Directory.CreateDirectory(path); File.WriteAllText(Path.Combine(path, "Sim1.apsimx"), FileFormat.WriteToString(simulations)); simulations.Children[0].Name = "Sim2"; File.WriteAllText(Path.Combine(path, "Sim2.apsimx"), FileFormat.WriteToString(simulations)); var runner = new Runner(Path.Combine(path, "*.apsimx")); runner.Run(); // Check simulation 1 database database = new SQLite(); database.OpenDatabase(Path.Combine(path, "Sim1.db"), readOnly: true); Assert.IsTrue( Utilities.CreateTable(new string[] { "Message" }, new List <object[]> { new object[] { "Simulation terminated normally" } }) .IsSame(database.ExecuteQuery("SELECT [Message] FROM _Messages"))); database.CloseDatabase(); // Check simulation 2 database database = new SQLite(); database.OpenDatabase(Path.Combine(path, "Sim2.db"), readOnly: true); Assert.IsTrue( Utilities.CreateTable(new string[] { "Message" }, new List <object[]> { new object[] { "Simulation terminated normally" } }) .IsSame(database.ExecuteQuery("SELECT [Message] FROM _Messages"))); database.CloseDatabase(); }
public void EnsureOnlySelectedSimulationsAreRun() { foreach (var typeOfRun in runTypes) { // Open an in-memory database. database = new SQLite(); database.OpenDatabase(":memory:", readOnly: false); // Create a folder of 2 simulations. var folder = new Folder() { Children = new List <IModel>() { new DataStore(database), new Simulation() { Name = "Sim1", FileName = Path.GetTempFileName(), Children = new List <IModel>() { new Clock() { StartDate = new DateTime(1980, 1, 1), EndDate = new DateTime(1980, 1, 2) }, new MockSummary(), new Models.Report() { Name = "Report", VariableNames = new string[] { "[Clock].Today" }, EventNames = new string[] { "[Clock].DoReport" } }, } }, new Simulation() { Name = "Sim2", FileName = Path.GetTempFileName(), Children = new List <IModel>() { new Clock() { StartDate = new DateTime(1980, 1, 3), EndDate = new DateTime(1980, 1, 4) }, new MockSummary(), new Report() { Name = "Report", VariableNames = new string[] { "[Clock].Today" }, EventNames = new string[] { "[Clock].DoReport" } }, } } } }; Runner runner = new Runner(folder, runType: typeOfRun, simulationNamesToRun: new string[] { "Sim1" }); // Run simulations. List <Exception> errors = runner.Run(); Assert.NotNull(errors); Assert.AreEqual(0, errors.Count); // Check that data was written to database. Assert.IsTrue( Utilities.CreateTable(new string[] { "Clock.Today" }, new List <object[]> { new object[] { new DateTime(1980, 01, 01) }, new object[] { new DateTime(1980, 01, 02) } }) .IsSame(database.ExecuteQuery("SELECT [Clock.Today] FROM Report ORDER BY [Clock.Today]"))); database.CloseDatabase(); } }
public void EnsureFolderOfSimulationsRuns() { foreach (var typeOfRun in runTypes) { // Open an in-memory database. database = new SQLite(); database.OpenDatabase(":memory:", readOnly: false); // Create a folder of 2 simulations. var folder = new Folder() { Children = new List <IModel>() { new DataStore(database), new Simulation() { Name = "Sim1", FileName = Path.GetTempFileName(), Children = new List <IModel>() { new Clock() { StartDate = new DateTime(1980, 1, 1), EndDate = new DateTime(1980, 1, 2) }, new MockSummary(), new Models.Report() { Name = "Report", VariableNames = new string[] { "[Clock].Today" }, EventNames = new string[] { "[Clock].DoReport" } }, } }, new Simulation() { Name = "Sim2", FileName = Path.GetTempFileName(), Children = new List <IModel>() { new Clock() { StartDate = new DateTime(1980, 1, 3), EndDate = new DateTime(1980, 1, 4) }, new MockSummary(), new Models.Report() { Name = "Report", VariableNames = new string[] { "[Clock].Today" }, EventNames = new string[] { "[Clock].DoReport" } }, } } } }; Runner runner = new Runner(folder, runType: typeOfRun); // Run simulations. Assert.IsNull(runner.Run()); // Check that data was written to database. Assert.AreEqual(Utilities.TableToStringUsingSQL(database, "SELECT [Clock.Today] FROM Report ORDER BY [Clock.Today]"), $"Clock.Today{Environment.NewLine} 1980-01-01{Environment.NewLine} 1980-01-02{Environment.NewLine} 1980-01-03{Environment.NewLine} 1980-01-04{Environment.NewLine}"); database.CloseDatabase(); } }
public void EnsureFolderOfSimulationsRuns() { foreach (var typeOfRun in runTypes) { // Open an in-memory database. database = new SQLite(); database.OpenDatabase(":memory:", readOnly: false); // Create a folder of 2 simulations. var folder = new Folder() { Children = new List <Model>() { new DataStore(database), new Simulation() { Name = "Sim1", FileName = Path.GetTempFileName(), Children = new List <Model>() { new Clock() { StartDate = new DateTime(1980, 1, 1), EndDate = new DateTime(1980, 1, 2) }, new MockSummary(), new Models.Report.Report() { Name = "Report", VariableNames = new string[] { "[Clock].Today" }, EventNames = new string[] { "[Clock].DoReport" } }, } }, new Simulation() { Name = "Sim2", FileName = Path.GetTempFileName(), Children = new List <Model>() { new Clock() { StartDate = new DateTime(1980, 1, 3), EndDate = new DateTime(1980, 1, 4) }, new MockSummary(), new Models.Report.Report() { Name = "Report", VariableNames = new string[] { "[Clock].Today" }, EventNames = new string[] { "[Clock].DoReport" } }, } } } }; Runner runner = new Runner(folder, runType: typeOfRun); // Ensure number of simulations is correct before any are run. Assert.AreEqual(runner.TotalNumberOfSimulations, 2); Assert.AreEqual(runner.NumberOfSimulationsCompleted, 0); // Run simulations. Assert.IsNull(runner.Run()); // Ensure number of simulations is correct after all simulations are run. Assert.AreEqual(runner.TotalNumberOfSimulations, 2); Assert.AreEqual(runner.NumberOfSimulationsCompleted, 2); Assert.AreEqual(runner.PercentComplete(), 100); // Check that data was written to database. Assert.AreEqual(Utilities.TableToStringUsingSQL(database, "SELECT [Clock.Today] FROM Report ORDER BY [Clock.Today]"), "Clock.Today\r\n" + " 1980-01-01\r\n" + " 1980-01-02\r\n" + " 1980-01-03\r\n" + " 1980-01-04\r\n"); database.CloseDatabase(); } }