Changeset 5404 for branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.Tests/ServiceTests.cs
- Timestamp:
- 02/01/11 15:51:11 (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.Tests/ServiceTests.cs
r5156 r5404 28 28 using HeuristicLab.Services.Hive.Common.ServiceContracts; 29 29 using Microsoft.VisualStudio.TestTools.UnitTesting; 30 using System.Threading; 31 using HeuristicLab.Hive; 32 using HeuristicLab.Services.Hive.Common; 30 33 31 34 namespace HeuristicLab.Services.Hive.Tests { 32 using System.Threading; 33 using HeuristicLab.Hive; 34 using HeuristicLab.Services.Hive.Common; 35 35 36 using DT = HeuristicLab.Services.Hive.Common.DataTransfer; 37 using System.Diagnostics; 36 38 37 39 [TestClass] … … 66 68 Data = PersistenceUtil.Serialize(new MockJob(500, true)) 67 69 }; 70 71 DT.Plugin plugin1 = new DT.Plugin(); 72 plugin1.Name = "Tests.MyPlugin"; 73 plugin1.Version = new Version("1.0.0.0"); 74 plugin1.UserId = Guid.Empty; 75 plugin1.IsLocal = true; 76 plugin1.DateCreated = DateTime.Now; 77 78 DT.PluginData pluginData1 = new DT.PluginData(); 79 pluginData1.PluginId = plugin1.Id; 80 pluginData1.FileName = "Tests.MyPlugin-1.0.dll"; 81 pluginData1.Data = new byte[] { 0, 1, 2, 3, 4, 5 }; 82 83 job.PluginsNeededIds.Add(plugin1.Id); 68 84 69 85 job.Id = service.AddJob(job, jobData, null); … … 77 93 Assert.AreEqual(JobState.Waiting, jobLoaded.JobState); 78 94 Assert.AreEqual(ServiceLocator.Instance.AuthorizationManager.UserId, job.UserId); 95 Assert.IsTrue(job.PluginsNeededIds.SequenceEqual(jobLoaded.PluginsNeededIds)); 79 96 80 97 DT.JobData jobDataLoaded = service.GetJobData(job.Id); … … 101 118 public void TestHeartbeats() { 102 119 var service = GetLocalService(); 120 // check if group already exists and delete 121 var existingSlaveGroup = service.GetSlaveGroups().SingleOrDefault(g => g.Name == "TestGroup"); 122 if (existingSlaveGroup != null) { 123 var slavesToDelete = service.GetSlaves().Where(s => s.ParentResourceId == existingSlaveGroup.Id); 124 foreach (var slave in slavesToDelete) service.DeleteSlave(slave.Id); 125 service.DeleteSlaveGroup(existingSlaveGroup.Id); 126 } 127 103 128 Guid groupId = service.AddSlaveGroup(new SlaveGroup() { Name = "TestGroup", Description = "Used for unit tests" }); 104 129 105 for (int i = 0; i < 2; i++) { 106 Job job = new Job() { 107 CoresNeeded = 1, MemoryNeeded = 0 108 }; 109 JobData jobData = new JobData() { Data = PersistenceUtil.Serialize(new MockJob(500, false)) }; 110 job.Id = service.AddJob(job, jobData, null); 111 jobs.Add(job); 112 } 113 130 // create slaves 114 131 var slaves = new List<DT.Slave>(); 115 132 for (int i = 0; i < 1; i++) { … … 124 141 FreeMemory = 3000 125 142 }; 143 // check if slave with this name already exists and delete 144 var existingSlave = service.GetSlaves().Where(s => s.Name == slave.Name).SingleOrDefault(); 145 if (existingSlave != null) service.DeleteSlave(existingSlave.Id); 146 126 147 slave.Id = service.AddSlave(slave); 127 148 service.AddResourceToGroup(groupId, slave.Id); … … 129 150 } 130 151 152 // create jobs with different group, they should not be assigned 153 existingSlaveGroup = service.GetSlaveGroups().SingleOrDefault(g => g.Name == "DummyGroup"); 154 if (existingSlaveGroup != null) service.DeleteSlaveGroup(existingSlaveGroup.Id); 155 156 Guid dummyGroupId = service.AddSlaveGroup(new SlaveGroup() { Name = "DummyGroup", Description = "Used for unit tests; jobs from this group shall not be calculated" }); 157 // create dummy jobs 158 var dummyJobs = new List<Job>(); 159 for (int i = 0; i < 2; i++) { 160 Job job = new Job() { 161 CoresNeeded = 1, MemoryNeeded = 0 162 }; 163 JobData jobData = new JobData() { Data = PersistenceUtil.Serialize(new MockJob(500, false)) }; 164 job.Id = service.AddJob(job, jobData, new List<Guid> { dummyGroupId }); 165 dummyJobs.Add(job); 166 } 167 168 // create jobs 169 for (int i = 0; i < 2; i++) { 170 Job job = new Job() { 171 CoresNeeded = 1, MemoryNeeded = 0 172 }; 173 JobData jobData = new JobData() { Data = PersistenceUtil.Serialize(new MockJob(500, false)) }; 174 job.Id = service.AddJob(job, jobData, new List<Guid> { groupId }); 175 jobs.Add(job); 176 } 177 178 // send heartbeats 131 179 foreach (var slave in slaves) { 132 180 new Thread(new ParameterizedThreadStart(RunSlaveThread)).Start(slave); 133 181 } 134 182 135 // send heartbeats136 183 IEnumerable<LightweightJob> lightweightJobs; 137 184 do { … … 146 193 } 147 194 148 // delete group 195 // delete groups 149 196 service.DeleteSlaveGroup(groupId); 197 service.DeleteSlaveGroup(dummyGroupId); 150 198 151 199 // delete jobs 152 200 foreach (var job in jobs) { 201 service.DeleteJob(job.Id); 202 } 203 204 // delete dummy jobs 205 foreach (var job in dummyJobs) { 153 206 service.DeleteJob(job.Id); 154 207 } … … 161 214 int freeCores = slave.Cores.Value; 162 215 163 var messages = service.Heartbeat(new Heartbeat() { SlaveId = slave.Id, FreeMemory = 2423, FreeCores = freeCores, JobProgress = new Dictionary<Guid, TimeSpan>() }); 164 if (messages.Count == 0) 165 return; // no more jobs 166 167 Assert.IsTrue(messages.Where(x => x.Message == MessageContainer.MessageType.AbortJob).Count() == 0); 168 Assert.IsTrue(messages.Where(x => x.Message == MessageContainer.MessageType.SayHello).Count() == 0); 169 Assert.IsTrue(messages.Where(x => x.Message == MessageContainer.MessageType.PauseJob).Count() == 0); 170 171 if (messages.Where(x => x.Message == MessageContainer.MessageType.AquireJob).Count() > 0) { 172 Guid jobId = messages.Where(x => x.Message == MessageContainer.MessageType.AquireJob).SingleOrDefault().JobId; 173 service.AquireJob(jobId); 174 Job job = service.GetJob(jobId); 175 JobData jobData = service.GetJobData(jobId); 176 IJob deserializedJob = PersistenceUtil.Deserialize<IJob>(jobData.Data); 177 deserializedJob.Start(); 178 job.JobState = JobState.Finished; 179 jobs.Where(x => x.Id == jobId).Single().JobState = JobState.Finished; 180 jobData.Data = PersistenceUtil.Serialize(deserializedJob); 181 service.UpdateJob(job, jobData); 216 for (int i = 0; i < 10; i++) { 217 218 var messages = service.Heartbeat(new Heartbeat() { SlaveId = slave.Id, FreeMemory = 2423, FreeCores = freeCores, JobProgress = new Dictionary<Guid, TimeSpan>() }); 219 if (messages.Count == 0) { 220 Debug.WriteLine("No job available"); 221 return; // no more jobs 222 } 223 224 Debug.WriteLine("Messages: {0}", string.Join(", ", messages.Select(m => m.Message))); 225 226 Assert.IsTrue(messages.Where(x => x.Message == MessageContainer.MessageType.AbortJob).Count() == 0); 227 Assert.IsTrue(messages.Where(x => x.Message == MessageContainer.MessageType.SayHello).Count() == 0); 228 Assert.IsTrue(messages.Where(x => x.Message == MessageContainer.MessageType.PauseJob).Count() == 0); 229 230 var calculateJobMessage = messages.Where(x => x.Message == MessageContainer.MessageType.CalculateJob).SingleOrDefault(); 231 if (calculateJobMessage != null) { 232 if (!jobs.Select(j => j.Id).Contains(calculateJobMessage.JobId)) 233 Assert.Fail("Got job which was not assigned to the slavegroup"); 234 235 Debug.WriteLine("Job available, calculating"); 236 Job job = service.GetJob(calculateJobMessage.JobId); 237 238 JobData jobData = service.GetJobData(job.Id); 239 IJob deserializedJob = PersistenceUtil.Deserialize<IJob>(jobData.Data); 240 deserializedJob.Start(); 241 job.JobState = JobState.Finished; 242 jobs.Where(x => x.Id == job.Id).Single().JobState = JobState.Finished; 243 jobData.Data = PersistenceUtil.Serialize(deserializedJob); 244 service.UpdateJob(job, jobData); 245 Debug.WriteLine("finished calculating"); 246 } 182 247 } 183 248 }
Note: See TracChangeset
for help on using the changeset viewer.