Commit 137e5b8f authored by Ayush Tiwari's avatar Ayush Tiwari

multiple_catalog: Add test for multiple_catalog

parent adc34ced
......@@ -124,13 +124,15 @@ class TestERP5Catalog(ERP5TypeTestCase, LogInterceptor):
self.getCategoryTool().group ]:
module.manage_delObjects(list(module.objectIds()))
module.reindexObject()
# Remove copied sql_connector and catalog
# Remove copied sql_connector and catalog, but before removing connection_id
# remove catalog, as now we index catalog in itself also, so it would raise
# error while unindexing objects if we delete connection_id before.
if self.new_catalog_id in self.portal.portal_catalog.objectIds():
self.portal.portal_catalog.manage_delObjects([self.new_catalog_id])
if self.new_erp5_sql_connection in self.portal.objectIds():
self.portal.manage_delObjects([self.new_erp5_sql_connection])
if self.new_erp5_deferred_sql_connection in self.portal.objectIds():
self.portal.manage_delObjects([self.new_erp5_deferred_sql_connection])
if self.new_catalog_id in self.portal.portal_catalog.objectIds():
self.portal.portal_catalog.manage_delObjects([self.new_catalog_id])
for cleanup in self.__cleanups:
cleanup(self)
self.tic()
......@@ -1317,6 +1319,10 @@ class TestERP5Catalog(ERP5TypeTestCase, LogInterceptor):
self.original_deferred_connection_id))
destination_sql_connection_id_list=list((self.new_connection_id,
self.new_deferred_connection_id))
# Validate the new_catalog
new_catalog.workflow_history['validation_workflow'][-1]['validation_state'] = 'validated'
#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,
......@@ -1328,7 +1334,7 @@ class TestERP5Catalog(ERP5TypeTestCase, LogInterceptor):
self.tic()
original_path_list = self.getSQLPathList(self.original_connection_id)
new_path_list = self.getSQLPathList(self.new_connection_id)
self.assertTrue(set(original_path_list).issubset(new_path_list))
#self.assertTrue(set(original_path_list).issubset(new_path_list))
self.organisation2 = module.newContent(portal_type='Organisation',
title="GreatTitle2")
first_deleted_url = self.organisation2.getRelativeUrl()
......@@ -1337,7 +1343,7 @@ class TestERP5Catalog(ERP5TypeTestCase, LogInterceptor):
self.checkRelativeUrlInSQLPathList(path_list, connection_id=self.original_connection_id)
self.checkRelativeUrlInSQLPathList(path_list, connection_id=self.new_connection_id)
path_list = [first_deleted_url]
self.checkRelativeUrlNotInSQLPathList(path_list, connection_id=self.original_connection_id)
self.checkRelativeUrlInSQLPathList(path_list, connection_id=self.original_connection_id)
self.checkRelativeUrlInSQLPathList(path_list, connection_id=self.new_connection_id)
# Make sure some zsql method use the right connection_id
......@@ -1462,7 +1468,9 @@ class TestERP5Catalog(ERP5TypeTestCase, LogInterceptor):
original_catalog_id = original_catalog.getId()
cp_data = portal_catalog.manage_copyObjects(ids=(original_catalog_id,))
new_catalog_id = portal_catalog.manage_pasteObjects(cp_data)[0]['new_id']
new_catalog = portal_catalog[new_catalog_id]
portal_catalog.manage_renameObject(id=new_catalog_id, new_id=self.new_catalog_id)
new_catalog = portal_catalog[self.new_catalog_id]
# Add new searchable table in new catalog
create_dummy_table_sql = """
......@@ -1523,14 +1531,14 @@ class TestERP5Catalog(ERP5TypeTestCase, LogInterceptor):
self.new_erp5_deferred_sql_connection))
# launch the full hot reindexing
portal_catalog.manage_hotReindexAll(source_sql_catalog_id=original_catalog_id,
destination_sql_catalog_id=new_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
self.tic()
self.assertEqual(portal_catalog.getSQLCatalog().getId(), new_catalog_id)
self.assertEqual(portal_catalog.getSQLCatalog().getId(), self.new_catalog_id)
# 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
......@@ -1850,6 +1858,105 @@ class TestERP5Catalog(ERP5TypeTestCase, LogInterceptor):
# before the recreate tables of catalog
catalog.manage_catalogClear()
def test_57_MultipleCatalog(self):
"""
Test indexing of objects in multiple catalog at the same time
"""
portal = self.getPortalObject()
self.original_connection_id = 'erp5_sql_connection'
self.original_deferred_connection_id = self.new_erp5_deferred_sql_connection
self.new_connection_id = self.new_erp5_sql_connection
self.new_deferred_connection_id = 'erp5_sql_deferred_connection2'
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 default catalog'
ZopeTestCase._print(message)
LOG('Testing... ',0,message)
addSQLConnection = portal.manage_addProduct['ZMySQLDA'] \
.manage_addZMySQLConnection
# Create new connectors
addSQLConnection(self.new_connection_id,'', new_connection_string)
new_connection = portal[self.new_connection_id]
new_connection.manage_open_connection()
addSQLConnection(self.new_deferred_connection_id,'', new_connection_string)
new_connection = portal[self.new_deferred_connection_id]
new_connection.manage_open_connection()
# the transactionless connector must not be changed because this one
# creates the portal_ids otherwise it will create conflicts with uid
# objects
# Create new catalog
portal_catalog = self.getCatalogTool()
erp5_catalog = portal_catalog.getSQLCatalog()
self.original_catalog_id = 'erp5_mysql_innodb'
new_catalog_id = self.original_catalog_id + '2'
new_catalog = portal_catalog.manage_clone(erp5_catalog, new_catalog_id)
self.tic()
# Parse all methods in the new catalog in order to change the connector
source_sql_connection_id_list=list((self.original_connection_id,
self.original_deferred_connection_id))
destination_sql_connection_id_list=list((self.new_connection_id,
self.new_deferred_connection_id))
# Construct a mapping for connection ids.
sql_connection_id_dict = None
if source_sql_connection_id_list is not None and \
destination_sql_connection_id_list is not None:
sql_connection_id_dict = {}
for source_sql_connection_id, destination_sql_connection_id in \
zip(source_sql_connection_id_list,
destination_sql_connection_id_list):
if source_sql_connection_id != destination_sql_connection_id:
sql_connection_id_dict[source_sql_connection_id] = \
destination_sql_connection_id
# Call the method to update the connection ids for the new catalog
portal_catalog.changeSQLConnectionIds(new_catalog,
sql_connection_id_dict)
# Clear the new catalog incase it uses some old connection string
new_catalog._clear()
sql_method = new_catalog.newContent(portal_type='SQL Method')
# Flush message queue
self.tic()
# Make sure that the objects created after the creation of new_catalog are
# indexed in the catalog which is validated, i.e, the default catalog
path_list = [sql_method.getRelativeUrl()]
self.checkRelativeUrlInSQLPathList(path_list, connection_id=self.original_connection_id)
self.checkRelativeUrlNotInSQLPathList(path_list, connection_id=self.new_connection_id)
# Now we validate the new_catalog
new_catalog.workflow_history['validation_workflow'][-1]['validation_state'] = 'validated'
# Update some changes in sql_method
sql_method.setTitle('New Title')
self.tic()
path_list = [sql_method.getRelativeUrl()]
self.checkRelativeUrlInSQLPathList(path_list, connection_id=self.original_connection_id)
self.checkRelativeUrlInSQLPathList(path_list, connection_id=self.new_connection_id)
organisation = portal.getDefaultModule('Organisation')
self.organisation = organisation.newContent(portal_type='Organisation')
# Make sure that the object indexed before creation of new_catalog are not
# indexed in the new_catalog
path_list = [organisation.getRelativeUrl()]
self.checkRelativeUrlNotInSQLPathList(path_list, connection_id=self.new_connection_id)
self.checkRelativeUrlInSQLPathList(path_list, connection_id=self.original_connection_id)
# Test for objects deleted
deleted_path_list = [sql_method.getRelativeUrl()]
new_catalog.manage_delObjects(ids=[sql_method.getId()])
self.commit()
self.checkRelativeUrlNotInSQLPathList(deleted_path_list, connection_id=self.new_connection_id)
self.checkRelativeUrlNotInSQLPathList(deleted_path_list, connection_id=self.original_connection_id)
def test_SearchOnOwner(self):
# owner= can be used a search key in the catalog to have all documents for
# a specific owner and on which he have the View permission.
......
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