Commit 0991dfca authored by Romain Courteaud's avatar Romain Courteaud

slapos_cloud: preallocate test data

this will break many tests...
parent 64f62351
...@@ -611,6 +611,7 @@ class SlapOSTestCaseMixin(testSlapOSMixin): ...@@ -611,6 +611,7 @@ class SlapOSTestCaseMixin(testSlapOSMixin):
url_string='type%s' % self.generateNewId(), url_string='type%s' % self.generateNewId(),
) )
# XXX XXX XXX XXX replqce is_allocated by allocation="prepare" "allocate" None
def bootstrapAllocableInstanceTree(self, is_allocated=False, shared=False, node="compute"): def bootstrapAllocableInstanceTree(self, is_allocated=False, shared=False, node="compute"):
project = self.addProject() project = self.addProject()
person = self.makePerson(project) person = self.makePerson(project)
...@@ -649,7 +650,7 @@ class SlapOSTestCaseMixin(testSlapOSMixin): ...@@ -649,7 +650,7 @@ class SlapOSTestCaseMixin(testSlapOSMixin):
software_release=release_variation.getUrlString(), software_release=release_variation.getUrlString(),
software_type=type_variation.getTitle(), software_type=type_variation.getTitle(),
instance_xml=self.generateSafeXml(), instance_xml=self.generateSafeXml(),
sla_xml=self.generateSafeXml(), sla_xml=self.generateEmptyXml(),
shared=shared, shared=shared,
software_title='test tree', software_title='test tree',
state='started', state='started',
...@@ -658,11 +659,13 @@ class SlapOSTestCaseMixin(testSlapOSMixin): ...@@ -658,11 +659,13 @@ class SlapOSTestCaseMixin(testSlapOSMixin):
person.requestSoftwareInstance(**request_kw) person.requestSoftwareInstance(**request_kw)
instance_tree = self.portal.REQUEST.get('request_instance_tree') instance_tree = self.portal.REQUEST.get('request_instance_tree')
if is_allocated:
if (node == "instance") and (shared): if (node == "instance") and (shared):
real_compute_node = self.portal.compute_node_module.newContent( real_compute_node = self.portal.compute_node_module.newContent(
portal_type="Compute Node", portal_type="Compute Node",
follow_up_value=project follow_up_value=project,
reference='TEST-%s' % self.generateNewId(),
allocation_scope="open",
capacity_scope='open'
) )
# The edit above will update capacity scope due the interaction workflow # The edit above will update capacity scope due the interaction workflow
# The line above force capacity scope to be open, keeping the previous # The line above force capacity scope to be open, keeping the previous
...@@ -673,12 +676,29 @@ class SlapOSTestCaseMixin(testSlapOSMixin): ...@@ -673,12 +676,29 @@ class SlapOSTestCaseMixin(testSlapOSMixin):
portal_type='Compute Partition', portal_type='Compute Partition',
reference='reference%s' % self.generateNewId() reference='reference%s' % self.generateNewId()
) )
node_instance_tree = self.portal.instance_tree_module.newContent(
title='TEST-%s' % self.generateNewId(),
)
software_instance = self.portal.software_instance_module.newContent( software_instance = self.portal.software_instance_module.newContent(
portal_type="Software Instance", portal_type="Software Instance",
follow_up_value=project, follow_up_value=project,
aggregate_value=partition specialise_value=node_instance_tree,
url_string=release_variation.getUrlString(),
title='TEST-%s' % self.generateNewId(),
reference='TEST-%s' % self.generateNewId(),
source_reference='TEST-%s' % self.generateNewId(),
destination_reference='TEST-%s' % self.generateNewId(),
ssl_certificate='TEST-%s' % self.generateNewId(),
ssl_key='TEST-%s' % self.generateNewId(),
) )
self.tic()
compute_node.edit(specialise_value=software_instance) compute_node.edit(specialise_value=software_instance)
software_instance.edit(aggregate_value=partition)
self.portal.portal_workflow._jumpToStateFor(software_instance, 'start_requested')
self.portal.portal_workflow._jumpToStateFor(software_instance, 'validated')
partition.validate()
partition.markFree()
partition.markBusy()
elif (node == "instance") and (not shared): elif (node == "instance") and (not shared):
raise NotImplementedError('can not allocate on instance node') raise NotImplementedError('can not allocate on instance node')
else: else:
...@@ -687,14 +707,20 @@ class SlapOSTestCaseMixin(testSlapOSMixin): ...@@ -687,14 +707,20 @@ class SlapOSTestCaseMixin(testSlapOSMixin):
reference='reference%s' % self.generateNewId() reference='reference%s' % self.generateNewId()
) )
instance = instance_tree.getSuccessorValue()
instance.edit(aggregate_value=partition)
partition.validate() partition.validate()
partition.markFree() partition.markFree()
#compute_node.validate()
if is_allocated:
instance = instance_tree.getSuccessorValue()
instance.edit(aggregate_value=partition)
if not ((node == "instance") and (shared)):
partition.markBusy() partition.markBusy()
self.tic() self.tic()
return software_product, release_variation, type_variation, compute_node, instance_tree return software_product, release_variation, type_variation, compute_node, partition, instance_tree
def addAllocationSupply(self, title, node, software_product, def addAllocationSupply(self, title, node, software_product,
software_release, software_type, software_release, software_type,
......
...@@ -6,84 +6,107 @@ from unittest import skip ...@@ -6,84 +6,107 @@ from unittest import skip
class TestSlapOSAllocation(SlapOSTestCaseMixin): class TestSlapOSAllocation(SlapOSTestCaseMixin):
def afterSetUp(self): def makeAllocableSoftwareInstance(self, is_allocated=False, shared=False, node="compute"):
SlapOSTestCaseMixin.afterSetUp(self) software_product, release_variation, type_variation, compute_node, partition, instance_tree = self.bootstrapAllocableInstanceTree(is_allocated=is_allocated, shared=shared, node=node)
self.project = self.addProject() self.addAllocationSupply("for compute node", compute_node, software_product,
release_variation, type_variation)
real_compute_node = partition.getParentValue()
self._installSoftware(
real_compute_node,
release_variation.getUrlString()
)
self.tic()
"""
if not shared:
partition = compute_node.newContent(
portal_type='Compute Partition',
reference='reference%s' % self.generateNewId()
)
partition.validate()
partition.markFree()
self.tic()"""
def _makeSlaveTree(self, project, requested_template_id='template_slave_instance'):
self.assertEqual(real_compute_node.getAllocationScope(), "open")
self.assertEqual(real_compute_node.getCapacityScope(), "open")
software_instance = instance_tree.getSuccessorValue()
return software_instance, compute_node, partition
def _installSoftware(self, compute_node, url):
software_installation = self.portal.software_installation_module\
.template_software_installation.Base_createCloneDocument(batch_mode=1)
software_installation.edit(url_string=url,
reference='TESTSOFTINST-%s' % self.generateNewId(),
aggregate=compute_node.getRelativeUrl())
software_installation.validate()
software_installation.requestStart()
self.tic()
compute_node.reindexObject()
self.tic()
def _makeSlaveTreeXXX(self, project, requested_template_id='template_slave_instance'):
SlapOSTestCaseMixin._makeTree(self, project, SlapOSTestCaseMixin._makeTree(self, project,
requested_template_id=requested_template_id) requested_template_id=requested_template_id)
def test_person_allocation_checked(self): def test_person_allocation_checked(self):
self._makeTree(self.project) software_instance, _, _ = self.makeAllocableSoftwareInstance()
with TemporaryAlarmScript(self.portal, 'Person_isAllowedToAllocate', with TemporaryAlarmScript(self.portal, 'Person_isAllowedToAllocate',
fake_return="True"): fake_return="True"):
self.software_instance.SoftwareInstance_tryToAllocatePartition() software_instance.SoftwareInstance_tryToAllocatePartition()
self.assertEqual( self.assertEqual(
'Visited by Person_isAllowedToAllocate', 'Visited by Person_isAllowedToAllocate',
self.person_user.workflow_history['edit_workflow'][-1]['comment']) software_instance.getSpecialiseValue().getDestinationSectionValue().workflow_history['edit_workflow'][-1]['comment'])
def test_no_allocation_if_person_is_not_allowed(self): def test_no_allocation_if_person_is_not_allowed(self):
self._makeTree(self.project) software_instance, _, _ = self.makeAllocableSoftwareInstance()
self._makeComputeNode(self.project)
self._installSoftware(self.compute_node,
self.software_instance.getUrlString())
self.assertEqual(None, self.software_instance.getAggregateValue( self.assertEqual(None, software_instance.getAggregateValue(
portal_type='Compute Partition')) portal_type='Compute Partition'))
with TemporaryAlarmScript(self.portal, 'Person_isAllowedToAllocate', with TemporaryAlarmScript(self.portal, 'Person_isAllowedToAllocate',
fake_return="False"): fake_return="False"):
self.software_instance.SoftwareInstance_tryToAllocatePartition() software_instance.SoftwareInstance_tryToAllocatePartition()
self.assertEqual(None, self.software_instance.getAggregateValue( self.assertEqual(None, software_instance.getAggregateValue(
portal_type='Compute Partition')) portal_type='Compute Partition'))
self.assertEqual( self.assertEqual(
'Allocation failed: Allocation disallowed', 'Allocation failed: Allocation disallowed',
self.software_instance.workflow_history['edit_workflow'][-1]['comment']) software_instance.workflow_history['edit_workflow'][-1]['comment'])
@simulate('Person_isAllowedToAllocate', '*args, **kwargs', 'return True') @simulate('Person_isAllowedToAllocate', '*args, **kwargs', 'return True')
def test_allocation_no_free_partition(self): def test_allocation_no_free_partition(self):
self._makeTree(self.project) software_instance, _, partition = self.makeAllocableSoftwareInstance()
partition.markBusy()
self.tic()
self.assertEqual(None, self.software_instance.getAggregateValue( self.assertEqual(None, software_instance.getAggregateValue(
portal_type='Compute Partition')) portal_type='Compute Partition'))
self.software_instance.SoftwareInstance_tryToAllocatePartition() software_instance.SoftwareInstance_tryToAllocatePartition()
self.assertEqual(None, self.software_instance.getAggregateValue( self.assertEqual(None, software_instance.getAggregateValue(
portal_type='Compute Partition')) portal_type='Compute Partition'))
@simulate('Person_isAllowedToAllocate', '*args, **kwargs', 'return True') @simulate('Person_isAllowedToAllocate', '*args, **kwargs', 'return True')
def test_allocation_no_host_instance(self): def test_allocation_no_host_instance(self):
self._makeSlaveTree(self.project) software_instance, _, partition = self.makeAllocableSoftwareInstance(shared=True, node="instance")
partition.markFree()
self.tic()
self.assertEqual(None, self.software_instance.getAggregateValue( self.assertEqual(None, software_instance.getAggregateValue(
portal_type='Compute Partition')) portal_type='Compute Partition'))
self.software_instance.SoftwareInstance_tryToAllocatePartition() software_instance.SoftwareInstance_tryToAllocatePartition()
self.assertEqual(None, self.software_instance.getAggregateValue( self.assertEqual(None, software_instance.getAggregateValue(
portal_type='Compute Partition')) portal_type='Compute Partition'))
def _installSoftware(self, compute_node, url):
software_installation = self.portal.software_installation_module\
.template_software_installation.Base_createCloneDocument(batch_mode=1)
software_installation.edit(url_string=url,
reference='TESTSOFTINST-%s' % self.generateNewId(),
aggregate=compute_node.getRelativeUrl())
software_installation.validate()
software_installation.requestStart()
self.tic()
@simulate('Person_isAllowedToAllocate', '*args, **kwargs', 'return True') @simulate('Person_isAllowedToAllocate', '*args, **kwargs', 'return True')
def test_allocation_free_partition(self): def test_allocation_free_partition(self):
self._makeTree(self.project) software_instance, _, partition = self.makeAllocableSoftwareInstance()
self._makeComputeNode(self.project) self.assertEqual(None, software_instance.getAggregateValue(
self._installSoftware(self.compute_node,
self.software_instance.getUrlString())
self.assertEqual(None, self.software_instance.getAggregateValue(
portal_type='Compute Partition')) portal_type='Compute Partition'))
self.software_instance.SoftwareInstance_tryToAllocatePartition() software_instance.SoftwareInstance_tryToAllocatePartition()
self.assertEqual(self.partition.getRelativeUrl(), self.assertEqual(partition.getRelativeUrl(),
self.software_instance.getAggregate(portal_type='Compute Partition')) software_instance.getAggregate(portal_type='Compute Partition'))
def _allocateHost(self, software_instance, compute_partition): def _allocateHost(self, software_instance, compute_partition):
software_instance.edit( software_instance.edit(
...@@ -94,103 +117,83 @@ class TestSlapOSAllocation(SlapOSTestCaseMixin): ...@@ -94,103 +117,83 @@ class TestSlapOSAllocation(SlapOSTestCaseMixin):
@simulate('Person_isAllowedToAllocate', '*args, **kwargs', 'return True') @simulate('Person_isAllowedToAllocate', '*args, **kwargs', 'return True')
def test_allocation_host_instance(self): def test_allocation_host_instance(self):
self._makeSlaveTree(self.project) software_instance, _, partition = self.makeAllocableSoftwareInstance(shared=True, node="instance")
self._makeComputeNode(self.project) self.assertEqual(None, software_instance.getAggregateValue(
self._allocateHost(self.requested_software_instance,
self.partition)
self.assertEqual(None, self.software_instance.getAggregateValue(
portal_type='Compute Partition')) portal_type='Compute Partition'))
self.software_instance.SoftwareInstance_tryToAllocatePartition() software_instance.SoftwareInstance_tryToAllocatePartition()
self.assertEqual(self.partition.getRelativeUrl(), self.assertEqual(partition.getRelativeUrl(),
self.software_instance.getAggregate(portal_type='Compute Partition')) software_instance.getAggregate(portal_type='Compute Partition'))
@simulate('Person_isAllowedToAllocate', '*args, **kwargs', 'return True') @simulate('Person_isAllowedToAllocate', '*args, **kwargs', 'return True')
def test_allocation_capacity_scope_close(self): def test_allocation_capacity_scope_close(self):
self._makeTree(self.project) software_instance, _, partition = self.makeAllocableSoftwareInstance()
partition.getParentValue().edit(capacity_scope='close')
self._makeComputeNode(self.project)
self._installSoftware(self.compute_node,
self.software_instance.getUrlString())
self.compute_node.edit(capacity_scope='close')
self.tic() self.tic()
self.assertEqual(None, self.software_instance.getAggregateValue( self.assertEqual(None, software_instance.getAggregateValue(
portal_type='Compute Partition')) portal_type='Compute Partition'))
self.software_instance.SoftwareInstance_tryToAllocatePartition() software_instance.SoftwareInstance_tryToAllocatePartition()
self.assertEqual(None, self.assertEqual(None,
self.software_instance.getAggregate(portal_type='Compute Partition')) software_instance.getAggregate(portal_type='Compute Partition'))
@simulate('Person_isAllowedToAllocate', '*args, **kwargs', 'return True') @simulate('Person_isAllowedToAllocate', '*args, **kwargs', 'return True')
def test_allocation_host_capacity_scope_close(self): def test_allocation_host_capacity_scope_close(self):
self._makeSlaveTree(self.project) software_instance, _, partition = self.makeAllocableSoftwareInstance(shared=True, node="instance")
partition.getParentValue().edit(capacity_scope='close')
self._makeComputeNode(self.project)
self._allocateHost(self.requested_software_instance,
self.partition)
self.compute_node.edit(capacity_scope='close')
self.tic() self.tic()
self.assertEqual(None, self.software_instance.getAggregateValue( self.assertEqual(None, software_instance.getAggregateValue(
portal_type='Compute Partition')) portal_type='Compute Partition'))
self.software_instance.SoftwareInstance_tryToAllocatePartition() software_instance.SoftwareInstance_tryToAllocatePartition()
self.assertEqual(None, self.assertEqual(None,
self.software_instance.getAggregate(portal_type='Compute Partition')) software_instance.getAggregate(portal_type='Compute Partition'))
@simulate('Person_isAllowedToAllocate', '*args, **kwargs', 'return True') @simulate('Person_isAllowedToAllocate', '*args, **kwargs', 'return True')
def test_allocation_allocation_scope_close(self): def test_allocation_allocation_scope_close(self):
self._makeTree(self.project) software_instance, _, partition = self.makeAllocableSoftwareInstance()
partition.getParentValue().edit(allocation_scope='close')
self._makeComputeNode(self.project)
self._installSoftware(self.compute_node,
self.software_instance.getUrlString())
self.compute_node.edit(allocation_scope='close')
self.tic() self.tic()
self.assertEqual(None, self.software_instance.getAggregateValue( self.assertEqual(None, software_instance.getAggregateValue(
portal_type='Compute Partition')) portal_type='Compute Partition'))
self.software_instance.SoftwareInstance_tryToAllocatePartition() software_instance.SoftwareInstance_tryToAllocatePartition()
self.assertEqual(None, self.assertEqual(None,
self.software_instance.getAggregate(portal_type='Compute Partition')) software_instance.getAggregate(portal_type='Compute Partition'))
@simulate('Person_isAllowedToAllocate', '*args, **kwargs', 'return True') @simulate('Person_isAllowedToAllocate', '*args, **kwargs', 'return True')
def test_allocation_host_allocation_scope_close(self): def test_allocation_host_allocation_scope_close(self):
self._makeSlaveTree(self.project) software_instance, _, partition = self.makeAllocableSoftwareInstance(shared=True, node="instance")
partition.getParentValue().edit(allocation_scope='close')
self._makeComputeNode(self.project)
self._allocateHost(self.requested_software_instance,
self.partition)
self.compute_node.edit(allocation_scope='close')
self.tic() self.tic()
self.assertEqual(None, self.software_instance.getAggregateValue( self.assertEqual(None, software_instance.getAggregateValue(
portal_type='Compute Partition')) portal_type='Compute Partition'))
self.software_instance.SoftwareInstance_tryToAllocatePartition() software_instance.SoftwareInstance_tryToAllocatePartition()
self.assertEqual(None, self.assertEqual(None,
self.software_instance.getAggregate(portal_type='Compute Partition')) software_instance.getAggregate(portal_type='Compute Partition'))
@simulate('Person_isAllowedToAllocate', '*args, **kwargs', 'return True') @simulate('Person_isAllowedToAllocate', '*args, **kwargs', 'return True')
def test_allocation_does_not_fail_on_instance_with_damaged_sla_xml(self): def test_allocation_does_not_fail_on_instance_with_damaged_sla_xml(self):
self._makeTree(self.project) software_instance, _, _ = self.makeAllocableSoftwareInstance()
self.software_instance.setSlaXml('this is not xml') software_instance.setSlaXml('this is not xml')
self.assertEqual(None, self.software_instance.getAggregateValue( self.assertEqual(None, software_instance.getAggregateValue(
portal_type='Compute Partition')) portal_type='Compute Partition'))
self.software_instance.SoftwareInstance_tryToAllocatePartition() software_instance.SoftwareInstance_tryToAllocatePartition()
self.assertEqual(None, self.software_instance.getAggregateValue( self.assertEqual(None, software_instance.getAggregateValue(
portal_type='Compute Partition')) portal_type='Compute Partition'))
transaction.abort() transaction.abort()
@simulate('Person_isAllowedToAllocate', '*args, **kwargs', 'return True') @simulate('Person_isAllowedToAllocate', '*args, **kwargs', 'return True')
def test_allocation_does_not_fail_on_slave_with_damaged_sla_xml(self): def test_allocation_does_not_fail_on_slave_with_damaged_sla_xml(self):
self._makeSlaveTree(self.project) software_instance, _, _ = self.makeAllocableSoftwareInstance(shared=True, node="instance")
self.software_instance.setSlaXml('this is not xml') software_instance.setSlaXml('this is not xml')
self.assertEqual(None, self.software_instance.getAggregateValue( self.assertEqual(None, software_instance.getAggregateValue(
portal_type='Compute Partition')) portal_type='Compute Partition'))
self.software_instance.SoftwareInstance_tryToAllocatePartition() software_instance.SoftwareInstance_tryToAllocatePartition()
self.assertEqual(None, self.software_instance.getAggregateValue( self.assertEqual(None, software_instance.getAggregateValue(
portal_type='Compute Partition')) portal_type='Compute Partition'))
transaction.abort() transaction.abort()
...@@ -199,7 +202,7 @@ class TestSlapOSAllocation(SlapOSTestCaseMixin): ...@@ -199,7 +202,7 @@ class TestSlapOSAllocation(SlapOSTestCaseMixin):
################################################## ##################################################
@simulate('Person_isAllowedToAllocate', '*args, **kwargs', 'return True') @simulate('Person_isAllowedToAllocate', '*args, **kwargs', 'return True')
def test_alarm_software_instance_unallocated(self): def test_alarm_software_instance_unallocated(self):
self._makeTree(self.project) software_instance, _, _ = self.makeAllocableSoftwareInstance()
with TemporaryAlarmScript(self.portal, 'SoftwareInstance_tryToAllocatePartition'): with TemporaryAlarmScript(self.portal, 'SoftwareInstance_tryToAllocatePartition'):
self.portal.portal_alarms.slapos_allocate_instance.activeSense() self.portal.portal_alarms.slapos_allocate_instance.activeSense()
...@@ -207,11 +210,11 @@ class TestSlapOSAllocation(SlapOSTestCaseMixin): ...@@ -207,11 +210,11 @@ class TestSlapOSAllocation(SlapOSTestCaseMixin):
self.assertEqual( self.assertEqual(
'Visited by SoftwareInstance_tryToAllocatePartition', 'Visited by SoftwareInstance_tryToAllocatePartition',
self.software_instance.workflow_history['edit_workflow'][-1]['comment']) software_instance.workflow_history['edit_workflow'][-1]['comment'])
@simulate('Person_isAllowedToAllocate', '*args, **kwargs', 'return True') @simulate('Person_isAllowedToAllocate', '*args, **kwargs', 'return True')
def test_alarm_slave_instance_unallocated(self): def test_alarm_slave_instance_unallocated(self):
self._makeSlaveTree(self.project) software_instance, _, _ = self.makeAllocableSoftwareInstance(shared=True, node="instance")
with TemporaryAlarmScript(self.portal, 'SoftwareInstance_tryToAllocatePartition'): with TemporaryAlarmScript(self.portal, 'SoftwareInstance_tryToAllocatePartition'):
self.portal.portal_alarms.slapos_allocate_instance.activeSense() self.portal.portal_alarms.slapos_allocate_instance.activeSense()
...@@ -219,15 +222,11 @@ class TestSlapOSAllocation(SlapOSTestCaseMixin): ...@@ -219,15 +222,11 @@ class TestSlapOSAllocation(SlapOSTestCaseMixin):
self.assertEqual( self.assertEqual(
'Visited by SoftwareInstance_tryToAllocatePartition', 'Visited by SoftwareInstance_tryToAllocatePartition',
self.software_instance.workflow_history['edit_workflow'][-1]['comment']) software_instance.workflow_history['edit_workflow'][-1]['comment'])
@simulate('Person_isAllowedToAllocate', '*args, **kwargs', 'return True') @simulate('Person_isAllowedToAllocate', '*args, **kwargs', 'return True')
def test_alarm_software_instance_allocated(self): def test_alarm_software_instance_allocated(self):
self._makeTree(self.project) software_instance, _, _ = self.makeAllocableSoftwareInstance(is_allocated=True)
self._makeComputeNode(self.project)
self.software_instance.setAggregate(self.partition.getRelativeUrl())
self.tic()
with TemporaryAlarmScript(self.portal, 'SoftwareInstance_tryToAllocatePartition'): with TemporaryAlarmScript(self.portal, 'SoftwareInstance_tryToAllocatePartition'):
self.portal.portal_alarms.slapos_allocate_instance.activeSense() self.portal.portal_alarms.slapos_allocate_instance.activeSense()
...@@ -235,15 +234,11 @@ class TestSlapOSAllocation(SlapOSTestCaseMixin): ...@@ -235,15 +234,11 @@ class TestSlapOSAllocation(SlapOSTestCaseMixin):
self.assertNotEqual( self.assertNotEqual(
'Visited by SoftwareInstance_tryToAllocatePartition', 'Visited by SoftwareInstance_tryToAllocatePartition',
self.software_instance.workflow_history['edit_workflow'][-1]['comment']) software_instance.workflow_history['edit_workflow'][-1]['comment'])
@simulate('Person_isAllowedToAllocate', '*args, **kwargs', 'return True') @simulate('Person_isAllowedToAllocate', '*args, **kwargs', 'return True')
def test_alarm_slave_instance_allocated(self): def test_alarm_slave_instance_allocated(self):
self._makeSlaveTree(self.project) software_instance, _, _ = self.makeAllocableSoftwareInstance(is_allocated=True, shared=True, node="instance")
self._makeComputeNode(self.project)
self.software_instance.setAggregate(self.partition.getRelativeUrl())
self.tic()
with TemporaryAlarmScript(self.portal, 'SoftwareInstance_tryToAllocatePartition'): with TemporaryAlarmScript(self.portal, 'SoftwareInstance_tryToAllocatePartition'):
self.portal.portal_alarms.slapos_allocate_instance.activeSense() self.portal.portal_alarms.slapos_allocate_instance.activeSense()
...@@ -251,69 +246,59 @@ class TestSlapOSAllocation(SlapOSTestCaseMixin): ...@@ -251,69 +246,59 @@ class TestSlapOSAllocation(SlapOSTestCaseMixin):
self.assertNotEqual( self.assertNotEqual(
'Visited by SoftwareInstance_tryToAllocatePartition', 'Visited by SoftwareInstance_tryToAllocatePartition',
self.software_instance.workflow_history['edit_workflow'][-1]['comment']) software_instance.workflow_history['edit_workflow'][-1]['comment'])
################################################## ##################################################
# SoftwareInstance_tryToAllocatePartition # SoftwareInstance_tryToAllocatePartition
################################################## ##################################################
@simulate('Person_isAllowedToAllocate', '*args, **kwargs', 'return True') @simulate('Person_isAllowedToAllocate', '*args, **kwargs', 'return True')
def test_allocation_computer_guid(self): def test_allocation_computer_guid(self):
self._makeTree(self.project) software_instance, compute_node, partition = self.makeAllocableSoftwareInstance()
self._makeComputeNode(self.project) self.assertEqual(None, software_instance.getAggregateValue(
self.assertEqual(self.compute_node.getAllocationScope(), "open")
self.assertEqual(self.compute_node.getCapacityScope(), "open")
self._installSoftware(self.compute_node,
self.software_instance.getUrlString())
self.assertEqual(None, self.software_instance.getAggregateValue(
portal_type='Compute Partition')) portal_type='Compute Partition'))
self.software_instance.setSlaXml("""<?xml version='1.0' encoding='utf-8'?> software_instance.setSlaXml("""<?xml version='1.0' encoding='utf-8'?>
<instance> <instance>
<parameter id='computer_guid'>%s</parameter> <parameter id='computer_guid'>%s</parameter>
</instance>""" % '%s_foo' % self.partition.getParentValue().getReference()) </instance>""" % '%s_foo' % compute_node.getReference())
self.software_instance.SoftwareInstance_tryToAllocatePartition() software_instance.SoftwareInstance_tryToAllocatePartition()
self.assertEqual(None, self.assertEqual(None,
self.software_instance.getAggregate(portal_type='Compute Partition')) software_instance.getAggregate(portal_type='Compute Partition'))
self.software_instance.setSlaXml("""<?xml version='1.0' encoding='utf-8'?> software_instance.setSlaXml("""<?xml version='1.0' encoding='utf-8'?>
<instance> <instance>
<parameter id='computer_guid'>%s</parameter> <parameter id='computer_guid'>%s</parameter>
</instance>""" % '%s' % self.partition.getParentValue().getReference()) </instance>""" % '%s' % compute_node.getReference())
self.software_instance.SoftwareInstance_tryToAllocatePartition() software_instance.SoftwareInstance_tryToAllocatePartition()
self.assertEqual(self.partition.getRelativeUrl(), self.assertEqual(partition.getRelativeUrl(),
self.software_instance.getAggregate(portal_type='Compute Partition')) software_instance.getAggregate(portal_type='Compute Partition'))
@simulate('Person_isAllowedToAllocate', '*args, **kwargs', 'return True') @simulate('Person_isAllowedToAllocate', '*args, **kwargs', 'return True')
def test_allocation_instance_guid(self): def test_allocation_instance_guid(self):
self._makeSlaveTree(self.project) software_instance, _, partition = self.makeAllocableSoftwareInstance(shared=True, node="instance")
requested_software_instance = partition.getAggregateRelatedValue()
self._makeComputeNode(self.project) self.assertEqual(None, software_instance.getAggregateValue(
self._allocateHost(self.requested_software_instance,
self.partition)
self.assertEqual(None, self.software_instance.getAggregateValue(
portal_type='Compute Partition')) portal_type='Compute Partition'))
self.software_instance.setSlaXml("""<?xml version='1.0' encoding='utf-8'?> software_instance.setSlaXml("""<?xml version='1.0' encoding='utf-8'?>
<instance> <instance>
<parameter id='instance_guid'>%s</parameter> <parameter id='instance_guid'>%s</parameter>
</instance>""" % '%s_foo' % \ </instance>""" % '%s_foo' % \
self.requested_software_instance.getReference()) requested_software_instance.getReference())
self.software_instance.SoftwareInstance_tryToAllocatePartition() software_instance.SoftwareInstance_tryToAllocatePartition()
self.assertEqual(None, self.assertEqual(None,
self.software_instance.getAggregate(portal_type='Compute Partition')) software_instance.getAggregate(portal_type='Compute Partition'))
self.software_instance.setSlaXml("""<?xml version='1.0' encoding='utf-8'?> software_instance.setSlaXml("""<?xml version='1.0' encoding='utf-8'?>
<instance> <instance>
<parameter id='instance_guid'>%s</parameter> <parameter id='instance_guid'>%s</parameter>
</instance>""" % '%s' % \ </instance>""" % '%s' % \
self.requested_software_instance.getReference()) requested_software_instance.getReference())
self.software_instance.SoftwareInstance_tryToAllocatePartition() software_instance.SoftwareInstance_tryToAllocatePartition()
self.assertEqual(self.partition.getRelativeUrl(), self.assertEqual(partition.getRelativeUrl(),
self.software_instance.getAggregate(portal_type='Compute Partition')) software_instance.getAggregate(portal_type='Compute Partition'))
@simulate('Person_isAllowedToAllocate', '*args, **kwargs', 'return True') @simulate('Person_isAllowedToAllocate', '*args, **kwargs', 'return True')
def test_allocation_network_guid(self): def test_allocation_network_guid(self):
...@@ -657,51 +642,29 @@ class TestSlapOSAllocation(SlapOSTestCaseMixin): ...@@ -657,51 +642,29 @@ class TestSlapOSAllocation(SlapOSTestCaseMixin):
@simulate('Person_isAllowedToAllocate', '*args, **kwargs', 'return True') @simulate('Person_isAllowedToAllocate', '*args, **kwargs', 'return True')
def test_allocation_unexpected_sla_parameter(self): def test_allocation_unexpected_sla_parameter(self):
self._makeTree(self.project) software_instance, _, _ = self.makeAllocableSoftwareInstance()
self._makeComputeNode(self.project)
self._installSoftware(self.compute_node,
self.software_instance.getUrlString())
self.assertEqual(None, self.software_instance.getAggregateValue( self.assertEqual(None, software_instance.getAggregateValue(
portal_type='Compute Partition')) portal_type='Compute Partition'))
self.software_instance.setSlaXml("""<?xml version='1.0' encoding='utf-8'?> software_instance.setSlaXml("""<?xml version='1.0' encoding='utf-8'?>
<instance> <instance>
<parameter id='foo'>bar</parameter> <parameter id='foo'>bar</parameter>
</instance>""") </instance>""")
self.software_instance.SoftwareInstance_tryToAllocatePartition() software_instance.SoftwareInstance_tryToAllocatePartition()
self.assertEqual(None, self.assertEqual(None,
self.software_instance.getAggregate(portal_type='Compute Partition')) software_instance.getAggregate(portal_type='Compute Partition'))
def check_allocation_category_sla(self, base_category, compute_node_category, def check_allocation_category_sla(self, base_category, compute_node_category,
other_category): other_category):
software_product, release_variation, type_variation, compute_node, instance_tree = self.bootstrapAllocableInstanceTree() software_instance, compute_node, partition = self.makeAllocableSoftwareInstance()
self.addAllocationSupply("for compute node", compute_node, software_product,
release_variation, type_variation)
self._installSoftware(
compute_node,
release_variation.getUrlString()
)
self.tic()
partition = compute_node.newContent(
portal_type='Compute Partition',
reference='reference%s' % self.generateNewId()
)
partition.validate()
partition.markFree()
self.assertEqual(compute_node.getAllocationScope(), "open")
self.assertEqual(compute_node.getCapacityScope(), "open")
compute_node.edit(**{base_category: compute_node_category}) compute_node.edit(**{base_category: compute_node_category})
self.assertEqual(compute_node.getAllocationScope(), "open") self.assertEqual(compute_node.getAllocationScope(), "open")
self.assertEqual(compute_node.getCapacityScope(), "open") self.assertEqual(compute_node.getCapacityScope(), "open")
self.tic() self.tic()
software_instance = instance_tree.getSuccessorValue()
self.assertEqual(None, software_instance.getAggregateValue( self.assertEqual(None, software_instance.getAggregateValue(
portal_type='Compute Partition')) portal_type='Compute Partition'))
...@@ -731,7 +694,7 @@ class TestSlapOSAllocation(SlapOSTestCaseMixin): ...@@ -731,7 +694,7 @@ class TestSlapOSAllocation(SlapOSTestCaseMixin):
software_instance.SoftwareInstance_tryToAllocatePartition() software_instance.SoftwareInstance_tryToAllocatePartition()
self.assertEqual( self.assertEqual(
compute_node.contentValues(portal_type='Compute Partition')[0].getRelativeUrl(), partition.getRelativeUrl(),
software_instance.getAggregate(portal_type='Compute Partition'), software_instance.getAggregate(portal_type='Compute Partition'),
software_instance.getRelativeUrl() software_instance.getRelativeUrl()
) )
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment