Lab as a Service 2.0
[laas.git] / src / resource_inventory / tests / test_managers.py
1 ##############################################################################
2 # Copyright (c) 2018 Parker Berberian, Sawyer Bergeron, and others.
3 #
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 ##############################################################################
9
10 from django.test import TestCase
11 from django.contrib.auth.models import User
12
13 from resource.inventory_manager import InventoryManager
14 from resource.resource_manager import ResourceManager
15 from resource.models import *
16
17
18 class InventoryManagerTestCase(TestCase):
19
20     def test_singleton(self):
21         instance = InventoryManager.getInstance()
22         self.assertTrue(isinstance(instance, InventoryManager))
23         self.assertTrue(instance is InventoryManager.getInstance())
24
25     def setUp(self):
26         # setup
27         # create lab and give it resources
28         user = User.objects.create(username="username")
29         self.lab = Lab.objects.create(
30             lab_user=user,
31             name='test lab',
32             contact_email='someone@email.com',
33             contact_phone='dont call me'
34         )
35
36         # create hostProfile
37         hostProfile = HostProfile.objects.create(
38             host_type=0,
39             name='Test profile',
40             description='a test profile'
41         )
42         interfaceProfile = InterfaceProfile.objects.create(
43             speed=1000,
44             name='eno3',
45             host=hostProfile
46         )
47         diskProfile = DiskProfile.objects.create(
48             size=1000,
49             media_type="SSD",
50             name='/dev/sda',
51             host=hostProfile
52         )
53         cpuProfile = CpuProfile.objects.create(
54             cores=96,
55             architecture="x86_64",
56             cpus=2,
57             host=hostProfile
58         )
59         ramProfile = RamProfile.objects.create(
60             amount=256,
61             channels=4,
62             host=hostProfile
63         )
64
65         #create GenericResourceBundle
66         genericBundle = GenericResourceBundle.objects.create()
67
68         self.gHost1 = GenericHost.objects.create(
69             bundle=genericBundle,
70             name='generic host 1',
71             profile=hostProfile
72         )
73         self.gHost2 = GenericHost.objects.create(
74             bundle=genericBundle,
75             name='generic host 2',
76             profile=hostProfile
77         )
78
79         #actual resource bundle
80         bundle = ResourceBundle.objects.create(template=genericBundle)
81
82         self.host1 = Host.objects.create(
83             template=self.gHost1,
84             booked=True,
85             name='host1',
86             bundle=bundle,
87             profile=hostProfile,
88             lab=self.lab
89         )
90
91         self.host2 = Host.objects.create(
92             template=self.gHost2,
93             booked=True,
94             name='host2',
95             bundle=bundle,
96             profile=hostProfile,
97             lab=self.lab
98         )
99
100         vlan1 = Vlan.objects.create(vlan_id=300, tagged=False)
101         vlan2 = Vlan.objects.create(vlan_id=300, tagged=False)
102
103         iface1 = Interface.objects.create(
104             mac_address='00:11:22:33:44:55',
105             bus_address='some bus address',
106             switch_name='switch1',
107             port_name='port10',
108             config=vlan1,
109             host=self.host1
110         )
111         iface2 = Interface.objects.create(
112             mac_address='00:11:22:33:44:56',
113             bus_address='some bus address',
114             switch_name='switch1',
115             port_name='port12',
116             config=vlan2,
117             host=self.host2
118         )
119
120     def test_acquire_host(self):
121         host = InventoryManager.getInstance().acquireHost(self.gHost1, self.lab.name)
122         self.assertNotEquals(host, None)
123         self.assertTrue(host.booked)
124         self.assertEqual(host.template, self.gHost1)
125
126     def test_release_host(self):
127         host = InventoryManager.getInstance().acquireHost(self.gHost1, self.lab.name)
128         self.assertTrue(host.booked)
129         InventoryManager.getInstance().releaseHost(host)
130         self.assertFalse(host.booked)
131
132
133 class ResourceManagerTestCase(TestCase):
134     def test_singleton(self):
135         instance = ResourceManager.getInstance()
136         self.assertTrue(isinstance(instance, ResourceManager))
137         self.assertTrue(instance is ResourceManager.getInstance())
138
139     def setUp(self):
140         # setup
141         # create lab and give it resources
142         user = User.objects.create(username="username")
143         self.lab = Lab.objects.create(
144             lab_user=user,
145             name='test lab',
146             contact_email='someone@email.com',
147             contact_phone='dont call me'
148         )
149
150         # create hostProfile
151         hostProfile = HostProfile.objects.create(
152             host_type=0,
153             name='Test profile',
154             description='a test profile'
155         )
156         interfaceProfile = InterfaceProfile.objects.create(
157             speed=1000,
158             name='eno3',
159             host=hostProfile
160         )
161         diskProfile = DiskProfile.objects.create(
162             size=1000,
163             media_type="SSD",
164             name='/dev/sda',
165             host=hostProfile
166         )
167         cpuProfile = CpuProfile.objects.create(
168             cores=96,
169             architecture="x86_64",
170             cpus=2,
171             host=hostProfile
172         )
173         ramProfile = RamProfile.objects.create(
174             amount=256,
175             channels=4,
176             host=hostProfile
177         )
178
179         #create GenericResourceBundle
180         genericBundle = GenericResourceBundle.objects.create()
181
182         self.gHost1 = GenericHost.objects.create(
183             bundle=genericBundle,
184             name='generic host 1',
185             profile=hostProfile
186         )
187         self.gHost2 = GenericHost.objects.create(
188             bundle=genericBundle,
189             name='generic host 2',
190             profile=hostProfile
191         )
192
193         #actual resource bundle
194         bundle = ResourceBundle.objects.create(template=genericBundle)
195
196         self.host1 = Host.objects.create(
197             template=self.gHost1,
198             booked=True,
199             name='host1',
200             bundle=bundle,
201             profile=hostProfile,
202             lab=self.lab
203         )
204
205         self.host2 = Host.objects.create(
206             template=self.gHost2,
207             booked=True,
208             name='host2',
209             bundle=bundle,
210             profile=hostProfile,
211             lab=self.lab
212         )
213
214         vlan1 = Vlan.objects.create(vlan_id=300, tagged=False)
215         vlan2 = Vlan.objects.create(vlan_id=300, tagged=False)
216
217         iface1 = Interface.objects.create(
218             mac_address='00:11:22:33:44:55',
219             bus_address='some bus address',
220             switch_name='switch1',
221             port_name='port10',
222             config=vlan1,
223             host=self.host1
224         )
225         iface2 = Interface.objects.create(
226             mac_address='00:11:22:33:44:56',
227             bus_address='some bus address',
228             switch_name='switch1',
229             port_name='port12',
230             config=vlan2,
231             host=self.host2
232         )
233
234     def test_convert_bundle(self):
235         bundle = ResourceManager.getInstance().convertResoureBundle(self.genericBundle, self.lab.name)
236         # verify bundle configuration