diff --git a/master/bt5/vifib_slap/PathTemplateItem/portal_alarms/cleanup_active_process.xml b/master/bt5/slapos_erp5/PathTemplateItem/portal_alarms/slapos_erp5_cleanup_active_process.xml similarity index 96% rename from master/bt5/vifib_slap/PathTemplateItem/portal_alarms/cleanup_active_process.xml rename to master/bt5/slapos_erp5/PathTemplateItem/portal_alarms/slapos_erp5_cleanup_active_process.xml index 10be3f44819483b3d257e4f4a72fe35a884ecc4c..50f5dd494435584357ecb4929f48a5fe7af38e20 100644 --- a/master/bt5/vifib_slap/PathTemplateItem/portal_alarms/cleanup_active_process.xml +++ b/master/bt5/slapos_erp5/PathTemplateItem/portal_alarms/slapos_erp5_cleanup_active_process.xml @@ -20,7 +20,7 @@ </item> <item> <key> <string>id</string> </key> - <value> <string>cleanup_active_process</string> </value> + <value> <string>slapos_erp5_cleanup_active_process</string> </value> </item> <item> <key> <string>periodicity_day_frequency</string> </key> diff --git a/master/bt5/slapos_erp5/SkinTemplateItem/portal_skins/slapos_administration.xml b/master/bt5/slapos_erp5/SkinTemplateItem/portal_skins/slapos_administration.xml new file mode 100644 index 0000000000000000000000000000000000000000..fffd07216284df8648ddf64fe1a838065d726455 --- /dev/null +++ b/master/bt5/slapos_erp5/SkinTemplateItem/portal_skins/slapos_administration.xml @@ -0,0 +1,47 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="Folder" module="OFS.Folder"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>_local_properties</string> </key> + <value> + <tuple> + <dictionary> + <item> + <key> <string>id</string> </key> + <value> <string>business_template_skin_layer_priority</string> </value> + </item> + <item> + <key> <string>type</string> </key> + <value> <string>float</string> </value> + </item> + </dictionary> + </tuple> + </value> + </item> + <item> + <key> <string>_objects</string> </key> + <value> + <tuple/> + </value> + </item> + <item> + <key> <string>business_template_skin_layer_priority</string> </key> + <value> <float>60.0</float> </value> + </item> + <item> + <key> <string>id</string> </key> + <value> <string>slapos_administration</string> </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string></string> </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/master/bt5/vifib_slap/SkinTemplateItem/portal_skins/vifib_slap/ActiveProcess_deleteSelf.xml b/master/bt5/slapos_erp5/SkinTemplateItem/portal_skins/slapos_administration/ActiveProcess_deleteSelf.xml similarity index 91% rename from master/bt5/vifib_slap/SkinTemplateItem/portal_skins/vifib_slap/ActiveProcess_deleteSelf.xml rename to master/bt5/slapos_erp5/SkinTemplateItem/portal_skins/slapos_administration/ActiveProcess_deleteSelf.xml index b0c8382b15285869c448771f789ba1939751ea2a..975226ea19ac484433e3faaa1cbf9d2884276475 100644 --- a/master/bt5/vifib_slap/SkinTemplateItem/portal_skins/vifib_slap/ActiveProcess_deleteSelf.xml +++ b/master/bt5/slapos_erp5/SkinTemplateItem/portal_skins/slapos_administration/ActiveProcess_deleteSelf.xml @@ -50,14 +50,19 @@ </item> <item> <key> <string>_body</string> </key> - <value> <string>if context.getPortalType() != \'Active Process\':\n + <value> <string>from zExceptions import Unauthorized\n +if REQUEST is not None:\n + raise Unauthorized\n +\n +if context.getPortalType() != \'Active Process\':\n raise TypeError(\'Call me on Active Process\')\n +\n context.getParentValue().deleteContent(context.getId())\n </string> </value> </item> <item> <key> <string>_params</string> </key> - <value> <string></string> </value> + <value> <string>REQUEST=None</string> </value> </item> <item> <key> <string>id</string> </key> diff --git a/master/bt5/vifib_slap/SkinTemplateItem/portal_skins/vifib_slap/Alarm_initiateActiveProcessCleanup.xml b/master/bt5/slapos_erp5/SkinTemplateItem/portal_skins/slapos_administration/Alarm_initiateActiveProcessCleanup.xml similarity index 100% rename from master/bt5/vifib_slap/SkinTemplateItem/portal_skins/vifib_slap/Alarm_initiateActiveProcessCleanup.xml rename to master/bt5/slapos_erp5/SkinTemplateItem/portal_skins/slapos_administration/Alarm_initiateActiveProcessCleanup.xml diff --git a/master/bt5/slapos_erp5/TestTemplateItem/testSlapOSERP5Alarm.py b/master/bt5/slapos_erp5/TestTemplateItem/testSlapOSERP5Alarm.py new file mode 100644 index 0000000000000000000000000000000000000000..c2cfea537fc83198bd5d7d7714bb423ae05e8c46 --- /dev/null +++ b/master/bt5/slapos_erp5/TestTemplateItem/testSlapOSERP5Alarm.py @@ -0,0 +1,108 @@ +# Copyright (c) 2002-2012 Nexedi SA and Contributors. All Rights Reserved. +import transaction +from Products.SlapOS.tests.testSlapOSMixin import \ + testSlapOSMixin +from Products.ERP5Type.tests.utils import createZODBPythonScript +from Products.ERP5Type.tests.backportUnittest import skip +import json +from DateTime import DateTime +from zExceptions import Unauthorized + +class TestSlapOSERP5CleanupActiveProcess(testSlapOSMixin): + + def beforeTearDown(self): + transaction.abort() + + def _simulateActiveProcess_deleteSelf(self): + script_name = 'ActiveProcess_deleteSelf' + if script_name in self.portal.portal_skins.custom.objectIds(): + raise ValueError('Precondition failed: %s exists in custom' % script_name) + createZODBPythonScript(self.portal.portal_skins.custom, + script_name, + '*args, **kwargs', + '# Script body\n' +"""description = '%s\\nVisited by ActiveProcess_deleteSelf' % context.getDescription() +context.edit(description=description)""") + transaction.commit() + + def _dropActiveProcess_deleteSelf(self): + script_name = 'ActiveProcess_deleteSelf' + if script_name in self.portal.portal_skins.custom.objectIds(): + self.portal.portal_skins.custom.manage_delObjects(script_name) + transaction.commit() + + def check_cleanup_active_process_alarm(self, date, assert_method): + def verify_getCreationDate_call(*args, **kwargs): + return date + ActiveProcessClass = self.portal.portal_types.getPortalTypeClass( + 'Active Process') + ActiveProcessClass.getCreationDate_call = ActiveProcessClass.\ + getCreationDate + ActiveProcessClass.getCreationDate = verify_getCreationDate_call + + new_id = self.generateNewId() + active_process = self.portal.portal_activities.newContent( + portal_type='Active Process', + title="Active Process %s" % new_id, + reference="ACTPROC-%s" % new_id, + description="Active Process %s" % new_id, + ) + self.assertEquals(active_process.getCreationDate(), date) + + self._simulateActiveProcess_deleteSelf() + try: + self.portal.portal_alarms.slapos_erp5_cleanup_active_process.activeSense() + self.tic() + finally: + self._dropActiveProcess_deleteSelf() + self.portal.portal_types.resetDynamicDocumentsOnceAtTransactionBoundary() + transaction.commit() + + assert_method(active_process.getDescription('').\ + endswith("Visited by ActiveProcess_deleteSelf"), + active_process.getDescription('')) + + def test_alarm_old_active_process(self): + self.check_cleanup_active_process_alarm(DateTime() - 22, self.assertTrue) + + def test_alarm_new_active_process(self): + self.check_cleanup_active_process_alarm(DateTime() - 20, self.assertFalse) + + +class TestSlapOSERP5ActiveProcess_deleteSelf(testSlapOSMixin): + + def beforeTearDown(self): + transaction.abort() + + def createActiveProcess(self): + new_id = self.generateNewId() + return self.portal.portal_activities.newContent( + portal_type='Active Process', + title="Active Process %s" % new_id, + reference="ACTPROC-%s" % new_id, + description="Active Process %s" % new_id, + ) + + def test_disallowedPortalType(self): + document = self.portal.person_module.newContent() + self.assertRaises( + TypeError, + document.ActiveProcess_deleteSelf, + ) + + def test_REQUEST_disallowed(self): + active_process = self.createActiveProcess() + self.assertRaises( + Unauthorized, + active_process.ActiveProcess_deleteSelf, + REQUEST={}) + + def test_default_use_case(self): + active_process = self.createActiveProcess() + module = active_process.getParentValue() + id = active_process.getId() + active_process.ActiveProcess_deleteSelf() + self.assertRaises( + KeyError, + module._getOb, + id) diff --git a/master/bt5/slapos_erp5/TestTemplateItem/testSlapOSERP5SkinSelection.py b/master/bt5/slapos_erp5/TestTemplateItem/testSlapOSERP5SkinSelection.py index f955a2dc724dc3a28f4b8907f2574d411f53b884..1145e767f8311727ba4d8f05e43a97a2693e9f3d 100644 --- a/master/bt5/slapos_erp5/TestTemplateItem/testSlapOSERP5SkinSelection.py +++ b/master/bt5/slapos_erp5/TestTemplateItem/testSlapOSERP5SkinSelection.py @@ -109,6 +109,7 @@ class TestSlaposSkinSelection(testSlapOSMixin): custom vifib_hosting slapos_accounting +slapos_administration slapos_cache slapos_cloud slapos_cloud_promise @@ -197,6 +198,7 @@ zpt_generic """ custom slapos_accounting +slapos_administration slapos_cache slapos_cloud slapos_cloud_promise @@ -281,6 +283,7 @@ zpt_generic """ custom slapos_accounting +slapos_administration slapos_cache slapos_cloud slapos_cloud_promise @@ -366,6 +369,7 @@ zpt_generic """ custom slapos_accounting +slapos_administration slapos_cache slapos_cloud slapos_cloud_promise @@ -448,6 +452,7 @@ zpt_generic """ custom slapos_accounting +slapos_administration slapos_cache slapos_cloud slapos_cloud_promise diff --git a/master/bt5/slapos_erp5/bt/revision b/master/bt5/slapos_erp5/bt/revision index 2702ba3d439a353c3f748180065944feb28b8b87..d2c5ed2124821b21d11dcc57f6a116ed29593583 100644 --- a/master/bt5/slapos_erp5/bt/revision +++ b/master/bt5/slapos_erp5/bt/revision @@ -1 +1 @@ -115 \ No newline at end of file +116 \ No newline at end of file diff --git a/master/bt5/slapos_erp5/bt/template_path_list b/master/bt5/slapos_erp5/bt/template_path_list new file mode 100644 index 0000000000000000000000000000000000000000..8446989bc162e264d1eda0cd89999f0b60454ef9 --- /dev/null +++ b/master/bt5/slapos_erp5/bt/template_path_list @@ -0,0 +1 @@ +portal_alarms/slapos_erp5_cleanup_active_process \ No newline at end of file diff --git a/master/bt5/slapos_erp5/bt/template_skin_id_list b/master/bt5/slapos_erp5/bt/template_skin_id_list index 2c5c19caf73113bb23415c40fbb4155ef79ef219..002ddca89372e64ae26bbc09e52e31fb4b3b58cd 100644 --- a/master/bt5/slapos_erp5/bt/template_skin_id_list +++ b/master/bt5/slapos_erp5/bt/template_skin_id_list @@ -1 +1,2 @@ +slapos_administration slapos_core \ No newline at end of file diff --git a/master/bt5/slapos_erp5/bt/template_test_id_list b/master/bt5/slapos_erp5/bt/template_test_id_list index 6bf2ba27851f15167c8e187fad77d4136df70dfc..ed98c87b617529a9be67520b1205515e5fa31add 100644 --- a/master/bt5/slapos_erp5/bt/template_test_id_list +++ b/master/bt5/slapos_erp5/bt/template_test_id_list @@ -1,4 +1,5 @@ testSlapOSERP5DefaultScenario testSlapOSERP5GroupRoleSecurity testSlapOSERP5LocalPermissionSlapOSInteractionWorkflow -testSlapOSERP5SkinSelection \ No newline at end of file +testSlapOSERP5SkinSelection +testSlapOSERP5Alarm \ No newline at end of file diff --git a/master/bt5/vifib_slap/bt/revision b/master/bt5/vifib_slap/bt/revision index 3cdc988178d1a9b697f73bf12e8749f835151245..fb5f8f013c9c30f6ca22ea0f56bac120d6815512 100644 --- a/master/bt5/vifib_slap/bt/revision +++ b/master/bt5/vifib_slap/bt/revision @@ -1 +1 @@ -889 \ No newline at end of file +890 \ No newline at end of file diff --git a/master/bt5/vifib_slap/bt/template_path_list b/master/bt5/vifib_slap/bt/template_path_list index bc331bb4000666f605a4a6390a5a8e00c321a64e..fe5e0e878f2100be77f237e348a0e5f9aa6d87f9 100644 --- a/master/bt5/vifib_slap/bt/template_path_list +++ b/master/bt5/vifib_slap/bt/template_path_list @@ -1,4 +1,3 @@ -portal_alarms/cleanup_active_process portal_alarms/vifib_check_consistency portal_alarms/vifib_lock_person portal_alarms/vifib_lock_software_instance