Free cookie consent management tool by TermsFeed Policy Generator

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

Last change on this file since 6295 was 6101, checked in by ascheibe, 13 years ago

#1233

  • don't lock engines for so long in StartJobInAppDomain
  • move SlaveCommListener to ConsoleClient
  • delete orphaned job folders at startup
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.Clients.Hive.SlaveCore.ConsoleClient;
26using Microsoft.VisualStudio.TestTools.UnitTesting;
27
28namespace HeuristicLab.Clients.Hive.SlaveCore.Tests {
29  [TestClass]
30  public class SlaveTest {
31    private static SlaveCommListener listener;
32
33    // Use ClassInitialize to run code before running the first test in the class
34    [ClassInitialize]
35    public static void MyClassInitialize(TestContext testContext) {
36      PluginLoader.pluginAssemblies.Any();
37      ServiceLocator.Instance = new MockServiceLocator();
38      /* listener = new SlaveCommListener();
39       listener.Open();*/
40    }
41
42    [ClassCleanup]
43    public static void MyClassCleanup() {
44      //listener.Close();
45    }
46
47
48    private List<List<MessageContainer>> CreateMsgsForSingleJob() {
49      List<List<MessageContainer>> allMsgs = new List<List<MessageContainer>>();
50      //get slave to fetch job
51      List<MessageContainer> msg = new List<MessageContainer>();
52      msg.Add(new MessageContainer(MessageContainer.MessageType.CalculateJob));
53      allMsgs.Add(msg);
54
55      //do nothing
56      msg = new List<MessageContainer>();
57      allMsgs.Add(msg);
58      msg = new List<MessageContainer>();
59      allMsgs.Add(msg);
60      msg = new List<MessageContainer>();
61      allMsgs.Add(msg);
62      msg = new List<MessageContainer>();
63      allMsgs.Add(msg);
64      msg = new List<MessageContainer>();
65      allMsgs.Add(msg);
66
67      msg = new List<MessageContainer>();
68      msg.Add(new MessageContainer(MessageContainer.MessageType.ShutdownSlave));
69      allMsgs.Add(msg);
70      return allMsgs;
71    }
72
73    [TestMethod]
74    public void TestSingleJob() {
75      Job testJob = new Job { Id = Guid.NewGuid(), CoresNeeded = 1, MemoryNeeded = 0 };
76      testJob.State = JobState.Waiting;
77      List<Job> jobList = new List<Job>();
78      jobList.Add(testJob);
79      MockJob job = new MockJob(300, false);
80
81      ServiceLocator.Instance.CallHiveService(service => {
82        MockHiveService ms = (MockHiveService)service;
83        ((MockHiveService)service).Messages = CreateMsgsForSingleJob();
84        ((MockHiveService)service).UpdateJobs(jobList, job);
85
86        HeuristicLab.Clients.Hive.SlaveCore.Core core = new SlaveCore.Core();
87        core.Start();
88
89        Assert.AreEqual<int>(1, ms.ResultJobs.Count);
90        Assert.AreEqual<Guid>(testJob.Id, ms.ResultJobs[0].Id);
91        core.Shutdown();
92      });
93    }
94
95    private List<List<MessageContainer>> CreateMsgsForShutdownSlaveWhileJobRunning() {
96      List<List<MessageContainer>> allMsgs = new List<List<MessageContainer>>();
97      //get slave to fetch job
98      List<MessageContainer> msg = new List<MessageContainer>();
99      msg.Add(new MessageContainer(MessageContainer.MessageType.CalculateJob));
100      allMsgs.Add(msg);
101
102      msg = new List<MessageContainer>();
103      allMsgs.Add(msg);
104
105      msg = new List<MessageContainer>();
106      msg.Add(new MessageContainer(MessageContainer.MessageType.ShutdownSlave));
107      allMsgs.Add(msg);
108      return allMsgs;
109    }
110
111    [TestMethod]
112    public void TestShutdownSlaveWhileJobRunning() {
113      Job testJob = new Job { Id = Guid.NewGuid(), CoresNeeded = 1, MemoryNeeded = 0 };
114      testJob.State = JobState.Waiting;
115      List<Job> jobList = new List<Job>();
116      jobList.Add(testJob);
117      MockJob job = new MockJob(10000, false);
118
119      ServiceLocator.Instance.CallHiveService(service => {
120        MockHiveService ms = (MockHiveService)service;
121        ((MockHiveService)service).Messages = CreateMsgsForShutdownSlaveWhileJobRunning();
122        ((MockHiveService)service).UpdateJobs(jobList, job);
123
124
125        HeuristicLab.Clients.Hive.SlaveCore.Core core = new SlaveCore.Core();
126        core.Start();
127      });
128    }
129
130
131    private List<List<MessageContainer>> CreateMsgsForTwoJobs() {
132      List<List<MessageContainer>> allMsgs = new List<List<MessageContainer>>();
133
134      //get slave to fetch jobs
135      List<MessageContainer> msg = new List<MessageContainer>();
136      msg.Add(new MessageContainer(MessageContainer.MessageType.CalculateJob));
137      allMsgs.Add(msg);
138
139      msg = new List<MessageContainer>();
140      allMsgs.Add(msg);
141
142      msg = new List<MessageContainer>();
143      msg.Add(new MessageContainer(MessageContainer.MessageType.CalculateJob));
144      allMsgs.Add(msg);
145
146
147      msg = new List<MessageContainer>();
148      allMsgs.Add(msg);
149      msg = new List<MessageContainer>();
150      allMsgs.Add(msg);
151      msg = new List<MessageContainer>();
152      allMsgs.Add(msg);
153      msg = new List<MessageContainer>();
154      allMsgs.Add(msg);
155      msg = new List<MessageContainer>();
156      allMsgs.Add(msg);
157      msg = new List<MessageContainer>();
158      allMsgs.Add(msg);
159      msg = new List<MessageContainer>();
160      allMsgs.Add(msg);
161      msg = new List<MessageContainer>();
162      allMsgs.Add(msg);
163      msg = new List<MessageContainer>();
164      allMsgs.Add(msg);
165
166      msg = new List<MessageContainer>();
167      msg.Add(new MessageContainer(MessageContainer.MessageType.ShutdownSlave));
168      allMsgs.Add(msg);
169      return allMsgs;
170    }
171
172    [TestMethod]
173    public void TestTwoJobs() {
174      Job testJob1 = new Job { Id = Guid.NewGuid(), CoresNeeded = 1, MemoryNeeded = 0 };
175      testJob1.State = JobState.Waiting;
176      Job testJob2 = new Job { Id = Guid.NewGuid(), CoresNeeded = 1, MemoryNeeded = 0 };
177      testJob2.State = JobState.Waiting;
178      List<Job> jobList = new List<Job>();
179      jobList.Add(testJob1);
180      jobList.Add(testJob2);
181      MockJob job = new MockJob(2000, false);
182
183      ServiceLocator.Instance.CallHiveService(service => {
184        MockHiveService ms = (MockHiveService)service;
185        ((MockHiveService)service).Messages = CreateMsgsForTwoJobs();
186        ((MockHiveService)service).UpdateJobs(jobList, job);
187
188
189        HeuristicLab.Clients.Hive.SlaveCore.Core core = new SlaveCore.Core();
190        core.Start();
191        Assert.AreEqual<int>(2, ms.ResultJobs.Count);
192        core.Shutdown();
193      });
194    }
195  }
196}
Note: See TracBrowser for help on using the repository browser.