Commit 89ed29c3 authored by Alain Takoudjou's avatar Alain Takoudjou

slapos_cloud: test destroy unlinked instances with delay and root instance case

parent 71801958
...@@ -16,7 +16,13 @@ if hosting_subscription is None or \ ...@@ -16,7 +16,13 @@ if hosting_subscription is None or \
# If instance modificationDate is too recent, skip # If instance modificationDate is too recent, skip
# Delay destroy of unlinked instances # Delay destroy of unlinked instances
if instance.getModificationDate() - addToDate(DateTime(), {'minute': -50}) > 0: if not delay_time:
delay_time = 50
if instance.getModificationDate() - addToDate(DateTime(), {'minute': -1*delay_time}) > 0:
return
if hosting_subscription.getTitle() == instance.getTitle():
# Refuse to destroy root instance
return return
if instance.getPredecessorRelatedValue() is None: if instance.getPredecessorRelatedValue() is None:
......
...@@ -50,7 +50,7 @@ ...@@ -50,7 +50,7 @@
</item> </item>
<item> <item>
<key> <string>_params</string> </key> <key> <string>_params</string> </key>
<value> <string>REQUEST=None</string> </value> <value> <string>REQUEST=None, delay_time=50</string> </value>
</item> </item>
<item> <item>
<key> <string>id</string> </key> <key> <string>id</string> </key>
......
...@@ -5,6 +5,7 @@ from Products.SlapOS.tests.testSlapOSMixin import \ ...@@ -5,6 +5,7 @@ from Products.SlapOS.tests.testSlapOSMixin import \
from Products.ERP5Type.tests.utils import createZODBPythonScript from Products.ERP5Type.tests.utils import createZODBPythonScript
from unittest import skip from unittest import skip
import json import json
import time
from zExceptions import Unauthorized from zExceptions import Unauthorized
from DateTime import DateTime from DateTime import DateTime
from Products.ERP5Type.DateUtils import addToDate from Products.ERP5Type.DateUtils import addToDate
...@@ -2104,7 +2105,7 @@ portal_workflow.doActionFor(context, action='edit_action', comment='Visited by S ...@@ -2104,7 +2105,7 @@ portal_workflow.doActionFor(context, action='edit_action', comment='Visited by S
instance.edit(predecessor_list=[]) instance.edit(predecessor_list=[])
self.tic() self.tic()
self.assertEqual(instance0.getPredecessorRelatedTitle(), None) self.assertEqual(instance0.getPredecessorRelatedTitle(), None)
instance0.SoftwareInstance_tryToGarbageUnlinkedInstance() instance0.SoftwareInstance_tryToGarbageUnlinkedInstance(delay_time=-1)
self.tic() self.tic()
self.assertEqual(instance0.getSlapState(), 'destroy_requested') self.assertEqual(instance0.getSlapState(), 'destroy_requested')
...@@ -2141,13 +2142,59 @@ portal_workflow.doActionFor(context, action='edit_action', comment='Visited by S ...@@ -2141,13 +2142,59 @@ portal_workflow.doActionFor(context, action='edit_action', comment='Visited by S
self.tic() self.tic()
self.assertEqual(instance0.getPredecessorRelatedTitle(), None) self.assertEqual(instance0.getPredecessorRelatedTitle(), None)
instance0.SoftwareInstance_tryToGarbageUnlinkedInstance(delay_time=-1)
self.tic()
self.assertEqual(instance0.getSlapState(), 'destroy_requested')
self.assertEqual(instance_instance0.getSlapState(), 'start_requested')
# Link of child removed
self.assertEqual(instance_instance0.getPredecessorRelatedTitle(), None)
def test_SoftwareInstance_tryToGarbageUnlinkedInstance_will_delay(self):
instance = self.createInstance()
partition = self.createComputerPartition()
instance.edit(aggregate_value=partition)
self.tic()
instance0 = self.doRequestInstance(instance, 'instance0')
instance_instance0 = self.doRequestInstance(instance0, 'Subinstance0')
self.assertEqual(instance_instance0.getPredecessorRelatedTitle(),
'instance0')
instance.edit(predecessor_list=[])
self.tic()
self.assertEqual(instance0.getPredecessorRelatedTitle(), None)
instance0.SoftwareInstance_tryToGarbageUnlinkedInstance() instance0.SoftwareInstance_tryToGarbageUnlinkedInstance()
self.tic() self.tic()
self.assertEqual(instance0.getSlapState(), 'start_requested')
self.assertEqual(instance_instance0.getSlapState(), 'start_requested')
# delay a bit
time.sleep(2)
# run with delay of 3 seconds
instance0.SoftwareInstance_tryToGarbageUnlinkedInstance(delay_time=3/60.0)
self.tic()
self.assertEqual(instance0.getSlapState(), 'destroy_requested') self.assertEqual(instance0.getSlapState(), 'destroy_requested')
self.assertEqual(instance_instance0.getSlapState(), 'start_requested') self.assertEqual(instance_instance0.getSlapState(), 'start_requested')
# Link of child removed # Link of child removed
self.assertEqual(instance_instance0.getPredecessorRelatedTitle(), None) self.assertEqual(instance_instance0.getPredecessorRelatedTitle(), None)
def test_SoftwareInstance_tryToGarbageUnlinkedInstance_unlinked_root(self):
instance = self.createInstance()
partition = self.createComputerPartition()
instance.edit(aggregate_value=partition)
self.tic()
self.assertEqual(self.hosting_subscription.getTitle(), instance.getTitle())
# Remove predecessor link
self.hosting_subscription.edit(predecessor_list=[])
self.tic()
self.assertEqual(instance.getPredecessorRelatedTitle(), None)
# will not destroy
instance.SoftwareInstance_tryToGarbageUnlinkedInstance(delay_time=-10)
self.tic()
self.assertEqual(instance.getSlapState(), 'start_requested')
def test_alarm_search_inlinked_instance(self): def test_alarm_search_inlinked_instance(self):
instance = self.createInstance() instance = self.createInstance()
partition = self.createComputerPartition() partition = self.createComputerPartition()
......
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