Commit b56538c9 authored by Romain Courteaud's avatar Romain Courteaud

slapos_cloud: fix SLA tests

parent dea873c9
...@@ -81,7 +81,7 @@ def withAbort(func): ...@@ -81,7 +81,7 @@ def withAbort(func):
class TemporaryAlarmScript(object): class TemporaryAlarmScript(object):
""" """
Context manager for temporary python scripts Context manager for temporary alarm python scripts
""" """
def __init__(self, portal, script_name, fake_return="", attribute=None): def __init__(self, portal, script_name, fake_return="", attribute=None):
self.script_name = script_name self.script_name = script_name
...@@ -611,6 +611,91 @@ class SlapOSTestCaseMixin(testSlapOSMixin): ...@@ -611,6 +611,91 @@ class SlapOSTestCaseMixin(testSlapOSMixin):
url_string='type%s' % self.generateNewId(), url_string='type%s' % self.generateNewId(),
) )
def bootstrapAllocableInstanceTree(self, is_allocated=False, shared=False, node="compute"):
project = self.addProject()
person = self.makePerson(project)
software_product = self._makeSoftwareProduct(project)
release_variation = software_product.contentValues(portal_type='Software Product Release Variation')[0]
type_variation = software_product.contentValues(portal_type='Software Product Type Variation')[0]
self.tic()
if node == "compute":
person.requestComputeNode(compute_node_title='test compute node',
project_reference=project.getReference())
self.tic()
compute_node = self.portal.portal_catalog.getResultValue(
portal_type='Compute Node',
reference=self.portal.REQUEST.get('compute_node_reference')
)
assert compute_node is not None
# The edit above will update capacity scope due the interaction workflow
# The line above force capacity scope to be open, keeping the previous
# behaviour.
compute_node.edit(capacity_scope='open')
elif node == "remote":
compute_node = self.portal.compute_node_module.newContent(
portal_type="Remote Node",
follow_up_value=project
)
elif node == "instance":
compute_node = self.portal.compute_node_module.newContent(
portal_type="Instance Node",
follow_up_value=project
)
else:
raise ValueError("Unsupported node value: %s" % node)
request_kw = dict(
software_release=release_variation.getUrlString(),
software_type=type_variation.getTitle(),
instance_xml=self.generateSafeXml(),
sla_xml=self.generateSafeXml(),
shared=shared,
software_title='test tree',
state='started',
project_reference=project.getReference()
)
person.requestSoftwareInstance(**request_kw)
instance_tree = self.portal.REQUEST.get('request_instance_tree')
if is_allocated:
if (node == "instance") and (shared):
real_compute_node = self.portal.compute_node_module.newContent(
portal_type="Compute Node",
follow_up_value=project
)
# The edit above will update capacity scope due the interaction workflow
# The line above force capacity scope to be open, keeping the previous
# behaviour.
real_compute_node.edit(capacity_scope='open')
real_compute_node.validate()
partition = real_compute_node.newContent(
portal_type='Compute Partition',
reference='reference%s' % self.generateNewId()
)
software_instance = self.portal.software_instance_module.newContent(
portal_type="Software Instance",
follow_up_value=project,
aggregate_value=partition
)
compute_node.edit(specialise_value=software_instance)
elif (node == "instance") and (not shared):
raise NotImplementedError('can not allocate on instance node')
else:
partition = compute_node.newContent(
portal_type='Compute Partition',
reference='reference%s' % self.generateNewId()
)
instance = instance_tree.getSuccessorValue()
instance.edit(aggregate_value=partition)
partition.validate()
partition.markFree()
partition.markBusy()
self.tic()
return software_product, release_variation, type_variation, compute_node, instance_tree
def addAllocationSupply(self, title, node, software_product, def addAllocationSupply(self, title, node, software_product,
software_release, software_type, software_release, software_type,
destination_value=None, destination_value=None,
......
...@@ -157,13 +157,15 @@ class TestSlapOSCloudUpgrader(SlapOSTestCaseMixin): ...@@ -157,13 +157,15 @@ class TestSlapOSCloudUpgrader(SlapOSTestCaseMixin):
computer_module = self.portal.getDefaultModule('Computer') computer_module = self.portal.getDefaultModule('Computer')
computer_nothing_to_migrate = computer_module.newContent( computer_nothing_to_migrate = computer_module.newContent(
portal_type='Computer' portal_type='Computer',
title='not to migrate'
) )
computer_to_migrate = computer_module.newContent( computer_to_migrate = computer_module.newContent(
portal_type='Computer', portal_type='Computer',
quantity=99, quantity=99,
bar='foo3' bar='foo3',
title='to migrate'
) )
# Create fake workflow history # Create fake workflow history
......
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