Beispiel #1
0
        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);
        }
Beispiel #2
0
        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);
        }
Beispiel #3
0
 /// <summary>Close the database.</summary>
 public void Close()
 {
     if (connection != null)
     {
         connection.CloseDatabase();
         connection = null;
     }
 }
Beispiel #4
0
        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();
            }
        }
Beispiel #5
0
        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();
            }
        }
Beispiel #6
0
        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();
            }
        }
Beispiel #7
0
        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();
            }
        }
Beispiel #8
0
        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();
            }
        }
Beispiel #9
0
        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();
            }
        }
Beispiel #10
0
        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();
            }
        }
Beispiel #11
0
        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();
        }
Beispiel #12
0
        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();
            }
        }
Beispiel #13
0
        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();
            }
        }
Beispiel #14
0
        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();
            }
        }