[Erp5-report] r42286 rafael - in /erp5/trunk/bt5/erp5_upgrader: TestTemplateItem/ bt/

nobody at svn.erp5.org nobody at svn.erp5.org
Thu Jan 13 03:21:33 CET 2011


Author: rafael
Date: Thu Jan 13 03:21:32 2011
New Revision: 42286

URL: http://svn.erp5.org?rev=42286&view=rev
Log:
Added Live Test.

Added:
    erp5/trunk/bt5/erp5_upgrader/TestTemplateItem/
    erp5/trunk/bt5/erp5_upgrader/TestTemplateItem/testLiveUpgrader.py
    erp5/trunk/bt5/erp5_upgrader/bt/template_test_id_list
Modified:
    erp5/trunk/bt5/erp5_upgrader/bt/revision

Added: erp5/trunk/bt5/erp5_upgrader/TestTemplateItem/testLiveUpgrader.py
URL: http://svn.erp5.org/erp5/trunk/bt5/erp5_upgrader/TestTemplateItem/testLiveUpgrader.py?rev=42286&view=auto
==============================================================================
--- erp5/trunk/bt5/erp5_upgrader/TestTemplateItem/testLiveUpgrader.py (added)
+++ erp5/trunk/bt5/erp5_upgrader/TestTemplateItem/testLiveUpgrader.py [utf8] Thu Jan 13 03:21:32 2011
@@ -0,0 +1,314 @@
+##############################################################################
+#
+# Copyright (c) 2002-2011 Nexedi SA and Contributors. All Rights Reserved.
+#                     Rafael Monnerat <rafael at nexedi.com>
+#
+# WARNING: This program as such is intended to be used by professional
+# programmers who take the whole responsibility of assessing all potential
+# consequences resulting from its eventual inadequacies and bugs
+# End users who are looking for a ready-to-use solution with commercial
+# guarantees and support are strongly adviced to contract a Free Software
+# Service Company
+#
+# This program is Free Software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+##############################################################################
+
+
+from Products.ERP5Type.tests.ERP5TypeLiveTestCase import ERP5TypeLiveTestCase
+from Products.ERP5Type.tests.utils import createZODBPythonScript
+import transaction
+
+class TestLiveUpgrader(ERP5TypeLiveTestCase):
+  """
+    Configurator Mixin Class
+  """
+  def afterSetUp(self):
+    self.login(user_name='test_configurator_user')
+    self.upgrade_object_test_id = "upgrade_object_test"
+    self.erp5_site_global_id = getattr(self.portal, 'erp5_site_global_id', None)
+    self.beforeTearDown()
+    self.portal.portal_activities.unsubscribe()
+
+  def beforeTearDown(self):
+    """ Restore original state """
+    self.portal.portal_activities.subscribe()
+    custom = self.portal.portal_skins.custom
+
+    for script_id in ['ERP5Site_getUpgraderSignature', 'ERP5Site_getUpgraderSignature']: 
+      if script_id in custom.objectIds():
+        custom.manage_delObjects([script_id])
+
+    if self.upgrade_object_test_id in self.portal.portal_categories.objectIds():
+       self.portal.portal_categories.manage_delObjects([self.upgrade_object_test_id])
+
+    if self.upgrade_object_test_id in self.portal.portal_gadgets.objectIds():
+       self.portal.portal_gadgets.manage_delObjects([self.upgrade_object_test_id])
+
+    self.portal._updateProperty('erp5_site_global_id', self.erp5_site_global_id)
+    
+    property_sheet_list = self.portal.portal_types.Person.getTypePropertySheetList()
+    new_property_sheet_list = [ i for i in property_sheet_list if i !="Account" ]
+    self.portal.portal_types.Person.setTypePropertySheetList(new_property_sheet_list)
+    self.assertFalse("Account" in self.portal.portal_types.Person.getTypePropertySheetList())
+
+    self.stepTic()
+    ERP5TypeLiveTestCase.beforeTearDown(self)
+
+  def test_UpgradeSignatureAPI(self):
+    """
+      test If the script that defines the signature follow
+      the API defined here. This will prevent mistakes
+      or change API Definition.
+    """
+    signature_key_list = ('alarm_dict',
+                          'release',
+                          'product',
+                          'bt5_base_url_list',
+                          'workflow_chain_dict',
+                          'required_bt5_id_list',
+                          'upgradable_bt5_id_list',
+                          'update_catalog_bt5_id_list',
+                          'before_triggered_bt5_id_dict',
+                          'after_triggered_bt5_id_dict',
+                          'reinstalable_bt5_id_list',
+                          'keep_original_dict',
+                          'object_action_dict',
+                          'zope',
+                          'python',
+                          'integrity_verification_script_id_list',
+                          'catalog_filter_dict',
+                          'update_role_portal_type_list',
+                          'portal_type_property_sheet_list',
+                          'erp5_site_property_dict',
+                          'upgrade_object_class_list',
+                          'recatalog',
+                          'alarm_tool_configuration_list'
+    )
+    signature = self.portal.ERP5Site_getUpgraderSignature()
+    self.assertEquals(sorted(signature_key_list), sorted(signature.keys()))
+
+  def test_StandardUpgraderSignature(self):
+    """ Test default behaviours provided by default ERP5Site_getUpgraderSignature
+    """
+    signature = self.portal.ERP5Site_getUpgraderSignature()
+    # By default we do not recatalog the instance
+    self.assertEquals(signature['recatalog'], False)
+
+    # By default we do not upgrade manually the workflow
+    self.assertEquals(signature['workflow_chain_dict'], None)
+
+    # By Default we do not upgrade Catalog Filters
+    self.assertEquals(signature['catalog_filter_dict'], None)
+
+    # By Default there is no extra properties to set.
+    self.assertEquals(signature['erp5_site_property_dict'], {})
+
+    # Do not enable alarms by default
+    self.assertEquals(signature['alarm_tool_configuration_list'], ())
+
+    # By default we upgrade software, products, bt5 and so on.
+    self.assertTrue(signature['alarm_dict']["system_upgrader"])
+    self.assertTrue(signature['alarm_dict']["product_upgrader"])
+    self.assertTrue(signature['alarm_dict']["bt5_upgrader"])
+    self.assertTrue(signature['alarm_dict']["finalize_upgrader"])
+
+  def testUpgradeObjectWorkflowState(self):
+    """
+      Create a test to ERP5Site_upgradeObjectList which aims to update
+      Objects which are in bad workflow state or have a bad property.
+      
+      Signature API:
+
+        { BUSINESS_TEMPLATE_TITLE : (
+	                 (OBJECT_PATH,
+	                  SCRIPT TO COLLECT INFORMATION,
+                          RETURN EXPECTED THAT INDICATES THE OBJECT IS BROKEN, 
+			  SCRIPT USED TO FIX ),
+	                 ),
+        }
+    """
+    signature_code = {'erp5_core':( ('portal_categories/%s' % self.upgrade_object_test_id,
+                                     'getValidationState', 
+                                     'embedded', 
+                                     'publish'),)}
+    createZODBPythonScript(self.getPortal().portal_skins.custom,
+                                   'ERP5Site_getUpgraderSignature', "item=None",
+                                    "return " + str(signature_code))
+    transaction.commit()
+    self.assertEquals(self.portal.ERP5Site_getUpgraderSignature(), signature_code)
+    self.assertEquals(self.portal.ERP5Site_upgradeObjectList(), [])
+    test_object = self.portal.portal_categories.newContent(id=self.upgrade_object_test_id,
+                                             portal_type="Base Category")
+    self.assertEquals(test_object.getValidationState(), 'embedded')
+    self.assertNotEquals(self.portal.ERP5Site_upgradeObjectList(), [])
+    self.assertNotEquals(self.portal.ERP5Site_upgradeObjectList(upgrade="1"), [])
+    self.assertEquals(test_object.getValidationState(), 'published')
+
+  def testUpgradeObjectClass(self):
+    """
+      Verify if all objects from one class are migrated to
+      another class.
+    """
+    to_class_as_string = 'Products.ERP5Type.Document.Folder.Folder'
+    signature_code = ( ('portal_gadgets', 
+                        'ERP5Site_testUpgradeObjectClass',
+                        to_class_as_string, 
+                        'Products.ERP5Type.Document.Gadget.Gadget', 
+                        'ERP5Site_testUpgradeObjectClass'), )
+
+    createZODBPythonScript(self.getPortal().portal_skins.custom,
+                                   'ERP5Site_getUpgraderSignature', "item=None",
+                                    "return " + str(signature_code))
+    transaction.commit()
+    self.assertEquals(self.portal.ERP5Site_getUpgraderSignature(), signature_code)
+    # Nothing to upgrade
+    self.assertEquals(self.portal.ERP5Site_upgradeObjectClass(), [])
+
+    # Create one broken object
+    gadget = self.portal.portal_gadgets.newContent(portal_type="Gadget", 
+                                                   id=self.upgrade_object_test_id)
+    self.stepTic()
+
+    createZODBPythonScript(self.getPortal().portal_skins.custom,
+                         "test_upgradeObject", 'x', 'return [1]')
+    test_script = self.getPortal().portal_skins.custom.test_upgradeObject
+    self.portal.portal_gadgets.upgradeObjectClass(
+                                 test_script,
+                                 gadget.__class__,
+                                 to_class_as_string,
+                                 test_script)
+
+    transaction.commit()
+    self.assertNotEquals(self.portal.ERP5Site_upgradeObjectClass(), [])
+    self.assertEquals(self.portal.ERP5Site_upgradeObjectClass(upgrade=1),
+                        [(gadget.getRelativeUrl(), 'ERP5 Gadget')])
+    self.stepTic()
+    self.assertEquals(self.portal.ERP5Site_upgradeObjectClass(), [])
+
+  def test_UpgradeGlobalPropertyList(self):
+    """
+     Verify if the upgrade is needed
+    """
+    if getattr(self.portal, 'erp5_site_global_id', None) is not None:
+      self.portal._updateProperty('erp5_site_global_id', "SOME_KEY")
+
+    signature_code = {'erp5_site_global_id': self.upgrade_object_test_id}
+    createZODBPythonScript(self.getPortal().portal_skins.custom,
+                                   'ERP5Site_getUpgraderSignature', "item=None",
+                                    "return " + str(signature_code))
+    transaction.commit()
+    self.assertEquals(self.portal.ERP5Site_getUpgraderSignature(), signature_code)
+    self.assertEquals(self.portal.ERP5Site_upgradeGlobalPropertyList(), 
+                      ["Upgrade Required for Global Properties."])
+
+    self.assertEquals(["Upgrade Executed for Global Properties (erp5_site_global_id)."], 
+                      self.portal.ERP5Site_upgradeGlobalPropertyList(upgrade=1))
+
+    self.stepTic()
+    self.assertEquals(self.portal.ERP5Site_upgradeGlobalPropertyList(), [])
+    self.assertEquals(getattr(self.portal, 'erp5_site_global_id', None),
+                      self.upgrade_object_test_id)
+
+  def test_UpgradeWorkflowChain(self):
+    """
+     Upgrade the workflow chain if required.
+    """
+    workflow_tool = self.portal.portal_workflow
+    workflow_dict = workflow_tool.getWorkflowChainDict()
+    signature_code = workflow_dict
+    createZODBPythonScript(self.getPortal().portal_skins.custom,
+                                   'ERP5Site_getUpgraderSignature', "item=None",
+                                    "return " + str(signature_code))
+    transaction.commit()
+
+    self.assertEquals(self.portal.ERP5Site_upgradeWorkflowChain(), [])
+
+    original_person_chain = workflow_dict["chain_Person"]
+    # Modify installed workflow chain.
+    workflow_dict["chain_Person"] = ''
+    workflow_tool.manage_changeWorkflows(default_chain = '', 
+                                         props = workflow_dict)
+    self.assertEquals(workflow_tool.getWorkflowChainDict()["chain_Person"],
+                      "")
+    self.assertEquals(self.portal.ERP5Site_upgradeWorkflowChain(),
+                      ["Upgrade Required for Workflow Chain."])
+
+    self.assertEquals(self.portal.ERP5Site_upgradeWorkflowChain(upgrade=1),
+                      ["Upgrade Executed for Workflow Chain."])
+    self.stepTic()
+    self.assertEquals(self.portal.ERP5Site_upgradeWorkflowChain(),[])
+    self.assertEquals(workflow_tool.getWorkflowChainDict()["chain_Person"],
+                      original_person_chain)
+
+  def test_RunVerificationScriptDontRaise(self):
+    """ Test if the script ERP5Site_runVerificationScript is 
+        bullet of proof, and always return a result.
+    """
+    createZODBPythonScript(self.getPortal().portal_skins.custom,
+                                   'ERP5Site_raise', "",
+                                    "raise ValueError('Error')")
+    createZODBPythonScript(self.getPortal().portal_skins.custom,
+                                   'ERP5Site_return', "",
+                                   "return ['A']")
+
+    failure = self.portal.ERP5Site_runVerificationScript("ERP5Site_raise")
+    self.failUnless("Script ERP5Site_raise fail to run" in failure,
+                    "'Script ERP5Site_raise fail to run not' in %s" % failure)
+    self.assertEquals('ERP5Site_return : \n - A ',
+       self.portal.ERP5Site_runVerificationScript("ERP5Site_return"))
+
+  def test_UpgradePortalTypePropertySheet(self):
+    """
+      Test for Upgrate Portal Type Property Sheet script.
+    """
+    signature_code = (('Account', ["Person"]), )
+    createZODBPythonScript(self.getPortal().portal_skins.custom,
+                                   'ERP5Site_getUpgraderSignature', "item=None",
+                                    "return " + str(signature_code))
+    transaction.commit()
+    self.assertEquals(self.portal.ERP5Site_getUpgraderSignature(), signature_code)
+    self.assertEquals(self.portal.ERP5Site_upgradePortalTypePropertySheet(),
+                      ["Person doesn't has Account associated."])
+    self.assertEquals(self.portal.ERP5Site_upgradePortalTypePropertySheet(upgrade=1),
+                      ["Associate PropertySheet Account into Portal Type Person."])
+    self.stepTic()
+    self.assertEquals(self.portal.ERP5Site_upgradePortalTypePropertySheet(), [])
+
+
+  def test_recreateActivities(self):
+    """
+      The activities should be recreated after upgrade products.
+    """
+    object_to_test = self.portal.portal_simulation
+    createZODBPythonScript(self.getPortal().portal_skins.custom,
+                   'ERP5Site_testRecreateActivityScript', "",
+                   "context.manage_addProperty('custom_property_without_meaning', 'I was there', 'string')")
+
+    transaction.commit()
+    object_to_test.activate().ERP5Site_testRecreateActivityScript()
+
+    transaction.commit()
+    # Verify if the final activity is created.
+    self.assertTrue(object_to_test.hasActivity(method_id="ERP5Site_testRecreateActivityScript"))
+    self.portal.portal_activities.activate().ERP5Site_clearActivities()
+    transaction.commit()
+    self.assertTrue(object_to_test.hasActivity(method_id="ERP5Site_testRecreateActivityScript"))
+    self.assertTrue(self.portal.portal_activities.hasActivity(method_id='ERP5Site_clearActivities'))
+    self.stepTic()
+    self.assertFalse(object_to_test.hasActivity(method_id="ERP5Site_testRecreateActivityScript"))
+    self.assertFalse(self.portal.portal_activities.hasActivity(method_id='ERP5Site_clearActivities'))
+    self.assertEquals(object_to_test.getProperty('custom_property_without_meaning'),
+                      'I was there')

Modified: erp5/trunk/bt5/erp5_upgrader/bt/revision
URL: http://svn.erp5.org/erp5/trunk/bt5/erp5_upgrader/bt/revision?rev=42286&r1=42285&r2=42286&view=diff
==============================================================================
--- erp5/trunk/bt5/erp5_upgrader/bt/revision [utf8] (original)
+++ erp5/trunk/bt5/erp5_upgrader/bt/revision [utf8] Thu Jan 13 03:21:32 2011
@@ -1 +1 @@
-549
\ No newline at end of file
+551
\ No newline at end of file

Added: erp5/trunk/bt5/erp5_upgrader/bt/template_test_id_list
URL: http://svn.erp5.org/erp5/trunk/bt5/erp5_upgrader/bt/template_test_id_list?rev=42286&view=auto
==============================================================================
--- erp5/trunk/bt5/erp5_upgrader/bt/template_test_id_list (added)
+++ erp5/trunk/bt5/erp5_upgrader/bt/template_test_id_list [utf8] Thu Jan 13 03:21:32 2011
@@ -0,0 +1 @@
+testLiveUpgrader
\ No newline at end of file



More information about the Erp5-report mailing list