//[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 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); } }