Free cookie consent management tool by TermsFeed Policy Generator

source: branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.Tests/DaoTests.cs @ 5511

Last change on this file since 5511 was 5511, checked in by cneumuel, 14 years ago

#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
File size: 7.3 KB
Line 
1using System;
2using System.Linq;
3using HeuristicLab.Services.Hive.Common.DataTransfer;
4using HeuristicLab.Services.Hive.Common.ServiceContracts;
5using HeuristicLab.Services.Hive.DataAccess;
6using Microsoft.VisualStudio.TestTools.UnitTesting;
7
8namespace HeuristicLab.Services.Hive.Tests {
9  using DT = HeuristicLab.Services.Hive.Common.DataTransfer;
10
11  [TestClass]
12  public class DaoTests {
13
14    [ClassInitialize]
15    public static void MyClassInitialize(TestContext testContext) {
16      PluginLoader.pluginAssemblies.Any();
17      ServiceLocator.Instance = new MockServiceLocator(ServiceLocator.Instance);
18    }
19   
20    private IHiveService GetLocalService() {
21      return new HiveService();
22    }
23
24    [TestMethod]
25    public void TestJobDao() {
26      IHiveDao dao = ServiceLocator.Instance.HiveDao;
27     
28      DT.Job job1 = new DT.Job();
29      job1.SetState(JobState.Offline, Guid.NewGuid());
30
31      DT.Plugin plugin1 = new DT.Plugin();
32      plugin1.Name = "Tests.MyPlugin";
33      plugin1.Version = new Version("1.0.0.0");
34      plugin1.UserId = Guid.Empty;
35      plugin1.IsLocal = true;
36      plugin1.DateCreated = DateTime.Now;
37
38      DT.PluginData pluginData1 = new DT.PluginData();
39      pluginData1.PluginId = plugin1.Id;
40      pluginData1.FileName = "Tests.MyPlugin-1.0.dll";
41      pluginData1.Data = new byte[] { 0, 1, 2, 3, 4, 5 };
42
43      plugin1.Id = dao.AddPlugin(plugin1);
44      pluginData1.PluginId = plugin1.Id;
45      pluginData1.Id = dao.AddPluginData(pluginData1);
46
47      job1.PluginsNeededIds.Add(plugin1.Id);
48
49      job1.Id = dao.AddJob(job1);
50
51      DT.Job job1loaded = dao.GetJob(job1.Id);
52      Assert.AreEqual(job1.Id, job1loaded.Id);
53      Assert.AreEqual(job1.CoresNeeded, job1loaded.CoresNeeded);
54      Assert.AreEqual(job1.DateCreated.ToString(), job1loaded.DateCreated.ToString());
55      Assert.AreEqual(null, job1loaded.DateFinished);
56      Assert.IsTrue(job1.PluginsNeededIds.SequenceEqual(job1loaded.PluginsNeededIds));
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
67      dao.DeleteJob(job1.Id);
68
69      Assert.AreEqual(null, dao.GetJob(job1.Id));
70    }
71
72    [TestMethod]
73    public void TestSlaveDao() {
74      IHiveDao dao = ServiceLocator.Instance.HiveDao;
75      DT.SlaveGroup slaveGroup = new DT.SlaveGroup() {
76        Name = "Test"
77      };
78      slaveGroup.Id = dao.AddSlaveGroup(slaveGroup);
79
80      DT.Slave slave = new DT.Slave() {
81        Id = Guid.NewGuid(),
82        Name = "Test",
83        OperatingSystem = null, //"Windows 3.11",
84        Cores = 2,
85        Memory = 1024,
86        FreeMemory = 512
87      };
88
89      Assert.AreEqual(slave.Id, dao.AddSlave(slave));
90
91      // update
92      slave.FreeMemory = 255;
93      slave.OperatingSystem = Environment.OSVersion.VersionString;
94      dao.UpdateSlave(slave);
95
96      DT.Slave slaveLoaded = dao.GetSlave(slave.Id);
97      Assert.AreEqual(slave.FreeMemory, slaveLoaded.FreeMemory);
98
99      dao.DeleteSlave(slave.Id);
100      dao.DeleteSlaveGroup(slaveGroup.Id);
101    }
102
103    [TestMethod]
104    public void TestPluginDao() {
105      IHiveDao dao = ServiceLocator.Instance.HiveDao;
106
107      DT.Plugin plugin1 = new DT.Plugin();
108      plugin1.DateCreated = DateTime.Now;
109      plugin1.IsLocal = false;
110      plugin1.Name = "Tests.MyPlugin";
111      plugin1.Version = new Version("1.0.0.0");
112      plugin1.UserId = Guid.Empty;
113
114      plugin1.Id = dao.AddPlugin(plugin1);
115
116      DT.Plugin plugin1loaded = dao.GetPlugin(plugin1.Id);
117      Assert.AreEqual(plugin1.Id, plugin1loaded.Id);
118      Assert.AreEqual(plugin1.Name, plugin1loaded.Name);
119      Assert.AreEqual(plugin1.Version, plugin1loaded.Version);
120      Assert.AreEqual(plugin1.UserId, plugin1loaded.UserId);
121      Assert.AreEqual(plugin1.DateCreated.ToString(), plugin1loaded.DateCreated.ToString());
122      Assert.AreEqual(plugin1.IsLocal, plugin1loaded.IsLocal);
123
124      DT.PluginData pluginData1 = new DT.PluginData();
125      pluginData1.PluginId = plugin1.Id;
126      pluginData1.FileName = "Tests.MyPlugin-1.0.dll";
127      pluginData1.Data = new byte[] { 0, 1, 2, 3, 4, 5 };
128
129      pluginData1.Id = dao.AddPluginData(pluginData1);
130
131      DT.PluginData pluginData1loaded = dao.GetPluginData(pluginData1.Id);
132      Assert.AreEqual(pluginData1.Id, pluginData1loaded.Id);
133
134      Assert.AreEqual(pluginData1.PluginId, pluginData1loaded.PluginId);
135      Assert.AreEqual(pluginData1.FileName, pluginData1loaded.FileName);
136      Assert.IsTrue(pluginData1.Data.SequenceEqual(pluginData1loaded.Data));
137
138      dao.DeletePluginData(pluginData1.Id);
139      dao.DeletePlugin(plugin1.Id);
140
141      Assert.AreEqual(null, dao.GetPlugin(plugin1.Id));
142      Assert.AreEqual(null, dao.GetPluginData(pluginData1.Id));
143    }
144
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    }
194  }
195}
Note: See TracBrowser for help on using the repository browser.