Free cookie consent management tool by TermsFeed Policy Generator

source: branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave.Tests/SlaveTest.cs @ 5526

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

#1233

  • fixed handling of StateLog in DataLayer
  • extended unit tests
  • changed style of service calls to OKB-like style (using delegates)
  • added possibility that parent jobs can be finished immediately when child jobs are finished
File size: 6.9 KB
Line 
1#region License Information
2/* HeuristicLab
3 * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
4 *
5 * This file is part of HeuristicLab.
6 *
7 * HeuristicLab is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation, either version 3 of the License, or
10 * (at your option) any later version.
11 *
12 * HeuristicLab is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
19 */
20#endregion
21
22using System;
23using System.Collections.Generic;
24using System.Linq;
25using HeuristicLab.Services.Hive.Common;
26using HeuristicLab.Services.Hive.Common.DataTransfer;
27using Microsoft.VisualStudio.TestTools.UnitTesting;
28
29namespace HeuristicLab.Clients.Hive.Slave.Tests {
30  [TestClass]
31  public class SlaveTest {
32    private static SlaveCommListener listener;
33
34    // Use ClassInitialize to run code before running the first test in the class
35    [ClassInitialize]
36    public static void MyClassInitialize(TestContext testContext) {
37      PluginLoader.pluginAssemblies.Any();
38      ServiceLocator.Instance = new MockServiceLocator();
39      /* listener = new SlaveCommListener();
40       listener.Open();*/
41    }
42
43    [ClassCleanup]
44    public static void MyClassCleanup() {
45      //listener.Close();
46    }
47
48
49    private List<List<MessageContainer>> CreateMsgsForSingleJob() {
50      List<List<MessageContainer>> allMsgs = new List<List<MessageContainer>>();
51      //get slave to fetch job
52      List<MessageContainer> msg = new List<MessageContainer>();
53      msg.Add(new MessageContainer(MessageContainer.MessageType.CalculateJob));
54      allMsgs.Add(msg);
55
56      //do nothing
57      msg = new List<MessageContainer>();
58      allMsgs.Add(msg);
59      msg = new List<MessageContainer>();
60      allMsgs.Add(msg);
61      msg = new List<MessageContainer>();
62      allMsgs.Add(msg);
63      msg = new List<MessageContainer>();
64      allMsgs.Add(msg);
65      msg = new List<MessageContainer>();
66      allMsgs.Add(msg);
67
68      msg = new List<MessageContainer>();
69      msg.Add(new MessageContainer(MessageContainer.MessageType.ShutdownSlave));
70      allMsgs.Add(msg);
71      return allMsgs;
72    }
73
74    [TestMethod]
75    public void TestSingleJob() {
76      Job testJob = new Job { Id = Guid.NewGuid(), CoresNeeded = 1, MemoryNeeded = 0 };
77      testJob.SetState(JobState.Waiting);
78      List<Job> jobList = new List<Job>();
79      jobList.Add(testJob);
80      MockJob job = new MockJob(300, false);
81
82      ServiceLocator.Instance.CallHiveService(service => {
83        MockHiveService ms = (MockHiveService)service;
84        ((MockHiveService)service).Messages = CreateMsgsForSingleJob();
85        ((MockHiveService)service).updateJobs(jobList, job);
86
87        HeuristicLab.Clients.Hive.Slave.Core core = new Slave.Core();
88        core.Start();
89
90        Assert.AreEqual<int>(1, ms.ResultJobs.Count);
91        Assert.AreEqual<Guid>(testJob.Id, ms.ResultJobs[0].Id);
92        core.Shutdown();
93      });
94    }
95
96    private List<List<MessageContainer>> CreateMsgsForShutdownSlaveWhileJobRunning() {
97      List<List<MessageContainer>> allMsgs = new List<List<MessageContainer>>();
98      //get slave to fetch job
99      List<MessageContainer> msg = new List<MessageContainer>();
100      msg.Add(new MessageContainer(MessageContainer.MessageType.CalculateJob));
101      allMsgs.Add(msg);
102
103      msg = new List<MessageContainer>();
104      allMsgs.Add(msg);
105
106      msg = new List<MessageContainer>();
107      msg.Add(new MessageContainer(MessageContainer.MessageType.ShutdownSlave));
108      allMsgs.Add(msg);
109      return allMsgs;
110    }
111
112    [TestMethod]
113    public void TestShutdownSlaveWhileJobRunning() {
114      Job testJob = new Job { Id = Guid.NewGuid(), CoresNeeded = 1, MemoryNeeded = 0 };
115      testJob.SetState(JobState.Waiting);
116      List<Job> jobList = new List<Job>();
117      jobList.Add(testJob);
118      MockJob job = new MockJob(10000, false);
119
120      ServiceLocator.Instance.CallHiveService(service => {
121        MockHiveService ms = (MockHiveService)service;
122        ((MockHiveService)service).Messages = CreateMsgsForShutdownSlaveWhileJobRunning();
123        ((MockHiveService)service).updateJobs(jobList, job);
124
125
126        HeuristicLab.Clients.Hive.Slave.Core core = new Slave.Core();
127        core.Start();
128      });
129    }
130
131
132    private List<List<MessageContainer>> CreateMsgsForTwoJobs() {
133      List<List<MessageContainer>> allMsgs = new List<List<MessageContainer>>();
134
135      //get slave to fetch jobs
136      List<MessageContainer> msg = new List<MessageContainer>();
137      msg.Add(new MessageContainer(MessageContainer.MessageType.CalculateJob));
138      allMsgs.Add(msg);
139
140      msg = new List<MessageContainer>();
141      allMsgs.Add(msg);
142
143      msg = new List<MessageContainer>();
144      msg.Add(new MessageContainer(MessageContainer.MessageType.CalculateJob));
145      allMsgs.Add(msg);
146
147
148      msg = new List<MessageContainer>();
149      allMsgs.Add(msg);
150      msg = new List<MessageContainer>();
151      allMsgs.Add(msg);
152      msg = new List<MessageContainer>();
153      allMsgs.Add(msg);
154      msg = new List<MessageContainer>();
155      allMsgs.Add(msg);
156      msg = new List<MessageContainer>();
157      allMsgs.Add(msg);
158      msg = new List<MessageContainer>();
159      allMsgs.Add(msg);
160      msg = new List<MessageContainer>();
161      allMsgs.Add(msg);
162      msg = new List<MessageContainer>();
163      allMsgs.Add(msg);
164      msg = new List<MessageContainer>();
165      allMsgs.Add(msg);
166
167      msg = new List<MessageContainer>();
168      msg.Add(new MessageContainer(MessageContainer.MessageType.ShutdownSlave));
169      allMsgs.Add(msg);
170      return allMsgs;
171    }
172
173    [TestMethod]
174    public void TestTwoJobs() {
175      Job testJob1 = new Job { Id = Guid.NewGuid(), CoresNeeded = 1, MemoryNeeded = 0 };
176      testJob1.SetState(JobState.Waiting);
177      Job testJob2 = new Job { Id = Guid.NewGuid(), CoresNeeded = 1, MemoryNeeded = 0 };
178      testJob2.SetState(JobState.Waiting);
179      List<Job> jobList = new List<Job>();
180      jobList.Add(testJob1);
181      jobList.Add(testJob2);
182      MockJob job = new MockJob(2000, false);
183
184      ServiceLocator.Instance.CallHiveService(service => {
185        MockHiveService ms = (MockHiveService)service;
186        ((MockHiveService)service).Messages = CreateMsgsForTwoJobs();
187        ((MockHiveService)service).updateJobs(jobList, job);
188
189
190        HeuristicLab.Clients.Hive.Slave.Core core = new Slave.Core();
191        core.Start();
192        Assert.AreEqual<int>(2, ms.ResultJobs.Count);
193        core.Shutdown();
194      });
195    }
196  }
197}
Note: See TracBrowser for help on using the repository browser.