Free cookie consent management tool by TermsFeed Policy Generator

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

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

#1233

  • allow different versions of the same plugin in PluginCache
  • fixes for the SlaveTests
File size: 7.1 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.Common;
26using HeuristicLab.Services.Hive.Common;
27using HeuristicLab.Services.Hive.Common.DataTransfer;
28using HeuristicLab.Services.Hive.Common.ServiceContracts;
29using Microsoft.VisualStudio.TestTools.UnitTesting;
30
31namespace HeuristicLab.Clients.Hive.Slave.Tests {
32  [TestClass]
33  public class SlaveTest {
34    private static SlaveCommListener listener;
35
36    // Use ClassInitialize to run code before running the first test in the class
37    [ClassInitialize]
38    public static void MyClassInitialize(TestContext testContext) {
39      PluginLoader.pluginAssemblies.Any();
40      ServiceLocator.Instance = new MockServiceLocator();
41      /* listener = new SlaveCommListener();
42       listener.Open();*/
43    }
44
45    [ClassCleanup]
46    public static void MyClassCleanup() {
47      //listener.Close();
48    }
49
50
51    private List<List<MessageContainer>> CreateMsgsForSingleJob() {
52      List<List<MessageContainer>> allMsgs = new List<List<MessageContainer>>();
53      //get slave to fetch job
54      List<MessageContainer> msg = new List<MessageContainer>();
55      msg.Add(new MessageContainer(MessageContainer.MessageType.AquireJob));
56      allMsgs.Add(msg);
57
58      //do nothing
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      msg = new List<MessageContainer>();
68      allMsgs.Add(msg);
69
70      msg = new List<MessageContainer>();
71      msg.Add(new MessageContainer(MessageContainer.MessageType.ShutdownSlave));
72      allMsgs.Add(msg);
73      return allMsgs;
74    }
75
76    [TestMethod]
77    public void TestSingleJob() {
78      Job testJob = new Job { Id = Guid.NewGuid(), JobState = JobState.Waiting, DateCreated = DateTime.Now, CoresNeeded = 1, MemoryNeeded = 0 };
79      List<Job> jobList = new List<Job>();
80      jobList.Add(testJob);
81      MockJob job = new MockJob(300, false);
82
83      using (Disposable<IHiveService> service = ServiceLocator.Instance.GetService()) {
84        MockHiveService ms = (MockHiveService)service.Obj;
85        ((MockHiveService)service.Obj).Messages = CreateMsgsForSingleJob();
86        ((MockHiveService)service.Obj).updateJobs(jobList, job);
87
88        HeuristicLab.Clients.Hive.Slave.Core core = new Slave.Core();
89        core.Start();
90
91        Assert.AreEqual<int>(1, ms.ResultJobs.Count);
92        Assert.AreEqual<Guid>(testJob.Id, ms.ResultJobs[0].Id);
93        core.Shutdown();
94      }
95    }
96
97    private List<List<MessageContainer>> CreateMsgsForShutdownSlaveWhileJobRunning() {
98      List<List<MessageContainer>> allMsgs = new List<List<MessageContainer>>();
99      //get slave to fetch job
100      List<MessageContainer> msg = new List<MessageContainer>();
101      msg.Add(new MessageContainer(MessageContainer.MessageType.AquireJob));
102      allMsgs.Add(msg);
103
104      msg = new List<MessageContainer>();
105      allMsgs.Add(msg);
106
107      msg = new List<MessageContainer>();
108      msg.Add(new MessageContainer(MessageContainer.MessageType.ShutdownSlave));
109      allMsgs.Add(msg);
110      return allMsgs;
111    }
112
113    [TestMethod]
114    public void TestShutdownSlaveWhileJobRunning() {
115      Job testJob = new Job { Id = Guid.NewGuid(), JobState = JobState.Waiting, DateCreated = DateTime.Now, CoresNeeded = 1, MemoryNeeded = 0 };
116      List<Job> jobList = new List<Job>();
117      jobList.Add(testJob);
118      MockJob job = new MockJob(10000, false);
119
120      using (Disposable<IHiveService> service = ServiceLocator.Instance.GetService()) {
121        MockHiveService ms = (MockHiveService)service.Obj;
122        ((MockHiveService)service.Obj).Messages = CreateMsgsForShutdownSlaveWhileJobRunning();
123        ((MockHiveService)service.Obj).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.AquireJob));
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.AquireJob));
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(), JobState = JobState.Waiting, DateCreated = DateTime.Now, CoresNeeded = 1, MemoryNeeded = 0 };
176      Job testJob2 = new Job { Id = Guid.NewGuid(), JobState = JobState.Waiting, DateCreated = DateTime.Now, CoresNeeded = 1, MemoryNeeded = 0 };
177      List<Job> jobList = new List<Job>();
178      jobList.Add(testJob1);
179      jobList.Add(testJob2);
180      MockJob job = new MockJob(2000, false);
181
182      using (Disposable<IHiveService> service = ServiceLocator.Instance.GetService()) {
183        MockHiveService ms = (MockHiveService)service.Obj;
184        ((MockHiveService)service.Obj).Messages = CreateMsgsForTwoJobs();
185        ((MockHiveService)service.Obj).updateJobs(jobList, job);
186
187
188        HeuristicLab.Clients.Hive.Slave.Core core = new Slave.Core();
189        core.Start();
190        Assert.AreEqual<int>(2, ms.ResultJobs.Count);
191        core.Shutdown();
192      }
193    }
194  }
195}
Note: See TracBrowser for help on using the repository browser.