1 ##############################################################################
2 # Copyright (c) 2018 Parker Berberian, Sawyer Bergeron, and others.
4 # All rights reserved. This program and the accompanying materials
5 # are made available under the terms of the Apache License, Version 2.0
6 # which accompanies this distribution, and is available at
7 # http://www.apache.org/licenses/LICENSE-2.0
8 ##############################################################################
10 from django.test import TestCase
11 from django.contrib.auth.models import User
13 from resource.inventory_manager import InventoryManager
14 from resource.resource_manager import ResourceManager, HostNameValidator
15 from account.models import Lab
16 from resource.models import (
22 GenericResourceBundle,
31 class InventoryManagerTestCase(TestCase):
33 def test_singleton(self):
34 instance = InventoryManager.getInstance()
35 self.assertTrue(isinstance(instance, InventoryManager))
36 self.assertTrue(instance is InventoryManager.getInstance())
40 # create lab and give it resources
41 user = User.objects.create(username="username")
42 self.lab = Lab.objects.create(
45 contact_email='someone@email.com',
46 contact_phone='dont call me'
50 hostProfile = HostProfile.objects.create(
53 description='a test profile'
55 InterfaceProfile.objects.create(
60 DiskProfile.objects.create(
66 CpuProfile.objects.create(
68 architecture="x86_64",
72 RamProfile.objects.create(
78 # create GenericResourceBundle
79 genericBundle = GenericResourceBundle.objects.create()
81 self.gHost1 = GenericHost.objects.create(
83 name='generic host 1',
86 self.gHost2 = GenericHost.objects.create(
88 name='generic host 2',
92 # actual resource bundle
93 bundle = ResourceBundle.objects.create(template=genericBundle)
95 self.host1 = Host.objects.create(
104 self.host2 = Host.objects.create(
105 template=self.gHost2,
113 vlan1 = Vlan.objects.create(vlan_id=300, tagged=False)
114 vlan2 = Vlan.objects.create(vlan_id=300, tagged=False)
116 Interface.objects.create(
117 mac_address='00:11:22:33:44:55',
118 bus_address='some bus address',
119 switch_name='switch1',
124 Interface.objects.create(
125 mac_address='00:11:22:33:44:56',
126 bus_address='some bus address',
127 switch_name='switch1',
133 def test_acquire_host(self):
134 host = InventoryManager.getInstance().acquireHost(self.gHost1, self.lab.name)
135 self.assertNotEquals(host, None)
136 self.assertTrue(host.booked)
137 self.assertEqual(host.template, self.gHost1)
139 def test_release_host(self):
140 host = InventoryManager.getInstance().acquireHost(self.gHost1, self.lab.name)
141 self.assertTrue(host.booked)
142 InventoryManager.getInstance().releaseHost(host)
143 self.assertFalse(host.booked)
146 class ResourceManagerTestCase(TestCase):
147 def test_singleton(self):
148 instance = ResourceManager.getInstance()
149 self.assertTrue(isinstance(instance, ResourceManager))
150 self.assertTrue(instance is ResourceManager.getInstance())
154 # create lab and give it resources
155 user = User.objects.create(username="username")
156 self.lab = Lab.objects.create(
159 contact_email='someone@email.com',
160 contact_phone='dont call me'
164 hostProfile = HostProfile.objects.create(
167 description='a test profile'
169 InterfaceProfile.objects.create(
174 DiskProfile.objects.create(
180 CpuProfile.objects.create(
182 architecture="x86_64",
186 RamProfile.objects.create(
192 # create GenericResourceBundle
193 genericBundle = GenericResourceBundle.objects.create()
195 self.gHost1 = GenericHost.objects.create(
196 bundle=genericBundle,
197 name='generic host 1',
200 self.gHost2 = GenericHost.objects.create(
201 bundle=genericBundle,
202 name='generic host 2',
206 # actual resource bundle
207 bundle = ResourceBundle.objects.create(template=genericBundle)
209 self.host1 = Host.objects.create(
210 template=self.gHost1,
218 self.host2 = Host.objects.create(
219 template=self.gHost2,
227 vlan1 = Vlan.objects.create(vlan_id=300, tagged=False)
228 vlan2 = Vlan.objects.create(vlan_id=300, tagged=False)
230 Interface.objects.create(
231 mac_address='00:11:22:33:44:55',
232 bus_address='some bus address',
233 switch_name='switch1',
238 Interface.objects.create(
239 mac_address='00:11:22:33:44:56',
240 bus_address='some bus address',
241 switch_name='switch1',
247 def test_convert_bundle(self):
248 ResourceManager.getInstance().convertResoureBundle(self.genericBundle, self.lab.name)
249 # verify bundle configuration
252 class HostNameValidatorTestCase(TestCase):
254 def test_valid_hostnames(self):
255 self.assertTrue(HostNameValidator.is_valid_hostname("localhost"))
256 self.assertTrue(HostNameValidator.is_valid_hostname("Localhost"))
257 self.assertTrue(HostNameValidator.is_valid_hostname("localHost"))
258 self.assertTrue(HostNameValidator.is_valid_hostname("LOCALHOST"))
259 self.assertTrue(HostNameValidator.is_valid_hostname("f"))
260 self.assertTrue(HostNameValidator.is_valid_hostname("abc123doreyme"))
261 self.assertTrue(HostNameValidator.is_valid_hostname("F9999999"))
262 self.assertTrue(HostNameValidator.is_valid_hostname("my-host"))
263 self.assertTrue(HostNameValidator.is_valid_hostname("My-Host"))
264 self.assertTrue(HostNameValidator.is_valid_hostname("MY-HOST"))
265 self.assertTrue(HostNameValidator.is_valid_hostname("a-long-name-for-my-host"))
267 def test_invalid_hostnames(self):
268 self.assertFalse(HostNameValidator.is_valid_hostname("-long-name-for-my-host"))
269 self.assertFalse(HostNameValidator.is_valid_hostname("546"))
270 self.assertFalse(HostNameValidator.is_valid_hostname("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"))
272 def test_invalid_chars(self):
273 self.assertFalse(HostNameValidator.is_valid_hostname("contains!char"))
274 self.assertFalse(HostNameValidator.is_valid_hostname("contains@char"))
275 self.assertFalse(HostNameValidator.is_valid_hostname("contains#char"))
276 self.assertFalse(HostNameValidator.is_valid_hostname("contains$char"))
277 self.assertFalse(HostNameValidator.is_valid_hostname("contains%char"))
278 self.assertFalse(HostNameValidator.is_valid_hostname("contains^char"))
279 self.assertFalse(HostNameValidator.is_valid_hostname("contains&char"))
280 self.assertFalse(HostNameValidator.is_valid_hostname("contains*char"))
281 self.assertFalse(HostNameValidator.is_valid_hostname("contains(char"))
282 self.assertFalse(HostNameValidator.is_valid_hostname("contains)char"))
283 self.assertFalse(HostNameValidator.is_valid_hostname("contains_char"))
284 self.assertFalse(HostNameValidator.is_valid_hostname("contains=char"))
285 self.assertFalse(HostNameValidator.is_valid_hostname("contains+char"))
286 self.assertFalse(HostNameValidator.is_valid_hostname("contains|char"))
287 self.assertFalse(HostNameValidator.is_valid_hostname("contains\\char"))
288 self.assertFalse(HostNameValidator.is_valid_hostname("contains[char"))
289 self.assertFalse(HostNameValidator.is_valid_hostname("contains]char"))
290 self.assertFalse(HostNameValidator.is_valid_hostname("contains;char"))
291 self.assertFalse(HostNameValidator.is_valid_hostname("contains:char"))
292 self.assertFalse(HostNameValidator.is_valid_hostname("contains'char"))
293 self.assertFalse(HostNameValidator.is_valid_hostname('contains"char'))
294 self.assertFalse(HostNameValidator.is_valid_hostname("contains'char"))
295 self.assertFalse(HostNameValidator.is_valid_hostname("contains<char"))
296 self.assertFalse(HostNameValidator.is_valid_hostname("contains>char"))
297 self.assertFalse(HostNameValidator.is_valid_hostname("contains,char"))
298 self.assertFalse(HostNameValidator.is_valid_hostname("contains?char"))
299 self.assertFalse(HostNameValidator.is_valid_hostname("contains/char"))
300 self.assertFalse(HostNameValidator.is_valid_hostname("contains`char"))
301 self.assertFalse(HostNameValidator.is_valid_hostname("contains~char"))