Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
06/06/11 17:49:27 (13 years ago)
Author:
cneumuel
Message:

#1233

  • added consideration of appointments in heartbeats
  • code cleanup
File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.Tests/ServiceTests.cs

    r6357 r6369  
    105105      job.HiveExperimentId = experiment.Id;
    106106      job.Id = service.AddJob(job, jobData, new List<Guid> { slave.Id });
    107      
     107
    108108      // test job
    109109      DT.Job jobLoaded = service.GetJob(job.Id);
     
    153153      Assert.AreEqual(1, jobsBySlave.Count());
    154154      Assert.AreEqual(job.Id, jobsBySlave.Single().Id);
    155      
     155
    156156      // set it to finished
    157157      service.UpdateJobState(jobLoaded.Id, JobState.Finished, slave.Id, null, null);
    158158
    159       // test if the job is returned for the resource
     159      // test if the job is returned for the resource (it should not be)
    160160      var jobsBySlave2 = service.GetJobsByResourceId(slave.Id);
    161161      Assert.AreEqual(0, jobsBySlave2.Count());
     162
     163      // set job waiting again
     164      service.UpdateJobState(job.Id, JobState.Waiting, null, null, string.Empty);
     165
     166      // get job again
     167      actions = service.Heartbeat(new Heartbeat() { SlaveId = slave.Id, AssignJob = true, FreeCores = 4, FreeMemory = 1024, JobProgress = new Dictionary<Guid, TimeSpan>() });
     168      Assert.AreEqual(1, actions.Count);
     169      Assert.AreEqual(MessageContainer.MessageType.CalculateJob, actions[0].Message);
     170      Assert.AreEqual(job.Id, actions[0].JobId);
     171
     172      // create appointment which should make slave unavailable for calculation
     173      Guid appointmentId = service.AddAppointment(new Appointment { ResourceId = slave.Id, StartDate = DateTime.Now - TimeSpan.FromMinutes(1), EndDate = DateTime.Now + TimeSpan.FromMinutes(1), Recurring = false });
     174
     175      progress.Clear();
     176      progress.Add(job.Id, new TimeSpan(1, 5, 10, 20, 30));
     177      actions = service.Heartbeat(new Heartbeat() { SlaveId = slave.Id, AssignJob = true, FreeCores = 4, FreeMemory = 1024, JobProgress = new Dictionary<Guid, TimeSpan>() });
     178      Assert.AreEqual(1, actions.Count);
     179      Assert.AreEqual(MessageContainer.MessageType.PauseAll, actions[0].Message);
     180      Assert.AreEqual(Guid.Empty, actions[0].JobId);
     181
     182      service.DeleteAppointment(appointmentId);
    162183
    163184      // delete
     
    177198    }
    178199
    179     List<DT.Job> jobs = new List<DT.Job>();
    180    
    181200    [TestMethod]
    182201    public void TestParentJobs() {
     
    282301      service.DeleteSlave(slave.Id);
    283302    }
    284 
    285     //[TestMethod]
    286     //public void TestHeartbeats() {
    287     //  var service = GetLocalService();
    288     //  // check if group already exists and delete
    289     //  var existingSlaveGroup = service.GetSlaveGroups().SingleOrDefault(g => g.Name == "TestGroup");
    290     //  if (existingSlaveGroup != null) {
    291     //    var slavesToDelete = service.GetSlaves().Where(s => s.ParentResourceId == existingSlaveGroup.Id);
    292     //    foreach (var slave in slavesToDelete) service.DeleteSlave(slave.Id);
    293     //    service.DeleteSlaveGroup(existingSlaveGroup.Id);
    294     //  }
    295 
    296     //  Guid groupId = service.AddSlaveGroup(new SlaveGroup() { Name = "TestGroup", Description = "Used for unit tests" });
    297 
    298     //  // create slaves
    299     //  var slaves = new List<DT.Slave>();
    300     //  for (int i = 0; i < 1; i++) {
    301     //    DT.Slave slave = new DT.Slave() {
    302     //      Cores = 2,
    303     //      Memory = 4096,
    304     //      Name = "Slave " + i,
    305     //      IsAllowedToCalculate = true,
    306     //      SlaveState = DT.SlaveState.Idle,
    307     //      CpuSpeed = 2800,
    308     //      FreeCores = 2,
    309     //      FreeMemory = 3000
    310     //    };
    311     //    // check if slave with this name already exists and delete
    312     //    var existingSlave = service.GetSlaves().Where(s => s.Name == slave.Name).SingleOrDefault();
    313     //    if (existingSlave != null) service.DeleteSlave(existingSlave.Id);
    314 
    315     //    slave.Id = service.AddSlave(slave);
    316     //    service.AddResourceToGroup(groupId, slave.Id);
    317     //    slaves.Add(slave);
    318     //  }
    319 
    320     //  // create jobs with different group, they should not be assigned
    321     //  existingSlaveGroup = service.GetSlaveGroups().SingleOrDefault(g => g.Name == "DummyGroup");
    322     //  if (existingSlaveGroup != null) service.DeleteSlaveGroup(existingSlaveGroup.Id);
    323 
    324     //  Guid dummyGroupId = service.AddSlaveGroup(new SlaveGroup() { Name = "DummyGroup", Description = "Used for unit tests; jobs from this group shall not be calculated" });
    325     //  // create dummy jobs
    326     //  var dummyJobs = new List<Job>();
    327     //  for (int i = 0; i < 2; i++) {
    328     //    Job job = new Job() {
    329     //      CoresNeeded = 1, MemoryNeeded = 0
    330     //    };
    331     //    JobData jobData = new JobData() { Data = PersistenceUtil.Serialize(new MockJob(500, false)) };
    332     //    job.Id = service.AddJob(job, jobData, new List<Guid> { dummyGroupId });
    333     //    dummyJobs.Add(job);
    334     //  }
    335 
    336     //  // create jobs
    337     //  for (int i = 0; i < 2; i++) {
    338     //    Job job = new Job() {
    339     //      CoresNeeded = 1, MemoryNeeded = 0
    340     //    };
    341     //    JobData jobData = new JobData() { Data = PersistenceUtil.Serialize(new MockJob(500, false)) };
    342     //    job.Id = service.AddJob(job, jobData, new List<Guid> { groupId });
    343     //    jobs.Add(job);
    344     //  }
    345 
    346     //  // send heartbeats
    347     //  foreach (var slave in slaves) {
    348     //    new Thread(new ParameterizedThreadStart(RunSlaveThread)).Start(slave);
    349     //  }
    350 
    351     //  IEnumerable<LightweightJob> lightweightJobs;
    352     //  do {
    353     //    Thread.Sleep(500);
    354     //    lightweightJobs = service.GetLightweightJobs(jobs.Select(x => x.Id));
    355     //  } while (!lightweightJobs.All(x => x.State == JobState.Finished));
    356 
    357     //  // delete slaves
    358     //  foreach (var slave in slaves) {
    359     //    service.DeleteSlave(slave.Id);
    360     //    Assert.AreEqual(null, service.GetSlave(slave.Id));
    361     //  }
    362 
    363     //  // delete groups
    364     //  service.DeleteSlaveGroup(groupId);
    365     //  service.DeleteSlaveGroup(dummyGroupId);
    366 
    367     //  // delete jobs
    368     //  foreach (var job in jobs) {
    369     //    service.DeleteJob(job.Id);
    370     //  }
    371 
    372     //  // delete dummy jobs
    373     //  foreach (var job in dummyJobs) {
    374     //    service.DeleteJob(job.Id);
    375     //  }
    376     //}
    377 
    378     //public void RunSlaveThread(object slaveobj) {
    379     //  try {
    380     //    var service = GetLocalService();
    381     //    Slave slave = (Slave)slaveobj;
    382     //    int freeCores = slave.Cores.Value;
    383 
    384     //    for (int i = 0; i < 10; i++) {
    385 
    386     //      var messages = service.Heartbeat(new Heartbeat() { SlaveId = slave.Id, FreeMemory = 2423, FreeCores = freeCores, JobProgress = new Dictionary<Guid, TimeSpan>() });
    387     //      if (messages.Count == 0) {
    388     //        Debug.WriteLine("No job available");
    389     //        return; // no more jobs
    390     //      }
    391 
    392     //      Debug.WriteLine("Messages: {0}", string.Join(", ", messages.Select(m => m.Message)));
    393 
    394     //      Assert.IsTrue(messages.Where(x => x.Message == MessageContainer.MessageType.AbortJob).Count() == 0);
    395     //      Assert.IsTrue(messages.Where(x => x.Message == MessageContainer.MessageType.SayHello).Count() == 0);
    396     //      Assert.IsTrue(messages.Where(x => x.Message == MessageContainer.MessageType.PauseJob).Count() == 0);
    397 
    398     //      var calculateJobMessage = messages.Where(x => x.Message == MessageContainer.MessageType.CalculateJob).SingleOrDefault();
    399     //      if (calculateJobMessage != null) {
    400     //        if (!jobs.Select(j => j.Id).Contains(calculateJobMessage.JobId))
    401     //          Assert.Fail("Got job which was not assigned to the slavegroup");
    402 
    403     //        Debug.WriteLine("Job available, calculating");
    404     //        Job job = service.GetJob(calculateJobMessage.JobId);
    405 
    406     //        JobData jobData = service.GetJobData(job.Id);
    407     //        IJob deserializedJob = PersistenceUtil.Deserialize<IJob>(jobData.Data);
    408     //        deserializedJob.Start();
    409     //        job.SetState(JobState.Finished);
    410     //        jobs.Where(x => x.Id == job.Id).Single().SetState(JobState.Finished);
    411     //        jobData.Data = PersistenceUtil.Serialize(deserializedJob);
    412     //        service.UpdateJobData(job, jobData);
    413     //        Debug.WriteLine("finished calculating");
    414     //      }
    415     //    }
    416     //  }
    417     //  catch (Exception e) {
    418     //    Assert.Fail(e.Message, e);
    419     //  }
    420     //}
    421303  }
    422304}
Note: See TracChangeset for help on using the changeset viewer.