Commit 4daf4d85 authored by Romain Courteaud's avatar Romain Courteaud

Test slave instance allocation.

parent 8eb6e1d3
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="Slave Instance" module="erp5.portal_type"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_Access_contents_information_Permission</string> </key>
<value>
<tuple>
<string>Assignee</string>
<string>Assignor</string>
<string>Associate</string>
<string>Auditor</string>
<string>Manager</string>
<string>Owner</string>
</tuple>
</value>
</item>
<item>
<key> <string>_Add_portal_content_Permission</string> </key>
<value>
<tuple>
<string>Assignee</string>
<string>Assignor</string>
<string>Associate</string>
<string>Manager</string>
<string>Owner</string>
</tuple>
</value>
</item>
<item>
<key> <string>_Delete_objects_Permission</string> </key>
<value>
<tuple>
<string>Assignee</string>
<string>Assignor</string>
<string>Associate</string>
<string>Manager</string>
<string>Owner</string>
</tuple>
</value>
</item>
<item>
<key> <string>_Modify_portal_content_Permission</string> </key>
<value>
<tuple>
<string>Assignee</string>
<string>Assignor</string>
<string>Associate</string>
<string>Manager</string>
<string>Owner</string>
</tuple>
</value>
</item>
<item>
<key> <string>_View_Permission</string> </key>
<value>
<tuple>
<string>Assignee</string>
<string>Assignor</string>
<string>Associate</string>
<string>Auditor</string>
<string>Manager</string>
<string>Owner</string>
</tuple>
</value>
</item>
<item>
<key> <string>connection_xml</string> </key>
<value> <string encoding="cdata"><![CDATA[
<?xml version=\'1.0\' encoding=\'utf-8\'?>\n
<instance>\n
<parameter id="parameter1">valueof1</parameter>\n
<parameter id="parameter2">https://niut:pass@example.com:4567/arfarf/oink?m=1#4.5</parameter>\n
</instance>\n
]]></string> </value>
</item>
<item>
<key> <string>default_destination_reference</string> </key>
<value> <string>02</string> </value>
</item>
<item>
<key> <string>default_reference</string> </key>
<value> <string>SItestVifibSlaposRestAPIV1.TestVifibSlaposRestAPIV1.test_instance_destruction_started0.325656030454</string> </value>
</item>
<item>
<key> <string>default_source_reference</string> </key>
<value> <string>RootSoftwareInstance</string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>template_slave_instance</string> </value>
</item>
<item>
<key> <string>portal_type</string> </key>
<value> <string>Slave Instance</string> </value>
</item>
<item>
<key> <string>sla_xml</string> </key>
<value> <string encoding="cdata"><![CDATA[
<?xml version=\'1.0\' encoding=\'utf-8\'?>\n
<instance>\n
<parameter id="computer_guid">SOMECOMP</parameter>\n
</instance>\n
]]></string> </value>
</item>
<item>
<key> <string>text_content</string> </key>
<value> <string encoding="cdata"><![CDATA[
<?xml version="1.0" encoding="utf-8"?>\n
<instance>\n
<parameter id="parameter1">valueof1</parameter>\n
<parameter id="parameter2">valueof2</parameter>\n
</instance>
]]></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>Template Slave Instance</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
...@@ -6,15 +6,24 @@ from Products.ERP5Type.tests.utils import createZODBPythonScript ...@@ -6,15 +6,24 @@ from Products.ERP5Type.tests.utils import createZODBPythonScript
class TestSlapOSAllocation(testSlapOSMixin): class TestSlapOSAllocation(testSlapOSMixin):
def afterSetUp(self): def _makeSlaveTree(self, requested_template_id='template_slave_instance'):
super(TestSlapOSAllocation, self).afterSetUp() super(TestSlapOSAllocation, self).\
_makeTree(requested_template_id=requested_template_id)
def test_allocation_no_free_partition(self):
self._makeTree() self._makeTree()
self.login() self.login()
def beforeTearDown(self): self.assertEqual(None, self.software_instance.getAggregateValue(
pass portal_type='Computer Partition'))
self.software_instance.SoftwareInstance_tryToAllocatePartition()
self.assertEqual(None, self.software_instance.getAggregateValue(
portal_type='Computer Partition'))
def test_allocation_no_host_instance(self):
self._makeSlaveTree()
self.login()
def test_allocation_no_free_partition(self):
self.assertEqual(None, self.software_instance.getAggregateValue( self.assertEqual(None, self.software_instance.getAggregateValue(
portal_type='Computer Partition')) portal_type='Computer Partition'))
self.software_instance.SoftwareInstance_tryToAllocatePartition() self.software_instance.SoftwareInstance_tryToAllocatePartition()
...@@ -32,6 +41,9 @@ class TestSlapOSAllocation(testSlapOSMixin): ...@@ -32,6 +41,9 @@ class TestSlapOSAllocation(testSlapOSMixin):
self.tic() self.tic()
def test_allocation_free_partition(self): def test_allocation_free_partition(self):
self._makeTree()
self.login()
self._makeComputer() self._makeComputer()
self._installSoftware(self.computer, self._installSoftware(self.computer,
self.software_instance.getUrlString()) self.software_instance.getUrlString())
...@@ -42,7 +54,31 @@ class TestSlapOSAllocation(testSlapOSMixin): ...@@ -42,7 +54,31 @@ class TestSlapOSAllocation(testSlapOSMixin):
self.assertEqual(self.partition.getRelativeUrl(), self.assertEqual(self.partition.getRelativeUrl(),
self.software_instance.getAggregate(portal_type='Computer Partition')) self.software_instance.getAggregate(portal_type='Computer Partition'))
def _allocateHost(self, software_instance, computer_partition):
software_instance.edit(
aggregate_value=computer_partition
)
computer_partition.markBusy()
self.tic()
def test_allocation_host_instance(self):
self._makeSlaveTree()
self.login()
self._makeComputer()
self._allocateHost(self.requested_software_instance,
self.partition)
self.assertEqual(None, self.software_instance.getAggregateValue(
portal_type='Computer Partition'))
self.software_instance.SoftwareInstance_tryToAllocatePartition()
self.assertEqual(self.partition.getRelativeUrl(),
self.software_instance.getAggregate(portal_type='Computer Partition'))
def test_allocation_capacity_scope_close(self): def test_allocation_capacity_scope_close(self):
self._makeTree()
self.login()
self._makeComputer() self._makeComputer()
self._installSoftware(self.computer, self._installSoftware(self.computer,
self.software_instance.getUrlString()) self.software_instance.getUrlString())
...@@ -55,7 +91,26 @@ class TestSlapOSAllocation(testSlapOSMixin): ...@@ -55,7 +91,26 @@ class TestSlapOSAllocation(testSlapOSMixin):
self.assertEqual(None, self.assertEqual(None,
self.software_instance.getAggregate(portal_type='Computer Partition')) self.software_instance.getAggregate(portal_type='Computer Partition'))
def test_allocation_host_capacity_scope_close(self):
self._makeSlaveTree()
self.login()
self._makeComputer()
self._allocateHost(self.requested_software_instance,
self.partition)
self.computer.edit(capacity_scope='close')
self.tic()
self.assertEqual(None, self.software_instance.getAggregateValue(
portal_type='Computer Partition'))
self.software_instance.SoftwareInstance_tryToAllocatePartition()
self.assertEqual(None,
self.software_instance.getAggregate(portal_type='Computer Partition'))
def test_allocation_allocation_scope_close(self): def test_allocation_allocation_scope_close(self):
self._makeTree()
self.login()
self._makeComputer() self._makeComputer()
self._installSoftware(self.computer, self._installSoftware(self.computer,
self.software_instance.getUrlString()) self.software_instance.getUrlString())
...@@ -68,7 +123,26 @@ class TestSlapOSAllocation(testSlapOSMixin): ...@@ -68,7 +123,26 @@ class TestSlapOSAllocation(testSlapOSMixin):
self.assertEqual(None, self.assertEqual(None,
self.software_instance.getAggregate(portal_type='Computer Partition')) self.software_instance.getAggregate(portal_type='Computer Partition'))
def test_allocation_host_allocation_scope_close(self):
self._makeSlaveTree()
self.login()
self._makeComputer()
self._allocateHost(self.requested_software_instance,
self.partition)
self.computer.edit(allocation_scope='close')
self.tic()
self.assertEqual(None, self.software_instance.getAggregateValue(
portal_type='Computer Partition'))
self.software_instance.SoftwareInstance_tryToAllocatePartition()
self.assertEqual(None,
self.software_instance.getAggregate(portal_type='Computer Partition'))
def test_allocation_allocation_scope_open_personal(self): def test_allocation_allocation_scope_open_personal(self):
self._makeTree()
self.login()
self._makeComputer() self._makeComputer()
self._installSoftware(self.computer, self._installSoftware(self.computer,
self.software_instance.getUrlString()) self.software_instance.getUrlString())
...@@ -82,7 +156,27 @@ class TestSlapOSAllocation(testSlapOSMixin): ...@@ -82,7 +156,27 @@ class TestSlapOSAllocation(testSlapOSMixin):
self.assertEqual(self.partition.getRelativeUrl(), self.assertEqual(self.partition.getRelativeUrl(),
self.software_instance.getAggregate(portal_type='Computer Partition')) self.software_instance.getAggregate(portal_type='Computer Partition'))
def test_allocation_host_allocation_scope_open_personal(self):
self._makeSlaveTree()
self.login()
self._makeComputer()
self._allocateHost(self.requested_software_instance,
self.partition)
self.computer.edit(allocation_scope='open/personal',
source_administration=self.person_user.getRelativeUrl())
self.tic()
self.assertEqual(None, self.software_instance.getAggregateValue(
portal_type='Computer Partition'))
self.software_instance.SoftwareInstance_tryToAllocatePartition()
self.assertEqual(self.partition.getRelativeUrl(),
self.software_instance.getAggregate(portal_type='Computer Partition'))
def test_allocation_allocation_scope_open_friend(self): def test_allocation_allocation_scope_open_friend(self):
self._makeTree()
self.login()
self._makeComputer() self._makeComputer()
self._installSoftware(self.computer, self._installSoftware(self.computer,
self.software_instance.getUrlString()) self.software_instance.getUrlString())
...@@ -112,7 +206,55 @@ class TestSlapOSAllocation(testSlapOSMixin): ...@@ -112,7 +206,55 @@ class TestSlapOSAllocation(testSlapOSMixin):
self.assertEqual(self.partition.getRelativeUrl(), self.assertEqual(self.partition.getRelativeUrl(),
self.software_instance.getAggregate(portal_type='Computer Partition')) self.software_instance.getAggregate(portal_type='Computer Partition'))
def test_allocation_host_allocation_scope_open_friend(self):
self._makeSlaveTree()
self.login()
self._makeComputer()
self._allocateHost(self.requested_software_instance,
self.partition)
# change computer owner
new_id = self.generateNewId()
person_user = self.portal.person_module.template_member.\
Base_createCloneDocument(batch_mode=1)
person_user.edit(
title="live_test_%s" % new_id,
reference="live_test_%s" % new_id,
default_email_text="live_test_%s@example.org" % new_id,
)
person_user.validate()
for assignment in person_user.contentValues(portal_type="Assignment"):
assignment.open()
self.computer.edit(
source_administration=person_user.getRelativeUrl(),
destination_section=self.person_user.getRelativeUrl(),
allocation_scope='open/friend')
self.tic()
self.assertEqual(None, self.software_instance.getAggregateValue(
portal_type='Computer Partition'))
self.software_instance.SoftwareInstance_tryToAllocatePartition()
self.assertEqual(self.partition.getRelativeUrl(),
self.software_instance.getAggregate(portal_type='Computer Partition'))
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.login()
self.software_instance.setSlaXml('this is not xml')
self.assertEqual(None, self.software_instance.getAggregateValue(
portal_type='Computer Partition'))
self.software_instance.SoftwareInstance_tryToAllocatePartition()
self.assertEqual(None, self.software_instance.getAggregateValue(
portal_type='Computer Partition'))
transaction.abort()
def test_allocation_does_not_fail_on_slave_with_damaged_sla_xml(self):
self._makeSlaveTree()
self.login()
self.software_instance.setSlaXml('this is not xml') self.software_instance.setSlaXml('this is not xml')
self.assertEqual(None, self.software_instance.getAggregateValue( self.assertEqual(None, self.software_instance.getAggregateValue(
portal_type='Computer Partition')) portal_type='Computer Partition'))
...@@ -139,7 +281,24 @@ portal_workflow.doActionFor(context, action='edit_action', comment='Visited by S ...@@ -139,7 +281,24 @@ portal_workflow.doActionFor(context, action='edit_action', comment='Visited by S
self.portal.portal_skins.custom.manage_delObjects(script_name) self.portal.portal_skins.custom.manage_delObjects(script_name)
transaction.commit() transaction.commit()
def test_alarm_unallocated(self): def test_alarm_software_instance_unallocated(self):
self._makeTree()
self.login()
self._simulateSoftwareInstance_tryToAllocatePartition()
try:
self.portal.portal_alarms.slapos_allocate_instance.activeSense()
self.tic()
finally:
self._dropSoftwareInstance_tryToAllocatePartition()
self.assertEqual(
'Visited by SoftwareInstance_tryToAllocatePartition',
self.software_instance.workflow_history['edit_workflow'][-1]['comment'])
def test_alarm_slave_instance_unallocated(self):
self._makeSlaveTree()
self.login()
self._simulateSoftwareInstance_tryToAllocatePartition() self._simulateSoftwareInstance_tryToAllocatePartition()
try: try:
self.portal.portal_alarms.slapos_allocate_instance.activeSense() self.portal.portal_alarms.slapos_allocate_instance.activeSense()
...@@ -150,7 +309,27 @@ portal_workflow.doActionFor(context, action='edit_action', comment='Visited by S ...@@ -150,7 +309,27 @@ portal_workflow.doActionFor(context, action='edit_action', comment='Visited by S
'Visited by SoftwareInstance_tryToAllocatePartition', 'Visited by SoftwareInstance_tryToAllocatePartition',
self.software_instance.workflow_history['edit_workflow'][-1]['comment']) self.software_instance.workflow_history['edit_workflow'][-1]['comment'])
def test_alarm_allocated(self): def test_alarm_software_instance_allocated(self):
self._makeTree()
self.login()
self._makeComputer()
self.software_instance.setAggregate(self.partition.getRelativeUrl())
self.tic()
self._simulateSoftwareInstance_tryToAllocatePartition()
try:
self.portal.portal_alarms.slapos_allocate_instance.activeSense()
self.tic()
finally:
self._dropSoftwareInstance_tryToAllocatePartition()
self.assertNotEqual(
'Visited by SoftwareInstance_tryToAllocatePartition',
self.software_instance.workflow_history['edit_workflow'][-1]['comment'])
def test_alarm_slave_instance_allocated(self):
self._makeSlaveTree()
self.login()
self._makeComputer() self._makeComputer()
self.software_instance.setAggregate(self.partition.getRelativeUrl()) self.software_instance.setAggregate(self.partition.getRelativeUrl())
self.tic() self.tic()
......
224 225
\ No newline at end of file \ No newline at end of file
...@@ -13,4 +13,5 @@ portal_alarms/slapos_free_computer_partition ...@@ -13,4 +13,5 @@ portal_alarms/slapos_free_computer_partition
portal_alarms/slapos_garbage_collect_destroyed_root_tree portal_alarms/slapos_garbage_collect_destroyed_root_tree
portal_alarms/slapos_update_computer_capacity_scope portal_alarms/slapos_update_computer_capacity_scope
software_installation_module/template_software_installation software_installation_module/template_software_installation
software_instance_module/template_slave_instance
software_instance_module/template_software_instance software_instance_module/template_software_instance
\ No newline at end of file
...@@ -122,7 +122,7 @@ class testSlapOSMixin(Products.Vifib.tests.VifibMixin.testVifibMixin): ...@@ -122,7 +122,7 @@ class testSlapOSMixin(Products.Vifib.tests.VifibMixin.testVifibMixin):
] ]
return result return result
def _makeTree(self): def _makeTree(self, requested_template_id='template_software_instance'):
new_id = self.generateNewId() new_id = self.generateNewId()
self.request_kw = dict( self.request_kw = dict(
...@@ -152,7 +152,7 @@ class testSlapOSMixin(Products.Vifib.tests.VifibMixin.testVifibMixin): ...@@ -152,7 +152,7 @@ class testSlapOSMixin(Products.Vifib.tests.VifibMixin.testVifibMixin):
self.hosting_subscription = self.portal.hosting_subscription_module\ self.hosting_subscription = self.portal.hosting_subscription_module\
.template_hosting_subscription.Base_createCloneDocument(batch_mode=1) .template_hosting_subscription.Base_createCloneDocument(batch_mode=1)
self.software_instance = self.portal.software_instance_module\ self.software_instance = self.portal.software_instance_module\
.template_software_instance.Base_createCloneDocument(batch_mode=1) [requested_template_id].Base_createCloneDocument(batch_mode=1)
self.hosting_subscription.edit( self.hosting_subscription.edit(
title=self.request_kw['software_title'], title=self.request_kw['software_title'],
......
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