Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
02/17/11 14:47:56 (13 years ago)
Author:
cneumuel
Message:

#1233

  • added StateLog to log state transitions of hive jobs
  • added permissions to hive experiments (in data access layer, no UI for that yet)
  • extended unit tests
Location:
branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.Tests
Files:
2 edited

Legend:

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

    r5405 r5511  
    11using System;
    2 using System.Text;
    3 using System.Collections.Generic;
    42using System.Linq;
    5 using Microsoft.VisualStudio.TestTools.UnitTesting;
    63using HeuristicLab.Services.Hive.Common.DataTransfer;
    74using HeuristicLab.Services.Hive.Common.ServiceContracts;
    8 using HeuristicLab.Clients.Hive.Slave.Tests;
    9 using HeuristicLab.Clients.Hive;
    105using HeuristicLab.Services.Hive.DataAccess;
     6using Microsoft.VisualStudio.TestTools.UnitTesting;
    117
    128namespace HeuristicLab.Services.Hive.Tests {
    13   using DA = HeuristicLab.Services.Hive.DataAccess;
    149  using DT = HeuristicLab.Services.Hive.Common.DataTransfer;
    1510
     
    3227     
    3328      DT.Job job1 = new DT.Job();
    34       job1.DateCreated = DateTime.Now;
     29      job1.SetState(JobState.Offline, Guid.NewGuid());
    3530
    3631      DT.Plugin plugin1 = new DT.Plugin();
     
    5752      Assert.AreEqual(job1.Id, job1loaded.Id);
    5853      Assert.AreEqual(job1.CoresNeeded, job1loaded.CoresNeeded);
    59       Assert.AreEqual(null, job1loaded.DateCalculated);
    6054      Assert.AreEqual(job1.DateCreated.ToString(), job1loaded.DateCreated.ToString());
    6155      Assert.AreEqual(null, job1loaded.DateFinished);
    6256      Assert.IsTrue(job1.PluginsNeededIds.SequenceEqual(job1loaded.PluginsNeededIds));
    63      
     57      Assert.AreEqual(job1.StateLog.Count, job1loaded.StateLog.Count);
     58      for (int i = 0; i < job1.StateLog.Count; i++) {
     59        Assert.AreEqual(job1.Id, job1loaded.StateLog[i].JobId);
     60        Assert.AreEqual(job1.StateLog[i].State, job1loaded.StateLog[i].State);
     61        Assert.AreEqual(job1.StateLog[i].SlaveId, job1loaded.StateLog[i].SlaveId);
     62        Assert.AreEqual(job1.StateLog[i].UserId, job1loaded.StateLog[i].UserId);
     63        Assert.AreEqual(job1.StateLog[i].Exception, job1loaded.StateLog[i].Exception);
     64        Assert.IsTrue(Math.Abs((job1.StateLog[i].DateTime - job1loaded.StateLog[i].DateTime).TotalSeconds) < 1);
     65      }
     66
    6467      dao.DeleteJob(job1.Id);
    6568
     
    9699      dao.DeleteSlave(slave.Id);
    97100      dao.DeleteSlaveGroup(slaveGroup.Id);
    98     }
    99 
    100     [TestMethod]
    101     public void TestJobDaoWaiting() {
    102       IHiveDao dao = ServiceLocator.Instance.HiveDao;
    103 
    104       DT.Job job = new DT.Job();
    105       job.DateCreated = DateTime.Now;
    106       job.JobState = JobState.Waiting;
    107       job.Id = dao.AddJob(job);
    108 
    109       // todo
    110101    }
    111102
     
    152143    }
    153144
     145    [TestMethod]
     146    public void TestHiveExperimentDao() {
     147      IHiveDao dao = ServiceLocator.Instance.HiveDao;
     148
     149      DT.HiveExperiment he = new DT.HiveExperiment();
     150
     151      DT.Job job = new DT.Job();
     152      job.SetState(JobState.Offline, Guid.NewGuid());
     153      job.Id = dao.AddJob(job);
     154
     155      he.RootJobId = job.Id;
     156      he.DateCreated = DateTime.Now;
     157      he.Name = "TestExperiment";
     158      he.OwnerUserId = Guid.NewGuid();
     159      he.ResourceNames = "HEAL";
     160
     161      he.Id = dao.AddHiveExperiment(he);
     162
     163      DT.HiveExperimentPermission perm = new DT.HiveExperimentPermission();
     164      perm.HiveExperimentId = he.Id;
     165      perm.GrantedByUserId = he.OwnerUserId;
     166      perm.GrantedUserId = Guid.NewGuid();
     167      perm.Permission = Permission.Write;
     168      dao.AddHiveExperimentPermission(perm);
     169
     170      DT.HiveExperiment heLoaded = dao.GetHiveExperiment(he.Id);
     171      Assert.AreEqual(he.Id, heLoaded.Id);
     172      Assert.AreEqual(he.Name, heLoaded.Name);
     173      Assert.AreEqual(he.ResourceNames, heLoaded.ResourceNames);
     174      Assert.AreEqual(he.RootJobId, heLoaded.RootJobId);
     175      //Assert.AreEqual(he.LastAccessed, heLoaded.LastAccessed);
     176      //Assert.AreEqual(he.DateCreated, heLoaded.DateCreated);
     177     
     178      DT.Job jobLoaded = dao.GetJob(he.RootJobId);
     179      Assert.AreEqual(job.Id, jobLoaded.Id);
     180      Assert.AreEqual(job.State, jobLoaded.State);
     181
     182      DT.HiveExperimentPermission permLoaded = dao.GetHiveExperimentPermission(he.Id, perm.GrantedUserId);
     183      Assert.AreEqual(perm.HiveExperimentId, permLoaded.HiveExperimentId);
     184      Assert.AreEqual(perm.GrantedUserId, permLoaded.GrantedUserId);
     185      Assert.AreEqual(perm.GrantedByUserId, permLoaded.GrantedByUserId);
     186      Assert.AreEqual(perm.Permission, permLoaded.Permission);
     187
     188      dao.DeleteHiveExperiment(he.Id);
     189      Assert.AreEqual(null, dao.GetHiveExperiment(he.Id));
     190      Assert.AreEqual(null, dao.GetJob(he.RootJobId));
     191      Assert.AreEqual(null, dao.GetHiveExperimentPermission(perm.HiveExperimentId, perm.GrantedUserId));
     192
     193    }
    154194  }
    155195}
  • branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.Tests/ServiceTests.cs

    r5404 r5511  
    2323using System.Collections.Generic;
    2424using System.Linq;
     25using System.Threading;
    2526using HeuristicLab.Clients.Hive;
    2627using HeuristicLab.Clients.Hive.Slave.Tests;
     28using HeuristicLab.Hive;
     29using HeuristicLab.Services.Hive.Common;
    2730using HeuristicLab.Services.Hive.Common.DataTransfer;
    2831using HeuristicLab.Services.Hive.Common.ServiceContracts;
    2932using Microsoft.VisualStudio.TestTools.UnitTesting;
    30 using System.Threading;
    31 using HeuristicLab.Hive;
    32 using HeuristicLab.Services.Hive.Common;
    3333
    3434namespace HeuristicLab.Services.Hive.Tests {
    3535
     36  using System.Diagnostics;
    3637  using DT = HeuristicLab.Services.Hive.Common.DataTransfer;
    37   using System.Diagnostics;
    3838
    3939  [TestClass]
     
    5454      var service = GetLocalService();
    5555
     56      // create hive experiment
    5657      DT.HiveExperiment experiment = new DT.HiveExperiment() {
    5758        Name = "TestExperiment",
     
    5960      };
    6061
     62      // create job
    6163      DT.Job job = new DT.Job() {
    6264        CoresNeeded = 1,
     
    6466        Priority = 0
    6567      };
     68      job.SetState(JobState.Offline);
    6669
    6770      DT.JobData jobData = new DT.JobData() {
    68         Data = PersistenceUtil.Serialize(new MockJob(500, true))
     71        //Data = PersistenceUtil.Serialize(new MockJob(500, true))
     72        Data = new byte[10000000]
    6973      };
    7074
     75      // create plugin
    7176      DT.Plugin plugin1 = new DT.Plugin();
    7277      plugin1.Name = "Tests.MyPlugin";
     
    7782
    7883      DT.PluginData pluginData1 = new DT.PluginData();
    79       pluginData1.PluginId = plugin1.Id;
    8084      pluginData1.FileName = "Tests.MyPlugin-1.0.dll";
    8185      pluginData1.Data = new byte[] { 0, 1, 2, 3, 4, 5 };
    8286
     87      plugin1.Id = service.AddPlugin(plugin1, new List<PluginData> { pluginData1 });
     88      pluginData1.PluginId = plugin1.Id;
     89
     90      // add plugin
    8391      job.PluginsNeededIds.Add(plugin1.Id);
    8492
    85       job.Id = service.AddJob(job, jobData, null);
     93      // create slave
     94      DT.Slave slave = new Slave();
     95      slave.Id = Guid.NewGuid();
     96      slave.Name = "TestSlave";
     97      slave.Memory = 1024;
     98      slave.Cores = 4;
     99      slave.CpuSpeed = 2800;
     100      slave.OperatingSystem = "Windows 3.11";
     101      slave.CpuArchitecture = CpuArchitecture.x64;
     102
     103      // add slave
     104      service.AddSlave(slave);
     105
     106      // add job
     107      job.Id = service.AddJob(job, jobData, new List<Guid> { slave.Id });
    86108      experiment.RootJobId = job.Id;
    87109
     110      // add hive experiment
     111      experiment.Id = service.AddHiveExperiment(experiment);
     112
     113      // test job
    88114      DT.Job jobLoaded = service.GetJob(job.Id);
    89115      Assert.AreEqual(job.Id, jobLoaded.Id);
     
    91117      Assert.AreEqual(job.MemoryNeeded, jobLoaded.MemoryNeeded);
    92118      Assert.AreEqual(job.Priority, jobLoaded.Priority);
    93       Assert.AreEqual(JobState.Waiting, jobLoaded.JobState);
    94       Assert.AreEqual(ServiceLocator.Instance.AuthorizationManager.UserId, job.UserId);
     119      Assert.AreEqual(JobState.Waiting, jobLoaded.State);
    95120      Assert.IsTrue(job.PluginsNeededIds.SequenceEqual(jobLoaded.PluginsNeededIds));
    96 
     121     
    97122      DT.JobData jobDataLoaded = service.GetJobData(job.Id);
    98123      Assert.AreEqual(job.Id, jobDataLoaded.JobId);
    99124      Assert.IsTrue(jobData.Data.SequenceEqual(jobDataLoaded.Data));
    100125
    101       experiment.Id = service.AddHiveExperiment(experiment);
    102 
     126      // test hive experiment
    103127      DT.HiveExperiment experimentLoaded = service.GetHiveExperiment(experiment.Id);
    104128      Assert.AreEqual(experiment.Id, experimentLoaded.Id);
     
    107131      Assert.AreEqual(experiment.RootJobId, experimentLoaded.RootJobId);
    108132
     133      // test assigned ressources
     134      var actions = service.Heartbeat(new Heartbeat() { SlaveId = slave.Id, AssignJob = true, FreeCores = 4, FreeMemory = 1024, JobProgress = new Dictionary<Guid,TimeSpan>() });
     135      Assert.AreEqual(1, actions.Count);
     136      Assert.AreEqual(MessageContainer.MessageType.CalculateJob, actions[0].Message);
     137      Assert.AreEqual(job.Id, actions[0].JobId);
     138
     139      jobLoaded = service.GetJob(job.Id);
     140      Assert.AreEqual(JobState.Transferring, jobLoaded.State);
     141
     142      // send progress
     143      var progress = new Dictionary<Guid, TimeSpan>();
     144      progress.Add(job.Id, new TimeSpan(1, 5, 10, 20, 30));
     145      actions = service.Heartbeat(new Heartbeat() { SlaveId = slave.Id, AssignJob = true, FreeCores = 3, FreeMemory = 1024, JobProgress = progress });
     146      Assert.AreEqual(0, actions.Count);
     147
     148      // the job should be in state 'Calculating' now
     149      jobLoaded = service.GetJob(job.Id);
     150      Assert.AreEqual(JobState.Calculating, jobLoaded.State);
     151      Assert.AreEqual(new TimeSpan(1, 5, 10, 20, 30), jobLoaded.ExecutionTime.Value);
     152
     153      // delete
    109154      service.DeleteHiveExperiment(experiment.Id);
    110155      Assert.AreEqual(null, service.GetHiveExperiment(experiment.Id));
    111156      Assert.AreEqual(null, service.GetJob(job.Id));
    112157      Assert.AreEqual(null, service.GetJobData(job.Id));
     158
     159      // send another heartbeat with the deleted job; the server should command the abortion of the job
     160      actions = service.Heartbeat(new Heartbeat() { SlaveId = slave.Id, AssignJob = true, FreeCores = 3, FreeMemory = 1024, JobProgress = progress });
     161      Assert.AreEqual(1, actions.Count);
     162      Assert.AreEqual(MessageContainer.MessageType.AbortJob, actions[0].Message);
     163      Assert.AreEqual(job.Id, actions[0].JobId);
     164
     165      // delete slave
     166      service.DeleteSlave(slave.Id);
    113167    }
    114168
     
    185239        Thread.Sleep(500);
    186240        lightweightJobs = service.GetLightweightJobs(jobs.Select(x => x.Id));
    187       } while (!lightweightJobs.All(x => x.JobState == JobState.Finished));
     241      } while (!lightweightJobs.All(x => x.State == JobState.Finished));
    188242
    189243      // delete slaves
     
    239293            IJob deserializedJob = PersistenceUtil.Deserialize<IJob>(jobData.Data);
    240294            deserializedJob.Start();
    241             job.JobState = JobState.Finished;
    242             jobs.Where(x => x.Id == job.Id).Single().JobState = JobState.Finished;
     295            job.SetState(JobState.Finished);
     296            jobs.Where(x => x.Id == job.Id).Single().SetState(JobState.Finished);
    243297            jobData.Data = PersistenceUtil.Serialize(deserializedJob);
    244             service.UpdateJob(job, jobData);
     298            service.UpdateJobData(job, jobData);
    245299            Debug.WriteLine("finished calculating");
    246300          }
Note: See TracChangeset for help on using the changeset viewer.