diff --git a/.classpath b/.classpath index ae057e01bd2..8e20ce98757 100644 --- a/.classpath +++ b/.classpath @@ -1,7 +1,7 @@ - + diff --git a/config/alfresco/action-services-context.xml b/config/alfresco/action-services-context.xml index 6632dd09384..9852aeea3dc 100644 --- a/config/alfresco/action-services-context.xml +++ b/config/alfresco/action-services-context.xml @@ -314,10 +314,10 @@ - + - + @@ -503,8 +503,9 @@ + - false + true @@ -778,7 +779,19 @@ false - + + + + + + + + + + false + + + diff --git a/config/alfresco/activiti-context.xml b/config/alfresco/activiti-context.xml index 691440e49a6..c0f5295fed4 100644 --- a/config/alfresco/activiti-context.xml +++ b/config/alfresco/activiti-context.xml @@ -51,19 +51,22 @@ class="org.alfresco.repo.workflow.activiti.variable.ScriptNodeListVariableType"> - - - - - - - - - - ${system.workflow.deployWorkflowsInTenant} - - + + + + + + + + + + + + + + + + @@ -88,11 +91,13 @@ - - - - - + + + + + + + @@ -115,6 +120,12 @@ + + + + + - + + + + diff --git a/config/alfresco/application-context-highlevel.xml b/config/alfresco/application-context-highlevel.xml index 7fb1cf81cd3..d82c1f1fde1 100644 --- a/config/alfresco/application-context-highlevel.xml +++ b/config/alfresco/application-context-highlevel.xml @@ -41,6 +41,7 @@ + diff --git a/config/alfresco/authentication-services-context.xml b/config/alfresco/authentication-services-context.xml index f42c25b1ee2..312628f3d37 100644 --- a/config/alfresco/authentication-services-context.xml +++ b/config/alfresco/authentication-services-context.xml @@ -239,6 +239,8 @@ org.alfresco.repo.security.sync.UserRegistrySynchronizer + org.alfresco.repo.security.sync.TestableChainingUserRegistrySynchronizer + org.alfresco.repo.security.sync.ChainingUserRegistrySynchronizerStatus diff --git a/config/alfresco/authority-services-context.xml b/config/alfresco/authority-services-context.xml index bc0c6e4a60c..fb6bd7301dc 100644 --- a/config/alfresco/authority-services-context.xml +++ b/config/alfresco/authority-services-context.xml @@ -94,21 +94,13 @@ - - - - - - - - - - - - - - ${authority.useBridgeTable} - + + + + + + + diff --git a/config/alfresco/bootstrap-context.xml b/config/alfresco/bootstrap-context.xml index a24909bff14..5098004e7d5 100644 --- a/config/alfresco/bootstrap-context.xml +++ b/config/alfresco/bootstrap-context.xml @@ -54,6 +54,9 @@ + + + @@ -308,6 +311,7 @@ alfresco/workflow/wcmWorkflowModel.xml alfresco/workflow/invitation-nominated-workflow-model.xml alfresco/workflow/invitation-moderated-workflow-model.xml + alfresco/workflow/publishingWorkflowModel.xml @@ -375,22 +379,6 @@ before reindexing begins. --> - - - - - - - - - - - - - - - - @@ -435,6 +423,19 @@ + + + + + + + + + + + + + @@ -636,6 +637,9 @@ + + + ${system.usages.clearBatchSize} diff --git a/config/alfresco/bootstrap/example_javascripts2.acp b/config/alfresco/bootstrap/example_javascripts2.acp index 336b5d1247f..180583ab669 100644 Binary files a/config/alfresco/bootstrap/example_javascripts2.acp and b/config/alfresco/bootstrap/example_javascripts2.acp differ diff --git a/config/alfresco/bootstrap/sharedSpace.xml b/config/alfresco/bootstrap/sharedSpace.xml new file mode 100644 index 00000000000..73272fa854b --- /dev/null +++ b/config/alfresco/bootstrap/sharedSpace.xml @@ -0,0 +1,26 @@ + + + + + + + GROUP_EVERYONE + Contributor + + + + + + + + ${spaces.shared.name} + space-icon-default + ${spaces.shared.title} + ${spaces.shared.description} + + + diff --git a/config/alfresco/bootstrap/spaces.xml b/config/alfresco/bootstrap/spaces.xml index 4d6954387b4..ed906444785 100644 --- a/config/alfresco/bootstrap/spaces.xml +++ b/config/alfresco/bootstrap/spaces.xml @@ -134,6 +134,19 @@ ${spaces.user_homes.name} ${spaces.user_homes.description} + + + + GROUP_EVERYONE + Contributor + + + + ${spaces.shared.name} + space-icon-default + ${spaces.shared.title} + ${spaces.shared.description} + ${spaces.imap_attachments.name} diff --git a/config/alfresco/cache-context.xml b/config/alfresco/cache-context.xml index 171ac7fd08f..8dbe1d9e26d 100644 --- a/config/alfresco/cache-context.xml +++ b/config/alfresco/cache-context.xml @@ -6,20 +6,56 @@ are defined in tx-cache-context.xml --> + - + Factory responsible for creating caches - override this bean + to modify cache creation behaviour. + --> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + @@ -28,8 +64,8 @@ - - + + @@ -38,8 +74,8 @@ - - + + @@ -48,8 +84,8 @@ - - + + @@ -58,14 +94,14 @@ - - + + - - + + @@ -74,8 +110,8 @@ - - + + @@ -84,8 +120,8 @@ - - + + @@ -94,8 +130,8 @@ - - + + @@ -105,8 +141,8 @@ - - + + @@ -123,14 +159,14 @@ - - + + - - + + @@ -139,8 +175,8 @@ - - + + @@ -149,63 +185,18 @@ - - + + - - - - - - - - asynchronouslyRefreshedCacheThreadPool - - - 1 - - - 1 - - - 5 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + @@ -214,8 +205,8 @@ - - + + @@ -224,8 +215,8 @@ - - + + @@ -234,8 +225,8 @@ - - + + @@ -245,8 +236,8 @@ - - + + @@ -255,8 +246,8 @@ - - + + @@ -265,8 +256,8 @@ - - + + @@ -280,26 +271,26 @@ - - + + - - + + - - + + - - + + @@ -308,8 +299,8 @@ - - + + @@ -319,8 +310,8 @@ - - + + @@ -329,8 +320,8 @@ - - + + @@ -357,20 +348,20 @@ - - + + - - + + - - + + @@ -380,12 +371,11 @@ - - + + - - + @@ -394,8 +384,12 @@ - - + + + + + + @@ -404,8 +398,13 @@ - - + + + @@ -414,8 +413,8 @@ - - + + @@ -424,8 +423,8 @@ - - + + @@ -434,8 +433,8 @@ - - + + @@ -444,8 +443,8 @@ - - + + @@ -454,22 +453,22 @@ - - + + - - + + - - + + - - + + @@ -478,8 +477,8 @@ - - + + @@ -489,8 +488,9 @@ - - + + + diff --git a/config/alfresco/caches.properties b/config/alfresco/caches.properties new file mode 100644 index 00000000000..58def50c59b --- /dev/null +++ b/config/alfresco/caches.properties @@ -0,0 +1,193 @@ +# +# Cache configuration +# +# Note that the Community edition supports only the *.maxItems properties. +# +cache.propertyValueCache.maxItems=10000 +cache.propertyValueCache.timeToLiveSeconds=0 +cache.propertyValueCache.maxIdleSeconds=0 + +cache.contentDataSharedCache.maxItems=130000 +cache.contentDataSharedCache.timeToLiveSeconds=0 +cache.contentDataSharedCache.maxIdleSeconds=0 + +cache.immutableEntitySharedCache.maxItems=50000 +cache.immutableEntitySharedCache.timeToLiveSeconds=0 +cache.immutableEntitySharedCache.maxIdleSeconds=0 + +cache.node.rootNodesSharedCache.maxItems=1000 +cache.node.rootNodesSharedCache.timeToLiveSeconds=0 +cache.node.rootNodesSharedCache.maxIdleSeconds=0 + +cache.node.allRootNodesSharedCache.maxItems=1000 +cache.node.allRootNodesSharedCache.timeToLiveSeconds=0 +cache.node.allRootNodesSharedCache.maxIdleSeconds=0 + +cache.node.nodesSharedCache.maxItems=250000 +cache.node.nodesSharedCache.timeToLiveSeconds=0 +cache.node.nodesSharedCache.maxIdleSeconds=0 + +cache.node.aspectsSharedCache.maxItems=130000 +cache.node.aspectsSharedCache.timeToLiveSeconds=0 +cache.node.aspectsSharedCache.maxIdleSeconds=0 + +cache.node.propertiesSharedCache.maxItems=130000 +cache.node.propertiesSharedCache.timeToLiveSeconds=0 +cache.node.propertiesSharedCache.maxIdleSeconds=0 + +cache.node.parentAssocsSharedCache.maxItems=130000 +cache.node.parentAssocsSharedCache.timeToLiveSeconds=0 +cache.node.parentAssocsSharedCache.maxIdleSeconds=0 + +cache.node.childByNameSharedCache.maxItems=130000 +cache.node.childByNameSharedCache.timeToLiveSeconds=0 +cache.node.childByNameSharedCache.maxIdleSeconds=0 + +cache.userToAuthoritySharedCache.maxItems=5000 +cache.userToAuthoritySharedCache.timeToLiveSeconds=0 +cache.userToAuthoritySharedCache.maxIdleSeconds=0 + +cache.authenticationSharedCache.maxItems=5000 +cache.authenticationSharedCache.timeToLiveSeconds=0 +cache.authenticationSharedCache.maxIdleSeconds=0 + +cache.authoritySharedCache.maxItems=10000 +cache.authoritySharedCache.timeToLiveSeconds=0 +cache.authoritySharedCache.maxIdleSeconds=0 + +cache.authorityToChildAuthoritySharedCache.maxItems=40000 +cache.authorityToChildAuthoritySharedCache.timeToLiveSeconds=0 +cache.authorityToChildAuthoritySharedCache.maxIdleSeconds=0 + +cache.zoneToAuthoritySharedCache.maxItems=500 +cache.zoneToAuthoritySharedCache.timeToLiveSeconds=0 +cache.zoneToAuthoritySharedCache.maxIdleSeconds=0 + +cache.permissionsAccessSharedCache.maxItems=50000 +cache.permissionsAccessSharedCache.timeToLiveSeconds=0 +cache.permissionsAccessSharedCache.maxIdleSeconds=0 + +cache.readersSharedCache.maxItems=10000 +cache.readersSharedCache.timeToLiveSeconds=0 +cache.readersSharedCache.maxIdleSeconds=0 + +cache.readersDeniedSharedCache.maxItems=10000 +cache.readersDeniedSharedCache.timeToLiveSeconds=0 +cache.readersDeniedSharedCache.maxIdleSeconds=0 + +cache.nodeOwnerSharedCache.maxItems=40000 +cache.nodeOwnerSharedCache.timeToLiveSeconds=0 +cache.nodeOwnerSharedCache.maxIdleSeconds=0 + +cache.personSharedCache.maxItems=1000 +cache.personSharedCache.timeToLiveSeconds=0 +cache.personSharedCache.maxIdleSeconds=0 + +cache.ticketsCache.maxItems=1000 +cache.ticketsCache.timeToLiveSeconds=0 +cache.ticketsCache.maxIdleSeconds=0 + +cache.avmEntitySharedCache.maxItems=5000 +cache.avmEntitySharedCache.timeToLiveSeconds=0 +cache.avmEntitySharedCache.maxIdleSeconds=0 + +cache.avmVersionRootEntitySharedCache.maxItems=1000 +cache.avmVersionRootEntitySharedCache.timeToLiveSeconds=0 +cache.avmVersionRootEntitySharedCache.maxIdleSeconds=0 + +cache.avmNodeSharedCache.maxItems=5000 +cache.avmNodeSharedCache.timeToLiveSeconds=0 +cache.avmNodeSharedCache.maxIdleSeconds=0 + +cache.avmNodeAspectsSharedCache.maxItems=5000 +cache.avmNodeAspectsSharedCache.timeToLiveSeconds=0 +cache.avmNodeAspectsSharedCache.maxIdleSeconds=0 + +cache.webServicesQuerySessionSharedCache.maxItems=1000 +cache.webServicesQuerySessionSharedCache.timeToLiveSeconds=0 +cache.webServicesQuerySessionSharedCache.maxIdleSeconds=0 + +cache.aclSharedCache.maxItems=50000 +cache.aclSharedCache.timeToLiveSeconds=0 +cache.aclSharedCache.maxIdleSeconds=0 + +cache.aclEntitySharedCache.maxItems=50000 +cache.aclEntitySharedCache.timeToLiveSeconds=0 +cache.aclEntitySharedCache.maxIdleSeconds=0 + +cache.resourceBundleBaseNamesSharedCache.maxItems=1000 +cache.resourceBundleBaseNamesSharedCache.timeToLiveSeconds=0 +cache.resourceBundleBaseNamesSharedCache.maxIdleSeconds=0 + +cache.loadedResourceBundlesSharedCache.maxItems=1000 +cache.loadedResourceBundlesSharedCache.timeToLiveSeconds=0 +cache.loadedResourceBundlesSharedCache.maxIdleSeconds=0 + +cache.messagesSharedCache.maxItems=1000 +cache.messagesSharedCache.timeToLiveSeconds=0 +cache.messagesSharedCache.maxIdleSeconds=0 + +cache.compiledModelsSharedCache.maxItems=1000 +cache.compiledModelsSharedCache.timeToLiveSeconds=0 +cache.compiledModelsSharedCache.maxIdleSeconds=0 + +cache.webScriptsRegistrySharedCache.maxItems=1000 +cache.webScriptsRegistrySharedCache.timeToLiveSeconds=0 +cache.webScriptsRegistrySharedCache.maxIdleSeconds=0 + +cache.routingContentStoreSharedCache.maxItems=10000 +cache.routingContentStoreSharedCache.timeToLiveSeconds=0 +cache.routingContentStoreSharedCache.maxIdleSeconds=0 + +cache.executingActionsCache.maxItems=1000 +cache.executingActionsCache.timeToLiveSeconds=0 +cache.executingActionsCache.maxIdleSeconds=0 + +cache.tagscopeSummarySharedCache.maxItems=1000 +cache.tagscopeSummarySharedCache.timeToLiveSeconds=0 +cache.tagscopeSummarySharedCache.maxIdleSeconds=0 + +cache.imapMessageSharedCache.maxItems=2000 +cache.imapMessageSharedCache.timeToLiveSeconds=0 +cache.imapMessageSharedCache.maxIdleSeconds=0 + +cache.tenantEntitySharedCache.maxItems=1000 +cache.tenantEntitySharedCache.timeToLiveSeconds=0 +cache.tenantEntitySharedCache.maxIdleSeconds=0 + +cache.immutableSingletonSharedCache.maxItems=12000 +cache.immutableSingletonSharedCache.timeToLiveSeconds=0 +cache.immutableSingletonSharedCache.maxIdleSeconds=0 + +cache.remoteAlfrescoTicketService.ticketsCache.maxItems=1000 +cache.remoteAlfrescoTicketService.ticketsCache.timeToLiveSeconds=0 +cache.remoteAlfrescoTicketService.ticketsCache.maxIdleSeconds=0 + +cache.contentDiskDriver.fileInfoCache.maxItems=1000 +cache.contentDiskDriver.fileInfoCache.timeToLiveSeconds=0 +cache.contentDiskDriver.fileInfoCache.maxIdleSeconds=0 + +cache.globalConfigSharedCache.maxItems=1000 +cache.globalConfigSharedCache.timeToLiveSeconds=0 +cache.globalConfigSharedCache.maxIdleSeconds=0 + +cache.propertyUniqueContextSharedCache.maxItems=10000 +cache.propertyUniqueContextSharedCache.timeToLiveSeconds=0 +cache.propertyUniqueContextSharedCache.maxIdleSeconds=0 + +cache.siteNodeRefSharedCache.maxItems=5000 +cache.siteNodeRefSharedCache.timeToLiveSeconds=0 +cache.siteNodeRefSharedCache.maxIdleSeconds=0 + +cache.samlTrustEngineSharedCache.maxItems=5000 +cache.samlTrustEngineSharedCache.timeToLiveSeconds=0 +cache.samlTrustEngineSharedCache.maxIdleSeconds=0 + +# Caching content store, see caching-content-store-context.xml.sample* +cache.cachingContentStoreCache.maxItems=5000 +cache.cachingContentStoreCache.timeToLiveSeconds=0 +cache.cachingContentStoreCache.maxIdleSeconds=86400 + +cache.publicapi.webScriptsRegistryCache.maxItems=1000 +cache.publicapi.webScriptsRegistryCache.timeToLiveSeconds=0 +cache.publicapi.webScriptsRegistryCache.maxIdleSeconds=0 diff --git a/config/alfresco/content-publishing-context.xml b/config/alfresco/content-publishing-context.xml index 241f2ff1eb5..c90e98088d8 100644 --- a/config/alfresco/content-publishing-context.xml +++ b/config/alfresco/content-publishing-context.xml @@ -73,7 +73,7 @@ - + diff --git a/config/alfresco/content-services-context.xml b/config/alfresco/content-services-context.xml index dd82c3ee33e..fea1861dfa9 100644 --- a/config/alfresco/content-services-context.xml +++ b/config/alfresco/content-services-context.xml @@ -350,7 +350,7 @@ - + @@ -362,7 +362,7 @@ - + @@ -403,7 +403,10 @@ - + - + - - - - - - - - - - image/png - - - - - - - - - - - - - - - - - - - - - - - - image/jpeg - - - - - - - - - - - - - - - image/jpeg - - - - - - - - - - - - - - application/pdf - - - - - - - - - - - - - - application/pdf - - - - @@ -621,74 +531,10 @@ - - - - - - - - - - application/pdf - - - - - - - - - - - - - - - - - - - - - - - - application/vnd.oasis.opendocument.text - - - - - - - - - - - - - - text/plain - - - - diff --git a/config/alfresco/copy-services-context.xml b/config/alfresco/copy-services-context.xml index 920c5a2f2fc..499a93c8e8d 100644 --- a/config/alfresco/copy-services-context.xml +++ b/config/alfresco/copy-services-context.xml @@ -30,13 +30,23 @@ + + + + http://www.alfresco.org/model/application/1.0 + http://www.alfresco.org/model/site/1.0 + + + + - + + diff --git a/config/alfresco/core-services-context.xml b/config/alfresco/core-services-context.xml index 9c86bc59a99..6124d68527a 100644 --- a/config/alfresco/core-services-context.xml +++ b/config/alfresco/core-services-context.xml @@ -36,6 +36,7 @@ classpath:alfresco/repository.properties classpath:alfresco/domain/transaction.properties + classpath:alfresco/caches.properties classpath*:alfresco/enterprise/repository.properties @@ -135,6 +136,9 @@ + + + @@ -330,9 +340,6 @@ - - - @@ -501,10 +508,22 @@ + + + + + + + + + + + + @@ -1000,6 +1019,9 @@ 1 + + true + @@ -1389,4 +1411,6 @@ + + diff --git a/config/alfresco/dbscripts/create/org.hibernate.dialect.MySQLInnoDBDialect/AlfrescoCreate-ActivityTables.sql b/config/alfresco/dbscripts/create/org.hibernate.dialect.MySQLInnoDBDialect/AlfrescoCreate-ActivityTables.sql index b2e17ab0b0f..3de1040693b 100644 --- a/config/alfresco/dbscripts/create/org.hibernate.dialect.MySQLInnoDBDialect/AlfrescoCreate-ActivityTables.sql +++ b/config/alfresco/dbscripts/create/org.hibernate.dialect.MySQLInnoDBDialect/AlfrescoCreate-ActivityTables.sql @@ -15,7 +15,6 @@ CREATE TABLE alf_activity_feed activity_summary TEXT, feed_user_id VARCHAR(255), activity_type VARCHAR(255) NOT NULL, - activity_format VARCHAR(10), site_network VARCHAR(255), app_tool VARCHAR(36), post_user_id VARCHAR(255) NOT NULL, @@ -24,8 +23,7 @@ CREATE TABLE alf_activity_feed KEY feed_postdate_idx (post_date), KEY feed_postuserid_idx (post_user_id), KEY feed_feeduserid_idx (feed_user_id), - KEY feed_sitenetwork_idx (site_network), - KEY feed_activityformat_idx (activity_format) + KEY feed_sitenetwork_idx (site_network) ) ENGINE=InnoDB; CREATE TABLE alf_activity_feed_control diff --git a/config/alfresco/dbscripts/create/org.hibernate.dialect.MySQLInnoDBDialect/AlfrescoCreate-ContentTables.sql b/config/alfresco/dbscripts/create/org.hibernate.dialect.MySQLInnoDBDialect/AlfrescoCreate-ContentTables.sql index ff2eee9a4a9..ee6d7d9d55c 100644 --- a/config/alfresco/dbscripts/create/org.hibernate.dialect.MySQLInnoDBDialect/AlfrescoCreate-ContentTables.sql +++ b/config/alfresco/dbscripts/create/org.hibernate.dialect.MySQLInnoDBDialect/AlfrescoCreate-ContentTables.sql @@ -38,6 +38,7 @@ CREATE TABLE alf_content_url orphan_time BIGINT NULL, UNIQUE INDEX idx_alf_conturl_cr (content_url_short, content_url_crc), INDEX idx_alf_conturl_ot (orphan_time), + INDEX idx_alf_conturl_sz (content_size), PRIMARY KEY (id) ) ENGINE=InnoDB; diff --git a/config/alfresco/dbscripts/create/org.hibernate.dialect.MySQLInnoDBDialect/AlfrescoCreate-RepoTables.sql b/config/alfresco/dbscripts/create/org.hibernate.dialect.MySQLInnoDBDialect/AlfrescoCreate-RepoTables.sql index ca4ed978b4f..641d5b37194 100644 --- a/config/alfresco/dbscripts/create/org.hibernate.dialect.MySQLInnoDBDialect/AlfrescoCreate-RepoTables.sql +++ b/config/alfresco/dbscripts/create/org.hibernate.dialect.MySQLInnoDBDialect/AlfrescoCreate-RepoTables.sql @@ -49,7 +49,6 @@ CREATE TABLE alf_qname local_name VARCHAR(200) NOT NULL, PRIMARY KEY (id), UNIQUE KEY ns_id (ns_id, local_name), - KEY fk_alf_qname_ns (ns_id), CONSTRAINT fk_alf_qname_ns FOREIGN KEY (ns_id) REFERENCES alf_namespace (id) ) ENGINE=InnoDB; @@ -218,6 +217,11 @@ CREATE TABLE alf_node KEY fk_alf_node_store (store_id), KEY fk_alf_node_tqn (type_qname_id), KEY fk_alf_node_loc (locale_id), + KEY idx_alf_node_mdq (store_id, type_qname_id), + KEY idx_alf_node_cor (audit_creator, store_id, type_qname_id), + KEY idx_alf_node_crd (audit_created, store_id, type_qname_id), + KEY idx_alf_node_mor (audit_modifier, store_id, type_qname_id), + KEY idx_alf_node_mod (audit_modified, store_id, type_qname_id), CONSTRAINT fk_alf_node_acl FOREIGN KEY (acl_id) REFERENCES alf_access_control_list (id), CONSTRAINT fk_alf_node_store FOREIGN KEY (store_id) REFERENCES alf_store (id), CONSTRAINT fk_alf_node_tqn FOREIGN KEY (type_qname_id) REFERENCES alf_qname (id), @@ -302,6 +306,8 @@ CREATE TABLE alf_node_properties KEY fk_alf_nprop_n (node_id), KEY fk_alf_nprop_qn (qname_id), KEY fk_alf_nprop_loc (locale_id), + KEY idx_alf_nprop_s (qname_id, string_value(42)), + KEY idx_alf_nprop_l (qname_id, long_value), CONSTRAINT fk_alf_nprop_loc FOREIGN KEY (locale_id) REFERENCES alf_locale (id), CONSTRAINT fk_alf_nprop_n FOREIGN KEY (node_id) REFERENCES alf_node (id), CONSTRAINT fk_alf_nprop_qn FOREIGN KEY (qname_id) REFERENCES alf_qname (id) diff --git a/config/alfresco/dbscripts/create/org.hibernate.dialect.MySQLInnoDBDialect/Schema-Reference-ACT.xml b/config/alfresco/dbscripts/create/org.hibernate.dialect.MySQLInnoDBDialect/Schema-Reference-ACT.xml index 4cd591a32cc..c43fe4af755 100644 --- a/config/alfresco/dbscripts/create/org.hibernate.dialect.MySQLInnoDBDialect/Schema-Reference-ACT.xml +++ b/config/alfresco/dbscripts/create/org.hibernate.dialect.MySQLInnoDBDialect/Schema-Reference-ACT.xml @@ -5,7 +5,7 @@ xsi:schemaLocation="http://www.alfresco.org/repo/db-schema db-schema.xsd" name="" dbprefix="act_" - version="6023" + version="6024" tablecolumnorder="false"> @@ -294,6 +294,16 @@ true false + + datetime + true + false + + + varchar(255) + true + false + @@ -921,6 +931,11 @@ true false + + varchar(64) + true + false + @@ -938,6 +953,11 @@ ACT_RU_TASK ID_ + + PROC_INST_ID_ + ACT_RU_EXECUTION + ID_ + @@ -960,6 +980,11 @@ TASK_ID_ + + + PROC_INST_ID_ + + @@ -1300,6 +1325,62 @@ +
+ + + + varchar(64) + false + false + + + varchar(255) + true + false + + + varchar(255) + true + false + + + varchar(255) + true + false + + + varchar(64) + true + false + + + varchar(64) + true + false + + + + + ID_ + + + + + + USER_ID_ + + + + + TASK_ID_ + + + + + PROC_INST_ID_ + + +
@@ -1392,6 +1473,12 @@ ACT_ID_ + + + EXECUTION_ID_ + ACT_ID_ + +
diff --git a/config/alfresco/dbscripts/create/org.hibernate.dialect.MySQLInnoDBDialect/Schema-Reference-ALF.xml b/config/alfresco/dbscripts/create/org.hibernate.dialect.MySQLInnoDBDialect/Schema-Reference-ALF.xml index f38872db9be..d4e63b9a9b6 100644 --- a/config/alfresco/dbscripts/create/org.hibernate.dialect.MySQLInnoDBDialect/Schema-Reference-ALF.xml +++ b/config/alfresco/dbscripts/create/org.hibernate.dialect.MySQLInnoDBDialect/Schema-Reference-ALF.xml @@ -351,27 +351,22 @@ falsefalse - - varchar(10) - true - false - - + varchar(255) true false - + varchar(36) true false - + varchar(255) false false - + datetime false false @@ -404,11 +399,6 @@ site_network - - - activity_format - -
@@ -1146,6 +1136,11 @@ orphan_time + + + content_size + +
@@ -1522,6 +1517,40 @@ type_qname_id + + + store_id + type_qname_id + + + + + audit_creator + store_id + type_qname_id + + + + + audit_created + store_id + type_qname_id + + + + + audit_modifier + store_id + type_qname_id + + + + + audit_modified + store_id + type_qname_id + +
@@ -1755,6 +1784,18 @@ locale_id + + + qname_id + string_value + + + + + qname_id + long_value + +
@@ -2273,12 +2314,7 @@ local_name - - - ns_id - - - +
diff --git a/config/alfresco/dbscripts/create/org.hibernate.dialect.PostgreSQLDialect/AlfrescoCreate-ActivityTables.sql b/config/alfresco/dbscripts/create/org.hibernate.dialect.PostgreSQLDialect/AlfrescoCreate-ActivityTables.sql index 989dda11130..6d4de97710a 100644 --- a/config/alfresco/dbscripts/create/org.hibernate.dialect.PostgreSQLDialect/AlfrescoCreate-ActivityTables.sql +++ b/config/alfresco/dbscripts/create/org.hibernate.dialect.PostgreSQLDialect/AlfrescoCreate-ActivityTables.sql @@ -16,7 +16,6 @@ CREATE TABLE alf_activity_feed activity_summary VARCHAR(1024), feed_user_id VARCHAR(255), activity_type VARCHAR(255) NOT NULL, - activity_format VARCHAR(10), site_network VARCHAR(255), app_tool VARCHAR(36), post_user_id VARCHAR(255) NOT NULL, @@ -27,7 +26,6 @@ CREATE INDEX feed_postdate_idx ON alf_activity_feed (post_date); CREATE INDEX feed_postuserid_idx ON alf_activity_feed (post_user_id); CREATE INDEX feed_feeduserid_idx ON alf_activity_feed (feed_user_id); CREATE INDEX feed_sitenetwork_idx ON alf_activity_feed (site_network); -CREATE INDEX feed_activityformat_idx ON alf_activity_feed (activity_format); CREATE SEQUENCE alf_activity_feed_control_seq START WITH 1 INCREMENT BY 1; CREATE TABLE alf_activity_feed_control diff --git a/config/alfresco/dbscripts/create/org.hibernate.dialect.PostgreSQLDialect/AlfrescoCreate-ContentTables.sql b/config/alfresco/dbscripts/create/org.hibernate.dialect.PostgreSQLDialect/AlfrescoCreate-ContentTables.sql index 5329e476d63..2c511064658 100644 --- a/config/alfresco/dbscripts/create/org.hibernate.dialect.PostgreSQLDialect/AlfrescoCreate-ContentTables.sql +++ b/config/alfresco/dbscripts/create/org.hibernate.dialect.PostgreSQLDialect/AlfrescoCreate-ContentTables.sql @@ -43,6 +43,7 @@ CREATE TABLE alf_content_url ); CREATE UNIQUE INDEX idx_alf_conturl_cr ON alf_content_url (content_url_short, content_url_crc); CREATE INDEX idx_alf_conturl_ot ON alf_content_url (orphan_time); +CREATE INDEX idx_alf_conturl_sz ON alf_content_url (content_size, id); CREATE SEQUENCE alf_content_data_seq START WITH 1 INCREMENT BY 1; CREATE TABLE alf_content_data diff --git a/config/alfresco/dbscripts/create/org.hibernate.dialect.PostgreSQLDialect/AlfrescoCreate-RepoTables.sql b/config/alfresco/dbscripts/create/org.hibernate.dialect.PostgreSQLDialect/AlfrescoCreate-RepoTables.sql index 09b58817d05..8e55e78e3e0 100644 --- a/config/alfresco/dbscripts/create/org.hibernate.dialect.PostgreSQLDialect/AlfrescoCreate-RepoTables.sql +++ b/config/alfresco/dbscripts/create/org.hibernate.dialect.PostgreSQLDialect/AlfrescoCreate-RepoTables.sql @@ -54,7 +54,6 @@ CREATE TABLE alf_qname PRIMARY KEY (id) ); CREATE UNIQUE INDEX ns_id ON alf_qname (ns_id, local_name); -CREATE INDEX fk_alf_qname_ns ON alf_qname (ns_id); CREATE SEQUENCE alf_permission_seq START WITH 1 INCREMENT BY 1; CREATE TABLE alf_permission @@ -234,6 +233,11 @@ CREATE TABLE alf_node CONSTRAINT fk_alf_node_loc FOREIGN KEY (locale_id) REFERENCES alf_locale (id) ); CREATE UNIQUE INDEX store_id ON alf_node (store_id, uuid); +CREATE INDEX idx_alf_node_mdq ON alf_node (store_id, type_qname_id, id); +CREATE INDEX idx_alf_node_cor ON alf_node (audit_creator, store_id, type_qname_id, id); +CREATE INDEX idx_alf_node_crd ON alf_node (audit_created, store_id, type_qname_id, id); +CREATE INDEX idx_alf_node_mor ON alf_node (audit_modifier, store_id, type_qname_id, id); +CREATE INDEX idx_alf_node_mod ON alf_node (audit_modified, store_id, type_qname_id, id); CREATE INDEX idx_alf_node_txn_type ON alf_node (transaction_id, type_qname_id); CREATE INDEX fk_alf_node_acl ON alf_node (acl_id); CREATE INDEX fk_alf_node_store ON alf_node (store_id); @@ -324,3 +328,5 @@ CREATE TABLE alf_node_properties CREATE INDEX fk_alf_nprop_n ON alf_node_properties (node_id); CREATE INDEX fk_alf_nprop_qn ON alf_node_properties (qname_id); CREATE INDEX fk_alf_nprop_loc ON alf_node_properties (locale_id); +CREATE INDEX idx_alf_nprop_s ON alf_node_properties (qname_id, string_value, node_id); +CREATE INDEX idx_alf_nprop_l ON alf_node_properties (qname_id, long_value, node_id); diff --git a/config/alfresco/dbscripts/create/org.hibernate.dialect.PostgreSQLDialect/Schema-Reference-ACT.xml b/config/alfresco/dbscripts/create/org.hibernate.dialect.PostgreSQLDialect/Schema-Reference-ACT.xml index 4894019c575..c5452d9ae2e 100644 --- a/config/alfresco/dbscripts/create/org.hibernate.dialect.PostgreSQLDialect/Schema-Reference-ACT.xml +++ b/config/alfresco/dbscripts/create/org.hibernate.dialect.PostgreSQLDialect/Schema-Reference-ACT.xml @@ -5,7 +5,7 @@ xsi:schemaLocation="http://www.alfresco.org/repo/db-schema db-schema.xsd" name="" dbprefix="act_" - version="6023" + version="6024" tablecolumnorder="false"> @@ -186,6 +186,12 @@ act_id_ + + + execution_id_ + act_id_ + +
@@ -592,6 +598,16 @@ truefalse + + timestamp + true + false + + + varchar(255) + true + false + @@ -1227,6 +1243,11 @@ true false + + varchar(64) + true + false + @@ -1244,6 +1265,11 @@ act_ru_task id_ + + proc_inst_id_ + act_ru_execution + id_ + @@ -1266,6 +1292,11 @@ task_id_ + + + proc_inst_id_ + +
@@ -1607,6 +1638,62 @@
+ + + + varchar(64) + false + false + + + varchar(255) + true + false + + + varchar(255) + true + false + + + varchar(255) + true + false + + + varchar(64) + true + false + + + varchar(64) + true + false + + + + + id_ + + + + + + user_id_ + + + + + task_id_ + + + + + proc_inst_id_ + + + +
diff --git a/config/alfresco/dbscripts/create/org.hibernate.dialect.PostgreSQLDialect/Schema-Reference-ALF.xml b/config/alfresco/dbscripts/create/org.hibernate.dialect.PostgreSQLDialect/Schema-Reference-ALF.xml index 65def0eb10d..e60b92a5355 100644 --- a/config/alfresco/dbscripts/create/org.hibernate.dialect.PostgreSQLDialect/Schema-Reference-ALF.xml +++ b/config/alfresco/dbscripts/create/org.hibernate.dialect.PostgreSQLDialect/Schema-Reference-ALF.xml @@ -388,27 +388,22 @@ false false - - varchar(10) - true - false - - + varchar(255) true false - + varchar(36) true false - + varchar(255) false false - + timestamp false false @@ -421,11 +416,6 @@ - - - activity_format - - feed_user_id @@ -1183,6 +1173,12 @@ orphan_time + + + content_size + id + +
@@ -1566,6 +1562,45 @@ type_qname_id + + + store_id + type_qname_id + id + + + + + audit_creator + store_id + type_qname_id + id + + + + + audit_created + store_id + type_qname_id + id + + + + + audit_modifier + store_id + type_qname_id + id + + + + + audit_modified + store_id + type_qname_id + id + +
@@ -1806,6 +1841,20 @@ qname_id + + + qname_id + string_value + node_id + + + + + qname_id + long_value + node_id + +
@@ -2324,12 +2373,7 @@ local_name - - - ns_id - - - +
diff --git a/config/alfresco/dbscripts/db-schema-context.xml b/config/alfresco/dbscripts/db-schema-context.xml index 5db72dbf923..ce7a3b419ef 100644 --- a/config/alfresco/dbscripts/db-schema-context.xml +++ b/config/alfresco/dbscripts/db-schema-context.xml @@ -86,6 +86,11 @@ + + + + + @@ -100,6 +105,7 @@ + @@ -120,6 +126,7 @@ + diff --git a/config/alfresco/dbscripts/upgrade/4.1/org.hibernate.dialect.Dialect/drop-activiti-feed-format.sql b/config/alfresco/dbscripts/upgrade/4.1/org.hibernate.dialect.Dialect/drop-activiti-feed-format.sql new file mode 100644 index 00000000000..eeb08ff4ea1 --- /dev/null +++ b/config/alfresco/dbscripts/upgrade/4.1/org.hibernate.dialect.Dialect/drop-activiti-feed-format.sql @@ -0,0 +1,26 @@ +-- +-- Title: Update ALF_ACTIVITY_FEED table. Delete all records with activity_format != "json". Remove column ACTIVITY_FORMAT +-- Database: Generic +-- Since: V4.1 Schema 5119 +-- Author: Alex Malinovsky +-- +-- Please contact support@alfresco.com if you need assistance with the upgrade. +-- +-- MNT-8983: 'Could not load activities list' in My/Site Activities dashlets after upgrade if activities were generated on 3.4.x +-- ALF-17493 : Remove alf_activity_feed.activity_format. +-- +-- Record script finish +-- + +DELETE FROM alf_activity_feed WHERE activity_format <> 'json'; + +ALTER TABLE alf_activity_feed DROP COLUMN activity_format; + +DELETE FROM alf_applied_patch WHERE id = 'patch.db-V4.1-drop-activiti-feed-format'; +INSERT INTO alf_applied_patch + (id, description, fixes_from_schema, fixes_to_schema, applied_to_schema, target_schema, applied_on_date, applied_to_server, was_executed, succeeded, report) + VALUES + ( + 'patch.db-V4.1-drop-activiti-feed-format', 'Manually executed script upgrade V4.1: Update ALF_ACTIVITY_FEED table. Remove column ACTIVITY_FORMAT', + 0, 6025, -1, 6026, null, 'UNKNOWN', ${TRUE}, ${TRUE}, 'Script completed' + ); \ No newline at end of file diff --git a/config/alfresco/dbscripts/upgrade/4.1/org.hibernate.dialect.Dialect/dropAlfQnameFKIndexes.sql b/config/alfresco/dbscripts/upgrade/4.1/org.hibernate.dialect.Dialect/dropAlfQnameFKIndexes.sql new file mode 100644 index 00000000000..e8a26d1e30a --- /dev/null +++ b/config/alfresco/dbscripts/upgrade/4.1/org.hibernate.dialect.Dialect/dropAlfQnameFKIndexes.sql @@ -0,0 +1,26 @@ +-- +-- Title: DROP Indexes +-- Database: Generic +-- Since: V4.1 Schema 5119 +-- Author: Valery Shikunets +-- +-- Please contact support@alfresco.com if you need assistance with the upgrade. +-- +-- ALF-16286: DROP fk_alf_qname_ns on alf_qname table + +DROP INDEX fk_alf_qname_ns; --(optional) +DROP INDEX fk_alf_qn_ns; --(optional) + +-- +-- Record script finish +-- + + +DELETE FROM alf_applied_patch WHERE id = 'patch.db-V4.1-drop-alfqname-fk-indexes'; +INSERT INTO alf_applied_patch + (id, description, fixes_from_schema, fixes_to_schema, applied_to_schema, target_schema, applied_on_date, applied_to_server, was_executed, succeeded, report) + VALUES + ( + 'patch.db-V4.1-drop-alfqname-fk-indexes', 'Manually executed script upgrade V4.1: DROP fk_alf_qname_ns on alf_qname table', + 0, 6023, -1, 6024, null, 'UNKNOWN', ${TRUE}, ${TRUE}, 'Script completed' + ); \ No newline at end of file diff --git a/config/alfresco/dbscripts/upgrade/4.1/org.hibernate.dialect.Dialect/fix-AVM-seqs-order.sql b/config/alfresco/dbscripts/upgrade/4.1/org.hibernate.dialect.Dialect/fix-AVM-seqs-order.sql new file mode 100644 index 00000000000..91b714403fa --- /dev/null +++ b/config/alfresco/dbscripts/upgrade/4.1/org.hibernate.dialect.Dialect/fix-AVM-seqs-order.sql @@ -0,0 +1,24 @@ +-- +-- Title: DROP Indexes +-- Database: Generic +-- Since: V4.1 Schema 6030 +-- Author: Alex Mukha +-- +-- Please contact support@alfresco.com if you need assistance with the upgrade. +-- +-- MNT-9275: When upgrading on Oracle RAC from version 3.2.2 to version 3.3 or higher, values returned by sequences are not ordered. + +-- Used only for Oracle + +-- +-- Record script finish +-- + +DELETE FROM alf_applied_patch WHERE id = 'patch.db-V4.1-fix-AVM-seqs-order'; +INSERT INTO alf_applied_patch + (id, description, fixes_from_schema, fixes_to_schema, applied_to_schema, target_schema, applied_on_date, applied_to_server, was_executed, succeeded, report) + VALUES + ( + 'patch.db-V4.1-fix-AVM-seqs-order', 'Manually executed script to set ORDER bit for sequences', + 0, 6030, -1, 6031, null, 'UNKNOWN', ${TRUE}, ${TRUE}, 'Script completed' + ); \ No newline at end of file diff --git a/config/alfresco/dbscripts/upgrade/4.1/org.hibernate.dialect.Dialect/fix-Repo-seqs-order.sql b/config/alfresco/dbscripts/upgrade/4.1/org.hibernate.dialect.Dialect/fix-Repo-seqs-order.sql new file mode 100644 index 00000000000..39b71becb1f --- /dev/null +++ b/config/alfresco/dbscripts/upgrade/4.1/org.hibernate.dialect.Dialect/fix-Repo-seqs-order.sql @@ -0,0 +1,24 @@ +-- +-- Title: DROP Indexes +-- Database: Generic +-- Since: V4.1 Schema 6030 +-- Author: Alex Mukha +-- +-- Please contact support@alfresco.com if you need assistance with the upgrade. +-- +-- MNT-9275: When upgrading on Oracle RAC from version 3.2.2 to version 3.3 or higher, values returned by sequences are not ordered. + +-- Used only for Oracle + +-- +-- Record script finish +-- + +DELETE FROM alf_applied_patch WHERE id = 'patch.db-V4.1-fix-Repo-seqs-order'; +INSERT INTO alf_applied_patch + (id, description, fixes_from_schema, fixes_to_schema, applied_to_schema, target_schema, applied_on_date, applied_to_server, was_executed, succeeded, report) + VALUES + ( + 'patch.db-V4.1-fix-Repo-seqs-order', 'Manually executed script to set ORDER bit for sequences', + 0, 6030, -1, 6031, null, 'UNKNOWN', ${TRUE}, ${TRUE}, 'Script completed' + ); \ No newline at end of file diff --git a/config/alfresco/dbscripts/upgrade/4.1/org.hibernate.dialect.MySQLInnoDBDialect/dropAlfQnameFKIndexes.sql b/config/alfresco/dbscripts/upgrade/4.1/org.hibernate.dialect.MySQLInnoDBDialect/dropAlfQnameFKIndexes.sql new file mode 100644 index 00000000000..150c4365983 --- /dev/null +++ b/config/alfresco/dbscripts/upgrade/4.1/org.hibernate.dialect.MySQLInnoDBDialect/dropAlfQnameFKIndexes.sql @@ -0,0 +1,23 @@ +-- +-- Title: DROP Indexes +-- Database: MySQL +-- Since: V4.1 Schema 5119 +-- Author: Valery Shikunets +-- +-- Please contact support@alfresco.com if you need assistance with the upgrade. +-- +-- ALF-16286: DROP fk_alf_qname_ns from alf_qname table + +ALTER TABLE alf_qname DROP INDEX fk_alf_qname_ns; --(optional) + +-- +-- Record script finish +-- +DELETE FROM alf_applied_patch WHERE id = 'patch.db-V4.1-drop-alfqname-fk-indexes'; +INSERT INTO alf_applied_patch + (id, description, fixes_from_schema, fixes_to_schema, applied_to_schema, target_schema, applied_on_date, applied_to_server, was_executed, succeeded, report) + VALUES + ( + 'patch.db-V4.1-drop-alfqname-fk-indexes', 'Manually executed script upgrade V4.1: DROP fk_alf_qname_ns on alf_qname table', + 0, 6023, -1, 6024, null, 'UNKNOWN', ${TRUE}, ${TRUE}, 'Script completed' + ); \ No newline at end of file diff --git a/config/alfresco/dbscripts/upgrade/4.2/org.hibernate.dialect.Dialect/metadata-query-indexes.sql b/config/alfresco/dbscripts/upgrade/4.2/org.hibernate.dialect.Dialect/metadata-query-indexes.sql new file mode 100644 index 00000000000..e9fe8558e13 --- /dev/null +++ b/config/alfresco/dbscripts/upgrade/4.2/org.hibernate.dialect.Dialect/metadata-query-indexes.sql @@ -0,0 +1,32 @@ +-- +-- Title: Update alf_node, alf_node_properties and alf_content_url to support in-transaction metadata queries +-- Database: Generic +-- Since: V4.2 Schema 6024 +-- Author: Andy Hind +-- +-- Please contact support@alfresco.com if you need assistance with the upgrade. +-- + +CREATE INDEX idx_alf_node_mdq ON alf_node (store_id, type_qname_id, id); --(optional) +CREATE INDEX idx_alf_node_cor ON alf_node (audit_creator, store_id, type_qname_id, id); --(optional) +CREATE INDEX idx_alf_node_crd ON alf_node (audit_created, store_id, type_qname_id, id); --(optional) +CREATE INDEX idx_alf_node_mor ON alf_node (audit_modifier, store_id, type_qname_id, id); --(optional) +CREATE INDEX idx_alf_node_mod ON alf_node (audit_modified, store_id, type_qname_id, id); --(optional) + +CREATE INDEX idx_alf_nprop_s ON alf_node_properties (qname_id, string_value, node_id); --(optional) +CREATE INDEX idx_alf_nprop_l ON alf_node_properties (qname_id, long_value, node_id); --(optional) + +CREATE INDEX idx_alf_conturl_sz ON alf_content_url (content_size, id); --(optional) + + +-- +-- Record script finish +-- +DELETE FROM alf_applied_patch WHERE id = 'patch.db-V4.2-metadata-query-indexes'; +INSERT INTO alf_applied_patch + (id, description, fixes_from_schema, fixes_to_schema, applied_to_schema, target_schema, applied_on_date, applied_to_server, was_executed, succeeded, report) + VALUES + ( + 'patch.db-V4.2-metadata-query-indexes', 'Manually executed script upgrade V4.2: Updates for metadata query', + 0, 6023, -1, 6024, null, 'UNKNOWN', ${TRUE}, ${TRUE}, 'Script completed' + ); \ No newline at end of file diff --git a/config/alfresco/dbscripts/upgrade/4.2/org.hibernate.dialect.Dialect/remove-index-acl_id.sql b/config/alfresco/dbscripts/upgrade/4.2/org.hibernate.dialect.Dialect/remove-index-acl_id.sql new file mode 100644 index 00000000000..c26501fd149 --- /dev/null +++ b/config/alfresco/dbscripts/upgrade/4.2/org.hibernate.dialect.Dialect/remove-index-acl_id.sql @@ -0,0 +1,26 @@ +-- +-- Title: Update ALF_ACL_MEMBER_member table. Remove index acl_id +-- Database: Generic +-- Since: V4.2 Schema 6025 +-- Author: Alex Malinovsky +-- +-- Please contact support@alfresco.com if you need assistance with the upgrade. +-- +-- ALF-12284 : Index aclm_acl_id has the wrong name after upgrading 2.2 to 3.4 to 4.0. + +-- +-- Record script finish +-- + + +ALTER TABLE alf_acl_member DROP INDEX acl_id; --(optional) + +CREATE UNIQUE INDEX aclm_acl_id ON alf_acl_member (acl_id, ace_id, pos); --(optional) + +INSERT INTO alf_applied_patch + (id, description, fixes_from_schema, fixes_to_schema, applied_to_schema, target_schema, applied_on_date, applied_to_server, was_executed, succeeded, report) + VALUES + ( + 'patch.db-V4.2-remove-index-acl_id', 'Manually executed script upgrade V4.2: Update ALF_ACL_MEMBER_member table. Remove index acl_id', + 0, 6024, -1, 6025, null, 'UNKNOWN', ${TRUE}, ${TRUE}, 'Script completed' + ); \ No newline at end of file diff --git a/config/alfresco/dbscripts/upgrade/4.2/org.hibernate.dialect.MySQLInnoDBDialect/activiti-upgrade-5-13.sql b/config/alfresco/dbscripts/upgrade/4.2/org.hibernate.dialect.MySQLInnoDBDialect/activiti-upgrade-5-13.sql new file mode 100644 index 00000000000..9bae50efab0 --- /dev/null +++ b/config/alfresco/dbscripts/upgrade/4.2/org.hibernate.dialect.MySQLInnoDBDialect/activiti-upgrade-5-13.sql @@ -0,0 +1,61 @@ +-- +-- Title: Upgraded Activiti tables to 5.13 version +-- Database: MySQL +-- Since: V4.1 Schema 6029 +-- Author: Frederik Heremans +-- +-- Please contact support@alfresco.com if you need assistance with the upgrade. +-- +-- Upgraded Activiti tables to 5.13 version + +alter table ACT_HI_TASKINST + add CLAIM_TIME_ datetime; + +alter table ACT_HI_TASKINST + add FORM_KEY_ varchar(255); + +alter table ACT_RU_IDENTITYLINK + add PROC_INST_ID_ varchar(64); + +alter table ACT_RU_IDENTITYLINK + add constraint ACT_FK_IDL_PROCINST + foreign key (PROC_INST_ID_) + references ACT_RU_EXECUTION (ID_); + +create index ACT_IDX_HI_ACT_INST_EXEC on ACT_HI_ACTINST(EXECUTION_ID_, ACT_ID_); + +create table ACT_HI_IDENTITYLINK ( + ID_ varchar(64), + GROUP_ID_ varchar(255), + TYPE_ varchar(255), + USER_ID_ varchar(255), + TASK_ID_ varchar(64), + PROC_INST_ID_ varchar(64), + primary key (ID_) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin; + +create index ACT_IDX_HI_IDENT_LNK_USER on ACT_HI_IDENTITYLINK(USER_ID_); +create index ACT_IDX_HI_IDENT_LNK_TASK on ACT_HI_IDENTITYLINK(TASK_ID_); +create index ACT_IDX_HI_IDENT_LNK_PROCINST on ACT_HI_IDENTITYLINK(PROC_INST_ID_); + +drop index ACT_IDX_IDL_PROCINST on ACT_RU_IDENTITYLINK; -- (optional) +create index ACT_IDX_HI_IDENT_LNK_PROCINST on ACT_HI_IDENTITYLINK(PROC_INST_ID_); -- (optional) + +-- +-- Update engine properties table +-- +UPDATE ACT_GE_PROPERTY SET VALUE_ = '5.13' WHERE NAME_ = 'schema.version'; +UPDATE ACT_GE_PROPERTY SET VALUE_ = CONCAT(VALUE_,' upgrade(5.13)') WHERE NAME_ = 'schema.history'; + +-- +-- Record script finish +-- +DELETE FROM alf_applied_patch WHERE id = 'patch.db-V4.2-upgrade-to-activiti-5.13'; +INSERT INTO alf_applied_patch + (id, description, fixes_from_schema, fixes_to_schema, applied_to_schema, target_schema, applied_on_date, applied_to_server, was_executed, succeeded, report) + VALUES + ( + 'patch.db-V4.2-upgrade-to-activiti-5.13', 'Manually executed script upgrade V4.2: Upgraded Activiti tables to 5.13 version', + 0, 6028, -1, 6029 + , null, 'UNKNOWN', ${TRUE}, ${TRUE}, 'Script completed' + ); \ No newline at end of file diff --git a/config/alfresco/dbscripts/upgrade/4.2/org.hibernate.dialect.MySQLInnoDBDialect/metadata-query-indexes.sql b/config/alfresco/dbscripts/upgrade/4.2/org.hibernate.dialect.MySQLInnoDBDialect/metadata-query-indexes.sql new file mode 100644 index 00000000000..10e1d72f44e --- /dev/null +++ b/config/alfresco/dbscripts/upgrade/4.2/org.hibernate.dialect.MySQLInnoDBDialect/metadata-query-indexes.sql @@ -0,0 +1,32 @@ +-- +-- Title: Update alf_node, alf_node_properties and alf_content_url to support in-transaction metadata queries +-- Database: InnoDB +-- Since: V4.2 Schema 6024 +-- Author: Andy Hind +-- +-- Please contact support@alfresco.com if you need assistance with the upgrade. +-- + +CREATE INDEX idx_alf_node_mdq ON alf_node (store_id, type_qname_id); --(optional) +CREATE INDEX idx_alf_node_cor ON alf_node (audit_creator, store_id, type_qname_id); --(optional) +CREATE INDEX idx_alf_node_crd ON alf_node (audit_created, store_id, type_qname_id); --(optional) +CREATE INDEX idx_alf_node_mor ON alf_node (audit_modifier, store_id, type_qname_id); --(optional) +CREATE INDEX idx_alf_node_mod ON alf_node (audit_modified, store_id, type_qname_id); --(optional) + +CREATE INDEX idx_alf_nprop_s ON alf_node_properties (qname_id, string_value(42)); --(optional) +CREATE INDEX idx_alf_nprop_l ON alf_node_properties (qname_id, long_value); --(optional) + +CREATE INDEX idx_alf_conturl_sz ON alf_content_url (content_size); --(optional) + + +-- +-- Record script finish +-- +DELETE FROM alf_applied_patch WHERE id = 'patch.db-V4.2-metadata-query-indexes'; +INSERT INTO alf_applied_patch + (id, description, fixes_from_schema, fixes_to_schema, applied_to_schema, target_schema, applied_on_date, applied_to_server, was_executed, succeeded, report) + VALUES + ( + 'patch.db-V4.2-metadata-query-indexes', 'Manually executed script upgrade V4.2: Updates for metadata query', + 0, 6023, -1, 6024, null, 'UNKNOWN', ${TRUE}, ${TRUE}, 'Script completed' + ); \ No newline at end of file diff --git a/config/alfresco/dbscripts/upgrade/4.2/org.hibernate.dialect.PostgreSQLDialect/activiti-upgrade-5-13.sql b/config/alfresco/dbscripts/upgrade/4.2/org.hibernate.dialect.PostgreSQLDialect/activiti-upgrade-5-13.sql new file mode 100644 index 00000000000..4bd0c395d60 --- /dev/null +++ b/config/alfresco/dbscripts/upgrade/4.2/org.hibernate.dialect.PostgreSQLDialect/activiti-upgrade-5-13.sql @@ -0,0 +1,59 @@ +-- +-- Title: Upgraded Activiti tables to 5.13 version +-- Database: Postgres +-- Since: V4.1 Schema 6029 +-- Author: Frederik Heremans +-- +-- Please contact support@alfresco.com if you need assistance with the upgrade. +-- +-- Upgraded Activiti tables to 5.13 version + +alter table ACT_HI_TASKINST + add column CLAIM_TIME_ timestamp; + +alter table ACT_HI_TASKINST + add column FORM_KEY_ varchar(255); + +alter table ACT_RU_IDENTITYLINK + add PROC_INST_ID_ varchar(64); + + +create index ACT_IDX_IDL_PROCINST on ACT_RU_IDENTITYLINK(PROC_INST_ID_); +alter table ACT_RU_IDENTITYLINK + add constraint ACT_FK_IDL_PROCINST + foreign key (PROC_INST_ID_) + references ACT_RU_EXECUTION (ID_); + +create index ACT_IDX_HI_ACT_INST_EXEC on ACT_HI_ACTINST(EXECUTION_ID_, ACT_ID_); + +create table ACT_HI_IDENTITYLINK ( + ID_ varchar(64), + GROUP_ID_ varchar(255), + TYPE_ varchar(255), + USER_ID_ varchar(255), + TASK_ID_ varchar(64), + PROC_INST_ID_ varchar(64), + primary key (ID_) +); + +create index ACT_IDX_HI_IDENT_LNK_USER on ACT_HI_IDENTITYLINK(USER_ID_); +create index ACT_IDX_HI_IDENT_LNK_TASK on ACT_HI_IDENTITYLINK(TASK_ID_); +create index ACT_IDX_HI_IDENT_LNK_PROCINST on ACT_HI_IDENTITYLINK(PROC_INST_ID_); + +-- +-- Update engine properties table +-- +UPDATE ACT_GE_PROPERTY SET VALUE_ = '5.13' WHERE NAME_ = 'schema.version'; +UPDATE ACT_GE_PROPERTY SET VALUE_ = VALUE_ || ' upgrade(5.13)' WHERE NAME_ = 'schema.history'; + +-- +-- Record script finish +-- +DELETE FROM alf_applied_patch WHERE id = 'patch.db-V4.2-upgrade-to-activiti-5.13'; +INSERT INTO alf_applied_patch + (id, description, fixes_from_schema, fixes_to_schema, applied_to_schema, target_schema, applied_on_date, applied_to_server, was_executed, succeeded, report) + VALUES + ( + 'patch.db-V4.2-upgrade-to-activiti-5.13', 'Manually executed script upgrade V4.2: Upgraded Activiti tables to 5.13 version', + 0, 6028, -1, 6029, null, 'UNKNOWN', ${TRUE}, ${TRUE}, 'Script completed' + ); \ No newline at end of file diff --git a/config/alfresco/distributionpolicies-context.xml b/config/alfresco/distributionpolicies-context.xml new file mode 100644 index 00000000000..c55ed2cd1de --- /dev/null +++ b/config/alfresco/distributionpolicies-context.xml @@ -0,0 +1,18 @@ + + + + + + + + + alfresco/model/distributionPoliciesModel.xml + + + + + alfresco/messages/distributionpolicies-model + + + + diff --git a/config/alfresco/extension/caching-content-store-context.xml.sample b/config/alfresco/extension/caching-content-store-context.xml.sample index 511277d054a..39d70a6b81d 100644 --- a/config/alfresco/extension/caching-content-store-context.xml.sample +++ b/config/alfresco/extension/caching-content-store-context.xml.sample @@ -62,7 +62,10 @@ - + + + + diff --git a/config/alfresco/extension/video-thumbnail-context.xml.sample b/config/alfresco/extension/video-thumbnail-context.xml.sample index b403668ded5..f0c1e8ffc3e 100644 --- a/config/alfresco/extension/video-thumbnail-context.xml.sample +++ b/config/alfresco/extension/video-thumbnail-context.xml.sample @@ -8,6 +8,29 @@ + + @@ -65,114 +88,6 @@ - - - - - video/x-flv - - - image/jpeg - - - - - video/mpeg - - - image/jpeg - - - - - video/mp4 - - - image/jpeg - - - - - video/3gpp - - - image/jpeg - - - - - video/3gpp2 - - - image/jpeg - - - - - video/mpeg2 - - - image/jpeg - - - - - video/x-sgi-movie - - - image/jpeg - - - - - video/x-msvideo - - - image/jpeg - - - - - video/quicktime - - - image/jpeg - - - - - video/x-ms-asf - - - image/jpeg - - - - - video/x-ms-wmv - - - image/jpeg - - - - - video/x-rad-screenplay - - - image/jpeg - - - - - video/ogg - - - image/jpeg - - - - diff --git a/config/alfresco/extension/video-transformation-context.xml.sample b/config/alfresco/extension/video-transformation-context.xml.sample index 22c4efd7677..7c557e2285b 100644 --- a/config/alfresco/extension/video-transformation-context.xml.sample +++ b/config/alfresco/extension/video-transformation-context.xml.sample @@ -9,6 +9,54 @@ + + @@ -66,108 +114,6 @@ - - - - - - - video/mpeg - - - video/x-flv - - - - - video/mp4 - - - video/x-flv - - - - - video/3gpp - - - video/x-flv - - - - - video/3gpp2 - - - video/x-flv - - - - - video/mpeg2 - - - video/x-flv - - - - - video/x-sgi-movie - - - video/x-flv - - - - - video/x-msvideo - - - video/x-flv - - - - - video/quicktime - - - video/x-flv - - - - - video/x-ms-asf - - - video/x-flv - - - - - video/x-ms-wmv - - - video/x-flv - - - - - video/x-rad-screenplay - - - video/x-flv - - - - - video/ogg - - - video/x-flv - - - - @@ -229,104 +175,6 @@ - - - - - - - video/mpeg - - - video/mp4 - - - - - video/mpeg2 - - - video/mp4 - - - - - video/x-sgi-movie - - - video/mp4 - - - - - - video/quicktime - - - video/mp4 - - - - - video/3gpp - - - video/mp4 - - - - - video/3gpp2 - - - video/mp4 - - - - - video/x-ms-asf - - - video/mp4 - - - - - video/x-ms-wmv - - - video/mp4 - - - - - video/x-rad-screenplay - - - video/mp4 - - - - - @@ -386,51 +234,6 @@ - - - - - - audio/x-aiff - - - audio/mpeg - - - - - audio/basic - - - audio/mpeg - - - - - audio/x-wav - - - audio/mpeg - - - - - audio/ogg - - - audio/mpeg - - - - - audio/mp4 - - - audio/mpeg - - - - diff --git a/config/alfresco/extension/war-deployers-jboss-beans.xml.fragment.sample b/config/alfresco/extension/war-deployers-jboss-beans.xml.fragment.sample index 3b738240709..8646a7512db 100644 --- a/config/alfresco/extension/war-deployers-jboss-beans.xml.fragment.sample +++ b/config/alfresco/extension/war-deployers-jboss-beans.xml.fragment.sample @@ -8,7 +8,7 @@ Do NOT attempt to use this entire file as a replacement for any JBoss files. -1 - javax.activation,javax.servlet,javax.servlet.jsp,javax.servlet.jsp.jstl,javax.servlet.jsp.jstl.core,javax.servlet.jsp.jstl.fmt,javax.servlet.jsp.jstl.sql,javax.servlet.jsp.jstl.tlv,javax.xml,javax.xml.bind,javax.xml.bind.annotation,javax.xml.bind.annotation.adapters,javax.xml.bind.attachment,javax.xml.bind.helpers,javax.xml.bind.util,javax.xml.crypto,javax.xml.crypto.dom,javax.xml.crypto.dsig,javax.xml.crypto.dsig.dom,javax.xml.crypto.dsig.keyinfo,javax.xml.crypto.dsig.spec,javax.xml.datatype,javax.xml.messaging,javax.xml.namespace,javax.xml.parsers,javax.xml.rpc,javax.xml.rpc.encoding,javax.xml.rpc.handler,javax.xml.rpc.handler.soap,javax.xml.rpc.holders,javax.xml.rpc.server,javax.xml.rpc.soap,javax.xml.soap,javax.xml.stream,javax.xml.stream.events,javax.xml.stream.util,javax.xml.transform,javax.xml.transform.dom,javax.xml.transform.sax,javax.xml.transform.stream,javax.xml.validation,javax.xml.ws,javax.xml.ws.handler,javax.xml.ws.handler.soap,javax.xml.ws.http,javax.xml.ws.soap,javax.xml.ws.spi,javax.xml.ws.wsaddressing,javax.xml.xpath,org.apache.commons.logging,org.apache.commons.logging.impl,org.apache.xerces,org.apache.xerces.dom,org.apache.xerces.dom.events,org.apache.xerces.dom3,org.apache.xerces.dom3.as,org.apache.xerces.impl,org.apache.xerces.impl.dtd,org.apache.xerces.impl.dtd.models,org.apache.xerces.impl.dv,org.apache.xerces.impl.dv.dtd,org.apache.xerces.impl.dv.util,org.apache.xerces.impl.dv.xs,org.apache.xerces.impl.io,org.apache.xerces.impl.msg,org.apache.xerces.impl.validation,org.apache.xerces.impl.xpath,org.apache.xerces.impl.xpath.regex,org.apache.xerces.impl.xs,org.apache.xerces.impl.xs.identity,org.apache.xerces.impl.xs.models,org.apache.xerces.impl.xs.opti,org.apache.xerces.impl.xs.traversers,org.apache.xerces.impl.xs.util,org.apache.xerces.jaxp,org.apache.xerces.jaxp.datatype,org.apache.xerces.jaxp.validation,org.apache.xerces.parsers,org.apache.xerces.util,org.apache.xerces.xinclude,org.apache.xerces.xni,org.apache.xerces.xni.grammars,org.apache.xerces.xni.parser,org.apache.xerces.xpointer,org.apache.xerces.xs,org.apache.xerces.xs.datatypes,org.apache.xml,org.apache.xml.resolver,org.apache.xml.resolver.apps,org.apache.xml.resolver.etc,org.apache.xml.resolver.etc.catalog.dtd,org.apache.xml.resolver.etc.catalog.rng,org.apache.xml.resolver.etc.catalog.xsd,org.apache.xml.resolver.etc.xcatalog.dtd,org.apache.xml.resolver.helpers,org.apache.xml.resolver.readers,org.apache.xml.resolver.tools,org.apache.xml.security,org.apache.xml.security.algorithms,org.apache.xml.security.algorithms.implementations,org.apache.xml.security.c14n,org.apache.xml.security.c14n.helper,org.apache.xml.security.c14n.implementations,org.apache.xml.security.encryption,org.apache.xml.security.exceptions,org.apache.xml.security.keys,org.apache.xml.security.keys.content,org.apache.xml.security.keys.content.keyvalues,org.apache.xml.security.keys.content.x509,org.apache.xml.security.keys.keyresolver,org.apache.xml.security.keys.keyresolver.implementations,org.apache.xml.security.keys.storage,org.apache.xml.security.keys.storage.implementations,org.apache.xml.security.resource,org.apache.xml.security.resource.schema,org.apache.xml.security.signature,org.apache.xml.security.transforms,org.apache.xml.security.transforms.implementations,org.apache.xml.security.transforms.params,org.apache.xml.security.utils,org.apache.xml.security.utils.resolver,org.apache.xml.security.utils.resolver.implementations,org.apache.xml.serialize,org.apache.xmlcommons,org.xml,org.xml.sax,org.xml.sax.ext,org.xml.sax.helpers,org.w3c.css,org.w3c.css.sac,org.w3c.css.sac.helpers,org.w3c.dom,org.w3c.dom.bootstrap,org.w3c.dom.css,org.w3c.dom.events,org.w3c.dom.html,org.w3c.dom.ls,org.w3c.dom.ranges,org.w3c.dom.smil,org.w3c.dom.stylesheets,org.w3c.dom.svg,org.w3c.dom.traversal,org.w3c.dom.views,org.w3c.dom.xpath + javax.activation,javax.servlet,javax.servlet.jsp,javax.servlet.jsp.jstl,javax.servlet.jsp.jstl.core,javax.servlet.jsp.jstl.fmt,javax.servlet.jsp.jstl.sql,javax.servlet.jsp.jstl.tlv,javax.xml,javax.xml.bind,javax.xml.bind.annotation,javax.xml.bind.annotation.adapters,javax.xml.bind.attachment,javax.xml.bind.helpers,javax.xml.bind.util,javax.xml.crypto,javax.xml.crypto.dom,javax.xml.crypto.dsig,javax.xml.crypto.dsig.dom,javax.xml.crypto.dsig.keyinfo,javax.xml.crypto.dsig.spec,javax.xml.datatype,javax.xml.messaging,javax.xml.namespace,javax.xml.parsers,javax.xml.rpc,javax.xml.rpc.encoding,javax.xml.rpc.handler,javax.xml.rpc.handler.soap,javax.xml.rpc.holders,javax.xml.rpc.server,javax.xml.rpc.soap,javax.xml.soap,javax.xml.stream,javax.xml.stream.events,javax.xml.stream.util,javax.xml.transform,javax.xml.transform.dom,javax.xml.transform.sax,javax.xml.transform.stream,javax.xml.validation,javax.xml.ws,javax.xml.ws.handler,javax.xml.ws.handler.soap,javax.xml.ws.http,javax.xml.ws.soap,javax.xml.ws.spi,javax.xml.ws.wsaddressing,javax.xml.xpath,org.apache.commons.logging,org.apache.commons.logging.impl,org.apache.xerces,org.apache.xerces.dom,org.apache.xerces.dom.events,org.apache.xerces.dom3,org.apache.xerces.dom3.as,org.apache.xerces.impl,org.apache.xerces.impl.dtd,org.apache.xerces.impl.dtd.models,org.apache.xerces.impl.dv,org.apache.xerces.impl.dv.dtd,org.apache.xerces.impl.dv.util,org.apache.xerces.impl.dv.xs,org.apache.xerces.impl.io,org.apache.xerces.impl.msg,org.apache.xerces.impl.validation,org.apache.xerces.impl.xpath,org.apache.xerces.impl.xpath.regex,org.apache.xerces.impl.xs,org.apache.xerces.impl.xs.identity,org.apache.xerces.impl.xs.models,org.apache.xerces.impl.xs.opti,org.apache.xerces.impl.xs.traversers,org.apache.xerces.impl.xs.util,org.apache.xerces.jaxp,org.apache.xerces.jaxp.datatype,org.apache.xerces.jaxp.validation,org.apache.xerces.parsers,org.apache.xerces.util,org.apache.xerces.xinclude,org.apache.xerces.xni,org.apache.xerces.xni.grammars,org.apache.xerces.xni.parser,org.apache.xerces.xpointer,org.apache.xerces.xs,org.apache.xerces.xs.datatypes,solver.etc,org.apache.xmlcommons,org.xml,org.xml.sax,org.xml.sax.ext,org.xml.sax.helpers,org.w3c.css,org.w3c.css.sac,org.w3c.css.sac.helpers,org.w3c.dom,org.w3c.dom.bootstrap,org.w3c.dom.css,org.w3c.dom.events,org.w3c.dom.html,org.w3c.dom.ls,org.w3c.dom.ranges,org.w3c.dom.smil,org.w3c.dom.stylesheets,org.w3c.dom.svg,org.w3c.dom.traversal,org.w3c.dom.views,org.w3c.dom.xpath diff --git a/config/alfresco/form-services-context.xml b/config/alfresco/form-services-context.xml index 301fcf14fd4..f477d3c37e0 100644 --- a/config/alfresco/form-services-context.xml +++ b/config/alfresco/form-services-context.xml @@ -169,19 +169,21 @@ parent="baseFormProcessor"> - + + - - - - + class="org.alfresco.repo.forms.processor.workflow.TaskFormProcessor" + parent="baseFormProcessor"> + + + + - + + @@ -203,5 +205,13 @@ + + + + + + + diff --git a/config/alfresco/hibernate-context.xml b/config/alfresco/hibernate-context.xml index b8d13b7c5f8..91b6e0557da 100644 --- a/config/alfresco/hibernate-context.xml +++ b/config/alfresco/hibernate-context.xml @@ -31,7 +31,7 @@ - + diff --git a/config/alfresco/ibatis/alfresco-SqlMapConfig.xml b/config/alfresco/ibatis/alfresco-SqlMapConfig.xml index e00786ac079..89c598ad664 100644 --- a/config/alfresco/ibatis/alfresco-SqlMapConfig.xml +++ b/config/alfresco/ibatis/alfresco-SqlMapConfig.xml @@ -105,6 +105,9 @@ Inbound settings from iBatis + + + @@ -169,9 +172,6 @@ Inbound settings from iBatis - - - @@ -223,8 +223,7 @@ Inbound settings from iBatis - - + @@ -234,6 +233,7 @@ Inbound settings from iBatis + diff --git a/config/alfresco/ibatis/org.hibernate.dialect.Dialect/activities-common-SqlMap.xml b/config/alfresco/ibatis/org.hibernate.dialect.Dialect/activities-common-SqlMap.xml index b2915439dd5..ac4ef676659 100644 --- a/config/alfresco/ibatis/org.hibernate.dialect.Dialect/activities-common-SqlMap.xml +++ b/config/alfresco/ibatis/org.hibernate.dialect.Dialect/activities-common-SqlMap.xml @@ -19,7 +19,6 @@ - @@ -59,13 +58,13 @@ - insert into alf_activity_feed (activity_type, activity_summary, activity_format, feed_user_id, post_user_id, post_date, post_id, site_network, app_tool, feed_date) - values (#{activityType}, #{activitySummary}, #{activitySummaryFormat}, #{feedUserId}, #{postUserId}, #{postDate}, #{postId}, #{siteNetwork}, #{appTool}, #{feedDate}) + insert into alf_activity_feed (activity_type, activity_summary, feed_user_id, post_user_id, post_date, post_id, site_network, app_tool, feed_date) + values (#{activityType}, #{activitySummary}, #{feedUserId}, #{postUserId}, #{postDate}, #{postId}, #{siteNetwork}, #{appTool}, #{feedDate}) - insert into alf_activity_feed (id, activity_type, activity_summary, activity_format, feed_user_id, post_user_id, post_date, post_id, site_network, app_tool, feed_date) - values (#{id}, #{activityType}, #{activitySummary,jdbcType=VARCHAR}, #{activitySummaryFormat,jdbcType=VARCHAR}, #{feedUserId,jdbcType=VARCHAR}, #{postUserId}, #{postDate}, #{postId,jdbcType=BIGINT}, #{siteNetwork,jdbcType=VARCHAR}, #{appTool,jdbcType=VARCHAR}, #{feedDate}) + insert into alf_activity_feed (id, activity_type, activity_summary, feed_user_id, post_user_id, post_date, post_id, site_network, app_tool, feed_date) + values (#{id}, #{activityType}, #{activitySummary,jdbcType=VARCHAR}, #{feedUserId,jdbcType=VARCHAR}, #{postUserId}, #{postDate}, #{postId,jdbcType=BIGINT}, #{siteNetwork,jdbcType=VARCHAR}, #{appTool,jdbcType=VARCHAR}, #{feedDate}) @@ -206,7 +205,6 @@ delete from alf_activity_feed where post_date < #{postDate} and site_network = #{siteNetwork} - and activity_format = #{activitySummaryFormat} ]]> @@ -220,7 +218,6 @@ delete from alf_activity_feed where post_date < #{postDate} and (feed_user_id IS NULL and #{feedUserId} IS NULL OR feed_user_id = #{feedUserId}) - and activity_format = #{activitySummaryFormat} ]]> diff --git a/config/alfresco/ibatis/org.hibernate.dialect.Dialect/activities-select-SqlMap.xml b/config/alfresco/ibatis/org.hibernate.dialect.Dialect/activities-select-SqlMap.xml index d0a4ce4b1cc..e0e4d3e37ed 100644 --- a/config/alfresco/ibatis/org.hibernate.dialect.Dialect/activities-select-SqlMap.xml +++ b/config/alfresco/ibatis/org.hibernate.dialect.Dialect/activities-select-SqlMap.xml @@ -14,67 +14,61 @@ @@ -82,11 +76,10 @@ diff --git a/config/alfresco/ibatis/org.hibernate.dialect.Dialect/metadata-query-common-SqlMap.xml b/config/alfresco/ibatis/org.hibernate.dialect.Dialect/metadata-query-common-SqlMap.xml new file mode 100644 index 00000000000..93bd52d1cfd --- /dev/null +++ b/config/alfresco/ibatis/org.hibernate.dialect.Dialect/metadata-query-common-SqlMap.xml @@ -0,0 +1,123 @@ + + + + + + + + + \ No newline at end of file diff --git a/config/alfresco/ibatis/org.hibernate.dialect.Dialect/query-archived-nodes-common-SqlMap.xml b/config/alfresco/ibatis/org.hibernate.dialect.Dialect/query-archived-nodes-common-SqlMap.xml new file mode 100644 index 00000000000..db6205afc52 --- /dev/null +++ b/config/alfresco/ibatis/org.hibernate.dialect.Dialect/query-archived-nodes-common-SqlMap.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/config/alfresco/ibatis/org.hibernate.dialect.Dialect/query-authorities-common-SqlMap.xml b/config/alfresco/ibatis/org.hibernate.dialect.Dialect/query-authorities-common-SqlMap.xml index 5bca21a5017..c13b0ccc3b4 100644 --- a/config/alfresco/ibatis/org.hibernate.dialect.Dialect/query-authorities-common-SqlMap.xml +++ b/config/alfresco/ibatis/org.hibernate.dialect.Dialect/query-authorities-common-SqlMap.xml @@ -29,6 +29,16 @@ + + + + + + - select id as id, activity_type as activityType, activity_format as activitySummaryFormat, activity_summary as activitySummary, feed_user_id as feedUserId, post_user_id as postUserId, site_network as siteNetwork, post_date as postDate + select id as id, activity_type as activityType, activity_summary as activitySummary, feed_user_id as feedUserId, post_user_id as postUserId, site_network as siteNetwork, post_date as postDate from alf_activity_feed where feed_user_id = #{feedUserId} - and activity_format = #{activitySummaryFormat} = #{minId} ]]> order by post_date desc @@ -82,11 +76,10 @@ diff --git a/config/alfresco/ibatis/org.hibernate.dialect.MySQLInnoDBDialect/query-authorities-common-SqlMap.xml b/config/alfresco/ibatis/org.hibernate.dialect.MySQLInnoDBDialect/query-authorities-common-SqlMap.xml index d94ddc2e22c..dda23708e9e 100644 --- a/config/alfresco/ibatis/org.hibernate.dialect.MySQLInnoDBDialect/query-authorities-common-SqlMap.xml +++ b/config/alfresco/ibatis/org.hibernate.dialect.MySQLInnoDBDialect/query-authorities-common-SqlMap.xml @@ -28,6 +28,16 @@ + + + + + +
\n\n\n\n\n\n\n
TitleArtist
\n\n\n", output); + assertTrue("Pieces of XML are similar " + myDiff, myDiff.similar()); + } + catch (Exception ex) + { + log.error("Error!", ex); + fail(); + } + } + private FileInfo createXmlFile(NodeRef folder) { return createXmlFile(folder, sampleXML); @@ -331,4 +361,32 @@ private FileInfo createXmlFile(NodeRef folder, String filename, String content) "" + "" + "" + "" + "" + ""; + private String testTableXml = "" + "" + + "" + + "" + + "" + + "

My CD Collection

" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "
TitleArtist
" + + "" + + "" + + "
" + + "
"; + + private String testImportTableXml = "" + "" + + "" + + "" + + "" + + "" + + ""; } diff --git a/source/java/org/alfresco/repo/replication/ReplicationServiceImplTest.java b/source/test-java/org/alfresco/repo/replication/ReplicationServiceImplTest.java similarity index 100% rename from source/java/org/alfresco/repo/replication/ReplicationServiceImplTest.java rename to source/test-java/org/alfresco/repo/replication/ReplicationServiceImplTest.java diff --git a/source/java/org/alfresco/repo/replication/ReplicationServiceIntegrationTest.java b/source/test-java/org/alfresco/repo/replication/ReplicationServiceIntegrationTest.java similarity index 100% rename from source/java/org/alfresco/repo/replication/ReplicationServiceIntegrationTest.java rename to source/test-java/org/alfresco/repo/replication/ReplicationServiceIntegrationTest.java diff --git a/source/java/org/alfresco/repo/rule/BaseRuleTest.java b/source/test-java/org/alfresco/repo/rule/BaseRuleTest.java similarity index 100% rename from source/java/org/alfresco/repo/rule/BaseRuleTest.java rename to source/test-java/org/alfresco/repo/rule/BaseRuleTest.java diff --git a/source/java/org/alfresco/repo/rule/MiscellaneousRulesTest.java b/source/test-java/org/alfresco/repo/rule/MiscellaneousRulesTest.java similarity index 100% rename from source/java/org/alfresco/repo/rule/MiscellaneousRulesTest.java rename to source/test-java/org/alfresco/repo/rule/MiscellaneousRulesTest.java diff --git a/source/java/org/alfresco/repo/rule/RuleLinkTest.java b/source/test-java/org/alfresco/repo/rule/RuleLinkTest.java similarity index 100% rename from source/java/org/alfresco/repo/rule/RuleLinkTest.java rename to source/test-java/org/alfresco/repo/rule/RuleLinkTest.java diff --git a/source/java/org/alfresco/repo/rule/RuleServiceCoverageTest.java b/source/test-java/org/alfresco/repo/rule/RuleServiceCoverageTest.java similarity index 97% rename from source/java/org/alfresco/repo/rule/RuleServiceCoverageTest.java rename to source/test-java/org/alfresco/repo/rule/RuleServiceCoverageTest.java index df91241144a..1eaa73ef68c 100644 --- a/source/java/org/alfresco/repo/rule/RuleServiceCoverageTest.java +++ b/source/test-java/org/alfresco/repo/rule/RuleServiceCoverageTest.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2010 Alfresco Software Limited. + * Copyright (C) 2005-2013 Alfresco Software Limited. * * This file is part of Alfresco * @@ -1128,7 +1128,7 @@ public void testTransformAction() throws Throwable // Check that the created node has been copied List copyChildAssocRefs = this.nodeService.getChildAssocs( this.rootNodeRef, - RegexQNamePattern.MATCH_ALL, QName.createQName(TEST_NAMESPACE, "transformed")); + RegexQNamePattern.MATCH_ALL, QName.createQName(TEST_NAMESPACE, "test.txt")); assertNotNull(copyChildAssocRefs); assertEquals(1, copyChildAssocRefs.size()); NodeRef copyNodeRef = copyChildAssocRefs.get(0).getChildRef(); @@ -1207,7 +1207,7 @@ public void testImageTransformAction() throws Throwable // Check that the created node has been copied List copyChildAssocRefs = this.nodeService.getChildAssocs( this.rootNodeRef, - RegexQNamePattern.MATCH_ALL, QName.createQName(TEST_NAMESPACE, "transformed")); + RegexQNamePattern.MATCH_ALL, QName.createQName(TEST_NAMESPACE, "test.jpg")); assertNotNull(copyChildAssocRefs); assertEquals(1, copyChildAssocRefs.size()); NodeRef copyNodeRef = copyChildAssocRefs.get(0).getChildRef(); diff --git a/source/java/org/alfresco/repo/rule/RuleServiceImplTest.java b/source/test-java/org/alfresco/repo/rule/RuleServiceImplTest.java similarity index 100% rename from source/java/org/alfresco/repo/rule/RuleServiceImplTest.java rename to source/test-java/org/alfresco/repo/rule/RuleServiceImplTest.java diff --git a/source/java/org/alfresco/repo/rule/RuleServiceIntegrationTest.java b/source/test-java/org/alfresco/repo/rule/RuleServiceIntegrationTest.java similarity index 70% rename from source/java/org/alfresco/repo/rule/RuleServiceIntegrationTest.java rename to source/test-java/org/alfresco/repo/rule/RuleServiceIntegrationTest.java index a62b3a7269e..8e7df318000 100644 --- a/source/java/org/alfresco/repo/rule/RuleServiceIntegrationTest.java +++ b/source/test-java/org/alfresco/repo/rule/RuleServiceIntegrationTest.java @@ -21,12 +21,21 @@ import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; + +import java.io.Serializable; import java.util.Collections; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; + +import javax.mail.internet.MimeMessage; import org.alfresco.model.ContentModel; import org.alfresco.repo.action.executer.AddFeaturesActionExecuter; +import org.alfresco.repo.action.executer.MailActionExecuter; import org.alfresco.repo.action.executer.RemoveFeaturesActionExecuter; import org.alfresco.repo.content.MimetypeMap; +import org.alfresco.repo.management.subsystems.ApplicationContextFactory; import org.alfresco.repo.model.Repository; import org.alfresco.repo.security.authentication.AuthenticationUtil; import org.alfresco.repo.transaction.RetryingTransactionHelper; @@ -45,6 +54,8 @@ import org.alfresco.util.test.junitrules.ApplicationContextInit; import org.alfresco.util.test.junitrules.RunAsFullyAuthenticatedRule; import org.alfresco.util.test.junitrules.TemporaryNodes; +import org.junit.AfterClass; +import org.junit.Assert; import org.junit.Before; import org.junit.BeforeClass; import org.junit.ClassRule; @@ -90,6 +101,7 @@ public class RuleServiceIntegrationTest private static ActionService ACTION_SERVICE; private static RuleService RULE_SERVICE; private static ContentService CONTENT_SERVICE; + protected static MailActionExecuter MAIL_ACTION_EXECUTER; private static NodeRef COMPANY_HOME; @@ -100,17 +112,23 @@ public class RuleServiceIntegrationTest private NodeRef childFolder; private NodeRef childContent; + protected static boolean WAS_IN_TEST_MODE; - @BeforeClass public static void initStaticData() throws Exception + + @BeforeClass public static void setupTest() throws Exception { SERVICE_REGISTRY = (ServiceRegistry)APP_CONTEXT_INIT.getApplicationContext().getBean(ServiceRegistry.SERVICE_REGISTRY); NODE_SERVICE = SERVICE_REGISTRY.getNodeService(); - TRANSACTION_HELPER = SERVICE_REGISTRY.getRetryingTransactionHelper(); + TRANSACTION_HELPER = SERVICE_REGISTRY.getTransactionService().getRetryingTransactionHelper(); ACTION_SERVICE = SERVICE_REGISTRY.getActionService(); RULE_SERVICE = SERVICE_REGISTRY.getRuleService(); CONTENT_SERVICE = SERVICE_REGISTRY.getContentService(); - + MAIL_ACTION_EXECUTER = APP_CONTEXT_INIT.getApplicationContext().getBean("OutboundSMTP", ApplicationContextFactory.class).getApplicationContext().getBean("mail", MailActionExecuter.class); + + WAS_IN_TEST_MODE = MAIL_ACTION_EXECUTER.isTestMode(); + MAIL_ACTION_EXECUTER.setTestMode(true); + Repository repositoryHelper = (Repository) APP_CONTEXT_INIT.getApplicationContext().getBean("repositoryHelper"); COMPANY_HOME = repositoryHelper.getCompanyHome(); @@ -119,6 +137,10 @@ public class RuleServiceIntegrationTest } + @AfterClass public static void tearDownTests(){ + MAIL_ACTION_EXECUTER.setTestMode(WAS_IN_TEST_MODE); + } + @Before public void createTestContent() { parentFolder = testNodes.createNode(TEST_FOLDER, "testFolderInFolder", ContentModel.TYPE_FOLDER, TEST_USER2.getUsername()); @@ -180,6 +202,52 @@ public Void execute() throws Throwable } + /** + * ALF-18488 Rules: Send Email action is not working + * Tests deletion of node triggers outbound rule and fires the MailAction + */ + @Test public void testEmailExecutorOnOutboundTriggerDelete() throws Exception + { + TRANSACTION_HELPER.doInTransaction(new RetryingTransactionCallback() + { + public Void execute() throws Throwable + { + // We'll do all this as user 'UserTwo'. + AuthenticationUtil.setFullyAuthenticatedUser(AuthenticationUtil.getAdminUserName()); + + //Parent Folder Rule: Outbound + org.alfresco.service.cmr.rule.Rule rule = new org.alfresco.service.cmr.rule.Rule(); + rule.setRuleTypes(Collections.singletonList(RuleType.OUTBOUND)); + rule.setTitle("RuleServiceTest" + GUID.generate()); + rule.setDescription("Send email on delete"); + + //Mail Action + Action mailAction = ACTION_SERVICE.createAction(MailActionExecuter.NAME); + mailAction.setParameterValue(MailActionExecuter.PARAM_FROM, "some.body@example.com"); + mailAction.setParameterValue(MailActionExecuter.PARAM_TO, "some.bodyelse@example.com"); + mailAction.setParameterValue(MailActionExecuter.PARAM_SUBJECT, "Testing"); + mailAction.setParameterValue(MailActionExecuter.PARAM_TEMPLATE, "alfresco/templates/mail/test.txt.ftl"); + mailAction.setParameterValue(MailActionExecuter.PARAM_TEMPLATE_MODEL, (Serializable) getModel()); + + rule.setAction(mailAction); + + //Save Rules to appropriate Folders + RULE_SERVICE.saveRule(childFolder, rule); + + return null; + } + }); + + //Trigger the outbound rule by deleting the node + NODE_SERVICE.deleteNode(childContent); + + //Fetch unsent message (Test Mode) + MimeMessage message = MAIL_ACTION_EXECUTER.retrieveLastTestMessage(); + Assert.assertNotNull(message); + Assert.assertEquals("Hello Jan 1, 1970", (String) message.getContent()); + + } + /** * Adds content to a given node. @@ -197,4 +265,13 @@ private void addContentToNode(NodeRef nodeRef) contentWriter.putContent(STANDARD_TEXT_CONTENT + System.currentTimeMillis()); } + + private Serializable getModel() + { + Map model = new HashMap(); + + model.put("epoch", new Date(0)); + return (Serializable) model; + } + } diff --git a/source/java/org/alfresco/repo/rule/RuleTestSuite.java b/source/test-java/org/alfresco/repo/rule/RuleTestSuite.java similarity index 100% rename from source/java/org/alfresco/repo/rule/RuleTestSuite.java rename to source/test-java/org/alfresco/repo/rule/RuleTestSuite.java diff --git a/source/java/org/alfresco/repo/rule/RuleTypeImplTest.java b/source/test-java/org/alfresco/repo/rule/RuleTypeImplTest.java similarity index 100% rename from source/java/org/alfresco/repo/rule/RuleTypeImplTest.java rename to source/test-java/org/alfresco/repo/rule/RuleTypeImplTest.java diff --git a/source/java/org/alfresco/repo/rule/ruletrigger/RuleTriggerTest.java b/source/test-java/org/alfresco/repo/rule/ruletrigger/RuleTriggerTest.java similarity index 100% rename from source/java/org/alfresco/repo/rule/ruletrigger/RuleTriggerTest.java rename to source/test-java/org/alfresco/repo/rule/ruletrigger/RuleTriggerTest.java diff --git a/source/java/org/alfresco/repo/search/MLAnaysisModeExpansionTest.java b/source/test-java/org/alfresco/repo/search/MLAnaysisModeExpansionTest.java similarity index 100% rename from source/java/org/alfresco/repo/search/MLAnaysisModeExpansionTest.java rename to source/test-java/org/alfresco/repo/search/MLAnaysisModeExpansionTest.java diff --git a/source/java/org/alfresco/repo/search/QueryRegisterComponentTest.java b/source/test-java/org/alfresco/repo/search/QueryRegisterComponentTest.java similarity index 100% rename from source/java/org/alfresco/repo/search/QueryRegisterComponentTest.java rename to source/test-java/org/alfresco/repo/search/QueryRegisterComponentTest.java diff --git a/source/java/org/alfresco/repo/search/SearchServiceTest.java b/source/test-java/org/alfresco/repo/search/SearchServiceTest.java similarity index 100% rename from source/java/org/alfresco/repo/search/SearchServiceTest.java rename to source/test-java/org/alfresco/repo/search/SearchServiceTest.java diff --git a/source/java/org/alfresco/repo/search/SearchTestSuite.java b/source/test-java/org/alfresco/repo/search/SearchTestSuite.java similarity index 100% rename from source/java/org/alfresco/repo/search/SearchTestSuite.java rename to source/test-java/org/alfresco/repo/search/SearchTestSuite.java diff --git a/source/java/org/alfresco/repo/search/SearcherComponentTest.java b/source/test-java/org/alfresco/repo/search/SearcherComponentTest.java similarity index 100% rename from source/java/org/alfresco/repo/search/SearcherComponentTest.java rename to source/test-java/org/alfresco/repo/search/SearcherComponentTest.java diff --git a/source/java/org/alfresco/repo/search/impl/lucene/ADMLuceneCategoryTest.java b/source/test-java/org/alfresco/repo/search/impl/lucene/ADMLuceneCategoryTest.java similarity index 100% rename from source/java/org/alfresco/repo/search/impl/lucene/ADMLuceneCategoryTest.java rename to source/test-java/org/alfresco/repo/search/impl/lucene/ADMLuceneCategoryTest.java diff --git a/source/java/org/alfresco/repo/search/impl/lucene/ADMLuceneTest.java b/source/test-java/org/alfresco/repo/search/impl/lucene/ADMLuceneTest.java similarity index 97% rename from source/java/org/alfresco/repo/search/impl/lucene/ADMLuceneTest.java rename to source/test-java/org/alfresco/repo/search/impl/lucene/ADMLuceneTest.java index 98ce5bbbd27..87e7a197245 100644 --- a/source/java/org/alfresco/repo/search/impl/lucene/ADMLuceneTest.java +++ b/source/test-java/org/alfresco/repo/search/impl/lucene/ADMLuceneTest.java @@ -1752,7 +1752,7 @@ public void testFTS() throws InterruptedException ftsQueryWithCount(searcher, "lazy", 1); ftsQueryWithCount(searcher, "-lazy", 15); - ftsQueryWithCount(searcher, "lazy -lazy", 16, null, n14); + ftsQueryWithCount(searcher, "lazy -lazy", 16, null, n2); ftsQueryWithCount(searcher, "lazy^20 -lazy", 16, n14, null); ftsQueryWithCount(searcher, "lazy^20 -lazy^20", 16, null, n14); diff --git a/source/java/org/alfresco/repo/search/impl/lucene/ALF947Test.java b/source/test-java/org/alfresco/repo/search/impl/lucene/ALF947Test.java similarity index 100% rename from source/java/org/alfresco/repo/search/impl/lucene/ALF947Test.java rename to source/test-java/org/alfresco/repo/search/impl/lucene/ALF947Test.java diff --git a/source/java/org/alfresco/repo/search/impl/lucene/LuceneIndexBackupComponentTest.java b/source/test-java/org/alfresco/repo/search/impl/lucene/LuceneIndexBackupComponentTest.java similarity index 100% rename from source/java/org/alfresco/repo/search/impl/lucene/LuceneIndexBackupComponentTest.java rename to source/test-java/org/alfresco/repo/search/impl/lucene/LuceneIndexBackupComponentTest.java diff --git a/source/java/org/alfresco/repo/search/impl/lucene/MultiReaderTest.java b/source/test-java/org/alfresco/repo/search/impl/lucene/MultiReaderTest.java similarity index 100% rename from source/java/org/alfresco/repo/search/impl/lucene/MultiReaderTest.java rename to source/test-java/org/alfresco/repo/search/impl/lucene/MultiReaderTest.java diff --git a/source/java/org/alfresco/repo/search/impl/lucene/index/IndexInfoTest.java b/source/test-java/org/alfresco/repo/search/impl/lucene/index/IndexInfoTest.java similarity index 100% rename from source/java/org/alfresco/repo/search/impl/lucene/index/IndexInfoTest.java rename to source/test-java/org/alfresco/repo/search/impl/lucene/index/IndexInfoTest.java diff --git a/source/test-java/org/alfresco/repo/search/impl/querymodel/impl/db/DBQueryTest.java b/source/test-java/org/alfresco/repo/search/impl/querymodel/impl/db/DBQueryTest.java new file mode 100644 index 00000000000..d4caa5817de --- /dev/null +++ b/source/test-java/org/alfresco/repo/search/impl/querymodel/impl/db/DBQueryTest.java @@ -0,0 +1,916 @@ +/* + * Copyright (C) 2005-2013 Alfresco Software Limited. + * + * This file is part of Alfresco + * + * Alfresco is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Alfresco 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 Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Alfresco. If not, see . + */ +package org.alfresco.repo.search.impl.querymodel.impl.db; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.fail; + +import java.io.InputStream; +import java.io.Serializable; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.GregorianCalendar; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Locale; +import java.util.Map; + +import javax.transaction.Status; +import javax.transaction.UserTransaction; + +import org.alfresco.model.ContentModel; +import org.alfresco.repo.dictionary.DictionaryDAO; +import org.alfresco.repo.dictionary.DictionaryListener; +import org.alfresco.repo.dictionary.DictionaryNamespaceComponent; +import org.alfresco.repo.dictionary.M2Model; +import org.alfresco.repo.dictionary.NamespaceDAOImpl; +import org.alfresco.repo.node.BaseNodeServiceTest; +import org.alfresco.repo.search.impl.lucene.ADMLuceneTest.UnknownDataType; +import org.alfresco.repo.security.authentication.AuthenticationComponent; +import org.alfresco.repo.tenant.TenantService; +import org.alfresco.repo.transaction.RetryingTransactionHelper; +import org.alfresco.service.ServiceRegistry; +import org.alfresco.service.cmr.dictionary.DictionaryService; +import org.alfresco.service.cmr.repository.ContentData; +import org.alfresco.service.cmr.repository.MLText; +import org.alfresco.service.cmr.repository.NodeRef; +import org.alfresco.service.cmr.repository.NodeService; +import org.alfresco.service.cmr.repository.Period; +import org.alfresco.service.cmr.repository.StoreRef; +import org.alfresco.service.cmr.repository.datatype.DefaultTypeConverter; +import org.alfresco.service.cmr.repository.datatype.Duration; +import org.alfresco.service.cmr.search.QueryConsistency; +import org.alfresco.service.cmr.search.ResultSet; +import org.alfresco.service.cmr.search.ResultSetRow; +import org.alfresco.service.cmr.search.SearchParameters; +import org.alfresco.service.cmr.search.SearchService; +import org.alfresco.service.namespace.QName; +import org.alfresco.service.transaction.TransactionService; +import org.alfresco.util.ApplicationContextHelper; +import org.alfresco.util.CachingDateFormat; +import org.junit.After; +import org.junit.AfterClass; +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Test; +import org.springframework.context.ApplicationContext; +import org.springframework.extensions.surf.util.I18NUtil; + +/** + * @author Andy + * + */ +public class DBQueryTest implements DictionaryListener +{ + protected static ApplicationContext ctx = null; + + private static final String TEST_NAMESPACE = "http://www.alfresco.org/test/lucenetest"; + + private static final QName ASSOC_TYPE_QNAME = QName.createQName(TEST_NAMESPACE, "assoc"); + + private static QName CREATED_DATE = QName.createQName(TEST_NAMESPACE, "createdDate"); + + private static QName ORDER_DOUBLE = QName.createQName(TEST_NAMESPACE, "orderDouble"); + + private static QName ORDER_FLOAT = QName.createQName(TEST_NAMESPACE, "orderFloat"); + + private static QName ORDER_LONG = QName.createQName(TEST_NAMESPACE, "orderLong"); + + private static QName ORDER_INT = QName.createQName(TEST_NAMESPACE, "orderInt"); + + private static QName ORDER_TEXT = QName.createQName(TEST_NAMESPACE, "orderText"); + + private static QName ORDER_ML_TEXT = QName.createQName(TEST_NAMESPACE, "orderMLText"); + + private static QName ASPECT_WITH_CHILDREN = QName.createQName(TEST_NAMESPACE, "aspectWithChildren"); + + private static QName TEST_CONTENT_TYPE = QName.createQName(TEST_NAMESPACE, "testContentType"); + + private static QName TEST_SUPER_CONTENT_TYPE = QName.createQName(TEST_NAMESPACE, "testSuperContentType"); + + private static QName TEST_FOLDER_TYPE = QName.createQName(TEST_NAMESPACE, "testFolderType"); + + private static QName TEST_SUPER_FOLDER_TYPE = QName.createQName(TEST_NAMESPACE, "testSuperFolderType"); + + private static QName TEST_ASPECT = QName.createQName(TEST_NAMESPACE, "testAspect"); + + private static QName TEST_SUPER_ASPECT = QName.createQName(TEST_NAMESPACE, "testSuperAspect"); + + + TransactionService transactionService; + + RetryingTransactionHelper retryingTransactionHelper; + + NodeService nodeService; + + DictionaryService dictionaryService; + + TenantService tenantService; + + private DictionaryDAO dictionaryDAO; + + private NamespaceDAOImpl namespaceDao; + + private ServiceRegistry serviceRegistry; + + private AuthenticationComponent authenticationComponent; + + private DictionaryNamespaceComponent namespacePrefixResolver; + + private UserTransaction txn; + + private M2Model model; + + private NodeRef rootNodeRef; + + private NodeRef n1; + + private NodeRef n2; + + private NodeRef n3; + + private NodeRef n4; + + private NodeRef n5; + + private NodeRef n6; + + private NodeRef n7; + + private NodeRef n8; + + private NodeRef n9; + + private NodeRef n10; + + private NodeRef n11; + + private NodeRef n12; + + private NodeRef n13; + + private NodeRef n14; + + private NodeRef n15; + + private Date testDate; + + private String formattedTestDate; + + private String midCreationDate; + + private String midModificationDate; + + private String midOrderDate; + + protected static void startContext() + { + ctx = ApplicationContextHelper.getApplicationContext(); + } + + protected static void stopContext() + { + ApplicationContextHelper.closeApplicationContext(); + } + + @BeforeClass + public static void beforeTests() + { + startContext(); + } + + + @AfterClass + public static void afterTests() + { + stopContext(); + } + + + public void afterDictionaryDestroy() + { + } + + public void afterDictionaryInit() + { + } + + public void onDictionaryInit() + { + // Register the test model + dictionaryDAO.putModel(model); + namespaceDao.addPrefix("test", TEST_NAMESPACE); + } + + @Before + public void setup() throws Exception + { + nodeService = (NodeService) ctx.getBean("dbNodeService"); + dictionaryService = (DictionaryService) ctx.getBean("dictionaryService"); + dictionaryDAO = (DictionaryDAO) ctx.getBean("dictionaryDAO"); + namespacePrefixResolver = (DictionaryNamespaceComponent) ctx.getBean("namespaceService"); + transactionService = (TransactionService) ctx.getBean("transactionComponent"); + retryingTransactionHelper = (RetryingTransactionHelper) ctx.getBean("retryingTransactionHelper"); + tenantService = (TenantService) ctx.getBean("tenantService"); + serviceRegistry = (ServiceRegistry) ctx.getBean(ServiceRegistry.SERVICE_REGISTRY); + namespaceDao = (NamespaceDAOImpl) ctx.getBean("namespaceDAO"); + authenticationComponent = (AuthenticationComponent) ctx.getBean("authenticationComponent"); + + loadTestModel(); + createTestData(); + } + + protected void loadTestModel() + { + ClassLoader cl = BaseNodeServiceTest.class.getClassLoader(); + InputStream modelStream = cl.getResourceAsStream("org/alfresco/repo/search/impl/querymodel/impl/db/MetadataQueryTest_model.xml"); + assertNotNull(modelStream); + model = M2Model.createModel(modelStream); + dictionaryDAO.register(this); + dictionaryDAO.reset(); + assertNotNull(dictionaryDAO.getClass(TEST_SUPER_CONTENT_TYPE)); + } + + protected void createTestData() throws Exception + { + I18NUtil.setLocale(Locale.UK); + txn = transactionService.getUserTransaction(); + txn.begin(); + this.authenticationComponent.setSystemUserAsCurrentUser(); + + StoreRef storeRef = nodeService.createStore(StoreRef.PROTOCOL_WORKSPACE, "Test_" + System.currentTimeMillis()); + rootNodeRef = nodeService.getRootNode(storeRef); + + n1 = nodeService.createNode(rootNodeRef, ContentModel.ASSOC_CHILDREN, QName.createQName("{namespace}top"), TEST_SUPER_FOLDER_TYPE, getOrderProperties()).getChildRef(); + nodeService.setProperty(n1, ContentModel.PROP_NAME, "Folder_1"); + + n2 = nodeService.createNode(rootNodeRef, ContentModel.ASSOC_CHILDREN, QName.createQName("{namespace}two"), TEST_FOLDER_TYPE, getOrderProperties()).getChildRef(); + nodeService.setProperty(n2, ContentModel.PROP_NAME, "Folder 2"); + + n3 = nodeService.createNode(rootNodeRef, ContentModel.ASSOC_CHILDREN, QName.createQName("{namespace}three"), TEST_SUPER_CONTENT_TYPE, getOrderProperties()).getChildRef(); + nodeService.setProperty(n3, ContentModel.PROP_NAME, "Content 3"); + + Map testProperties = new HashMap(); + testProperties.put(QName.createQName(TEST_NAMESPACE, "text-indexed-stored-tokenised-atomic"), "TEXT THAT IS INDEXED STORED AND TOKENISED ATOMICALLY KEYONE"); + testProperties.put(QName.createQName(TEST_NAMESPACE, "text-indexed-unstored-tokenised-atomic"), "TEXT THAT IS INDEXED STORED AND TOKENISED ATOMICALLY KEYUNSTORED"); + testProperties.put(QName.createQName(TEST_NAMESPACE, "text-indexed-stored-tokenised-nonatomic"), "TEXT THAT IS INDEXED STORED AND TOKENISED BUT NOT ATOMICALLY KEYTWO"); + testProperties.put(QName.createQName(TEST_NAMESPACE, "int-ista"), Integer.valueOf(1)); + testProperties.put(QName.createQName(TEST_NAMESPACE, "long-ista"), Long.valueOf(2)); + testProperties.put(QName.createQName(TEST_NAMESPACE, "float-ista"), Float.valueOf(3.4f)); + testProperties.put(QName.createQName(TEST_NAMESPACE, "double-ista"), Double.valueOf(5.6)); + Calendar c = new GregorianCalendar(); + c.setTime(new Date(((new Date().getTime() - 10000)))); + + testDate = c.getTime(); + formattedTestDate = CachingDateFormat.getDateFormat().format(testDate); + testProperties.put(QName.createQName(TEST_NAMESPACE, "date-ista"), testDate); + testProperties.put(QName.createQName(TEST_NAMESPACE, "datetime-ista"), testDate); + testProperties.put(QName.createQName(TEST_NAMESPACE, "boolean-ista"), Boolean.valueOf(true)); + testProperties.put(QName.createQName(TEST_NAMESPACE, "qname-ista"), QName.createQName("{wibble}wobble")); + testProperties.put(QName.createQName(TEST_NAMESPACE, "category-ista"), new NodeRef(storeRef, "CategoryId")); + testProperties.put(QName.createQName(TEST_NAMESPACE, "noderef-ista"), n1); + testProperties.put(QName.createQName(TEST_NAMESPACE, "path-ista"), nodeService.getPath(n3)); + testProperties.put(QName.createQName(TEST_NAMESPACE, "locale-ista"), Locale.UK); + testProperties.put(QName.createQName(TEST_NAMESPACE, "period-ista"), new Period("period|12")); + testProperties.put(QName.createQName(TEST_NAMESPACE, "null"), null); + testProperties.put(QName.createQName(TEST_NAMESPACE, "list"), new ArrayList()); + MLText mlText = new MLText(); + mlText.addValue(Locale.ENGLISH, "banana"); + mlText.addValue(Locale.FRENCH, "banane"); + mlText.addValue(Locale.CHINESE, "香蕉"); + mlText.addValue(new Locale("nl"), "banaan"); + mlText.addValue(Locale.GERMAN, "banane"); + mlText.addValue(new Locale("el"), "μπανάνα"); + mlText.addValue(Locale.ITALIAN, "banana"); + mlText.addValue(new Locale("ja"), "ãƒãƒŠãƒŠ"); + mlText.addValue(new Locale("ko"), "바나나"); + mlText.addValue(new Locale("pt"), "banana"); + mlText.addValue(new Locale("ru"), "банан"); + mlText.addValue(new Locale("es"), "plátano"); + testProperties.put(QName.createQName(TEST_NAMESPACE, "ml"), mlText); + // Any multivalued + ArrayList anyValues = new ArrayList(); + anyValues.add(Integer.valueOf(100)); + anyValues.add("anyValueAsString"); + anyValues.add(new UnknownDataType()); + testProperties.put(QName.createQName(TEST_NAMESPACE, "any-many-ista"), anyValues); + // Content multivalued + // - note only one the first value is used from the collection + // - andit has to go in type d:any as d:content is not allowed to be multivalued + + ArrayList contentValues = new ArrayList(); + contentValues.add(new ContentData(null, "text/plain", 0L, "UTF-16", Locale.UK)); + testProperties.put(QName.createQName(TEST_NAMESPACE, "content-many-ista"), contentValues); + + // MLText multivalued + + MLText mlText1 = new MLText(); + mlText1.addValue(Locale.ENGLISH, "cabbage"); + mlText1.addValue(Locale.FRENCH, "chou"); + + MLText mlText2 = new MLText(); + mlText2.addValue(Locale.ENGLISH, "lemur"); + mlText2.addValue(new Locale("ru"), "лемур"); + + ArrayList mlValues = new ArrayList(); + mlValues.add(mlText1); + mlValues.add(mlText2); + + testProperties.put(QName.createQName(TEST_NAMESPACE, "mltext-many-ista"), mlValues); + + // null in multi valued + + ArrayList testList = new ArrayList(); + testList.add(null); + testProperties.put(QName.createQName(TEST_NAMESPACE, "nullist"), testList); + ArrayList testList2 = new ArrayList(); + testList2.add("woof"); + testList2.add(null); + + testProperties.put(ContentModel.PROP_NAME, "Node 4"); + + n4 = nodeService.createNode(rootNodeRef, ContentModel.ASSOC_CHILDREN, QName.createQName("{namespace}four"), TEST_CONTENT_TYPE, testProperties).getChildRef(); + nodeService.setProperty(n4, ContentModel.PROP_NAME, "Content 4"); + + n5 = nodeService.createNode(n1, ASSOC_TYPE_QNAME, QName.createQName("{namespace}five"), TEST_SUPER_FOLDER_TYPE, getOrderProperties()).getChildRef(); + nodeService.setProperty(n5, ContentModel.PROP_NAME, "Folder 5"); + n6 = nodeService.createNode(n1, ASSOC_TYPE_QNAME, QName.createQName("{namespace}six"), TEST_SUPER_FOLDER_TYPE, getOrderProperties()).getChildRef(); + nodeService.setProperty(n6, ContentModel.PROP_NAME, "Folder 6"); + + synchronized (this) + { + wait(1000); + } + + midOrderDate = DefaultTypeConverter.INSTANCE.convert(String.class, orderDate); + + n7 = nodeService.createNode(n2, ASSOC_TYPE_QNAME, QName.createQName("{namespace}seven"), TEST_SUPER_CONTENT_TYPE, getOrderProperties()).getChildRef(); + nodeService.setProperty(n7, ContentModel.PROP_NAME, "Content 7"); + + midCreationDate = DefaultTypeConverter.INSTANCE.convert(String.class, nodeService.getProperty(n7, ContentModel.PROP_CREATED)); + midModificationDate = DefaultTypeConverter.INSTANCE.convert(String.class, nodeService.getProperty(n7, ContentModel.PROP_MODIFIED)); + + synchronized (this) + { + wait(1000); + } + + n8 = nodeService.createNode(n2, ASSOC_TYPE_QNAME, QName.createQName("{namespace}eight-2"), TEST_SUPER_CONTENT_TYPE, getOrderProperties()).getChildRef(); + nodeService.setProperty(n8, ContentModel.PROP_NAME, "Content 8"); + n9 = nodeService.createNode(n5, ASSOC_TYPE_QNAME, QName.createQName("{namespace}nine"), TEST_SUPER_CONTENT_TYPE, getOrderProperties()).getChildRef(); + nodeService.setProperty(n9, ContentModel.PROP_NAME, "Content 9"); + n10 = nodeService.createNode(n5, ASSOC_TYPE_QNAME, QName.createQName("{namespace}ten"), TEST_SUPER_CONTENT_TYPE, getOrderProperties()).getChildRef(); + nodeService.setProperty(n10, ContentModel.PROP_NAME, "Content 10"); + n11 = nodeService.createNode(n5, ASSOC_TYPE_QNAME, QName.createQName("{namespace}eleven"), TEST_SUPER_CONTENT_TYPE, getOrderProperties()).getChildRef(); + nodeService.setProperty(n11, ContentModel.PROP_NAME, "Content 11"); + n12 = nodeService.createNode(n5, ASSOC_TYPE_QNAME, QName.createQName("{namespace}twelve"), TEST_SUPER_FOLDER_TYPE, getOrderProperties()).getChildRef(); + nodeService.setProperty(n12, ContentModel.PROP_NAME, "Folder 12"); + n13 = nodeService.createNode(n12, ASSOC_TYPE_QNAME, QName.createQName("{namespace}thirteen"), TEST_SUPER_FOLDER_TYPE, getOrderProperties()).getChildRef(); + nodeService.setProperty(n13, ContentModel.PROP_NAME, "Folder 13"); + + Map properties = new HashMap(); + + MLText desc1 = new MLText(); + desc1.addValue(Locale.ENGLISH, "Alfresco tutorial"); + desc1.addValue(Locale.US, "Alfresco tutorial"); + + Date explicitCreatedDate = new Date(); + Thread.sleep(2000); + + properties.put(ContentModel.PROP_CONTENT, new ContentData(null, "text/plain", 0L, "UTF-8", Locale.UK)); + properties.put(ContentModel.PROP_DESCRIPTION, desc1); + properties.put(ContentModel.PROP_CREATED, explicitCreatedDate); + n14 = nodeService.createNode(n13, ASSOC_TYPE_QNAME, QName.createQName("{namespace}fourteen"), ContentModel.TYPE_CONTENT, properties).getChildRef(); + nodeService.setProperty(n14, ContentModel.PROP_NAME, "Content 14"); + + n15 = nodeService.createNode(n13, ASSOC_TYPE_QNAME, QName.createQName("{namespace}fifteen"), ContentModel.TYPE_THUMBNAIL, getOrderProperties()).getChildRef(); + nodeService.setProperty(n15, ContentModel.PROP_NAME, "Content 15"); + + nodeService.addChild(rootNodeRef, n8, ContentModel.ASSOC_CHILDREN, QName.createQName("{namespace}eight-0")); + nodeService.addChild(n1, n8, ASSOC_TYPE_QNAME, QName.createQName("{namespace}eight-1")); + nodeService.addChild(n2, n13, ASSOC_TYPE_QNAME, QName.createQName("{namespace}link")); + + nodeService.addChild(n1, n14, ASSOC_TYPE_QNAME, QName.createQName("{namespace}common")); + nodeService.addChild(n2, n14, ASSOC_TYPE_QNAME, QName.createQName("{namespace}common")); + nodeService.addChild(n5, n14, ASSOC_TYPE_QNAME, QName.createQName("{namespace}common")); + nodeService.addChild(n6, n14, ASSOC_TYPE_QNAME, QName.createQName("{namespace}common")); + nodeService.addChild(n12, n14, ASSOC_TYPE_QNAME, QName.createQName("{namespace}common")); + nodeService.addChild(n13, n14, ASSOC_TYPE_QNAME, QName.createQName("{namespace}common")); + + } + + + private double orderDoubleCount = -0.11d; + + private Date orderDate = new Date(); + + private float orderFloatCount = -3.5556f; + + private long orderLongCount = -1999999999999999l; + + private int orderIntCount = -45764576; + + private int orderTextCount = 0; + + /** + * @return properties + */ + public Map getOrderProperties() + { + Map testProperties = new HashMap(); + testProperties.put(CREATED_DATE, orderDate); + testProperties.put(ORDER_DOUBLE, orderDoubleCount); + testProperties.put(ORDER_FLOAT, orderFloatCount); + testProperties.put(ORDER_LONG, orderLongCount); + testProperties.put(ORDER_INT, orderIntCount); + testProperties.put(ORDER_TEXT, new String(new char[] { (char) ('a' + orderTextCount) }) + " cabbage"); + + MLText mlText = new MLText(); + mlText.addValue(Locale.ENGLISH, new String(new char[] { (char) ('a' + orderTextCount) }) + " banana"); + mlText.addValue(Locale.FRENCH, new String(new char[] { (char) ('Z' - orderTextCount) }) + " banane"); + mlText.addValue(Locale.CHINESE, new String(new char[] { (char) ('香' + orderTextCount) }) + " 香蕉"); + testProperties.put(ORDER_ML_TEXT, mlText); + + orderDate = Duration.subtract(orderDate, new Duration("P1D")); + orderDoubleCount += 0.1d; + orderFloatCount += 0.82f; + orderLongCount += 299999999999999l; + orderIntCount += 8576457; + orderTextCount++; + return testProperties; + } + + + @After + public void teardown() throws Exception + { + if (txn.getStatus() == Status.STATUS_ACTIVE) + { + txn.rollback(); + } + + } + + @Test + public void testCmisSql() throws InterruptedException + { + sqlQueryWithCount("SELECT * FROM cmis:document", 8); + sqlQueryWithCount("SELECT * FROM cm:thumbnail", 1); + sqlQueryWithCount("SELECT * FROM cmis:folder", 6); + sqlQueryWithCount("SELECT * FROM test:testSuperContentType", 7); + sqlQueryWithCount("SELECT * FROM test:testContentType", 1); + sqlQueryWithCount("SELECT * FROM test:testSuperFolderType", 6); + sqlQueryWithCount("SELECT * FROM test:testFolderType", 1); + sqlQueryWithCount("SELECT * FROM test:testSuperAspect", 14); + sqlQueryWithCount("SELECT * FROM test:testAspect", 2); + + sqlQueryWithCount("SELECT * FROM cmis:folder where cmis:name = 'Folder_1'", 1); + sqlQueryWithCount("SELECT * FROM cmis:folder where cmis:name = 'Folder 2'", 1); + sqlQueryWithCount("SELECT * FROM cmis:document where cmis:name = 'Content 3'", 1); + sqlQueryWithCount("SELECT * FROM cmis:document where cmis:name = 'Content 4'", 1); + sqlQueryWithCount("SELECT * FROM cmis:folder where cmis:name = 'Folder 5'", 1); + sqlQueryWithCount("SELECT * FROM cmis:folder where cmis:name = 'Folder 6'", 1); + sqlQueryWithCount("SELECT * FROM cmis:document where cmis:name = 'Content 7'", 1); + sqlQueryWithCount("SELECT * FROM cmis:document where cmis:name = 'Content 8'", 1); + sqlQueryWithCount("SELECT * FROM cmis:document where cmis:name = 'Content 9'", 1); + sqlQueryWithCount("SELECT * FROM cmis:document where cmis:name = 'Content 10'", 1); + sqlQueryWithCount("SELECT * FROM cmis:document where cmis:name = 'Content 11'", 1); + sqlQueryWithCount("SELECT * FROM cmis:folder where cmis:name = 'Folder 12'", 1); + sqlQueryWithCount("SELECT * FROM cmis:folder where cmis:name = 'Folder 13'", 1); + sqlQueryWithCount("SELECT * FROM cmis:document where cmis:name = 'Content 14'", 1); + sqlQueryWithCount("SELECT * FROM cmis:document where cmis:name = 'Content 15'", 0); + sqlQueryWithCount("SELECT * FROM cm:thumbnail where cmis:name = 'Content 15'", 1); + + sqlQueryWithCount("SELECT * FROM cmis:document where cmis:name <> 'Content 7'", 7); + sqlQueryWithCount("SELECT * FROM cmis:document where cmis:name < 'Content 7'", 5); + sqlQueryWithCount("SELECT * FROM cmis:document where cmis:name <= 'Content 7'", 6); + sqlQueryWithCount("SELECT * FROM cmis:document where cmis:name > 'Content 7'", 2); + sqlQueryWithCount("SELECT * FROM cmis:document where cmis:name >= 'Content 7'", 3); + sqlQueryWithCount("SELECT * FROM cmis:document where cmis:name IN ('Content 3', 'Content 4')", 2); + sqlQueryWithCount("SELECT * FROM cmis:document where cmis:name NOT IN ('Content 3', 'Content 4')", 6); + sqlQueryWithCount("SELECT * FROM cmis:document where cmis:name like 'Content _'", 5); + sqlQueryWithCount("SELECT * FROM cmis:document where cmis:name like 'Content __'", 3); + sqlQueryWithCount("SELECT * FROM cmis:document where cmis:name not like 'Content __'", 5); + sqlQueryWithCount("SELECT * FROM cmis:document where cmis:name like 'Content%'", 8); + sqlQueryWithCount("SELECT * FROM cmis:document where cmis:name like 'Content%4'", 2); + sqlQueryWithCount("SELECT * FROM cmis:document where cmis:name is not null", 8); + sqlQueryWithCount("SELECT * FROM cmis:document where cmis:name is null", 0); + + sqlQueryWithCount("SELECT * FROM cmis:document where IN_FOLDER('"+n2+"')", 3); + sqlQueryWithCount("SELECT * FROM cmis:folder where IN_FOLDER('"+n2+"')", 1); + + sqlQueryWithCount("SELECT * FROM cmis:folder where cmis:name = 'folder_1'", 0); + sqlQueryWithCount("SELECT * FROM cmis:folder where LOWER(cmis:name) = 'folder_1'", 1); + sqlQueryWithCount("SELECT * FROM cmis:folder where cmis:name = 'FOLDER_1'", 0); + sqlQueryWithCount("SELECT * FROM cmis:folder where UPPER(cmis:name) = 'FOLDER_1'", 1); + + sqlQueryWithCount("SELECT * FROM cmis:folder where cmis:name like 'Folder 1'", 0); + sqlQueryWithCount("SELECT * FROM cmis:folder where cmis:name like 'Folder 2'", 1); + sqlQueryWithCount("SELECT * FROM cmis:folder where cmis:name like 'Folder_1'", 1); + sqlQueryWithCount("SELECT * FROM cmis:folder where cmis:name like 'Folder_2'", 1); + sqlQueryWithCount("SELECT * FROM cmis:folder where cmis:name like 'Folder\\_1'", 1); + sqlQueryWithCount("SELECT * FROM cmis:folder where cmis:name like 'Folder\\_2'", 0); + + sqlQueryWithCount("SELECT * FROM cmis:document where IN_FOLDER('"+n2+"') and cmis:name = 'Content 7'", 1); + sqlQueryWithCount("SELECT * FROM cmis:document where IN_FOLDER('"+n2+"') and cmis:name = 'Content 8'", 1); + sqlQueryWithCount("SELECT * FROM cmis:document where IN_FOLDER('"+n2+"') and cmis:name = 'Content 14'", 1); + sqlQueryWithCount("SELECT * FROM cmis:document where IN_FOLDER('"+n2+"') and not cmis:name = 'Content 8'", 2); + + sqlQueryWithCount("SELECT * FROM cmis:document d join test:testContentType a on d.cmis:objectId = a.cmis:objectId", 1); + sqlQueryWithCount("SELECT * FROM cmis:document d join test:testSuperContentType a on d.cmis:objectId = a.cmis:objectId", 7); + + sqlQueryWithCount("SELECT * FROM cmis:document where cmis:creationDate = '"+midCreationDate+"'", 1); + + sqlQueryWithCount("SELECT * FROM cmis:document where cmis:lastModificationDate = '"+midModificationDate+"'", 1); + + sqlQueryWithCount("SELECT * FROM cmis:document where cmis:createdBy = 'System'", 8); + + sqlQueryWithCount("SELECT * FROM cmis:document where cmis:lastModifiedBy = 'System'", 8); + + sqlQueryWithCount("SELECT * FROM cmis:document d join test:testSuperAspect a on d.cmis:objectId = a.cmis:objectId", 7); + sqlQueryWithCount("SELECT * FROM cmis:document d join test:testSuperAspect a on d.cmis:objectId = a.cmis:objectId where a.test:createdDate = '"+midOrderDate+"'", 1); + + try + { + sqlQueryWithCount("SELECT * FROM cmis:folder d join test:testSuperAspect a on d.cmis:objectId = a.cmis:objectId where a.test:orderDouble = -0.11", 1); + fail(); + } + catch(Exception e) + { + + } + + try + { + sqlQueryWithCount("SELECT * FROM cmis:folder d join test:testSuperAspect a on d.cmis:objectId = a.cmis:objectId where a.test:orderFloat = -3.5556", 1); + fail(); + } + catch(Exception e) + { + + } + + long longValue = -1999999999999999l + (299999999999999l * 6); + + sqlQueryWithCount("SELECT * FROM cmis:folder d join test:testSuperAspect a on d.cmis:objectId = a.cmis:objectId where a.test:orderLong = -1999999999999999", 1); + sqlQueryWithCount("SELECT * FROM test:testSuperAspect a where a.test:orderLong = "+longValue, 1); + sqlQueryWithCount("SELECT * FROM test:testSuperAspect a where a.test:orderLong <> "+longValue, 12); + sqlQueryWithCount("SELECT * FROM test:testSuperAspect a where a.test:orderLong < "+longValue, 6); + sqlQueryWithCount("SELECT * FROM test:testSuperAspect a where a.test:orderLong <= "+longValue, 7); + sqlQueryWithCount("SELECT * FROM test:testSuperAspect a where a.test:orderLong > "+longValue, 6); + sqlQueryWithCount("SELECT * FROM test:testSuperAspect a where a.test:orderLong >= "+longValue, 7); + sqlQueryWithCount("SELECT * FROM test:testSuperAspect a where a.test:orderLong IN ( "+longValue+")", 1); + sqlQueryWithCount("SELECT * FROM test:testSuperAspect a where a.test:orderLong NOT IN ("+longValue+")", 12); + sqlQueryWithCount("SELECT * FROM test:testSuperAspect a where a.test:orderLong is null", 0); + sqlQueryWithCount("SELECT * FROM test:testSuperAspect a where a.test:orderLong is not null", 13); + + long intValue = -45764576 + (8576457 * 6); + + sqlQueryWithCount("SELECT * FROM cmis:folder d join test:testSuperAspect a on d.cmis:objectId = a.cmis:objectId where a.test:orderInt = -45764576", 1); + sqlQueryWithCount("SELECT * FROM test:testSuperAspect a where a.test:orderInt = "+intValue, 1); + sqlQueryWithCount("SELECT * FROM test:testSuperAspect a where a.test:orderInt <> "+intValue, 12); + sqlQueryWithCount("SELECT * FROM test:testSuperAspect a where a.test:orderInt < "+intValue, 6); + sqlQueryWithCount("SELECT * FROM test:testSuperAspect a where a.test:orderInt <= "+intValue, 7); + sqlQueryWithCount("SELECT * FROM test:testSuperAspect a where a.test:orderInt > "+intValue, 6); + sqlQueryWithCount("SELECT * FROM test:testSuperAspect a where a.test:orderInt >= "+intValue, 7); + sqlQueryWithCount("SELECT * FROM test:testSuperAspect a where a.test:orderInt IN ( "+intValue+")", 1); + sqlQueryWithCount("SELECT * FROM test:testSuperAspect a where a.test:orderInt NOT IN ("+intValue+")", 12); + sqlQueryWithCount("SELECT * FROM test:testSuperAspect a where a.test:orderInt is null", 0); + sqlQueryWithCount("SELECT * FROM test:testSuperAspect a where a.test:orderInt is not null", 13); + + String stringValue = new String(new char[] { (char) ('a' + 6) }) + " cabbage"; + + sqlQueryWithCount("SELECT * FROM cmis:folder d join test:testSuperAspect a on d.cmis:objectId = a.cmis:objectId where a.test:orderText = 'a cabbage'", 1); + sqlQueryWithCount("SELECT * FROM test:testSuperAspect a where a.test:orderText = '"+stringValue+"'", 1); + sqlQueryWithCount("SELECT * FROM test:testSuperAspect a where a.test:orderText <> '"+stringValue+"'", 12); + sqlQueryWithCount("SELECT * FROM test:testSuperAspect a where a.test:orderText < '"+stringValue+"'", 6); + sqlQueryWithCount("SELECT * FROM test:testSuperAspect a where a.test:orderText <= '"+stringValue+"'", 7); + sqlQueryWithCount("SELECT * FROM test:testSuperAspect a where a.test:orderText > '"+stringValue+"'", 6); + sqlQueryWithCount("SELECT * FROM test:testSuperAspect a where a.test:orderText >= '"+stringValue+"'", 7); + sqlQueryWithCount("SELECT * FROM test:testSuperAspect a where a.test:orderText IN ( '"+stringValue+"')", 1); + sqlQueryWithCount("SELECT * FROM test:testSuperAspect a where a.test:orderText NOT IN ('"+stringValue+"')", 12); + sqlQueryWithCount("SELECT * FROM test:testSuperAspect a where a.test:orderText is null", 0); + sqlQueryWithCount("SELECT * FROM test:testSuperAspect a where a.test:orderText is not null", 13); + + // ML text is essentially multi-valued and gives unuusla results as ther is no locale constraint + + stringValue = new String(new char[] { (char) ('a' + 6) }) + " banana"; + + sqlQueryWithCount("SELECT * FROM cmis:folder d join test:testSuperAspect a on d.cmis:objectId = a.cmis:objectId where a.test:orderMLText = 'a banana'", 1); + sqlQueryWithCount("SELECT * FROM test:testSuperAspect a where a.test:orderMLText = '"+stringValue+"'", 1); +// sqlQueryWithCount("SELECT * FROM test:testSuperAspect a where a.test:orderMLText <> '"+stringValue+"'", 12); +// sqlQueryWithCount("SELECT * FROM test:testSuperAspect a where a.test:orderMLText < '"+stringValue+"'", 6); +// sqlQueryWithCount("SELECT * FROM test:testSuperAspect a where a.test:orderMLText <= '"+stringValue+"'", 7); +// sqlQueryWithCount("SELECT * FROM test:testSuperAspect a where a.test:orderMLText > '"+stringValue+"'", 6); +// sqlQueryWithCount("SELECT * FROM test:testSuperAspect a where a.test:orderMLText >= '"+stringValue+"'", 7); + sqlQueryWithCount("SELECT * FROM test:testSuperAspect a where a.test:orderMLText IN ( '"+stringValue+"')", 1); +// sqlQueryWithCount("SELECT * FROM test:testSuperAspect a where a.test:orderMLText NOT IN ('"+stringValue+"')", 12); + sqlQueryWithCount("SELECT * FROM test:testSuperAspect a where a.test:orderMLText is null", 0); + sqlQueryWithCount("SELECT * FROM test:testSuperAspect a where a.test:orderMLText is not null", 13); + + stringValue = new String(new char[] { (char) ('Z' - 6) }) + " banane"; + + sqlQueryWithCount("SELECT * FROM cmis:folder d join test:testSuperAspect a on d.cmis:objectId = a.cmis:objectId where a.test:orderMLText = 'Z banane'", 1); + sqlQueryWithCount("SELECT * FROM test:testSuperAspect a where a.test:orderMLText = '"+stringValue+"'", 1); +// sqlQueryWithCount("SELECT * FROM test:testSuperAspect a where a.test:orderMLText <> '"+stringValue+"'", 12); +// sqlQueryWithCount("SELECT * FROM test:testSuperAspect a where a.test:orderMLText < '"+stringValue+"'", 6); +// sqlQueryWithCount("SELECT * FROM test:testSuperAspect a where a.test:orderMLText <= '"+stringValue+"'", 7); +// sqlQueryWithCount("SELECT * FROM test:testSuperAspect a where a.test:orderMLText > '"+stringValue+"'", 6); +// sqlQueryWithCount("SELECT * FROM test:testSuperAspect a where a.test:orderMLText >= '"+stringValue+"'", 7); + sqlQueryWithCount("SELECT * FROM test:testSuperAspect a where a.test:orderMLText IN ( '"+stringValue+"')", 1); +// sqlQueryWithCount("SELECT * FROM test:testSuperAspect a where a.test:orderMLText NOT IN ('"+stringValue+"')", 12); + sqlQueryWithCount("SELECT * FROM test:testSuperAspect a where a.test:orderMLText is null", 0); + sqlQueryWithCount("SELECT * FROM test:testSuperAspect a where a.test:orderMLText is not null", 13); + + stringValue = new String(new char[] { (char) ('香' + 6) }) + " 香蕉"; + + sqlQueryWithCount("SELECT * FROM cmis:folder d join test:testSuperAspect a on d.cmis:objectId = a.cmis:objectId where a.test:orderMLText = '香 香蕉'", 1); + sqlQueryWithCount("SELECT * FROM test:testSuperAspect a where a.test:orderMLText = '"+stringValue+"'", 1); +// sqlQueryWithCount("SELECT * FROM test:testSuperAspect a where a.test:orderMLText <> '"+stringValue+"'", 12); +// sqlQueryWithCount("SELECT * FROM test:testSuperAspect a where a.test:orderMLText < '"+stringValue+"'", 6); +// sqlQueryWithCount("SELECT * FROM test:testSuperAspect a where a.test:orderMLText <= '"+stringValue+"'", 7); +// sqlQueryWithCount("SELECT * FROM test:testSuperAspect a where a.test:orderMLText > '"+stringValue+"'", 6); +// sqlQueryWithCount("SELECT * FROM test:testSuperAspect a where a.test:orderMLText >= '"+stringValue+"'", 7); + sqlQueryWithCount("SELECT * FROM test:testSuperAspect a where a.test:orderMLText IN ( '"+stringValue+"')", 1); +// sqlQueryWithCount("SELECT * FROM test:testSuperAspect a where a.test:orderMLText NOT IN ('"+stringValue+"')", 12); + sqlQueryWithCount("SELECT * FROM test:testSuperAspect a where a.test:orderMLText is null", 0); + sqlQueryWithCount("SELECT * FROM test:testSuperAspect a where a.test:orderMLText is not null", 13); + + } + + @Test + public void testOrdering() + { + sqlQueryWithCount("SELECT * FROM cmis:document order by cmis:name asc", 8, ContentModel.PROP_NAME, true); + sqlQueryWithCount("SELECT * FROM cmis:folder order by cmis:name asc", 6, ContentModel.PROP_NAME, true); + sqlQueryWithCount("SELECT * FROM cmis:document order by cmis:name desc", 8, ContentModel.PROP_NAME, false); + sqlQueryWithCount("SELECT * FROM cmis:folder order by cmis:name desc", 6, ContentModel.PROP_NAME, false); + + sqlQueryWithCount("SELECT * FROM cmis:document order by cmis:creationDate asc", 8, ContentModel.PROP_CREATED, true); + sqlQueryWithCount("SELECT * FROM cmis:folder order by cmis:creationDate asc", 6, ContentModel.PROP_CREATED, true); + sqlQueryWithCount("SELECT * FROM cmis:document order by cmis:creationDate desc", 8, ContentModel.PROP_CREATED, false); + sqlQueryWithCount("SELECT * FROM cmis:folder order by cmis:creationDate desc", 6, ContentModel.PROP_CREATED, false); + + sqlQueryWithCount("SELECT * FROM cmis:document order by cmis:lastModificationDate asc", 8, ContentModel.PROP_MODIFIED, true); + sqlQueryWithCount("SELECT * FROM cmis:folder order by cmis:lastModificationDate asc", 6, ContentModel.PROP_MODIFIED, true); + sqlQueryWithCount("SELECT * FROM cmis:document order by cmis:lastModificationDate desc", 8, ContentModel.PROP_MODIFIED, false); + sqlQueryWithCount("SELECT * FROM cmis:folder order by cmis:lastModificationDate desc", 6, ContentModel.PROP_MODIFIED, false); + + sqlQueryWithCount("SELECT * FROM cmis:document order by cmis:createdBy asc", 8, ContentModel.PROP_CREATOR, true); + sqlQueryWithCount("SELECT * FROM cmis:folder order by cmis:createdBy asc", 6, ContentModel.PROP_CREATOR, true); + sqlQueryWithCount("SELECT * FROM cmis:document order by cmis:createdBy desc", 8, ContentModel.PROP_CREATOR, false); + sqlQueryWithCount("SELECT * FROM cmis:folder order by cmis:createdBy desc", 6, ContentModel.PROP_CREATOR, false); + + sqlQueryWithCount("SELECT * FROM cmis:document order by cmis:lastModifiedBy asc", 8, ContentModel.PROP_MODIFIER, true); + sqlQueryWithCount("SELECT * FROM cmis:folder order by cmis:lastModifiedBy asc", 6, ContentModel.PROP_MODIFIER, true); + sqlQueryWithCount("SELECT * FROM cmis:document order by cmis:lastModifiedBy desc", 8, ContentModel.PROP_MODIFIER, false); + sqlQueryWithCount("SELECT * FROM cmis:folder order by cmis:lastModifiedBy desc", 6, ContentModel.PROP_MODIFIER, false); + + sqlQueryWithCount("SELECT * FROM test:testSuperAspect a order by a.test:createdDate asc", 13, CREATED_DATE, true); + sqlQueryWithCount("SELECT * FROM test:testSuperAspect a order by a.test:createdDate desc", 13, CREATED_DATE, false); + + sqlQueryWithCount("SELECT * FROM test:testSuperAspect a order by a.test:orderLong asc", 13, ORDER_LONG, true); + sqlQueryWithCount("SELECT * FROM test:testSuperAspect a order by a.test:orderLong desc", 13, ORDER_LONG, false); + + sqlQueryWithCount("SELECT * FROM test:testSuperAspect a order by a.test:orderInt asc", 13, ORDER_INT, true); + sqlQueryWithCount("SELECT * FROM test:testSuperAspect a order by a.test:orderInt desc", 13, ORDER_INT, false); + + sqlQueryWithCount("SELECT * FROM test:testSuperAspect a order by a.test:orderText asc", 13, ORDER_TEXT, true); + sqlQueryWithCount("SELECT * FROM test:testSuperAspect a order by a.test:orderText desc", 13, ORDER_TEXT, false); + + // Note nulls not found as we use inner join + sqlQueryWithCount("SELECT * FROM cmis:document order by cmis:contentStreamMimeType asc", 1); + sqlQueryWithCount("SELECT * FROM cmis:document order by cmis:contentStreamMimeType desc", 1); + + //sqlQueryWithCount("SELECT * FROM cmis:document order by cmis:contentStreamLength asc", 1); + //sqlQueryWithCount("SELECT * FROM cmis:document order by cmis:contentStreamLength desc", 1); + } + + + @Test + public void testOtherCMIS() + { + sqlQueryWithCount("SELECT * FROM cmis:folder where cmis:parentId = '"+ n2 + "'", 1); + sqlQueryWithCount("SELECT * FROM cmis:folder where cmis:parentId IN ('"+ n2 + "')", 1); + sqlQueryWithCount("SELECT * FROM cmis:folder where cmis:parentId <> '"+ n2 + "'", 6); + sqlQueryWithCount("SELECT * FROM cmis:folder where cmis:parentId NOT IN ('"+ n2 + "')", 6); + // IS not null is OK but null requires an outer join + //sqlQueryWithCount("SELECT * FROM cmis:folder where cmis:parentId IS NULL", 0); + //sqlQueryWithCount("SELECT * FROM cmis:folder where cmis:parentId IS NOT NULL", 7); + //sqlQueryWithCount("SELECT * FROM cmis:document where cmis:contentStreamLength = 0", 1); + sqlQueryWithCount("SELECT * FROM cmis:document where cmis:contentStreamFileName = 'Content 3'", 1); + sqlQueryWithCount("SELECT * FROM cmis:document where cmis:contentStreamFileName < 'Content 3'", 3); + sqlQueryWithCount("SELECT * FROM cmis:document where cmis:contentStreamFileName <= 'Content 3'", 4); + sqlQueryWithCount("SELECT * FROM cmis:document where cmis:contentStreamFileName > 'Content 3'", 4); + sqlQueryWithCount("SELECT * FROM cmis:document where cmis:contentStreamFileName >= 'Content 3'", 5); + sqlQueryWithCount("SELECT * FROM cmis:document where cmis:contentStreamFileName <> 'Content 3'", 7); + sqlQueryWithCount("SELECT * FROM cmis:document where cmis:contentStreamFileName IN ('Content 3', 'Content 4')", 2); + sqlQueryWithCount("SELECT * FROM cmis:document where cmis:contentStreamFileName NOT IN ('Content 3', 'Content 4')", 6); + sqlQueryWithCount("SELECT * FROM cmis:document where cmis:contentStreamFileName IS NULL", 0); + sqlQueryWithCount("SELECT * FROM cmis:document where cmis:contentStreamFileName IS NOT NULL", 8); + sqlQueryWithCount("SELECT * FROM cmis:document where cmis:contentStreamMimeType = 'text/plain'", 1); + sqlQueryWithCount("SELECT * FROM cmis:document where cmis:contentStreamMimeType < 'text/plain'", 0); + sqlQueryWithCount("SELECT * FROM cmis:document where cmis:contentStreamMimeType <= 'text/plain'", 1); + sqlQueryWithCount("SELECT * FROM cmis:document where cmis:contentStreamMimeType > 'text/plain'", 0); + sqlQueryWithCount("SELECT * FROM cmis:document where cmis:contentStreamMimeType >= 'text/plain'", 1); + sqlQueryWithCount("SELECT * FROM cmis:document where cmis:contentStreamMimeType <> 'text/plain'", 0); + sqlQueryWithCount("SELECT * FROM cmis:document where cmis:contentStreamMimeType IN ('text/plain')", 1); + sqlQueryWithCount("SELECT * FROM cmis:document where cmis:contentStreamMimeType NOT IN ('text/plain')", 0); + //Would need LOJ for exists - should porbably exclude from DB support for now + //sqlQueryWithCount("SELECT * FROM cmis:document where cmis:contentStreamMimeType IS NULL", 0); + //sqlQueryWithCount("SELECT * FROM cmis:document where cmis:contentStreamMimeType IS NOT NULL", 1); + sqlQueryWithCount("SELECT * FROM cmis:document where cmis:contentStreamMimeType like 'text%'", 1); + sqlQueryWithCount("SELECT * FROM cmis:folder where cmis:objectId = '"+ n2 + "'", 1); + sqlQueryWithCount("SELECT * FROM cmis:folder where cmis:objectId IN ('"+ n2 + "')", 1); + sqlQueryWithCount("SELECT * FROM cmis:folder where cmis:objectId <> '"+ n2 + "'", 5); + sqlQueryWithCount("SELECT * FROM cmis:folder where cmis:objectId NOT IN ('"+ n2 + "')", 5); + sqlQueryWithCount("SELECT * FROM cmis:folder where cmis:objectId IS NULL", 0); + sqlQueryWithCount("SELECT * FROM cmis:folder where cmis:objectId IS NOT NULL", 6); + sqlQueryWithCount("SELECT * FROM cmis:folder where cmis:objectTypeId = 'cmis:folder'", 0); + sqlQueryWithCount("SELECT * FROM cmis:folder where cmis:objectTypeId IN ('cmis:folder')", 0); + sqlQueryWithCount("SELECT * FROM cmis:folder where cmis:objectTypeId <> 'cmis:folder'", 6); + sqlQueryWithCount("SELECT * FROM cmis:folder where cmis:objectTypeId NOT IN ('cmis:folder')", 6); + sqlQueryWithCount("SELECT * FROM cmis:folder where cmis:objectTypeId IS NULL", 0); + sqlQueryWithCount("SELECT * FROM cmis:folder where cmis:objectTypeId IS NOT NULL", 6); + sqlQueryWithCount("SELECT * FROM cmis:folder where cmis:baseTypeId = 'cmis:folder'", 6); + sqlQueryWithCount("SELECT * FROM cmis:folder where cmis:baseTypeId IN ('cmis:folder')", 6); + sqlQueryWithCount("SELECT * FROM cmis:folder where cmis:baseTypeId <> 'cmis:folder'", 0); + sqlQueryWithCount("SELECT * FROM cmis:folder where cmis:baseTypeId NOT IN ('cmis:folder')", 0); + sqlQueryWithCount("SELECT * FROM cmis:folder where cmis:baseTypeId IS NULL", 0); + sqlQueryWithCount("SELECT * FROM cmis:folder where cmis:baseTypeId IS NOT NULL", 6); + sqlQueryWithCount("SELECT * FROM cmis:document where cmis:objectTypeId = 'cmis:document'", 1); + sqlQueryWithCount("SELECT * FROM cmis:document where cmis:objectTypeId IN ('cmis:document')", 1); + sqlQueryWithCount("SELECT * FROM cmis:document where cmis:objectTypeId <> 'cmis:document'", 7); + sqlQueryWithCount("SELECT * FROM cmis:document where cmis:objectTypeId NOT IN ('cmis:document')", 7); + sqlQueryWithCount("SELECT * FROM cmis:document where cmis:objectTypeId IS NULL", 0); + sqlQueryWithCount("SELECT * FROM cmis:document where cmis:objectTypeId IS NOT NULL", 8); + sqlQueryWithCount("SELECT * FROM cmis:document where cmis:baseTypeId = 'cmis:document'", 8); + sqlQueryWithCount("SELECT * FROM cmis:document where cmis:baseTypeId IN ('cmis:document')", 8); + sqlQueryWithCount("SELECT * FROM cmis:document where cmis:baseTypeId <> 'cmis:document'", 0); + sqlQueryWithCount("SELECT * FROM cmis:document where cmis:baseTypeId NOT IN ('cmis:document')", 0); + sqlQueryWithCount("SELECT * FROM cmis:document where cmis:baseTypeId IS NULL", 0); + sqlQueryWithCount("SELECT * FROM cmis:document where cmis:baseTypeId IS NOT NULL", 8); + } + + public void sqlQueryWithCount(String query, int count) + { + sqlQueryWithCount(query, count, null, null); + } + + public void sqlQueryWithCount(String query, int count, QName property, Boolean ascending) + { + queryWithCount(SearchService.LANGUAGE_CMIS_ALFRESCO, query, count, property, ascending); + } + + @Test + public void testAFTS() + { + aftsQueryWithCount("=TYPE:\"content\"", 8); + aftsQueryWithCount("=TYPE:\"cm:content\"", 8); + aftsQueryWithCount("=TYPE:\"cm:thumbnail\"", 1); + aftsQueryWithCount("=TYPE:\"cm:folder\"", 6); + aftsQueryWithCount("=TYPE:\"test:testSuperContentType\"", 7); + aftsQueryWithCount("=TYPE:\"test:testContentType\"", 1); + aftsQueryWithCount("=TYPE:\"test:testSuperFolderType\"", 6); + aftsQueryWithCount("=TYPE:\"test:testFolderType\"", 1); + aftsQueryWithCount("=ASPECT:\"test:testSuperAspect\"", 14); + aftsQueryWithCount("=ASPECT:\"test:testAspect\"", 2); + + aftsQueryWithCount("=TYPE:\"cm:folder\" AND =name:\"Folder_1\"", 1); + aftsQueryWithCount("=TYPE:\"cm:folder\" AND =name:\"Folder 2\"", 1); + aftsQueryWithCount("=TYPE:\"cm:content\" AND =name:\"Content 3\"", 1); + aftsQueryWithCount("=TYPE:\"cm:content\" AND =name:\"Content 4\"", 1); + aftsQueryWithCount("=TYPE:\"cm:folder\" AND =name:\"Folder 5\"", 1); + aftsQueryWithCount("=TYPE:\"cm:folder\" AND =name:\"Folder 6\"", 1); + aftsQueryWithCount("=TYPE:\"cm:content\" AND =name:\"Content 7\"", 1); + aftsQueryWithCount("=TYPE:\"cm:content\" AND =name:\"Content 8\"", 1); + aftsQueryWithCount("=TYPE:\"cm:content\" AND =name:\"Content 9\"", 1); + aftsQueryWithCount("=TYPE:\"cm:content\" AND =name:\"Content 10\"", 1); + aftsQueryWithCount("=TYPE:\"cm:content\" AND =name:\"Content 11\"", 1); + aftsQueryWithCount("=TYPE:\"cm:folder\" AND =name:\"Folder 12\"", 1); + aftsQueryWithCount("=TYPE:\"cm:folder\" AND =name:\"Folder 13\"", 1); + aftsQueryWithCount("=TYPE:\"cm:content\" AND =name:\"Content 14\"", 1); + aftsQueryWithCount("=TYPE:\"cm:content\" AND =name:\"Content 15\"", 0); + aftsQueryWithCount("=TYPE:\"cm:thumbnail\" AND =name:\"Content 15\"", 1); + + aftsQueryWithCount("=TYPE:\"cm:content\" AND NOT =name:\"Content 7\"", 7); + aftsQueryWithCount("=TYPE:\"cm:content\" AND -=name:\"Content 7\"", 7); + //aftsQueryWithCount("=TYPE:\"cm:content\" AND =name:\"Content ?\"", 5); + //aftsQueryWithCount("=TYPE:\"cm:content\" AND =name:\"Content ??\"", 3); + //aftsQueryWithCount("=TYPE:\"cm:content\" AND =name:\"Content*\"", 8); + aftsQueryWithCount("=TYPE:\"cm:content\" AND =name:Content*", 8); + //aftsQueryWithCount("=TYPE:\"cm:content\" AND =name:\"Content*4\"", 2); + //aftsQueryWithCount("=TYPE:\"cm:content\" AND =EXISTS:name", 8); + + aftsQueryWithCount("=TYPE:\"cm:content\" AND =PARENT:\""+n2+"\" AND =name:\"Content 7\"", 1); + aftsQueryWithCount("=TYPE:\"cm:content\" AND =PARENT:\""+n2+"\" AND =name:\"Content 8\"", 1); + aftsQueryWithCount("=TYPE:\"cm:content\" AND =PARENT:\""+n2+"\" AND =name:\"Content 14\"", 1); + aftsQueryWithCount("=TYPE:\"cm:content\" AND =PARENT:\""+n2+"\" AND -=name:\"Content 8\"", 2); + + aftsQueryWithCount("=TYPE:\"cm:content\" AND =created:\""+midCreationDate+"\"", 1); + + aftsQueryWithCount("=TYPE:\"cm:content\" AND =modified:\""+midModificationDate+"\"", 1); + + aftsQueryWithCount("=TYPE:\"cm:content\" AND =creator:System", 8); + + aftsQueryWithCount("=TYPE:\"cm:content\" AND =modifier:System", 8); + + long longValue = -1999999999999999l + (299999999999999l * 6); + + aftsQueryWithCount("=TYPE:\"cm:folder\" AND =ASPECT:\"test:testSuperAspect\" AND =test:orderLong:\"-1999999999999999\"", 1); + aftsQueryWithCount("=ASPECT:\"test:testSuperAspect\" AND =test:orderLong:\""+longValue+"\"", 1); + + long intValue = -45764576 + (8576457 * 6); + + aftsQueryWithCount("=TYPE:\"cm:folder\" AND =ASPECT:\"test:testSuperAspect\" AND =test:orderInt:\"-45764576\"", 1); + aftsQueryWithCount("=ASPECT:\"test:testSuperAspect\" AND =test:orderInt:\""+intValue+"\"", 1); + + String stringValue = new String(new char[] { (char) ('a' + 6) }) + " cabbage"; + + aftsQueryWithCount("=TYPE:\"cm:folder\" AND =ASPECT:\"test:testSuperAspect\" AND =test:orderText:\"a cabbage\"", 1); + aftsQueryWithCount("=ASPECT:\"test:testSuperAspect\" AND =test:orderText:\""+stringValue+"\"", 1); + + stringValue = new String(new char[] { (char) ('a' + 6) }) + " banana"; + + aftsQueryWithCount("=TYPE:\"cm:folder\" AND =ASPECT:\"test:testSuperAspect\" AND =test:orderMLText:\"a banana\"", 1); + aftsQueryWithCount("=ASPECT:\"test:testSuperAspect\" AND =test:orderMLText:\""+stringValue+"\"", 1); + + stringValue = new String(new char[] { (char) ('Z' - 6) }) + " banane"; + + aftsQueryWithCount("=TYPE:\"cm:folder\" AND =ASPECT:\"test:testSuperAspect\" AND =test:orderMLText:\"Z banane\"", 1); + aftsQueryWithCount("=ASPECT:\"test:testSuperAspect\" AND =test:orderMLText:\""+stringValue+"\"", 1); + + stringValue = new String(new char[] { (char) ('香' + 6) }) + " 香蕉"; + + aftsQueryWithCount("=TYPE:\"cm:folder\" AND =ASPECT:\"test:testSuperAspect\" AND =test:orderMLText:\"香 香蕉\"", 1); + aftsQueryWithCount("=ASPECT:\"test:testSuperAspect\" AND =test:orderMLText:\""+stringValue+"\"", 1); + + } + + + public void aftsQueryWithCount(String query, int count) + { + queryWithCount(SearchService.LANGUAGE_FTS_ALFRESCO, query, count, null, null); + } + + public void aftsQueryWithCount(String query, int count, QName property, Boolean ascending) + { + queryWithCount(SearchService.LANGUAGE_FTS_ALFRESCO, query, count, property, ascending); + } + + public void queryWithCount(String ql, String query, int count, QName property, Boolean ascending) + { + SearchParameters sp = new SearchParameters(); + sp.setLanguage(ql); + sp.setQueryConsistency(QueryConsistency.TRANSACTIONAL); + sp.setQuery(query); + sp.addStore(rootNodeRef.getStoreRef()); + ResultSet results = serviceRegistry.getSearchService().query(sp); + HashSet found = new HashSet(); + Comparable last = null; + for(ResultSetRow row :results) + { + assertFalse(found.contains( row.getNodeRef())); + found.add(row.getNodeRef()); + if(property != null) + { + Comparable current = (Comparable)nodeService.getProperty(row.getNodeRef(), property); + if(last != null) + { + if((ascending == null) || (ascending)) + { + assert(last.compareTo(current) >= 0); + } + else + { + assert(last.compareTo(current) <= 0); + } + + } + last = current; + } + } + assertEquals(count, results.length()); + results.getResultSetMetaData(); + results.close(); + } +} diff --git a/source/java/org/alfresco/repo/security/SecurityTestSuite.java b/source/test-java/org/alfresco/repo/security/SecurityTestSuite.java similarity index 100% rename from source/java/org/alfresco/repo/security/SecurityTestSuite.java rename to source/test-java/org/alfresco/repo/security/SecurityTestSuite.java diff --git a/source/java/org/alfresco/repo/security/authentication/AuthenticationBootstrapTest.java b/source/test-java/org/alfresco/repo/security/authentication/AuthenticationBootstrapTest.java similarity index 100% rename from source/java/org/alfresco/repo/security/authentication/AuthenticationBootstrapTest.java rename to source/test-java/org/alfresco/repo/security/authentication/AuthenticationBootstrapTest.java diff --git a/source/java/org/alfresco/repo/security/authentication/AuthenticationTest.java b/source/test-java/org/alfresco/repo/security/authentication/AuthenticationTest.java similarity index 100% rename from source/java/org/alfresco/repo/security/authentication/AuthenticationTest.java rename to source/test-java/org/alfresco/repo/security/authentication/AuthenticationTest.java diff --git a/source/java/org/alfresco/repo/security/authentication/AuthorizationTest.java b/source/test-java/org/alfresco/repo/security/authentication/AuthorizationTest.java similarity index 100% rename from source/java/org/alfresco/repo/security/authentication/AuthorizationTest.java rename to source/test-java/org/alfresco/repo/security/authentication/AuthorizationTest.java diff --git a/source/java/org/alfresco/repo/security/authentication/ChainingAuthenticationServiceTest.java b/source/test-java/org/alfresco/repo/security/authentication/ChainingAuthenticationServiceTest.java similarity index 100% rename from source/java/org/alfresco/repo/security/authentication/ChainingAuthenticationServiceTest.java rename to source/test-java/org/alfresco/repo/security/authentication/ChainingAuthenticationServiceTest.java diff --git a/source/java/org/alfresco/repo/security/authentication/NameBasedUserNameGeneratorTest.java b/source/test-java/org/alfresco/repo/security/authentication/NameBasedUserNameGeneratorTest.java similarity index 100% rename from source/java/org/alfresco/repo/security/authentication/NameBasedUserNameGeneratorTest.java rename to source/test-java/org/alfresco/repo/security/authentication/NameBasedUserNameGeneratorTest.java diff --git a/source/java/org/alfresco/repo/security/authentication/TestAuthenticationServiceImpl.java b/source/test-java/org/alfresco/repo/security/authentication/TestAuthenticationServiceImpl.java similarity index 100% rename from source/java/org/alfresco/repo/security/authentication/TestAuthenticationServiceImpl.java rename to source/test-java/org/alfresco/repo/security/authentication/TestAuthenticationServiceImpl.java diff --git a/source/java/org/alfresco/repo/security/authority/AuthorityServiceTest.java b/source/test-java/org/alfresco/repo/security/authority/AuthorityServiceTest.java similarity index 96% rename from source/java/org/alfresco/repo/security/authority/AuthorityServiceTest.java rename to source/test-java/org/alfresco/repo/security/authority/AuthorityServiceTest.java index 43e11b5b3c8..b23ee87f585 100644 --- a/source/java/org/alfresco/repo/security/authority/AuthorityServiceTest.java +++ b/source/test-java/org/alfresco/repo/security/authority/AuthorityServiceTest.java @@ -1293,6 +1293,39 @@ public void testGetAuthoritiesFilteringSorting() assertSameOrder(result, Arrays.asList(G1, G3, G4, G2)); } + public void testAuthorityCounts() + { + long userCount = pubAuthorityService.countUsers(); + assertTrue("User count must be positive value", userCount > 0); + + long groupCount = pubAuthorityService.countGroups(); + assertTrue("Group count must be positive value", groupCount > 0); + } + + public void testIncrementAuthorityCounts() + { + long usersCountBefore = pubAuthorityService.countUsers(); + long groupCountBefore = pubAuthorityService.countGroups(); + + // Add a user and check that the count increases + String user = "userTest_" + System.currentTimeMillis(); + + Map props = new HashMap(4, 1.0f); + props.put(ContentModel.PROP_USERNAME, user); + props.put(ContentModel.PROP_FIRSTNAME, user); + props.put(ContentModel.PROP_LASTNAME, user); + props.put(ContentModel.PROP_EMAIL, user + "@gmail.com"); + + personService.createPerson(props); + long usersCountAfter = pubAuthorityService.countUsers(); + assertEquals("Count of users must increment", (usersCountBefore+1), usersCountAfter); + + // Create new Group using Authentication Service and check that the count increases + pubAuthorityService.createAuthority(AuthorityType.GROUP, "authority_test_" + System.currentTimeMillis()); + long groupCountAfter = pubAuthorityService.countGroups(); + assertEquals("Count of groups must increment", (groupCountBefore+1), groupCountAfter); + } + private void assertContains(List results, List checklist, boolean included) { for (String check : checklist) diff --git a/source/java/org/alfresco/repo/security/authority/DuplicateAuthorityTest.java b/source/test-java/org/alfresco/repo/security/authority/DuplicateAuthorityTest.java similarity index 100% rename from source/java/org/alfresco/repo/security/authority/DuplicateAuthorityTest.java rename to source/test-java/org/alfresco/repo/security/authority/DuplicateAuthorityTest.java diff --git a/source/java/org/alfresco/repo/security/authority/ExtendedPermissionServiceTest.java b/source/test-java/org/alfresco/repo/security/authority/ExtendedPermissionServiceTest.java similarity index 100% rename from source/java/org/alfresco/repo/security/authority/ExtendedPermissionServiceTest.java rename to source/test-java/org/alfresco/repo/security/authority/ExtendedPermissionServiceTest.java diff --git a/source/java/org/alfresco/repo/security/authority/script/ScriptAuthorityServiceTest.java b/source/test-java/org/alfresco/repo/security/authority/script/ScriptAuthorityServiceTest.java similarity index 100% rename from source/java/org/alfresco/repo/security/authority/script/ScriptAuthorityServiceTest.java rename to source/test-java/org/alfresco/repo/security/authority/script/ScriptAuthorityServiceTest.java diff --git a/source/java/org/alfresco/repo/security/authority/script/ScriptAuthorityService_RegExTest.java b/source/test-java/org/alfresco/repo/security/authority/script/ScriptAuthorityService_RegExTest.java similarity index 100% rename from source/java/org/alfresco/repo/security/authority/script/ScriptAuthorityService_RegExTest.java rename to source/test-java/org/alfresco/repo/security/authority/script/ScriptAuthorityService_RegExTest.java diff --git a/source/java/org/alfresco/repo/security/permissions/PermissionCheckCollectionTest.java b/source/test-java/org/alfresco/repo/security/permissions/PermissionCheckCollectionTest.java similarity index 100% rename from source/java/org/alfresco/repo/security/permissions/PermissionCheckCollectionTest.java rename to source/test-java/org/alfresco/repo/security/permissions/PermissionCheckCollectionTest.java diff --git a/source/java/org/alfresco/repo/security/permissions/PermissionCheckedCollectionTest.java b/source/test-java/org/alfresco/repo/security/permissions/PermissionCheckedCollectionTest.java similarity index 100% rename from source/java/org/alfresco/repo/security/permissions/PermissionCheckedCollectionTest.java rename to source/test-java/org/alfresco/repo/security/permissions/PermissionCheckedCollectionTest.java diff --git a/source/java/org/alfresco/repo/security/permissions/dynamic/LockOwnerDynamicAuthorityTest.java b/source/test-java/org/alfresco/repo/security/permissions/dynamic/LockOwnerDynamicAuthorityTest.java similarity index 100% rename from source/java/org/alfresco/repo/security/permissions/dynamic/LockOwnerDynamicAuthorityTest.java rename to source/test-java/org/alfresco/repo/security/permissions/dynamic/LockOwnerDynamicAuthorityTest.java diff --git a/source/java/org/alfresco/repo/security/permissions/impl/AbstractPermissionTest.java b/source/test-java/org/alfresco/repo/security/permissions/impl/AbstractPermissionTest.java similarity index 100% rename from source/java/org/alfresco/repo/security/permissions/impl/AbstractPermissionTest.java rename to source/test-java/org/alfresco/repo/security/permissions/impl/AbstractPermissionTest.java diff --git a/source/java/org/alfresco/repo/security/permissions/impl/AbstractReadPermissionTest.java b/source/test-java/org/alfresco/repo/security/permissions/impl/AbstractReadPermissionTest.java similarity index 100% rename from source/java/org/alfresco/repo/security/permissions/impl/AbstractReadPermissionTest.java rename to source/test-java/org/alfresco/repo/security/permissions/impl/AbstractReadPermissionTest.java diff --git a/source/java/org/alfresco/repo/security/permissions/impl/AclDaoComponentTest.java b/source/test-java/org/alfresco/repo/security/permissions/impl/AclDaoComponentTest.java similarity index 100% rename from source/java/org/alfresco/repo/security/permissions/impl/AclDaoComponentTest.java rename to source/test-java/org/alfresco/repo/security/permissions/impl/AclDaoComponentTest.java diff --git a/source/java/org/alfresco/repo/security/permissions/impl/PermissionServiceTest.java b/source/test-java/org/alfresco/repo/security/permissions/impl/PermissionServiceTest.java similarity index 100% rename from source/java/org/alfresco/repo/security/permissions/impl/PermissionServiceTest.java rename to source/test-java/org/alfresco/repo/security/permissions/impl/PermissionServiceTest.java diff --git a/source/java/org/alfresco/repo/security/permissions/impl/ReadPermissionTest.java b/source/test-java/org/alfresco/repo/security/permissions/impl/ReadPermissionTest.java similarity index 100% rename from source/java/org/alfresco/repo/security/permissions/impl/ReadPermissionTest.java rename to source/test-java/org/alfresco/repo/security/permissions/impl/ReadPermissionTest.java diff --git a/source/java/org/alfresco/repo/security/permissions/impl/acegi/ACLEntryAfterInvocationTest.java b/source/test-java/org/alfresco/repo/security/permissions/impl/acegi/ACLEntryAfterInvocationTest.java similarity index 100% rename from source/java/org/alfresco/repo/security/permissions/impl/acegi/ACLEntryAfterInvocationTest.java rename to source/test-java/org/alfresco/repo/security/permissions/impl/acegi/ACLEntryAfterInvocationTest.java diff --git a/source/java/org/alfresco/repo/security/permissions/impl/acegi/ACLEntryVoterTest.java b/source/test-java/org/alfresco/repo/security/permissions/impl/acegi/ACLEntryVoterTest.java similarity index 100% rename from source/java/org/alfresco/repo/security/permissions/impl/acegi/ACLEntryVoterTest.java rename to source/test-java/org/alfresco/repo/security/permissions/impl/acegi/ACLEntryVoterTest.java diff --git a/source/java/org/alfresco/repo/security/permissions/impl/acegi/FilteringResultSetTest.java b/source/test-java/org/alfresco/repo/security/permissions/impl/acegi/FilteringResultSetTest.java similarity index 100% rename from source/java/org/alfresco/repo/security/permissions/impl/acegi/FilteringResultSetTest.java rename to source/test-java/org/alfresco/repo/security/permissions/impl/acegi/FilteringResultSetTest.java diff --git a/source/java/org/alfresco/repo/security/permissions/impl/model/PermissionModelTest.java b/source/test-java/org/alfresco/repo/security/permissions/impl/model/PermissionModelTest.java similarity index 100% rename from source/java/org/alfresco/repo/security/permissions/impl/model/PermissionModelTest.java rename to source/test-java/org/alfresco/repo/security/permissions/impl/model/PermissionModelTest.java diff --git a/source/java/org/alfresco/repo/security/person/HomeFolderProviderSynchronizerTest.java b/source/test-java/org/alfresco/repo/security/person/HomeFolderProviderSynchronizerTest.java similarity index 100% rename from source/java/org/alfresco/repo/security/person/HomeFolderProviderSynchronizerTest.java rename to source/test-java/org/alfresco/repo/security/person/HomeFolderProviderSynchronizerTest.java diff --git a/source/java/org/alfresco/repo/security/person/PersonTest.java b/source/test-java/org/alfresco/repo/security/person/PersonTest.java similarity index 91% rename from source/java/org/alfresco/repo/security/person/PersonTest.java rename to source/test-java/org/alfresco/repo/security/person/PersonTest.java index 23a5c81e351..70dfd7d322e 100644 --- a/source/java/org/alfresco/repo/security/person/PersonTest.java +++ b/source/test-java/org/alfresco/repo/security/person/PersonTest.java @@ -128,6 +128,16 @@ public void setUp() throws Exception protected void tearDown() throws Exception { userNameMatcher.setUserNamesAreCaseSensitive(false); // Put back the default + + /* + * The default value for the CreateMissingPeople is true (see + * "server.transaction.allow-writes"). So if the last executed test in + * this class changes the value to false, and this class is executed + * within the same context as other security classes (e.g. SecurityTestSuite), + * any test that follows and rely on the default + * value will fail. E.g. OwnableServiceTest.testCMObject(). + */ + personService.setCreateMissingPeople(true); // Put back the default if (testTX != null) { try { testTX.rollback(); } catch (Throwable e) {} @@ -1587,5 +1597,75 @@ public Void execute() throws Throwable return null; } }, false, true); - } + } + + // Test case for MNT-8539 + // note: This test can be removed as and when we remove the deprecated "getPeople" impl. + // also, the test currently works with Lucene only. In other words, it won't work with Solr. + public void testPeopleFiltering_deprecatedFTS() + { + personService.setCreateMissingPeople(false); + assertEquals(2, getPeopleCount()); + + checkPeopleContain(AuthenticationUtil.getAdminUserName()); + checkPeopleContain(AuthenticationUtil.getGuestUserName()); + + String suffix = Long.toString(System.currentTimeMillis()); + String jjFirstname = "john junior"+suffix; + String jjLastname = "lewis second"+suffix; + + personService.createPerson(createDefaultProperties("janedoe", "jane", "doe"+suffix, "johndoe@yz", "alfresco", rootNodeRef)); + personService.createPerson(createDefaultProperties("janemoe", "jane", "moe"+suffix, "janemoe@yz", "alfresco", rootNodeRef)); + personService.createPerson(createDefaultProperties("jjlewis", jjFirstname, jjLastname, "jjlewis@yzd", "alfresco", rootNodeRef)); + personService.createPerson(createDefaultProperties("jlewis", "john", jjLastname, "jlewis@yzd", "alfresco", rootNodeRef)); + + assertEquals(6, getPeopleCount()); + + PagingRequest pr = new PagingRequest(100, null); + List> filters = new ArrayList>(3); + + filters.clear(); + // Set username, firstname and lastname same as + // "org.alfresco.web.ui.common.Utils.generatePersonFilter(String term)" method + String searchTerm = "jane doe"+suffix; + filters.add(new Pair(ContentModel.PROP_USERNAME, searchTerm)); + filters.add(new Pair(ContentModel.PROP_FIRSTNAME, searchTerm)); + filters.add(new Pair(ContentModel.PROP_LASTNAME, searchTerm)); + List result = personService.getPeople(filters, true, null, pr).getPage(); + assertEquals(1, result.size()); + assertEquals("jane", result.get(0).getFirstName()); + assertEquals("doe"+suffix, result.get(0).getLastName()); + + // test two parts firstname + filters.clear(); + searchTerm = jjFirstname; + filters.add(new Pair(ContentModel.PROP_USERNAME, searchTerm)); + filters.add(new Pair(ContentModel.PROP_FIRSTNAME, searchTerm)); + filters.add(new Pair(ContentModel.PROP_LASTNAME, searchTerm)); + result = personService.getPeople(filters, true, null, pr).getPage(); + assertEquals(1, result.size()); + assertEquals(jjFirstname, result.get(0).getFirstName()); + assertEquals(jjLastname, result.get(0).getLastName()); + + // test two parts lastname + filters.clear(); + searchTerm = "john " + jjLastname; + filters.add(new Pair(ContentModel.PROP_USERNAME, searchTerm)); + filters.add(new Pair(ContentModel.PROP_FIRSTNAME, searchTerm)); + filters.add(new Pair(ContentModel.PROP_LASTNAME, searchTerm)); + result = personService.getPeople(filters, true, null, pr).getPage(); + assertEquals(2, result.size()); + + // test two parts firstname and lastname + filters.clear(); + searchTerm = jjFirstname + " " + jjLastname; + filters.add(new Pair(ContentModel.PROP_USERNAME, searchTerm)); + filters.add(new Pair(ContentModel.PROP_FIRSTNAME, searchTerm)); + filters.add(new Pair(ContentModel.PROP_LASTNAME, searchTerm)); + result = personService.getPeople(filters, true, null, pr).getPage(); + assertEquals(1, result.size()); + assertEquals(jjFirstname, result.get(0).getFirstName()); + assertEquals(jjLastname, result.get(0).getLastName()); + } + } diff --git a/source/java/org/alfresco/repo/security/person/TestGroupManager.java b/source/test-java/org/alfresco/repo/security/person/TestGroupManager.java similarity index 100% rename from source/java/org/alfresco/repo/security/person/TestGroupManager.java rename to source/test-java/org/alfresco/repo/security/person/TestGroupManager.java diff --git a/source/java/org/alfresco/repo/security/person/TestPersonManager.java b/source/test-java/org/alfresco/repo/security/person/TestPersonManager.java similarity index 100% rename from source/java/org/alfresco/repo/security/person/TestPersonManager.java rename to source/test-java/org/alfresco/repo/security/person/TestPersonManager.java diff --git a/source/java/org/alfresco/repo/security/sync/ChainingUserRegistrySynchronizerTest.java b/source/test-java/org/alfresco/repo/security/sync/ChainingUserRegistrySynchronizerTest.java similarity index 84% rename from source/java/org/alfresco/repo/security/sync/ChainingUserRegistrySynchronizerTest.java rename to source/test-java/org/alfresco/repo/security/sync/ChainingUserRegistrySynchronizerTest.java index 815a48b97ef..dbefa639b90 100644 --- a/source/java/org/alfresco/repo/security/sync/ChainingUserRegistrySynchronizerTest.java +++ b/source/test-java/org/alfresco/repo/security/sync/ChainingUserRegistrySynchronizerTest.java @@ -36,9 +36,12 @@ import junit.framework.TestCase; +import org.alfresco.error.AlfrescoRuntimeException; import org.alfresco.model.ContentModel; +import org.alfresco.repo.management.subsystems.ActivateableBean; import org.alfresco.repo.management.subsystems.ChildApplicationContextManager; import org.alfresco.repo.security.authentication.AuthenticationContext; +import org.alfresco.repo.security.authentication.AuthenticationException; import org.alfresco.repo.security.authentication.AuthenticationUtil; import org.alfresco.repo.security.authentication.AuthenticationUtil.RunAsWork; import org.alfresco.repo.security.person.PersonServiceImpl; @@ -557,7 +560,133 @@ public void testVolume() throws Exception this.synchronizer.synchronize(true, true, true); tearDownTestUsersAndGroups(); } - + + /** + * + */ + public void testTestSynchronize() throws Exception + { + String TEST_REGISTRY_NAME = "Z0"; + String TEST_REGISTRY_NAME_BAD = "XX"; + List persons = new ArrayList(new RandomPersonCollection(100)); + List groups = new ArrayList(new RandomGroupCollection(50, persons)); + MockUserRegistry testRegistry = new MockUserRegistry(TEST_REGISTRY_NAME, persons, groups); + this.applicationContextManager.setUserRegistries(testRegistry); + Collection instances = this.applicationContextManager.getInstanceIds(); + try + { + // pre-conditions + assertTrue("pre-condition test registry isActive", testRegistry.isActive()); + assertTrue("pre-condition test registry in application context", instances.contains(TEST_REGISTRY_NAME)); + assertFalse("pre-condition test registry isActive", instances.contains(TEST_REGISTRY_NAME_BAD)); + + if(synchronizer instanceof ChainingUserRegistrySynchronizer) + { + /** + * positive test using mocked user registry + */ + ChainingUserRegistrySynchronizer chainingSynchronizer = (ChainingUserRegistrySynchronizer)synchronizer; + SynchronizeDiagnostic diagnostic = chainingSynchronizer.testSynchronize(TEST_REGISTRY_NAME); + assertTrue("diagnostic is active", diagnostic.isActive()); + assertNotNull("diagnostic users are null", diagnostic.getUsers()); + assertNotNull("diagnostic groups are null", diagnostic.getGroups()); + + /** + * test with active flag set to false + */ + testRegistry.setActive(false); + diagnostic = chainingSynchronizer.testSynchronize(TEST_REGISTRY_NAME); + assertFalse("diagnostic is still active", diagnostic.isActive()); + assertNotNull("diagnostic users are null", diagnostic.getUsers()); + assertNotNull("diagnostic groups are null", diagnostic.getGroups()); + + /** + * negative test - invalid user registry + */ + try + { + chainingSynchronizer.testSynchronize(TEST_REGISTRY_NAME_BAD); + fail("bad user registry not detected"); + } + catch (AuthenticationException ae) + { + // expect to go here on invalid authenticator + } + } + else + { + fail("test not run - synchroniser is not a ChainingUserRegistrySynchronizer"); + } + } + finally + { + tearDownTestUsersAndGroups(); + } + } + + public void testSyncStatus() throws Exception + { + Date testStart = new Date(); + + try + { + List persons = new ArrayList(new RandomPersonCollection(3)); + List groups = new ArrayList(new RandomGroupCollection(4, persons)); + MockUserRegistry testRegistry = new MockUserRegistry("Z0", persons, groups); + this.applicationContextManager.setUserRegistries(testRegistry); + this.synchronizer.synchronize(true, true, true); + + if(this.synchronizer instanceof ChainingUserRegistrySynchronizerStatus) + { + ChainingUserRegistrySynchronizerStatus status = (ChainingUserRegistrySynchronizerStatus)this.synchronizer; + // Header Status + assertTrue("end time not updated", status.getSyncEndTime().after(testStart)); + assertTrue("start time not updated", status.getSyncStartTime().after(testStart)); + assertEquals("sync status is not complete", "COMPLETE", status.getSynchronizationStatus()); + assertNotNull("last run on server is null", status.getLastRunOnServer()); + assertNull(status.getLastErrorMessage()); + + // Authenticator status + assertEquals("sync status is not complete", "COMPLETE", status.getSynchronizationStatus("Z0")); + //assertNull(status.getSynchronizationLastError("Z0")); + } + else + { + fail("test not run"); + } + + /** + * Negative test - make an user registry throw an exception + */ + testRegistry.setThrowError(true); + testStart = new Date(); + try + { + this.synchronizer.synchronize(true, true, true); + fail("error not thrown"); + } + catch (AlfrescoRuntimeException e) + { + // expect to go here + ChainingUserRegistrySynchronizerStatus status = (ChainingUserRegistrySynchronizerStatus)this.synchronizer; + // Header Status + assertTrue("end time not updated", status.getSyncEndTime().after(testStart)); + assertTrue("start time not updated", status.getSyncStartTime().after(testStart)); + assertEquals("sync status is not complete", "COMPLETE_ERROR", status.getSynchronizationStatus()); + assertNotNull("last run on server is null", status.getLastRunOnServer()); + assertNotNull(status.getLastErrorMessage()); + + // Authenticator status + assertEquals("sync status is not complete", "COMPLETE_ERROR", status.getSynchronizationStatus("Z0")); + assertNotNull(status.getSynchronizationLastError("Z0")); + } + } + finally + { + tearDownTestUsersAndGroups(); + } + } + /** * Tests synchronization of group associations in a zone with a larger volume of authorities. * @@ -788,8 +917,11 @@ private String longName(String shortName) /** * A Mock {@link UserRegistry} that returns a fixed set of users and groups. */ - public static class MockUserRegistry implements UserRegistry + public static class MockUserRegistry implements UserRegistry, ActivateableBean { + private boolean isActive = true; + + private boolean throwError = false; /** The zone id. */ private String zoneId; @@ -816,6 +948,8 @@ public MockUserRegistry(String zoneId, Collection persons, Coll this.persons = persons; this.groups = groups; } + + /** * Modifies the state to match the arguments. Compares new with old and records new modification dates only for @@ -886,6 +1020,15 @@ else if (!oldNode.getProperties().equals(newNode.getProperties()) oldNodes.addAll(nodeMap.values()); } + /** + * + * @param throwError + */ + public void setThrowError(boolean throwError) + { + this.throwError = throwError; + } + /** * Instantiates a new mock user registry. * @@ -945,6 +1088,10 @@ public Collection getPersonNames() */ public Collection getGroups(Date modifiedSince) { + if(throwError) + { + throw new AlfrescoRuntimeException("test error"); + } return filterNodeDescriptions(this.groups, modifiedSince); } @@ -998,6 +1145,17 @@ public Set getPersonMappedProperties() ContentModel.PROP_HOME_FOLDER_PROVIDER })); } + + @Override + public boolean isActive() + { + return isActive; + } + + public void setActive(boolean isActive) + { + this.isActive = isActive; + } } /** diff --git a/source/java/org/alfresco/repo/service/StoreRedirectorProxyFactoryTest.java b/source/test-java/org/alfresco/repo/service/StoreRedirectorProxyFactoryTest.java similarity index 100% rename from source/java/org/alfresco/repo/service/StoreRedirectorProxyFactoryTest.java rename to source/test-java/org/alfresco/repo/service/StoreRedirectorProxyFactoryTest.java diff --git a/source/java/org/alfresco/repo/site/RoleComparatorImplTest.java b/source/test-java/org/alfresco/repo/site/RoleComparatorImplTest.java similarity index 100% rename from source/java/org/alfresco/repo/site/RoleComparatorImplTest.java rename to source/test-java/org/alfresco/repo/site/RoleComparatorImplTest.java diff --git a/source/java/org/alfresco/repo/site/SiteServiceImplMoreTest.java b/source/test-java/org/alfresco/repo/site/SiteServiceImplMoreTest.java similarity index 100% rename from source/java/org/alfresco/repo/site/SiteServiceImplMoreTest.java rename to source/test-java/org/alfresco/repo/site/SiteServiceImplMoreTest.java diff --git a/source/java/org/alfresco/repo/site/SiteServiceImplTest.java b/source/test-java/org/alfresco/repo/site/SiteServiceImplTest.java similarity index 100% rename from source/java/org/alfresco/repo/site/SiteServiceImplTest.java rename to source/test-java/org/alfresco/repo/site/SiteServiceImplTest.java diff --git a/source/java/org/alfresco/repo/site/SiteServiceTestHuge.java b/source/test-java/org/alfresco/repo/site/SiteServiceTestHuge.java similarity index 100% rename from source/java/org/alfresco/repo/site/SiteServiceTestHuge.java rename to source/test-java/org/alfresco/repo/site/SiteServiceTestHuge.java diff --git a/source/java/org/alfresco/repo/solr/SOLRTrackingComponentTest.java b/source/test-java/org/alfresco/repo/solr/SOLRTrackingComponentTest.java similarity index 100% rename from source/java/org/alfresco/repo/solr/SOLRTrackingComponentTest.java rename to source/test-java/org/alfresco/repo/solr/SOLRTrackingComponentTest.java diff --git a/source/java/org/alfresco/repo/subscriptions/SubscriptionServiceActivitiesTest.java b/source/test-java/org/alfresco/repo/subscriptions/SubscriptionServiceActivitiesTest.java similarity index 95% rename from source/java/org/alfresco/repo/subscriptions/SubscriptionServiceActivitiesTest.java rename to source/test-java/org/alfresco/repo/subscriptions/SubscriptionServiceActivitiesTest.java index af962e8c65c..88c1b1ba0ab 100644 --- a/source/java/org/alfresco/repo/subscriptions/SubscriptionServiceActivitiesTest.java +++ b/source/test-java/org/alfresco/repo/subscriptions/SubscriptionServiceActivitiesTest.java @@ -209,19 +209,19 @@ public Object doWork() throws Exception createSite(userId1+"mod2", SiteVisibility.MODERATED); siteService.setMembership(userId1+"mod2", userId1, SiteModel.SITE_MANAGER); - List feed = activityService.getUserFeedEntries(userId1, "json", null, false, false, null, null); + List feed = activityService.getUserFeedEntries(userId1, null, false, false, null, null); assertEquals(feed.toString(), 0, feed.size()); - feed = activityService.getUserFeedEntries(userId2, "json", null, false, false, null, null); + feed = activityService.getUserFeedEntries(userId2, null, false, false, null, null); assertEquals(feed.toString(), 0, feed.size()); // userId1 + 5, userId2 + 0 generateFeed(); - feed = activityService.getUserFeedEntries(userId1, "json", null, false, false, null, null); + feed = activityService.getUserFeedEntries(userId1, null, false, false, null, null); assertEquals(feed.toString(), 5, feed.size()); - feed = activityService.getUserFeedEntries(userId2, "json", null, false, false, null, null); + feed = activityService.getUserFeedEntries(userId2, null, false, false, null, null); assertEquals(feed.toString(), 0, feed.size()); return null; @@ -256,10 +256,10 @@ public Object doWork() throws Exception // userId1 + 5, userId2 + 2 generateFeed(); - List feed = activityService.getUserFeedEntries(userId1, "json", null, false, false, null, null); + List feed = activityService.getUserFeedEntries(userId1, null, false, false, null, null); assertEquals(feed.toString(), 7, feed.size()); - feed = activityService.getUserFeedEntries(userId2, "json", null, false, false, null, null); + feed = activityService.getUserFeedEntries(userId2, null, false, false, null, null); assertEquals(feed.toString(), 2, feed.size()); return null; } @@ -287,11 +287,11 @@ public Object doWork() throws Exception // userId1 + 5, userId2 + 1 generateFeed(); - List feed = activityService.getUserFeedEntries(userId1, "json", null, false, false, null, null); + List feed = activityService.getUserFeedEntries(userId1, null, false, false, null, null); assertEquals(feed.toString(), 12, feed.size()); // note: userId2 should not see activities from followers in moderated sites that they do not belong do (ALF-16460) - feed = activityService.getUserFeedEntries(userId2, "json", null, false, false, null, null); + feed = activityService.getUserFeedEntries(userId2, null, false, false, null, null); assertEquals(feed.toString(), 3, feed.size()); siteService.setMembership(userId1+"priv2", userId2, SiteModel.SITE_CONSUMER); @@ -300,11 +300,11 @@ public Object doWork() throws Exception // userId1 + 2, userId2 + 2 generateFeed(); - feed = activityService.getUserFeedEntries(userId1, "json", null, false, false, null, null); + feed = activityService.getUserFeedEntries(userId1, null, false, false, null, null); assertEquals(feed.toString(), 14, feed.size()); // note: userId2 should not see activities from followers in moderated sites that they do not belong do (ALF-16460) - feed = activityService.getUserFeedEntries(userId2, "json", null, false, false, null, null); + feed = activityService.getUserFeedEntries(userId2, null, false, false, null, null); assertEquals(feed.toString(), 5, feed.size()); return null; @@ -334,11 +334,11 @@ public Object doWork() throws Exception // userId1 + 5, userId2 + 3 generateFeed(); - List feed = activityService.getUserFeedEntries(userId1, "json", null, false, false, null, null); + List feed = activityService.getUserFeedEntries(userId1, null, false, false, null, null); assertEquals(feed.toString(), 19, feed.size()); // note: userId2 should not see activities from followers in moderated sites that they do not belong do (ALF-16460) - feed = activityService.getUserFeedEntries(userId2, "json", null, false, false, null, null); + feed = activityService.getUserFeedEntries(userId2, null, false, false, null, null); assertEquals(feed.toString(), 8, feed.size()); deleteSite(userId1+"pub"); @@ -347,19 +347,19 @@ public Object doWork() throws Exception deleteSite(userId1+"mod1"); deleteSite(userId1+"mod2"); - feed = activityService.getUserFeedEntries(userId1, "json", null, false, false, null, null); + feed = activityService.getUserFeedEntries(userId1, null, false, false, null, null); assertEquals(feed.toString(), 2, feed.size()); - feed = activityService.getUserFeedEntries(userId2, "json", null, false, false, null, null); + feed = activityService.getUserFeedEntries(userId2, null, false, false, null, null); assertEquals(feed.toString(), 2, feed.size()); deletePerson(userId1); deletePerson(userId2); - feed = activityService.getUserFeedEntries(userId1, "json", null, false, false, null, null); + feed = activityService.getUserFeedEntries(userId1, null, false, false, null, null); assertEquals(feed.toString(), 0, feed.size()); - feed = activityService.getUserFeedEntries(userId2, "json", null, false, false, null, null); + feed = activityService.getUserFeedEntries(userId2, null, false, false, null, null); assertEquals(feed.toString(), 0, feed.size()); return null; diff --git a/source/java/org/alfresco/repo/subscriptions/SubscriptionServiceImplTest.java b/source/test-java/org/alfresco/repo/subscriptions/SubscriptionServiceImplTest.java similarity index 100% rename from source/java/org/alfresco/repo/subscriptions/SubscriptionServiceImplTest.java rename to source/test-java/org/alfresco/repo/subscriptions/SubscriptionServiceImplTest.java diff --git a/source/java/org/alfresco/repo/tagging/TaggingServiceImplTest.java b/source/test-java/org/alfresco/repo/tagging/TaggingServiceImplTest.java similarity index 100% rename from source/java/org/alfresco/repo/tagging/TaggingServiceImplTest.java rename to source/test-java/org/alfresco/repo/tagging/TaggingServiceImplTest.java diff --git a/source/java/org/alfresco/repo/template/AVMTemplateNodeTest.java b/source/test-java/org/alfresco/repo/template/AVMTemplateNodeTest.java similarity index 100% rename from source/java/org/alfresco/repo/template/AVMTemplateNodeTest.java rename to source/test-java/org/alfresco/repo/template/AVMTemplateNodeTest.java diff --git a/source/java/org/alfresco/repo/template/TemplateServiceImplTest.java b/source/test-java/org/alfresco/repo/template/TemplateServiceImplTest.java similarity index 100% rename from source/java/org/alfresco/repo/template/TemplateServiceImplTest.java rename to source/test-java/org/alfresco/repo/template/TemplateServiceImplTest.java diff --git a/source/java/org/alfresco/repo/template/XSLTProcessorTest.java b/source/test-java/org/alfresco/repo/template/XSLTProcessorTest.java similarity index 100% rename from source/java/org/alfresco/repo/template/XSLTProcessorTest.java rename to source/test-java/org/alfresco/repo/template/XSLTProcessorTest.java diff --git a/source/java/org/alfresco/repo/tenant/MultiTDemoTest.java b/source/test-java/org/alfresco/repo/tenant/MultiTDemoTest.java similarity index 100% rename from source/java/org/alfresco/repo/tenant/MultiTDemoTest.java rename to source/test-java/org/alfresco/repo/tenant/MultiTDemoTest.java diff --git a/source/java/org/alfresco/repo/tenant/MultiTNodeServiceInterceptorTest.java b/source/test-java/org/alfresco/repo/tenant/MultiTNodeServiceInterceptorTest.java similarity index 100% rename from source/java/org/alfresco/repo/tenant/MultiTNodeServiceInterceptorTest.java rename to source/test-java/org/alfresco/repo/tenant/MultiTNodeServiceInterceptorTest.java diff --git a/source/java/org/alfresco/repo/thumbnail/ThumbnailServiceImplParameterTest.java b/source/test-java/org/alfresco/repo/thumbnail/ThumbnailServiceImplParameterTest.java similarity index 85% rename from source/java/org/alfresco/repo/thumbnail/ThumbnailServiceImplParameterTest.java rename to source/test-java/org/alfresco/repo/thumbnail/ThumbnailServiceImplParameterTest.java index 33caa8d4824..a8e5746eb4c 100644 --- a/source/java/org/alfresco/repo/thumbnail/ThumbnailServiceImplParameterTest.java +++ b/source/test-java/org/alfresco/repo/thumbnail/ThumbnailServiceImplParameterTest.java @@ -38,6 +38,9 @@ import org.alfresco.repo.rendition.RenditionServiceImpl; import org.alfresco.repo.rendition.executer.AbstractRenderingEngine; import org.alfresco.repo.rendition.executer.ImageRenderingEngine; +import org.alfresco.repo.transaction.RetryingTransactionHelper; +import org.alfresco.repo.transaction.TransactionServiceImpl; +import org.alfresco.repo.transaction.RetryingTransactionHelper.RetryingTransactionCallback; import org.alfresco.service.cmr.action.Action; import org.alfresco.service.cmr.action.ActionService; import org.alfresco.service.cmr.rendition.RenditionDefinition; @@ -118,6 +121,45 @@ public ThumbnailRenditionConvertor getThumbnailRenditionConvertor() } }); thumbs.setNodeService(mock(NodeService.class)); + + TransactionServiceImpl transactionServiceImpl = new TransactionServiceImpl() + { + @Override + public boolean getAllowWrite() + { + return true; + } + + @Override + public boolean isReadOnly() + { + return false; + } + + @Override + public RetryingTransactionHelper getRetryingTransactionHelper() + { + RetryingTransactionHelper rth = new RetryingTransactionHelper() + { + @Override + public R doInTransaction(RetryingTransactionCallback cb, boolean readOnly, boolean requiresNew) + { + try + { + return cb.execute(); + } + catch (Throwable e) + { + e.printStackTrace(); + } + + return null; + } + }; + return rth; + } + }; + thumbs.setTransactionService(transactionServiceImpl); thumbnailService = thumbs; } diff --git a/source/java/org/alfresco/repo/thumbnail/ThumbnailServiceImplTest.java b/source/test-java/org/alfresco/repo/thumbnail/ThumbnailServiceImplTest.java similarity index 92% rename from source/java/org/alfresco/repo/thumbnail/ThumbnailServiceImplTest.java rename to source/test-java/org/alfresco/repo/thumbnail/ThumbnailServiceImplTest.java index e090600780e..0a7c4c7b0c2 100644 --- a/source/java/org/alfresco/repo/thumbnail/ThumbnailServiceImplTest.java +++ b/source/test-java/org/alfresco/repo/thumbnail/ThumbnailServiceImplTest.java @@ -49,6 +49,7 @@ import org.alfresco.service.cmr.repository.ContentServiceTransientException; import org.alfresco.service.cmr.repository.ContentWriter; import org.alfresco.service.cmr.repository.NodeRef; +import org.alfresco.service.cmr.repository.NodeService; import org.alfresco.service.cmr.repository.PagedSourceOptions; import org.alfresco.service.cmr.repository.ScriptLocation; import org.alfresco.service.cmr.repository.ScriptService; @@ -71,6 +72,7 @@ */ public class ThumbnailServiceImplTest extends BaseAlfrescoSpringTest { + private NodeService secureNodeService; private RenditionService renditionService; private ThumbnailService thumbnailService; private ScriptThumbnailService scriptThumbnailService; @@ -91,6 +93,7 @@ protected void onSetUpInTransaction() throws Exception super.onSetUpInTransaction(); // Get the required services + this.secureNodeService = (NodeService) this.applicationContext.getBean("NodeService"); this.renditionService = (RenditionService) this.applicationContext.getBean("RenditionService"); this.thumbnailService = (ThumbnailService) this.applicationContext.getBean("ThumbnailService"); this.scriptThumbnailService = (ScriptThumbnailService) this.applicationContext.getBean("thumbnailServiceScript"); @@ -102,7 +105,7 @@ protected void onSetUpInTransaction() throws Exception // Create a folder and some content Map folderProps = new HashMap(1); folderProps.put(ContentModel.PROP_NAME, "testFolder"); - this.folder = this.nodeService.createNode(this.rootNodeRef, ContentModel.ASSOC_CHILDREN, + this.folder = this.secureNodeService.createNode(this.rootNodeRef, ContentModel.ASSOC_CHILDREN, QName.createQName(NamespaceService.CONTENT_MODEL_1_0_URI, "testFolder"), ContentModel.TYPE_FOLDER) .getChildRef(); } @@ -316,8 +319,8 @@ public void testCreateFailingThumbnail() throws Exception // Make sure the source node is correctly set up before we start // It should not be renditioned and should not be marked as having any failed thumbnails. - assertFalse(nodeService.hasAspect(corruptNode, RenditionModel.ASPECT_RENDITIONED)); - assertFalse(nodeService.hasAspect(corruptNode, ContentModel.ASPECT_FAILED_THUMBNAIL_SOURCE)); + assertFalse(secureNodeService.hasAspect(corruptNode, RenditionModel.ASPECT_RENDITIONED)); + assertFalse(secureNodeService.hasAspect(corruptNode, ContentModel.ASPECT_FAILED_THUMBNAIL_SOURCE)); setComplete(); endTransaction(); @@ -343,8 +346,8 @@ public Void execute() throws Throwable { public Void execute() throws Throwable { - assertFalse("corrupt node should not have renditioned aspect", nodeService.hasAspect(corruptNode, RenditionModel.ASPECT_RENDITIONED)); - assertTrue("corrupt node should have failed thumbnails aspect", nodeService.hasAspect(corruptNode, ContentModel.ASPECT_FAILED_THUMBNAIL_SOURCE)); + assertFalse("corrupt node should not have renditioned aspect", secureNodeService.hasAspect(corruptNode, RenditionModel.ASPECT_RENDITIONED)); + assertTrue("corrupt node should have failed thumbnails aspect", secureNodeService.hasAspect(corruptNode, ContentModel.ASPECT_FAILED_THUMBNAIL_SOURCE)); Map failedThumbnails = thumbnailService.getFailedThumbnails(corruptNode); assertEquals("Wrong number of failed thumbnails", 1, failedThumbnails.size()); @@ -411,11 +414,11 @@ public void testCreateTransientlyFailingThumbnail() throws Exception { Map props = new HashMap(); props.put(ContentModel.PROP_NAME, "transientThumbnail.transientThumbnail"); - final NodeRef testNode = this.nodeService.createNode(folder, ContentModel.ASSOC_CONTAINS, + final NodeRef testNode = this.secureNodeService.createNode(folder, ContentModel.ASSOC_CONTAINS, QName.createQName(NamespaceService.CONTENT_MODEL_1_0_URI, "transientThumbnail.transientThumbnail"), ContentModel.TYPE_CONTENT, props).getChildRef(); - nodeService.setProperty(testNode, ContentModel.PROP_CONTENT, + secureNodeService.setProperty(testNode, ContentModel.PROP_CONTENT, new ContentData(null, TEST_FAILING_MIME_TYPE, 0L, null)); // We don't need to write any content into this node, as our test transformer will fail immediately. @@ -423,8 +426,8 @@ public void testCreateTransientlyFailingThumbnail() throws Exception // Make sure the source node is correctly set up before we start // It should not be renditioned and should not be marked as having any failed thumbnails. - assertFalse(nodeService.hasAspect(testNode, RenditionModel.ASPECT_RENDITIONED)); - assertFalse(nodeService.hasAspect(testNode, ContentModel.ASPECT_FAILED_THUMBNAIL_SOURCE)); + assertFalse(secureNodeService.hasAspect(testNode, RenditionModel.ASPECT_RENDITIONED)); + assertFalse(secureNodeService.hasAspect(testNode, ContentModel.ASPECT_FAILED_THUMBNAIL_SOURCE)); setComplete(); endTransaction(); @@ -450,8 +453,8 @@ public Void execute() throws Throwable { public Void execute() throws Throwable { - assertFalse("Node should not have renditioned aspect", nodeService.hasAspect(testNode, RenditionModel.ASPECT_RENDITIONED)); - assertFalse("Node should not have failed thumbnails aspect", nodeService.hasAspect(testNode, ContentModel.ASPECT_FAILED_THUMBNAIL_SOURCE)); + assertFalse("Node should not have renditioned aspect", secureNodeService.hasAspect(testNode, RenditionModel.ASPECT_RENDITIONED)); + assertFalse("Node should not have failed thumbnails aspect", secureNodeService.hasAspect(testNode, ContentModel.ASPECT_FAILED_THUMBNAIL_SOURCE)); return null; } @@ -474,13 +477,13 @@ public void testThumbnailUpdate() throws Exception MimetypeMap.MIMETYPE_IMAGE_JPEG, imageTransformationOptions, "small"); // Thumbnails should always be of type cm:thumbnail. - assertEquals(ContentModel.TYPE_THUMBNAIL, nodeService.getType(thumbnail1)); + assertEquals(ContentModel.TYPE_THUMBNAIL, secureNodeService.getType(thumbnail1)); // Update the thumbnail this.thumbnailService.updateThumbnail(thumbnail1, imageTransformationOptions); // ALF-2047. Thumbnails were changing to type cm:content after update. - assertEquals(ContentModel.TYPE_THUMBNAIL, nodeService.getType(thumbnail1)); + assertEquals(ContentModel.TYPE_THUMBNAIL, secureNodeService.getType(thumbnail1)); } public void testGetThumbnailByName() throws Exception @@ -515,11 +518,11 @@ public void testGetThumbnailByName() throws Exception private void checkRenditioned(NodeRef thumbnailed, String assocName) { - assertTrue("Renditioned aspect should have been applied", this.nodeService.hasAspect(thumbnailed, + assertTrue("Renditioned aspect should have been applied", this.secureNodeService.hasAspect(thumbnailed, RenditionModel.ASPECT_RENDITIONED)); if (assocName != null) { - List assocs = this.nodeService.getChildAssocs(thumbnailed, RegexQNamePattern.MATCH_ALL, + List assocs = this.secureNodeService.getChildAssocs(thumbnailed, RegexQNamePattern.MATCH_ALL, QName.createQName(NamespaceService.CONTENT_MODEL_1_0_URI, assocName)); assertNotNull(assocs); assertEquals(1, assocs.size()); @@ -535,19 +538,19 @@ private void checkRendition(String thumbnailName, NodeRef thumbnail) // Check the name if (thumbnailName != null) { - assertEquals(thumbnailName, this.nodeService.getProperty(thumbnail, ContentModel.PROP_NAME)); + assertEquals(thumbnailName, this.secureNodeService.getProperty(thumbnail, ContentModel.PROP_NAME)); } // Check the content property value - assertEquals(ContentModel.PROP_CONTENT, this.nodeService.getProperty(thumbnail, + assertEquals(ContentModel.PROP_CONTENT, this.secureNodeService.getProperty(thumbnail, ContentModel.PROP_CONTENT_PROPERTY_NAME)); // Check the thumbnail is of type cm:thumbnail. assertEquals("The thumbnail node should be of type cm:thumbnail!", - ContentModel.TYPE_THUMBNAIL, nodeService.getType(thumbnail)); + ContentModel.TYPE_THUMBNAIL, secureNodeService.getType(thumbnail)); // Check the thumbnail name property is correctly set on thumbnail. - assertEquals( thumbnailName, nodeService.getProperty(thumbnail, ContentModel.PROP_THUMBNAIL_NAME)); + assertEquals( thumbnailName, secureNodeService.getProperty(thumbnail, ContentModel.PROP_THUMBNAIL_NAME)); } private void outputThumbnailTempContentLocation(NodeRef thumbnail, String ext, String message) throws IOException @@ -574,7 +577,7 @@ private NodeRef createOriginalContent(NodeRef parentFolder, String mimetype) thr Map props = new HashMap(1); props.put(ContentModel.PROP_NAME, "origional." + ext); - NodeRef node = this.nodeService.createNode(parentFolder, ContentModel.ASSOC_CONTAINS, + NodeRef node = this.secureNodeService.createNode(parentFolder, ContentModel.ASSOC_CONTAINS, QName.createQName(NamespaceService.CONTENT_MODEL_1_0_URI, "original." + ext), ContentModel.TYPE_CONTENT, props).getChildRef(); @@ -594,11 +597,11 @@ private NodeRef createCorruptedContent(NodeRef parentFolder) throws IOException Map props = new HashMap(); props.put(ContentModel.PROP_NAME, "corrupt.pdf"); - NodeRef node = this.nodeService.createNode(parentFolder, ContentModel.ASSOC_CONTAINS, + NodeRef node = this.secureNodeService.createNode(parentFolder, ContentModel.ASSOC_CONTAINS, QName.createQName(NamespaceService.CONTENT_MODEL_1_0_URI, "quickCorrupt.pdf"), ContentModel.TYPE_CONTENT, props).getChildRef(); - nodeService.setProperty(node, ContentModel.PROP_CONTENT, new ContentData(null, + secureNodeService.setProperty(node, ContentModel.PROP_CONTENT, new ContentData(null, MimetypeMap.MIMETYPE_PDF, 0L, null)); ContentWriter writer = contentService.getWriter(node, ContentModel.PROP_CONTENT, true); writer.setMimetype(MimetypeMap.MIMETYPE_PDF); @@ -681,7 +684,7 @@ public void testThumbnailServiceCreateApi() throws Exception // Create a second folder Map folderProps = new HashMap(); folderProps.put(ContentModel.PROP_NAME, "otherTestFolder"); - NodeRef otherFolder = this.nodeService.createNode(this.rootNodeRef, ContentModel.ASSOC_CHILDREN, + NodeRef otherFolder = this.secureNodeService.createNode(this.rootNodeRef, ContentModel.ASSOC_CHILDREN, QName.createQName(NamespaceService.CONTENT_MODEL_1_0_URI, "otherTestFolder"), ContentModel.TYPE_FOLDER) .getChildRef(); diff --git a/source/java/org/alfresco/repo/thumbnail/conditions/NodeEligibleForRethumbnailingEvaluatorTest.java b/source/test-java/org/alfresco/repo/thumbnail/conditions/NodeEligibleForRethumbnailingEvaluatorTest.java similarity index 100% rename from source/java/org/alfresco/repo/thumbnail/conditions/NodeEligibleForRethumbnailingEvaluatorTest.java rename to source/test-java/org/alfresco/repo/thumbnail/conditions/NodeEligibleForRethumbnailingEvaluatorTest.java diff --git a/source/java/org/alfresco/repo/transaction/AlfrescoTransactionSupportTest.java b/source/test-java/org/alfresco/repo/transaction/AlfrescoTransactionSupportTest.java similarity index 100% rename from source/java/org/alfresco/repo/transaction/AlfrescoTransactionSupportTest.java rename to source/test-java/org/alfresco/repo/transaction/AlfrescoTransactionSupportTest.java diff --git a/source/java/org/alfresco/repo/transaction/RetryingTransactionHelperTest.java b/source/test-java/org/alfresco/repo/transaction/RetryingTransactionHelperTest.java similarity index 100% rename from source/java/org/alfresco/repo/transaction/RetryingTransactionHelperTest.java rename to source/test-java/org/alfresco/repo/transaction/RetryingTransactionHelperTest.java diff --git a/source/java/org/alfresco/repo/transaction/TransactionAwareSingletonTest.java b/source/test-java/org/alfresco/repo/transaction/TransactionAwareSingletonTest.java similarity index 100% rename from source/java/org/alfresco/repo/transaction/TransactionAwareSingletonTest.java rename to source/test-java/org/alfresco/repo/transaction/TransactionAwareSingletonTest.java diff --git a/source/java/org/alfresco/repo/transaction/TransactionServiceImplTest.java b/source/test-java/org/alfresco/repo/transaction/TransactionServiceImplTest.java similarity index 76% rename from source/java/org/alfresco/repo/transaction/TransactionServiceImplTest.java rename to source/test-java/org/alfresco/repo/transaction/TransactionServiceImplTest.java index 60eba830b22..cb705985ab8 100644 --- a/source/java/org/alfresco/repo/transaction/TransactionServiceImplTest.java +++ b/source/test-java/org/alfresco/repo/transaction/TransactionServiceImplTest.java @@ -24,16 +24,20 @@ import junit.framework.TestCase; +import org.alfresco.model.ContentModel; import org.alfresco.repo.admin.SysAdminParams; -import org.alfresco.repo.security.authentication.AuthenticationContext; +import org.alfresco.repo.security.authentication.AuthenticationUtil; import org.alfresco.repo.security.permissions.AccessDeniedException; import org.alfresco.repo.transaction.RetryingTransactionHelper.RetryingTransactionCallback; import org.alfresco.service.cmr.repository.NodeService; import org.alfresco.service.cmr.repository.StoreRef; +import org.alfresco.service.cmr.security.MutableAuthenticationService; +import org.alfresco.service.cmr.security.PersonService; import org.alfresco.service.namespace.NamespaceService; import org.alfresco.service.namespace.QName; import org.alfresco.service.transaction.ReadOnlyServerException; import org.alfresco.util.ApplicationContextHelper; +import org.alfresco.util.PropertyMap; import org.hibernate.dialect.Dialect; import org.hibernate.dialect.PostgreSQLDialect; import org.springframework.context.ApplicationContext; @@ -54,8 +58,11 @@ public class TransactionServiceImplTest extends TestCase private PlatformTransactionManager transactionManager; private TransactionServiceImpl transactionService; private NodeService nodeService; + private MutableAuthenticationService authenticationService; + private PersonService personService; private final QName vetoName = QName.createQName(NamespaceService.APP_MODEL_1_0_URI, "TransactionServiceImplTest"); + private static final String USER_ALFRESCO = "AlfrescoUser"; private Dialect dialect; @@ -65,10 +72,11 @@ public void setUp() throws Exception transactionService = new TransactionServiceImpl(); transactionService.setTransactionManager(transactionManager); transactionService.setAllowWrite(true, vetoName); - transactionService.setAuthenticationContext((AuthenticationContext) ctx.getBean("authenticationContext")); transactionService.setSysAdminParams((SysAdminParams) ctx.getBean("sysAdminParams")); nodeService = (NodeService) ctx.getBean("dbNodeService"); + authenticationService = (MutableAuthenticationService) ctx.getBean("AuthenticationService"); + personService = (PersonService) ctx.getBean("PersonService"); dialect = (Dialect) ctx.getBean("dialect"); } @@ -274,4 +282,56 @@ public Object execute() throws Throwable transactionService.setAllowWrite(true, vetoName); } + + private void createUser(String userName) + { + // login as system user to create test user + AuthenticationUtil.setFullyAuthenticatedUser(AuthenticationUtil.getSystemUserName()); + // if user with given user name doesn't already exist then create user + if (!this.authenticationService.authenticationExists(userName)) + { + // create user + this.authenticationService.createAuthentication(userName, "password".toCharArray()); + + // create person properties + PropertyMap personProps = new PropertyMap(); + personProps.put(ContentModel.PROP_USERNAME, userName); + personProps.put(ContentModel.PROP_FIRSTNAME, "First"); + personProps.put(ContentModel.PROP_LASTNAME, "Last"); + personProps.put(ContentModel.PROP_EMAIL, "FirstName123.LastName123@email.com"); + personProps.put(ContentModel.PROP_JOBTITLE, "JobTitle123"); + personProps.put(ContentModel.PROP_JOBTITLE, "Organisation123"); + + // create person node for user + this.personService.createPerson(personProps); + } + AuthenticationUtil.clearCurrentSecurityContext(); + } + + public void testSystemUserHasWritePermissionsInReadOnlyMode() + { + createUser(USER_ALFRESCO); + // login as user + AuthenticationUtil.setFullyAuthenticatedUser(USER_ALFRESCO); + + // start a read-only transaction + transactionService.setAllowWrite(false, vetoName); + try + { + Boolean isReadOnly = AuthenticationUtil.runAs(new AuthenticationUtil.RunAsWork() + { + public Boolean doWork() throws Exception + { + return transactionService.isReadOnly(); + } + }, AuthenticationUtil.getSystemUserName()); + assertFalse("SystemUser must has write permissions in read-only mode", isReadOnly); + } + finally + { + transactionService.setAllowWrite(true, vetoName); + AuthenticationUtil.clearCurrentSecurityContext(); + } + } + } diff --git a/source/java/org/alfresco/repo/transfer/ContentChunkerImplTest.java b/source/test-java/org/alfresco/repo/transfer/ContentChunkerImplTest.java similarity index 100% rename from source/java/org/alfresco/repo/transfer/ContentChunkerImplTest.java rename to source/test-java/org/alfresco/repo/transfer/ContentChunkerImplTest.java diff --git a/source/java/org/alfresco/repo/transfer/HttpClientTransmitterImplTest.java b/source/test-java/org/alfresco/repo/transfer/HttpClientTransmitterImplTest.java similarity index 100% rename from source/java/org/alfresco/repo/transfer/HttpClientTransmitterImplTest.java rename to source/test-java/org/alfresco/repo/transfer/HttpClientTransmitterImplTest.java diff --git a/source/java/org/alfresco/repo/transfer/NodeCrawlerTest.java b/source/test-java/org/alfresco/repo/transfer/NodeCrawlerTest.java similarity index 100% rename from source/java/org/alfresco/repo/transfer/NodeCrawlerTest.java rename to source/test-java/org/alfresco/repo/transfer/NodeCrawlerTest.java diff --git a/source/java/org/alfresco/repo/transfer/RepoTransferReceiverImplTest.java b/source/test-java/org/alfresco/repo/transfer/RepoTransferReceiverImplTest.java similarity index 100% rename from source/java/org/alfresco/repo/transfer/RepoTransferReceiverImplTest.java rename to source/test-java/org/alfresco/repo/transfer/RepoTransferReceiverImplTest.java diff --git a/source/java/org/alfresco/repo/transfer/TestTransferCallback.java b/source/test-java/org/alfresco/repo/transfer/TestTransferCallback.java similarity index 100% rename from source/java/org/alfresco/repo/transfer/TestTransferCallback.java rename to source/test-java/org/alfresco/repo/transfer/TestTransferCallback.java diff --git a/source/java/org/alfresco/repo/transfer/TransferServiceCallbackTest.java b/source/test-java/org/alfresco/repo/transfer/TransferServiceCallbackTest.java similarity index 100% rename from source/java/org/alfresco/repo/transfer/TransferServiceCallbackTest.java rename to source/test-java/org/alfresco/repo/transfer/TransferServiceCallbackTest.java diff --git a/source/java/org/alfresco/repo/transfer/TransferServiceImplTest.java b/source/test-java/org/alfresco/repo/transfer/TransferServiceImplTest.java similarity index 97% rename from source/java/org/alfresco/repo/transfer/TransferServiceImplTest.java rename to source/test-java/org/alfresco/repo/transfer/TransferServiceImplTest.java index 18552a2621c..0832506c46e 100644 --- a/source/java/org/alfresco/repo/transfer/TransferServiceImplTest.java +++ b/source/test-java/org/alfresco/repo/transfer/TransferServiceImplTest.java @@ -951,9 +951,9 @@ public Void execute() throws Throwable NodeRef deletedContentNodeRef = new NodeRef(StoreRef.STORE_REF_ARCHIVE_SPACESSTORE, testContext.contentNodeRef.getId()); TransferDefinition definition = new TransferDefinition(); - Setnodes = new HashSet(); - nodes.add(deletedContentNodeRef); - definition.setNodes(nodes); + Set nodesToRemove = new HashSet(); + nodesToRemove.add(deletedContentNodeRef); + definition.setNodesToRemove(nodesToRemove); transferService.transfer(targetName, definition); return null; diff --git a/source/java/org/alfresco/repo/transfer/TransferServiceToBeRefactoredTest.java b/source/test-java/org/alfresco/repo/transfer/TransferServiceToBeRefactoredTest.java similarity index 100% rename from source/java/org/alfresco/repo/transfer/TransferServiceToBeRefactoredTest.java rename to source/test-java/org/alfresco/repo/transfer/TransferServiceToBeRefactoredTest.java diff --git a/source/java/org/alfresco/repo/transfer/TransferVersionCheckerImplTest.java b/source/test-java/org/alfresco/repo/transfer/TransferVersionCheckerImplTest.java similarity index 100% rename from source/java/org/alfresco/repo/transfer/TransferVersionCheckerImplTest.java rename to source/test-java/org/alfresco/repo/transfer/TransferVersionCheckerImplTest.java diff --git a/source/java/org/alfresco/repo/transfer/UnitTestInProcessTransmitterImpl.java b/source/test-java/org/alfresco/repo/transfer/UnitTestInProcessTransmitterImpl.java similarity index 100% rename from source/java/org/alfresco/repo/transfer/UnitTestInProcessTransmitterImpl.java rename to source/test-java/org/alfresco/repo/transfer/UnitTestInProcessTransmitterImpl.java diff --git a/source/java/org/alfresco/repo/transfer/UnitTestTransferManifestNodeFactory.java b/source/test-java/org/alfresco/repo/transfer/UnitTestTransferManifestNodeFactory.java similarity index 100% rename from source/java/org/alfresco/repo/transfer/UnitTestTransferManifestNodeFactory.java rename to source/test-java/org/alfresco/repo/transfer/UnitTestTransferManifestNodeFactory.java diff --git a/source/java/org/alfresco/repo/transfer/manifest/ManifestIntegrationTest.java b/source/test-java/org/alfresco/repo/transfer/manifest/ManifestIntegrationTest.java similarity index 100% rename from source/java/org/alfresco/repo/transfer/manifest/ManifestIntegrationTest.java rename to source/test-java/org/alfresco/repo/transfer/manifest/ManifestIntegrationTest.java diff --git a/source/java/org/alfresco/repo/transfer/manifest/TestTransferManifestProcessor.java b/source/test-java/org/alfresco/repo/transfer/manifest/TestTransferManifestProcessor.java similarity index 100% rename from source/java/org/alfresco/repo/transfer/manifest/TestTransferManifestProcessor.java rename to source/test-java/org/alfresco/repo/transfer/manifest/TestTransferManifestProcessor.java diff --git a/source/java/org/alfresco/repo/transfer/manifest/TransferManifestTest.java b/source/test-java/org/alfresco/repo/transfer/manifest/TransferManifestTest.java similarity index 100% rename from source/java/org/alfresco/repo/transfer/manifest/TransferManifestTest.java rename to source/test-java/org/alfresco/repo/transfer/manifest/TransferManifestTest.java diff --git a/source/java/org/alfresco/repo/transfer/script/ScriptTransferServiceTest.java b/source/test-java/org/alfresco/repo/transfer/script/ScriptTransferServiceTest.java similarity index 100% rename from source/java/org/alfresco/repo/transfer/script/ScriptTransferServiceTest.java rename to source/test-java/org/alfresco/repo/transfer/script/ScriptTransferServiceTest.java diff --git a/source/java/org/alfresco/repo/urlshortening/BitlyUrlShortenerTest.java b/source/test-java/org/alfresco/repo/urlshortening/BitlyUrlShortenerTest.java similarity index 100% rename from source/java/org/alfresco/repo/urlshortening/BitlyUrlShortenerTest.java rename to source/test-java/org/alfresco/repo/urlshortening/BitlyUrlShortenerTest.java diff --git a/source/java/org/alfresco/repo/usage/RepoUsageComponentTest.java b/source/test-java/org/alfresco/repo/usage/RepoUsageComponentTest.java similarity index 100% rename from source/java/org/alfresco/repo/usage/RepoUsageComponentTest.java rename to source/test-java/org/alfresco/repo/usage/RepoUsageComponentTest.java diff --git a/source/java/org/alfresco/repo/usage/UsageTestSuite.java b/source/test-java/org/alfresco/repo/usage/UsageTestSuite.java similarity index 100% rename from source/java/org/alfresco/repo/usage/UsageTestSuite.java rename to source/test-java/org/alfresco/repo/usage/UsageTestSuite.java diff --git a/source/java/org/alfresco/repo/usage/UserUsageTest.java b/source/test-java/org/alfresco/repo/usage/UserUsageTest.java similarity index 100% rename from source/java/org/alfresco/repo/usage/UserUsageTest.java rename to source/test-java/org/alfresco/repo/usage/UserUsageTest.java diff --git a/source/java/org/alfresco/repo/usage/UserUsageTrackingComponentTest.java b/source/test-java/org/alfresco/repo/usage/UserUsageTrackingComponentTest.java similarity index 94% rename from source/java/org/alfresco/repo/usage/UserUsageTrackingComponentTest.java rename to source/test-java/org/alfresco/repo/usage/UserUsageTrackingComponentTest.java index 0580f9a65ed..b99cfd06cc1 100644 --- a/source/java/org/alfresco/repo/usage/UserUsageTrackingComponentTest.java +++ b/source/test-java/org/alfresco/repo/usage/UserUsageTrackingComponentTest.java @@ -210,13 +210,15 @@ public void test1EnableDisableCollapse() logger.debug("Cleared usages"); - checkCleared(); + checkCleared(true); userUsageTrackingComponent.setEnabled(true); userUsageTrackingComponent.bootstrapInternal(); // true => recalculate logger.debug("Recalculated usages"); + userUsageTrackingComponent.execute(); // collapse usages + checkCalculated(2L); checkUsage(2L); @@ -285,7 +287,7 @@ public void test1EnableDisableCollapse() userUsageTrackingComponent.bootstrapInternal(); // false => clear logger.debug("Cleared usages"); - checkCleared(); + checkCleared(false); } public void test2RecalculateUserUsage() throws Exception @@ -329,14 +331,22 @@ private void checkUsage(long factor) } } - private void checkCleared() + private void checkCleared(boolean isCleared) { for (int i = 1; i <= MAX_USERS; i++) { String userName = TEST_USER_PREFIX+i; NodeRef personNodeRef = personService.getPerson(userName); + Long sizeCurrent = (Long) nodeService.getProperty(personNodeRef, ContentModel.PROP_SIZE_CURRENT); - assertNull(nodeService.getProperty(personNodeRef, ContentModel.PROP_SIZE_CURRENT)); + if (isCleared) + { + assertTrue(sizeCurrent == null || (new Long(0L)).equals(sizeCurrent)); + } + else + { + assertFalse(sizeCurrent == null || (new Long(0L)).equals(sizeCurrent)); + } } } diff --git a/source/java/org/alfresco/repo/version/BaseVersionStoreTest.java b/source/test-java/org/alfresco/repo/version/BaseVersionStoreTest.java similarity index 100% rename from source/java/org/alfresco/repo/version/BaseVersionStoreTest.java rename to source/test-java/org/alfresco/repo/version/BaseVersionStoreTest.java diff --git a/source/java/org/alfresco/repo/version/ContentServiceImplTest.java b/source/test-java/org/alfresco/repo/version/ContentServiceImplTest.java similarity index 100% rename from source/java/org/alfresco/repo/version/ContentServiceImplTest.java rename to source/test-java/org/alfresco/repo/version/ContentServiceImplTest.java diff --git a/source/java/org/alfresco/repo/version/NodeServiceImplTest.java b/source/test-java/org/alfresco/repo/version/NodeServiceImplTest.java similarity index 100% rename from source/java/org/alfresco/repo/version/NodeServiceImplTest.java rename to source/test-java/org/alfresco/repo/version/NodeServiceImplTest.java diff --git a/source/java/org/alfresco/repo/version/VersionMigratorTest.java b/source/test-java/org/alfresco/repo/version/VersionMigratorTest.java similarity index 96% rename from source/java/org/alfresco/repo/version/VersionMigratorTest.java rename to source/test-java/org/alfresco/repo/version/VersionMigratorTest.java index e0053b47951..51b540f1072 100644 --- a/source/java/org/alfresco/repo/version/VersionMigratorTest.java +++ b/source/test-java/org/alfresco/repo/version/VersionMigratorTest.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2010 Alfresco Software Limited. + * Copyright (C) 2005-2013 Alfresco Software Limited. * * This file is part of Alfresco * @@ -466,7 +466,10 @@ public void test_ETHREEOH_1540() throws Exception { Map versionProperties = new HashMap(); versionProperties.put(Version.PROP_DESCRIPTION, "This is a test checkin - " + i); - + + // Edit working copy to create a version, ALF-19217 + nodeService.setProperty(workingCopyNodeRef, ContentModel.PROP_DESCRIPTION, "TestDescription" + i); + cociService.checkin(workingCopyNodeRef, versionProperties); vh1 = version1Service.getVersionHistory(nodeRef); @@ -503,7 +506,10 @@ public void test_ETHREEOH_1540() throws Exception { versionProperties = new HashMap(); versionProperties.put(Version.PROP_DESCRIPTION, "This is a test checkin - " + (v1count + i)); - + + // Edit working copy to create a version, ALF-19217 + nodeService.setProperty(workingCopyNodeRef, ContentModel.PROP_DESCRIPTION, "TestDescription" + i); + cociService.checkin(workingCopyNodeRef, versionProperties); vh2 = version2Service.getVersionHistory(nodeRef); diff --git a/source/java/org/alfresco/repo/version/VersionServiceImplTest.java b/source/test-java/org/alfresco/repo/version/VersionServiceImplTest.java similarity index 95% rename from source/java/org/alfresco/repo/version/VersionServiceImplTest.java rename to source/test-java/org/alfresco/repo/version/VersionServiceImplTest.java index 536a7115a07..814ae020dc6 100644 --- a/source/java/org/alfresco/repo/version/VersionServiceImplTest.java +++ b/source/test-java/org/alfresco/repo/version/VersionServiceImplTest.java @@ -593,6 +593,7 @@ public void testRevertWithComments() createComment(versionableNode, "my comment", "Do great work", false); assertTrue(nodeService.hasAspect(versionableNode, ForumModel.ASPECT_DISCUSSABLE)); + assertTrue("fm:discussion association must exist", nodeService.getChildAssocs(versionableNode).size() > 0); assertEquals(1, this.dbNodeService.getProperty(versionableNode, ForumModel.PROP_COMMENT_COUNT)); // Create a new version @@ -606,6 +607,7 @@ public void testRevertWithComments() //Revert to a version that has comments. this.versionService.revert(versionableNode, version3); assertTrue(nodeService.hasAspect(versionableNode, ForumModel.ASPECT_DISCUSSABLE)); + assertTrue("fm:discussion association must exist", nodeService.getChildAssocs(versionableNode).size() > 0); assertEquals("I am version 3", this.dbNodeService.getProperty(versionableNode, PROP_1)); } @@ -2001,7 +2003,47 @@ public void testHasPermission() assertEquals(AccessStatus.DENIED, permissionService.hasPermission(versionNodeRef, PermissionService.READ)); } - + + /** + * Check permissions for the frozen node if the store protocol is swapped from "version" to "workspace" + * MNT-6877 + */ + public void testHasPermissionSwappedProtocol() + { + AuthenticationUtil.setFullyAuthenticatedUser(AuthenticationUtil.getAdminUserName()); + + if(!authenticationDAO.userExists(USER_NAME_A)) + { + authenticationService.createAuthentication(USER_NAME_A, PWD_A.toCharArray()); + } + + permissionService.setPermission(rootNodeRef, PermissionService.ALL_AUTHORITIES, PermissionService.READ, true); + permissionService.setInheritParentPermissions(rootNodeRef, true); + + // Create a new versionable node + NodeRef versionableNode = createNewVersionableNode(); + + // Create a new version + Version version = createVersion(versionableNode, versionProperties); + NodeRef versionNodeRef = version.getFrozenStateNodeRef(); + + // Swap the protocol + NodeRef versionNodeRefSwapped = new NodeRef(StoreRef.PROTOCOL_WORKSPACE, versionNodeRef.getStoreRef().getIdentifier(), versionNodeRef.getId()); + + // Check permission for admin + assertEquals(AccessStatus.ALLOWED, permissionService.hasPermission(versionNodeRefSwapped, PermissionService.READ)); + // Check permission for user + AuthenticationUtil.setFullyAuthenticatedUser(USER_NAME_A); + assertEquals(AccessStatus.ALLOWED, permissionService.hasPermission(versionNodeRefSwapped, PermissionService.READ)); + + // Remove permissions for user + permissionService.setInheritParentPermissions(versionableNode, false); + + // Check permission for user + AuthenticationUtil.setFullyAuthenticatedUser(USER_NAME_A); + assertEquals(AccessStatus.DENIED, permissionService.hasPermission(versionNodeRefSwapped, PermissionService.READ)); + } + public void testALF_3962() { NodeRef versionableNode = createNode(true, QName.createQName("http://www.alfresco.org/model/action/1.0", "action")); diff --git a/source/java/org/alfresco/repo/version/VersionTestSuite.java b/source/test-java/org/alfresco/repo/version/VersionTestSuite.java similarity index 100% rename from source/java/org/alfresco/repo/version/VersionTestSuite.java rename to source/test-java/org/alfresco/repo/version/VersionTestSuite.java diff --git a/source/java/org/alfresco/repo/version/VersionableAspectTest.java b/source/test-java/org/alfresco/repo/version/VersionableAspectTest.java similarity index 100% rename from source/java/org/alfresco/repo/version/VersionableAspectTest.java rename to source/test-java/org/alfresco/repo/version/VersionableAspectTest.java diff --git a/source/java/org/alfresco/repo/version/common/VersionHistoryImplTest.java b/source/test-java/org/alfresco/repo/version/common/VersionHistoryImplTest.java similarity index 100% rename from source/java/org/alfresco/repo/version/common/VersionHistoryImplTest.java rename to source/test-java/org/alfresco/repo/version/common/VersionHistoryImplTest.java diff --git a/source/java/org/alfresco/repo/version/common/VersionImplTest.java b/source/test-java/org/alfresco/repo/version/common/VersionImplTest.java similarity index 100% rename from source/java/org/alfresco/repo/version/common/VersionImplTest.java rename to source/test-java/org/alfresco/repo/version/common/VersionImplTest.java diff --git a/source/java/org/alfresco/repo/version/common/versionlabel/SerialVersionLabelPolicyTest.java b/source/test-java/org/alfresco/repo/version/common/versionlabel/SerialVersionLabelPolicyTest.java similarity index 100% rename from source/java/org/alfresco/repo/version/common/versionlabel/SerialVersionLabelPolicyTest.java rename to source/test-java/org/alfresco/repo/version/common/versionlabel/SerialVersionLabelPolicyTest.java diff --git a/source/java/org/alfresco/repo/wiki/WikiServiceImplTest.java b/source/test-java/org/alfresco/repo/wiki/WikiServiceImplTest.java similarity index 96% rename from source/java/org/alfresco/repo/wiki/WikiServiceImplTest.java rename to source/test-java/org/alfresco/repo/wiki/WikiServiceImplTest.java index e6bd7385ada..8d52bc2cb35 100644 --- a/source/java/org/alfresco/repo/wiki/WikiServiceImplTest.java +++ b/source/test-java/org/alfresco/repo/wiki/WikiServiceImplTest.java @@ -212,13 +212,13 @@ public class WikiServiceImplTest page.setContents("This is new content"); page = WIKI_SERVICE.updateWikiPage(page); - assertEquals("New_Title", page.getSystemName()); // Name has underscores + assertEquals("New%20Title", page.getSystemName()); // Name has underscores assertEquals("New Title", page.getTitle()); // Fetch, and check page = WIKI_SERVICE.getWikiPage(WIKI_SITE.getShortName(), page.getSystemName()); - assertEquals("New_Title", page.getSystemName()); // Name has underscores + assertEquals("New%20Title", page.getSystemName()); // Name has underscores assertEquals("New Title", page.getTitle()); assertEquals("This is new content", page.getContents()); assertEquals(TEST_USER, page.getCreator()); @@ -238,7 +238,7 @@ public class WikiServiceImplTest testNodesToTidy.add(page.getNodeRef()); // Check it - assertEquals("Title_Space", page.getSystemName()); + assertEquals("Title%20Space", page.getSystemName()); assertEquals("Title Space", page.getTitle()); assertEquals("This Is Some Content", page.getContents()); assertEquals(TEST_USER, page.getCreator()); @@ -251,7 +251,7 @@ public class WikiServiceImplTest // Check page = WIKI_SERVICE.getWikiPage(WIKI_SITE.getShortName(), page.getSystemName()); - assertEquals("Title_Space", page.getSystemName()); + assertEquals("Title%20Space", page.getSystemName()); assertEquals("Title Space", page.getTitle()); assertEquals("Changed contents", page.getContents()); assertEquals(TEST_USER, page.getCreator()); @@ -264,7 +264,7 @@ public class WikiServiceImplTest // Check page = WIKI_SERVICE.getWikiPage(WIKI_SITE.getShortName(), page.getSystemName()); - assertEquals("Alternate_Title", page.getSystemName()); + assertEquals("Alternate%20Title", page.getSystemName()); assertEquals("Alternate Title", page.getTitle()); assertEquals("Changed contents", page.getContents()); assertEquals(TEST_USER, page.getCreator()); diff --git a/source/java/org/alfresco/repo/workflow/AbstractMultitenantWorkflowTest.java b/source/test-java/org/alfresco/repo/workflow/AbstractMultitenantWorkflowTest.java similarity index 100% rename from source/java/org/alfresco/repo/workflow/AbstractMultitenantWorkflowTest.java rename to source/test-java/org/alfresco/repo/workflow/AbstractMultitenantWorkflowTest.java diff --git a/source/java/org/alfresco/repo/workflow/AbstractWorkflowServiceIntegrationTest.java b/source/test-java/org/alfresco/repo/workflow/AbstractWorkflowServiceIntegrationTest.java similarity index 94% rename from source/java/org/alfresco/repo/workflow/AbstractWorkflowServiceIntegrationTest.java rename to source/test-java/org/alfresco/repo/workflow/AbstractWorkflowServiceIntegrationTest.java index 1ea49adc7e6..3c9f777366f 100644 --- a/source/java/org/alfresco/repo/workflow/AbstractWorkflowServiceIntegrationTest.java +++ b/source/test-java/org/alfresco/repo/workflow/AbstractWorkflowServiceIntegrationTest.java @@ -28,6 +28,7 @@ import java.util.List; import java.util.Map; +import org.alfresco.error.AlfrescoRuntimeException; import org.alfresco.model.ContentModel; import org.alfresco.repo.content.MimetypeMap; import org.alfresco.repo.model.Repository; @@ -58,7 +59,7 @@ import org.alfresco.service.cmr.workflow.WorkflowTimer; import org.alfresco.service.namespace.NamespaceService; import org.alfresco.service.namespace.QName; -import org.alfresco.service.transaction.TransactionService; +import org.alfresco.repo.transaction.TransactionServiceImpl; import org.alfresco.util.BaseSpringTest; import org.alfresco.util.GUID; import org.alfresco.util.collections.CollectionUtils; @@ -87,7 +88,7 @@ public abstract class AbstractWorkflowServiceIntegrationTest extends BaseSpringT protected NodeService nodeService; private NodeRef companyHome; protected WorkflowTestHelper wfTestHelper; - protected TransactionService transactionService; + protected TransactionServiceImpl transactionService; public void testDeployWorkflowDefinition() { @@ -361,6 +362,16 @@ public void testTaskCapabilities() assertFalse(workflowService.isTaskEditable(currentTask, USER3)); assertFalse(workflowService.isTaskReassignable(currentTask, USER3)); + // MNT-9147: test service in read only state + transactionService.setAllowWrite(false); + // check nothing can be done to the task by assignee as repository in read-only mode + assertFalse(workflowService.isTaskEditable(currentTask, USER2)); + assertFalse(workflowService.isTaskReassignable(currentTask, USER2)); + // return back to read-write + transactionService.setAllowWrite(true); + assertTrue(workflowService.isTaskEditable(currentTask, USER2)); + assertTrue(workflowService.isTaskReassignable(currentTask, USER2)); + setComplete(); endTransaction(); transactionService.getRetryingTransactionHelper().doInTransaction(new RetryingTransactionCallback() @@ -444,6 +455,21 @@ public void testPooledTaskCapabilities() assertTrue(workflowService.isTaskEditable(currentTask, USER2)); assertFalse(workflowService.isTaskEditable(currentTask, USER3)); + // MNT-9147: test service in read only state + transactionService.setAllowWrite(false); + // check nothing can be done to the task by the members of the group and sub group as repository in read-only mode + assertFalse(workflowService.isTaskEditable(currentTask, USER1)); + assertFalse(workflowService.isTaskClaimable(currentTask, USER1)); + assertFalse(workflowService.isTaskEditable(currentTask, USER2)); + assertFalse(workflowService.isTaskClaimable(currentTask, USER2)); + // return back to read-write + transactionService.setAllowWrite(true); + assertTrue(workflowService.isTaskEditable(currentTask, USER1)); + assertTrue(workflowService.isTaskClaimable(currentTask, USER1)); + assertTrue(workflowService.isTaskEditable(currentTask, USER2)); + assertTrue(workflowService.isTaskClaimable(currentTask, USER2)); + + // claim the task for USER1 Map properties = new HashMap(8); properties.put(ContentModel.PROP_OWNER, USER1); @@ -1274,7 +1300,7 @@ private void executeAdhocWorkflow(WorkflowDefinition workflowDef) assertFalse(workflowService.getWorkflowById(workflowId).isActive()); } - private String startAdhocWorkflow(WorkflowDefinition workflowDef, String assigneeId) + protected String startAdhocWorkflow(WorkflowDefinition workflowDef, String assigneeId) { // Create params Map params = new HashMap(); @@ -1309,7 +1335,14 @@ protected void onSetUpInTransaction() throws Exception this.nodeService = registry.getNodeService(); Repository repositoryHelper = (Repository) applicationContext.getBean("repositoryHelper"); this.companyHome = repositoryHelper.getCompanyHome(); - this.transactionService = registry.getTransactionService(); + try + { + this.transactionService = (TransactionServiceImpl) registry.getTransactionService(); + } + catch (ClassCastException e) + { + throw new AlfrescoRuntimeException("The AbstractWorkflowServiceIntegrationTest needs direct access to the TransactionServiceImpl"); + } MutableAuthenticationService authenticationService = registry.getAuthenticationService(); AuthorityService authorityService = registry.getAuthorityService(); diff --git a/source/java/org/alfresco/repo/workflow/StartWorkflowActionExecuterTest.java b/source/test-java/org/alfresco/repo/workflow/StartWorkflowActionExecuterTest.java similarity index 100% rename from source/java/org/alfresco/repo/workflow/StartWorkflowActionExecuterTest.java rename to source/test-java/org/alfresco/repo/workflow/StartWorkflowActionExecuterTest.java diff --git a/source/java/org/alfresco/repo/workflow/WorkflowSuiteContextShutdownTest.java b/source/test-java/org/alfresco/repo/workflow/WorkflowSuiteContextShutdownTest.java similarity index 100% rename from source/java/org/alfresco/repo/workflow/WorkflowSuiteContextShutdownTest.java rename to source/test-java/org/alfresco/repo/workflow/WorkflowSuiteContextShutdownTest.java diff --git a/source/java/org/alfresco/repo/workflow/WorkflowTestHelper.java b/source/test-java/org/alfresco/repo/workflow/WorkflowTestHelper.java similarity index 100% rename from source/java/org/alfresco/repo/workflow/WorkflowTestHelper.java rename to source/test-java/org/alfresco/repo/workflow/WorkflowTestHelper.java diff --git a/source/java/org/alfresco/repo/workflow/WorkflowTestSuite.java b/source/test-java/org/alfresco/repo/workflow/WorkflowTestSuite.java similarity index 97% rename from source/java/org/alfresco/repo/workflow/WorkflowTestSuite.java rename to source/test-java/org/alfresco/repo/workflow/WorkflowTestSuite.java index 4e288852ff3..e8994515204 100644 --- a/source/java/org/alfresco/repo/workflow/WorkflowTestSuite.java +++ b/source/test-java/org/alfresco/repo/workflow/WorkflowTestSuite.java @@ -24,8 +24,8 @@ import org.alfresco.repo.workflow.activiti.ActivitiMultitenantWorkflowTest; import org.alfresco.repo.workflow.activiti.ActivitiSpringTransactionTest; -import org.alfresco.repo.workflow.activiti.ActivitiWorkflowServiceIntegrationTest; import org.alfresco.repo.workflow.activiti.ActivitiTimerExecutionTest; +import org.alfresco.repo.workflow.activiti.ActivitiWorkflowServiceIntegrationTest; import org.alfresco.repo.workflow.jbpm.AlfrescoJavaScriptIntegrationTest; import org.alfresco.repo.workflow.jbpm.JBPMEngineTest; import org.alfresco.repo.workflow.jbpm.JBPMSpringTest; @@ -63,7 +63,7 @@ public static Test suite() suite.addTestSuite( ActivitiSpringTransactionTest.class ); suite.addTestSuite( ActivitiTimerExecutionTest.class ); - // This test will force the application context properly, which avoids + // This test will force the application context properly, which avoids // periodic wierd build failures suite.addTestSuite( WorkflowSuiteContextShutdownTest.class ); diff --git a/source/java/org/alfresco/repo/workflow/activiti/AbstractActivitiComponentTest.java b/source/test-java/org/alfresco/repo/workflow/activiti/AbstractActivitiComponentTest.java similarity index 100% rename from source/java/org/alfresco/repo/workflow/activiti/AbstractActivitiComponentTest.java rename to source/test-java/org/alfresco/repo/workflow/activiti/AbstractActivitiComponentTest.java diff --git a/source/java/org/alfresco/repo/workflow/activiti/ActivitiMultitenantWorkflowTest.java b/source/test-java/org/alfresco/repo/workflow/activiti/ActivitiMultitenantWorkflowTest.java similarity index 100% rename from source/java/org/alfresco/repo/workflow/activiti/ActivitiMultitenantWorkflowTest.java rename to source/test-java/org/alfresco/repo/workflow/activiti/ActivitiMultitenantWorkflowTest.java diff --git a/source/java/org/alfresco/repo/workflow/activiti/ActivitiSmokeTest.java b/source/test-java/org/alfresco/repo/workflow/activiti/ActivitiSmokeTest.java similarity index 100% rename from source/java/org/alfresco/repo/workflow/activiti/ActivitiSmokeTest.java rename to source/test-java/org/alfresco/repo/workflow/activiti/ActivitiSmokeTest.java diff --git a/source/java/org/alfresco/repo/workflow/activiti/ActivitiSpringTest.java b/source/test-java/org/alfresco/repo/workflow/activiti/ActivitiSpringTest.java similarity index 100% rename from source/java/org/alfresco/repo/workflow/activiti/ActivitiSpringTest.java rename to source/test-java/org/alfresco/repo/workflow/activiti/ActivitiSpringTest.java diff --git a/source/java/org/alfresco/repo/workflow/activiti/ActivitiSpringTransactionTest.java b/source/test-java/org/alfresco/repo/workflow/activiti/ActivitiSpringTransactionTest.java similarity index 100% rename from source/java/org/alfresco/repo/workflow/activiti/ActivitiSpringTransactionTest.java rename to source/test-java/org/alfresco/repo/workflow/activiti/ActivitiSpringTransactionTest.java diff --git a/source/java/org/alfresco/repo/workflow/activiti/ActivitiTaskComponentTest.java b/source/test-java/org/alfresco/repo/workflow/activiti/ActivitiTaskComponentTest.java similarity index 100% rename from source/java/org/alfresco/repo/workflow/activiti/ActivitiTaskComponentTest.java rename to source/test-java/org/alfresco/repo/workflow/activiti/ActivitiTaskComponentTest.java diff --git a/source/java/org/alfresco/repo/workflow/activiti/ActivitiTimerExecutionTest.java b/source/test-java/org/alfresco/repo/workflow/activiti/ActivitiTimerExecutionTest.java similarity index 100% rename from source/java/org/alfresco/repo/workflow/activiti/ActivitiTimerExecutionTest.java rename to source/test-java/org/alfresco/repo/workflow/activiti/ActivitiTimerExecutionTest.java diff --git a/source/java/org/alfresco/repo/workflow/activiti/ActivitiWorkflowComponentTest.java b/source/test-java/org/alfresco/repo/workflow/activiti/ActivitiWorkflowComponentTest.java similarity index 100% rename from source/java/org/alfresco/repo/workflow/activiti/ActivitiWorkflowComponentTest.java rename to source/test-java/org/alfresco/repo/workflow/activiti/ActivitiWorkflowComponentTest.java diff --git a/source/java/org/alfresco/repo/workflow/activiti/ActivitiWorkflowServiceIntegrationTest.java b/source/test-java/org/alfresco/repo/workflow/activiti/ActivitiWorkflowServiceIntegrationTest.java similarity index 100% rename from source/java/org/alfresco/repo/workflow/activiti/ActivitiWorkflowServiceIntegrationTest.java rename to source/test-java/org/alfresco/repo/workflow/activiti/ActivitiWorkflowServiceIntegrationTest.java diff --git a/source/java/org/alfresco/repo/workflow/jbpm/AlfrescoJavaScriptIntegrationTest.java b/source/test-java/org/alfresco/repo/workflow/jbpm/AlfrescoJavaScriptIntegrationTest.java similarity index 100% rename from source/java/org/alfresco/repo/workflow/jbpm/AlfrescoJavaScriptIntegrationTest.java rename to source/test-java/org/alfresco/repo/workflow/jbpm/AlfrescoJavaScriptIntegrationTest.java diff --git a/source/java/org/alfresco/repo/workflow/jbpm/JBPMEngineTest.java b/source/test-java/org/alfresco/repo/workflow/jbpm/JBPMEngineTest.java similarity index 100% rename from source/java/org/alfresco/repo/workflow/jbpm/JBPMEngineTest.java rename to source/test-java/org/alfresco/repo/workflow/jbpm/JBPMEngineTest.java diff --git a/source/java/org/alfresco/repo/workflow/jbpm/JBPMJunit4LoadTests.java b/source/test-java/org/alfresco/repo/workflow/jbpm/JBPMJunit4LoadTests.java similarity index 96% rename from source/java/org/alfresco/repo/workflow/jbpm/JBPMJunit4LoadTests.java rename to source/test-java/org/alfresco/repo/workflow/jbpm/JBPMJunit4LoadTests.java index 68fd4a6c75d..e9effbf8f13 100644 --- a/source/java/org/alfresco/repo/workflow/jbpm/JBPMJunit4LoadTests.java +++ b/source/test-java/org/alfresco/repo/workflow/jbpm/JBPMJunit4LoadTests.java @@ -1,267 +1,267 @@ -package org.alfresco.repo.workflow.jbpm; - -import java.io.Serializable; -import java.util.ArrayList; -import java.util.Date; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.alfresco.model.ContentModel; -import org.alfresco.repo.model.Repository; -import org.alfresco.repo.security.authentication.AuthenticationUtil; -import org.alfresco.repo.transaction.RetryingTransactionHelper; -import org.alfresco.repo.transaction.RetryingTransactionHelper.RetryingTransactionCallback; -import org.alfresco.repo.workflow.WorkflowModel; -import org.alfresco.service.ServiceRegistry; -import org.alfresco.service.cmr.model.FileFolderService; -import org.alfresco.service.cmr.model.FileInfo; -import org.alfresco.service.cmr.repository.ContentService; -import org.alfresco.service.cmr.repository.ContentWriter; -import org.alfresco.service.cmr.repository.NodeRef; -import org.alfresco.service.cmr.repository.NodeService; -import org.alfresco.service.cmr.workflow.WorkflowDefinition; -import org.alfresco.service.cmr.workflow.WorkflowPath; -import org.alfresco.service.cmr.workflow.WorkflowService; -import org.alfresco.service.cmr.workflow.WorkflowTask; -import org.alfresco.service.cmr.workflow.WorkflowTaskState; -import org.alfresco.service.namespace.NamespaceService; -import org.alfresco.service.namespace.QName; -import org.alfresco.util.BaseSpringTest; -import org.junit.AfterClass; -import org.junit.Test; - -/** - * This test shows a performance benefit from a usage of direct queries - * instead of creating required classes like WorkflowTask in a loop with collecting - * required properties from different services. - * - * @author arsenyko - * - */ -public class JBPMJunit4LoadTests extends BaseSpringTest -{ - - private static String WORKFLOW_NAME = "jbpm$wf:adhoc"; - private static String WORKFLOW_NODE_NAME = "workflow-test-19243cbb-c58a-485e-bcd9-2e2be030dfb9.txt"; - private static int WORKFLOW_COUNT = 2000; - - private static List workflowIds = null; - private static NodeRef rootNode = null; - - private ServiceRegistry serviceRegistry; - private RetryingTransactionHelper retryingTransactionHelper; - private static NodeService nodeService; - private static WorkflowService workflowService; - private FileFolderService fileFolderService; - - private Repository repositoryHelper; - - private JBPMEngine jbpmEngine; - - private NodeRef companyHomeNodeRef; - - public void onSetUp() throws Exception - { - serviceRegistry = (ServiceRegistry) getApplicationContext().getBean(ServiceRegistry.SERVICE_REGISTRY); - repositoryHelper = (Repository) getApplicationContext().getBean("repositoryHelper"); - jbpmEngine = (JBPMEngine) getApplicationContext().getBean("jbpm_engine"); - AuthenticationUtil.setFullyAuthenticatedUser(AuthenticationUtil.getAdminUserName()); - - retryingTransactionHelper = serviceRegistry.getRetryingTransactionHelper(); - fileFolderService = serviceRegistry.getFileFolderService(); - workflowService = serviceRegistry.getWorkflowService(); - nodeService = serviceRegistry.getNodeService(); - - companyHomeNodeRef = repositoryHelper.getCompanyHome(); - System.out.println(" -------------- "); - createWorkflowStuff(); - } - - public void createWorkflowStuff() throws Exception - { - System.out.println(" [createWorkflowStuff] Started at " + new Date().toString()); - - if (rootNode == null) - { - workflowIds =new ArrayList(); - RetryingTransactionCallback callback = new RetryingTransactionCallback(){ - - @Override - public Void execute() throws Throwable - { - FileInfo rootInfo = fileFolderService.create(companyHomeNodeRef, - WORKFLOW_NODE_NAME, - ContentModel.TYPE_FOLDER); - rootNode = rootInfo.getNodeRef(); - FileInfo contentInfo = fileFolderService.create(rootNode, - WORKFLOW_NODE_NAME, - ContentModel.TYPE_CONTENT); - NodeRef content = contentInfo.getNodeRef(); - ContentService contentService = serviceRegistry.getContentService(); - ContentWriter writer = contentService.getWriter(content, ContentModel.PROP_CONTENT, true); - writer.setMimetype("text/plain"); - writer.setEncoding("UTF-8"); - writer.putContent("many workflows many workflows many workflows many workflows many workflows many workflows many workflows many workflows"); - System.out.println(" [createWorkflowStuff] Workflow root node '" + WORKFLOW_NODE_NAME + "' has been created"); - - WorkflowDefinition wfDef = jbpmEngine.getDefinitionByName(WORKFLOW_NAME); - long startTime = new Date().getTime(); - for (Integer i = 0; i < WORKFLOW_COUNT; i++) - { - // We are creating workflows in usual way, but with new persistent objects. - // There is a some performance issue with sesssion.flash() in each iteration, - // but this was made to avoid a lot of changes in a logic related to org.alfresco.service.cmr.workflow.* - // classes. - Map properties = prepareWorkflowProperties(rootNode, content, i.toString()); - WorkflowPath path = workflowService.startWorkflow(wfDef.getId(), properties); - workflowIds.add(path.getInstance().getId()); - // jbpmEngine.startWorkflow_ALF1787(wfDef.id, prepareWorkflowProperties(fileInfo.getNodeRef(), i.toString())); - } - long endTime = new Date().getTime(); - System.out.println(" [createWorkflowStuff] Execution time (ms): " + (endTime - startTime)); - return null; - } - - }; - retryingTransactionHelper.setMaxRetries(1); - retryingTransactionHelper.doInTransaction(callback); - System.out.println(" [createWorkflowStuff] Finished at " + new Date().toString()); - } - else - { - System.out.println(" [createWorkflowStuff] Workflow node '" + WORKFLOW_NODE_NAME + "' already exists"); - } - } - - //@Test -// public void testQuery1() throws Exception -// { -// RetryingTransactionCallback callback = new RetryingTransactionCallback(){ -// -// @Override -// public Void execute() throws Throwable -// { -// JbpmTemplate jbpmTemplate = (JbpmTemplate) applicationContext.getBean("jbpm_template"); -// List result = (List) jbpmTemplate.execute(new JbpmCallback() -// { -// public List doInJbpm(JbpmContext context) -// { -// Session session = context.getSession(); -// Query query = session.getNamedQuery("org.alfresco.repo.workflow.findTaskInstancesByActorId"); -// return query.setString("actorId", "admin").list(); -// } -// }); -// for(Object[] ti : result) -// { -// System.out.println(Arrays.toString(ti)); -// } -// System.out.println(result.size()); -// return null; -// } -// }; -// retryingTransactionHelper.setMaxRetries(1); -// retryingTransactionHelper.doInTransaction(callback); -// } - - @Test - public void testGetAssignedTasks_NEW() throws Exception - { - final int RUN_COUNT = 7; - RetryingTransactionCallback callback = new RetryingTransactionCallback(){ - - @Override - public Void execute() throws Throwable - { - Date beginTime = new Date(); - System.out.println(" [testGetAssignedTasks_NEW] Started at " + beginTime.toString()); - List tasks = workflowService.getAssignedTasks("admin", WorkflowTaskState.IN_PROGRESS); - Date endTime = new Date(); - System.out.println(" [testGetAssignedTasks_NEW] Retrieved tasks: " + tasks.size() + " in " + (endTime.getTime() - beginTime.getTime()) + " ms"); - System.out.println(" [testGetAssignedTasks_NEW] Finished at " + endTime.toString()); - return null; - } - }; - retryingTransactionHelper.setMaxRetries(1); - for(int i=0; i callback = new RetryingTransactionCallback(){ - - @Override - public Void execute() throws Throwable - { - Date beginTime = new Date(); - System.out.println(" [testGetAssignedTasks_OLD] Started at " + beginTime.toString()); - List tasks = jbpmEngine.getAssignedTasks_OLD("admin", WorkflowTaskState.IN_PROGRESS); - Date endTime = new Date(); - System.out.println(" [testGetAssignedTasks_OLD] Retrieved tasks: " + tasks.size() + " in " + (endTime.getTime() - beginTime.getTime()) + " ms"); - System.out.println(" [testGetAssignedTasks_OLD] Finished at " + new Date().toString()); - return null; - } - }; - retryingTransactionHelper.setMaxRetries(1); - retryingTransactionHelper.doInTransaction(callback); - } - */ - - public void onTearDown() throws Exception - { - System.out.println(" -------------- "); - } - - private Map prepareWorkflowProperties(NodeRef root, NodeRef content, String id) - { - NodeRef packageRef = makePackage(root, content, id); - Map parameters = new HashMap(); - parameters.put(WorkflowModel.ASSOC_PACKAGE, packageRef); - parameters.put(WorkflowModel.ASSOC_ASSIGNEE, "admin"); - parameters.put(WorkflowModel.PROP_WORKFLOW_DESCRIPTION, "Test workflow '" + id + "'"); - parameters.put(WorkflowModel.PROP_WORKFLOW_DEFINITION_NAME, "test_workflow_" + id); - return parameters; - - } - - /** - * @param root - * @param content - * @param id - * @return - */ - private NodeRef makePackage(NodeRef root, NodeRef content, String id) - { - NodeRef container = fileFolderService.create(root, "package"+id, ContentModel.TYPE_FOLDER).getNodeRef(); - NodeRef packageRef = workflowService.createPackage(container); - nodeService.addChild(packageRef, content, ContentModel.ASSOC_CONTAINS, - QName.createQName(NamespaceService.DEFAULT_URI, id)); - return packageRef; - } - - @AfterClass - public static void cleanup() - { - // Clean up workflows - if(workflowIds !=null) - { - for (String wfId : workflowIds) - { - try - { - workflowService.cancelWorkflow(wfId); - } - catch(Exception e) - { - //NOOP - } - } - } - nodeService.deleteNode(rootNode); - } - -} +package org.alfresco.repo.workflow.jbpm; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.alfresco.model.ContentModel; +import org.alfresco.repo.model.Repository; +import org.alfresco.repo.security.authentication.AuthenticationUtil; +import org.alfresco.repo.transaction.RetryingTransactionHelper; +import org.alfresco.repo.transaction.RetryingTransactionHelper.RetryingTransactionCallback; +import org.alfresco.repo.workflow.WorkflowModel; +import org.alfresco.service.ServiceRegistry; +import org.alfresco.service.cmr.model.FileFolderService; +import org.alfresco.service.cmr.model.FileInfo; +import org.alfresco.service.cmr.repository.ContentService; +import org.alfresco.service.cmr.repository.ContentWriter; +import org.alfresco.service.cmr.repository.NodeRef; +import org.alfresco.service.cmr.repository.NodeService; +import org.alfresco.service.cmr.workflow.WorkflowDefinition; +import org.alfresco.service.cmr.workflow.WorkflowPath; +import org.alfresco.service.cmr.workflow.WorkflowService; +import org.alfresco.service.cmr.workflow.WorkflowTask; +import org.alfresco.service.cmr.workflow.WorkflowTaskState; +import org.alfresco.service.namespace.NamespaceService; +import org.alfresco.service.namespace.QName; +import org.alfresco.util.BaseSpringTest; +import org.junit.AfterClass; +import org.junit.Test; + +/** + * This test shows a performance benefit from a usage of direct queries + * instead of creating required classes like WorkflowTask in a loop with collecting + * required properties from different services. + * + * @author arsenyko + * + */ +public class JBPMJunit4LoadTests extends BaseSpringTest +{ + + private static String WORKFLOW_NAME = "jbpm$wf:adhoc"; + private static String WORKFLOW_NODE_NAME = "workflow-test-19243cbb-c58a-485e-bcd9-2e2be030dfb9.txt"; + private static int WORKFLOW_COUNT = 2000; + + private static List workflowIds = null; + private static NodeRef rootNode = null; + + private ServiceRegistry serviceRegistry; + private RetryingTransactionHelper retryingTransactionHelper; + private static NodeService nodeService; + private static WorkflowService workflowService; + private FileFolderService fileFolderService; + + private Repository repositoryHelper; + + private JBPMEngine jbpmEngine; + + private NodeRef companyHomeNodeRef; + + public void onSetUp() throws Exception + { + serviceRegistry = (ServiceRegistry) getApplicationContext().getBean(ServiceRegistry.SERVICE_REGISTRY); + repositoryHelper = (Repository) getApplicationContext().getBean("repositoryHelper"); + jbpmEngine = (JBPMEngine) getApplicationContext().getBean("jbpm_engine"); + AuthenticationUtil.setFullyAuthenticatedUser(AuthenticationUtil.getAdminUserName()); + + retryingTransactionHelper = serviceRegistry.getTransactionService().getRetryingTransactionHelper(); + fileFolderService = serviceRegistry.getFileFolderService(); + workflowService = serviceRegistry.getWorkflowService(); + nodeService = serviceRegistry.getNodeService(); + + companyHomeNodeRef = repositoryHelper.getCompanyHome(); + System.out.println(" -------------- "); + createWorkflowStuff(); + } + + public void createWorkflowStuff() throws Exception + { + System.out.println(" [createWorkflowStuff] Started at " + new Date().toString()); + + if (rootNode == null) + { + workflowIds =new ArrayList(); + RetryingTransactionCallback callback = new RetryingTransactionCallback(){ + + @Override + public Void execute() throws Throwable + { + FileInfo rootInfo = fileFolderService.create(companyHomeNodeRef, + WORKFLOW_NODE_NAME, + ContentModel.TYPE_FOLDER); + rootNode = rootInfo.getNodeRef(); + FileInfo contentInfo = fileFolderService.create(rootNode, + WORKFLOW_NODE_NAME, + ContentModel.TYPE_CONTENT); + NodeRef content = contentInfo.getNodeRef(); + ContentService contentService = serviceRegistry.getContentService(); + ContentWriter writer = contentService.getWriter(content, ContentModel.PROP_CONTENT, true); + writer.setMimetype("text/plain"); + writer.setEncoding("UTF-8"); + writer.putContent("many workflows many workflows many workflows many workflows many workflows many workflows many workflows many workflows"); + System.out.println(" [createWorkflowStuff] Workflow root node '" + WORKFLOW_NODE_NAME + "' has been created"); + + WorkflowDefinition wfDef = jbpmEngine.getDefinitionByName(WORKFLOW_NAME); + long startTime = new Date().getTime(); + for (Integer i = 0; i < WORKFLOW_COUNT; i++) + { + // We are creating workflows in usual way, but with new persistent objects. + // There is a some performance issue with sesssion.flash() in each iteration, + // but this was made to avoid a lot of changes in a logic related to org.alfresco.service.cmr.workflow.* + // classes. + Map properties = prepareWorkflowProperties(rootNode, content, i.toString()); + WorkflowPath path = workflowService.startWorkflow(wfDef.getId(), properties); + workflowIds.add(path.getInstance().getId()); + // jbpmEngine.startWorkflow_ALF1787(wfDef.id, prepareWorkflowProperties(fileInfo.getNodeRef(), i.toString())); + } + long endTime = new Date().getTime(); + System.out.println(" [createWorkflowStuff] Execution time (ms): " + (endTime - startTime)); + return null; + } + + }; + retryingTransactionHelper.setMaxRetries(1); + retryingTransactionHelper.doInTransaction(callback); + System.out.println(" [createWorkflowStuff] Finished at " + new Date().toString()); + } + else + { + System.out.println(" [createWorkflowStuff] Workflow node '" + WORKFLOW_NODE_NAME + "' already exists"); + } + } + + //@Test +// public void testQuery1() throws Exception +// { +// RetryingTransactionCallback callback = new RetryingTransactionCallback(){ +// +// @Override +// public Void execute() throws Throwable +// { +// JbpmTemplate jbpmTemplate = (JbpmTemplate) applicationContext.getBean("jbpm_template"); +// List result = (List) jbpmTemplate.execute(new JbpmCallback() +// { +// public List doInJbpm(JbpmContext context) +// { +// Session session = context.getSession(); +// Query query = session.getNamedQuery("org.alfresco.repo.workflow.findTaskInstancesByActorId"); +// return query.setString("actorId", "admin").list(); +// } +// }); +// for(Object[] ti : result) +// { +// System.out.println(Arrays.toString(ti)); +// } +// System.out.println(result.size()); +// return null; +// } +// }; +// retryingTransactionHelper.setMaxRetries(1); +// retryingTransactionHelper.doInTransaction(callback); +// } + + @Test + public void testGetAssignedTasks_NEW() throws Exception + { + final int RUN_COUNT = 7; + RetryingTransactionCallback callback = new RetryingTransactionCallback(){ + + @Override + public Void execute() throws Throwable + { + Date beginTime = new Date(); + System.out.println(" [testGetAssignedTasks_NEW] Started at " + beginTime.toString()); + List tasks = workflowService.getAssignedTasks("admin", WorkflowTaskState.IN_PROGRESS); + Date endTime = new Date(); + System.out.println(" [testGetAssignedTasks_NEW] Retrieved tasks: " + tasks.size() + " in " + (endTime.getTime() - beginTime.getTime()) + " ms"); + System.out.println(" [testGetAssignedTasks_NEW] Finished at " + endTime.toString()); + return null; + } + }; + retryingTransactionHelper.setMaxRetries(1); + for(int i=0; i callback = new RetryingTransactionCallback(){ + + @Override + public Void execute() throws Throwable + { + Date beginTime = new Date(); + System.out.println(" [testGetAssignedTasks_OLD] Started at " + beginTime.toString()); + List tasks = jbpmEngine.getAssignedTasks_OLD("admin", WorkflowTaskState.IN_PROGRESS); + Date endTime = new Date(); + System.out.println(" [testGetAssignedTasks_OLD] Retrieved tasks: " + tasks.size() + " in " + (endTime.getTime() - beginTime.getTime()) + " ms"); + System.out.println(" [testGetAssignedTasks_OLD] Finished at " + new Date().toString()); + return null; + } + }; + retryingTransactionHelper.setMaxRetries(1); + retryingTransactionHelper.doInTransaction(callback); + } + */ + + public void onTearDown() throws Exception + { + System.out.println(" -------------- "); + } + + private Map prepareWorkflowProperties(NodeRef root, NodeRef content, String id) + { + NodeRef packageRef = makePackage(root, content, id); + Map parameters = new HashMap(); + parameters.put(WorkflowModel.ASSOC_PACKAGE, packageRef); + parameters.put(WorkflowModel.ASSOC_ASSIGNEE, "admin"); + parameters.put(WorkflowModel.PROP_WORKFLOW_DESCRIPTION, "Test workflow '" + id + "'"); + parameters.put(WorkflowModel.PROP_WORKFLOW_DEFINITION_NAME, "test_workflow_" + id); + return parameters; + + } + + /** + * @param root + * @param content + * @param id + * @return + */ + private NodeRef makePackage(NodeRef root, NodeRef content, String id) + { + NodeRef container = fileFolderService.create(root, "package"+id, ContentModel.TYPE_FOLDER).getNodeRef(); + NodeRef packageRef = workflowService.createPackage(container); + nodeService.addChild(packageRef, content, ContentModel.ASSOC_CONTAINS, + QName.createQName(NamespaceService.DEFAULT_URI, id)); + return packageRef; + } + + @AfterClass + public static void cleanup() + { + // Clean up workflows + if(workflowIds !=null) + { + for (String wfId : workflowIds) + { + try + { + workflowService.cancelWorkflow(wfId); + } + catch(Exception e) + { + //NOOP + } + } + } + nodeService.deleteNode(rootNode); + } + +} diff --git a/source/java/org/alfresco/repo/workflow/jbpm/JBPMSpringTest.java b/source/test-java/org/alfresco/repo/workflow/jbpm/JBPMSpringTest.java similarity index 100% rename from source/java/org/alfresco/repo/workflow/jbpm/JBPMSpringTest.java rename to source/test-java/org/alfresco/repo/workflow/jbpm/JBPMSpringTest.java diff --git a/source/java/org/alfresco/repo/workflow/jbpm/JbpmMultitenantWorkflowTest.java b/source/test-java/org/alfresco/repo/workflow/jbpm/JbpmMultitenantWorkflowTest.java similarity index 100% rename from source/java/org/alfresco/repo/workflow/jbpm/JbpmMultitenantWorkflowTest.java rename to source/test-java/org/alfresco/repo/workflow/jbpm/JbpmMultitenantWorkflowTest.java diff --git a/source/java/org/alfresco/repo/workflow/jbpm/JbpmTimerTest.java b/source/test-java/org/alfresco/repo/workflow/jbpm/JbpmTimerTest.java similarity index 100% rename from source/java/org/alfresco/repo/workflow/jbpm/JbpmTimerTest.java rename to source/test-java/org/alfresco/repo/workflow/jbpm/JbpmTimerTest.java diff --git a/source/java/org/alfresco/repo/workflow/jbpm/JbpmWorkflowServiceIntegrationTest.java b/source/test-java/org/alfresco/repo/workflow/jbpm/JbpmWorkflowServiceIntegrationTest.java similarity index 100% rename from source/java/org/alfresco/repo/workflow/jbpm/JbpmWorkflowServiceIntegrationTest.java rename to source/test-java/org/alfresco/repo/workflow/jbpm/JbpmWorkflowServiceIntegrationTest.java diff --git a/source/java/org/alfresco/repo/workflow/jbpm/ReviewAndApproveTest.java b/source/test-java/org/alfresco/repo/workflow/jbpm/ReviewAndApproveTest.java similarity index 100% rename from source/java/org/alfresco/repo/workflow/jbpm/ReviewAndApproveTest.java rename to source/test-java/org/alfresco/repo/workflow/jbpm/ReviewAndApproveTest.java diff --git a/source/test-java/org/alfresco/service/cmr/calendar/CalendarRecurrenceHelperTest.java b/source/test-java/org/alfresco/service/cmr/calendar/CalendarRecurrenceHelperTest.java new file mode 100644 index 00000000000..d0925a57566 --- /dev/null +++ b/source/test-java/org/alfresco/service/cmr/calendar/CalendarRecurrenceHelperTest.java @@ -0,0 +1,107 @@ +/* + * Copyright (C) 2005-2013 Alfresco Software Limited. + * + * This file is part of Alfresco + * + * Alfresco is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Alfresco 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 Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Alfresco. If not, see . + */ +package org.alfresco.service.cmr.calendar; + +import static org.junit.Assert.*; + +import java.util.HashMap; +import java.util.Map; + +import org.junit.Test; + +/** + * Tests for the {@link CalendarRecurrenceHelper} class. + * + * @author Matt Ward + */ +public class CalendarRecurrenceHelperTest +{ + @Test + public void fixOutlookRecurrenceQuirks_GenuineMonthlyRecurrenceParamsLeftAsIs() + { + Map in = Params.fromKVPs("BYMONTHDAY=24", "FREQ=MONTHLY", "INTERVAL=1"); + Map out = CalendarRecurrenceHelper.fixOutlookRecurrenceQuirks(Params.fromMap(in)); + + // A monthly recurring event specified correctly, will remain untouched. + assertEquals(in, out); + // Double check we're not just comparing in with itself. + assertNotSame(in, out); + } + + /** + * ALF-18928: Yearly recurring event specified incorrectly (as monthly) by outlook. + */ + @Test + public void fixOutlookRecurrenceQuirks_MonthlyRecurrenceThatShouldBeYearly() + { + Map in = Params.fromKVPs("BYMONTHDAY=25", "FREQ=MONTHLY", "INTERVAL=24", "BYMONTH=7"); + Map out = CalendarRecurrenceHelper.fixOutlookRecurrenceQuirks(Params.fromMap(in)); + + // A yearly recurring event that has been incorrectly specified as monthly, is fixed up. + // Note FREQ and INTERVAL have been corrected. + assertEquals(Params.fromKVPs("BYMONTHDAY=25", "FREQ=YEARLY", "INTERVAL=2", "BYMONTH=7"), out); + } + + @Test + public void fixOutlookRecurrenceQuirks_YearlyRecurrenceParamsLeftAsIs() + { + Map in = Params.fromKVPs("BYMONTHDAY=25", "FREQ=YEARLY", "INTERVAL=2", "BYMONTH=7"); + Map out = CalendarRecurrenceHelper.fixOutlookRecurrenceQuirks(Params.fromMap(in)); + + // A yearly recurring event specified correctly, will remain untouched. + assertEquals(in, out); + // Double check we're not just comparing in with itself. + assertNotSame(in, out); + } + + + /** + * Inner class just here to make the tests more readable. + */ + private static class Params extends HashMap + { + private static final long serialVersionUID = 1648766671461600951L; + + private Params() + { + } + + private Params(Map params) + { + super(params); + } + + private static Params fromMap(Map params) + { + return new Params(params); + } + + private static Params fromKVPs(String... keyValuePairs) + { + Params params = new Params(); + for (String kvp : keyValuePairs) + { + String[] split = kvp.split("="); + assertEquals("Key/value pair is not valid: " + kvp, 2, split.length); + params.put(split[0], split[1]); + } + return params; + } + } +} diff --git a/source/java/org/alfresco/service/cmr/calendar/CalendarTimezoneHelperTest.java b/source/test-java/org/alfresco/service/cmr/calendar/CalendarTimezoneHelperTest.java similarity index 100% rename from source/java/org/alfresco/service/cmr/calendar/CalendarTimezoneHelperTest.java rename to source/test-java/org/alfresco/service/cmr/calendar/CalendarTimezoneHelperTest.java diff --git a/source/java/org/alfresco/service/cmr/repository/TemporalSourceOptionsTest.java b/source/test-java/org/alfresco/service/cmr/repository/TemporalSourceOptionsTest.java similarity index 100% rename from source/java/org/alfresco/service/cmr/repository/TemporalSourceOptionsTest.java rename to source/test-java/org/alfresco/service/cmr/repository/TemporalSourceOptionsTest.java diff --git a/source/java/org/alfresco/service/cmr/repository/TransformationOptionLimitsTest.java b/source/test-java/org/alfresco/service/cmr/repository/TransformationOptionLimitsTest.java similarity index 100% rename from source/java/org/alfresco/service/cmr/repository/TransformationOptionLimitsTest.java rename to source/test-java/org/alfresco/service/cmr/repository/TransformationOptionLimitsTest.java diff --git a/source/java/org/alfresco/service/cmr/repository/TransformationOptionPairTest.java b/source/test-java/org/alfresco/service/cmr/repository/TransformationOptionPairTest.java similarity index 100% rename from source/java/org/alfresco/service/cmr/repository/TransformationOptionPairTest.java rename to source/test-java/org/alfresco/service/cmr/repository/TransformationOptionPairTest.java diff --git a/source/java/org/alfresco/tools/RenameUserTest.java b/source/test-java/org/alfresco/tools/RenameUserTest.java similarity index 100% rename from source/java/org/alfresco/tools/RenameUserTest.java rename to source/test-java/org/alfresco/tools/RenameUserTest.java diff --git a/source/java/org/alfresco/util/BaseAlfrescoSpringTest.java b/source/test-java/org/alfresco/util/BaseAlfrescoSpringTest.java similarity index 100% rename from source/java/org/alfresco/util/BaseAlfrescoSpringTest.java rename to source/test-java/org/alfresco/util/BaseAlfrescoSpringTest.java diff --git a/source/java/org/alfresco/util/BaseAlfrescoTestCase.java b/source/test-java/org/alfresco/util/BaseAlfrescoTestCase.java similarity index 100% rename from source/java/org/alfresco/util/BaseAlfrescoTestCase.java rename to source/test-java/org/alfresco/util/BaseAlfrescoTestCase.java diff --git a/source/java/org/alfresco/util/BaseSpringTest.java b/source/test-java/org/alfresco/util/BaseSpringTest.java similarity index 100% rename from source/java/org/alfresco/util/BaseSpringTest.java rename to source/test-java/org/alfresco/util/BaseSpringTest.java diff --git a/source/java/org/alfresco/util/DynamicallySizedThreadPoolExecutorTest.java b/source/test-java/org/alfresco/util/DynamicallySizedThreadPoolExecutorTest.java similarity index 100% rename from source/java/org/alfresco/util/DynamicallySizedThreadPoolExecutorTest.java rename to source/test-java/org/alfresco/util/DynamicallySizedThreadPoolExecutorTest.java diff --git a/source/java/org/alfresco/util/FileNameValidatorTest.java b/source/test-java/org/alfresco/util/FileNameValidatorTest.java similarity index 100% rename from source/java/org/alfresco/util/FileNameValidatorTest.java rename to source/test-java/org/alfresco/util/FileNameValidatorTest.java diff --git a/source/java/org/alfresco/util/JSONtoFmModelTest.java b/source/test-java/org/alfresco/util/JSONtoFmModelTest.java similarity index 100% rename from source/java/org/alfresco/util/JSONtoFmModelTest.java rename to source/test-java/org/alfresco/util/JSONtoFmModelTest.java diff --git a/source/java/org/alfresco/util/ModelUtilTest.java b/source/test-java/org/alfresco/util/ModelUtilTest.java similarity index 100% rename from source/java/org/alfresco/util/ModelUtilTest.java rename to source/test-java/org/alfresco/util/ModelUtilTest.java diff --git a/source/java/org/alfresco/util/PropertyMapTest.java b/source/test-java/org/alfresco/util/PropertyMapTest.java similarity index 100% rename from source/java/org/alfresco/util/PropertyMapTest.java rename to source/test-java/org/alfresco/util/PropertyMapTest.java diff --git a/source/java/org/alfresco/util/RetryingTransactionHelperTestCase.java b/source/test-java/org/alfresco/util/RetryingTransactionHelperTestCase.java similarity index 100% rename from source/java/org/alfresco/util/RetryingTransactionHelperTestCase.java rename to source/test-java/org/alfresco/util/RetryingTransactionHelperTestCase.java diff --git a/source/java/org/alfresco/util/TestWithUserUtils.java b/source/test-java/org/alfresco/util/TestWithUserUtils.java similarity index 100% rename from source/java/org/alfresco/util/TestWithUserUtils.java rename to source/test-java/org/alfresco/util/TestWithUserUtils.java diff --git a/source/java/org/alfresco/util/ValueProtectingMapTest.java b/source/test-java/org/alfresco/util/ValueProtectingMapTest.java similarity index 100% rename from source/java/org/alfresco/util/ValueProtectingMapTest.java rename to source/test-java/org/alfresco/util/ValueProtectingMapTest.java diff --git a/source/java/org/alfresco/util/debug/OutputSpacesStoreSystemTest.java b/source/test-java/org/alfresco/util/debug/OutputSpacesStoreSystemTest.java similarity index 100% rename from source/java/org/alfresco/util/debug/OutputSpacesStoreSystemTest.java rename to source/test-java/org/alfresco/util/debug/OutputSpacesStoreSystemTest.java diff --git a/source/java/org/alfresco/util/json/ExceptionJsonSerializerTest.java b/source/test-java/org/alfresco/util/json/ExceptionJsonSerializerTest.java similarity index 100% rename from source/java/org/alfresco/util/json/ExceptionJsonSerializerTest.java rename to source/test-java/org/alfresco/util/json/ExceptionJsonSerializerTest.java diff --git a/source/java/org/alfresco/util/schemacomp/DbObjectXMLTransformerTest.java b/source/test-java/org/alfresco/util/schemacomp/DbObjectXMLTransformerTest.java similarity index 100% rename from source/java/org/alfresco/util/schemacomp/DbObjectXMLTransformerTest.java rename to source/test-java/org/alfresco/util/schemacomp/DbObjectXMLTransformerTest.java diff --git a/source/java/org/alfresco/util/schemacomp/DbPropertyTest.java b/source/test-java/org/alfresco/util/schemacomp/DbPropertyTest.java similarity index 100% rename from source/java/org/alfresco/util/schemacomp/DbPropertyTest.java rename to source/test-java/org/alfresco/util/schemacomp/DbPropertyTest.java diff --git a/source/java/org/alfresco/util/schemacomp/DbToXMLTest.java b/source/test-java/org/alfresco/util/schemacomp/DbToXMLTest.java similarity index 100% rename from source/java/org/alfresco/util/schemacomp/DbToXMLTest.java rename to source/test-java/org/alfresco/util/schemacomp/DbToXMLTest.java diff --git a/source/java/org/alfresco/util/schemacomp/DefaultComparisonUtilsTest.java b/source/test-java/org/alfresco/util/schemacomp/DefaultComparisonUtilsTest.java similarity index 100% rename from source/java/org/alfresco/util/schemacomp/DefaultComparisonUtilsTest.java rename to source/test-java/org/alfresco/util/schemacomp/DefaultComparisonUtilsTest.java diff --git a/source/java/org/alfresco/util/schemacomp/DifferenceTest.java b/source/test-java/org/alfresco/util/schemacomp/DifferenceTest.java similarity index 100% rename from source/java/org/alfresco/util/schemacomp/DifferenceTest.java rename to source/test-java/org/alfresco/util/schemacomp/DifferenceTest.java diff --git a/source/java/org/alfresco/util/schemacomp/ExportDbTest.java b/source/test-java/org/alfresco/util/schemacomp/ExportDbTest.java similarity index 100% rename from source/java/org/alfresco/util/schemacomp/ExportDbTest.java rename to source/test-java/org/alfresco/util/schemacomp/ExportDbTest.java diff --git a/source/java/org/alfresco/util/schemacomp/MultiFileDumperTest.java b/source/test-java/org/alfresco/util/schemacomp/MultiFileDumperTest.java similarity index 100% rename from source/java/org/alfresco/util/schemacomp/MultiFileDumperTest.java rename to source/test-java/org/alfresco/util/schemacomp/MultiFileDumperTest.java diff --git a/source/java/org/alfresco/util/schemacomp/RedundantDbObjectTest.java b/source/test-java/org/alfresco/util/schemacomp/RedundantDbObjectTest.java similarity index 100% rename from source/java/org/alfresco/util/schemacomp/RedundantDbObjectTest.java rename to source/test-java/org/alfresco/util/schemacomp/RedundantDbObjectTest.java diff --git a/source/java/org/alfresco/util/schemacomp/SchemaCompPackageTestSuite.java b/source/test-java/org/alfresco/util/schemacomp/SchemaCompPackageTestSuite.java similarity index 100% rename from source/java/org/alfresco/util/schemacomp/SchemaCompPackageTestSuite.java rename to source/test-java/org/alfresco/util/schemacomp/SchemaCompPackageTestSuite.java diff --git a/source/java/org/alfresco/util/schemacomp/SchemaCompTestSuite.java b/source/test-java/org/alfresco/util/schemacomp/SchemaCompTestSuite.java similarity index 100% rename from source/java/org/alfresco/util/schemacomp/SchemaCompTestSuite.java rename to source/test-java/org/alfresco/util/schemacomp/SchemaCompTestSuite.java diff --git a/source/java/org/alfresco/util/schemacomp/SchemaCompTestingUtils.java b/source/test-java/org/alfresco/util/schemacomp/SchemaCompTestingUtils.java similarity index 100% rename from source/java/org/alfresco/util/schemacomp/SchemaCompTestingUtils.java rename to source/test-java/org/alfresco/util/schemacomp/SchemaCompTestingUtils.java diff --git a/source/java/org/alfresco/util/schemacomp/SchemaComparatorTest.java b/source/test-java/org/alfresco/util/schemacomp/SchemaComparatorTest.java similarity index 100% rename from source/java/org/alfresco/util/schemacomp/SchemaComparatorTest.java rename to source/test-java/org/alfresco/util/schemacomp/SchemaComparatorTest.java diff --git a/source/java/org/alfresco/util/schemacomp/SchemaReferenceFileTest.java b/source/test-java/org/alfresco/util/schemacomp/SchemaReferenceFileTest.java similarity index 93% rename from source/java/org/alfresco/util/schemacomp/SchemaReferenceFileTest.java rename to source/test-java/org/alfresco/util/schemacomp/SchemaReferenceFileTest.java index 8a556c6e320..fd0d11cfc51 100644 --- a/source/java/org/alfresco/util/schemacomp/SchemaReferenceFileTest.java +++ b/source/test-java/org/alfresco/util/schemacomp/SchemaReferenceFileTest.java @@ -21,9 +21,8 @@ import static org.junit.Assert.fail; -import java.io.CharArrayWriter; +import java.io.ByteArrayOutputStream; import java.io.PrintWriter; -import java.io.Writer; import org.alfresco.repo.domain.schema.SchemaBootstrap; import org.alfresco.util.ApplicationContextHelper; @@ -68,7 +67,7 @@ public void tearDown() @Test public void checkReferenceFile() { - Writer buff = new CharArrayWriter(1024); + ByteArrayOutputStream buff = new ByteArrayOutputStream(); PrintWriter out = new PrintWriter(buff); int numProblems = schemaBootstrap.validateSchema(null, out); out.flush(); diff --git a/source/java/org/alfresco/util/schemacomp/SchemaToXMLTest.java b/source/test-java/org/alfresco/util/schemacomp/SchemaToXMLTest.java similarity index 100% rename from source/java/org/alfresco/util/schemacomp/SchemaToXMLTest.java rename to source/test-java/org/alfresco/util/schemacomp/SchemaToXMLTest.java diff --git a/source/java/org/alfresco/util/schemacomp/ValidatingVisitorTest.java b/source/test-java/org/alfresco/util/schemacomp/ValidatingVisitorTest.java similarity index 100% rename from source/java/org/alfresco/util/schemacomp/ValidatingVisitorTest.java rename to source/test-java/org/alfresco/util/schemacomp/ValidatingVisitorTest.java diff --git a/source/java/org/alfresco/util/schemacomp/ValidationResultTest.java b/source/test-java/org/alfresco/util/schemacomp/ValidationResultTest.java similarity index 100% rename from source/java/org/alfresco/util/schemacomp/ValidationResultTest.java rename to source/test-java/org/alfresco/util/schemacomp/ValidationResultTest.java diff --git a/source/java/org/alfresco/util/schemacomp/XMLToSchemaTest.java b/source/test-java/org/alfresco/util/schemacomp/XMLToSchemaTest.java similarity index 100% rename from source/java/org/alfresco/util/schemacomp/XMLToSchemaTest.java rename to source/test-java/org/alfresco/util/schemacomp/XMLToSchemaTest.java diff --git a/source/java/org/alfresco/util/schemacomp/model/AbstractDbObjectTest.java b/source/test-java/org/alfresco/util/schemacomp/model/AbstractDbObjectTest.java similarity index 100% rename from source/java/org/alfresco/util/schemacomp/model/AbstractDbObjectTest.java rename to source/test-java/org/alfresco/util/schemacomp/model/AbstractDbObjectTest.java diff --git a/source/java/org/alfresco/util/schemacomp/model/ColumnTest.java b/source/test-java/org/alfresco/util/schemacomp/model/ColumnTest.java similarity index 100% rename from source/java/org/alfresco/util/schemacomp/model/ColumnTest.java rename to source/test-java/org/alfresco/util/schemacomp/model/ColumnTest.java diff --git a/source/java/org/alfresco/util/schemacomp/model/DbObjectTestBase.java b/source/test-java/org/alfresco/util/schemacomp/model/DbObjectTestBase.java similarity index 100% rename from source/java/org/alfresco/util/schemacomp/model/DbObjectTestBase.java rename to source/test-java/org/alfresco/util/schemacomp/model/DbObjectTestBase.java diff --git a/source/java/org/alfresco/util/schemacomp/model/ForeignKeyTest.java b/source/test-java/org/alfresco/util/schemacomp/model/ForeignKeyTest.java similarity index 100% rename from source/java/org/alfresco/util/schemacomp/model/ForeignKeyTest.java rename to source/test-java/org/alfresco/util/schemacomp/model/ForeignKeyTest.java diff --git a/source/java/org/alfresco/util/schemacomp/model/IndexTest.java b/source/test-java/org/alfresco/util/schemacomp/model/IndexTest.java similarity index 100% rename from source/java/org/alfresco/util/schemacomp/model/IndexTest.java rename to source/test-java/org/alfresco/util/schemacomp/model/IndexTest.java diff --git a/source/java/org/alfresco/util/schemacomp/model/ModelTestSuite.java b/source/test-java/org/alfresco/util/schemacomp/model/ModelTestSuite.java similarity index 100% rename from source/java/org/alfresco/util/schemacomp/model/ModelTestSuite.java rename to source/test-java/org/alfresco/util/schemacomp/model/ModelTestSuite.java diff --git a/source/java/org/alfresco/util/schemacomp/model/PrimaryKeyTest.java b/source/test-java/org/alfresco/util/schemacomp/model/PrimaryKeyTest.java similarity index 100% rename from source/java/org/alfresco/util/schemacomp/model/PrimaryKeyTest.java rename to source/test-java/org/alfresco/util/schemacomp/model/PrimaryKeyTest.java diff --git a/source/java/org/alfresco/util/schemacomp/model/SchemaTest.java b/source/test-java/org/alfresco/util/schemacomp/model/SchemaTest.java similarity index 100% rename from source/java/org/alfresco/util/schemacomp/model/SchemaTest.java rename to source/test-java/org/alfresco/util/schemacomp/model/SchemaTest.java diff --git a/source/java/org/alfresco/util/schemacomp/model/SequenceTest.java b/source/test-java/org/alfresco/util/schemacomp/model/SequenceTest.java similarity index 100% rename from source/java/org/alfresco/util/schemacomp/model/SequenceTest.java rename to source/test-java/org/alfresco/util/schemacomp/model/SequenceTest.java diff --git a/source/java/org/alfresco/util/schemacomp/model/TableTest.java b/source/test-java/org/alfresco/util/schemacomp/model/TableTest.java similarity index 100% rename from source/java/org/alfresco/util/schemacomp/model/TableTest.java rename to source/test-java/org/alfresco/util/schemacomp/model/TableTest.java diff --git a/source/java/org/alfresco/util/schemacomp/test/exportdb/AbstractExportTester.java b/source/test-java/org/alfresco/util/schemacomp/test/exportdb/AbstractExportTester.java similarity index 100% rename from source/java/org/alfresco/util/schemacomp/test/exportdb/AbstractExportTester.java rename to source/test-java/org/alfresco/util/schemacomp/test/exportdb/AbstractExportTester.java diff --git a/source/java/org/alfresco/util/schemacomp/test/exportdb/MySQLDialectExportTester.java b/source/test-java/org/alfresco/util/schemacomp/test/exportdb/MySQLDialectExportTester.java similarity index 100% rename from source/java/org/alfresco/util/schemacomp/test/exportdb/MySQLDialectExportTester.java rename to source/test-java/org/alfresco/util/schemacomp/test/exportdb/MySQLDialectExportTester.java diff --git a/source/java/org/alfresco/util/schemacomp/test/exportdb/PostgreSQLDialectExportTester.java b/source/test-java/org/alfresco/util/schemacomp/test/exportdb/PostgreSQLDialectExportTester.java similarity index 100% rename from source/java/org/alfresco/util/schemacomp/test/exportdb/PostgreSQLDialectExportTester.java rename to source/test-java/org/alfresco/util/schemacomp/test/exportdb/PostgreSQLDialectExportTester.java diff --git a/source/test-java/org/alfresco/util/schemacomp/validator/IndexColumnsValidatorTest.java b/source/test-java/org/alfresco/util/schemacomp/validator/IndexColumnsValidatorTest.java new file mode 100644 index 00000000000..4b326ca3b14 --- /dev/null +++ b/source/test-java/org/alfresco/util/schemacomp/validator/IndexColumnsValidatorTest.java @@ -0,0 +1,103 @@ +/* + * Copyright (C) 2005-2013 Alfresco Software Limited. + * + * This file is part of Alfresco + * + * Alfresco is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Alfresco 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 Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Alfresco. If not, see . + */ +package org.alfresco.util.schemacomp.validator; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.fail; + +import java.util.Arrays; +import java.util.regex.Pattern; + +import org.alfresco.error.AlfrescoRuntimeException; +import org.alfresco.util.schemacomp.DiffContext; +import org.alfresco.util.schemacomp.Results; +import org.alfresco.util.schemacomp.ValidationResult; +import org.alfresco.util.schemacomp.model.Index; +import org.alfresco.util.schemacomp.model.Table; +import org.hibernate.dialect.Oracle10gDialect; +import org.junit.Before; +import org.junit.Test; + +/** + * Tests for the IndexColumnsValidator class. + * + * @author pavel.yurkevich + */ +public class IndexColumnsValidatorTest +{ + private IndexColumnsValidator validator; + private DiffContext ctx; + private Results validationResults; + + @Before + public void setUp() throws Exception + { + validator = new IndexColumnsValidator(); + validationResults = new Results(); + ctx = new DiffContext(new Oracle10gDialect(), validationResults, null, null); + } + + @Test + public void testNonIndex() + { + validator.setPattern(Pattern.compile("SYS_NC.+")); + assertEquals("SYS_NC.+", validator.getPattern().toString()); + + try + { + validator.validate(null, new Table("SYS_NC234234"), ctx); + fail("Validator should faile for non-index object"); + } + catch (AlfrescoRuntimeException e) + { + // expected to fail for table object + } + } + + @Test + public void testAllOk() + { + validator.setPattern(Pattern.compile("SYS_NC.+")); + assertEquals("SYS_NC.+", validator.getPattern().toString()); + + validator.validate(indexForColumns("SYS_NC234234", "SYS_NC654123"), indexForColumns("SYS_NC123123", "SYS_NC225588"), ctx); + assertEquals(0, validationResults.size()); + } + + @Test + public void testNotValid() + { + validator.setPattern(Pattern.compile("SYS_NC.+")); + assertEquals("SYS_NC.+", validator.getPattern().toString()); + + Index target = indexForColumns("TEST_INDEX1", "SYS_NC892345", "MY_INDEX"); + + validator.validate(indexForColumns("SYS_NC234234", "SYS_NC654123"), target, ctx); + assertEquals(3, validationResults.size()); + + assertEquals("TEST_INDEX1", ((ValidationResult) validationResults.get(0)).getValue()); + assertEquals("MY_INDEX", ((ValidationResult) validationResults.get(1)).getValue()); + assertEquals(target.getColumnNames(), ((ValidationResult) validationResults.get(2)).getValue()); + } + + private Index indexForColumns(String ... names) + { + return new Index(null, null, Arrays.asList(names)); + } +} diff --git a/source/java/org/alfresco/util/schemacomp/validator/NameValidatorTest.java b/source/test-java/org/alfresco/util/schemacomp/validator/NameValidatorTest.java similarity index 100% rename from source/java/org/alfresco/util/schemacomp/validator/NameValidatorTest.java rename to source/test-java/org/alfresco/util/schemacomp/validator/NameValidatorTest.java diff --git a/source/java/org/alfresco/util/schemacomp/validator/SchemaVersionValidatorTest.java b/source/test-java/org/alfresco/util/schemacomp/validator/SchemaVersionValidatorTest.java similarity index 100% rename from source/java/org/alfresco/util/schemacomp/validator/SchemaVersionValidatorTest.java rename to source/test-java/org/alfresco/util/schemacomp/validator/SchemaVersionValidatorTest.java diff --git a/source/java/org/alfresco/util/schemacomp/validator/ValidatorTestSuite.java b/source/test-java/org/alfresco/util/schemacomp/validator/ValidatorTestSuite.java similarity index 100% rename from source/java/org/alfresco/util/schemacomp/validator/ValidatorTestSuite.java rename to source/test-java/org/alfresco/util/schemacomp/validator/ValidatorTestSuite.java diff --git a/source/java/org/alfresco/util/test/junitrules/AbstractAlfrescoPersonTest.java b/source/test-java/org/alfresco/util/test/junitrules/AbstractAlfrescoPersonTest.java similarity index 100% rename from source/java/org/alfresco/util/test/junitrules/AbstractAlfrescoPersonTest.java rename to source/test-java/org/alfresco/util/test/junitrules/AbstractAlfrescoPersonTest.java diff --git a/source/java/org/alfresco/util/test/junitrules/AbstractPersonRule.java b/source/test-java/org/alfresco/util/test/junitrules/AbstractPersonRule.java similarity index 100% rename from source/java/org/alfresco/util/test/junitrules/AbstractPersonRule.java rename to source/test-java/org/alfresco/util/test/junitrules/AbstractPersonRule.java diff --git a/source/java/org/alfresco/util/test/junitrules/AbstractRule.java b/source/test-java/org/alfresco/util/test/junitrules/AbstractRule.java similarity index 100% rename from source/java/org/alfresco/util/test/junitrules/AbstractRule.java rename to source/test-java/org/alfresco/util/test/junitrules/AbstractRule.java diff --git a/source/java/org/alfresco/util/test/junitrules/AlfrescoPeople.java b/source/test-java/org/alfresco/util/test/junitrules/AlfrescoPeople.java similarity index 100% rename from source/java/org/alfresco/util/test/junitrules/AlfrescoPeople.java rename to source/test-java/org/alfresco/util/test/junitrules/AlfrescoPeople.java diff --git a/source/java/org/alfresco/util/test/junitrules/AlfrescoPerson.java b/source/test-java/org/alfresco/util/test/junitrules/AlfrescoPerson.java similarity index 100% rename from source/java/org/alfresco/util/test/junitrules/AlfrescoPerson.java rename to source/test-java/org/alfresco/util/test/junitrules/AlfrescoPerson.java diff --git a/source/java/org/alfresco/util/test/junitrules/AlfrescoPersonTest.java b/source/test-java/org/alfresco/util/test/junitrules/AlfrescoPersonTest.java similarity index 100% rename from source/java/org/alfresco/util/test/junitrules/AlfrescoPersonTest.java rename to source/test-java/org/alfresco/util/test/junitrules/AlfrescoPersonTest.java diff --git a/source/java/org/alfresco/util/test/junitrules/AlfrescoTenant.java b/source/test-java/org/alfresco/util/test/junitrules/AlfrescoTenant.java similarity index 100% rename from source/java/org/alfresco/util/test/junitrules/AlfrescoTenant.java rename to source/test-java/org/alfresco/util/test/junitrules/AlfrescoTenant.java diff --git a/source/java/org/alfresco/util/test/junitrules/ApplicationContextInit.java b/source/test-java/org/alfresco/util/test/junitrules/ApplicationContextInit.java similarity index 100% rename from source/java/org/alfresco/util/test/junitrules/ApplicationContextInit.java rename to source/test-java/org/alfresco/util/test/junitrules/ApplicationContextInit.java diff --git a/source/java/org/alfresco/util/test/junitrules/ApplicationContextInitTest.java b/source/test-java/org/alfresco/util/test/junitrules/ApplicationContextInitTest.java similarity index 100% rename from source/java/org/alfresco/util/test/junitrules/ApplicationContextInitTest.java rename to source/test-java/org/alfresco/util/test/junitrules/ApplicationContextInitTest.java diff --git a/source/java/org/alfresco/util/test/junitrules/LoadTestRule.java b/source/test-java/org/alfresco/util/test/junitrules/LoadTestRule.java similarity index 100% rename from source/java/org/alfresco/util/test/junitrules/LoadTestRule.java rename to source/test-java/org/alfresco/util/test/junitrules/LoadTestRule.java diff --git a/source/java/org/alfresco/util/test/junitrules/RunAsFullyAuthenticatedRule.java b/source/test-java/org/alfresco/util/test/junitrules/RunAsFullyAuthenticatedRule.java similarity index 100% rename from source/java/org/alfresco/util/test/junitrules/RunAsFullyAuthenticatedRule.java rename to source/test-java/org/alfresco/util/test/junitrules/RunAsFullyAuthenticatedRule.java diff --git a/source/java/org/alfresco/util/test/junitrules/TemporaryMockOverride.java b/source/test-java/org/alfresco/util/test/junitrules/TemporaryMockOverride.java similarity index 100% rename from source/java/org/alfresco/util/test/junitrules/TemporaryMockOverride.java rename to source/test-java/org/alfresco/util/test/junitrules/TemporaryMockOverride.java diff --git a/source/java/org/alfresco/util/test/junitrules/TemporaryMockOverrideTest.java b/source/test-java/org/alfresco/util/test/junitrules/TemporaryMockOverrideTest.java similarity index 100% rename from source/java/org/alfresco/util/test/junitrules/TemporaryMockOverrideTest.java rename to source/test-java/org/alfresco/util/test/junitrules/TemporaryMockOverrideTest.java diff --git a/source/java/org/alfresco/util/test/junitrules/TemporaryModels.java b/source/test-java/org/alfresco/util/test/junitrules/TemporaryModels.java similarity index 100% rename from source/java/org/alfresco/util/test/junitrules/TemporaryModels.java rename to source/test-java/org/alfresco/util/test/junitrules/TemporaryModels.java diff --git a/source/java/org/alfresco/util/test/junitrules/TemporaryNodes.java b/source/test-java/org/alfresco/util/test/junitrules/TemporaryNodes.java similarity index 100% rename from source/java/org/alfresco/util/test/junitrules/TemporaryNodes.java rename to source/test-java/org/alfresco/util/test/junitrules/TemporaryNodes.java diff --git a/source/java/org/alfresco/util/test/junitrules/TemporaryNodesTest.java b/source/test-java/org/alfresco/util/test/junitrules/TemporaryNodesTest.java similarity index 100% rename from source/java/org/alfresco/util/test/junitrules/TemporaryNodesTest.java rename to source/test-java/org/alfresco/util/test/junitrules/TemporaryNodesTest.java diff --git a/source/java/org/alfresco/util/test/junitrules/TemporarySites.java b/source/test-java/org/alfresco/util/test/junitrules/TemporarySites.java similarity index 100% rename from source/java/org/alfresco/util/test/junitrules/TemporarySites.java rename to source/test-java/org/alfresco/util/test/junitrules/TemporarySites.java diff --git a/source/java/org/alfresco/util/test/junitrules/TemporarySitesTest.java b/source/test-java/org/alfresco/util/test/junitrules/TemporarySitesTest.java similarity index 95% rename from source/java/org/alfresco/util/test/junitrules/TemporarySitesTest.java rename to source/test-java/org/alfresco/util/test/junitrules/TemporarySitesTest.java index e4e94fe54dc..01e3e2bbfae 100644 --- a/source/java/org/alfresco/util/test/junitrules/TemporarySitesTest.java +++ b/source/test-java/org/alfresco/util/test/junitrules/TemporarySitesTest.java @@ -93,9 +93,11 @@ public class TemporarySitesTest @Before public void createTestContent() { // Create some test content - testSite1 = testSites.createSite("sitePreset", "testSite1", "t", "d", SiteVisibility.PUBLIC, AuthenticationUtil.getAdminUserName()); + final String guid = GUID.generate(); + + testSite1 = testSites.createSite("sitePreset", "testSite1_" + guid, "t", "d", SiteVisibility.PUBLIC, AuthenticationUtil.getAdminUserName()); final QName subSiteType = QName.createQName("testsite", "testSubsite", NAMESPACE_SERVICE); - testSite2 = testSites.createSite("sitePreset", "testSite2", "T", "D", SiteVisibility.PUBLIC, subSiteType, AuthenticationUtil.getAdminUserName()); + testSite2 = testSites.createSite("sitePreset", "testSite2_" + guid, "T", "D", SiteVisibility.PUBLIC, subSiteType, AuthenticationUtil.getAdminUserName()); testSiteWithMembers = testSites.createTestSiteWithUserPerRole(GUID.generate(), "sitePreset", SiteVisibility.PUBLIC, AuthenticationUtil.getAdminUserName()); } diff --git a/source/java/org/alfresco/util/test/junitrules/TenantPerson.java b/source/test-java/org/alfresco/util/test/junitrules/TenantPerson.java similarity index 100% rename from source/java/org/alfresco/util/test/junitrules/TenantPerson.java rename to source/test-java/org/alfresco/util/test/junitrules/TenantPerson.java diff --git a/source/java/org/alfresco/util/test/junitrules/WellKnownNodes.java b/source/test-java/org/alfresco/util/test/junitrules/WellKnownNodes.java similarity index 100% rename from source/java/org/alfresco/util/test/junitrules/WellKnownNodes.java rename to source/test-java/org/alfresco/util/test/junitrules/WellKnownNodes.java diff --git a/source/java/org/alfresco/util/test/junitrules/package-info.java b/source/test-java/org/alfresco/util/test/junitrules/package-info.java similarity index 74% rename from source/java/org/alfresco/util/test/junitrules/package-info.java rename to source/test-java/org/alfresco/util/test/junitrules/package-info.java index 3d95d16c84c..1c0f8ea37c9 100644 --- a/source/java/org/alfresco/util/test/junitrules/package-info.java +++ b/source/test-java/org/alfresco/util/test/junitrules/package-info.java @@ -1,4 +1,7 @@ /** * This package contains JUnit rules intended for use in testing Alfresco. */ +@PackageMarker package org.alfresco.util.test.junitrules; +import org.alfresco.util.PackageMarker; + diff --git a/source/java/org/alfresco/util/test/testusers/TestUserComponent.java b/source/test-java/org/alfresco/util/test/testusers/TestUserComponent.java similarity index 100% rename from source/java/org/alfresco/util/test/testusers/TestUserComponent.java rename to source/test-java/org/alfresco/util/test/testusers/TestUserComponent.java diff --git a/source/java/org/alfresco/util/test/testusers/TestUserComponentImpl.java b/source/test-java/org/alfresco/util/test/testusers/TestUserComponentImpl.java similarity index 100% rename from source/java/org/alfresco/util/test/testusers/TestUserComponentImpl.java rename to source/test-java/org/alfresco/util/test/testusers/TestUserComponentImpl.java diff --git a/source/java/org/alfresco/wcm/AbstractWCMServiceImplTest.java b/source/test-java/org/alfresco/wcm/AbstractWCMServiceImplTest.java similarity index 100% rename from source/java/org/alfresco/wcm/AbstractWCMServiceImplTest.java rename to source/test-java/org/alfresco/wcm/AbstractWCMServiceImplTest.java diff --git a/source/java/org/alfresco/wcm/WCMAspectTest.java b/source/test-java/org/alfresco/wcm/WCMAspectTest.java similarity index 100% rename from source/java/org/alfresco/wcm/WCMAspectTest.java rename to source/test-java/org/alfresco/wcm/WCMAspectTest.java diff --git a/source/java/org/alfresco/wcm/WCMConcurrentTest.java b/source/test-java/org/alfresco/wcm/WCMConcurrentTest.java similarity index 100% rename from source/java/org/alfresco/wcm/WCMConcurrentTest.java rename to source/test-java/org/alfresco/wcm/WCMConcurrentTest.java diff --git a/source/java/org/alfresco/wcm/WCMTestSuite.java b/source/test-java/org/alfresco/wcm/WCMTestSuite.java similarity index 100% rename from source/java/org/alfresco/wcm/WCMTestSuite.java rename to source/test-java/org/alfresco/wcm/WCMTestSuite.java diff --git a/source/java/org/alfresco/wcm/asset/AssetServiceImplTest.java b/source/test-java/org/alfresco/wcm/asset/AssetServiceImplTest.java similarity index 100% rename from source/java/org/alfresco/wcm/asset/AssetServiceImplTest.java rename to source/test-java/org/alfresco/wcm/asset/AssetServiceImplTest.java diff --git a/source/java/org/alfresco/wcm/preview/PreviewURIServiceImplTest.java b/source/test-java/org/alfresco/wcm/preview/PreviewURIServiceImplTest.java similarity index 100% rename from source/java/org/alfresco/wcm/preview/PreviewURIServiceImplTest.java rename to source/test-java/org/alfresco/wcm/preview/PreviewURIServiceImplTest.java diff --git a/source/java/org/alfresco/wcm/sandbox/SandboxServiceImplTest.java b/source/test-java/org/alfresco/wcm/sandbox/SandboxServiceImplTest.java similarity index 100% rename from source/java/org/alfresco/wcm/sandbox/SandboxServiceImplTest.java rename to source/test-java/org/alfresco/wcm/sandbox/SandboxServiceImplTest.java diff --git a/source/java/org/alfresco/wcm/webproject/WebProjectServiceImplTest.java b/source/test-java/org/alfresco/wcm/webproject/WebProjectServiceImplTest.java similarity index 100% rename from source/java/org/alfresco/wcm/webproject/WebProjectServiceImplTest.java rename to source/test-java/org/alfresco/wcm/webproject/WebProjectServiceImplTest.java diff --git a/source/java/org/alfresco/wcm/webproject/script/ScriptWebProjectsTest.java b/source/test-java/org/alfresco/wcm/webproject/script/ScriptWebProjectsTest.java similarity index 100% rename from source/java/org/alfresco/wcm/webproject/script/ScriptWebProjectsTest.java rename to source/test-java/org/alfresco/wcm/webproject/script/ScriptWebProjectsTest.java diff --git a/source/test-resources/alfresco/ibatis/ibatis-test-context.xml b/source/test-resources/alfresco/ibatis/ibatis-test-context.xml new file mode 100644 index 00000000000..fc8c0a5d63a --- /dev/null +++ b/source/test-resources/alfresco/ibatis/ibatis-test-context.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + classpath:alfresco/ibatis/org.hibernate.dialect.Dialect/query-test-common-SqlMap.xml + + + + classpath:alfresco/ibatis/alfresco-SqlMapConfig.xml + + + + + + + + + + + + + + \ No newline at end of file diff --git a/config/alfresco/ibatis/org.hibernate.dialect.Dialect/query-test-common-SqlMap.xml b/source/test-resources/alfresco/ibatis/org.hibernate.dialect.Dialect/query-test-common-SqlMap.xml similarity index 84% rename from config/alfresco/ibatis/org.hibernate.dialect.Dialect/query-test-common-SqlMap.xml rename to source/test-resources/alfresco/ibatis/org.hibernate.dialect.Dialect/query-test-common-SqlMap.xml index 10e35b7d2ba..346229f3147 100644 --- a/config/alfresco/ibatis/org.hibernate.dialect.Dialect/query-test-common-SqlMap.xml +++ b/source/test-resources/alfresco/ibatis/org.hibernate.dialect.Dialect/query-test-common-SqlMap.xml @@ -30,7 +30,7 @@ - select count(*) from @@ -43,7 +43,7 @@ JUNKED - select mimetype_str from @@ -56,7 +56,7 @@ JUNKED - select ca.child_node_id from @@ -69,7 +69,7 @@ ca.parent_node_id - - select ca.child_node_id from diff --git a/source/test-resources/alfresco/metadata/MetadataExtracterLimitsTest-MockDelayedMetadataExtracter.properties b/source/test-resources/alfresco/metadata/MetadataExtracterLimitsTest-MockDelayedMetadataExtracter.properties new file mode 100644 index 00000000000..95c5408b3ca --- /dev/null +++ b/source/test-resources/alfresco/metadata/MetadataExtracterLimitsTest-MockDelayedMetadataExtracter.properties @@ -0,0 +1,9 @@ +# +# Dummy - default mapping +# +# Namespaces +namespace.prefix.cm=http://www.alfresco.org/model/content/1.0 +namespace.prefix.dum=http://DummyMappingMetadataExtracter + +# Mappings +a=dum:a1,dum:a2,dum:a3 diff --git a/source/test-resources/alfresco/scripts/email/cronjob_test.txt b/source/test-resources/alfresco/scripts/email/cronjob_test.txt new file mode 100644 index 00000000000..b7e025a6fa4 --- /dev/null +++ b/source/test-resources/alfresco/scripts/email/cronjob_test.txt @@ -0,0 +1,45 @@ +https://issues.alfresco.com/jira/browse/MNT-8776 + +Cronjob sending emails fails when « System » is used, it causes FTL model.person=null when sending mails + +To reproduce, configure a « CronScheduledQueryBasedTemplateActionDefinition » + + +UNTIL_FIRST_FAILURE + +.. + ++TYPE:"cm:folder" +@cm\:name:"Gepubliceerd" + +.. + +System + + +You need a script called by CronScheduledQueryBasedTemplateActionDefinition that execute the MailAcionExecuter : +function notifyIntranetGroup(content) { +if(SENT_NOTIFICATION_EMAILS == true) { +var mail = actions.create("mail"); +mail.parameters.to = SENT_NOTIFICATION_ADRESS; +mail.parameters.subject = "[INFO][NEW][NEWS] " + content.properties["cm:name"]; +mail.parameters.text = "Een nieuw nieuwsbericht werd toegevoegd."; +var notificationTemplate = search.luceneSearch("@cm +:name:'notify_new_document_email.ftl'"); +if(notificationTemplate.length >= 1) { +if(notificationTemplate[0].name == "notify_new_document_email.ftl") +{ mail.parameters.template = notificationTemplate[0]; } +} +mail.execute(content); +} +} +THE FTL notify_new_document_email.ftl must exist as well in your repo. +-------------------------------------- +A new document '$ +{document.name} +', is available in the '$ +{space.name} +' space, it was added by $ +{person.properties.firstName} +<#if person.properties.lastName?exists> $ +{person.properties.lastName} +. \ No newline at end of file diff --git a/source/test-resources/alfresco/scripts/email/mail_test.js b/source/test-resources/alfresco/scripts/email/mail_test.js new file mode 100644 index 00000000000..1be73b4fd34 --- /dev/null +++ b/source/test-resources/alfresco/scripts/email/mail_test.js @@ -0,0 +1,15 @@ +function notifyIntranetGroup(content) { +var mail = actions.create("mail"); +mail.parameters.to = "wasa@alfresco.com"; +mail.parameters.subject = "[INFO][NEW][NEWS] " + content.properties["cm:name"]; +mail.parameters.text = "Een nieuw nieuwsbericht werd toegevoegd."; +var notificationTemplate = search.luceneSearch("@cm\\:name:'notify_new_document_email.ftl'"); +if(notificationTemplate.length >= 1) { +if(notificationTemplate[0].name == "notify_new_document_email.ftl") +{ mail.parameters.template = notificationTemplate[0]; } +} +mail.execute(content); +} + +var content = search.luceneSearch("@cm\\:name:'cronjob_test.txt'")[0]; +notifyIntranetGroup(content); \ No newline at end of file diff --git a/source/test-resources/alfresco/scripts/email/notify_new_document_email.ftl b/source/test-resources/alfresco/scripts/email/notify_new_document_email.ftl new file mode 100644 index 00000000000..8fec7a7ad73 --- /dev/null +++ b/source/test-resources/alfresco/scripts/email/notify_new_document_email.ftl @@ -0,0 +1,4 @@ +A new document '${document.name}', is available in the '${space.name}' space, it was added by ${person.properties.firstName} +<#if person.properties.lastName?exists> +${person.properties.lastName} + \ No newline at end of file diff --git a/source/test-resources/alfresco/scripts/email/test-scheduled-action-services-context.xml b/source/test-resources/alfresco/scripts/email/test-scheduled-action-services-context.xml new file mode 100644 index 00000000000..42ed6e5db3f --- /dev/null +++ b/source/test-resources/alfresco/scripts/email/test-scheduled-action-services-context.xml @@ -0,0 +1,98 @@ + + + + + + + + + + + + + + + + + script + + + + + + + + + + + + + + + + + + + + + UNTIL_FIRST_FAILURE + + + IGNORE + + + + + + + + + lucene + + + + workspace://SpacesStore + + + + + +TYPE:"cm:folder" +@cm\:name:"Gepubliceerd" + + + 0 50 * * * ? + + + jobE + + + jobGroup + + + triggerE + + + triggerGroup + + + + + + + + + + + + + + + + + + System + + + + diff --git a/source/test-resources/bulkimport1/folder1.metadata.properties.xml b/source/test-resources/bulkimport1/folder1.metadata.properties.xml new file mode 100644 index 00000000000..6f73a080621 --- /dev/null +++ b/source/test-resources/bulkimport1/folder1.metadata.properties.xml @@ -0,0 +1,9 @@ + + + + + + folder1 + folder1 + + diff --git a/source/test-resources/filesys/ContentComparatorTestExcel2003-4.xls b/source/test-resources/filesys/ContentComparatorTestExcel2003-4.xls new file mode 100644 index 00000000000..927ddcc5833 Binary files /dev/null and b/source/test-resources/filesys/ContentComparatorTestExcel2003-4.xls differ diff --git a/source/test-resources/filesys/ContentComparatorTestExcel2003-5.xls b/source/test-resources/filesys/ContentComparatorTestExcel2003-5.xls new file mode 100644 index 00000000000..fef3e1fb812 Binary files /dev/null and b/source/test-resources/filesys/ContentComparatorTestExcel2003-5.xls differ diff --git a/source/test-resources/opencmis/opencmistest-context.xml b/source/test-resources/opencmis/opencmistest-context.xml new file mode 100644 index 00000000000..b1a213e4719 --- /dev/null +++ b/source/test-resources/opencmis/opencmistest-context.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/source/java/org/alfresco/cmis/search/CMIS-query-test-model.xml b/source/test-resources/org/alfresco/cmis/search/CMIS-query-test-model.xml similarity index 100% rename from source/java/org/alfresco/cmis/search/CMIS-query-test-model.xml rename to source/test-resources/org/alfresco/cmis/search/CMIS-query-test-model.xml diff --git a/source/java/org/alfresco/jcr/tck/testExcludeList.txt b/source/test-resources/org/alfresco/jcr/tck/testExcludeList.txt similarity index 100% rename from source/java/org/alfresco/jcr/tck/testExcludeList.txt rename to source/test-resources/org/alfresco/jcr/tck/testExcludeList.txt diff --git a/source/java/org/alfresco/jcr/test/docview.xml b/source/test-resources/org/alfresco/jcr/test/docview.xml similarity index 100% rename from source/java/org/alfresco/jcr/test/docview.xml rename to source/test-resources/org/alfresco/jcr/test/docview.xml diff --git a/source/java/org/alfresco/jcr/test/myModel.xml b/source/test-resources/org/alfresco/jcr/test/myModel.xml similarity index 100% rename from source/java/org/alfresco/jcr/test/myModel.xml rename to source/test-resources/org/alfresco/jcr/test/myModel.xml diff --git a/source/java/org/alfresco/jcr/test/sysview.xml b/source/test-resources/org/alfresco/jcr/test/sysview.xml similarity index 100% rename from source/java/org/alfresco/jcr/test/sysview.xml rename to source/test-resources/org/alfresco/jcr/test/sysview.xml diff --git a/source/java/org/alfresco/jcr/test/test-context.xml b/source/test-resources/org/alfresco/jcr/test/test-context.xml similarity index 100% rename from source/java/org/alfresco/jcr/test/test-context.xml rename to source/test-resources/org/alfresco/jcr/test/test-context.xml diff --git a/source/java/org/alfresco/jcr/test/testContent.txt b/source/test-resources/org/alfresco/jcr/test/testContent.txt similarity index 100% rename from source/java/org/alfresco/jcr/test/testContent.txt rename to source/test-resources/org/alfresco/jcr/test/testContent.txt diff --git a/source/java/org/alfresco/jcr/test/testData.xml b/source/test-resources/org/alfresco/jcr/test/testData.xml similarity index 100% rename from source/java/org/alfresco/jcr/test/testData.xml rename to source/test-resources/org/alfresco/jcr/test/testData.xml diff --git a/source/java/org/alfresco/jcr/test/testModel.xml b/source/test-resources/org/alfresco/jcr/test/testModel.xml similarity index 100% rename from source/java/org/alfresco/jcr/test/testModel.xml rename to source/test-resources/org/alfresco/jcr/test/testModel.xml diff --git a/source/java/org/alfresco/jcr/test/testQuick.jpg b/source/test-resources/org/alfresco/jcr/test/testQuick.jpg similarity index 100% rename from source/java/org/alfresco/jcr/test/testQuick.jpg rename to source/test-resources/org/alfresco/jcr/test/testQuick.jpg diff --git a/source/java/org/alfresco/repo/action/script/test_actionTrackingService.js b/source/test-resources/org/alfresco/repo/action/script/test_actionTrackingService.js similarity index 100% rename from source/java/org/alfresco/repo/action/script/test_actionTrackingService.js rename to source/test-resources/org/alfresco/repo/action/script/test_actionTrackingService.js diff --git a/source/java/org/alfresco/repo/action/test-action-services-context.xml b/source/test-resources/org/alfresco/repo/action/test-action-services-context.xml similarity index 100% rename from source/java/org/alfresco/repo/action/test-action-services-context.xml rename to source/test-resources/org/alfresco/repo/action/test-action-services-context.xml diff --git a/source/java/org/alfresco/repo/activities/script/test_activityService.js b/source/test-resources/org/alfresco/repo/activities/script/test_activityService.js similarity index 100% rename from source/java/org/alfresco/repo/activities/script/test_activityService.js rename to source/test-resources/org/alfresco/repo/activities/script/test_activityService.js diff --git a/source/java/org/alfresco/repo/content/transform/FailoverContentTransformerTest-context.xml b/source/test-resources/org/alfresco/repo/content/transform/FailoverContentTransformerTest-context.xml similarity index 100% rename from source/java/org/alfresco/repo/content/transform/FailoverContentTransformerTest-context.xml rename to source/test-resources/org/alfresco/repo/content/transform/FailoverContentTransformerTest-context.xml diff --git a/source/java/org/alfresco/repo/forms/script/test_formService.js b/source/test-resources/org/alfresco/repo/forms/script/test_formService.js similarity index 100% rename from source/java/org/alfresco/repo/forms/script/test_formService.js rename to source/test-resources/org/alfresco/repo/forms/script/test_formService.js diff --git a/source/java/org/alfresco/repo/importer/importercomponent_test.xml b/source/test-resources/org/alfresco/repo/importer/importercomponent_test.xml similarity index 100% rename from source/java/org/alfresco/repo/importer/importercomponent_test.xml rename to source/test-resources/org/alfresco/repo/importer/importercomponent_test.xml diff --git a/source/java/org/alfresco/repo/importer/importercomponent_testfile.txt b/source/test-resources/org/alfresco/repo/importer/importercomponent_testfile.txt similarity index 100% rename from source/java/org/alfresco/repo/importer/importercomponent_testfile.txt rename to source/test-resources/org/alfresco/repo/importer/importercomponent_testfile.txt diff --git a/source/java/org/alfresco/repo/jscript/test-context.xml b/source/test-resources/org/alfresco/repo/jscript/test-context.xml similarity index 100% rename from source/java/org/alfresco/repo/jscript/test-context.xml rename to source/test-resources/org/alfresco/repo/jscript/test-context.xml diff --git a/source/java/org/alfresco/repo/jscript/test_childbynameparents.js b/source/test-resources/org/alfresco/repo/jscript/test_childbynameparents.js similarity index 100% rename from source/java/org/alfresco/repo/jscript/test_childbynameparents.js rename to source/test-resources/org/alfresco/repo/jscript/test_childbynameparents.js diff --git a/source/java/org/alfresco/repo/jscript/test_childfilefolders.js b/source/test-resources/org/alfresco/repo/jscript/test_childfilefolders.js similarity index 100% rename from source/java/org/alfresco/repo/jscript/test_childfilefolders.js rename to source/test-resources/org/alfresco/repo/jscript/test_childfilefolders.js diff --git a/source/java/org/alfresco/repo/jscript/test_onAddAspect_cmCountable.js b/source/test-resources/org/alfresco/repo/jscript/test_onAddAspect_cmCountable.js similarity index 100% rename from source/java/org/alfresco/repo/jscript/test_onAddAspect_cmCountable.js rename to source/test-resources/org/alfresco/repo/jscript/test_onAddAspect_cmCountable.js diff --git a/source/java/org/alfresco/repo/jscript/test_onCreateChildAssociation.js b/source/test-resources/org/alfresco/repo/jscript/test_onCreateChildAssociation.js similarity index 100% rename from source/java/org/alfresco/repo/jscript/test_onCreateChildAssociation.js rename to source/test-resources/org/alfresco/repo/jscript/test_onCreateChildAssociation.js diff --git a/source/java/org/alfresco/repo/jscript/test_onCreateNode_cmContent.js b/source/test-resources/org/alfresco/repo/jscript/test_onCreateNode_cmContent.js similarity index 100% rename from source/java/org/alfresco/repo/jscript/test_onCreateNode_cmContent.js rename to source/test-resources/org/alfresco/repo/jscript/test_onCreateNode_cmContent.js diff --git a/source/java/org/alfresco/repo/jscript/test_script1.js b/source/test-resources/org/alfresco/repo/jscript/test_script1.js similarity index 100% rename from source/java/org/alfresco/repo/jscript/test_script1.js rename to source/test-resources/org/alfresco/repo/jscript/test_script1.js diff --git a/source/java/org/alfresco/repo/jscript/test_script2.js b/source/test-resources/org/alfresco/repo/jscript/test_script2.js similarity index 100% rename from source/java/org/alfresco/repo/jscript/test_script2.js rename to source/test-resources/org/alfresco/repo/jscript/test_script2.js diff --git a/source/java/org/alfresco/repo/jscript/test_script3.js b/source/test-resources/org/alfresco/repo/jscript/test_script3.js similarity index 100% rename from source/java/org/alfresco/repo/jscript/test_script3.js rename to source/test-resources/org/alfresco/repo/jscript/test_script3.js diff --git a/source/java/org/alfresco/repo/model/filefolder/testModel.xml b/source/test-resources/org/alfresco/repo/model/filefolder/testModel.xml similarity index 100% rename from source/java/org/alfresco/repo/model/filefolder/testModel.xml rename to source/test-resources/org/alfresco/repo/model/filefolder/testModel.xml diff --git a/source/java/org/alfresco/repo/node/BaseNodeServiceTest_model.xml b/source/test-resources/org/alfresco/repo/node/BaseNodeServiceTest_model.xml similarity index 100% rename from source/java/org/alfresco/repo/node/BaseNodeServiceTest_model.xml rename to source/test-resources/org/alfresco/repo/node/BaseNodeServiceTest_model.xml diff --git a/source/java/org/alfresco/repo/node/NodeRefTestModel.xml b/source/test-resources/org/alfresco/repo/node/NodeRefTestModel.xml similarity index 100% rename from source/java/org/alfresco/repo/node/NodeRefTestModel.xml rename to source/test-resources/org/alfresco/repo/node/NodeRefTestModel.xml diff --git a/source/java/org/alfresco/repo/node/getchildren/testModel.xml b/source/test-resources/org/alfresco/repo/node/getchildren/testModel.xml similarity index 100% rename from source/java/org/alfresco/repo/node/getchildren/testModel.xml rename to source/test-resources/org/alfresco/repo/node/getchildren/testModel.xml diff --git a/source/java/org/alfresco/repo/node/integrity/IntegrityTest_model.xml b/source/test-resources/org/alfresco/repo/node/integrity/IntegrityTest_model.xml similarity index 100% rename from source/java/org/alfresco/repo/node/integrity/IntegrityTest_model.xml rename to source/test-resources/org/alfresco/repo/node/integrity/IntegrityTest_model.xml diff --git a/source/java/org/alfresco/repo/policy/policycomponenttest_model.xml b/source/test-resources/org/alfresco/repo/policy/policycomponenttest_model.xml similarity index 100% rename from source/java/org/alfresco/repo/policy/policycomponenttest_model.xml rename to source/test-resources/org/alfresco/repo/policy/policycomponenttest_model.xml diff --git a/source/java/org/alfresco/repo/preference/script/test_preferenceService.js b/source/test-resources/org/alfresco/repo/preference/script/test_preferenceService.js similarity index 100% rename from source/java/org/alfresco/repo/preference/script/test_preferenceService.js rename to source/test-resources/org/alfresco/repo/preference/script/test_preferenceService.js diff --git a/source/java/org/alfresco/repo/publishing/test/publishing-test-context.xml b/source/test-resources/org/alfresco/repo/publishing/test/publishing-test-context.xml similarity index 100% rename from source/java/org/alfresco/repo/publishing/test/publishing-test-context.xml rename to source/test-resources/org/alfresco/repo/publishing/test/publishing-test-context.xml diff --git a/source/java/org/alfresco/repo/rating/script/test_ratingService.js b/source/test-resources/org/alfresco/repo/rating/script/test_ratingService.js similarity index 88% rename from source/java/org/alfresco/repo/rating/script/test_ratingService.js rename to source/test-resources/org/alfresco/repo/rating/script/test_ratingService.js index 38201a300bd..cb42c719b38 100644 --- a/source/java/org/alfresco/repo/rating/script/test_ratingService.js +++ b/source/test-resources/org/alfresco/repo/rating/script/test_ratingService.js @@ -1,9 +1,11 @@ function testRatingSchemes() { var schemeNames = ratingService.getRatingSchemeNames(); - test.assertEquals(2, schemeNames.length); - test.assertEquals('likesRatingScheme', schemeNames[0]); - test.assertEquals('fiveStarRatingScheme', schemeNames[1]); + test.assertTrue(schemeNames.length > 2); + test.assertEquals('fiveStarRatingScheme', schemeNames[0]); + test.assertEquals('likesRatingScheme', schemeNames[1]); + // This one is only visible in test code. + test.assertEquals('spinalTapRatingScheme', schemeNames[2]); test.assertEquals(1, ratingService.getMin('likesRatingScheme')); test.assertEquals(1, ratingService.getMax('likesRatingScheme')); diff --git a/source/java/org/alfresco/repo/rendition/renditionTestTemplate.ftl b/source/test-resources/org/alfresco/repo/rendition/renditionTestTemplate.ftl similarity index 100% rename from source/java/org/alfresco/repo/rendition/renditionTestTemplate.ftl rename to source/test-resources/org/alfresco/repo/rendition/renditionTestTemplate.ftl diff --git a/source/java/org/alfresco/repo/rendition/script/test_renditionService.js b/source/test-resources/org/alfresco/repo/rendition/script/test_renditionService.js similarity index 100% rename from source/java/org/alfresco/repo/rendition/script/test_renditionService.js rename to source/test-resources/org/alfresco/repo/rendition/script/test_renditionService.js diff --git a/source/java/org/alfresco/repo/replication/script/test_replicationService.js b/source/test-resources/org/alfresco/repo/replication/script/test_replicationService.js similarity index 100% rename from source/java/org/alfresco/repo/replication/script/test_replicationService.js rename to source/test-resources/org/alfresco/repo/replication/script/test_replicationService.js diff --git a/source/java/org/alfresco/repo/search/impl/lucene/LuceneTest_model.xml b/source/test-resources/org/alfresco/repo/search/impl/lucene/LuceneTest_model.xml similarity index 100% rename from source/java/org/alfresco/repo/search/impl/lucene/LuceneTest_model.xml rename to source/test-resources/org/alfresco/repo/search/impl/lucene/LuceneTest_model.xml diff --git a/source/java/org/alfresco/repo/search/impl/lucene/test_categoryService.js b/source/test-resources/org/alfresco/repo/search/impl/lucene/test_categoryService.js similarity index 100% rename from source/java/org/alfresco/repo/search/impl/lucene/test_categoryService.js rename to source/test-resources/org/alfresco/repo/search/impl/lucene/test_categoryService.js diff --git a/source/java/org/alfresco/repo/service/serviceregistrytest_model.xml b/source/test-resources/org/alfresco/repo/service/serviceregistrytest_model.xml similarity index 100% rename from source/java/org/alfresco/repo/service/serviceregistrytest_model.xml rename to source/test-resources/org/alfresco/repo/service/serviceregistrytest_model.xml diff --git a/source/java/org/alfresco/repo/service/testredirector.xml b/source/test-resources/org/alfresco/repo/service/testredirector.xml similarity index 100% rename from source/java/org/alfresco/repo/service/testredirector.xml rename to source/test-resources/org/alfresco/repo/service/testredirector.xml diff --git a/source/java/org/alfresco/repo/site/script/test_siteService.js b/source/test-resources/org/alfresco/repo/site/script/test_siteService.js similarity index 100% rename from source/java/org/alfresco/repo/site/script/test_siteService.js rename to source/test-resources/org/alfresco/repo/site/script/test_siteService.js diff --git a/source/java/org/alfresco/repo/solr/testModel.xml b/source/test-resources/org/alfresco/repo/solr/testModel.xml similarity index 100% rename from source/java/org/alfresco/repo/solr/testModel.xml rename to source/test-resources/org/alfresco/repo/solr/testModel.xml diff --git a/source/java/org/alfresco/repo/tagging/script/test_alf_17260.js b/source/test-resources/org/alfresco/repo/tagging/script/test_alf_17260.js similarity index 100% rename from source/java/org/alfresco/repo/tagging/script/test_alf_17260.js rename to source/test-resources/org/alfresco/repo/tagging/script/test_alf_17260.js diff --git a/source/java/org/alfresco/repo/tagging/script/test_taggingService.js b/source/test-resources/org/alfresco/repo/tagging/script/test_taggingService.js similarity index 100% rename from source/java/org/alfresco/repo/tagging/script/test_taggingService.js rename to source/test-resources/org/alfresco/repo/tagging/script/test_taggingService.js diff --git a/source/java/org/alfresco/repo/template/test_template1.ftl b/source/test-resources/org/alfresco/repo/template/test_template1.ftl similarity index 100% rename from source/java/org/alfresco/repo/template/test_template1.ftl rename to source/test-resources/org/alfresco/repo/template/test_template1.ftl diff --git a/source/java/org/alfresco/repo/template/test_template1.xsl b/source/test-resources/org/alfresco/repo/template/test_template1.xsl similarity index 100% rename from source/java/org/alfresco/repo/template/test_template1.xsl rename to source/test-resources/org/alfresco/repo/template/test_template1.xsl diff --git a/source/java/org/alfresco/repo/template/test_template1_en_AU.xsl b/source/test-resources/org/alfresco/repo/template/test_template1_en_AU.xsl similarity index 100% rename from source/java/org/alfresco/repo/template/test_template1_en_AU.xsl rename to source/test-resources/org/alfresco/repo/template/test_template1_en_AU.xsl diff --git a/source/java/org/alfresco/repo/template/test_template1_fr.xsl b/source/test-resources/org/alfresco/repo/template/test_template1_fr.xsl similarity index 100% rename from source/java/org/alfresco/repo/template/test_template1_fr.xsl rename to source/test-resources/org/alfresco/repo/template/test_template1_fr.xsl diff --git a/source/java/org/alfresco/repo/thumbnail/script/test_thumbnailAPI.js b/source/test-resources/org/alfresco/repo/thumbnail/script/test_thumbnailAPI.js similarity index 100% rename from source/java/org/alfresco/repo/thumbnail/script/test_thumbnailAPI.js rename to source/test-resources/org/alfresco/repo/thumbnail/script/test_thumbnailAPI.js diff --git a/source/java/org/alfresco/repo/thumbnail/test-thumbnail-context.xml b/source/test-resources/org/alfresco/repo/thumbnail/test-thumbnail-context.xml similarity index 100% rename from source/java/org/alfresco/repo/thumbnail/test-thumbnail-context.xml rename to source/test-resources/org/alfresco/repo/thumbnail/test-thumbnail-context.xml diff --git a/source/java/org/alfresco/repo/transfer/script/test_transferService.js b/source/test-resources/org/alfresco/repo/transfer/script/test_transferService.js similarity index 83% rename from source/java/org/alfresco/repo/transfer/script/test_transferService.js rename to source/test-resources/org/alfresco/repo/transfer/script/test_transferService.js index b6e34d69dd7..44a80fe1bc6 100644 --- a/source/java/org/alfresco/repo/transfer/script/test_transferService.js +++ b/source/test-resources/org/alfresco/repo/transfer/script/test_transferService.js @@ -32,6 +32,20 @@ function testTransferService() var ret = transfer.transfer("good", testNodes); } + // Test remove - one node + { + var report = transfer.remove("good", testNode); + } + + // Test remove - array of strings + { + var testNodes=new Array(); + testNodes[0]="foo://123/1"; + testNodes[1]="foo://123/2"; + testNodes[2]="foo://123/3"; + var report = transfer.remove("good", testNodes); + } + // Test getTransferTarget { var ret = transfer.getTransferTarget("good"); diff --git a/source/java/org/alfresco/repo/version/VersionStoreBaseTest_model.xml b/source/test-resources/org/alfresco/repo/version/VersionStoreBaseTest_model.xml similarity index 100% rename from source/java/org/alfresco/repo/version/VersionStoreBaseTest_model.xml rename to source/test-resources/org/alfresco/repo/version/VersionStoreBaseTest_model.xml diff --git a/source/java/org/alfresco/util/test/junitrules/dummy1-context.xml b/source/test-resources/org/alfresco/util/test/junitrules/dummy1-context.xml similarity index 100% rename from source/java/org/alfresco/util/test/junitrules/dummy1-context.xml rename to source/test-resources/org/alfresco/util/test/junitrules/dummy1-context.xml diff --git a/source/java/org/alfresco/util/test/junitrules/dummy2-context.xml b/source/test-resources/org/alfresco/util/test/junitrules/dummy2-context.xml similarity index 100% rename from source/java/org/alfresco/util/test/junitrules/dummy2-context.xml rename to source/test-resources/org/alfresco/util/test/junitrules/dummy2-context.xml diff --git a/source/java/org/alfresco/wcm/webproject/script/test_WebProjectService.js b/source/test-resources/org/alfresco/wcm/webproject/script/test_WebProjectService.js similarity index 100% rename from source/java/org/alfresco/wcm/webproject/script/test_WebProjectService.js rename to source/test-resources/org/alfresco/wcm/webproject/script/test_WebProjectService.js diff --git a/source/test-resources/quick/problemFootnotes.docx b/source/test-resources/quick/problemFootnotes.docx new file mode 100644 index 00000000000..d35818af64d Binary files /dev/null and b/source/test-resources/quick/problemFootnotes.docx differ diff --git a/source/test-resources/ratings/test-RatingServiceIntegrationTest-context.xml b/source/test-resources/ratings/test-RatingServiceIntegrationTest-context.xml new file mode 100644 index 00000000000..54f5eb26f3e --- /dev/null +++ b/source/test-resources/ratings/test-RatingServiceIntegrationTest-context.xml @@ -0,0 +1,32 @@ + + + + + + + + + ratings/testRatingsModel.xml + + + + + + + + + + + + + + + + + + + + + + + diff --git a/source/test-resources/ratings/testRatingsModel.xml b/source/test-resources/ratings/testRatingsModel.xml new file mode 100644 index 00000000000..c986d10987a --- /dev/null +++ b/source/test-resources/ratings/testRatingsModel.xml @@ -0,0 +1,44 @@ + + + + + Test Ratings Model + Alfresco + 1.0 + + + + + + + + + + + + + + Spinal Tap rating scheme rollups + + + Spinal Tap Rating Scheme ratings count + d:int + + true + true + false + + + + Spinal Tap Rating Scheme ratings total + d:float + + true + true + false + + + + + + \ No newline at end of file diff --git a/source/test-resources/sync-test-context.xml b/source/test-resources/sync-test-context.xml index 82a828351a3..5ed99d2d4bb 100644 --- a/source/test-resources/sync-test-context.xml +++ b/source/test-resources/sync-test-context.xml @@ -2,7 +2,8 @@ - + @@ -18,9 +19,6 @@ - - - @@ -30,10 +28,14 @@ 100 + + + - + @@ -49,9 +51,6 @@ - - - @@ -64,6 +63,9 @@ false + + +