Changeset 6369 for branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.Tests/ServiceTests.cs
- Timestamp:
- 06/06/11 17:49:27 (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.Tests/ServiceTests.cs
r6357 r6369 105 105 job.HiveExperimentId = experiment.Id; 106 106 job.Id = service.AddJob(job, jobData, new List<Guid> { slave.Id }); 107 107 108 108 // test job 109 109 DT.Job jobLoaded = service.GetJob(job.Id); … … 153 153 Assert.AreEqual(1, jobsBySlave.Count()); 154 154 Assert.AreEqual(job.Id, jobsBySlave.Single().Id); 155 155 156 156 // set it to finished 157 157 service.UpdateJobState(jobLoaded.Id, JobState.Finished, slave.Id, null, null); 158 158 159 // test if the job is returned for the resource 159 // test if the job is returned for the resource (it should not be) 160 160 var jobsBySlave2 = service.GetJobsByResourceId(slave.Id); 161 161 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); 162 183 163 184 // delete … … 177 198 } 178 199 179 List<DT.Job> jobs = new List<DT.Job>();180 181 200 [TestMethod] 182 201 public void TestParentJobs() { … … 282 301 service.DeleteSlave(slave.Id); 283 302 } 284 285 //[TestMethod]286 //public void TestHeartbeats() {287 // var service = GetLocalService();288 // // check if group already exists and delete289 // 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 slaves299 // 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 = 3000310 // };311 // // check if slave with this name already exists and delete312 // 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 assigned321 // 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 jobs326 // var dummyJobs = new List<Job>();327 // for (int i = 0; i < 2; i++) {328 // Job job = new Job() {329 // CoresNeeded = 1, MemoryNeeded = 0330 // };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 jobs337 // for (int i = 0; i < 2; i++) {338 // Job job = new Job() {339 // CoresNeeded = 1, MemoryNeeded = 0340 // };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 heartbeats347 // 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 slaves358 // foreach (var slave in slaves) {359 // service.DeleteSlave(slave.Id);360 // Assert.AreEqual(null, service.GetSlave(slave.Id));361 // }362 363 // // delete groups364 // service.DeleteSlaveGroup(groupId);365 // service.DeleteSlaveGroup(dummyGroupId);366 367 // // delete jobs368 // foreach (var job in jobs) {369 // service.DeleteJob(job.Id);370 // }371 372 // // delete dummy jobs373 // 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 jobs390 // }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 //}421 303 } 422 304 }
Note: See TracChangeset
for help on using the changeset viewer.