public void TestProcess_Empty() { Guid jobId = Guid.NewGuid(); using (var db = new ProducerContext()) { var item = db.Sessions.Single(s => s.Id == sessionId); var user = db.Users.Single(u => u.Name == userName); var simulation = db.Simulations.Single(s => s.Name == simulationName); var job = new Turbine.Data.Entities.Job { Id = jobId, Session = item, Create = DateTime.UtcNow, State = "create", User = user, Simulation = simulation }; db.Jobs.Add(job); db.SaveChanges(); } using (var db = new ProducerContext()) { var item = db.Jobs.Single(s => s.Id == jobId); item.Process = new Turbine.Data.Entities.Process { }; db.SaveChanges(); } }
public void TestJob_NoUser() { using (var db = new ProducerContext()) { var item = db.Sessions.Single(s => s.Id == sessionId); var app = db.Applications.Single(a => a.Name == "ACM"); var consumer = new Turbine.Data.Entities.JobConsumer { Id = Guid.NewGuid(), keepalive = DateTime.UtcNow, status = "up", Application = app }; var user = db.Users.Single(u => u.Name == userName); var simulation = db.Simulations.Single(s => s.Name == simulationName); var job = new Turbine.Data.Entities.Job { Id = Guid.NewGuid(), Session = item, Create = DateTime.UtcNow, State = "create", //User = user, Consumer = consumer, Simulation = simulation }; db.Jobs.Add(job); try { db.SaveChanges(); } catch (System.Data.Entity.Validation.DbEntityValidationException e) { foreach (var eve in e.EntityValidationErrors) { Console.WriteLine("Entity of type \"{0}\" in state \"{1}\" has the following validation errors:", eve.Entry.Entity.GetType().Name, eve.Entry.State); foreach (var ve in eve.ValidationErrors) { Console.WriteLine("- Property: \"{0}\", Error: \"{1}\"", ve.PropertyName, ve.ErrorMessage); } } throw; } } }
public void TestProcess_Full() { Guid jobId = Guid.NewGuid(); using (var db = new ProducerContext()) { var item = db.Sessions.Single(s => s.Id == sessionId); var user = db.Users.Single(u => u.Name == userName); var simulation = db.Simulations.Single(s => s.Name == simulationName); var job = new Turbine.Data.Entities.Job { Id = jobId, Session = item, Create = DateTime.UtcNow, State = "create", User = user, Simulation = simulation }; db.Jobs.Add(job); db.SaveChanges(); } using (var db = new ProducerContext()) { var item = db.Jobs.Single(s => s.Id == jobId); item.Process = new Turbine.Data.Entities.Process { Input = "Input string", Output = "Output string", WorkingDir = "MYDIR", Status = -1, Stdin = "", Stderr = "", Stdout = "" }; db.SaveChanges(); } }
private static Dictionary <string, object> GetJobRepresentation(Turbine.Data.Entities.Job entity, bool verbose) { var dict = new Dictionary <string, Object>(); string input = entity.Process.Input; IDictionary <string, Object> inputDict = new Dictionary <string, Object>() { }; if (input != null) { inputDict = Newtonsoft.Json.JsonConvert.DeserializeObject <Dictionary <string, Object> >(input); } string output = entity.Process.Output; IDictionary <string, Object> outputDict = null; if (output != null) { outputDict = Newtonsoft.Json.JsonConvert.DeserializeObject <Dictionary <string, Object> >(output); } string[] msg_array = null; if (verbose) { msg_array = entity.Messages.Select <Turbine.Data.Entities.Message, string>(s => s.Value).ToArray <string>(); } /* * Serialize.ProcessErrorList errorList = new Serialize.ProcessErrorList(); * * foreach (var error in entity.Process.Errors) * { * var pe = new Serialize.ProcessError(); * pe.Error = error.Error; * pe.Type = error.Type; * pe.Name = error.Name; * errorList.Add(pe); * } */ ProcessErrorList errorList = new ProcessErrorList(); foreach (var error in entity.Process.Error) { var pe = new ProcessError() { Error = error.Error, Name = error.Name, Type = error.Type }; errorList.Add(pe); } int status; try { status = (int)entity.Process.Status; } catch (Exception) { status = -1; } dict["Id"] = entity.Count; dict["Guid"] = entity.Id; dict["Simulation"] = entity.Simulation.Name; dict["State"] = entity.State; dict["Messages"] = msg_array; dict["Input"] = inputDict; dict["Output"] = outputDict; dict["Errors"] = errorList; dict["Status"] = status; dict["Session"] = entity.Session.Id; dict["Initialize"] = entity.Initialize; dict["Reset"] = entity.Reset; dict["Visible"] = entity.Visible; if (entity.Consumer != null) { dict["Consumer"] = entity.Consumer.Id; } if (entity.Create != null) { dict["Create"] = ConvertDateTime((DateTime)entity.Create); } if (entity.Submit != null) { dict["Submit"] = ConvertDateTime((DateTime)entity.Submit); } if (entity.Setup != null) { dict["Setup"] = ConvertDateTime((DateTime)entity.Setup); } if (entity.Running != null) { dict["Running"] = ConvertDateTime((DateTime)entity.Running); } if (entity.Finished != null) { dict["Finished"] = ConvertDateTime((DateTime)entity.Finished); } return(dict); }
public static void Initialize(TestContext context) { BaseDatabaseTest.CleanUpDatabase(); using (var db = new ProducerContext()) { var app = new Turbine.Data.Entities.Application { Name = "ACM", Version = "7.3" }; db.Applications.Add(app); var user = new Turbine.Data.Entities.User { Name = userName }; db.Users.Add(user); db.SaveChanges(); } using (var db = new ProducerContext()) { var item = db.Applications.Single(s => s.Name == "ACM"); item.InputFileTypes.Add(new Turbine.Data.Entities.InputFileType { Id = Guid.NewGuid(), Name = "configuration", Required = true, Type = "plain/text" }); item.InputFileTypes.Add(new Turbine.Data.Entities.InputFileType { Id = Guid.NewGuid(), Name = "aspenfile", Required = true, Type = "plain/text" }); db.SaveChanges(); } using (var db = new ProducerContext()) { var app = db.Applications.Single(s => s.Name == "ACM"); var user = db.Users.Single(u => u.Name == userName); var sim = new Turbine.Data.Entities.Simulation { Id = Guid.NewGuid(), Application = app, Create = DateTime.UtcNow, Name = simulationName, Update = DateTime.UtcNow, User = user }; db.Simulations.Add(sim); db.SaveChanges(); } using (var db = new ProducerContext()) { var item = new Turbine.Data.Entities.Session { Id = sessionId, Description = "testing simulation", Create = DateTime.UtcNow }; db.Sessions.Add(item); db.SaveChanges(); } List <Turbine.Data.Entities.Job> jobsList = new List <Turbine.Data.Entities.Job>(); // Session using (var db = new ProducerContext()) { var item = db.Sessions.Single(s => s.Id == sessionId); var user = db.Users.Single(u => u.Name == userName); var simulation = db.Simulations.Single(s => s.Name == simulationName); for (int i = 0; i < 10; i++) { var job = new Turbine.Data.Entities.Job { Id = Guid.NewGuid(), Session = item, Create = DateTime.UtcNow, State = "success", User = user, Simulation = simulation }; jobsList.Add(job); db.Jobs.Add(job); } db.SaveChanges(); } using (var db = new ProducerContext()) { var session = db.Sessions.Single(s => s.Id == sessionId); var item = new Turbine.Data.Entities.Generator { Id = generatorId, Page = 1, Session = session, Create = DateTime.UtcNow }; db.Generators.Add(item); db.SaveChanges(); } using (var db = new ProducerContext()) { var generator = db.Generators.Single(g => g.Id == generatorId); var session = db.Sessions.Single(s => s.Id == sessionId); Debug.WriteLine("Generator Page num: " + generator.Page); foreach (var job in session.Jobs) { var item = new Turbine.Data.Entities.GeneratorJob { Id = Guid.NewGuid(), Page = 2, Generator = generator, Job = job }; db.GeneratorJobs.Add(item); } db.SaveChanges(); } }
public void TestGenerator_OtherJobs() { using (var db = new ProducerContext()) { var item = db.Sessions.Single(s => s.Id == sessionId); var user = db.Users.Single(u => u.Name == userName); var simulation = db.Simulations.Single(s => s.Name == simulationName); for (int i = 0; i < 10; i++) { var job = new Turbine.Data.Entities.Job { Id = Guid.NewGuid(), Session = item, Create = DateTime.UtcNow, State = "error", User = user, Simulation = simulation }; db.Jobs.Add(job); } db.SaveChanges(); } using (var db = new ProducerContext()) { // Getting Jobs that are not in the Generators table // By doing a left join and getting all the nulls var jobs = from j in db.Jobs join g in db.GeneratorJobs on j.Id equals g.JobId into joinedtable from x in joinedtable.DefaultIfEmpty() where x.JobId == null select j; foreach (var job in jobs) { Debug.WriteLine("Job: " + job.Count + " is not in Generator" , "GeneratorClassTest.TestGenerator_Create"); } } // Add Another generator Guid generatorId2 = Guid.NewGuid(); using (var db = new ProducerContext()) { var session = db.Sessions.Single(s => s.Id == sessionId); var item = new Turbine.Data.Entities.Generator { Id = generatorId2, Page = 1, Session = session, Create = DateTime.UtcNow }; db.Generators.Add(item); db.SaveChanges(); } using (var db = new ProducerContext()) { var item = db.Sessions.Single(s => s.Id == sessionId); var user = db.Users.Single(u => u.Name == userName); var simulation = db.Simulations.Single(s => s.Name == simulationName); for (int i = 0; i < 10; i++) { var job = new Turbine.Data.Entities.Job { Id = Guid.NewGuid(), Session = item, Create = DateTime.UtcNow, State = "terminate", User = user, Simulation = simulation }; db.Jobs.Add(job); } db.SaveChanges(); } using (var db = new ProducerContext()) { var generator = db.Generators.Single(g => g.Id == generatorId2); var session = db.Sessions.Single(s => s.Id == sessionId); Debug.WriteLine("Generator Page num: " + generator.Page); foreach (var job in session.Jobs.Where(j => j.Count > 20)) { var item = new Turbine.Data.Entities.GeneratorJob { Id = Guid.NewGuid(), Page = 2, Generator = generator, Job = job }; db.GeneratorJobs.Add(item); } db.SaveChanges(); } using (var db = new ProducerContext()) { // Getting Jobs that are not in the Generators table // By doing a left join and getting all the nulls /*var jobs = from j in db.Jobs * join g in db.GeneratorJobs.Where(y => y.GeneratorId == generatorId2) on j.Id equals g.JobId into joinedtable * from x in joinedtable.DefaultIfEmpty() * where x.JobId == null * select j;*/ var jobs = from j in db.Jobs join g in db.GeneratorJobs.Where(y => y.GeneratorId == generatorId2) on j.Id equals g.JobId into joinedtable from x in joinedtable.DefaultIfEmpty() where x.JobId == null && j.SessionId == sessionId && (j.State == "success" || j.State == "error" || j.State == "terminate") select j; foreach (var job in db.Jobs.OrderBy(j => j.Count)) { Debug.WriteLine("Job: " + job.Count , "GeneratorClassTest.TestGenerator_Create"); } foreach (var job in jobs) { Debug.WriteLine("Job: " + job.Count + " is not in Generator" , "GeneratorClassTest.TestGenerator_Create"); } } }
//[DeploymentItem(@"models\Hybrid_v0.51_rev1.1_UQ_0809.acmf")] //[DeploymentItem(@"models\Hybrid_v0.51_rev1.1_UQ_0809_sinter.json")] public void TestApplication_Write() { //AppDomain.CurrentDomain.SetData("DataDirectory", // Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData)); var guid = Guid.NewGuid(); var simulationName = "Test"; using (var db = new ProducerContext()) { var app = new Turbine.Data.Entities.Application { Name = "ACM", Version = "7.3" }; db.Applications.Add(app); var user = new Turbine.Data.Entities.User { Name = "testuser" }; db.Users.Add(user); db.SaveChanges(); } using (var db = new ProducerContext()) { var item = db.Applications.Single(s => s.Name == "ACM"); item.InputFileTypes.Add(new Turbine.Data.Entities.InputFileType { Id = Guid.NewGuid(), Name = "configuration", Required = true, Type = "plain/text" }); item.InputFileTypes.Add(new Turbine.Data.Entities.InputFileType { Id = Guid.NewGuid(), Name = "aspenfile", Required = true, Type = "plain/text" }); db.SaveChanges(); } using (var db = new ProducerContext()) { var app = db.Applications.Single(s => s.Name == "ACM"); var user = db.Users.Single(u => u.Name == username); var sim = new Turbine.Data.Entities.Simulation { Id = Guid.NewGuid(), Application = app, Create = DateTime.UtcNow, Name = simulationName, Update = DateTime.UtcNow, User = user }; db.Simulations.Add(sim); db.SaveChanges(); } byte[] dataACMF; using (var fstream = File.Open(@"models\Hybrid_v0.51_rev1.1_UQ_0809.acmf", FileMode.Open)) { using (var ms = new MemoryStream()) { fstream.CopyTo(ms); dataACMF = ms.ToArray(); } } byte[] dataConfig; using (var fstream = File.Open(@"models\Hybrid_v0.51_rev1.1_UQ_0809_sinter.json", FileMode.Open)) { using (var ms = new MemoryStream()) { fstream.CopyTo(ms); dataConfig = ms.ToArray(); } } using (var db = new ProducerContext()) { var sim = db.Simulations.Single(s => s.Name == simulationName); Console.WriteLine("App: " + sim.Application.Name); Console.WriteLine("Sim: " + sim.Name); foreach (var i in sim.Application.InputFileTypes) { Console.WriteLine("IT: " + i.Name); } var it = sim.Application.InputFileTypes.Single(s => s.Name == "aspenfile"); var item = new Turbine.Data.Entities.SimulationStagedInput { //InputFileType = it, Simulation = sim, Content = dataACMF, Hash = "", Id = Guid.NewGuid(), Name = it.Name }; sim.SimulationStagedInputs.Add(item); it = sim.Application.InputFileTypes.Single(s => s.Name == "configuration"); item = new Turbine.Data.Entities.SimulationStagedInput { //InputFileType = it, Simulation = sim, Content = dataConfig, Hash = "", Id = Guid.NewGuid(), Name = it.Name }; sim.SimulationStagedInputs.Add(item); db.SaveChanges(); } // Session var sessionId = Guid.NewGuid(); using (var db = new ProducerContext()) { var item = new Turbine.Data.Entities.Session { Id = sessionId, Create = DateTime.UtcNow, Description = "testing simulation" }; db.Sessions.Add(item); db.SaveChanges(); } var jobId = Guid.NewGuid(); var workingDir = String.Format("WorkingDir_{0}", Guid.NewGuid()); using (var db = new ProducerContext()) { var item = db.Sessions.Single(s => s.Id == sessionId); var user = db.Users.Single(u => u.Name == username); var simulation = db.Simulations.Single(s => s.Name == simulationName); var job = new Turbine.Data.Entities.Job { Id = jobId, Session = item, Create = DateTime.UtcNow, Setup = DateTime.UtcNow, State = "setup", User = user, Simulation = simulation, Process = new Turbine.Data.Entities.Process { Input = "{}", WorkingDir = workingDir }, }; var msg = new Turbine.Data.Entities.Message { Id = Guid.NewGuid(), Create = DateTime.UtcNow, Value = "Test Job" }; job.Messages.Add(msg); db.Jobs.Add(job); db.SaveChanges(); } using (var db = new ProducerContext()) { var job = db.Jobs.Single(j => j.Id == jobId); foreach (var f in job.Simulation.SimulationStagedInputs) { job.StagedInputFiles.Add(new Turbine.Data.Entities.StagedInputFile { Content = f.Content, Name = f.Name }); } } // READ JOB Save to Filesystem using (var db = new ProducerContext()) { var job = db.Jobs.Single(j => j.State == "setup"); Assert.AreEqual(job.Id, jobId); var dinfo = Directory.CreateDirectory(job.Process.WorkingDir); Console.WriteLine("Working Directory: " + dinfo.FullName); foreach (var f in job.StagedInputFiles) { Console.WriteLine("Save File: " + f.Name); var fd = File.Create(Path.Combine(dinfo.FullName, f.Name)); fd.Write(f.Content, 0, f.Content.Length); fd.Close(); } } }
public void TestProcess_FullProcessErrors() { Guid jobId = Guid.NewGuid(); using (var db = new ProducerContext()) { var item = db.Sessions.Single(s => s.Id == sessionId); var user = db.Users.Single(u => u.Name == userName); var simulation = db.Simulations.Single(s => s.Name == simulationName); var job = new Turbine.Data.Entities.Job { Id = jobId, Session = item, Create = DateTime.UtcNow, State = "create", User = user, Simulation = simulation }; db.Jobs.Add(job); db.SaveChanges(); } using (var db = new ProducerContext()) { var item = db.Jobs.Single(s => s.Id == jobId); item.Process = new Turbine.Data.Entities.Process { Input = "Input string", Output = "Output string", WorkingDir = "MYDIR", Status = -1, Stdin = "", Stderr = "", Stdout = "" }; db.SaveChanges(); } using (var db = new ProducerContext()) { var item = db.Jobs.Single(s => s.Id == jobId); item.Process.Error.Add(new Turbine.Data.Entities.ProcessError { Error = "ERROR1", Type = "SystemError", Name = "Bad Working Directory", Id = Guid.NewGuid() }); db.SaveChanges(); } using (var db = new ProducerContext()) { var item = db.Jobs.Single(s => s.Id == jobId); item.Process.Error.Add(new Turbine.Data.Entities.ProcessError { Error = "ERROR2", Type = "SystemError", Name = "Bad File", Id = Guid.NewGuid() }); db.SaveChanges(); } using (var db = new ProducerContext()) { var item = db.Jobs.Single(s => s.Id == jobId); Assert.IsTrue(item.Process.Error.Count == 2); } }
public void TestJob_UpdateRunning() { Guid jobId = Guid.NewGuid(); Guid consumerId = Guid.NewGuid(); string createMsg = "Created new Job"; string submitMsg = "Job Moved to Submit"; string setupMsg = "Job Moved to Setup"; string runMsg = "Job Moved to Running"; using (var db = new ProducerContext()) { var item = db.Sessions.Single(s => s.Id == sessionId); var user = db.Users.Single(u => u.Name == userName); var simulation = db.Simulations.Single(s => s.Name == simulationName); var job = new Turbine.Data.Entities.Job { Id = jobId, Session = item, Create = DateTime.UtcNow, State = "create", User = user, Simulation = simulation }; var msg = new Turbine.Data.Entities.Message { Id = Guid.NewGuid(), Create = DateTime.UtcNow, Value = createMsg }; job.Messages.Add(msg); db.Jobs.Add(job); db.SaveChanges(); } using (var db = new ProducerContext()) { var app = db.Applications.Single(a => a.Name == "ACM"); var consumer = new Turbine.Data.Entities.JobConsumer { Id = consumerId, keepalive = DateTime.UtcNow, status = "up", Application = app }; db.Consumers.Add(consumer); db.SaveChanges(); } using (var db = new ProducerContext()) { var job = db.Jobs.Single(j => j.Id == jobId); job.State = "submit"; job.Submit = DateTime.UtcNow; job.ConsumerId = consumerId; Assert.IsFalse(job.Initialize); Assert.IsFalse(job.Reset); var msg = new Turbine.Data.Entities.Message { Id = Guid.NewGuid(), Create = DateTime.UtcNow, Value = submitMsg }; job.Messages.Add(msg); try { db.SaveChanges(); } catch (System.Data.Entity.Validation.DbEntityValidationException e) { foreach (var eve in e.EntityValidationErrors) { Console.WriteLine("Entity of type \"{0}\" in state \"{1}\" has the following validation errors:", eve.Entry.Entity.GetType().Name, eve.Entry.State); foreach (var ve in eve.ValidationErrors) { Console.WriteLine("- Property: \"{0}\", Error: \"{1}\"", ve.PropertyName, ve.ErrorMessage); } } throw; } } using (var db = new ProducerContext()) { var job = db.Jobs.Single(j => j.Id == jobId); job.State = "setup"; job.Setup = DateTime.UtcNow; var msg = new Turbine.Data.Entities.Message { Id = Guid.NewGuid(), Create = DateTime.UtcNow, Value = setupMsg }; job.Messages.Add(msg); try { db.SaveChanges(); } catch (System.Data.Entity.Validation.DbEntityValidationException e) { foreach (var eve in e.EntityValidationErrors) { Console.WriteLine("Entity of type \"{0}\" in state \"{1}\" has the following validation errors:", eve.Entry.Entity.GetType().Name, eve.Entry.State); foreach (var ve in eve.ValidationErrors) { Console.WriteLine("- Property: \"{0}\", Error: \"{1}\"", ve.PropertyName, ve.ErrorMessage); } } throw; } } using (var db = new ProducerContext()) { var job = db.Jobs.Single(j => j.Id == jobId); job.State = "running"; job.Running = DateTime.UtcNow; var msg = new Turbine.Data.Entities.Message { Id = Guid.NewGuid(), Create = DateTime.UtcNow, Value = runMsg }; job.Messages.Add(msg); job.Process = new Turbine.Data.Entities.Process { }; try { db.SaveChanges(); } catch (System.Data.Entity.Validation.DbEntityValidationException e) { foreach (var eve in e.EntityValidationErrors) { Console.WriteLine("Entity of type \"{0}\" in state \"{1}\" has the following validation errors:", eve.Entry.Entity.GetType().Name, eve.Entry.State); foreach (var ve in eve.ValidationErrors) { Console.WriteLine("- Property: \"{0}\", Error: \"{1}\"", ve.PropertyName, ve.ErrorMessage); } } throw; } } using (var db = new ProducerContext()) { var job = db.Jobs.Single(j => j.Id == jobId); Assert.IsTrue(job.Messages.Count == 4); Assert.AreEqual <string>(job.Messages.ElementAt(0).Value, createMsg); Assert.AreEqual <string>(job.Messages.ElementAt(1).Value, submitMsg); Assert.AreEqual <string>(job.Messages.ElementAt(2).Value, setupMsg); Assert.AreEqual <string>(job.Messages.ElementAt(3).Value, runMsg); } }