[Erp5-report] r36135 nicolas - /erp5/trunk/products/ERP5Catalog/tests/testERP5Catalog.py
nobody at svn.erp5.org
nobody at svn.erp5.org
Wed Jun 9 10:51:04 CEST 2010
Author: nicolas
Date: Wed Jun 9 10:51:04 2010
New Revision: 36135
URL: http://svn.erp5.org?rev=36135&view=rev
Log:
Check that cached values are invalidated due to
catalog migration after hot reindexing
Modified:
erp5/trunk/products/ERP5Catalog/tests/testERP5Catalog.py
Modified: erp5/trunk/products/ERP5Catalog/tests/testERP5Catalog.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5Catalog/tests/testERP5Catalog.py?rev=36135&r1=36134&r2=36135&view=diff
==============================================================================
--- erp5/trunk/products/ERP5Catalog/tests/testERP5Catalog.py [utf8] (original)
+++ erp5/trunk/products/ERP5Catalog/tests/testERP5Catalog.py [utf8] Wed Jun 9 10:51:04 2010
@@ -51,6 +51,7 @@
from transaction import get as get_transaction
except ImportError:
pass
+import transaction
from OFS.ObjectManager import ObjectManager
from random import randint
@@ -1652,7 +1653,107 @@
path_list = [module.getRelativeUrl()]
self.checkRelativeUrlInSQLPathList(path_list, connection_id=self.new_connection_id)
self.checkRelativeUrlInSQLPathList(path_list, connection_id=self.original_connection_id)
-
+
+ def test_48bis_ERP5Site_hotReindexAllCheckCachedValues(self):
+ """
+ test the hot reindexing of catalog -> catalog2
+ Check that cached values are invalidated due to
+ catalog migration
+ """
+ message = 'Hot Reindex All: cache invalidation'
+ ZopeTestCase._print('\n%s ' % message)
+ LOG('Testing... ', 0, message)
+
+ portal = self.getPortal()
+ self.original_connection_id = 'erp5_sql_connection'
+ self.original_deferred_connection_id = 'erp5_sql_deferred_connection'
+ new_connection_string = getExtraSqlConnectionStringList()[0]
+
+ # Skip this test if default connection string is not "test test".
+ original_connection = getattr(portal, self.original_connection_id)
+ connection_string = original_connection.connection_string
+ if (connection_string == new_connection_string):
+ message = 'SKIPPED: default connection string is the same as the one for hot-reindex catalog'
+ ZopeTestCase._print(message)
+ LOG('Testing... ',0, message)
+
+ # Create new connectors
+ portal.manage_addZMySQLConnection(self.new_erp5_sql_connection,'',
+ new_connection_string)
+ new_connection = portal[self.new_erp5_sql_connection]
+ new_connection.manage_open_connection()
+ portal.manage_addZMySQLConnection(self.new_erp5_deferred_sql_connection,'',
+ new_connection_string)
+ new_connection = portal[self.new_erp5_deferred_sql_connection]
+ new_connection.manage_open_connection()
+ # the transactionless connector must not be change because this one
+ # create the portal_ids otherwise it create of conflicts with uid
+ # objects
+
+ # Create new catalog
+ portal_catalog = self.getCatalogTool()
+ self.original_catalog_id = 'erp5_mysql_innodb'
+ self.new_catalog_id = self.original_catalog_id + '2'
+ cp_data = portal_catalog.manage_copyObjects(ids=('erp5_mysql_innodb',))
+ new_id = portal_catalog.manage_pasteObjects(cp_data)[0]['new_id']
+ portal_catalog.manage_renameObject(id=new_id, new_id=self.new_catalog_id)
+
+ # Parse all methods in the new catalog in order to change the connector
+ new_catalog = portal_catalog[self.new_catalog_id]
+
+ # Add new searchable table in new catalog
+ create_dummy_table_sql = """
+ CREATE TABLE `dummy` (
+ `uid` BIGINT UNSIGNED NOT NULL,
+ `dummy_title` varchar(32) NOT NULL default '',
+ PRIMARY KEY (`uid`)
+ ) TYPE=InnoDB;
+ """
+ new_catalog.manage_addProduct['ZSQLMethods'].manage_addZSQLMethod(
+ id='z_create_dummy_table', title='', arguments="",
+ connection_id=self.new_erp5_sql_connection,
+ template=create_dummy_table_sql)
+ drop_summy_table_sql = """
+ DROP TABLE IF EXISTS `dummy`
+ """
+ new_catalog.manage_addProduct['ZSQLMethods'].manage_addZSQLMethod(
+ id='z0_drop_dummy_table', title='', arguments="",
+ connection_id=self.new_erp5_sql_connection,
+ template=drop_summy_table_sql)
+
+ # update catalog configuration and declare new ZSQLMethods
+ sql_clear_catalog_list = list(new_catalog.sql_clear_catalog)
+ sql_clear_catalog_list.extend(['z0_drop_dummy_table',
+ 'z_create_dummy_table'])
+ sql_clear_catalog_list.sort()
+ new_catalog.sql_clear_catalog = tuple(sql_clear_catalog_list)
+
+ sql_search_table_list = list(new_catalog.sql_search_tables)
+ sql_search_table_list.append('dummy')
+ sql_search_table_list.sort()
+ new_catalog.sql_search_tables = tuple(sql_search_table_list)
+
+ # prepare arguments for hot reindex
+ source_sql_connection_id_list=list((self.original_connection_id,
+ self.original_deferred_connection_id))
+ destination_sql_connection_id_list=list((self.new_erp5_sql_connection,
+ self.new_erp5_deferred_sql_connection))
+ # launch the full hot reindexing
+ portal_catalog.manage_hotReindexAll(source_sql_catalog_id=self.original_catalog_id,
+ destination_sql_catalog_id=self.new_catalog_id,
+ source_sql_connection_id_list=source_sql_connection_id_list,
+ destination_sql_connection_id_list=destination_sql_connection_id_list,
+ update_destination_sql_catalog=True)
+
+ # Flush message queue
+ transaction.commit()
+ self.tic()
+ # Check that column map is updated according new structure of catalog.
+ self.assertTrue('dummy.dummy_title' in portal_catalog.getSQLCatalog().getColumnMap())
+ # Check more cached methods of SQLCatalog by building SQLQuery
+ query = portal_catalog.getSQLCatalog().buildQuery(kw={'dummy.dummy_title': 'Foo'})
+ self.assertTrue(query.query_list)
+
def test_47_Unrestricted(self, quiet=quiet, run=run_all_test):
"""test unrestricted search/count results.
"""
More information about the Erp5-report
mailing list