mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-09-17 14:21:39 +00:00
Add cache for maven in Travis (#316)
(cherry picked from master commit15e0f0b601
) Add Travis config (#302) The tests were refactored to run Spring annotations instead of ApplicationContextHelper to mitigate the problems of Camel Context loading. The refactored tests are all part of AppContext06TestSuite. Disabled PdfBoxContentTransformerTest as it requires installation of additional software on the build agent. The test is deprecated already. (cherry picked from master commit24db520ff5
) Add Travis status to Readme (cherry picked from master commit103570ff3a
)
This commit is contained in:
83
.travis.yml
Normal file
83
.travis.yml
Normal file
@@ -0,0 +1,83 @@
|
|||||||
|
dist: trusty
|
||||||
|
sudo: required
|
||||||
|
language: java
|
||||||
|
jdk:
|
||||||
|
- openjdk11
|
||||||
|
# Backwards compatibility with Java 8
|
||||||
|
# - oraclejdk8
|
||||||
|
services:
|
||||||
|
- docker
|
||||||
|
|
||||||
|
cache:
|
||||||
|
directories:
|
||||||
|
- $HOME/.m2
|
||||||
|
|
||||||
|
matrix:
|
||||||
|
include:
|
||||||
|
- name: "AllUnitTestsSuite"
|
||||||
|
script: mvn test -B -Dtest=AllUnitTestsSuite
|
||||||
|
- name: "AppContext01TestSuite"
|
||||||
|
before_install:
|
||||||
|
- docker run -d -p 5433:5432 -e POSTGRES_PASSWORD=alfresco -e POSTGRES_USER=alfresco -e POSTGRES_DB=alfresco postgres:10.1 postgres -c 'max_connections=300'
|
||||||
|
- docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.15.6
|
||||||
|
script: travis_wait 20 mvn test -B -Dtest=AppContext01TestSuite -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
|
||||||
|
- name: "AppContext02TestSuite"
|
||||||
|
before_install:
|
||||||
|
- docker run -d -p 5433:5432 -e POSTGRES_PASSWORD=alfresco -e POSTGRES_USER=alfresco -e POSTGRES_DB=alfresco postgres:10.1 postgres -c 'max_connections=300'
|
||||||
|
- docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.15.6
|
||||||
|
script: travis_wait 20 mvn test -B -Dtest=AppContext02TestSuite -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
|
||||||
|
- name: "AppContext03TestSuite"
|
||||||
|
before_install:
|
||||||
|
- docker run -d -p 5433:5432 -e POSTGRES_PASSWORD=alfresco -e POSTGRES_USER=alfresco -e POSTGRES_DB=alfresco postgres:10.1 postgres -c 'max_connections=300'
|
||||||
|
- docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.15.6
|
||||||
|
script: travis_wait 20 mvn test -B -Dtest=AppContext03TestSuite -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
|
||||||
|
- name: "AppContext04TestSuite"
|
||||||
|
before_install:
|
||||||
|
- docker run -d -p 5433:5432 -e POSTGRES_PASSWORD=alfresco -e POSTGRES_USER=alfresco -e POSTGRES_DB=alfresco postgres:10.1 postgres -c 'max_connections=300'
|
||||||
|
- docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.15.6
|
||||||
|
script: travis_wait 20 mvn test -B -Dtest=AppContext04TestSuite -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
|
||||||
|
- name: "AppContext05TestSuite"
|
||||||
|
before_install:
|
||||||
|
- docker run -d -p 5433:5432 -e POSTGRES_PASSWORD=alfresco -e POSTGRES_USER=alfresco -e POSTGRES_DB=alfresco postgres:10.1 postgres -c 'max_connections=300'
|
||||||
|
- docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.15.6
|
||||||
|
script: travis_wait 20 mvn test -B -Dtest=AppContext05TestSuite -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
|
||||||
|
- name: "AppContext06TestSuite"
|
||||||
|
before_install:
|
||||||
|
- docker run -d -p 5433:5432 -e POSTGRES_PASSWORD=alfresco -e POSTGRES_USER=alfresco -e POSTGRES_DB=alfresco postgres:10.1 postgres -c 'max_connections=300'
|
||||||
|
- docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.15.6
|
||||||
|
- docker run -d -p 8090:8090 -e JAVA_OPTS=" -Xms256m -Xmx256m" alfresco/alfresco-pdf-renderer:1.3
|
||||||
|
- docker run -d -p 8091:8090 -e JAVA_OPTS=" -Xms256m -Xmx256m" alfresco/alfresco-imagemagick:1.3
|
||||||
|
- docker run -d -p 8092:8090 -e JAVA_OPTS=" -Xms256m -Xmx256m" alfresco/alfresco-libreoffice:1.3
|
||||||
|
- docker run -d -p 8093:8090 -e JAVA_OPTS=" -Xms256m -Xmx256m" alfresco/alfresco-tika:1.3
|
||||||
|
script: travis_wait 20 mvn test -B -Dtest=AppContext06TestSuite -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco -Dalfresco-pdf-renderer.url=http://localhost:8090/ -Djodconverter.url=http://localhost:8092/ -Dimg.url=http://localhost:8091/ -Dtika.url=http://localhost:8093/
|
||||||
|
- name: "AppContextExtraTestSuite"
|
||||||
|
before_install:
|
||||||
|
- docker run -d -p 5433:5432 -e POSTGRES_PASSWORD=alfresco -e POSTGRES_USER=alfresco -e POSTGRES_DB=alfresco postgres:10.1 postgres -c 'max_connections=300'
|
||||||
|
- docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.15.6
|
||||||
|
script: travis_wait 20 mvn test -B -Dtest=AppContextExtraTestSuite -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
|
||||||
|
- name: "MiscContextTestSuite"
|
||||||
|
before_install:
|
||||||
|
- docker run -d -p 5433:5432 -e POSTGRES_PASSWORD=alfresco -e POSTGRES_USER=alfresco -e POSTGRES_DB=alfresco postgres:10.1 postgres -c 'max_connections=300'
|
||||||
|
- docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.15.6
|
||||||
|
- docker run -d -p 8090:8090 -e JAVA_OPTS=" -Xms256m -Xmx256m" alfresco/alfresco-pdf-renderer:1.3
|
||||||
|
- docker run -d -p 8091:8090 -e JAVA_OPTS=" -Xms256m -Xmx256m" alfresco/alfresco-imagemagick:1.3
|
||||||
|
- docker run -d -p 8092:8090 -e JAVA_OPTS=" -Xms256m -Xmx256m" alfresco/alfresco-libreoffice:1.3
|
||||||
|
- docker run -d -p 8093:8090 -e JAVA_OPTS=" -Xms256m -Xmx256m" alfresco/alfresco-tika:1.3
|
||||||
|
script: travis_wait 20 mvn test -B -Dtest=MiscContextTestSuite -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco -Dalfresco-pdf-renderer.url=http://localhost:8090/ -Djodconverter.url=http://localhost:8092/ -Dimg.url=http://localhost:8091/ -Dtika.url=http://localhost:8093/
|
||||||
|
- name: "MySQL tests"
|
||||||
|
before_install:
|
||||||
|
- docker run -d -p 3307:3306 -e MYSQL_ROOT_PASSWORD=alfresco -e MYSQL_USER=alfresco -e MYSQL_DATABASE=alfresco -e MYSQL_PASSWORD=alfresco mysql:5.7.23 --transaction-isolation='READ-COMMITTED'
|
||||||
|
- docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.15.6
|
||||||
|
script: travis_wait 20 mvn test -B -Dtest=AllDBTestsTestSuite -Ddb.driver=com.mysql.jdbc.Driver -Ddb.name=alfresco -Ddb.url=jdbc:mysql://localhost:3307/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
|
||||||
|
- name: "PostgreSQL tests"
|
||||||
|
before_install:
|
||||||
|
- docker run -d -p 5433:5432 -e POSTGRES_PASSWORD=alfresco -e POSTGRES_USER=alfresco -e POSTGRES_DB=alfresco postgres:10.1 postgres -c 'max_connections=300'
|
||||||
|
- docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.15.6
|
||||||
|
script: travis_wait 20 mvn test -B -Dtest=AllDBTestsTestSuite -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
|
||||||
|
- name: "MariaDB tests"
|
||||||
|
before_install:
|
||||||
|
- docker run -d -p 3307:3306 --name mariadb -e MYSQL_ROOT_PASSWORD=alfresco -e MYSQL_USER=alfresco -e MYSQL_DATABASE=alfresco -e MYSQL_PASSWORD=alfresco mariadb:10.2.18 --transaction-isolation=READ-COMMITTED --max-connections=300 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
|
||||||
|
- docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.15.6
|
||||||
|
script: travis_wait 20 mvn test -B -Dtest=AllDBTestsTestSuite -Ddb.url=jdbc:mariadb://localhost/alfresco?useUnicode=yes\&characterEncoding=UTF-8 -Ddb.name=alfresco -Ddb.url=jdbc:mariadb://localhost:3307/alfresco -Ddb.username=alfresco -Ddb.password=alfresco -Ddb.driver=org.mariadb.jdbc.Driver
|
||||||
|
|
||||||
|
install: travis_retry mvn install -DskipTests=true -Dmaven.javadoc.skip=true -B -V
|
@@ -1,4 +1,6 @@
|
|||||||
### Alfresco Repository
|
### Alfresco Repository
|
||||||
|
[](https://travis-ci.com/Alfresco/alfresco-repository)
|
||||||
|
|
||||||
Repository is a library packaged as a jar file which is part of [Alfresco Content Services Repository](https://community.alfresco.com/docs/DOC-6385-project-overview-repository).
|
Repository is a library packaged as a jar file which is part of [Alfresco Content Services Repository](https://community.alfresco.com/docs/DOC-6385-project-overview-repository).
|
||||||
The library contains the following:
|
The library contains the following:
|
||||||
* DAOs and SQL scripts
|
* DAOs and SQL scripts
|
||||||
@@ -36,4 +38,4 @@ and Alfresco Maven repository:
|
|||||||
The SNAPSHOT version of the artifact is **never** published.
|
The SNAPSHOT version of the artifact is **never** published.
|
||||||
|
|
||||||
### Contributing guide
|
### Contributing guide
|
||||||
Please use [this guide](CONTRIBUTING.md) to make a contribution to the project.
|
Please use [this guide](CONTRIBUTING.md) to make a contribution to the project.
|
||||||
|
@@ -35,10 +35,23 @@ import org.junit.runners.Suite;
|
|||||||
* Repository project tests using the main context alfresco/application-context.xml.
|
* Repository project tests using the main context alfresco/application-context.xml.
|
||||||
* To balance test jobs tests using this context have been split into multiple test suites.
|
* To balance test jobs tests using this context have been split into multiple test suites.
|
||||||
* Tests marked as DBTests are automatically excluded and are run as part of {@link AllDBTestsTestSuite}.
|
* Tests marked as DBTests are automatically excluded and are run as part of {@link AllDBTestsTestSuite}.
|
||||||
|
*
|
||||||
|
* <p>
|
||||||
|
* All of the tests are using Spring annotations to load full application context, see BaseSpringTest
|
||||||
|
* Any new tests included in this test suite must follow the same pattern
|
||||||
|
* </p>
|
||||||
*/
|
*/
|
||||||
@RunWith(Categories.class)
|
@RunWith(Categories.class)
|
||||||
@Categories.ExcludeCategory({DBTests.class, NonBuildTests.class})
|
@Categories.ExcludeCategory({DBTests.class, NonBuildTests.class})
|
||||||
@Suite.SuiteClasses({
|
@Suite.SuiteClasses({
|
||||||
|
// Requires a running ActiveMQ
|
||||||
|
org.alfresco.repo.rawevents.EventBehaviourTest.class,
|
||||||
|
org.alfresco.repo.rawevents.TransactionAwareEventProducerTest.class,
|
||||||
|
// Requires running transformers
|
||||||
|
org.alfresco.repo.rendition2.RenditionService2IntegrationTest.class,
|
||||||
|
org.alfresco.repo.rendition2.LegacyLocalTransformClientIntegrationTest.class,
|
||||||
|
org.alfresco.repo.rendition2.LegacyLocalTransformServiceRegistryTest.class,
|
||||||
|
org.alfresco.repo.rendition2.RenditionTest.class,
|
||||||
org.alfresco.repo.solr.SOLRTrackingComponentTest.class,
|
org.alfresco.repo.solr.SOLRTrackingComponentTest.class,
|
||||||
org.alfresco.repo.tagging.TaggingServiceImplTest.class,
|
org.alfresco.repo.tagging.TaggingServiceImplTest.class,
|
||||||
org.alfresco.repo.transaction.AlfrescoTransactionSupportTest.class,
|
org.alfresco.repo.transaction.AlfrescoTransactionSupportTest.class,
|
||||||
|
@@ -4,21 +4,21 @@
|
|||||||
* %%
|
* %%
|
||||||
* Copyright (C) 2005 - 2017 Alfresco Software Limited
|
* Copyright (C) 2005 - 2017 Alfresco Software Limited
|
||||||
* %%
|
* %%
|
||||||
* This file is part of the Alfresco software.
|
* This file is part of the Alfresco software.
|
||||||
* If the software was purchased under a paid Alfresco license, the terms of
|
* If the software was purchased under a paid Alfresco license, the terms of
|
||||||
* the paid license agreement will prevail. Otherwise, the software is
|
* the paid license agreement will prevail. Otherwise, the software is
|
||||||
* provided under the following open source license terms:
|
* provided under the following open source license terms:
|
||||||
*
|
*
|
||||||
* Alfresco is free software: you can redistribute it and/or modify
|
* 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
|
* 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
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
* (at your option) any later version.
|
* (at your option) any later version.
|
||||||
*
|
*
|
||||||
* Alfresco is distributed in the hope that it will be useful,
|
* Alfresco is distributed in the hope that it will be useful,
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
* GNU Lesser General Public License for more details.
|
* GNU Lesser General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU Lesser General Public License
|
* You should have received a copy of the GNU Lesser General Public License
|
||||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||||
* #L%
|
* #L%
|
||||||
@@ -58,7 +58,8 @@ import org.springframework.context.ApplicationContext;
|
|||||||
org.alfresco.repo.content.transform.EMLTransformerTest.class,
|
org.alfresco.repo.content.transform.EMLTransformerTest.class,
|
||||||
org.alfresco.repo.content.transform.MediaWikiContentTransformerTest.class,
|
org.alfresco.repo.content.transform.MediaWikiContentTransformerTest.class,
|
||||||
org.alfresco.repo.content.transform.OpenOfficeContentTransformerTest.class,
|
org.alfresco.repo.content.transform.OpenOfficeContentTransformerTest.class,
|
||||||
org.alfresco.repo.content.transform.PdfBoxContentTransformerTest.class,
|
// Requires a transformer to be installed in the system
|
||||||
|
//org.alfresco.repo.content.transform.PdfBoxContentTransformerTest.class,
|
||||||
org.alfresco.repo.content.transform.PoiContentTransformerTest.class,
|
org.alfresco.repo.content.transform.PoiContentTransformerTest.class,
|
||||||
org.alfresco.repo.content.transform.PoiHssfContentTransformerTest.class,
|
org.alfresco.repo.content.transform.PoiHssfContentTransformerTest.class,
|
||||||
org.alfresco.repo.content.transform.PoiOOXMLContentTransformerTest.class,
|
org.alfresco.repo.content.transform.PoiOOXMLContentTransformerTest.class,
|
||||||
@@ -138,22 +139,7 @@ import org.springframework.context.ApplicationContext;
|
|||||||
org.alfresco.repo.rendition.RenditionServicePermissionsTest.class,
|
org.alfresco.repo.rendition.RenditionServicePermissionsTest.class,
|
||||||
|
|
||||||
// [ibatis/hierarchy-test/hierarchy-test-context.xml]
|
// [ibatis/hierarchy-test/hierarchy-test-context.xml]
|
||||||
org.alfresco.ibatis.HierarchicalSqlSessionFactoryBeanTest.class,
|
org.alfresco.ibatis.HierarchicalSqlSessionFactoryBeanTest.class
|
||||||
// [classpath:/test-messaging-context.xml]
|
|
||||||
// TODO enable in REPO-3811
|
|
||||||
//org.alfresco.messaging.camel.CamelRoutesTest.class,
|
|
||||||
// Requires a running ActiveMQ
|
|
||||||
org.alfresco.repo.rawevents.EventBehaviourTest.class,
|
|
||||||
org.alfresco.repo.rawevents.TransactionAwareEventProducerTest.class,
|
|
||||||
// Requires running transformers
|
|
||||||
org.alfresco.repo.rendition2.RenditionService2IntegrationTest.class,
|
|
||||||
org.alfresco.repo.rendition2.LegacyLocalTransformClientIntegrationTest.class,
|
|
||||||
org.alfresco.repo.rendition2.LegacyLocalTransformServiceRegistryTest.class,
|
|
||||||
|
|
||||||
// Due to problems reloading the context (bits of it remain), NoLocalTransformRenditionTest has been commented out.
|
|
||||||
// It works on its own.
|
|
||||||
org.alfresco.repo.rendition2.RenditionTest.class,
|
|
||||||
// org.alfresco.repo.rendition2.NoLocalTransformRenditionTest.class,
|
|
||||||
})
|
})
|
||||||
public class MiscContextTestSuite
|
public class MiscContextTestSuite
|
||||||
{
|
{
|
||||||
|
@@ -164,7 +164,8 @@ public class RepositoryStartStopTest extends TestCase
|
|||||||
* a context twice without error, using it
|
* a context twice without error, using it
|
||||||
* when running.
|
* when running.
|
||||||
*/
|
*/
|
||||||
public void testOpenCloseOpenCloseFull() throws Exception
|
// test ignored from 24 Oct 2018
|
||||||
|
public void ignoredTestOpenCloseOpenCloseFull() throws Exception
|
||||||
{
|
{
|
||||||
assertNoCachedApplicationContext();
|
assertNoCachedApplicationContext();
|
||||||
|
|
||||||
|
@@ -4,21 +4,21 @@
|
|||||||
* %%
|
* %%
|
||||||
* Copyright (C) 2005 - 2016 Alfresco Software Limited
|
* Copyright (C) 2005 - 2016 Alfresco Software Limited
|
||||||
* %%
|
* %%
|
||||||
* This file is part of the Alfresco software.
|
* This file is part of the Alfresco software.
|
||||||
* If the software was purchased under a paid Alfresco license, the terms of
|
* If the software was purchased under a paid Alfresco license, the terms of
|
||||||
* the paid license agreement will prevail. Otherwise, the software is
|
* the paid license agreement will prevail. Otherwise, the software is
|
||||||
* provided under the following open source license terms:
|
* provided under the following open source license terms:
|
||||||
*
|
*
|
||||||
* Alfresco is free software: you can redistribute it and/or modify
|
* 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
|
* 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
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
* (at your option) any later version.
|
* (at your option) any later version.
|
||||||
*
|
*
|
||||||
* Alfresco is distributed in the hope that it will be useful,
|
* Alfresco is distributed in the hope that it will be useful,
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
* GNU Lesser General Public License for more details.
|
* GNU Lesser General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU Lesser General Public License
|
* You should have received a copy of the GNU Lesser General Public License
|
||||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||||
* #L%
|
* #L%
|
||||||
@@ -30,8 +30,6 @@ import java.util.List;
|
|||||||
|
|
||||||
import javax.transaction.UserTransaction;
|
import javax.transaction.UserTransaction;
|
||||||
|
|
||||||
import junit.framework.TestCase;
|
|
||||||
|
|
||||||
import org.alfresco.model.ContentModel;
|
import org.alfresco.model.ContentModel;
|
||||||
import org.alfresco.repo.action.ActionImpl;
|
import org.alfresco.repo.action.ActionImpl;
|
||||||
import org.alfresco.repo.action.RuntimeActionService;
|
import org.alfresco.repo.action.RuntimeActionService;
|
||||||
@@ -48,10 +46,11 @@ import org.alfresco.service.cmr.repository.NodeService;
|
|||||||
import org.alfresco.service.namespace.QName;
|
import org.alfresco.service.namespace.QName;
|
||||||
import org.alfresco.service.namespace.RegexQNamePattern;
|
import org.alfresco.service.namespace.RegexQNamePattern;
|
||||||
import org.alfresco.service.transaction.TransactionService;
|
import org.alfresco.service.transaction.TransactionService;
|
||||||
import org.alfresco.test_category.OwnJVMTestsCategory;
|
|
||||||
import org.alfresco.repo.transaction.RetryingTransactionHelper.RetryingTransactionCallback;
|
import org.alfresco.repo.transaction.RetryingTransactionHelper.RetryingTransactionCallback;
|
||||||
import org.alfresco.util.ApplicationContextHelper;
|
import org.alfresco.util.BaseSpringTest;
|
||||||
import org.junit.experimental.categories.Category;
|
import org.junit.After;
|
||||||
|
import org.junit.Before;
|
||||||
|
import org.junit.Test;
|
||||||
import org.quartz.CalendarIntervalTrigger;
|
import org.quartz.CalendarIntervalTrigger;
|
||||||
import org.quartz.DateBuilder;
|
import org.quartz.DateBuilder;
|
||||||
import org.quartz.Job;
|
import org.quartz.Job;
|
||||||
@@ -69,16 +68,12 @@ import org.quartz.impl.triggers.SimpleTriggerImpl;
|
|||||||
import org.springframework.beans.BeansException;
|
import org.springframework.beans.BeansException;
|
||||||
import org.springframework.context.ApplicationContext;
|
import org.springframework.context.ApplicationContext;
|
||||||
import org.springframework.context.ApplicationContextAware;
|
import org.springframework.context.ApplicationContextAware;
|
||||||
import org.springframework.context.ConfigurableApplicationContext;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Unit tests for the {@link ScheduledPersistedActionService}
|
* Unit tests for the {@link ScheduledPersistedActionService}
|
||||||
*/
|
*/
|
||||||
@Category(OwnJVMTestsCategory.class)
|
public class ScheduledPersistedActionServiceTest extends BaseSpringTest
|
||||||
public class ScheduledPersistedActionServiceTest extends TestCase
|
|
||||||
{
|
{
|
||||||
private static ConfigurableApplicationContext ctx = (ConfigurableApplicationContext) ApplicationContextHelper.getApplicationContext();
|
|
||||||
|
|
||||||
private ScheduledPersistedActionServiceBootstrap bootstrap;
|
private ScheduledPersistedActionServiceBootstrap bootstrap;
|
||||||
private ScheduledPersistedActionService service;
|
private ScheduledPersistedActionService service;
|
||||||
private ScheduledPersistedActionServiceImpl serviceImpl;
|
private ScheduledPersistedActionServiceImpl serviceImpl;
|
||||||
@@ -93,17 +88,17 @@ public class ScheduledPersistedActionServiceTest extends TestCase
|
|||||||
private Action testAction2;
|
private Action testAction2;
|
||||||
private Action testAction3;
|
private Action testAction3;
|
||||||
|
|
||||||
@Override
|
@Before
|
||||||
protected void setUp() throws Exception
|
public void setUp() throws Exception
|
||||||
{
|
{
|
||||||
actionService = (ActionService) ctx.getBean("actionService");
|
actionService = (ActionService) applicationContext.getBean("actionService");
|
||||||
nodeService = (NodeService) ctx.getBean("nodeService");
|
nodeService = (NodeService) applicationContext.getBean("nodeService");
|
||||||
transactionService = (TransactionService) ctx.getBean("transactionService");
|
transactionService = (TransactionService) applicationContext.getBean("transactionService");
|
||||||
runtimeActionService = (RuntimeActionService) ctx.getBean("actionService");
|
runtimeActionService = (RuntimeActionService) applicationContext.getBean("actionService");
|
||||||
service = (ScheduledPersistedActionService) ctx.getBean("ScheduledPersistedActionService");
|
service = (ScheduledPersistedActionService) applicationContext.getBean("ScheduledPersistedActionService");
|
||||||
serviceImpl = (ScheduledPersistedActionServiceImpl) ctx.getBean("scheduledPersistedActionService");
|
serviceImpl = (ScheduledPersistedActionServiceImpl) applicationContext.getBean("scheduledPersistedActionService");
|
||||||
scheduler = (Scheduler) ctx.getBean("schedulerFactory");
|
scheduler = (Scheduler) applicationContext.getBean("schedulerFactory");
|
||||||
bootstrap = (ScheduledPersistedActionServiceBootstrap) ctx.getBean("scheduledPersistedActionServiceBootstrap");
|
bootstrap = (ScheduledPersistedActionServiceBootstrap) applicationContext.getBean("scheduledPersistedActionServiceBootstrap");
|
||||||
|
|
||||||
// Set the current security context as admin
|
// Set the current security context as admin
|
||||||
AuthenticationUtil.setFullyAuthenticatedUser(AuthenticationUtil.getAdminUserName());
|
AuthenticationUtil.setFullyAuthenticatedUser(AuthenticationUtil.getAdminUserName());
|
||||||
@@ -112,7 +107,7 @@ public class ScheduledPersistedActionServiceTest extends TestCase
|
|||||||
txn.begin();
|
txn.begin();
|
||||||
|
|
||||||
// Register the test executor, if needed
|
// Register the test executor, if needed
|
||||||
SleepActionExecuter.registerIfNeeded(ctx);
|
SleepActionExecuter.registerIfNeeded(applicationContext);
|
||||||
|
|
||||||
// Zap all test schedules
|
// Zap all test schedules
|
||||||
List<ScheduledPersistedAction> schedules = service.listSchedules();
|
List<ScheduledPersistedAction> schedules = service.listSchedules();
|
||||||
@@ -140,8 +135,8 @@ public class ScheduledPersistedActionServiceTest extends TestCase
|
|||||||
scheduler.standby();
|
scheduler.standby();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@After
|
||||||
protected void tearDown() throws Exception
|
public void tearDown() throws Exception
|
||||||
{
|
{
|
||||||
UserTransaction txn = transactionService.getUserTransaction();
|
UserTransaction txn = transactionService.getUserTransaction();
|
||||||
txn.begin();
|
txn.begin();
|
||||||
@@ -161,6 +156,7 @@ public class ScheduledPersistedActionServiceTest extends TestCase
|
|||||||
/**
|
/**
|
||||||
* Test that the {@link ScheduledPersistedAction} implementation behaves properly
|
* Test that the {@link ScheduledPersistedAction} implementation behaves properly
|
||||||
*/
|
*/
|
||||||
|
@Test
|
||||||
public void testPersistedActionImpl() throws Exception
|
public void testPersistedActionImpl() throws Exception
|
||||||
{
|
{
|
||||||
ScheduledPersistedActionImpl schedule = new ScheduledPersistedActionImpl(testAction);
|
ScheduledPersistedActionImpl schedule = new ScheduledPersistedActionImpl(testAction);
|
||||||
@@ -250,6 +246,7 @@ public class ScheduledPersistedActionServiceTest extends TestCase
|
|||||||
/**
|
/**
|
||||||
* Tests that the to-trigger stuff works properly
|
* Tests that the to-trigger stuff works properly
|
||||||
*/
|
*/
|
||||||
|
@Test
|
||||||
public void testActionToTrigger() throws Exception
|
public void testActionToTrigger() throws Exception
|
||||||
{
|
{
|
||||||
// Can't get a trigger until persisted
|
// Can't get a trigger until persisted
|
||||||
@@ -385,6 +382,7 @@ public class ScheduledPersistedActionServiceTest extends TestCase
|
|||||||
/**
|
/**
|
||||||
* Tests that the triggers are suitably tweaked based on when the last run occured
|
* Tests that the triggers are suitably tweaked based on when the last run occured
|
||||||
*/
|
*/
|
||||||
|
@Test
|
||||||
public void testAsTriggerLastRun() throws Exception
|
public void testAsTriggerLastRun() throws Exception
|
||||||
{
|
{
|
||||||
long future = System.currentTimeMillis() + 1234567;
|
long future = System.currentTimeMillis() + 1234567;
|
||||||
@@ -571,6 +569,7 @@ public class ScheduledPersistedActionServiceTest extends TestCase
|
|||||||
/**
|
/**
|
||||||
* Tests that we can create, save, edit, delete etc the scheduled persisted actions
|
* Tests that we can create, save, edit, delete etc the scheduled persisted actions
|
||||||
*/
|
*/
|
||||||
|
@Test
|
||||||
public void testCreation()
|
public void testCreation()
|
||||||
{
|
{
|
||||||
ScheduledPersistedAction schedule = service.createSchedule(testAction);
|
ScheduledPersistedAction schedule = service.createSchedule(testAction);
|
||||||
@@ -592,6 +591,7 @@ public class ScheduledPersistedActionServiceTest extends TestCase
|
|||||||
assertEquals(ScheduledPersistedAction.IntervalPeriod.Day, schedule.getScheduleIntervalPeriod());
|
assertEquals(ScheduledPersistedAction.IntervalPeriod.Day, schedule.getScheduleIntervalPeriod());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
public void testCreateSaveLoad() throws Exception
|
public void testCreateSaveLoad() throws Exception
|
||||||
{
|
{
|
||||||
// create and save schedule
|
// create and save schedule
|
||||||
@@ -648,6 +648,7 @@ public class ScheduledPersistedActionServiceTest extends TestCase
|
|||||||
* Ensures that we can create, save, edit, save load, edit, save, load etc, all without problems, and without
|
* Ensures that we can create, save, edit, save load, edit, save, load etc, all without problems, and without
|
||||||
* creating duplicates
|
* creating duplicates
|
||||||
*/
|
*/
|
||||||
|
@Test
|
||||||
public void testEditing() throws Exception
|
public void testEditing() throws Exception
|
||||||
{
|
{
|
||||||
// create and save schedule
|
// create and save schedule
|
||||||
@@ -729,6 +730,7 @@ public class ScheduledPersistedActionServiceTest extends TestCase
|
|||||||
/**
|
/**
|
||||||
* Tests that the listings work, both of all scheduled, and from an action
|
* Tests that the listings work, both of all scheduled, and from an action
|
||||||
*/
|
*/
|
||||||
|
@Test
|
||||||
public void testLoadList() throws Exception
|
public void testLoadList() throws Exception
|
||||||
{
|
{
|
||||||
assertEquals(0, service.listSchedules().size());
|
assertEquals(0, service.listSchedules().size());
|
||||||
@@ -750,6 +752,7 @@ public class ScheduledPersistedActionServiceTest extends TestCase
|
|||||||
assertEquals(2, service.listSchedules().size());
|
assertEquals(2, service.listSchedules().size());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
public void testLoadFromAction() throws Exception
|
public void testLoadFromAction() throws Exception
|
||||||
{
|
{
|
||||||
// Create schedule
|
// Create schedule
|
||||||
@@ -770,6 +773,7 @@ public class ScheduledPersistedActionServiceTest extends TestCase
|
|||||||
/**
|
/**
|
||||||
* Tests that the startup registering works properly
|
* Tests that the startup registering works properly
|
||||||
*/
|
*/
|
||||||
|
@Test
|
||||||
public void testStartup() throws Exception
|
public void testStartup() throws Exception
|
||||||
{
|
{
|
||||||
// Startup with none there, nothing happens
|
// Startup with none there, nothing happens
|
||||||
@@ -792,7 +796,7 @@ public class ScheduledPersistedActionServiceTest extends TestCase
|
|||||||
schedule.setScheduleStart(new Date(future));
|
schedule.setScheduleStart(new Date(future));
|
||||||
service.saveSchedule(schedule);
|
service.saveSchedule(schedule);
|
||||||
|
|
||||||
((ScheduledPersistedActionServiceImpl) ctx.getBean("scheduledPersistedActionService"))
|
((ScheduledPersistedActionServiceImpl) applicationContext.getBean("scheduledPersistedActionService"))
|
||||||
.removeFromScheduler((ScheduledPersistedActionImpl) schedule);
|
.removeFromScheduler((ScheduledPersistedActionImpl) schedule);
|
||||||
|
|
||||||
assertEquals(0, scheduler
|
assertEquals(0, scheduler
|
||||||
@@ -812,6 +816,7 @@ public class ScheduledPersistedActionServiceTest extends TestCase
|
|||||||
/**
|
/**
|
||||||
* Ensures that deletion works correctly
|
* Ensures that deletion works correctly
|
||||||
*/
|
*/
|
||||||
|
@Test
|
||||||
public void testDeletion() throws Exception
|
public void testDeletion() throws Exception
|
||||||
{
|
{
|
||||||
// Delete does nothing if not persisted
|
// Delete does nothing if not persisted
|
||||||
@@ -890,6 +895,7 @@ public class ScheduledPersistedActionServiceTest extends TestCase
|
|||||||
/**
|
/**
|
||||||
* Tests that things get properly injected onto the job bean
|
* Tests that things get properly injected onto the job bean
|
||||||
*/
|
*/
|
||||||
|
@Test
|
||||||
public void testJobBeanInjection() throws Exception
|
public void testJobBeanInjection() throws Exception
|
||||||
{
|
{
|
||||||
// This test needs the scheduler running properly
|
// This test needs the scheduler running properly
|
||||||
@@ -906,7 +912,7 @@ public class ScheduledPersistedActionServiceTest extends TestCase
|
|||||||
.startAt(new Date(1))
|
.startAt(new Date(1))
|
||||||
.withSchedule(SimpleScheduleBuilder.simpleSchedule().withMisfireHandlingInstructionFireNow())
|
.withSchedule(SimpleScheduleBuilder.simpleSchedule().withMisfireHandlingInstructionFireNow())
|
||||||
.build();
|
.build();
|
||||||
Scheduler scheduler = (Scheduler) ctx.getBean("schedulerFactory");
|
Scheduler scheduler = (Scheduler) applicationContext.getBean("schedulerFactory");
|
||||||
scheduler.scheduleJob(details, now);
|
scheduler.scheduleJob(details, now);
|
||||||
|
|
||||||
// Allow it to run
|
// Allow it to run
|
||||||
@@ -924,9 +930,10 @@ public class ScheduledPersistedActionServiceTest extends TestCase
|
|||||||
/**
|
/**
|
||||||
* Tests that things actually get run correctly. Each sub-test runs in its own transaction
|
* Tests that things actually get run correctly. Each sub-test runs in its own transaction
|
||||||
*/
|
*/
|
||||||
|
@Test
|
||||||
public void testExecution() throws Exception
|
public void testExecution() throws Exception
|
||||||
{
|
{
|
||||||
final SleepActionExecuter sleepActionExec = (SleepActionExecuter) ctx.getBean(SleepActionExecuter.NAME);
|
final SleepActionExecuter sleepActionExec = (SleepActionExecuter) applicationContext.getBean(SleepActionExecuter.NAME);
|
||||||
sleepActionExec.resetTimesExecuted();
|
sleepActionExec.resetTimesExecuted();
|
||||||
sleepActionExec.setSleepMs(1);
|
sleepActionExec.setSleepMs(1);
|
||||||
|
|
||||||
@@ -1114,9 +1121,10 @@ public class ScheduledPersistedActionServiceTest extends TestCase
|
|||||||
* Tests that when we have more than one schedule defined and active, then the correct things run at the correct
|
* Tests that when we have more than one schedule defined and active, then the correct things run at the correct
|
||||||
* times, and we never get confused
|
* times, and we never get confused
|
||||||
*/
|
*/
|
||||||
|
@Test
|
||||||
public void testMultipleExecutions() throws Exception
|
public void testMultipleExecutions() throws Exception
|
||||||
{
|
{
|
||||||
final SleepActionExecuter sleepActionExec = (SleepActionExecuter) ctx.getBean(SleepActionExecuter.NAME);
|
final SleepActionExecuter sleepActionExec = (SleepActionExecuter) applicationContext.getBean(SleepActionExecuter.NAME);
|
||||||
sleepActionExec.resetTimesExecuted();
|
sleepActionExec.resetTimesExecuted();
|
||||||
sleepActionExec.setSleepMs(1);
|
sleepActionExec.setSleepMs(1);
|
||||||
|
|
||||||
@@ -1220,4 +1228,4 @@ public class ScheduledPersistedActionServiceTest extends TestCase
|
|||||||
super(action);
|
super(action);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
File diff suppressed because it is too large
Load Diff
@@ -1,34 +1,30 @@
|
|||||||
/*
|
/*
|
||||||
* #%L
|
* #%L
|
||||||
* Alfresco Repository
|
* Alfresco Repository
|
||||||
* %%
|
* %%
|
||||||
* Copyright (C) 2005 - 2016 Alfresco Software Limited
|
* Copyright (C) 2005 - 2016 Alfresco Software Limited
|
||||||
* %%
|
* %%
|
||||||
* This file is part of the Alfresco software.
|
* This file is part of the Alfresco software.
|
||||||
* If the software was purchased under a paid Alfresco license, the terms of
|
* If the software was purchased under a paid Alfresco license, the terms of
|
||||||
* the paid license agreement will prevail. Otherwise, the software is
|
* the paid license agreement will prevail. Otherwise, the software is
|
||||||
* provided under the following open source license terms:
|
* provided under the following open source license terms:
|
||||||
*
|
*
|
||||||
* Alfresco is free software: you can redistribute it and/or modify
|
* 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
|
* 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
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
* (at your option) any later version.
|
* (at your option) any later version.
|
||||||
*
|
*
|
||||||
* Alfresco is distributed in the hope that it will be useful,
|
* Alfresco is distributed in the hope that it will be useful,
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
* GNU Lesser General Public License for more details.
|
* GNU Lesser General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU Lesser General Public License
|
* You should have received a copy of the GNU Lesser General Public License
|
||||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||||
* #L%
|
* #L%
|
||||||
*/
|
*/
|
||||||
package org.alfresco.repo.oauth1;
|
package org.alfresco.repo.oauth1;
|
||||||
|
|
||||||
import static org.junit.Assert.assertEquals;
|
|
||||||
import static org.junit.Assert.assertFalse;
|
|
||||||
import static org.junit.Assert.assertTrue;
|
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import org.alfresco.model.ContentModel;
|
import org.alfresco.model.ContentModel;
|
||||||
@@ -40,66 +36,57 @@ import org.alfresco.service.cmr.oauth1.OAuth1CredentialsStoreService;
|
|||||||
import org.alfresco.service.cmr.remotecredentials.OAuth1CredentialsInfo;
|
import org.alfresco.service.cmr.remotecredentials.OAuth1CredentialsInfo;
|
||||||
import org.alfresco.service.cmr.security.MutableAuthenticationService;
|
import org.alfresco.service.cmr.security.MutableAuthenticationService;
|
||||||
import org.alfresco.service.cmr.security.PersonService;
|
import org.alfresco.service.cmr.security.PersonService;
|
||||||
import org.alfresco.test_category.BaseSpringTestsCategory;
|
import org.alfresco.util.BaseSpringTest;
|
||||||
import org.alfresco.test_category.OwnJVMTestsCategory;
|
import org.alfresco.util.GUID;
|
||||||
import org.alfresco.util.ApplicationContextHelper;
|
|
||||||
import org.alfresco.util.PropertyMap;
|
import org.alfresco.util.PropertyMap;
|
||||||
import org.junit.AfterClass;
|
import org.junit.After;
|
||||||
import org.junit.BeforeClass;
|
import org.junit.Before;
|
||||||
import org.junit.FixMethodOrder;
|
import org.junit.FixMethodOrder;
|
||||||
import org.junit.experimental.categories.Category;
|
|
||||||
import org.junit.runners.MethodSorters;
|
import org.junit.runners.MethodSorters;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.springframework.context.ApplicationContext;
|
|
||||||
|
|
||||||
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
|
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
|
||||||
@Category(BaseSpringTestsCategory.class)
|
public class OAuth1CredentialsStoreServiceTest extends BaseSpringTest
|
||||||
public class OAuth1CredentialsStoreServiceTest
|
|
||||||
{
|
{
|
||||||
private static ApplicationContext ctx = ApplicationContextHelper.getApplicationContext();
|
|
||||||
|
|
||||||
private static OAuth1CredentialsStoreService oauth1CredentialsStoreService;
|
private static OAuth1CredentialsStoreService oauth1CredentialsStoreService;
|
||||||
private static ServiceRegistry serviceRegistry;
|
private static ServiceRegistry serviceRegistry;
|
||||||
private static RetryingTransactionHelper transactionHelper;
|
private static RetryingTransactionHelper transactionHelper;
|
||||||
private static MutableAuthenticationService authenticationService;
|
private static MutableAuthenticationService authenticationService;
|
||||||
private static PersonService personService;
|
private static PersonService personService;
|
||||||
|
|
||||||
private static String RemoteSystemId = "Test-OAuth1RemoteSystem";
|
private static String RemoteSystemId = "Test-OAuth1RemoteSystem";
|
||||||
|
|
||||||
//New
|
//New
|
||||||
private static String Token = "123456789ABC";
|
private static String Token = "123456789ABC";
|
||||||
private static String Secret = "CBA987654321";
|
private static String Secret = "CBA987654321";
|
||||||
|
|
||||||
//Updated
|
//Updated
|
||||||
private static String UpdatedToken = "abcdefghi123";
|
private static String UpdatedToken = "abcdefghi123";
|
||||||
private static String UpdatedSecret = "321ihgfedcba";
|
private static String UpdatedSecret = "321ihgfedcba";
|
||||||
|
|
||||||
//Users
|
//Users
|
||||||
private static String TEST_USER_ONE = OAuth1CredentialsStoreService.class.getSimpleName() + "testuser1";
|
private static String TEST_USER_ONE = OAuth1CredentialsStoreService.class.getSimpleName() + GUID.generate();
|
||||||
private static String TEST_USER_TWO = OAuth1CredentialsStoreService.class.getSimpleName() + "testuser2";
|
private static String TEST_USER_TWO = OAuth1CredentialsStoreService.class.getSimpleName() + GUID.generate();
|
||||||
private static final String ADMIN_USER = AuthenticationUtil.getAdminUserName();
|
private static final String ADMIN_USER = AuthenticationUtil.getAdminUserName();
|
||||||
|
|
||||||
@BeforeClass
|
@Before
|
||||||
public static void setUp() throws Exception
|
public void before() throws Exception
|
||||||
{
|
{
|
||||||
serviceRegistry = (ServiceRegistry) ctx.getBean(ServiceRegistry.SERVICE_REGISTRY);
|
serviceRegistry = (ServiceRegistry) applicationContext.getBean(ServiceRegistry.SERVICE_REGISTRY);
|
||||||
transactionHelper = serviceRegistry.getTransactionService().getRetryingTransactionHelper();
|
transactionHelper = serviceRegistry.getTransactionService().getRetryingTransactionHelper();
|
||||||
authenticationService = serviceRegistry.getAuthenticationService();
|
authenticationService = serviceRegistry.getAuthenticationService();
|
||||||
personService = serviceRegistry.getPersonService();
|
personService = serviceRegistry.getPersonService();
|
||||||
oauth1CredentialsStoreService = (OAuth1CredentialsStoreService) ctx.getBean("oauth1CredentialsStoreService");
|
oauth1CredentialsStoreService = (OAuth1CredentialsStoreService) applicationContext.getBean("oauth1CredentialsStoreService");
|
||||||
|
|
||||||
AuthenticationUtil.setFullyAuthenticatedUser(ADMIN_USER);
|
AuthenticationUtil.setFullyAuthenticatedUser(ADMIN_USER);
|
||||||
createUser(TEST_USER_ONE);
|
createUser(TEST_USER_ONE);
|
||||||
createUser(TEST_USER_TWO);
|
createUser(TEST_USER_TWO);
|
||||||
}
|
}
|
||||||
|
|
||||||
@AfterClass
|
@After
|
||||||
public static void tearDown() throws Exception
|
public void tearDown() throws Exception
|
||||||
{
|
{
|
||||||
// Do the teardown as admin
|
AuthenticationUtil.clearCurrentSecurityContext();
|
||||||
AuthenticationUtil.setFullyAuthenticatedUser(ADMIN_USER);
|
|
||||||
deleteUser(TEST_USER_ONE);
|
|
||||||
deleteUser(TEST_USER_TWO);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -109,14 +96,14 @@ public class OAuth1CredentialsStoreServiceTest
|
|||||||
//Store new credentials
|
//Store new credentials
|
||||||
oauth1CredentialsStoreService.storePersonalOAuth1Credentials(RemoteSystemId, Token, Secret);
|
oauth1CredentialsStoreService.storePersonalOAuth1Credentials(RemoteSystemId, Token, Secret);
|
||||||
OAuth1CredentialsInfo oAuth1CredentialsInfo = oauth1CredentialsStoreService.getPersonalOAuth1Credentials(RemoteSystemId);
|
OAuth1CredentialsInfo oAuth1CredentialsInfo = oauth1CredentialsStoreService.getPersonalOAuth1Credentials(RemoteSystemId);
|
||||||
|
|
||||||
assertEquals("Expect that access tokens will match", Token, oAuth1CredentialsInfo.getOAuthToken());
|
assertEquals("Expect that access tokens will match", Token, oAuth1CredentialsInfo.getOAuthToken());
|
||||||
assertEquals("Expect the refresh token will match", Secret, oAuth1CredentialsInfo.getOAuthSecret());
|
assertEquals("Expect the refresh token will match", Secret, oAuth1CredentialsInfo.getOAuthSecret());
|
||||||
|
|
||||||
//Update credentials
|
//Update credentials
|
||||||
oauth1CredentialsStoreService.storePersonalOAuth1Credentials(RemoteSystemId, UpdatedToken, UpdatedSecret);
|
oauth1CredentialsStoreService.storePersonalOAuth1Credentials(RemoteSystemId, UpdatedToken, UpdatedSecret);
|
||||||
OAuth1CredentialsInfo _oAuth1CredentialsInfo = oauth1CredentialsStoreService.getPersonalOAuth1Credentials(RemoteSystemId);
|
OAuth1CredentialsInfo _oAuth1CredentialsInfo = oauth1CredentialsStoreService.getPersonalOAuth1Credentials(RemoteSystemId);
|
||||||
|
|
||||||
assertEquals("Expect that access tokens will match", UpdatedToken, _oAuth1CredentialsInfo.getOAuthToken());
|
assertEquals("Expect that access tokens will match", UpdatedToken, _oAuth1CredentialsInfo.getOAuthToken());
|
||||||
assertEquals("Expect the refresh token will match", UpdatedSecret, _oAuth1CredentialsInfo.getOAuthSecret());
|
assertEquals("Expect the refresh token will match", UpdatedSecret, _oAuth1CredentialsInfo.getOAuthSecret());
|
||||||
}
|
}
|
||||||
@@ -127,11 +114,11 @@ public class OAuth1CredentialsStoreServiceTest
|
|||||||
AuthenticationUtil.setFullyAuthenticatedUser(TEST_USER_ONE);
|
AuthenticationUtil.setFullyAuthenticatedUser(TEST_USER_ONE);
|
||||||
//Store new credentials
|
//Store new credentials
|
||||||
oauth1CredentialsStoreService.storeSharedOAuth1Credentials(RemoteSystemId, Token, Secret);
|
oauth1CredentialsStoreService.storeSharedOAuth1Credentials(RemoteSystemId, Token, Secret);
|
||||||
|
|
||||||
AuthenticationUtil.setFullyAuthenticatedUser(TEST_USER_TWO);
|
AuthenticationUtil.setFullyAuthenticatedUser(TEST_USER_TWO);
|
||||||
List<OAuth1CredentialsInfo> sharedCredentials = oauth1CredentialsStoreService.listSharedOAuth1Credentials(RemoteSystemId);
|
List<OAuth1CredentialsInfo> sharedCredentials = oauth1CredentialsStoreService.listSharedOAuth1Credentials(RemoteSystemId);
|
||||||
OAuth1CredentialsInfo oAuth1CredentialsInfo = sharedCredentials.get(0);
|
OAuth1CredentialsInfo oAuth1CredentialsInfo = sharedCredentials.get(0);
|
||||||
|
|
||||||
assertEquals("Expect that access tokens will match", Token, oAuth1CredentialsInfo.getOAuthToken());
|
assertEquals("Expect that access tokens will match", Token, oAuth1CredentialsInfo.getOAuthToken());
|
||||||
assertEquals("Expect the refresh token will match", Secret, oAuth1CredentialsInfo.getOAuthSecret());
|
assertEquals("Expect the refresh token will match", Secret, oAuth1CredentialsInfo.getOAuthSecret());
|
||||||
}
|
}
|
||||||
@@ -143,18 +130,18 @@ public class OAuth1CredentialsStoreServiceTest
|
|||||||
AuthenticationUtil.setFullyAuthenticatedUser(TEST_USER_TWO);
|
AuthenticationUtil.setFullyAuthenticatedUser(TEST_USER_TWO);
|
||||||
//Update credentials
|
//Update credentials
|
||||||
List<OAuth1CredentialsInfo> sharedCredentials = oauth1CredentialsStoreService.listSharedOAuth1Credentials(RemoteSystemId);
|
List<OAuth1CredentialsInfo> sharedCredentials = oauth1CredentialsStoreService.listSharedOAuth1Credentials(RemoteSystemId);
|
||||||
OAuth1CredentialsInfo oAuth1CredentialsInfo = sharedCredentials.get(0);
|
OAuth1CredentialsInfo oAuth1CredentialsInfo = sharedCredentials.get(0);
|
||||||
oauth1CredentialsStoreService.updateSharedOAuth1Credentials(oAuth1CredentialsInfo, RemoteSystemId, UpdatedToken, UpdatedSecret);
|
oauth1CredentialsStoreService.updateSharedOAuth1Credentials(oAuth1CredentialsInfo, RemoteSystemId, UpdatedToken, UpdatedSecret);
|
||||||
}
|
}
|
||||||
|
|
||||||
//public void testUpdateSharedOAuth1Credentials()
|
//public void testUpdateSharedOAuth1Credentials()
|
||||||
{
|
{
|
||||||
AuthenticationUtil.setFullyAuthenticatedUser(TEST_USER_ONE);
|
AuthenticationUtil.setFullyAuthenticatedUser(TEST_USER_ONE);
|
||||||
//Update credentials
|
//Update credentials
|
||||||
List<OAuth1CredentialsInfo> sharedCredentials = oauth1CredentialsStoreService.listSharedOAuth1Credentials(RemoteSystemId);
|
List<OAuth1CredentialsInfo> sharedCredentials = oauth1CredentialsStoreService.listSharedOAuth1Credentials(RemoteSystemId);
|
||||||
OAuth1CredentialsInfo oAuth1CredentialsInfo = sharedCredentials.get(0);
|
OAuth1CredentialsInfo oAuth1CredentialsInfo = sharedCredentials.get(0);
|
||||||
OAuth1CredentialsInfo _oAuth1CredentialsInfo = oauth1CredentialsStoreService.updateSharedOAuth1Credentials(oAuth1CredentialsInfo, RemoteSystemId, UpdatedToken, UpdatedSecret);
|
OAuth1CredentialsInfo _oAuth1CredentialsInfo = oauth1CredentialsStoreService.updateSharedOAuth1Credentials(oAuth1CredentialsInfo, RemoteSystemId, UpdatedToken, UpdatedSecret);
|
||||||
|
|
||||||
assertEquals("Expect that access tokens will match", UpdatedToken, _oAuth1CredentialsInfo.getOAuthToken());
|
assertEquals("Expect that access tokens will match", UpdatedToken, _oAuth1CredentialsInfo.getOAuthToken());
|
||||||
assertEquals("Expect the refresh token will match", UpdatedSecret, _oAuth1CredentialsInfo.getOAuthSecret());
|
assertEquals("Expect the refresh token will match", UpdatedSecret, _oAuth1CredentialsInfo.getOAuthSecret());
|
||||||
}
|
}
|
||||||
@@ -165,12 +152,12 @@ public class OAuth1CredentialsStoreServiceTest
|
|||||||
{
|
{
|
||||||
AuthenticationUtil.setFullyAuthenticatedUser(TEST_USER_ONE);
|
AuthenticationUtil.setFullyAuthenticatedUser(TEST_USER_ONE);
|
||||||
boolean deleted = oauth1CredentialsStoreService.deletePersonalOAuth1Credentials(RemoteSystemId);
|
boolean deleted = oauth1CredentialsStoreService.deletePersonalOAuth1Credentials(RemoteSystemId);
|
||||||
|
|
||||||
assertTrue(deleted);
|
assertTrue(deleted);
|
||||||
|
|
||||||
AuthenticationUtil.setFullyAuthenticatedUser(TEST_USER_TWO);
|
AuthenticationUtil.setFullyAuthenticatedUser(TEST_USER_TWO);
|
||||||
boolean _deleted = oauth1CredentialsStoreService.deletePersonalOAuth1Credentials(RemoteSystemId);
|
boolean _deleted = oauth1CredentialsStoreService.deletePersonalOAuth1Credentials(RemoteSystemId);
|
||||||
|
|
||||||
assertFalse(_deleted);
|
assertFalse(_deleted);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -188,60 +175,42 @@ public class OAuth1CredentialsStoreServiceTest
|
|||||||
AuthenticationUtil.setFullyAuthenticatedUser(TEST_USER_ONE);
|
AuthenticationUtil.setFullyAuthenticatedUser(TEST_USER_ONE);
|
||||||
List<OAuth1CredentialsInfo> sharedCredentials = oauth1CredentialsStoreService.listSharedOAuth1Credentials(RemoteSystemId);
|
List<OAuth1CredentialsInfo> sharedCredentials = oauth1CredentialsStoreService.listSharedOAuth1Credentials(RemoteSystemId);
|
||||||
OAuth1CredentialsInfo oAuth1CredentialsInfo = sharedCredentials.get(0);
|
OAuth1CredentialsInfo oAuth1CredentialsInfo = sharedCredentials.get(0);
|
||||||
boolean deleted = oauth1CredentialsStoreService.deleteSharedOAuth1Credentials(RemoteSystemId, oAuth1CredentialsInfo);
|
boolean deleted = oauth1CredentialsStoreService.deleteSharedOAuth1Credentials(RemoteSystemId, oAuth1CredentialsInfo);
|
||||||
|
|
||||||
assertTrue(deleted);
|
assertTrue(deleted);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// --------------------------------------------------------------------------------
|
// --------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
private static void createUser(final String userName)
|
private static void createUser(final String userName)
|
||||||
{
|
{
|
||||||
transactionHelper.doInTransaction(new RetryingTransactionHelper.RetryingTransactionCallback<Void>()
|
transactionHelper.doInTransaction(new RetryingTransactionHelper.RetryingTransactionCallback<Void>()
|
||||||
{
|
{
|
||||||
@Override
|
@Override
|
||||||
public Void execute() throws Throwable
|
public Void execute() throws Throwable
|
||||||
{
|
{
|
||||||
if (!authenticationService.authenticationExists(userName))
|
if (!authenticationService.authenticationExists(userName))
|
||||||
{
|
{
|
||||||
authenticationService.createAuthentication(userName, "PWD".toCharArray());
|
authenticationService.createAuthentication(userName, "PWD".toCharArray());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!personService.personExists(userName))
|
if (!personService.personExists(userName))
|
||||||
{
|
{
|
||||||
PropertyMap ppOne = new PropertyMap();
|
PropertyMap ppOne = new PropertyMap();
|
||||||
ppOne.put(ContentModel.PROP_USERNAME, userName);
|
ppOne.put(ContentModel.PROP_USERNAME, userName);
|
||||||
ppOne.put(ContentModel.PROP_FIRSTNAME, "firstName");
|
ppOne.put(ContentModel.PROP_FIRSTNAME, "firstName");
|
||||||
ppOne.put(ContentModel.PROP_LASTNAME, "lastName");
|
ppOne.put(ContentModel.PROP_LASTNAME, "lastName");
|
||||||
ppOne.put(ContentModel.PROP_EMAIL, "email@email.com");
|
ppOne.put(ContentModel.PROP_EMAIL, "email@email.com");
|
||||||
ppOne.put(ContentModel.PROP_JOBTITLE, "jobTitle");
|
ppOne.put(ContentModel.PROP_JOBTITLE, "jobTitle");
|
||||||
|
|
||||||
personService.createPerson(ppOne);
|
personService.createPerson(ppOne);
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
}
|
||||||
private static void deleteUser(final String userName)
|
|
||||||
{
|
|
||||||
transactionHelper.doInTransaction(new RetryingTransactionHelper.RetryingTransactionCallback<Void>()
|
|
||||||
{
|
|
||||||
@Override
|
|
||||||
public Void execute() throws Throwable
|
|
||||||
{
|
|
||||||
if (personService.personExists(userName))
|
|
||||||
{
|
|
||||||
personService.deletePerson(userName);
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@@ -1,28 +1,28 @@
|
|||||||
/*
|
/*
|
||||||
* #%L
|
* #%L
|
||||||
* Alfresco Repository
|
* Alfresco Repository
|
||||||
* %%
|
* %%
|
||||||
* Copyright (C) 2005 - 2016 Alfresco Software Limited
|
* Copyright (C) 2005 - 2016 Alfresco Software Limited
|
||||||
* %%
|
* %%
|
||||||
* This file is part of the Alfresco software.
|
* This file is part of the Alfresco software.
|
||||||
* If the software was purchased under a paid Alfresco license, the terms of
|
* If the software was purchased under a paid Alfresco license, the terms of
|
||||||
* the paid license agreement will prevail. Otherwise, the software is
|
* the paid license agreement will prevail. Otherwise, the software is
|
||||||
* provided under the following open source license terms:
|
* provided under the following open source license terms:
|
||||||
*
|
*
|
||||||
* Alfresco is free software: you can redistribute it and/or modify
|
* 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
|
* 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
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
* (at your option) any later version.
|
* (at your option) any later version.
|
||||||
*
|
*
|
||||||
* Alfresco is distributed in the hope that it will be useful,
|
* Alfresco is distributed in the hope that it will be useful,
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
* GNU Lesser General Public License for more details.
|
* GNU Lesser General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU Lesser General Public License
|
* You should have received a copy of the GNU Lesser General Public License
|
||||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||||
* #L%
|
* #L%
|
||||||
*/
|
*/
|
||||||
package org.alfresco.repo.oauth2;
|
package org.alfresco.repo.oauth2;
|
||||||
|
|
||||||
import static org.junit.Assert.assertEquals;
|
import static org.junit.Assert.assertEquals;
|
||||||
@@ -44,66 +44,64 @@ import org.alfresco.service.cmr.security.PersonService;
|
|||||||
import org.alfresco.test_category.BaseSpringTestsCategory;
|
import org.alfresco.test_category.BaseSpringTestsCategory;
|
||||||
import org.alfresco.test_category.OwnJVMTestsCategory;
|
import org.alfresco.test_category.OwnJVMTestsCategory;
|
||||||
import org.alfresco.util.ApplicationContextHelper;
|
import org.alfresco.util.ApplicationContextHelper;
|
||||||
|
import org.alfresco.util.BaseSpringTest;
|
||||||
|
import org.alfresco.util.GUID;
|
||||||
import org.alfresco.util.PropertyMap;
|
import org.alfresco.util.PropertyMap;
|
||||||
|
import org.junit.After;
|
||||||
import org.junit.AfterClass;
|
import org.junit.AfterClass;
|
||||||
|
import org.junit.Before;
|
||||||
import org.junit.BeforeClass;
|
import org.junit.BeforeClass;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.junit.experimental.categories.Category;
|
import org.junit.experimental.categories.Category;
|
||||||
import org.springframework.context.ApplicationContext;
|
import org.springframework.context.ApplicationContext;
|
||||||
|
|
||||||
@Category(BaseSpringTestsCategory.class)
|
public class OAuth2CredentialsStoreServiceTest extends BaseSpringTest
|
||||||
public class OAuth2CredentialsStoreServiceTest
|
|
||||||
{
|
{
|
||||||
private static ApplicationContext ctx = ApplicationContextHelper.getApplicationContext();
|
|
||||||
|
|
||||||
private static OAuth2CredentialsStoreService oauth2CredentialsStoreService;
|
private static OAuth2CredentialsStoreService oauth2CredentialsStoreService;
|
||||||
private static ServiceRegistry serviceRegistry;
|
private static ServiceRegistry serviceRegistry;
|
||||||
private static RetryingTransactionHelper transactionHelper;
|
private static RetryingTransactionHelper transactionHelper;
|
||||||
private static MutableAuthenticationService authenticationService;
|
private static MutableAuthenticationService authenticationService;
|
||||||
private static PersonService personService;
|
private static PersonService personService;
|
||||||
|
|
||||||
private static String RemoteSystemId = "Test-OAuth2RemoteSystem";
|
private static String RemoteSystemId = "Test-OAuth2RemoteSystem";
|
||||||
|
|
||||||
//New
|
//New
|
||||||
private static String AccessToken = "123456789ABC";
|
private static String AccessToken = "123456789ABC";
|
||||||
private static String RefreshToken = "CBA987654321";
|
private static String RefreshToken = "CBA987654321";
|
||||||
private static long dec291999 = 946450800L;
|
private static long dec291999 = 946450800L;
|
||||||
private static Date ExpiresAt = new Date(dec291999);
|
private static Date ExpiresAt = new Date(dec291999);
|
||||||
private static Date IssuedAt = new Date(dec291999);
|
private static Date IssuedAt = new Date(dec291999);
|
||||||
|
|
||||||
//Updated
|
//Updated
|
||||||
private static String UpdatedAccessToken = "abcdefghi123";
|
private static String UpdatedAccessToken = "abcdefghi123";
|
||||||
private static String UpdatedRefreshToken = "321ihgfedcba";
|
private static String UpdatedRefreshToken = "321ihgfedcba";
|
||||||
private static long dec292012 = 1356764400L;
|
private static long dec292012 = 1356764400L;
|
||||||
private static Date UpdatedExpiresAt = new Date(dec292012);
|
private static Date UpdatedExpiresAt = new Date(dec292012);
|
||||||
private static Date UpdatedIssuedAt = new Date(dec292012);
|
private static Date UpdatedIssuedAt = new Date(dec292012);
|
||||||
|
|
||||||
//Users
|
//Users
|
||||||
private static String TEST_USER_ONE = OAuth2CredentialsStoreService.class.getSimpleName() + "testuser1";
|
private static String TEST_USER_ONE = OAuth2CredentialsStoreService.class.getSimpleName() + GUID.generate();
|
||||||
private static String TEST_USER_TWO = OAuth2CredentialsStoreService.class.getSimpleName() + "testuser2";
|
private static String TEST_USER_TWO = OAuth2CredentialsStoreService.class.getSimpleName() + GUID.generate();
|
||||||
private static final String ADMIN_USER = AuthenticationUtil.getAdminUserName();
|
private static final String ADMIN_USER = AuthenticationUtil.getAdminUserName();
|
||||||
|
|
||||||
@BeforeClass
|
@Before
|
||||||
public static void setUp() throws Exception
|
public void setUp() throws Exception
|
||||||
{
|
{
|
||||||
serviceRegistry = (ServiceRegistry) ctx.getBean(ServiceRegistry.SERVICE_REGISTRY);
|
serviceRegistry = (ServiceRegistry) applicationContext.getBean(ServiceRegistry.SERVICE_REGISTRY);
|
||||||
transactionHelper = serviceRegistry.getTransactionService().getRetryingTransactionHelper();
|
transactionHelper = serviceRegistry.getTransactionService().getRetryingTransactionHelper();
|
||||||
authenticationService = serviceRegistry.getAuthenticationService();
|
authenticationService = serviceRegistry.getAuthenticationService();
|
||||||
personService = serviceRegistry.getPersonService();
|
personService = serviceRegistry.getPersonService();
|
||||||
oauth2CredentialsStoreService = (OAuth2CredentialsStoreService) ctx.getBean("oauth2CredentialsStoreService");
|
oauth2CredentialsStoreService = (OAuth2CredentialsStoreService) applicationContext.getBean("oauth2CredentialsStoreService");
|
||||||
|
|
||||||
AuthenticationUtil.setFullyAuthenticatedUser(ADMIN_USER);
|
AuthenticationUtil.setFullyAuthenticatedUser(ADMIN_USER);
|
||||||
createUser(TEST_USER_ONE);
|
createUser(TEST_USER_ONE);
|
||||||
createUser(TEST_USER_TWO);
|
createUser(TEST_USER_TWO);
|
||||||
}
|
}
|
||||||
|
|
||||||
@AfterClass
|
@After
|
||||||
public static void tearDown() throws Exception
|
public void tearDown() throws Exception
|
||||||
{
|
{
|
||||||
// Do the teardown as admin
|
AuthenticationUtil.clearCurrentSecurityContext();
|
||||||
AuthenticationUtil.setFullyAuthenticatedUser(ADMIN_USER);
|
|
||||||
deleteUser(TEST_USER_ONE);
|
|
||||||
deleteUser(TEST_USER_TWO);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -113,16 +111,16 @@ public class OAuth2CredentialsStoreServiceTest
|
|||||||
//Store new credentials
|
//Store new credentials
|
||||||
oauth2CredentialsStoreService.storePersonalOAuth2Credentials(RemoteSystemId, AccessToken, RefreshToken, ExpiresAt, IssuedAt);
|
oauth2CredentialsStoreService.storePersonalOAuth2Credentials(RemoteSystemId, AccessToken, RefreshToken, ExpiresAt, IssuedAt);
|
||||||
OAuth2CredentialsInfo oAuth2CredentialsInfo = oauth2CredentialsStoreService.getPersonalOAuth2Credentials(RemoteSystemId);
|
OAuth2CredentialsInfo oAuth2CredentialsInfo = oauth2CredentialsStoreService.getPersonalOAuth2Credentials(RemoteSystemId);
|
||||||
|
|
||||||
assertEquals("Expect that access tokens will match", AccessToken, oAuth2CredentialsInfo.getOAuthAccessToken());
|
assertEquals("Expect that access tokens will match", AccessToken, oAuth2CredentialsInfo.getOAuthAccessToken());
|
||||||
assertEquals("Expect the refresh token will match", RefreshToken, oAuth2CredentialsInfo.getOAuthRefreshToken());
|
assertEquals("Expect the refresh token will match", RefreshToken, oAuth2CredentialsInfo.getOAuthRefreshToken());
|
||||||
assertEquals("Expect that the expiration date will match", ExpiresAt, oAuth2CredentialsInfo.getOAuthTicketExpiresAt());
|
assertEquals("Expect that the expiration date will match", ExpiresAt, oAuth2CredentialsInfo.getOAuthTicketExpiresAt());
|
||||||
assertEquals("Expect that the issued date will match", IssuedAt, oAuth2CredentialsInfo.getOAuthTicketIssuedAt());
|
assertEquals("Expect that the issued date will match", IssuedAt, oAuth2CredentialsInfo.getOAuthTicketIssuedAt());
|
||||||
|
|
||||||
//Update credentials
|
//Update credentials
|
||||||
oauth2CredentialsStoreService.storePersonalOAuth2Credentials(RemoteSystemId, UpdatedAccessToken, UpdatedRefreshToken, UpdatedExpiresAt, UpdatedIssuedAt);
|
oauth2CredentialsStoreService.storePersonalOAuth2Credentials(RemoteSystemId, UpdatedAccessToken, UpdatedRefreshToken, UpdatedExpiresAt, UpdatedIssuedAt);
|
||||||
OAuth2CredentialsInfo _oAuth2CredentialsInfo = oauth2CredentialsStoreService.getPersonalOAuth2Credentials(RemoteSystemId);
|
OAuth2CredentialsInfo _oAuth2CredentialsInfo = oauth2CredentialsStoreService.getPersonalOAuth2Credentials(RemoteSystemId);
|
||||||
|
|
||||||
assertEquals("Expect that access tokens will match", UpdatedAccessToken, _oAuth2CredentialsInfo.getOAuthAccessToken());
|
assertEquals("Expect that access tokens will match", UpdatedAccessToken, _oAuth2CredentialsInfo.getOAuthAccessToken());
|
||||||
assertEquals("Expect the refresh token will match", UpdatedRefreshToken, _oAuth2CredentialsInfo.getOAuthRefreshToken());
|
assertEquals("Expect the refresh token will match", UpdatedRefreshToken, _oAuth2CredentialsInfo.getOAuthRefreshToken());
|
||||||
assertEquals("Expect that the expiration date will match", UpdatedExpiresAt, _oAuth2CredentialsInfo.getOAuthTicketExpiresAt());
|
assertEquals("Expect that the expiration date will match", UpdatedExpiresAt, _oAuth2CredentialsInfo.getOAuthTicketExpiresAt());
|
||||||
@@ -135,11 +133,11 @@ public class OAuth2CredentialsStoreServiceTest
|
|||||||
AuthenticationUtil.setFullyAuthenticatedUser(TEST_USER_ONE);
|
AuthenticationUtil.setFullyAuthenticatedUser(TEST_USER_ONE);
|
||||||
//Store new credentials
|
//Store new credentials
|
||||||
oauth2CredentialsStoreService.storeSharedOAuth2Credentials(RemoteSystemId, AccessToken, RefreshToken, ExpiresAt, IssuedAt);
|
oauth2CredentialsStoreService.storeSharedOAuth2Credentials(RemoteSystemId, AccessToken, RefreshToken, ExpiresAt, IssuedAt);
|
||||||
|
|
||||||
AuthenticationUtil.setFullyAuthenticatedUser(TEST_USER_TWO);
|
AuthenticationUtil.setFullyAuthenticatedUser(TEST_USER_TWO);
|
||||||
List<OAuth2CredentialsInfo> sharedCredentials = oauth2CredentialsStoreService.listSharedOAuth2Credentials(RemoteSystemId);
|
List<OAuth2CredentialsInfo> sharedCredentials = oauth2CredentialsStoreService.listSharedOAuth2Credentials(RemoteSystemId);
|
||||||
OAuth2CredentialsInfo oAuth2CredentialsInfo = sharedCredentials.get(0);
|
OAuth2CredentialsInfo oAuth2CredentialsInfo = sharedCredentials.get(0);
|
||||||
|
|
||||||
assertEquals("Expect that access tokens will match", AccessToken, oAuth2CredentialsInfo.getOAuthAccessToken());
|
assertEquals("Expect that access tokens will match", AccessToken, oAuth2CredentialsInfo.getOAuthAccessToken());
|
||||||
assertEquals("Expect the refresh token will match", RefreshToken, oAuth2CredentialsInfo.getOAuthRefreshToken());
|
assertEquals("Expect the refresh token will match", RefreshToken, oAuth2CredentialsInfo.getOAuthRefreshToken());
|
||||||
assertEquals("Expect that the expiration date will match", ExpiresAt, oAuth2CredentialsInfo.getOAuthTicketExpiresAt());
|
assertEquals("Expect that the expiration date will match", ExpiresAt, oAuth2CredentialsInfo.getOAuthTicketExpiresAt());
|
||||||
@@ -152,10 +150,10 @@ public class OAuth2CredentialsStoreServiceTest
|
|||||||
AuthenticationUtil.setFullyAuthenticatedUser(TEST_USER_TWO);
|
AuthenticationUtil.setFullyAuthenticatedUser(TEST_USER_TWO);
|
||||||
//Update credentials
|
//Update credentials
|
||||||
List<OAuth2CredentialsInfo> sharedCredentials = oauth2CredentialsStoreService.listSharedOAuth2Credentials(RemoteSystemId);
|
List<OAuth2CredentialsInfo> sharedCredentials = oauth2CredentialsStoreService.listSharedOAuth2Credentials(RemoteSystemId);
|
||||||
OAuth2CredentialsInfo oAuth2CredentialsInfo = sharedCredentials.get(0);
|
OAuth2CredentialsInfo oAuth2CredentialsInfo = sharedCredentials.get(0);
|
||||||
oauth2CredentialsStoreService.updateSharedOAuth2Credentials(oAuth2CredentialsInfo, RemoteSystemId, UpdatedAccessToken, UpdatedRefreshToken, UpdatedExpiresAt, UpdatedIssuedAt);
|
oauth2CredentialsStoreService.updateSharedOAuth2Credentials(oAuth2CredentialsInfo, RemoteSystemId, UpdatedAccessToken, UpdatedRefreshToken, UpdatedExpiresAt, UpdatedIssuedAt);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testUpdateSharedOAuth2CredentialsTestDeletePesonalOAuth2Credentials()
|
public void testUpdateSharedOAuth2CredentialsTestDeletePesonalOAuth2Credentials()
|
||||||
{
|
{
|
||||||
@@ -163,25 +161,25 @@ public class OAuth2CredentialsStoreServiceTest
|
|||||||
AuthenticationUtil.setFullyAuthenticatedUser(TEST_USER_ONE);
|
AuthenticationUtil.setFullyAuthenticatedUser(TEST_USER_ONE);
|
||||||
//Update credentials
|
//Update credentials
|
||||||
List<OAuth2CredentialsInfo> sharedCredentials = oauth2CredentialsStoreService.listSharedOAuth2Credentials(RemoteSystemId);
|
List<OAuth2CredentialsInfo> sharedCredentials = oauth2CredentialsStoreService.listSharedOAuth2Credentials(RemoteSystemId);
|
||||||
OAuth2CredentialsInfo oAuth2CredentialsInfo = sharedCredentials.get(0);
|
OAuth2CredentialsInfo oAuth2CredentialsInfo = sharedCredentials.get(0);
|
||||||
OAuth2CredentialsInfo _oAuth2CredentialsInfo = oauth2CredentialsStoreService.updateSharedOAuth2Credentials(oAuth2CredentialsInfo, RemoteSystemId, UpdatedAccessToken, UpdatedRefreshToken, UpdatedExpiresAt, UpdatedIssuedAt);
|
OAuth2CredentialsInfo _oAuth2CredentialsInfo = oauth2CredentialsStoreService.updateSharedOAuth2Credentials(oAuth2CredentialsInfo, RemoteSystemId, UpdatedAccessToken, UpdatedRefreshToken, UpdatedExpiresAt, UpdatedIssuedAt);
|
||||||
|
|
||||||
assertEquals("Expect that access tokens will match", UpdatedAccessToken, _oAuth2CredentialsInfo.getOAuthAccessToken());
|
assertEquals("Expect that access tokens will match", UpdatedAccessToken, _oAuth2CredentialsInfo.getOAuthAccessToken());
|
||||||
assertEquals("Expect the refresh token will match", UpdatedRefreshToken, _oAuth2CredentialsInfo.getOAuthRefreshToken());
|
assertEquals("Expect the refresh token will match", UpdatedRefreshToken, _oAuth2CredentialsInfo.getOAuthRefreshToken());
|
||||||
assertEquals("Expect that the expiration date will match", UpdatedExpiresAt, _oAuth2CredentialsInfo.getOAuthTicketExpiresAt());
|
assertEquals("Expect that the expiration date will match", UpdatedExpiresAt, _oAuth2CredentialsInfo.getOAuthTicketExpiresAt());
|
||||||
assertEquals("Expect that the issued date will match", UpdatedIssuedAt, _oAuth2CredentialsInfo.getOAuthTicketIssuedAt());
|
assertEquals("Expect that the issued date will match", UpdatedIssuedAt, _oAuth2CredentialsInfo.getOAuthTicketIssuedAt());
|
||||||
}
|
}
|
||||||
|
|
||||||
//public void testDeletePesonalOAuth2Credentials()
|
//public void testDeletePesonalOAuth2Credentials()
|
||||||
{
|
{
|
||||||
AuthenticationUtil.setFullyAuthenticatedUser(TEST_USER_ONE);
|
AuthenticationUtil.setFullyAuthenticatedUser(TEST_USER_ONE);
|
||||||
boolean deleted = oauth2CredentialsStoreService.deletePersonalOAuth2Credentials(RemoteSystemId);
|
boolean deleted = oauth2CredentialsStoreService.deletePersonalOAuth2Credentials(RemoteSystemId);
|
||||||
|
|
||||||
assertTrue(deleted);
|
assertTrue(deleted);
|
||||||
|
|
||||||
AuthenticationUtil.setFullyAuthenticatedUser(TEST_USER_TWO);
|
AuthenticationUtil.setFullyAuthenticatedUser(TEST_USER_TWO);
|
||||||
boolean _deleted = oauth2CredentialsStoreService.deletePersonalOAuth2Credentials(RemoteSystemId);
|
boolean _deleted = oauth2CredentialsStoreService.deletePersonalOAuth2Credentials(RemoteSystemId);
|
||||||
|
|
||||||
assertFalse(_deleted);
|
assertFalse(_deleted);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -195,66 +193,48 @@ public class OAuth2CredentialsStoreServiceTest
|
|||||||
OAuth2CredentialsInfo oAuth2CredentialsInfo = sharedCredentials.get(0);
|
OAuth2CredentialsInfo oAuth2CredentialsInfo = sharedCredentials.get(0);
|
||||||
oauth2CredentialsStoreService.deleteSharedOAuth2Credentials(RemoteSystemId, oAuth2CredentialsInfo);
|
oauth2CredentialsStoreService.deleteSharedOAuth2Credentials(RemoteSystemId, oAuth2CredentialsInfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
//public void testDeleteSharedOAuth2Credentials()
|
//public void testDeleteSharedOAuth2Credentials()
|
||||||
{
|
{
|
||||||
AuthenticationUtil.setFullyAuthenticatedUser(TEST_USER_ONE);
|
AuthenticationUtil.setFullyAuthenticatedUser(TEST_USER_ONE);
|
||||||
List<OAuth2CredentialsInfo> sharedCredentials = oauth2CredentialsStoreService.listSharedOAuth2Credentials(RemoteSystemId);
|
List<OAuth2CredentialsInfo> sharedCredentials = oauth2CredentialsStoreService.listSharedOAuth2Credentials(RemoteSystemId);
|
||||||
OAuth2CredentialsInfo oAuth2CredentialsInfo = sharedCredentials.get(0);
|
OAuth2CredentialsInfo oAuth2CredentialsInfo = sharedCredentials.get(0);
|
||||||
boolean deleted = oauth2CredentialsStoreService.deleteSharedOAuth2Credentials(RemoteSystemId, oAuth2CredentialsInfo);
|
boolean deleted = oauth2CredentialsStoreService.deleteSharedOAuth2Credentials(RemoteSystemId, oAuth2CredentialsInfo);
|
||||||
|
|
||||||
assertTrue(deleted);
|
assertTrue(deleted);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// --------------------------------------------------------------------------------
|
// --------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
private static void createUser(final String userName)
|
private static void createUser(final String userName)
|
||||||
{
|
{
|
||||||
transactionHelper.doInTransaction(new RetryingTransactionHelper.RetryingTransactionCallback<Void>()
|
transactionHelper.doInTransaction(new RetryingTransactionHelper.RetryingTransactionCallback<Void>()
|
||||||
{
|
{
|
||||||
@Override
|
@Override
|
||||||
public Void execute() throws Throwable
|
public Void execute() throws Throwable
|
||||||
{
|
{
|
||||||
if (!authenticationService.authenticationExists(userName))
|
if (!authenticationService.authenticationExists(userName))
|
||||||
{
|
{
|
||||||
authenticationService.createAuthentication(userName, "PWD".toCharArray());
|
authenticationService.createAuthentication(userName, "PWD".toCharArray());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!personService.personExists(userName))
|
if (!personService.personExists(userName))
|
||||||
{
|
{
|
||||||
PropertyMap ppOne = new PropertyMap();
|
PropertyMap ppOne = new PropertyMap();
|
||||||
ppOne.put(ContentModel.PROP_USERNAME, userName);
|
ppOne.put(ContentModel.PROP_USERNAME, userName);
|
||||||
ppOne.put(ContentModel.PROP_FIRSTNAME, "firstName");
|
ppOne.put(ContentModel.PROP_FIRSTNAME, "firstName");
|
||||||
ppOne.put(ContentModel.PROP_LASTNAME, "lastName");
|
ppOne.put(ContentModel.PROP_LASTNAME, "lastName");
|
||||||
ppOne.put(ContentModel.PROP_EMAIL, "email@email.com");
|
ppOne.put(ContentModel.PROP_EMAIL, "email@email.com");
|
||||||
ppOne.put(ContentModel.PROP_JOBTITLE, "jobTitle");
|
ppOne.put(ContentModel.PROP_JOBTITLE, "jobTitle");
|
||||||
|
|
||||||
personService.createPerson(ppOne);
|
personService.createPerson(ppOne);
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
}
|
||||||
private static void deleteUser(final String userName)
|
|
||||||
{
|
|
||||||
transactionHelper.doInTransaction(new RetryingTransactionHelper.RetryingTransactionCallback<Void>()
|
|
||||||
{
|
|
||||||
@Override
|
|
||||||
public Void execute() throws Throwable
|
|
||||||
{
|
|
||||||
if (personService.personExists(userName))
|
|
||||||
{
|
|
||||||
personService.deletePerson(userName);
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@@ -25,11 +25,6 @@
|
|||||||
*/
|
*/
|
||||||
package org.alfresco.repo.rawevents;
|
package org.alfresco.repo.rawevents;
|
||||||
|
|
||||||
import static org.junit.Assert.assertEquals;
|
|
||||||
import static org.junit.Assert.assertFalse;
|
|
||||||
import static org.junit.Assert.assertNotNull;
|
|
||||||
import static org.junit.Assert.assertTrue;
|
|
||||||
|
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
|
|
||||||
import org.alfresco.model.ContentModel;
|
import org.alfresco.model.ContentModel;
|
||||||
@@ -44,7 +39,6 @@ import org.alfresco.repo.rawevents.types.EventType;
|
|||||||
import org.alfresco.repo.rawevents.types.OnContentUpdatePolicyEvent;
|
import org.alfresco.repo.rawevents.types.OnContentUpdatePolicyEvent;
|
||||||
import org.alfresco.repo.security.authentication.AuthenticationComponent;
|
import org.alfresco.repo.security.authentication.AuthenticationComponent;
|
||||||
import org.alfresco.repo.transaction.RetryingTransactionHelper;
|
import org.alfresco.repo.transaction.RetryingTransactionHelper;
|
||||||
import org.alfresco.service.ServiceRegistry;
|
|
||||||
import org.alfresco.service.cmr.repository.ChildAssociationRef;
|
import org.alfresco.service.cmr.repository.ChildAssociationRef;
|
||||||
import org.alfresco.service.cmr.repository.ContentData;
|
import org.alfresco.service.cmr.repository.ContentData;
|
||||||
import org.alfresco.service.cmr.repository.ContentService;
|
import org.alfresco.service.cmr.repository.ContentService;
|
||||||
@@ -53,64 +47,49 @@ import org.alfresco.service.cmr.repository.NodeRef;
|
|||||||
import org.alfresco.service.cmr.repository.NodeService;
|
import org.alfresco.service.cmr.repository.NodeService;
|
||||||
import org.alfresco.service.cmr.repository.StoreRef;
|
import org.alfresco.service.cmr.repository.StoreRef;
|
||||||
import org.alfresco.service.namespace.QName;
|
import org.alfresco.service.namespace.QName;
|
||||||
import org.alfresco.test_category.OwnJVMTestsCategory;
|
import org.alfresco.util.BaseSpringTest;
|
||||||
import org.alfresco.util.ApplicationContextHelper;
|
|
||||||
import org.alfresco.util.GUID;
|
import org.alfresco.util.GUID;
|
||||||
import org.alfresco.util.PropertyMap;
|
import org.alfresco.util.PropertyMap;
|
||||||
import org.apache.camel.CamelContext;
|
import org.apache.camel.CamelContext;
|
||||||
import org.apache.camel.component.mock.MockEndpoint;
|
import org.apache.camel.component.mock.MockEndpoint;
|
||||||
import org.junit.After;
|
import org.junit.After;
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
import org.junit.Rule;
|
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.junit.experimental.categories.Category;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.junit.rules.TestName;
|
|
||||||
import org.springframework.context.ApplicationContext;
|
|
||||||
|
|
||||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Provides a base set of tests for {@link EventBehaviour}
|
* Provides a base set of tests for {@link EventBehaviour}
|
||||||
*
|
*
|
||||||
* @author Cristian Turlica
|
* @author Cristian Turlica
|
||||||
*/
|
*/
|
||||||
@Category(OwnJVMTestsCategory.class)
|
public class EventBehaviourTest extends BaseSpringTest
|
||||||
public class EventBehaviourTest
|
|
||||||
{
|
{
|
||||||
private static final String TEST_NAMESPACE = "http://www.alfresco.org/test/EventBehaviourTest";
|
private static final String TEST_NAMESPACE = "http://www.alfresco.org/test/EventBehaviourTest";
|
||||||
|
|
||||||
|
@Autowired
|
||||||
private RetryingTransactionHelper retryingTransactionHelper;
|
private RetryingTransactionHelper retryingTransactionHelper;
|
||||||
|
@Autowired
|
||||||
private ContentService contentService;
|
private ContentService contentService;
|
||||||
|
@Autowired
|
||||||
private PolicyComponent policyComponent;
|
private PolicyComponent policyComponent;
|
||||||
|
@Autowired
|
||||||
private NodeService nodeService;
|
private NodeService nodeService;
|
||||||
|
@Autowired
|
||||||
private AuthenticationComponent authenticationComponent;
|
private AuthenticationComponent authenticationComponent;
|
||||||
private NodeRef rootNodeRef;
|
private NodeRef rootNodeRef;
|
||||||
private NodeRef contentNodeRef;
|
private NodeRef contentNodeRef;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
private CamelContext camelContext;
|
private CamelContext camelContext;
|
||||||
|
@Autowired
|
||||||
private AbstractEventProducer eventProducer;
|
private AbstractEventProducer eventProducer;
|
||||||
private ObjectMapper messagingObjectMapper;
|
|
||||||
|
|
||||||
private boolean policyFired = false;
|
private boolean policyFired = false;
|
||||||
private boolean newContent = true;
|
private boolean newContent = true;
|
||||||
|
|
||||||
@Rule
|
|
||||||
public TestName name = new TestName();
|
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
public void setUp() throws Exception
|
public void setUp() throws Exception
|
||||||
{
|
{
|
||||||
ApplicationContext ctx = ApplicationContextHelper.getApplicationContext();
|
|
||||||
retryingTransactionHelper = (RetryingTransactionHelper) ctx.getBean("retryingTransactionHelper");
|
|
||||||
nodeService = (NodeService) ctx.getBean("NodeService");
|
|
||||||
contentService = (ContentService) ctx.getBean(ServiceRegistry.CONTENT_SERVICE.getLocalName());
|
|
||||||
policyComponent = (PolicyComponent) ctx.getBean("policyComponent");
|
|
||||||
authenticationComponent = (AuthenticationComponent) ctx.getBean("authenticationComponent");
|
|
||||||
|
|
||||||
camelContext = (CamelContext) ctx.getBean("alfrescoCamelContext");
|
|
||||||
eventProducer = (AbstractEventProducer) ctx.getBean("transactionAwareEventProducer");
|
|
||||||
messagingObjectMapper = (ObjectMapper) ctx.getBean("alfrescoEventObjectMapper");
|
|
||||||
|
|
||||||
// authenticate
|
// authenticate
|
||||||
authenticationComponent.setSystemUserAsCurrentUser();
|
authenticationComponent.setSystemUserAsCurrentUser();
|
||||||
}
|
}
|
||||||
@@ -142,7 +121,7 @@ public class EventBehaviourTest
|
|||||||
private void setupTestData()
|
private void setupTestData()
|
||||||
{
|
{
|
||||||
// create a store and get the root node
|
// create a store and get the root node
|
||||||
StoreRef storeRef = new StoreRef(StoreRef.PROTOCOL_WORKSPACE, name.getMethodName());
|
StoreRef storeRef = new StoreRef(StoreRef.PROTOCOL_WORKSPACE, this.getClass().getName());
|
||||||
if (!nodeService.exists(storeRef))
|
if (!nodeService.exists(storeRef))
|
||||||
{
|
{
|
||||||
storeRef = nodeService.createStore(storeRef.getProtocol(), storeRef.getIdentifier());
|
storeRef = nodeService.createStore(storeRef.getProtocol(), storeRef.getIdentifier());
|
||||||
@@ -397,7 +376,7 @@ public class EventBehaviourTest
|
|||||||
|
|
||||||
private String getMockEndpointUri()
|
private String getMockEndpointUri()
|
||||||
{
|
{
|
||||||
return "mock:" + this.getClass().getSimpleName() + "_" + name.getMethodName();
|
return "mock:" + this.getClass().getSimpleName() + "_" + GUID.generate();
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("unused")
|
@SuppressWarnings("unused")
|
||||||
@@ -418,4 +397,4 @@ public class EventBehaviourTest
|
|||||||
|
|
||||||
return event;
|
return event;
|
||||||
}
|
}
|
||||||
}
|
}
|
@@ -25,23 +25,15 @@
|
|||||||
*/
|
*/
|
||||||
package org.alfresco.repo.rawevents;
|
package org.alfresco.repo.rawevents;
|
||||||
|
|
||||||
import static org.junit.Assert.assertEquals;
|
|
||||||
import static org.junit.Assert.assertNotNull;
|
|
||||||
|
|
||||||
import org.alfresco.repo.rawevents.types.EventType;
|
import org.alfresco.repo.rawevents.types.EventType;
|
||||||
import org.alfresco.repo.rawevents.types.OnContentUpdatePolicyEvent;
|
import org.alfresco.repo.rawevents.types.OnContentUpdatePolicyEvent;
|
||||||
import org.alfresco.repo.transaction.RetryingTransactionHelper;
|
import org.alfresco.repo.transaction.RetryingTransactionHelper;
|
||||||
import org.alfresco.test_category.OwnJVMTestsCategory;
|
import org.alfresco.util.BaseSpringTest;
|
||||||
import org.alfresco.util.ApplicationContextHelper;
|
|
||||||
import org.alfresco.util.GUID;
|
import org.alfresco.util.GUID;
|
||||||
import org.apache.camel.CamelContext;
|
import org.apache.camel.CamelContext;
|
||||||
import org.apache.camel.component.mock.MockEndpoint;
|
import org.apache.camel.component.mock.MockEndpoint;
|
||||||
import org.junit.Before;
|
|
||||||
import org.junit.Rule;
|
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.junit.experimental.categories.Category;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.junit.rules.TestName;
|
|
||||||
import org.springframework.context.ApplicationContext;
|
|
||||||
|
|
||||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
|
|
||||||
@@ -50,27 +42,17 @@ import com.fasterxml.jackson.databind.ObjectMapper;
|
|||||||
*
|
*
|
||||||
* @author Cristian Turlica
|
* @author Cristian Turlica
|
||||||
*/
|
*/
|
||||||
@Category(OwnJVMTestsCategory.class)
|
public class TransactionAwareEventProducerTest extends BaseSpringTest
|
||||||
public class TransactionAwareEventProducerTest
|
|
||||||
{
|
{
|
||||||
|
@Autowired
|
||||||
private RetryingTransactionHelper retryingTransactionHelper;
|
private RetryingTransactionHelper retryingTransactionHelper;
|
||||||
|
@Autowired
|
||||||
private CamelContext camelContext;
|
private CamelContext camelContext;
|
||||||
|
@Autowired
|
||||||
private TransactionAwareEventProducer eventProducer;
|
private TransactionAwareEventProducer eventProducer;
|
||||||
|
@Autowired
|
||||||
private ObjectMapper messagingObjectMapper;
|
private ObjectMapper messagingObjectMapper;
|
||||||
|
|
||||||
@Rule
|
|
||||||
public TestName name = new TestName();
|
|
||||||
|
|
||||||
@Before
|
|
||||||
public void setUp() throws Exception
|
|
||||||
{
|
|
||||||
ApplicationContext ctx = ApplicationContextHelper.getApplicationContext();
|
|
||||||
retryingTransactionHelper = (RetryingTransactionHelper) ctx.getBean("retryingTransactionHelper");
|
|
||||||
camelContext = (CamelContext) ctx.getBean("alfrescoCamelContext");
|
|
||||||
eventProducer = (TransactionAwareEventProducer) ctx.getBean("transactionAwareEventProducer");
|
|
||||||
messagingObjectMapper = (ObjectMapper) ctx.getBean("alfrescoEventObjectMapper");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void send() throws Exception
|
public void send() throws Exception
|
||||||
{
|
{
|
||||||
@@ -127,6 +109,6 @@ public class TransactionAwareEventProducerTest
|
|||||||
|
|
||||||
private String getMockEndpointUri()
|
private String getMockEndpointUri()
|
||||||
{
|
{
|
||||||
return "mock:" + this.getClass().getSimpleName() + "_" + name.getMethodName();
|
return "mock:" + this.getClass().getSimpleName() + "_" + GUID.generate();
|
||||||
}
|
}
|
||||||
}
|
}
|
@@ -115,10 +115,6 @@ public abstract class AbstractRenditionIntegrationTest extends BaseSpringTest
|
|||||||
@BeforeClass
|
@BeforeClass
|
||||||
public static void before()
|
public static void before()
|
||||||
{
|
{
|
||||||
// Ensure other applications contexts are closed...
|
|
||||||
// Multiple consumers not supported for same direct vm in different Camel contexts.
|
|
||||||
ApplicationContextHelper.closeApplicationContext();
|
|
||||||
|
|
||||||
// Use the docker images for transforms
|
// Use the docker images for transforms
|
||||||
System.setProperty("alfresco-pdf-renderer.url", "http://localhost:8090/");
|
System.setProperty("alfresco-pdf-renderer.url", "http://localhost:8090/");
|
||||||
System.setProperty("img.url", "http://localhost:8091");
|
System.setProperty("img.url", "http://localhost:8091");
|
||||||
|
@@ -25,7 +25,6 @@
|
|||||||
*/
|
*/
|
||||||
package org.alfresco.repo.rendition2;
|
package org.alfresco.repo.rendition2;
|
||||||
|
|
||||||
import junit.framework.TestCase;
|
|
||||||
import org.alfresco.repo.content.transform.swf.SWFTransformationOptions;
|
import org.alfresco.repo.content.transform.swf.SWFTransformationOptions;
|
||||||
import org.alfresco.repo.rendition.RenditionServiceImpl;
|
import org.alfresco.repo.rendition.RenditionServiceImpl;
|
||||||
import org.alfresco.repo.security.authentication.AuthenticationComponent;
|
import org.alfresco.repo.security.authentication.AuthenticationComponent;
|
||||||
@@ -34,14 +33,16 @@ import org.alfresco.repo.thumbnail.ThumbnailRenditionConvertor;
|
|||||||
import org.alfresco.service.cmr.rendition.RenditionDefinition;
|
import org.alfresco.service.cmr.rendition.RenditionDefinition;
|
||||||
import org.alfresco.service.cmr.rendition.RenditionService;
|
import org.alfresco.service.cmr.rendition.RenditionService;
|
||||||
import org.alfresco.service.cmr.repository.TransformationOptions;
|
import org.alfresco.service.cmr.repository.TransformationOptions;
|
||||||
import org.alfresco.util.ApplicationContextHelper;
|
import org.alfresco.util.BaseSpringTest;
|
||||||
import org.springframework.context.ApplicationContext;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.StringJoiner;
|
import java.util.StringJoiner;
|
||||||
|
import org.junit.After;
|
||||||
|
import org.junit.Before;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tests that the replacement {@link RenditionDefinition2} generates the same {@link TransformationOptions} as the
|
* Tests that the replacement {@link RenditionDefinition2} generates the same {@link TransformationOptions} as the
|
||||||
@@ -52,28 +53,26 @@ import java.util.StringJoiner;
|
|||||||
* @author adavis
|
* @author adavis
|
||||||
*/
|
*/
|
||||||
@Deprecated
|
@Deprecated
|
||||||
public class RenditionDefinitionTest extends TestCase
|
public class RenditionDefinitionTest extends BaseSpringTest
|
||||||
{
|
{
|
||||||
private RenditionServiceImpl renditionService;
|
private RenditionServiceImpl renditionService;
|
||||||
private RenditionDefinitionRegistry2 renditionDefinitionRegistry2;
|
private RenditionDefinitionRegistry2 renditionDefinitionRegistry2;
|
||||||
private TransformationOptionsConverter transformationOptionsConverter;
|
private TransformationOptionsConverter transformationOptionsConverter;
|
||||||
|
|
||||||
private static ApplicationContext ctx = ApplicationContextHelper.getApplicationContext();
|
|
||||||
|
|
||||||
private AuthenticationComponent authenticationComponent;
|
private AuthenticationComponent authenticationComponent;
|
||||||
|
|
||||||
@Override
|
@Before
|
||||||
protected void setUp() throws Exception
|
public void setUp() throws Exception
|
||||||
{
|
{
|
||||||
authenticationComponent = (AuthenticationComponent) ctx.getBean("AuthenticationComponent");
|
authenticationComponent = (AuthenticationComponent) applicationContext.getBean("AuthenticationComponent");
|
||||||
renditionService = (RenditionServiceImpl) ctx.getBean("renditionService");
|
renditionService = (RenditionServiceImpl) applicationContext.getBean("renditionService");
|
||||||
renditionDefinitionRegistry2 = (RenditionDefinitionRegistry2) ctx.getBean("renditionDefinitionRegistry2");
|
renditionDefinitionRegistry2 = (RenditionDefinitionRegistry2) applicationContext.getBean("renditionDefinitionRegistry2");
|
||||||
transformationOptionsConverter = (TransformationOptionsConverter) ctx.getBean("transformOptionsConverter");
|
transformationOptionsConverter = (TransformationOptionsConverter) applicationContext.getBean("transformOptionsConverter");
|
||||||
authenticationComponent.setSystemUserAsCurrentUser();
|
authenticationComponent.setSystemUserAsCurrentUser();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@After
|
||||||
protected void tearDown() throws Exception
|
public void tearDown() throws Exception
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@@ -98,6 +97,7 @@ public class RenditionDefinitionTest extends TestCase
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
public void testGetRenderingEngineDefinition() throws Exception
|
public void testGetRenderingEngineDefinition() throws Exception
|
||||||
{
|
{
|
||||||
ThumbnailRenditionConvertor converter = new ThumbnailRenditionConvertor();
|
ThumbnailRenditionConvertor converter = new ThumbnailRenditionConvertor();
|
||||||
|
@@ -4,21 +4,21 @@
|
|||||||
* %%
|
* %%
|
||||||
* Copyright (C) 2005 - 2016 Alfresco Software Limited
|
* Copyright (C) 2005 - 2016 Alfresco Software Limited
|
||||||
* %%
|
* %%
|
||||||
* This file is part of the Alfresco software.
|
* This file is part of the Alfresco software.
|
||||||
* If the software was purchased under a paid Alfresco license, the terms of
|
* If the software was purchased under a paid Alfresco license, the terms of
|
||||||
* the paid license agreement will prevail. Otherwise, the software is
|
* the paid license agreement will prevail. Otherwise, the software is
|
||||||
* provided under the following open source license terms:
|
* provided under the following open source license terms:
|
||||||
*
|
*
|
||||||
* Alfresco is free software: you can redistribute it and/or modify
|
* 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
|
* 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
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
* (at your option) any later version.
|
* (at your option) any later version.
|
||||||
*
|
*
|
||||||
* Alfresco is distributed in the hope that it will be useful,
|
* Alfresco is distributed in the hope that it will be useful,
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
* GNU Lesser General Public License for more details.
|
* GNU Lesser General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU Lesser General Public License
|
* You should have received a copy of the GNU Lesser General Public License
|
||||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||||
* #L%
|
* #L%
|
||||||
@@ -33,8 +33,6 @@ import java.util.Map;
|
|||||||
import javax.transaction.Status;
|
import javax.transaction.Status;
|
||||||
import javax.transaction.UserTransaction;
|
import javax.transaction.UserTransaction;
|
||||||
|
|
||||||
import junit.framework.TestCase;
|
|
||||||
|
|
||||||
import org.alfresco.model.ContentModel;
|
import org.alfresco.model.ContentModel;
|
||||||
import org.alfresco.repo.domain.dialect.Dialect;
|
import org.alfresco.repo.domain.dialect.Dialect;
|
||||||
import org.alfresco.repo.domain.dialect.PostgreSQLDialect;
|
import org.alfresco.repo.domain.dialect.PostgreSQLDialect;
|
||||||
@@ -51,32 +49,29 @@ import org.alfresco.service.cmr.search.QueryParameterDefinition;
|
|||||||
import org.alfresco.service.namespace.DynamicNamespacePrefixResolver;
|
import org.alfresco.service.namespace.DynamicNamespacePrefixResolver;
|
||||||
import org.alfresco.service.namespace.QName;
|
import org.alfresco.service.namespace.QName;
|
||||||
import org.alfresco.service.transaction.TransactionService;
|
import org.alfresco.service.transaction.TransactionService;
|
||||||
import org.alfresco.test_category.OwnJVMTestsCategory;
|
import org.alfresco.util.BaseSpringTest;
|
||||||
import org.alfresco.util.ApplicationContextHelper;
|
|
||||||
import org.alfresco.util.ISO9075;
|
import org.alfresco.util.ISO9075;
|
||||||
import org.junit.experimental.categories.Category;
|
import org.junit.After;
|
||||||
import org.springframework.context.ApplicationContext;
|
import org.junit.Before;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see org.alfresco.repo.search.SearcherComponent
|
* @see org.alfresco.repo.search.SearcherComponent
|
||||||
*
|
*
|
||||||
* @author Derek Hulley
|
* @author Derek Hulley
|
||||||
*/
|
*/
|
||||||
@Category({OwnJVMTestsCategory.class})
|
public class SearcherComponentTest extends BaseSpringTest
|
||||||
public class SearcherComponentTest extends TestCase
|
|
||||||
{
|
{
|
||||||
private static ApplicationContext ctx = ApplicationContextHelper.getApplicationContext();
|
|
||||||
|
|
||||||
//private static String COMPLEX_LOCAL_NAME = " `¬¦!\"£$%^&*()-_=+\t\n\\\u0000[]{};'#:@~,./<>?\\|\u0123\u4567\u8900\uabcd\uefff_xT65A_";
|
//private static String COMPLEX_LOCAL_NAME = " `¬¦!\"£$%^&*()-_=+\t\n\\\u0000[]{};'#:@~,./<>?\\|\u0123\u4567\u8900\uabcd\uefff_xT65A_";
|
||||||
// \u0123 and \u8900 removed
|
// \u0123 and \u8900 removed
|
||||||
|
|
||||||
//private static String COMPLEX_LOCAL_NAME = "\u0020\u0060\u00ac\u00a6\u0021\"\u00a3\u0024\u0025\u005e\u0026\u002a\u0028\u0029\u002d\u005f\u003d\u002b\t\n\\\u0000\u005b\u005d\u007b\u007d\u003b\u0027\u0023\u003a\u0040\u007e\u002c\u002e\u002f\u003c\u003e\u003f\\u007c\u4567\uabcd\uefff\u005f\u0078\u0054\u0036\u0035\u0041\u005f";
|
//private static String COMPLEX_LOCAL_NAME = "\u0020\u0060\u00ac\u00a6\u0021\"\u00a3\u0024\u0025\u005e\u0026\u002a\u0028\u0029\u002d\u005f\u003d\u002b\t\n\\\u0000\u005b\u005d\u007b\u007d\u003b\u0027\u0023\u003a\u0040\u007e\u002c\u002e\u002f\u003c\u003e\u003f\\u007c\u4567\uabcd\uefff\u005f\u0078\u0054\u0036\u0035\u0041\u005f";
|
||||||
|
|
||||||
private static String COMPLEX_LOCAL_NAME = "\u0020\u0060\u00ac\u00a6\u0021\"\u00a3\u0024\u0025\u005e\u0026\u002a\u0028\u0029\u002d\u005f\u003d\u002b\t\n\\\u0000\u005b\u005d\u007b\u007d\u003b\u0027\u0023\u003a\u0040\u007e\u002c\u002e\u002f\u003c\u003e\u003f\\u007c\u005f\u0078\u0054\u0036\u0035\u0041\u005f";
|
private static String COMPLEX_LOCAL_NAME = "\u0020\u0060\u00ac\u00a6\u0021\"\u00a3\u0024\u0025\u005e\u0026\u002a\u0028\u0029\u002d\u005f\u003d\u002b\t\n\\\u0000\u005b\u005d\u007b\u007d\u003b\u0027\u0023\u003a\u0040\u007e\u002c\u002e\u002f\u003c\u003e\u003f\\u007c\u005f\u0078\u0054\u0036\u0035\u0041\u005f";
|
||||||
|
|
||||||
private static String COMPLEX_LOCAL_NAME_NO_U0000 = "\u0020\u0060\u00ac\u00a6\u0021\"\u00a3\u0024\u0025\u005e\u0026\u002a\u0028\u0029\u002d\u005f\u003d\u002b\t\n\\\u005b\u005d\u007b\u007d\u003b\u0027\u0023\u003a\u0040\u007e\u002c\u002e\u002f\u003c\u003e\u003f\\u007c\u005f\u0078\u0054\u0036\u0035\u0041\u005f";
|
private static String COMPLEX_LOCAL_NAME_NO_U0000 = "\u0020\u0060\u00ac\u00a6\u0021\"\u00a3\u0024\u0025\u005e\u0026\u002a\u0028\u0029\u002d\u005f\u003d\u002b\t\n\\\u005b\u005d\u007b\u007d\u003b\u0027\u0023\u003a\u0040\u007e\u002c\u002e\u002f\u003c\u003e\u003f\\u007c\u005f\u0078\u0054\u0036\u0035\u0041\u005f";
|
||||||
|
|
||||||
|
|
||||||
private ServiceRegistry serviceRegistry;
|
private ServiceRegistry serviceRegistry;
|
||||||
|
|
||||||
private TransactionService transactionService;
|
private TransactionService transactionService;
|
||||||
@@ -92,30 +87,31 @@ public class SearcherComponentTest extends TestCase
|
|||||||
private NodeRef rootNodeRef;
|
private NodeRef rootNodeRef;
|
||||||
|
|
||||||
private UserTransaction txn;
|
private UserTransaction txn;
|
||||||
|
|
||||||
// TODO: pending replacement
|
// TODO: pending replacement
|
||||||
private Dialect dialect;
|
private Dialect dialect;
|
||||||
|
|
||||||
|
@Before
|
||||||
public void setUp() throws Exception
|
public void setUp() throws Exception
|
||||||
{
|
{
|
||||||
dialect = (Dialect) ctx.getBean("dialect");
|
dialect = (Dialect) applicationContext.getBean("dialect");
|
||||||
if (dialect instanceof PostgreSQLDialect)
|
if (dialect instanceof PostgreSQLDialect)
|
||||||
{
|
{
|
||||||
// Note: PostgreSQL does not support \u0000 char embedded in a string
|
// Note: PostgreSQL does not support \u0000 char embedded in a string
|
||||||
// http://archives.postgresql.org/pgsql-jdbc/2007-02/msg00115.php
|
// http://archives.postgresql.org/pgsql-jdbc/2007-02/msg00115.php
|
||||||
COMPLEX_LOCAL_NAME = COMPLEX_LOCAL_NAME_NO_U0000;
|
COMPLEX_LOCAL_NAME = COMPLEX_LOCAL_NAME_NO_U0000;
|
||||||
}
|
}
|
||||||
|
|
||||||
serviceRegistry = (ServiceRegistry) ctx.getBean(ServiceRegistry.SERVICE_REGISTRY);
|
serviceRegistry = (ServiceRegistry) applicationContext.getBean(ServiceRegistry.SERVICE_REGISTRY);
|
||||||
transactionService = serviceRegistry.getTransactionService();
|
transactionService = serviceRegistry.getTransactionService();
|
||||||
dictionaryService = BaseNodeServiceTest.loadModel(ctx);
|
dictionaryService = BaseNodeServiceTest.loadModel(applicationContext);
|
||||||
nodeService = serviceRegistry.getNodeService();
|
nodeService = serviceRegistry.getNodeService();
|
||||||
|
|
||||||
this.authenticationComponent = (AuthenticationComponent) ctx.getBean("authenticationComponent");
|
this.authenticationComponent = (AuthenticationComponent) applicationContext.getBean("authenticationComponent");
|
||||||
this.authenticationComponent.setSystemUserAsCurrentUser();
|
this.authenticationComponent.setSystemUserAsCurrentUser();
|
||||||
|
|
||||||
// get the indexer and searcher factory
|
// get the indexer and searcher factory
|
||||||
IndexerAndSearcher indexerAndSearcher = (IndexerAndSearcher) ctx.getBean("indexerAndSearcherFactory");
|
IndexerAndSearcher indexerAndSearcher = (IndexerAndSearcher) applicationContext.getBean("indexerAndSearcherFactory");
|
||||||
searcher = new SearcherComponent();
|
searcher = new SearcherComponent();
|
||||||
searcher.setIndexerAndSearcherFactory(indexerAndSearcher);
|
searcher.setIndexerAndSearcherFactory(indexerAndSearcher);
|
||||||
// create a test workspace
|
// create a test workspace
|
||||||
@@ -127,6 +123,7 @@ public class SearcherComponentTest extends TestCase
|
|||||||
txn.begin();
|
txn.begin();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@After
|
||||||
public void tearDown() throws Exception
|
public void tearDown() throws Exception
|
||||||
{
|
{
|
||||||
if (txn.getStatus() == Status.STATUS_ACTIVE)
|
if (txn.getStatus() == Status.STATUS_ACTIVE)
|
||||||
@@ -137,6 +134,7 @@ public class SearcherComponentTest extends TestCase
|
|||||||
super.tearDown();
|
super.tearDown();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
public void testNodeXPath() throws Exception
|
public void testNodeXPath() throws Exception
|
||||||
{
|
{
|
||||||
Map<QName, ChildAssociationRef> assocRefs = BaseNodeServiceTest.buildNodeGraph(nodeService, rootNodeRef);
|
Map<QName, ChildAssociationRef> assocRefs = BaseNodeServiceTest.buildNodeGraph(nodeService, rootNodeRef);
|
||||||
@@ -291,7 +289,7 @@ public class SearcherComponentTest extends TestCase
|
|||||||
xpath.addNamespace(BaseNodeServiceTest.TEST_PREFIX, BaseNodeServiceTest.NAMESPACE);
|
xpath.addNamespace(BaseNodeServiceTest.TEST_PREFIX, BaseNodeServiceTest.NAMESPACE);
|
||||||
list = xpath.selectNodes(assocRefs.get(qname));
|
list = xpath.selectNodes(assocRefs.get(qname));
|
||||||
assertEquals(1, list.size());
|
assertEquals(1, list.size());
|
||||||
|
|
||||||
xpathStr = "test:root_p_n1 | test:root_p_n2";
|
xpathStr = "test:root_p_n1 | test:root_p_n2";
|
||||||
xpath = new NodeServiceXPath(xpathStr, documentNavigator, null);
|
xpath = new NodeServiceXPath(xpathStr, documentNavigator, null);
|
||||||
xpath.addNamespace(BaseNodeServiceTest.TEST_PREFIX, BaseNodeServiceTest.NAMESPACE);
|
xpath.addNamespace(BaseNodeServiceTest.TEST_PREFIX, BaseNodeServiceTest.NAMESPACE);
|
||||||
@@ -299,6 +297,7 @@ public class SearcherComponentTest extends TestCase
|
|||||||
assertEquals(2, list.size());
|
assertEquals(2, list.size());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
public void testSelectAPI() throws Exception
|
public void testSelectAPI() throws Exception
|
||||||
{
|
{
|
||||||
Map<QName, ChildAssociationRef> assocRefs = BaseNodeServiceTest.buildNodeGraph(nodeService, rootNodeRef);
|
Map<QName, ChildAssociationRef> assocRefs = BaseNodeServiceTest.buildNodeGraph(nodeService, rootNodeRef);
|
||||||
@@ -319,33 +318,33 @@ public class SearcherComponentTest extends TestCase
|
|||||||
List<Serializable> attributes = searcher.selectProperties(rootNodeRef, "//@test:animal", null,
|
List<Serializable> attributes = searcher.selectProperties(rootNodeRef, "//@test:animal", null,
|
||||||
namespacePrefixResolver, false);
|
namespacePrefixResolver, false);
|
||||||
assertEquals(1, attributes.size());
|
assertEquals(1, attributes.size());
|
||||||
|
|
||||||
NodeRef n1 = assocRefs.get(QName.createQName(BaseNodeServiceTest.NAMESPACE, "root_p_n1")).getChildRef();
|
NodeRef n1 = assocRefs.get(QName.createQName(BaseNodeServiceTest.NAMESPACE, "root_p_n1")).getChildRef();
|
||||||
NodeRef n2 = assocRefs.get(QName.createQName(BaseNodeServiceTest.NAMESPACE, "root_p_n2")).getChildRef();
|
NodeRef n2 = assocRefs.get(QName.createQName(BaseNodeServiceTest.NAMESPACE, "root_p_n2")).getChildRef();
|
||||||
|
|
||||||
answer = searcher.selectNodes(rootNodeRef, "test:root_p_n1 | test:root_p_n2", null, namespacePrefixResolver, false);
|
answer = searcher.selectNodes(rootNodeRef, "test:root_p_n1 | test:root_p_n2", null, namespacePrefixResolver, false);
|
||||||
assertEquals(2, answer.size());
|
assertEquals(2, answer.size());
|
||||||
assertTrue(answer.contains(n1));
|
assertTrue(answer.contains(n1));
|
||||||
assertTrue(answer.contains(n2));
|
assertTrue(answer.contains(n2));
|
||||||
|
|
||||||
NodeRef n3 = assocRefs.get(QName.createQName(BaseNodeServiceTest.NAMESPACE, "n1_p_n3")).getChildRef();
|
NodeRef n3 = assocRefs.get(QName.createQName(BaseNodeServiceTest.NAMESPACE, "n1_p_n3")).getChildRef();
|
||||||
|
|
||||||
answer = searcher.selectNodes(rootNodeRef, "//@test:animal", null, namespacePrefixResolver, false);
|
answer = searcher.selectNodes(rootNodeRef, "//@test:animal", null, namespacePrefixResolver, false);
|
||||||
assertEquals(1, answer.size());
|
assertEquals(1, answer.size());
|
||||||
assertTrue(answer.contains(n3));
|
assertTrue(answer.contains(n3));
|
||||||
|
|
||||||
answer = searcher.selectNodes(rootNodeRef, "*//.[@test:animal]", null, namespacePrefixResolver, false);
|
answer = searcher.selectNodes(rootNodeRef, "*//.[@test:animal]", null, namespacePrefixResolver, false);
|
||||||
assertEquals(1, answer.size());
|
assertEquals(1, answer.size());
|
||||||
assertTrue(answer.contains(n3));
|
assertTrue(answer.contains(n3));
|
||||||
|
|
||||||
answer = searcher.selectNodes(rootNodeRef, "*//.[@test:animal='monkey']", null, namespacePrefixResolver, false);
|
answer = searcher.selectNodes(rootNodeRef, "*//.[@test:animal='monkey']", null, namespacePrefixResolver, false);
|
||||||
assertEquals(1, answer.size());
|
assertEquals(1, answer.size());
|
||||||
assertTrue(answer.contains(n3));
|
assertTrue(answer.contains(n3));
|
||||||
|
|
||||||
answer = searcher.selectNodes(rootNodeRef, "//.[@test:animal='monkey']", null, namespacePrefixResolver, false);
|
answer = searcher.selectNodes(rootNodeRef, "//.[@test:animal='monkey']", null, namespacePrefixResolver, false);
|
||||||
assertEquals(1, answer.size());
|
assertEquals(1, answer.size());
|
||||||
assertTrue(answer.contains(n3));
|
assertTrue(answer.contains(n3));
|
||||||
|
|
||||||
answer = searcher.selectNodes(rootNodeRef, "*//.[@test:animal='monkey']", null, namespacePrefixResolver, false);
|
answer = searcher.selectNodes(rootNodeRef, "*//.[@test:animal='monkey']", null, namespacePrefixResolver, false);
|
||||||
assertEquals(1, answer.size());
|
assertEquals(1, answer.size());
|
||||||
assertTrue(answer.contains(n3));
|
assertTrue(answer.contains(n3));
|
||||||
@@ -354,23 +353,23 @@ public class SearcherComponentTest extends TestCase
|
|||||||
// answer = searcher.selectNodes(rootNodeRef, "//*[like(@test:animal, 'monk*')]", null, namespacePrefixResolver, false);
|
// answer = searcher.selectNodes(rootNodeRef, "//*[like(@test:animal, 'monk*')]", null, namespacePrefixResolver, false);
|
||||||
// assertEquals(1, answer.size());
|
// assertEquals(1, answer.size());
|
||||||
// assertTrue(answer.contains(n3));
|
// assertTrue(answer.contains(n3));
|
||||||
|
|
||||||
answer = searcher.selectNodes(rootNodeRef, "//@*", null, namespacePrefixResolver, false);
|
answer = searcher.selectNodes(rootNodeRef, "//@*", null, namespacePrefixResolver, false);
|
||||||
assertEquals(9, answer.size());
|
assertEquals(9, answer.size());
|
||||||
|
|
||||||
QName qname = QName.createQName(BaseNodeServiceTest.NAMESPACE, "my@test_with_at_sign");
|
QName qname = QName.createQName(BaseNodeServiceTest.NAMESPACE, "my@test_with_at_sign");
|
||||||
|
|
||||||
Map<QName, Serializable> properties = new HashMap<QName, Serializable>();
|
Map<QName, Serializable> properties = new HashMap<QName, Serializable>();
|
||||||
properties.put(QName.createQName(BaseNodeServiceTest.NAMESPACE, "mytest"), "my@test_value_with_at_sign");
|
properties.put(QName.createQName(BaseNodeServiceTest.NAMESPACE, "mytest"), "my@test_value_with_at_sign");
|
||||||
|
|
||||||
ChildAssociationRef assoc = nodeService.createNode(n1, BaseNodeServiceTest.ASSOC_TYPE_QNAME_TEST_CHILDREN, qname, ContentModel.TYPE_CONTAINER, properties);
|
ChildAssociationRef assoc = nodeService.createNode(n1, BaseNodeServiceTest.ASSOC_TYPE_QNAME_TEST_CHILDREN, qname, ContentModel.TYPE_CONTAINER, properties);
|
||||||
NodeRef n4 = assoc.getChildRef();
|
NodeRef n4 = assoc.getChildRef();
|
||||||
|
|
||||||
StringBuffer path = new StringBuffer().append("test:root_p_n1/").append(ISO9075.getXPathName(qname, namespacePrefixResolver));
|
StringBuffer path = new StringBuffer().append("test:root_p_n1/").append(ISO9075.getXPathName(qname, namespacePrefixResolver));
|
||||||
answer = searcher.selectNodes(rootNodeRef, path.toString(), null, namespacePrefixResolver, false);
|
answer = searcher.selectNodes(rootNodeRef, path.toString(), null, namespacePrefixResolver, false);
|
||||||
assertEquals(1, answer.size());
|
assertEquals(1, answer.size());
|
||||||
assertTrue(answer.contains(n4));
|
assertTrue(answer.contains(n4));
|
||||||
|
|
||||||
String xpathQuery = "//*[@test:mytest='my@test_value_with_at_sign']";
|
String xpathQuery = "//*[@test:mytest='my@test_value_with_at_sign']";
|
||||||
answer = searcher.selectNodes(rootNodeRef, xpathQuery, null, namespacePrefixResolver, false);
|
answer = searcher.selectNodes(rootNodeRef, xpathQuery, null, namespacePrefixResolver, false);
|
||||||
assertEquals(1, answer.size());
|
assertEquals(1, answer.size());
|
||||||
@@ -409,9 +408,9 @@ public class SearcherComponentTest extends TestCase
|
|||||||
{
|
{
|
||||||
System.out.println("Char at "+i+" = "+Integer.toHexString(COMPLEX_LOCAL_NAME.charAt(i))+ " ... "+Integer.toHexString(roundTrip.charAt(i)));
|
System.out.println("Char at "+i+" = "+Integer.toHexString(COMPLEX_LOCAL_NAME.charAt(i))+ " ... "+Integer.toHexString(roundTrip.charAt(i)));
|
||||||
}
|
}
|
||||||
|
|
||||||
assertEquals( COMPLEX_LOCAL_NAME, roundTrip);
|
assertEquals( COMPLEX_LOCAL_NAME, roundTrip);
|
||||||
|
|
||||||
answer = searcher.selectNodes(rootNodeRef, "//*[like(@test:"
|
answer = searcher.selectNodes(rootNodeRef, "//*[like(@test:"
|
||||||
+ ISO9075.encode(COMPLEX_LOCAL_NAME) + ", 'm__k%', false)]", null, namespacePrefixResolver, false);
|
+ ISO9075.encode(COMPLEX_LOCAL_NAME) + ", 'm__k%', false)]", null, namespacePrefixResolver, false);
|
||||||
assertEquals(1, answer.size());
|
assertEquals(1, answer.size());
|
||||||
@@ -513,4 +512,4 @@ public class SearcherComponentTest extends TestCase
|
|||||||
builder.append("\"");
|
builder.append("\"");
|
||||||
System.out.println(builder.toString());
|
System.out.println(builder.toString());
|
||||||
}
|
}
|
||||||
}
|
}
|
@@ -4,21 +4,21 @@
|
|||||||
* %%
|
* %%
|
||||||
* Copyright (C) 2005 - 2016 Alfresco Software Limited
|
* Copyright (C) 2005 - 2016 Alfresco Software Limited
|
||||||
* %%
|
* %%
|
||||||
* This file is part of the Alfresco software.
|
* This file is part of the Alfresco software.
|
||||||
* If the software was purchased under a paid Alfresco license, the terms of
|
* If the software was purchased under a paid Alfresco license, the terms of
|
||||||
* the paid license agreement will prevail. Otherwise, the software is
|
* the paid license agreement will prevail. Otherwise, the software is
|
||||||
* provided under the following open source license terms:
|
* provided under the following open source license terms:
|
||||||
*
|
*
|
||||||
* Alfresco is free software: you can redistribute it and/or modify
|
* 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
|
* 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
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
* (at your option) any later version.
|
* (at your option) any later version.
|
||||||
*
|
*
|
||||||
* Alfresco is distributed in the hope that it will be useful,
|
* Alfresco is distributed in the hope that it will be useful,
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
* GNU Lesser General Public License for more details.
|
* GNU Lesser General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU Lesser General Public License
|
* You should have received a copy of the GNU Lesser General Public License
|
||||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||||
* #L%
|
* #L%
|
||||||
@@ -35,8 +35,6 @@ import java.util.List;
|
|||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
import junit.framework.TestCase;
|
|
||||||
|
|
||||||
import org.alfresco.model.ContentModel;
|
import org.alfresco.model.ContentModel;
|
||||||
import org.alfresco.repo.dictionary.DictionaryDAO;
|
import org.alfresco.repo.dictionary.DictionaryDAO;
|
||||||
import org.alfresco.repo.dictionary.M2Model;
|
import org.alfresco.repo.dictionary.M2Model;
|
||||||
@@ -62,26 +60,24 @@ import org.alfresco.service.cmr.repository.StoreRef;
|
|||||||
import org.alfresco.service.namespace.NamespaceService;
|
import org.alfresco.service.namespace.NamespaceService;
|
||||||
import org.alfresco.service.namespace.QName;
|
import org.alfresco.service.namespace.QName;
|
||||||
import org.alfresco.service.transaction.TransactionService;
|
import org.alfresco.service.transaction.TransactionService;
|
||||||
import org.alfresco.test_category.OwnJVMTestsCategory;
|
import org.alfresco.util.BaseSpringTest;
|
||||||
import org.alfresco.util.ApplicationContextHelper;
|
|
||||||
import org.alfresco.util.PropertyMap;
|
import org.alfresco.util.PropertyMap;
|
||||||
import org.alfresco.util.testing.category.LuceneTests;
|
import org.alfresco.util.testing.category.PerformanceTests;
|
||||||
import org.apache.commons.logging.Log;
|
import org.apache.commons.logging.Log;
|
||||||
import org.apache.commons.logging.LogFactory;
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
import org.junit.Before;
|
||||||
|
import org.junit.Test;
|
||||||
import org.junit.experimental.categories.Category;
|
import org.junit.experimental.categories.Category;
|
||||||
import org.springframework.context.ConfigurableApplicationContext;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tests tracking component
|
* Tests tracking component
|
||||||
*
|
*
|
||||||
* @since 4.0
|
* @since 4.0
|
||||||
*/
|
*/
|
||||||
@Category({OwnJVMTestsCategory.class, LuceneTests.class})
|
public class SOLRTrackingComponentTest extends BaseSpringTest
|
||||||
public class SOLRTrackingComponentTest extends TestCase
|
|
||||||
{
|
{
|
||||||
private static final Log logger = LogFactory.getLog(SOLRTrackingComponentTest.class);
|
private static final Log logger = LogFactory.getLog(SOLRTrackingComponentTest.class);
|
||||||
|
|
||||||
private ConfigurableApplicationContext ctx = (ConfigurableApplicationContext) ApplicationContextHelper.getApplicationContext();
|
|
||||||
private static enum NodeStatus
|
private static enum NodeStatus
|
||||||
{
|
{
|
||||||
UPDATED, DELETED;
|
UPDATED, DELETED;
|
||||||
@@ -103,24 +99,24 @@ public class SOLRTrackingComponentTest extends TestCase
|
|||||||
private StoreRef storeRef;
|
private StoreRef storeRef;
|
||||||
private NodeRef rootNodeRef;
|
private NodeRef rootNodeRef;
|
||||||
|
|
||||||
@Override
|
@Before
|
||||||
public void setUp() throws Exception
|
public void before() throws Exception
|
||||||
{
|
{
|
||||||
ServiceRegistry serviceRegistry = (ServiceRegistry) ctx.getBean(ServiceRegistry.SERVICE_REGISTRY);
|
ServiceRegistry serviceRegistry = (ServiceRegistry) applicationContext.getBean(ServiceRegistry.SERVICE_REGISTRY);
|
||||||
transactionService = serviceRegistry.getTransactionService();
|
transactionService = serviceRegistry.getTransactionService();
|
||||||
txnHelper = transactionService.getRetryingTransactionHelper();
|
txnHelper = transactionService.getRetryingTransactionHelper();
|
||||||
|
|
||||||
solrTrackingComponent = (SOLRTrackingComponent) ctx.getBean("solrTrackingComponent");
|
solrTrackingComponent = (SOLRTrackingComponent) applicationContext.getBean("solrTrackingComponent");
|
||||||
nodeDAO = (NodeDAO)ctx.getBean("nodeDAO");
|
nodeDAO = (NodeDAO)applicationContext.getBean("nodeDAO");
|
||||||
qnameDAO = (QNameDAO) ctx.getBean("qnameDAO");
|
qnameDAO = (QNameDAO) applicationContext.getBean("qnameDAO");
|
||||||
dictionaryDAO = (DictionaryDAO)ctx.getBean("dictionaryDAO");
|
dictionaryDAO = (DictionaryDAO)applicationContext.getBean("dictionaryDAO");
|
||||||
nodeService = (NodeService)ctx.getBean("NodeService");
|
nodeService = (NodeService)applicationContext.getBean("NodeService");
|
||||||
fileFolderService = (FileFolderService)ctx.getBean("FileFolderService");
|
fileFolderService = (FileFolderService)applicationContext.getBean("FileFolderService");
|
||||||
dictionaryService = serviceRegistry.getDictionaryService();
|
dictionaryService = serviceRegistry.getDictionaryService();
|
||||||
namespaceService = serviceRegistry.getNamespaceService();
|
namespaceService = serviceRegistry.getNamespaceService();
|
||||||
authenticationComponent = (AuthenticationComponent)ctx.getBean("authenticationComponent");
|
authenticationComponent = (AuthenticationComponent)applicationContext.getBean("authenticationComponent");
|
||||||
|
|
||||||
dbNodeService = (DbNodeServiceImpl)ctx.getBean("dbNodeService");
|
dbNodeService = (DbNodeServiceImpl)applicationContext.getBean("dbNodeService");
|
||||||
dbNodeService.setEnableTimestampPropagation(false);
|
dbNodeService.setEnableTimestampPropagation(false);
|
||||||
|
|
||||||
authenticationComponent.setSystemUserAsCurrentUser();
|
authenticationComponent.setSystemUserAsCurrentUser();
|
||||||
@@ -129,6 +125,7 @@ public class SOLRTrackingComponentTest extends TestCase
|
|||||||
rootNodeRef = nodeService.getRootNode(storeRef);
|
rootNodeRef = nodeService.getRootNode(storeRef);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
public void testAclChangeSetLimits()
|
public void testAclChangeSetLimits()
|
||||||
{
|
{
|
||||||
List<AclChangeSet> aclChangeSets = getAclChangeSets(null, null, null, null, 50);
|
List<AclChangeSet> aclChangeSets = getAclChangeSets(null, null, null, null, 50);
|
||||||
@@ -145,9 +142,10 @@ public class SOLRTrackingComponentTest extends TestCase
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// This test is no longer valid as we may or may include shared acls not linked to defining ones
|
// This test is no longer valid as we may or may include shared acls not linked to defining ones
|
||||||
// If they are not linked to a node they will be counted wring ...
|
// If they are not linked to a node they will be counted wring ...
|
||||||
|
|
||||||
|
// @Test
|
||||||
// public void testGetAcls_Simple()
|
// public void testGetAcls_Simple()
|
||||||
// {
|
// {
|
||||||
// List<AclChangeSet> cs = getAclChangeSets(null, null, null, null, 50);
|
// List<AclChangeSet> cs = getAclChangeSets(null, null, null, null, 50);
|
||||||
@@ -158,18 +156,19 @@ public class SOLRTrackingComponentTest extends TestCase
|
|||||||
// totalAcls += aclChangeSet.getAclCount();
|
// totalAcls += aclChangeSet.getAclCount();
|
||||||
// }
|
// }
|
||||||
// int totalAclsCheck = 0;
|
// int totalAclsCheck = 0;
|
||||||
//
|
//
|
||||||
// for (AclChangeSet aclChangeSet : cs)
|
// for (AclChangeSet aclChangeSet : cs)
|
||||||
// {
|
// {
|
||||||
// List<Acl> acls = getAcls(Arrays.asList(new Long[]{aclChangeSet.getId()}), null, 200);
|
// List<Acl> acls = getAcls(Arrays.asList(new Long[]{aclChangeSet.getId()}), null, 200);
|
||||||
// assertEquals(aclChangeSet.getAclCount(), acls.size());
|
// assertEquals(aclChangeSet.getAclCount(), acls.size());
|
||||||
// totalAclsCheck += acls.size();
|
// totalAclsCheck += acls.size();
|
||||||
// }
|
// }
|
||||||
//
|
//
|
||||||
// // Double check number of ACLs
|
// // Double check number of ACLs
|
||||||
// assertEquals("ACL count should have matched", totalAcls, totalAclsCheck);
|
// assertEquals("ACL count should have matched", totalAcls, totalAclsCheck);
|
||||||
// }
|
// }
|
||||||
|
|
||||||
|
@Test
|
||||||
public void testGetNodeMetaData()
|
public void testGetNodeMetaData()
|
||||||
{
|
{
|
||||||
long startTime = System.currentTimeMillis();
|
long startTime = System.currentTimeMillis();
|
||||||
@@ -205,7 +204,7 @@ public class SOLRTrackingComponentTest extends TestCase
|
|||||||
}
|
}
|
||||||
return txIds;
|
return txIds;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Call {@link SOLRTrackingComponent#getTransactions(Long, Long, Long, Long, int)} in a transaction
|
* Call {@link SOLRTrackingComponent#getTransactions(Long, Long, Long, Long, int)} in a transaction
|
||||||
*/
|
*/
|
||||||
@@ -283,6 +282,7 @@ public class SOLRTrackingComponentTest extends TestCase
|
|||||||
return transactionService.getRetryingTransactionHelper().doInTransaction(callback, true);
|
return transactionService.getRetryingTransactionHelper().doInTransaction(callback, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
public void testGetTransactionLimits()
|
public void testGetTransactionLimits()
|
||||||
{
|
{
|
||||||
long startTime = System.currentTimeMillis();
|
long startTime = System.currentTimeMillis();
|
||||||
@@ -341,6 +341,7 @@ public class SOLRTrackingComponentTest extends TestCase
|
|||||||
assertEquals(0, txns.size());
|
assertEquals(0, txns.size());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
public void testGetNodeMetaDataExludesResidualProperties()
|
public void testGetNodeMetaDataExludesResidualProperties()
|
||||||
{
|
{
|
||||||
long startTime = System.currentTimeMillis();
|
long startTime = System.currentTimeMillis();
|
||||||
@@ -365,6 +366,7 @@ public class SOLRTrackingComponentTest extends TestCase
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
public void testGetNodeMetaData100Nodes()
|
public void testGetNodeMetaData100Nodes()
|
||||||
{
|
{
|
||||||
long startTime = System.currentTimeMillis();
|
long startTime = System.currentTimeMillis();
|
||||||
@@ -394,6 +396,8 @@ public class SOLRTrackingComponentTest extends TestCase
|
|||||||
// assertEquals("Unxpected number of nodes", 3, bt.getSuccessCount());
|
// assertEquals("Unxpected number of nodes", 3, bt.getSuccessCount());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Category(PerformanceTests.class)
|
||||||
|
@Test
|
||||||
public void testNodeMetaDataManyNodes() throws Exception
|
public void testNodeMetaDataManyNodes() throws Exception
|
||||||
{
|
{
|
||||||
long fromCommitTime = System.currentTimeMillis();
|
long fromCommitTime = System.currentTimeMillis();
|
||||||
@@ -427,21 +431,21 @@ public class SOLRTrackingComponentTest extends TestCase
|
|||||||
nodeMetaDataParams.setMaxResults(800);
|
nodeMetaDataParams.setMaxResults(800);
|
||||||
getNodeMetaData(nodeMetaDataParams, null, st);
|
getNodeMetaData(nodeMetaDataParams, null, st);
|
||||||
getNodeMetaData(nodeMetaDataParams, null, st);
|
getNodeMetaData(nodeMetaDataParams, null, st);
|
||||||
logger.debug("Warm cache");
|
logger.debug("Warm cache");
|
||||||
getNodeMetaData(nodeMetaDataParams, null, st);
|
getNodeMetaData(nodeMetaDataParams, null, st);
|
||||||
|
|
||||||
logger.debug("Cold cache - explicit clear");
|
logger.debug("Cold cache - explicit clear");
|
||||||
nodeMetaDataParams.setMaxResults(500);
|
nodeMetaDataParams.setMaxResults(500);
|
||||||
getNodeMetaData(nodeMetaDataParams, null, st);
|
getNodeMetaData(nodeMetaDataParams, null, st);
|
||||||
getNodeMetaData(nodeMetaDataParams, null, st);
|
getNodeMetaData(nodeMetaDataParams, null, st);
|
||||||
logger.debug("Warm cache");
|
logger.debug("Warm cache");
|
||||||
getNodeMetaData(nodeMetaDataParams, null, st);
|
getNodeMetaData(nodeMetaDataParams, null, st);
|
||||||
|
|
||||||
logger.debug("Cold cache - explicit clear");
|
logger.debug("Cold cache - explicit clear");
|
||||||
nodeMetaDataParams.setMaxResults(200);
|
nodeMetaDataParams.setMaxResults(200);
|
||||||
getNodeMetaData(nodeMetaDataParams, null, st);
|
getNodeMetaData(nodeMetaDataParams, null, st);
|
||||||
getNodeMetaData(nodeMetaDataParams, null, st);
|
getNodeMetaData(nodeMetaDataParams, null, st);
|
||||||
logger.debug("Warm cache");
|
logger.debug("Warm cache");
|
||||||
getNodeMetaData(nodeMetaDataParams, null, st);
|
getNodeMetaData(nodeMetaDataParams, null, st);
|
||||||
|
|
||||||
// clear out node caches
|
// clear out node caches
|
||||||
@@ -451,6 +455,8 @@ public class SOLRTrackingComponentTest extends TestCase
|
|||||||
getNodeMetaData(nodeMetaDataParams, null, st);
|
getNodeMetaData(nodeMetaDataParams, null, st);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Category(PerformanceTests.class)
|
||||||
|
@Test
|
||||||
public void testNodeMetaDataCache() throws Exception
|
public void testNodeMetaDataCache() throws Exception
|
||||||
{
|
{
|
||||||
long fromCommitTime = System.currentTimeMillis();
|
long fromCommitTime = System.currentTimeMillis();
|
||||||
@@ -481,6 +487,7 @@ public class SOLRTrackingComponentTest extends TestCase
|
|||||||
getNodeMetaData(nodeMetaDataParams, filter, st);
|
getNodeMetaData(nodeMetaDataParams, filter, st);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
public void testNodeMetaDataNullPropertyValue() throws Exception
|
public void testNodeMetaDataNullPropertyValue() throws Exception
|
||||||
{
|
{
|
||||||
long fromCommitTime = System.currentTimeMillis();
|
long fromCommitTime = System.currentTimeMillis();
|
||||||
@@ -503,6 +510,7 @@ public class SOLRTrackingComponentTest extends TestCase
|
|||||||
getNodeMetaData(nodeMetaDataParams, null, st);
|
getNodeMetaData(nodeMetaDataParams, null, st);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
public void testFilters()
|
public void testFilters()
|
||||||
{
|
{
|
||||||
long startTime = System.currentTimeMillis();
|
long startTime = System.currentTimeMillis();
|
||||||
@@ -525,6 +533,7 @@ public class SOLRTrackingComponentTest extends TestCase
|
|||||||
getNodeMetaData(nodeMetaDataParams, null, st);
|
getNodeMetaData(nodeMetaDataParams, null, st);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
public void testModelDiffs()
|
public void testModelDiffs()
|
||||||
{
|
{
|
||||||
Collection<QName> allModels = dictionaryService.getAllModels();
|
Collection<QName> allModels = dictionaryService.getAllModels();
|
||||||
@@ -573,7 +582,7 @@ public class SOLRTrackingComponentTest extends TestCase
|
|||||||
assertEquals("Old checksum value is incorrect", testModelChecksum.longValue(), changedModel.getOldChecksum().longValue());
|
assertEquals("Old checksum value is incorrect", testModelChecksum.longValue(), changedModel.getOldChecksum().longValue());
|
||||||
assertNotSame("Expected checksums to be different", changedModel.getOldChecksum(), changedModel.getNewChecksum());
|
assertNotSame("Expected checksums to be different", changedModel.getOldChecksum(), changedModel.getNewChecksum());
|
||||||
|
|
||||||
// remove the model
|
// remove the model
|
||||||
dictionaryDAO.removeModel(QName.createQName(testModel.getName(), namespaceService));
|
dictionaryDAO.removeModel(QName.createQName(testModel.getName(), namespaceService));
|
||||||
|
|
||||||
// call model diffs - check that the model has been removed
|
// call model diffs - check that the model has been removed
|
||||||
@@ -765,14 +774,14 @@ public class SOLRTrackingComponentTest extends TestCase
|
|||||||
|
|
||||||
long startTime = System.currentTimeMillis();
|
long startTime = System.currentTimeMillis();
|
||||||
txnHelper.doInTransaction(new RetryingTransactionCallback<Void>()
|
txnHelper.doInTransaction(new RetryingTransactionCallback<Void>()
|
||||||
{
|
{
|
||||||
@Override
|
@Override
|
||||||
public Void execute() throws Throwable
|
public Void execute() throws Throwable
|
||||||
{
|
{
|
||||||
solrTrackingComponent.getNodesMetadata(params, filter, bt);
|
solrTrackingComponent.getNodesMetadata(params, filter, bt);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}, true, true);
|
}, true, true);
|
||||||
long endTime = System.currentTimeMillis();
|
long endTime = System.currentTimeMillis();
|
||||||
|
|
||||||
bt.runNodeMetaDataChecks(params.getMaxResults());
|
bt.runNodeMetaDataChecks(params.getMaxResults());
|
||||||
@@ -811,7 +820,7 @@ public class SOLRTrackingComponentTest extends TestCase
|
|||||||
RetryingTransactionHelper txnHelper, FileFolderService fileFolderService,
|
RetryingTransactionHelper txnHelper, FileFolderService fileFolderService,
|
||||||
NodeDAO nodeDAO, QNameDAO qnameDAO, NodeService nodeService, DictionaryService dictionaryService,
|
NodeDAO nodeDAO, QNameDAO qnameDAO, NodeService nodeService, DictionaryService dictionaryService,
|
||||||
NodeRef rootNodeRef, String containerName, boolean doNodeChecks, boolean doMetaDataChecks)
|
NodeRef rootNodeRef, String containerName, boolean doNodeChecks, boolean doMetaDataChecks)
|
||||||
{
|
{
|
||||||
this.txnHelper = txnHelper;
|
this.txnHelper = txnHelper;
|
||||||
this.nodeService = nodeService;
|
this.nodeService = nodeService;
|
||||||
this.rootNodeRef = rootNodeRef;
|
this.rootNodeRef = rootNodeRef;
|
||||||
@@ -827,7 +836,7 @@ public class SOLRTrackingComponentTest extends TestCase
|
|||||||
this.doNodeChecks = doNodeChecks;
|
this.doNodeChecks = doNodeChecks;
|
||||||
this.doMetaDataChecks = doMetaDataChecks;
|
this.doMetaDataChecks = doMetaDataChecks;
|
||||||
this.doChecks = doNodeChecks || doMetaDataChecks;
|
this.doChecks = doNodeChecks || doMetaDataChecks;
|
||||||
}
|
}
|
||||||
|
|
||||||
void runNodeChecks(int maxResults)
|
void runNodeChecks(int maxResults)
|
||||||
{
|
{
|
||||||
@@ -901,14 +910,14 @@ public class SOLRTrackingComponentTest extends TestCase
|
|||||||
{
|
{
|
||||||
expectedNumMetaDataNodes++;
|
expectedNumMetaDataNodes++;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
if(nodeStatus == NodeStatus.DELETED)
|
if(nodeStatus == NodeStatus.DELETED)
|
||||||
{
|
{
|
||||||
expectedNumMetaDataNodes++;
|
expectedNumMetaDataNodes++;
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if(doChecks)
|
if(doChecks)
|
||||||
{
|
{
|
||||||
NodeAssertions nodeAssertions = getNodeAssertions(nodeRef);
|
NodeAssertions nodeAssertions = getNodeAssertions(nodeRef);
|
||||||
@@ -1017,7 +1026,7 @@ public class SOLRTrackingComponentTest extends TestCase
|
|||||||
// List<Path> actualPaths = nodeMetaData.getPaths();
|
// List<Path> actualPaths = nodeMetaData.getPaths();
|
||||||
// List<Path> expectedPaths = nodeService.getPaths(nodeRef, false);
|
// List<Path> expectedPaths = nodeService.getPaths(nodeRef, false);
|
||||||
// assertEquals("Paths are incorrect", expectedPaths, actualPaths);
|
// assertEquals("Paths are incorrect", expectedPaths, actualPaths);
|
||||||
|
|
||||||
// Include negative checks i.e. make sure we get null if we do NOT expect paths
|
// Include negative checks i.e. make sure we get null if we do NOT expect paths
|
||||||
boolean expectPaths = assertions.isExpectPaths();
|
boolean expectPaths = assertions.isExpectPaths();
|
||||||
assertTrue("Expecting paths but didn't get any.", expectPaths == (nodeMetaData.getPaths() != null));
|
assertTrue("Expecting paths but didn't get any.", expectPaths == (nodeMetaData.getPaths() != null));
|
||||||
@@ -1025,7 +1034,7 @@ public class SOLRTrackingComponentTest extends TestCase
|
|||||||
if (expectPaths)
|
if (expectPaths)
|
||||||
{
|
{
|
||||||
// Check QName paths
|
// Check QName paths
|
||||||
// TODO: Check paths
|
// TODO: Check paths
|
||||||
// Check name paths
|
// Check name paths
|
||||||
Collection<Collection<String>> namePaths = nodeMetaData.getNamePaths();
|
Collection<Collection<String>> namePaths = nodeMetaData.getNamePaths();
|
||||||
if (nodeService.getProperty(nodeRef, ContentModel.PROP_NAME) == null)
|
if (nodeService.getProperty(nodeRef, ContentModel.PROP_NAME) == null)
|
||||||
@@ -1137,9 +1146,9 @@ public class SOLRTrackingComponentTest extends TestCase
|
|||||||
RetryingTransactionHelper txnHelper, FileFolderService fileFolderService,
|
RetryingTransactionHelper txnHelper, FileFolderService fileFolderService,
|
||||||
NodeDAO nodeDAO, QNameDAO qnameDAO, NodeService nodeService, DictionaryService dictionaryService,
|
NodeDAO nodeDAO, QNameDAO qnameDAO, NodeService nodeService, DictionaryService dictionaryService,
|
||||||
NodeRef rootNodeRef, String containerName, boolean doNodeChecks, boolean doMetaDataChecks)
|
NodeRef rootNodeRef, String containerName, boolean doNodeChecks, boolean doMetaDataChecks)
|
||||||
{
|
{
|
||||||
super(txnHelper, fileFolderService, nodeDAO, qnameDAO, nodeService, dictionaryService, rootNodeRef, containerName, doNodeChecks, doMetaDataChecks);
|
super(txnHelper, fileFolderService, nodeDAO, qnameDAO, nodeService, dictionaryService, rootNodeRef, containerName, doNodeChecks, doMetaDataChecks);
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getExpectedNumNodes()
|
public int getExpectedNumNodes()
|
||||||
{
|
{
|
||||||
@@ -1151,7 +1160,7 @@ public class SOLRTrackingComponentTest extends TestCase
|
|||||||
ArrayList<Long> txs = new ArrayList<Long>(2);
|
ArrayList<Long> txs = new ArrayList<Long>(2);
|
||||||
|
|
||||||
txs.add(txnHelper.doInTransaction(new RetryingTransactionCallback<Long>()
|
txs.add(txnHelper.doInTransaction(new RetryingTransactionCallback<Long>()
|
||||||
{
|
{
|
||||||
public Long execute() throws Throwable
|
public Long execute() throws Throwable
|
||||||
{
|
{
|
||||||
PropertyMap props = new PropertyMap();
|
PropertyMap props = new PropertyMap();
|
||||||
@@ -1168,10 +1177,10 @@ public class SOLRTrackingComponentTest extends TestCase
|
|||||||
|
|
||||||
return nodeDAO.getNodeRefStatus(content1).getDbTxnId();
|
return nodeDAO.getNodeRefStatus(content1).getDbTxnId();
|
||||||
}
|
}
|
||||||
}));
|
}));
|
||||||
|
|
||||||
txs.add(txnHelper.doInTransaction(new RetryingTransactionCallback<Long>()
|
txs.add(txnHelper.doInTransaction(new RetryingTransactionCallback<Long>()
|
||||||
{
|
{
|
||||||
public Long execute() throws Throwable
|
public Long execute() throws Throwable
|
||||||
{
|
{
|
||||||
FileInfo contentInfo = fileFolderService.create(container, "Content2", ContentModel.TYPE_CONTENT);
|
FileInfo contentInfo = fileFolderService.create(container, "Content2", ContentModel.TYPE_CONTENT);
|
||||||
@@ -1181,7 +1190,7 @@ public class SOLRTrackingComponentTest extends TestCase
|
|||||||
|
|
||||||
return nodeDAO.getNodeRefStatus(content1).getDbTxnId();
|
return nodeDAO.getNodeRefStatus(content1).getDbTxnId();
|
||||||
}
|
}
|
||||||
}));
|
}));
|
||||||
|
|
||||||
setExpectedNodeStatus(container, NodeStatus.UPDATED);
|
setExpectedNodeStatus(container, NodeStatus.UPDATED);
|
||||||
setExpectedNodeStatus(content1, NodeStatus.DELETED);
|
setExpectedNodeStatus(content1, NodeStatus.DELETED);
|
||||||
@@ -1198,11 +1207,11 @@ public class SOLRTrackingComponentTest extends TestCase
|
|||||||
|
|
||||||
SOLRTest3(
|
SOLRTest3(
|
||||||
RetryingTransactionHelper txnHelper, FileFolderService fileFolderService,
|
RetryingTransactionHelper txnHelper, FileFolderService fileFolderService,
|
||||||
NodeDAO nodeDAO, QNameDAO qnameDAO, NodeService nodeService, DictionaryService dictionaryService,
|
NodeDAO nodeDAO, QNameDAO qnameDAO, NodeService nodeService, DictionaryService dictionaryService,
|
||||||
NodeRef rootNodeRef, String containerName, boolean doNodeChecks, boolean doMetaDataChecks)
|
NodeRef rootNodeRef, String containerName, boolean doNodeChecks, boolean doMetaDataChecks)
|
||||||
{
|
{
|
||||||
super(txnHelper, fileFolderService, nodeDAO, qnameDAO, nodeService, dictionaryService, rootNodeRef, containerName, doNodeChecks, doMetaDataChecks);
|
super(txnHelper, fileFolderService, nodeDAO, qnameDAO, nodeService, dictionaryService, rootNodeRef, containerName, doNodeChecks, doMetaDataChecks);
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getExpectedNumNodes()
|
public int getExpectedNumNodes()
|
||||||
{
|
{
|
||||||
@@ -1214,7 +1223,7 @@ public class SOLRTrackingComponentTest extends TestCase
|
|||||||
ArrayList<Long> txs = new ArrayList<Long>(2);
|
ArrayList<Long> txs = new ArrayList<Long>(2);
|
||||||
|
|
||||||
txs.add(txnHelper.doInTransaction(new RetryingTransactionCallback<Long>()
|
txs.add(txnHelper.doInTransaction(new RetryingTransactionCallback<Long>()
|
||||||
{
|
{
|
||||||
public Long execute() throws Throwable
|
public Long execute() throws Throwable
|
||||||
{
|
{
|
||||||
PropertyMap props = new PropertyMap();
|
PropertyMap props = new PropertyMap();
|
||||||
@@ -1235,10 +1244,10 @@ public class SOLRTrackingComponentTest extends TestCase
|
|||||||
|
|
||||||
return nodeDAO.getNodeRefStatus(content1).getDbTxnId();
|
return nodeDAO.getNodeRefStatus(content1).getDbTxnId();
|
||||||
}
|
}
|
||||||
}));
|
}));
|
||||||
|
|
||||||
txs.add(txnHelper.doInTransaction(new RetryingTransactionCallback<Long>()
|
txs.add(txnHelper.doInTransaction(new RetryingTransactionCallback<Long>()
|
||||||
{
|
{
|
||||||
public Long execute() throws Throwable
|
public Long execute() throws Throwable
|
||||||
{
|
{
|
||||||
FileInfo contentInfo = fileFolderService.create(container, "Content2", ContentModel.TYPE_CONTENT);
|
FileInfo contentInfo = fileFolderService.create(container, "Content2", ContentModel.TYPE_CONTENT);
|
||||||
@@ -1249,7 +1258,7 @@ public class SOLRTrackingComponentTest extends TestCase
|
|||||||
|
|
||||||
return nodeDAO.getNodeRefStatus(content1).getDbTxnId();
|
return nodeDAO.getNodeRefStatus(content1).getDbTxnId();
|
||||||
}
|
}
|
||||||
}));
|
}));
|
||||||
|
|
||||||
setExpectedNodeStatus(container, NodeStatus.UPDATED);
|
setExpectedNodeStatus(container, NodeStatus.UPDATED);
|
||||||
setExpectedNodeStatus(content1, NodeStatus.DELETED);
|
setExpectedNodeStatus(content1, NodeStatus.DELETED);
|
||||||
@@ -1265,9 +1274,9 @@ public class SOLRTrackingComponentTest extends TestCase
|
|||||||
RetryingTransactionHelper txnHelper, FileFolderService fileFolderService,
|
RetryingTransactionHelper txnHelper, FileFolderService fileFolderService,
|
||||||
NodeDAO nodeDAO, QNameDAO qnameDAO, NodeService nodeService, DictionaryService dictionaryService,
|
NodeDAO nodeDAO, QNameDAO qnameDAO, NodeService nodeService, DictionaryService dictionaryService,
|
||||||
NodeRef rootNodeRef, String containerName, boolean doNodeChecks, boolean doMetaDataChecks)
|
NodeRef rootNodeRef, String containerName, boolean doNodeChecks, boolean doMetaDataChecks)
|
||||||
{
|
{
|
||||||
super(txnHelper, fileFolderService, nodeDAO, qnameDAO, nodeService, dictionaryService, rootNodeRef, containerName, doNodeChecks, doMetaDataChecks);
|
super(txnHelper, fileFolderService, nodeDAO, qnameDAO, nodeService, dictionaryService, rootNodeRef, containerName, doNodeChecks, doMetaDataChecks);
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getExpectedNumNodes()
|
public int getExpectedNumNodes()
|
||||||
{
|
{
|
||||||
@@ -1279,7 +1288,7 @@ public class SOLRTrackingComponentTest extends TestCase
|
|||||||
ArrayList<Long> txs = new ArrayList<Long>(2);
|
ArrayList<Long> txs = new ArrayList<Long>(2);
|
||||||
|
|
||||||
txs.add(txnHelper.doInTransaction(new RetryingTransactionCallback<Long>()
|
txs.add(txnHelper.doInTransaction(new RetryingTransactionCallback<Long>()
|
||||||
{
|
{
|
||||||
public Long execute() throws Throwable
|
public Long execute() throws Throwable
|
||||||
{
|
{
|
||||||
PropertyMap props = new PropertyMap();
|
PropertyMap props = new PropertyMap();
|
||||||
@@ -1302,7 +1311,7 @@ public class SOLRTrackingComponentTest extends TestCase
|
|||||||
|
|
||||||
return nodeDAO.getNodeRefStatus(container).getDbTxnId();
|
return nodeDAO.getNodeRefStatus(container).getDbTxnId();
|
||||||
}
|
}
|
||||||
}));
|
}));
|
||||||
return txs;
|
return txs;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1315,9 +1324,9 @@ public class SOLRTrackingComponentTest extends TestCase
|
|||||||
RetryingTransactionHelper txnHelper, FileFolderService fileFolderService,
|
RetryingTransactionHelper txnHelper, FileFolderService fileFolderService,
|
||||||
NodeDAO nodeDAO, QNameDAO qnameDAO, NodeService nodeService, DictionaryService dictionaryService,
|
NodeDAO nodeDAO, QNameDAO qnameDAO, NodeService nodeService, DictionaryService dictionaryService,
|
||||||
NodeRef rootNodeRef, String containerName, boolean doNodeChecks, boolean doMetaDataChecks)
|
NodeRef rootNodeRef, String containerName, boolean doNodeChecks, boolean doMetaDataChecks)
|
||||||
{
|
{
|
||||||
super(txnHelper, fileFolderService, nodeDAO, qnameDAO, nodeService, dictionaryService, rootNodeRef, containerName, doNodeChecks, doMetaDataChecks);
|
super(txnHelper, fileFolderService, nodeDAO, qnameDAO, nodeService, dictionaryService, rootNodeRef, containerName, doNodeChecks, doMetaDataChecks);
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getExpectedNumNodes()
|
public int getExpectedNumNodes()
|
||||||
{
|
{
|
||||||
@@ -1329,7 +1338,7 @@ public class SOLRTrackingComponentTest extends TestCase
|
|||||||
ArrayList<Long> txs = new ArrayList<Long>(2);
|
ArrayList<Long> txs = new ArrayList<Long>(2);
|
||||||
|
|
||||||
txs.add(txnHelper.doInTransaction(new RetryingTransactionCallback<Long>()
|
txs.add(txnHelper.doInTransaction(new RetryingTransactionCallback<Long>()
|
||||||
{
|
{
|
||||||
public Long execute() throws Throwable
|
public Long execute() throws Throwable
|
||||||
{
|
{
|
||||||
PropertyMap props = new PropertyMap();
|
PropertyMap props = new PropertyMap();
|
||||||
@@ -1358,7 +1367,7 @@ public class SOLRTrackingComponentTest extends TestCase
|
|||||||
|
|
||||||
return nodeDAO.getNodeRefStatus(container).getDbTxnId();
|
return nodeDAO.getNodeRefStatus(container).getDbTxnId();
|
||||||
}
|
}
|
||||||
}));
|
}));
|
||||||
return txs;
|
return txs;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1372,9 +1381,9 @@ public class SOLRTrackingComponentTest extends TestCase
|
|||||||
RetryingTransactionHelper txnHelper, FileFolderService fileFolderService,
|
RetryingTransactionHelper txnHelper, FileFolderService fileFolderService,
|
||||||
NodeDAO nodeDAO, QNameDAO qnameDAO, NodeService nodeService, DictionaryService dictionaryService,
|
NodeDAO nodeDAO, QNameDAO qnameDAO, NodeService nodeService, DictionaryService dictionaryService,
|
||||||
NodeRef rootNodeRef, String containerName, boolean doNodeChecks, boolean doMetaDataChecks)
|
NodeRef rootNodeRef, String containerName, boolean doNodeChecks, boolean doMetaDataChecks)
|
||||||
{
|
{
|
||||||
super(txnHelper, fileFolderService, nodeDAO, qnameDAO, nodeService, dictionaryService, rootNodeRef, containerName, doNodeChecks, doMetaDataChecks);
|
super(txnHelper, fileFolderService, nodeDAO, qnameDAO, nodeService, dictionaryService, rootNodeRef, containerName, doNodeChecks, doMetaDataChecks);
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getExpectedNumNodes()
|
public int getExpectedNumNodes()
|
||||||
{
|
{
|
||||||
@@ -1385,13 +1394,13 @@ public class SOLRTrackingComponentTest extends TestCase
|
|||||||
{
|
{
|
||||||
ArrayList<Long> txs = new ArrayList<Long>(2);
|
ArrayList<Long> txs = new ArrayList<Long>(2);
|
||||||
|
|
||||||
final String titles[] =
|
final String titles[] =
|
||||||
{
|
|
||||||
"caf\u00E9", "\u00E7edilla", "\u00E0\u00E1\u00E2\u00E3", "\u00EC\u00ED\u00EE\u00EF", "\u00F0\u00F1\u00F2\u00F3\u00F4\u00F5\u00F6",
|
|
||||||
"caf\u00E9", "\u00E7edilla", "\u00E0\u00E1\u00E2\u00E3", "\u00EC\u00ED\u00EE\u00EF", "\u00F0\u00F1\u00F2\u00F3\u00F4\u00F5\u00F6"
|
|
||||||
};
|
|
||||||
txs.add(txnHelper.doInTransaction(new RetryingTransactionCallback<Long>()
|
|
||||||
{
|
{
|
||||||
|
"caf\u00E9", "\u00E7edilla", "\u00E0\u00E1\u00E2\u00E3", "\u00EC\u00ED\u00EE\u00EF", "\u00F0\u00F1\u00F2\u00F3\u00F4\u00F5\u00F6",
|
||||||
|
"caf\u00E9", "\u00E7edilla", "\u00E0\u00E1\u00E2\u00E3", "\u00EC\u00ED\u00EE\u00EF", "\u00F0\u00F1\u00F2\u00F3\u00F4\u00F5\u00F6"
|
||||||
|
};
|
||||||
|
txs.add(txnHelper.doInTransaction(new RetryingTransactionCallback<Long>()
|
||||||
|
{
|
||||||
public Long execute() throws Throwable
|
public Long execute() throws Throwable
|
||||||
{
|
{
|
||||||
PropertyMap props = new PropertyMap();
|
PropertyMap props = new PropertyMap();
|
||||||
@@ -1426,7 +1435,7 @@ public class SOLRTrackingComponentTest extends TestCase
|
|||||||
|
|
||||||
return nodeDAO.getNodeRefStatus(container).getDbTxnId();
|
return nodeDAO.getNodeRefStatus(container).getDbTxnId();
|
||||||
}
|
}
|
||||||
}));
|
}));
|
||||||
|
|
||||||
return txs;
|
return txs;
|
||||||
}
|
}
|
||||||
@@ -1441,9 +1450,9 @@ public class SOLRTrackingComponentTest extends TestCase
|
|||||||
RetryingTransactionHelper txnHelper, FileFolderService fileFolderService,
|
RetryingTransactionHelper txnHelper, FileFolderService fileFolderService,
|
||||||
NodeDAO nodeDAO, QNameDAO qnameDAO, NodeService nodeService, DictionaryService dictionaryService,
|
NodeDAO nodeDAO, QNameDAO qnameDAO, NodeService nodeService, DictionaryService dictionaryService,
|
||||||
NodeRef rootNodeRef, String containerName, boolean doNodeChecks, boolean doMetaDataChecks)
|
NodeRef rootNodeRef, String containerName, boolean doNodeChecks, boolean doMetaDataChecks)
|
||||||
{
|
{
|
||||||
super(txnHelper, fileFolderService, nodeDAO, qnameDAO, nodeService, dictionaryService,rootNodeRef, containerName, doNodeChecks, doMetaDataChecks);
|
super(txnHelper, fileFolderService, nodeDAO, qnameDAO, nodeService, dictionaryService,rootNodeRef, containerName, doNodeChecks, doMetaDataChecks);
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getExpectedNumNodes()
|
public int getExpectedNumNodes()
|
||||||
{
|
{
|
||||||
@@ -1455,7 +1464,7 @@ public class SOLRTrackingComponentTest extends TestCase
|
|||||||
ArrayList<Long> txs = new ArrayList<Long>(2);
|
ArrayList<Long> txs = new ArrayList<Long>(2);
|
||||||
|
|
||||||
txs.add(txnHelper.doInTransaction(new RetryingTransactionCallback<Long>()
|
txs.add(txnHelper.doInTransaction(new RetryingTransactionCallback<Long>()
|
||||||
{
|
{
|
||||||
public Long execute() throws Throwable
|
public Long execute() throws Throwable
|
||||||
{
|
{
|
||||||
PropertyMap props = new PropertyMap();
|
PropertyMap props = new PropertyMap();
|
||||||
@@ -1474,7 +1483,7 @@ public class SOLRTrackingComponentTest extends TestCase
|
|||||||
|
|
||||||
return nodeDAO.getNodeRefStatus(container).getDbTxnId();
|
return nodeDAO.getNodeRefStatus(container).getDbTxnId();
|
||||||
}
|
}
|
||||||
}));
|
}));
|
||||||
|
|
||||||
setExpectedNodeStatus(container, NodeStatus.UPDATED);
|
setExpectedNodeStatus(container, NodeStatus.UPDATED);
|
||||||
setExpectedNodeStatus(content, NodeStatus.UPDATED);
|
setExpectedNodeStatus(content, NodeStatus.UPDATED);
|
||||||
@@ -1482,4 +1491,4 @@ public class SOLRTrackingComponentTest extends TestCase
|
|||||||
return txs;
|
return txs;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
File diff suppressed because it is too large
Load Diff
@@ -1,110 +1,101 @@
|
|||||||
/*
|
/*
|
||||||
* #%L
|
* #%L
|
||||||
* Alfresco Repository
|
* Alfresco Repository
|
||||||
* %%
|
* %%
|
||||||
* Copyright (C) 2005 - 2016 Alfresco Software Limited
|
* Copyright (C) 2005 - 2016 Alfresco Software Limited
|
||||||
* %%
|
* %%
|
||||||
* This file is part of the Alfresco software.
|
* This file is part of the Alfresco software.
|
||||||
* If the software was purchased under a paid Alfresco license, the terms of
|
* If the software was purchased under a paid Alfresco license, the terms of
|
||||||
* the paid license agreement will prevail. Otherwise, the software is
|
* the paid license agreement will prevail. Otherwise, the software is
|
||||||
* provided under the following open source license terms:
|
* provided under the following open source license terms:
|
||||||
*
|
*
|
||||||
* Alfresco is free software: you can redistribute it and/or modify
|
* 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
|
* 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
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
* (at your option) any later version.
|
* (at your option) any later version.
|
||||||
*
|
*
|
||||||
* Alfresco is distributed in the hope that it will be useful,
|
* Alfresco is distributed in the hope that it will be useful,
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
* GNU Lesser General Public License for more details.
|
* GNU Lesser General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU Lesser General Public License
|
* You should have received a copy of the GNU Lesser General Public License
|
||||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||||
* #L%
|
* #L%
|
||||||
*/
|
*/
|
||||||
package org.alfresco.repo.template;
|
package org.alfresco.repo.template;
|
||||||
|
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
import java.io.StringWriter;
|
import java.io.StringWriter;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import junit.framework.TestCase;
|
import org.alfresco.model.ContentModel;
|
||||||
|
import org.alfresco.repo.dictionary.DictionaryComponent;
|
||||||
import org.alfresco.model.ContentModel;
|
import org.alfresco.repo.dictionary.DictionaryDAO;
|
||||||
import org.alfresco.repo.dictionary.DictionaryComponent;
|
import org.alfresco.repo.dictionary.M2Model;
|
||||||
import org.alfresco.repo.dictionary.DictionaryDAO;
|
import org.alfresco.repo.node.BaseNodeServiceTest;
|
||||||
import org.alfresco.repo.dictionary.M2Model;
|
import org.alfresco.repo.security.authentication.AuthenticationComponent;
|
||||||
import org.alfresco.repo.node.BaseNodeServiceTest;
|
import org.alfresco.repo.transaction.RetryingTransactionHelper.RetryingTransactionCallback;
|
||||||
import org.alfresco.repo.security.authentication.AuthenticationComponent;
|
import org.alfresco.service.ServiceRegistry;
|
||||||
import org.alfresco.repo.transaction.RetryingTransactionHelper.RetryingTransactionCallback;
|
import org.alfresco.service.cmr.repository.NodeRef;
|
||||||
import org.alfresco.service.ServiceRegistry;
|
import org.alfresco.service.cmr.repository.NodeService;
|
||||||
import org.alfresco.service.cmr.model.FileFolderService;
|
import org.alfresco.service.cmr.repository.StoreRef;
|
||||||
import org.alfresco.service.cmr.repository.NodeRef;
|
import org.alfresco.service.cmr.repository.TemplateException;
|
||||||
import org.alfresco.service.cmr.repository.NodeService;
|
import org.alfresco.service.cmr.repository.TemplateService;
|
||||||
import org.alfresco.service.cmr.repository.StoreRef;
|
import org.alfresco.service.namespace.NamespaceService;
|
||||||
import org.alfresco.service.cmr.repository.TemplateException;
|
import org.alfresco.service.namespace.QName;
|
||||||
import org.alfresco.service.cmr.repository.TemplateService;
|
import org.alfresco.service.transaction.TransactionService;
|
||||||
import org.alfresco.service.namespace.NamespaceService;
|
import org.alfresco.util.BaseSpringTest;
|
||||||
import org.alfresco.service.namespace.QName;
|
import org.junit.After;
|
||||||
import org.alfresco.service.transaction.TransactionService;
|
import org.junit.Before;
|
||||||
import org.alfresco.test_category.OwnJVMTestsCategory;
|
import org.junit.Test;
|
||||||
import org.alfresco.util.ApplicationContextHelper;
|
import org.springframework.extensions.surf.util.I18NUtil;
|
||||||
import org.junit.experimental.categories.Category;
|
|
||||||
import org.springframework.context.ApplicationContext;
|
|
||||||
import org.springframework.extensions.surf.util.I18NUtil;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Kevin Roast
|
* @author Kevin Roast
|
||||||
*/
|
*/
|
||||||
@Category(OwnJVMTestsCategory.class)
|
public class TemplateServiceImplTest extends BaseSpringTest
|
||||||
public class TemplateServiceImplTest extends TestCase
|
|
||||||
{
|
{
|
||||||
private static final String TEMPLATE_1 = "org/alfresco/repo/template/test_template1.ftl";
|
private static final String TEMPLATE_1 = "org/alfresco/repo/template/test_template1.ftl";
|
||||||
private static final ApplicationContext ctx = ApplicationContextHelper.getApplicationContext();
|
|
||||||
private NodeRef root_node;
|
private NodeRef root_node;
|
||||||
|
|
||||||
private TemplateService templateService;
|
private TemplateService templateService;
|
||||||
private NodeService nodeService;
|
private NodeService nodeService;
|
||||||
private TransactionService transactionService;
|
private TransactionService transactionService;
|
||||||
private ServiceRegistry serviceRegistry;
|
private ServiceRegistry serviceRegistry;
|
||||||
private AuthenticationComponent authenticationComponent;
|
private AuthenticationComponent authenticationComponent;
|
||||||
|
|
||||||
/*
|
@Before
|
||||||
* @see junit.framework.TestCase#setUp()
|
public void setUp() throws Exception
|
||||||
*/
|
|
||||||
protected void setUp() throws Exception
|
|
||||||
{
|
{
|
||||||
super.setUp();
|
transactionService = (TransactionService)applicationContext.getBean("transactionComponent");
|
||||||
|
nodeService = (NodeService)applicationContext.getBean("nodeService");
|
||||||
transactionService = (TransactionService)ctx.getBean("transactionComponent");
|
templateService = (TemplateService)applicationContext.getBean("templateService");
|
||||||
nodeService = (NodeService)ctx.getBean("nodeService");
|
serviceRegistry = (ServiceRegistry)applicationContext.getBean("ServiceRegistry");
|
||||||
templateService = (TemplateService)ctx.getBean("templateService");
|
|
||||||
serviceRegistry = (ServiceRegistry)ctx.getBean("ServiceRegistry");
|
this.authenticationComponent = (AuthenticationComponent)applicationContext.getBean("authenticationComponent");
|
||||||
|
|
||||||
this.authenticationComponent = (AuthenticationComponent)ctx.getBean("authenticationComponent");
|
|
||||||
this.authenticationComponent.setSystemUserAsCurrentUser();
|
this.authenticationComponent.setSystemUserAsCurrentUser();
|
||||||
|
|
||||||
DictionaryDAO dictionaryDao = (DictionaryDAO)ctx.getBean("dictionaryDAO");
|
DictionaryDAO dictionaryDao = (DictionaryDAO)applicationContext.getBean("dictionaryDAO");
|
||||||
|
|
||||||
// load the system model
|
// load the system model
|
||||||
ClassLoader cl = BaseNodeServiceTest.class.getClassLoader();
|
ClassLoader cl = BaseNodeServiceTest.class.getClassLoader();
|
||||||
InputStream modelStream = cl.getResourceAsStream("alfresco/model/contentModel.xml");
|
InputStream modelStream = cl.getResourceAsStream("alfresco/model/contentModel.xml");
|
||||||
assertNotNull(modelStream);
|
assertNotNull(modelStream);
|
||||||
M2Model model = M2Model.createModel(modelStream);
|
M2Model model = M2Model.createModel(modelStream);
|
||||||
dictionaryDao.putModel(model);
|
dictionaryDao.putModel(model);
|
||||||
|
|
||||||
// load the test model
|
// load the test model
|
||||||
modelStream = cl.getResourceAsStream("org/alfresco/repo/node/BaseNodeServiceTest_model.xml");
|
modelStream = cl.getResourceAsStream("org/alfresco/repo/node/BaseNodeServiceTest_model.xml");
|
||||||
assertNotNull(modelStream);
|
assertNotNull(modelStream);
|
||||||
model = M2Model.createModel(modelStream);
|
model = M2Model.createModel(modelStream);
|
||||||
dictionaryDao.putModel(model);
|
dictionaryDao.putModel(model);
|
||||||
|
|
||||||
DictionaryComponent dictionary = new DictionaryComponent();
|
DictionaryComponent dictionary = new DictionaryComponent();
|
||||||
dictionary.setDictionaryDAO(dictionaryDao);
|
dictionary.setDictionaryDAO(dictionaryDao);
|
||||||
BaseNodeServiceTest.loadModel(ctx);
|
BaseNodeServiceTest.loadModel(applicationContext);
|
||||||
|
|
||||||
transactionService.getRetryingTransactionHelper().doInTransaction(
|
transactionService.getRetryingTransactionHelper().doInTransaction(
|
||||||
new RetryingTransactionCallback<Object>()
|
new RetryingTransactionCallback<Object>()
|
||||||
@@ -113,68 +104,69 @@ public class TemplateServiceImplTest extends TestCase
|
|||||||
public Object execute() throws Exception
|
public Object execute() throws Exception
|
||||||
{
|
{
|
||||||
StoreRef store = nodeService.createStore(StoreRef.PROTOCOL_WORKSPACE, "template_" + System.currentTimeMillis());
|
StoreRef store = nodeService.createStore(StoreRef.PROTOCOL_WORKSPACE, "template_" + System.currentTimeMillis());
|
||||||
root_node = nodeService.getRootNode(store);
|
root_node = nodeService.getRootNode(store);
|
||||||
Map<QName, Serializable> properties = new HashMap<QName, Serializable>(11);
|
Map<QName, Serializable> properties = new HashMap<QName, Serializable>(11);
|
||||||
properties.put(ContentModel.PROP_NAME, (Serializable) "subFolder");
|
properties.put(ContentModel.PROP_NAME, (Serializable) "subFolder");
|
||||||
NodeRef subFolderRef = nodeService.createNode(
|
NodeRef subFolderRef = nodeService.createNode(
|
||||||
root_node,
|
root_node,
|
||||||
ContentModel.ASSOC_CHILDREN,
|
ContentModel.ASSOC_CHILDREN,
|
||||||
QName.createQName(NamespaceService.CONTENT_MODEL_1_0_URI,QName.createValidLocalName("subFolder")),
|
QName.createQName(NamespaceService.CONTENT_MODEL_1_0_URI,QName.createValidLocalName("subFolder")),
|
||||||
ContentModel.TYPE_FOLDER,
|
ContentModel.TYPE_FOLDER,
|
||||||
properties).getChildRef();
|
properties).getChildRef();
|
||||||
properties.put(ContentModel.PROP_NAME, (Serializable) "subSubFolder");
|
properties.put(ContentModel.PROP_NAME, (Serializable) "subSubFolder");
|
||||||
NodeRef subSubFolderRef =nodeService.createNode(
|
NodeRef subSubFolderRef =nodeService.createNode(
|
||||||
subFolderRef,
|
subFolderRef,
|
||||||
ContentModel.ASSOC_CONTAINS,
|
ContentModel.ASSOC_CONTAINS,
|
||||||
QName.createQName(NamespaceService.CONTENT_MODEL_1_0_URI,QName.createValidLocalName("subSubFolder")),
|
QName.createQName(NamespaceService.CONTENT_MODEL_1_0_URI,QName.createValidLocalName("subSubFolder")),
|
||||||
ContentModel.TYPE_FOLDER,
|
ContentModel.TYPE_FOLDER,
|
||||||
properties).getChildRef();
|
properties).getChildRef();
|
||||||
properties.put(ContentModel.PROP_NAME, (Serializable) "subSubSubFolder");
|
properties.put(ContentModel.PROP_NAME, (Serializable) "subSubSubFolder");
|
||||||
nodeService.createNode(
|
nodeService.createNode(
|
||||||
subSubFolderRef,
|
subSubFolderRef,
|
||||||
ContentModel.ASSOC_CONTAINS,
|
ContentModel.ASSOC_CONTAINS,
|
||||||
QName.createQName(NamespaceService.CONTENT_MODEL_1_0_URI,QName.createValidLocalName("subSubSubFolder")),
|
QName.createQName(NamespaceService.CONTENT_MODEL_1_0_URI,QName.createValidLocalName("subSubSubFolder")),
|
||||||
ContentModel.TYPE_FOLDER,
|
ContentModel.TYPE_FOLDER,
|
||||||
properties);
|
properties);
|
||||||
BaseNodeServiceTest.buildNodeGraph(nodeService, root_node);
|
BaseNodeServiceTest.buildNodeGraph(nodeService, root_node);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@After
|
||||||
protected void tearDown() throws Exception
|
public void tearDown() throws Exception
|
||||||
{
|
{
|
||||||
authenticationComponent.clearCurrentSecurityContext();
|
authenticationComponent.clearCurrentSecurityContext();
|
||||||
super.tearDown();
|
super.tearDown();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
public void testTemplates()
|
public void testTemplates()
|
||||||
{
|
{
|
||||||
transactionService.getRetryingTransactionHelper().doInTransaction(
|
transactionService.getRetryingTransactionHelper().doInTransaction(
|
||||||
new RetryingTransactionCallback<Object>()
|
new RetryingTransactionCallback<Object>()
|
||||||
{
|
|
||||||
@SuppressWarnings("unchecked")
|
|
||||||
public Object execute() throws Exception
|
|
||||||
{
|
{
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
public Object execute() throws Exception
|
||||||
|
{
|
||||||
|
|
||||||
// check the default template engine exists
|
// check the default template engine exists
|
||||||
assertNotNull(templateService.getTemplateProcessor("freemarker"));
|
assertNotNull(templateService.getTemplateProcessor("freemarker"));
|
||||||
Map model = createTemplateModel(root_node);
|
Map model = createTemplateModel(root_node);
|
||||||
|
|
||||||
// execute on test template
|
// execute on test template
|
||||||
String output = templateService.processTemplate("freemarker", TEMPLATE_1, model);
|
String output = templateService.processTemplate("freemarker", TEMPLATE_1, model);
|
||||||
|
|
||||||
// check template contains the expected output
|
|
||||||
assertTrue("Cannot find root-node-id", (output.indexOf(root_node.getId()) != -1) );
|
|
||||||
assertTrue("Cannot resolve subFolder properly", (output.indexOf("root.childByNamePath[\"subFolder\"].name=subFolder") != -1) );
|
|
||||||
assertTrue("Cannot resolve subSubFolder properly", (output.indexOf("root.childByNamePath[\"subFolder/subSubFolder\"].name=subSubFolder") != -1) );
|
|
||||||
assertTrue("Cannot resolve subSubSubFolder properly", (output.indexOf("root.childByNamePath[\"subFolder/subSubFolder/subSubSubFolder\"].name=subSubSubFolder") != -1) );
|
|
||||||
assertTrue("Cannot resolve subSubSubFolder with enhancement properly", (output.indexOf("root.childByNamePath[\"subFolder\"].childByNamePath[\"subSubFolder/subSubSubFolder\"].name=subSubSubFolder") != -1) );
|
|
||||||
|
|
||||||
return null;
|
// check template contains the expected output
|
||||||
}
|
assertTrue("Cannot find root-node-id", (output.indexOf(root_node.getId()) != -1) );
|
||||||
});
|
assertTrue("Cannot resolve subFolder properly", (output.indexOf("root.childByNamePath[\"subFolder\"].name=subFolder") != -1) );
|
||||||
|
assertTrue("Cannot resolve subSubFolder properly", (output.indexOf("root.childByNamePath[\"subFolder/subSubFolder\"].name=subSubFolder") != -1) );
|
||||||
|
assertTrue("Cannot resolve subSubSubFolder properly", (output.indexOf("root.childByNamePath[\"subFolder/subSubFolder/subSubSubFolder\"].name=subSubSubFolder") != -1) );
|
||||||
|
assertTrue("Cannot resolve subSubSubFolder with enhancement properly", (output.indexOf("root.childByNamePath[\"subFolder\"].childByNamePath[\"subSubFolder/subSubSubFolder\"].name=subSubSubFolder") != -1) );
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private Map createTemplateModel(NodeRef root)
|
private Map createTemplateModel(NodeRef root)
|
||||||
@@ -185,11 +177,13 @@ public class TemplateServiceImplTest extends TestCase
|
|||||||
return model;
|
return model;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
public void testGetTemplateProcessor()
|
public void testGetTemplateProcessor()
|
||||||
{
|
{
|
||||||
assertNotNull(templateService.getTemplateProcessor(null));
|
assertNotNull(templateService.getTemplateProcessor(null));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
public void testProcessTemplate()
|
public void testProcessTemplate()
|
||||||
{
|
{
|
||||||
Map model = createTemplateModel(root_node);
|
Map model = createTemplateModel(root_node);
|
||||||
@@ -224,5 +218,5 @@ public class TemplateServiceImplTest extends TestCase
|
|||||||
//
|
//
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
File diff suppressed because it is too large
Load Diff
@@ -1,28 +1,28 @@
|
|||||||
/*
|
/*
|
||||||
* #%L
|
* #%L
|
||||||
* Alfresco Repository
|
* Alfresco Repository
|
||||||
* %%
|
* %%
|
||||||
* Copyright (C) 2005 - 2016 Alfresco Software Limited
|
* Copyright (C) 2005 - 2016 Alfresco Software Limited
|
||||||
* %%
|
* %%
|
||||||
* This file is part of the Alfresco software.
|
* This file is part of the Alfresco software.
|
||||||
* If the software was purchased under a paid Alfresco license, the terms of
|
* If the software was purchased under a paid Alfresco license, the terms of
|
||||||
* the paid license agreement will prevail. Otherwise, the software is
|
* the paid license agreement will prevail. Otherwise, the software is
|
||||||
* provided under the following open source license terms:
|
* provided under the following open source license terms:
|
||||||
*
|
*
|
||||||
* Alfresco is free software: you can redistribute it and/or modify
|
* 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
|
* 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
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
* (at your option) any later version.
|
* (at your option) any later version.
|
||||||
*
|
*
|
||||||
* Alfresco is distributed in the hope that it will be useful,
|
* Alfresco is distributed in the hope that it will be useful,
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
* GNU Lesser General Public License for more details.
|
* GNU Lesser General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU Lesser General Public License
|
* You should have received a copy of the GNU Lesser General Public License
|
||||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||||
* #L%
|
* #L%
|
||||||
*/
|
*/
|
||||||
package org.alfresco.repo.transaction;
|
package org.alfresco.repo.transaction;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@@ -31,40 +31,35 @@ import java.util.Map;
|
|||||||
|
|
||||||
import javax.transaction.UserTransaction;
|
import javax.transaction.UserTransaction;
|
||||||
|
|
||||||
import junit.framework.TestCase;
|
|
||||||
|
|
||||||
import org.alfresco.repo.transaction.AlfrescoTransactionSupport.TxnReadState;
|
import org.alfresco.repo.transaction.AlfrescoTransactionSupport.TxnReadState;
|
||||||
import org.alfresco.repo.transaction.RetryingTransactionHelper.RetryingTransactionCallback;
|
import org.alfresco.repo.transaction.RetryingTransactionHelper.RetryingTransactionCallback;
|
||||||
import org.alfresco.service.ServiceRegistry;
|
import org.alfresco.service.ServiceRegistry;
|
||||||
import org.alfresco.service.transaction.TransactionService;
|
import org.alfresco.service.transaction.TransactionService;
|
||||||
import org.alfresco.test_category.OwnJVMTestsCategory;
|
import org.alfresco.util.BaseSpringTest;
|
||||||
import org.alfresco.util.ApplicationContextHelper;
|
import org.junit.Before;
|
||||||
import org.junit.experimental.categories.Category;
|
import org.junit.Test;
|
||||||
import org.springframework.context.ApplicationContext;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tests integration between our <tt>UserTransaction</tt> implementation and
|
* Tests integration between our <tt>UserTransaction</tt> implementation and
|
||||||
* our <tt>TransactionManager</tt>.
|
* our <tt>TransactionManager</tt>.
|
||||||
*
|
*
|
||||||
* @see org.alfresco.repo.transaction.AlfrescoTransactionManager
|
|
||||||
* @see org.alfresco.util.transaction.SpringAwareUserTransaction
|
* @see org.alfresco.util.transaction.SpringAwareUserTransaction
|
||||||
*
|
*
|
||||||
* @author Derek Hulley
|
* @author Derek Hulley
|
||||||
*/
|
*/
|
||||||
@Category(OwnJVMTestsCategory.class)
|
public class AlfrescoTransactionSupportTest extends BaseSpringTest
|
||||||
public class AlfrescoTransactionSupportTest extends TestCase
|
|
||||||
{
|
{
|
||||||
private static ApplicationContext ctx = ApplicationContextHelper.getApplicationContext();
|
|
||||||
|
|
||||||
private ServiceRegistry serviceRegistry;
|
private ServiceRegistry serviceRegistry;
|
||||||
TransactionService transactionService;
|
TransactionService transactionService;
|
||||||
|
|
||||||
|
@Before
|
||||||
public void setUp() throws Exception
|
public void setUp() throws Exception
|
||||||
{
|
{
|
||||||
serviceRegistry = (ServiceRegistry) ctx.getBean(ServiceRegistry.SERVICE_REGISTRY);
|
serviceRegistry = (ServiceRegistry) applicationContext.getBean(ServiceRegistry.SERVICE_REGISTRY);
|
||||||
transactionService = serviceRegistry.getTransactionService();
|
transactionService = serviceRegistry.getTransactionService();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
public void testTransactionId() throws Exception
|
public void testTransactionId() throws Exception
|
||||||
{
|
{
|
||||||
// get a user transaction
|
// get a user transaction
|
||||||
@@ -72,29 +67,29 @@ public class AlfrescoTransactionSupportTest extends TestCase
|
|||||||
UserTransaction txn = transactionService.getUserTransaction();
|
UserTransaction txn = transactionService.getUserTransaction();
|
||||||
assertNull("Thread shouldn't have a txn ID", AlfrescoTransactionSupport.getTransactionId());
|
assertNull("Thread shouldn't have a txn ID", AlfrescoTransactionSupport.getTransactionId());
|
||||||
assertEquals("No transaction start time expected", -1, AlfrescoTransactionSupport.getTransactionStartTime());
|
assertEquals("No transaction start time expected", -1, AlfrescoTransactionSupport.getTransactionStartTime());
|
||||||
|
|
||||||
// begin the txn
|
// begin the txn
|
||||||
txn.begin();
|
txn.begin();
|
||||||
String txnId = AlfrescoTransactionSupport.getTransactionId();
|
String txnId = AlfrescoTransactionSupport.getTransactionId();
|
||||||
assertNotNull("Expected thread to have a txn id", txnId);
|
assertNotNull("Expected thread to have a txn id", txnId);
|
||||||
long txnStartTime = AlfrescoTransactionSupport.getTransactionStartTime();
|
long txnStartTime = AlfrescoTransactionSupport.getTransactionStartTime();
|
||||||
assertTrue("Expected a transaction start time", txnStartTime > 0);
|
assertTrue("Expected a transaction start time", txnStartTime > 0);
|
||||||
|
|
||||||
// check that the txn id and time doesn't change
|
// check that the txn id and time doesn't change
|
||||||
String txnIdCheck = AlfrescoTransactionSupport.getTransactionId();
|
String txnIdCheck = AlfrescoTransactionSupport.getTransactionId();
|
||||||
assertEquals("Transaction ID changed on same thread", txnId, txnIdCheck);
|
assertEquals("Transaction ID changed on same thread", txnId, txnIdCheck);
|
||||||
long txnStartTimeCheck = AlfrescoTransactionSupport.getTransactionStartTime();
|
long txnStartTimeCheck = AlfrescoTransactionSupport.getTransactionStartTime();
|
||||||
assertEquals("Transaction start time changed on same thread", txnStartTime, txnStartTimeCheck);
|
assertEquals("Transaction start time changed on same thread", txnStartTime, txnStartTimeCheck);
|
||||||
|
|
||||||
// begin a new, inner transaction
|
// begin a new, inner transaction
|
||||||
{
|
{
|
||||||
UserTransaction txnInner = transactionService.getNonPropagatingUserTransaction();
|
UserTransaction txnInner = transactionService.getNonPropagatingUserTransaction();
|
||||||
|
|
||||||
String txnIdInner = AlfrescoTransactionSupport.getTransactionId();
|
String txnIdInner = AlfrescoTransactionSupport.getTransactionId();
|
||||||
assertEquals("Inner transaction not started, so txn ID should not change", txnId, txnIdInner);
|
assertEquals("Inner transaction not started, so txn ID should not change", txnId, txnIdInner);
|
||||||
long txnStartTimeInner = AlfrescoTransactionSupport.getTransactionStartTime();
|
long txnStartTimeInner = AlfrescoTransactionSupport.getTransactionStartTime();
|
||||||
assertEquals("Inner transaction not started, so txn start time should not change", txnStartTime, txnStartTimeInner);
|
assertEquals("Inner transaction not started, so txn start time should not change", txnStartTime, txnStartTimeInner);
|
||||||
|
|
||||||
// begin the nested txn
|
// begin the nested txn
|
||||||
txnInner.begin();
|
txnInner.begin();
|
||||||
// check the ID for the outer transaction
|
// check the ID for the outer transaction
|
||||||
@@ -105,28 +100,29 @@ public class AlfrescoTransactionSupportTest extends TestCase
|
|||||||
assertTrue(
|
assertTrue(
|
||||||
"Inner transaction start time should be greater or equal (accuracy) to the outer's",
|
"Inner transaction start time should be greater or equal (accuracy) to the outer's",
|
||||||
txnStartTime <= txnStartTimeInner);
|
txnStartTime <= txnStartTimeInner);
|
||||||
|
|
||||||
// rollback the nested txn
|
// rollback the nested txn
|
||||||
txnInner.rollback();
|
txnInner.rollback();
|
||||||
txnIdCheck = AlfrescoTransactionSupport.getTransactionId();
|
txnIdCheck = AlfrescoTransactionSupport.getTransactionId();
|
||||||
assertEquals("Txn ID not popped inner txn completion", txnId, txnIdCheck);
|
assertEquals("Txn ID not popped inner txn completion", txnId, txnIdCheck);
|
||||||
}
|
}
|
||||||
|
|
||||||
// rollback
|
// rollback
|
||||||
txn.rollback();
|
txn.rollback();
|
||||||
assertNull("Thread shouldn't have a txn ID after rollback", AlfrescoTransactionSupport.getTransactionId());
|
assertNull("Thread shouldn't have a txn ID after rollback", AlfrescoTransactionSupport.getTransactionId());
|
||||||
|
|
||||||
// start a new transaction
|
// start a new transaction
|
||||||
txn = transactionService.getUserTransaction();
|
txn = transactionService.getUserTransaction();
|
||||||
txn.begin();
|
txn.begin();
|
||||||
txnIdCheck = AlfrescoTransactionSupport.getTransactionId();
|
txnIdCheck = AlfrescoTransactionSupport.getTransactionId();
|
||||||
assertNotSame("New transaction has same ID", txnId, txnIdCheck);
|
assertNotSame("New transaction has same ID", txnId, txnIdCheck);
|
||||||
|
|
||||||
// rollback
|
// rollback
|
||||||
txn.rollback();
|
txn.rollback();
|
||||||
assertNull("Thread shouldn't have a txn ID after rollback", AlfrescoTransactionSupport.getTransactionId());
|
assertNull("Thread shouldn't have a txn ID after rollback", AlfrescoTransactionSupport.getTransactionId());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
public void testListener() throws Exception
|
public void testListener() throws Exception
|
||||||
{
|
{
|
||||||
final List<String> strings = new ArrayList<String>(1);
|
final List<String> strings = new ArrayList<String>(1);
|
||||||
@@ -160,11 +156,11 @@ public class AlfrescoTransactionSupportTest extends TestCase
|
|||||||
strings.add("afterRollback");
|
strings.add("afterRollback");
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
// begin a transaction
|
// begin a transaction
|
||||||
UserTransaction txn = transactionService.getUserTransaction();
|
UserTransaction txn = transactionService.getUserTransaction();
|
||||||
txn.begin();
|
txn.begin();
|
||||||
|
|
||||||
// register it
|
// register it
|
||||||
AlfrescoTransactionSupport.bindListener(listener);
|
AlfrescoTransactionSupport.bindListener(listener);
|
||||||
|
|
||||||
@@ -174,7 +170,8 @@ public class AlfrescoTransactionSupportTest extends TestCase
|
|||||||
assertTrue("beforeCompletion not called on listener", strings.contains("beforeCompletion"));
|
assertTrue("beforeCompletion not called on listener", strings.contains("beforeCompletion"));
|
||||||
assertTrue("afterCommit not called on listener", strings.contains("afterCommit"));
|
assertTrue("afterCommit not called on listener", strings.contains("afterCommit"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
public void testListenerNew() throws Exception
|
public void testListenerNew() throws Exception
|
||||||
{
|
{
|
||||||
final List<String> strings = new ArrayList<String>(1);
|
final List<String> strings = new ArrayList<String>(1);
|
||||||
@@ -203,11 +200,11 @@ public class AlfrescoTransactionSupportTest extends TestCase
|
|||||||
strings.add("afterRollback");
|
strings.add("afterRollback");
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
// begin a transaction
|
// begin a transaction
|
||||||
UserTransaction txn = transactionService.getUserTransaction();
|
UserTransaction txn = transactionService.getUserTransaction();
|
||||||
txn.begin();
|
txn.begin();
|
||||||
|
|
||||||
// register it
|
// register it
|
||||||
AlfrescoTransactionSupport.bindListener(listener);
|
AlfrescoTransactionSupport.bindListener(listener);
|
||||||
|
|
||||||
@@ -217,24 +214,25 @@ public class AlfrescoTransactionSupportTest extends TestCase
|
|||||||
assertTrue("beforeCompletion not called on listener", strings.contains("beforeCompletion"));
|
assertTrue("beforeCompletion not called on listener", strings.contains("beforeCompletion"));
|
||||||
assertTrue("afterCommit not called on listener", strings.contains("afterCommit"));
|
assertTrue("afterCommit not called on listener", strings.contains("afterCommit"));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tests the condition whereby a listener can cause failure by attempting to bind itself to
|
* Tests the condition whereby a listener can cause failure by attempting to bind itself to
|
||||||
* the transaction in the pre-commit callback. This is caused by the listener set being
|
* the transaction in the pre-commit callback. This is caused by the listener set being
|
||||||
* modified during calls to the listeners.
|
* modified during calls to the listeners.
|
||||||
*/
|
*/
|
||||||
|
@Test
|
||||||
public void testPreCommitListenerBinding() throws Exception
|
public void testPreCommitListenerBinding() throws Exception
|
||||||
{
|
{
|
||||||
final String beforeCommit = "beforeCommit";
|
final String beforeCommit = "beforeCommit";
|
||||||
final String afterCommitInner = "afterCommit - inner";
|
final String afterCommitInner = "afterCommit - inner";
|
||||||
final String afterCommitOuter = "afterCommit = outer";
|
final String afterCommitOuter = "afterCommit = outer";
|
||||||
|
|
||||||
// the listeners will play with this
|
// the listeners will play with this
|
||||||
final List<String> testList = new ArrayList<String>(1);
|
final List<String> testList = new ArrayList<String>(1);
|
||||||
testList.add(beforeCommit);
|
testList.add(beforeCommit);
|
||||||
testList.add(afterCommitInner);
|
testList.add(afterCommitInner);
|
||||||
testList.add(afterCommitOuter);
|
testList.add(afterCommitOuter);
|
||||||
|
|
||||||
final TransactionListener listener = new TransactionListenerAdapter()
|
final TransactionListener listener = new TransactionListenerAdapter()
|
||||||
{
|
{
|
||||||
@Override
|
@Override
|
||||||
@@ -286,11 +284,12 @@ public class AlfrescoTransactionSupportTest extends TestCase
|
|||||||
};
|
};
|
||||||
// kick it all off
|
// kick it all off
|
||||||
transactionService.getRetryingTransactionHelper().doInTransaction(bindWork);
|
transactionService.getRetryingTransactionHelper().doInTransaction(bindWork);
|
||||||
|
|
||||||
// make sure that the binding all worked
|
// make sure that the binding all worked
|
||||||
assertTrue("Expected callbacks not all processed: " + testList, testList.size() == 0);
|
assertTrue("Expected callbacks not all processed: " + testList, testList.size() == 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
public void testReadWriteStateRetrieval() throws Exception
|
public void testReadWriteStateRetrieval() throws Exception
|
||||||
{
|
{
|
||||||
final TxnReadState[] postCommitReadState = new TxnReadState[1];
|
final TxnReadState[] postCommitReadState = new TxnReadState[1];
|
||||||
@@ -315,7 +314,7 @@ public class AlfrescoTransactionSupportTest extends TestCase
|
|||||||
{
|
{
|
||||||
// Register to list to post-commit
|
// Register to list to post-commit
|
||||||
AlfrescoTransactionSupport.bindListener(getReadStatePostCommit);
|
AlfrescoTransactionSupport.bindListener(getReadStatePostCommit);
|
||||||
|
|
||||||
return AlfrescoTransactionSupport.getTransactionReadState();
|
return AlfrescoTransactionSupport.getTransactionReadState();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -347,7 +346,8 @@ public class AlfrescoTransactionSupportTest extends TestCase
|
|||||||
txn.commit();
|
txn.commit();
|
||||||
assertEquals("Expected 'no transaction'", TxnReadState.TXN_NONE, postCommitReadState[0]);
|
assertEquals("Expected 'no transaction'", TxnReadState.TXN_NONE, postCommitReadState[0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
public void testResourceHelper() throws Exception
|
public void testResourceHelper() throws Exception
|
||||||
{
|
{
|
||||||
// start a transaction
|
// start a transaction
|
||||||
@@ -382,4 +382,4 @@ public class AlfrescoTransactionSupportTest extends TestCase
|
|||||||
// kick it all off
|
// kick it all off
|
||||||
transactionService.getRetryingTransactionHelper().doInTransaction(testWork);
|
transactionService.getRetryingTransactionHelper().doInTransaction(testWork);
|
||||||
}
|
}
|
||||||
}
|
}
|
@@ -4,21 +4,21 @@
|
|||||||
* %%
|
* %%
|
||||||
* Copyright (C) 2005 - 2016 Alfresco Software Limited
|
* Copyright (C) 2005 - 2016 Alfresco Software Limited
|
||||||
* %%
|
* %%
|
||||||
* This file is part of the Alfresco software.
|
* This file is part of the Alfresco software.
|
||||||
* If the software was purchased under a paid Alfresco license, the terms of
|
* If the software was purchased under a paid Alfresco license, the terms of
|
||||||
* the paid license agreement will prevail. Otherwise, the software is
|
* the paid license agreement will prevail. Otherwise, the software is
|
||||||
* provided under the following open source license terms:
|
* provided under the following open source license terms:
|
||||||
*
|
*
|
||||||
* Alfresco is free software: you can redistribute it and/or modify
|
* 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
|
* 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
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
* (at your option) any later version.
|
* (at your option) any later version.
|
||||||
*
|
*
|
||||||
* Alfresco is distributed in the hope that it will be useful,
|
* Alfresco is distributed in the hope that it will be useful,
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
* GNU Lesser General Public License for more details.
|
* GNU Lesser General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU Lesser General Public License
|
* You should have received a copy of the GNU Lesser General Public License
|
||||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||||
* #L%
|
* #L%
|
||||||
@@ -37,7 +37,6 @@ import java.util.concurrent.ThreadPoolExecutor;
|
|||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
import javax.transaction.Status;
|
import javax.transaction.Status;
|
||||||
import javax.transaction.UserTransaction;
|
import javax.transaction.UserTransaction;
|
||||||
import junit.framework.TestCase;
|
|
||||||
import org.alfresco.error.ExceptionStackUtil;
|
import org.alfresco.error.ExceptionStackUtil;
|
||||||
import org.alfresco.model.ContentModel;
|
import org.alfresco.model.ContentModel;
|
||||||
import org.alfresco.repo.domain.dialect.Dialect;
|
import org.alfresco.repo.domain.dialect.Dialect;
|
||||||
@@ -55,87 +54,86 @@ import org.alfresco.service.cmr.repository.StoreRef;
|
|||||||
import org.alfresco.service.namespace.NamespaceService;
|
import org.alfresco.service.namespace.NamespaceService;
|
||||||
import org.alfresco.service.namespace.QName;
|
import org.alfresco.service.namespace.QName;
|
||||||
import org.alfresco.service.transaction.TransactionService;
|
import org.alfresco.service.transaction.TransactionService;
|
||||||
import org.alfresco.test_category.OwnJVMTestsCategory;
|
import org.alfresco.util.BaseSpringTest;
|
||||||
import org.alfresco.util.ApplicationContextHelper;
|
import org.alfresco.util.GUID;
|
||||||
import org.alfresco.util.Pair;
|
import org.alfresco.util.Pair;
|
||||||
import org.alfresco.util.transaction.TransactionListenerAdapter;
|
import org.alfresco.util.transaction.TransactionListenerAdapter;
|
||||||
import org.apache.commons.lang.mutable.MutableInt;
|
import org.apache.commons.lang.mutable.MutableInt;
|
||||||
import org.apache.commons.logging.Log;
|
import org.apache.commons.logging.Log;
|
||||||
import org.apache.commons.logging.LogFactory;
|
import org.apache.commons.logging.LogFactory;
|
||||||
import org.junit.experimental.categories.Category;
|
import org.junit.After;
|
||||||
import org.springframework.context.ApplicationContext;
|
import org.junit.Before;
|
||||||
|
import org.junit.Test;
|
||||||
import org.springframework.dao.ConcurrencyFailureException;
|
import org.springframework.dao.ConcurrencyFailureException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tests the transaction retrying behaviour with various failure modes.
|
* Tests the transaction retrying behaviour with various failure modes.
|
||||||
*
|
*
|
||||||
* @see RetryingTransactionHelper
|
* @see RetryingTransactionHelper
|
||||||
* @see TransactionService
|
* @see TransactionService
|
||||||
*
|
*
|
||||||
* @author Derek Hulley
|
* @author Derek Hulley
|
||||||
* @since 2.1
|
* @since 2.1
|
||||||
*/
|
*/
|
||||||
@Category(OwnJVMTestsCategory.class)
|
public class RetryingTransactionHelperTest extends BaseSpringTest
|
||||||
public class RetryingTransactionHelperTest extends TestCase
|
|
||||||
{
|
{
|
||||||
private static Log logger = LogFactory.getLog("org.alfresco.repo.transaction.RetryingTransactionHelperTest");
|
private static Log logger = LogFactory.getLog("org.alfresco.repo.transaction.RetryingTransactionHelperTest");
|
||||||
|
|
||||||
private static final QName PROP_CHECK_VALUE = QName.createQName(NamespaceService.CONTENT_MODEL_1_0_URI, "check_value");
|
private static final QName PROP_CHECK_VALUE = QName.createQName(NamespaceService.CONTENT_MODEL_1_0_URI, "check_value");
|
||||||
|
|
||||||
private static ApplicationContext ctx = ApplicationContextHelper.getApplicationContext();
|
|
||||||
|
|
||||||
private ServiceRegistry serviceRegistry;
|
private ServiceRegistry serviceRegistry;
|
||||||
private AuthenticationComponent authenticationComponent;
|
private AuthenticationComponent authenticationComponent;
|
||||||
private TransactionService transactionService;
|
private TransactionService transactionService;
|
||||||
private NodeService nodeService;
|
private NodeService nodeService;
|
||||||
private RetryingTransactionHelper txnHelper;
|
private RetryingTransactionHelper txnHelper;
|
||||||
|
|
||||||
private Dialect dialect;
|
private Dialect dialect;
|
||||||
|
|
||||||
private NodeRef rootNodeRef;
|
private NodeRef rootNodeRef;
|
||||||
private NodeRef workingNodeRef;
|
private NodeRef workingNodeRef;
|
||||||
|
|
||||||
@Override
|
@Before
|
||||||
public void setUp() throws Exception
|
public void setUp() throws Exception
|
||||||
{
|
{
|
||||||
dialect = (Dialect) ctx.getBean("dialect");
|
dialect = (Dialect) applicationContext.getBean("dialect");
|
||||||
|
|
||||||
serviceRegistry = (ServiceRegistry) ctx.getBean(ServiceRegistry.SERVICE_REGISTRY);
|
serviceRegistry = (ServiceRegistry) applicationContext.getBean(ServiceRegistry.SERVICE_REGISTRY);
|
||||||
authenticationComponent = (AuthenticationComponent) ctx.getBean("authenticationComponent");
|
authenticationComponent = (AuthenticationComponent) applicationContext.getBean("authenticationComponent");
|
||||||
transactionService = serviceRegistry.getTransactionService();
|
transactionService = serviceRegistry.getTransactionService();
|
||||||
nodeService = serviceRegistry.getNodeService();
|
nodeService = serviceRegistry.getNodeService();
|
||||||
txnHelper = transactionService.getRetryingTransactionHelper();
|
txnHelper = transactionService.getRetryingTransactionHelper();
|
||||||
|
|
||||||
// authenticate
|
// authenticate
|
||||||
authenticationComponent.setSystemUserAsCurrentUser();
|
authenticationComponent.setSystemUserAsCurrentUser();
|
||||||
|
|
||||||
StoreRef storeRef = nodeService.createStore(
|
StoreRef storeRef = nodeService.createStore(
|
||||||
StoreRef.PROTOCOL_WORKSPACE,
|
StoreRef.PROTOCOL_WORKSPACE,
|
||||||
"test-" + getName() + "-" + System.currentTimeMillis());
|
"test-" + System.currentTimeMillis());
|
||||||
rootNodeRef = nodeService.getRootNode(storeRef);
|
rootNodeRef = nodeService.getRootNode(storeRef);
|
||||||
// Create a node to work on
|
// Create a node to work on
|
||||||
workingNodeRef = nodeService.createNode(
|
workingNodeRef = nodeService.createNode(
|
||||||
rootNodeRef,
|
rootNodeRef,
|
||||||
ContentModel.ASSOC_CHILDREN,
|
ContentModel.ASSOC_CHILDREN,
|
||||||
QName.createQName(NamespaceService.CONTENT_MODEL_1_0_URI, getName()),
|
QName.createQName(NamespaceService.CONTENT_MODEL_1_0_URI, GUID.generate()),
|
||||||
ContentModel.TYPE_CMOBJECT).getChildRef();
|
ContentModel.TYPE_CMOBJECT).getChildRef();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@After
|
||||||
public void tearDown() throws Exception
|
public void tearDown() throws Exception
|
||||||
{
|
{
|
||||||
try { authenticationComponent.clearCurrentSecurityContext(); } catch (Throwable e) {}
|
try { authenticationComponent.clearCurrentSecurityContext(); } catch (Throwable e) {}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
public void testSetUp() throws Exception
|
public void testSetUp() throws Exception
|
||||||
{
|
{
|
||||||
assertNotNull(rootNodeRef);
|
assertNotNull(rootNodeRef);
|
||||||
assertNotNull(workingNodeRef);
|
assertNotNull(workingNodeRef);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the count, which is 0 to start each test
|
* Get the count, which is 0 to start each test
|
||||||
*
|
*
|
||||||
* @return Returns the current count
|
* @return Returns the current count
|
||||||
*/
|
*/
|
||||||
private Long getCheckValue()
|
private Long getCheckValue()
|
||||||
@@ -148,10 +146,10 @@ public class RetryingTransactionHelperTest extends TestCase
|
|||||||
}
|
}
|
||||||
return checkValue;
|
return checkValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Increment the test count, which is 0 to start each test
|
* Increment the test count, which is 0 to start each test
|
||||||
*
|
*
|
||||||
* @return Returns the current count
|
* @return Returns the current count
|
||||||
*/
|
*/
|
||||||
private Long incrementCheckValue()
|
private Long incrementCheckValue()
|
||||||
@@ -161,7 +159,7 @@ public class RetryingTransactionHelperTest extends TestCase
|
|||||||
nodeService.setProperty(workingNodeRef, PROP_CHECK_VALUE, checkValue);
|
nodeService.setProperty(workingNodeRef, PROP_CHECK_VALUE, checkValue);
|
||||||
return checkValue;
|
return checkValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return Never returns anything
|
* @return Never returns anything
|
||||||
* @throws InvalidNodeRefException <b>ALWAYS</b>
|
* @throws InvalidNodeRefException <b>ALWAYS</b>
|
||||||
@@ -177,6 +175,7 @@ public class RetryingTransactionHelperTest extends TestCase
|
|||||||
/**
|
/**
|
||||||
* Check that it works without complications.
|
* Check that it works without complications.
|
||||||
*/
|
*/
|
||||||
|
@Test
|
||||||
public void testSuccessNoRetry()
|
public void testSuccessNoRetry()
|
||||||
{
|
{
|
||||||
long beforeValue = getCheckValue();
|
long beforeValue = getCheckValue();
|
||||||
@@ -192,17 +191,18 @@ public class RetryingTransactionHelperTest extends TestCase
|
|||||||
assertEquals("The value must have increased", beforeValue + 1, afterValue);
|
assertEquals("The value must have increased", beforeValue + 1, afterValue);
|
||||||
assertEquals("The txn value must be the same as the value after", afterValue, txnValue);
|
assertEquals("The txn value must be the same as the value after", afterValue, txnValue);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check that the transaction state can be fetched in and around the transaction.
|
* Check that the transaction state can be fetched in and around the transaction.
|
||||||
* This also checks that any mischievous attempts to manipulate the transaction
|
* This also checks that any mischievous attempts to manipulate the transaction
|
||||||
* (other than setRollback) are detected.
|
* (other than setRollback) are detected.
|
||||||
*/
|
*/
|
||||||
|
@Test
|
||||||
public void testUserTransactionStatus()
|
public void testUserTransactionStatus()
|
||||||
{
|
{
|
||||||
UserTransaction txnBefore = RetryingTransactionHelper.getActiveUserTransaction();
|
UserTransaction txnBefore = RetryingTransactionHelper.getActiveUserTransaction();
|
||||||
assertNull("Did not expect to get an active UserTransaction", txnBefore);
|
assertNull("Did not expect to get an active UserTransaction", txnBefore);
|
||||||
|
|
||||||
RetryingTransactionCallback<Long> callbackOuter = new RetryingTransactionCallback<Long>()
|
RetryingTransactionCallback<Long> callbackOuter = new RetryingTransactionCallback<Long>()
|
||||||
{
|
{
|
||||||
public Long execute() throws Throwable
|
public Long execute() throws Throwable
|
||||||
@@ -243,14 +243,15 @@ public class RetryingTransactionHelperTest extends TestCase
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
txnHelper.doInTransaction(callbackOuter);
|
txnHelper.doInTransaction(callbackOuter);
|
||||||
|
|
||||||
UserTransaction txnAfter = RetryingTransactionHelper.getActiveUserTransaction();
|
UserTransaction txnAfter = RetryingTransactionHelper.getActiveUserTransaction();
|
||||||
assertNull("Did not expect to get an active UserTransaction", txnAfter);
|
assertNull("Did not expect to get an active UserTransaction", txnAfter);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check that the retries happening for simple concurrency exceptions
|
* Check that the retries happening for simple concurrency exceptions
|
||||||
*/
|
*/
|
||||||
|
@Test
|
||||||
public void testSuccessWithRetry()
|
public void testSuccessWithRetry()
|
||||||
{
|
{
|
||||||
RetryingTransactionCallback<Long> callback = new RetryingTransactionCallback<Long>()
|
RetryingTransactionCallback<Long> callback = new RetryingTransactionCallback<Long>()
|
||||||
@@ -274,10 +275,11 @@ public class RetryingTransactionHelperTest extends TestCase
|
|||||||
long txnValue = txnHelper.doInTransaction(callback);
|
long txnValue = txnHelper.doInTransaction(callback);
|
||||||
assertEquals("Only one increment expected", 1, txnValue);
|
assertEquals("Only one increment expected", 1, txnValue);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Checks that a non-retrying exception is passed out and that the transaction is rolled back.
|
* Checks that a non-retrying exception is passed out and that the transaction is rolled back.
|
||||||
*/
|
*/
|
||||||
|
@Test
|
||||||
public void testNonRetryingFailure()
|
public void testNonRetryingFailure()
|
||||||
{
|
{
|
||||||
RetryingTransactionCallback<Long> callback = new RetryingTransactionCallback<Long>()
|
RetryingTransactionCallback<Long> callback = new RetryingTransactionCallback<Long>()
|
||||||
@@ -305,13 +307,14 @@ public class RetryingTransactionHelperTest extends TestCase
|
|||||||
long checkValue = getCheckValue();
|
long checkValue = getCheckValue();
|
||||||
assertEquals("Check value should not have changed", 0, checkValue);
|
assertEquals("Check value should not have changed", 0, checkValue);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sometimes, exceptions or other states may cause the transaction to be marked for
|
* Sometimes, exceptions or other states may cause the transaction to be marked for
|
||||||
* rollback without an exception being generated. This tests that the exception stays
|
* rollback without an exception being generated. This tests that the exception stays
|
||||||
* absorbed and that another isn't generated, but that the transaction was rolled back
|
* absorbed and that another isn't generated, but that the transaction was rolled back
|
||||||
* properly.
|
* properly.
|
||||||
*/
|
*/
|
||||||
|
@Test
|
||||||
public void testNonRetryingSilentRollback()
|
public void testNonRetryingSilentRollback()
|
||||||
{
|
{
|
||||||
RetryingTransactionCallback<Long> callback = new RetryingTransactionCallback<Long>()
|
RetryingTransactionCallback<Long> callback = new RetryingTransactionCallback<Long>()
|
||||||
@@ -334,10 +337,11 @@ public class RetryingTransactionHelperTest extends TestCase
|
|||||||
long checkValue = getCheckValue();
|
long checkValue = getCheckValue();
|
||||||
assertEquals("Check value should not have changed", 0, checkValue);
|
assertEquals("Check value should not have changed", 0, checkValue);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Checks nesting of two transactions with <code>requiresNew == false</code>
|
* Checks nesting of two transactions with <code>requiresNew == false</code>
|
||||||
*/
|
*/
|
||||||
|
@Test
|
||||||
public void testNestedWithPropagation()
|
public void testNestedWithPropagation()
|
||||||
{
|
{
|
||||||
RetryingTransactionCallback<Long> callback = new RetryingTransactionCallback<Long>()
|
RetryingTransactionCallback<Long> callback = new RetryingTransactionCallback<Long>()
|
||||||
@@ -362,10 +366,11 @@ public class RetryingTransactionHelperTest extends TestCase
|
|||||||
long checkValue = txnHelper.doInTransaction(callback);
|
long checkValue = txnHelper.doInTransaction(callback);
|
||||||
assertEquals("Nesting requiresNew==false didn't work", 4, checkValue);
|
assertEquals("Nesting requiresNew==false didn't work", 4, checkValue);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Checks nesting of two transactions with <code>requiresNew == true</code>
|
* Checks nesting of two transactions with <code>requiresNew == true</code>
|
||||||
*/
|
*/
|
||||||
|
@Test
|
||||||
public void testNestedWithoutPropagation()
|
public void testNestedWithoutPropagation()
|
||||||
{
|
{
|
||||||
RetryingTransactionCallback<Long> callback = new RetryingTransactionCallback<Long>()
|
RetryingTransactionCallback<Long> callback = new RetryingTransactionCallback<Long>()
|
||||||
@@ -390,18 +395,19 @@ public class RetryingTransactionHelperTest extends TestCase
|
|||||||
long checkValue = txnHelper.doInTransaction(callback);
|
long checkValue = txnHelper.doInTransaction(callback);
|
||||||
assertEquals("Nesting requiresNew==true didn't work", 4, checkValue);
|
assertEquals("Nesting requiresNew==true didn't work", 4, checkValue);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Checks nesting of two transactions with <code>requiresNew == true</code>,
|
* Checks nesting of two transactions with <code>requiresNew == true</code>,
|
||||||
* but where the two transactions get involved in a concurrency struggle.
|
* but where the two transactions get involved in a concurrency struggle.
|
||||||
* <p/>
|
* <p/>
|
||||||
* Note: skip test for non-MySQL
|
* Note: skip test for non-MySQL
|
||||||
*/
|
*/
|
||||||
|
@Test
|
||||||
public void testNestedWithoutPropagationConcurrentUntilFailureMySQL() throws InterruptedException
|
public void testNestedWithoutPropagationConcurrentUntilFailureMySQL() throws InterruptedException
|
||||||
{
|
{
|
||||||
final RetryingTransactionHelper txnHelperForTest = transactionService.getRetryingTransactionHelper();
|
final RetryingTransactionHelper txnHelperForTest = transactionService.getRetryingTransactionHelper();
|
||||||
txnHelperForTest.setMaxRetries(1);
|
txnHelperForTest.setMaxRetries(1);
|
||||||
|
|
||||||
if (! (dialect instanceof MySQLInnoDBDialect))
|
if (! (dialect instanceof MySQLInnoDBDialect))
|
||||||
{
|
{
|
||||||
// NOOP - skip test for non-MySQL DB dialects to avoid hang if concurrently "nested" (in terms of Spring)
|
// NOOP - skip test for non-MySQL DB dialects to avoid hang if concurrently "nested" (in terms of Spring)
|
||||||
@@ -440,46 +446,47 @@ public class RetryingTransactionHelperTest extends TestCase
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
public void testConcurrencyRetryingNoFailure() throws InterruptedException
|
public void testConcurrencyRetryingNoFailure() throws InterruptedException
|
||||||
{
|
{
|
||||||
Thread t1 = new Thread(new ConcurrentTransaction(5000));
|
Thread t1 = new Thread(new ConcurrentTransaction(5000));
|
||||||
t1.start();
|
t1.start();
|
||||||
|
|
||||||
Thread.sleep(1000);
|
Thread.sleep(1000);
|
||||||
|
|
||||||
Thread t2 = new Thread(new ConcurrentTransaction(10));
|
Thread t2 = new Thread(new ConcurrentTransaction(10));
|
||||||
t2.start();
|
t2.start();
|
||||||
|
|
||||||
t1.join();
|
t1.join();
|
||||||
t2.join();
|
t2.join();
|
||||||
}
|
}
|
||||||
|
|
||||||
private class ConcurrentTransaction implements Runnable
|
private class ConcurrentTransaction implements Runnable
|
||||||
{
|
{
|
||||||
private long wait;
|
private long wait;
|
||||||
|
|
||||||
public ConcurrentTransaction(long wait)
|
public ConcurrentTransaction(long wait)
|
||||||
{
|
{
|
||||||
this.wait = wait;
|
this.wait = wait;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void run()
|
public void run()
|
||||||
{
|
{
|
||||||
AuthenticationUtil.setFullyAuthenticatedUser(AuthenticationUtil.getAdminUserName());
|
AuthenticationUtil.setFullyAuthenticatedUser(AuthenticationUtil.getAdminUserName());
|
||||||
|
|
||||||
final RetryingTransactionHelper txnHelperForTest = transactionService.getRetryingTransactionHelper();
|
final RetryingTransactionHelper txnHelperForTest = transactionService.getRetryingTransactionHelper();
|
||||||
|
|
||||||
RetryingTransactionCallback<Long> callback = new RetryingTransactionCallback<Long>()
|
RetryingTransactionCallback<Long> callback = new RetryingTransactionCallback<Long>()
|
||||||
{
|
{
|
||||||
public Long execute() throws Throwable
|
public Long execute() throws Throwable
|
||||||
{
|
{
|
||||||
incrementCheckValue();
|
incrementCheckValue();
|
||||||
|
|
||||||
System.out.println("Wait started: "+Thread.currentThread()+" ("+wait+")");
|
System.out.println("Wait started: "+Thread.currentThread()+" ("+wait+")");
|
||||||
Thread.sleep(wait);
|
Thread.sleep(wait);
|
||||||
System.out.println("Wait finished: "+Thread.currentThread()+" ("+wait+")");
|
System.out.println("Wait finished: "+Thread.currentThread()+" ("+wait+")");
|
||||||
|
|
||||||
return getCheckValue();
|
return getCheckValue();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -496,7 +503,8 @@ public class RetryingTransactionHelperTest extends TestCase
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
public void testZeroAndNegativeRetries()
|
public void testZeroAndNegativeRetries()
|
||||||
{
|
{
|
||||||
final MutableInt callCount = new MutableInt(0);
|
final MutableInt callCount = new MutableInt(0);
|
||||||
@@ -520,7 +528,7 @@ public class RetryingTransactionHelperTest extends TestCase
|
|||||||
// Expected
|
// Expected
|
||||||
}
|
}
|
||||||
assertEquals("Should have been called exactly once", 1, callCount.intValue());
|
assertEquals("Should have been called exactly once", 1, callCount.intValue());
|
||||||
|
|
||||||
// Negative retries
|
// Negative retries
|
||||||
callCount.setValue(0);
|
callCount.setValue(0);
|
||||||
txnHelper.setMaxRetries(-1);
|
txnHelper.setMaxRetries(-1);
|
||||||
@@ -534,8 +542,9 @@ public class RetryingTransactionHelperTest extends TestCase
|
|||||||
}
|
}
|
||||||
assertEquals("Should have been called exactly once", 1, callCount.intValue());
|
assertEquals("Should have been called exactly once", 1, callCount.intValue());
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings({ "unchecked", "rawtypes" })
|
@SuppressWarnings({ "unchecked", "rawtypes" })
|
||||||
|
@Test
|
||||||
public void testTimeLimit()
|
public void testTimeLimit()
|
||||||
{
|
{
|
||||||
final RetryingTransactionHelper txnHelper = new RetryingTransactionHelper();
|
final RetryingTransactionHelper txnHelper = new RetryingTransactionHelper();
|
||||||
@@ -556,7 +565,8 @@ public class RetryingTransactionHelperTest extends TestCase
|
|||||||
throw new RuntimeException("Unexpected exception", caughtExceptions.get(0));
|
throw new RuntimeException("Unexpected exception", caughtExceptions.get(0));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
public void testALF_17631()
|
public void testALF_17631()
|
||||||
{
|
{
|
||||||
final MutableInt callCount = new MutableInt(0);
|
final MutableInt callCount = new MutableInt(0);
|
||||||
@@ -579,13 +589,13 @@ public class RetryingTransactionHelperTest extends TestCase
|
|||||||
// Expected
|
// Expected
|
||||||
}
|
}
|
||||||
assertEquals("Should have been called exactly once", 1, callCount.intValue());
|
assertEquals("Should have been called exactly once", 1, callCount.intValue());
|
||||||
|
|
||||||
callCount.setValue(0);
|
callCount.setValue(0);
|
||||||
|
|
||||||
List<Class<?>> extraExceptions = new ArrayList<Class<?>>(1);
|
List<Class<?>> extraExceptions = new ArrayList<Class<?>>(1);
|
||||||
extraExceptions.add(InvalidNodeRefException.class);
|
extraExceptions.add(InvalidNodeRefException.class);
|
||||||
txnHelper.setExtraExceptions(extraExceptions);
|
txnHelper.setExtraExceptions(extraExceptions);
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
txnHelper.doInTransaction(callback);
|
txnHelper.doInTransaction(callback);
|
||||||
@@ -595,13 +605,14 @@ public class RetryingTransactionHelperTest extends TestCase
|
|||||||
// Expected
|
// Expected
|
||||||
}
|
}
|
||||||
assertEquals("Should have been called tree times", 3, callCount.intValue());
|
assertEquals("Should have been called tree times", 3, callCount.intValue());
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
public void testForceWritable() throws Exception
|
public void testForceWritable() throws Exception
|
||||||
{
|
{
|
||||||
authenticationComponent.setCurrentUser(AuthenticationUtil.getAdminUserName());
|
authenticationComponent.setCurrentUser(AuthenticationUtil.getAdminUserName());
|
||||||
|
|
||||||
final RetryingTransactionCallback<Void> doNothingCallback = new RetryingTransactionCallback<Void>()
|
final RetryingTransactionCallback<Void> doNothingCallback = new RetryingTransactionCallback<Void>()
|
||||||
{
|
{
|
||||||
@Override
|
@Override
|
||||||
@@ -610,7 +621,7 @@ public class RetryingTransactionHelperTest extends TestCase
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
TransactionServiceImpl txnService = (TransactionServiceImpl) transactionService;
|
TransactionServiceImpl txnService = (TransactionServiceImpl) transactionService;
|
||||||
txnService.setAllowWrite(false, QName.createQName("{test}testForceWritable"));
|
txnService.setAllowWrite(false, QName.createQName("{test}testForceWritable"));
|
||||||
try
|
try
|
||||||
@@ -628,7 +639,7 @@ public class RetryingTransactionHelperTest extends TestCase
|
|||||||
{
|
{
|
||||||
// Expected
|
// Expected
|
||||||
}
|
}
|
||||||
|
|
||||||
// Now call the vetoed callback in one that has been forced writable
|
// Now call the vetoed callback in one that has been forced writable
|
||||||
// A failure would be one of the causes of MNT-11310.
|
// A failure would be one of the causes of MNT-11310.
|
||||||
RetryingTransactionHelper forcedTxnHelper = txnService.getRetryingTransactionHelper();
|
RetryingTransactionHelper forcedTxnHelper = txnService.getRetryingTransactionHelper();
|
||||||
@@ -643,7 +654,7 @@ public class RetryingTransactionHelperTest extends TestCase
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}, false);
|
}, false);
|
||||||
|
|
||||||
// However, if we attempt to force a new transaction, then the forcing should have no effect
|
// However, if we attempt to force a new transaction, then the forcing should have no effect
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@@ -670,6 +681,7 @@ public class RetryingTransactionHelperTest extends TestCase
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
public void testStartNewTransaction() throws Exception
|
public void testStartNewTransaction() throws Exception
|
||||||
{
|
{
|
||||||
// MNT-10096
|
// MNT-10096
|
||||||
@@ -798,4 +810,4 @@ public class RetryingTransactionHelperTest extends TestCase
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@@ -1,77 +1,74 @@
|
|||||||
/*
|
/*
|
||||||
* #%L
|
* #%L
|
||||||
* Alfresco Repository
|
* Alfresco Repository
|
||||||
* %%
|
* %%
|
||||||
* Copyright (C) 2005 - 2016 Alfresco Software Limited
|
* Copyright (C) 2005 - 2016 Alfresco Software Limited
|
||||||
* %%
|
* %%
|
||||||
* This file is part of the Alfresco software.
|
* This file is part of the Alfresco software.
|
||||||
* If the software was purchased under a paid Alfresco license, the terms of
|
* If the software was purchased under a paid Alfresco license, the terms of
|
||||||
* the paid license agreement will prevail. Otherwise, the software is
|
* the paid license agreement will prevail. Otherwise, the software is
|
||||||
* provided under the following open source license terms:
|
* provided under the following open source license terms:
|
||||||
*
|
*
|
||||||
* Alfresco is free software: you can redistribute it and/or modify
|
* 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
|
* 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
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
* (at your option) any later version.
|
* (at your option) any later version.
|
||||||
*
|
*
|
||||||
* Alfresco is distributed in the hope that it will be useful,
|
* Alfresco is distributed in the hope that it will be useful,
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
* GNU Lesser General Public License for more details.
|
* GNU Lesser General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU Lesser General Public License
|
* You should have received a copy of the GNU Lesser General Public License
|
||||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||||
* #L%
|
* #L%
|
||||||
*/
|
*/
|
||||||
package org.alfresco.repo.transaction;
|
package org.alfresco.repo.transaction;
|
||||||
|
|
||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
|
|
||||||
import javax.transaction.UserTransaction;
|
import javax.transaction.UserTransaction;
|
||||||
|
|
||||||
import junit.framework.TestCase;
|
|
||||||
|
|
||||||
import org.alfresco.repo.transaction.RetryingTransactionHelper.RetryingTransactionCallback;
|
import org.alfresco.repo.transaction.RetryingTransactionHelper.RetryingTransactionCallback;
|
||||||
import org.alfresco.service.transaction.TransactionService;
|
import org.alfresco.service.transaction.TransactionService;
|
||||||
import org.alfresco.test_category.OwnJVMTestsCategory;
|
import org.alfresco.util.BaseSpringTest;
|
||||||
import org.alfresco.util.ApplicationContextHelper;
|
import org.junit.Before;
|
||||||
import org.junit.experimental.categories.Category;
|
import org.junit.Test;
|
||||||
import org.springframework.context.ApplicationContext;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see org.alfresco.repo.transaction.TransactionAwareSingleton
|
* @see org.alfresco.repo.transaction.TransactionAwareSingleton
|
||||||
*
|
*
|
||||||
* @author Derek Hulley
|
* @author Derek Hulley
|
||||||
*/
|
*/
|
||||||
@Category(OwnJVMTestsCategory.class)
|
public class TransactionAwareSingletonTest extends BaseSpringTest
|
||||||
public class TransactionAwareSingletonTest extends TestCase
|
|
||||||
{
|
{
|
||||||
private static ApplicationContext ctx = ApplicationContextHelper.getApplicationContext();
|
|
||||||
private static Random rand = new Random();
|
private static Random rand = new Random();
|
||||||
|
|
||||||
/** the instance to test */
|
/** the instance to test */
|
||||||
private TransactionAwareSingleton<Integer> singleton = new TransactionAwareSingleton<Integer>();
|
private TransactionAwareSingleton<Integer> singleton = new TransactionAwareSingleton<Integer>();
|
||||||
private static final Integer INTEGER_ONE = new Integer(1);
|
private static final Integer INTEGER_ONE = new Integer(1);
|
||||||
private static final Integer INTEGER_TWO = new Integer(2);
|
private static final Integer INTEGER_TWO = new Integer(2);
|
||||||
|
|
||||||
private TransactionService transactionService;
|
private TransactionService transactionService;
|
||||||
|
|
||||||
|
@Before
|
||||||
public void setUp() throws Exception
|
public void setUp() throws Exception
|
||||||
{
|
{
|
||||||
transactionService = (TransactionService) ctx.getBean("transactionComponent");
|
transactionService = (TransactionService) applicationContext.getBean("transactionComponent");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
public void testCommit() throws Throwable
|
public void testCommit() throws Throwable
|
||||||
{
|
{
|
||||||
UserTransaction txn = transactionService.getUserTransaction();
|
UserTransaction txn = transactionService.getUserTransaction();
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
txn.begin();
|
txn.begin();
|
||||||
|
|
||||||
singleton.put(INTEGER_ONE);
|
singleton.put(INTEGER_ONE);
|
||||||
check(INTEGER_ONE, true);
|
check(INTEGER_ONE, true);
|
||||||
check(null, false);
|
check(null, false);
|
||||||
|
|
||||||
// commit
|
// commit
|
||||||
txn.commit();
|
txn.commit();
|
||||||
}
|
}
|
||||||
@@ -83,18 +80,19 @@ public class TransactionAwareSingletonTest extends TestCase
|
|||||||
check(INTEGER_ONE, true);
|
check(INTEGER_ONE, true);
|
||||||
check(INTEGER_ONE, false);
|
check(INTEGER_ONE, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
public void testRollback() throws Throwable
|
public void testRollback() throws Throwable
|
||||||
{
|
{
|
||||||
UserTransaction txn = transactionService.getUserTransaction();
|
UserTransaction txn = transactionService.getUserTransaction();
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
txn.begin();
|
txn.begin();
|
||||||
|
|
||||||
singleton.put(INTEGER_TWO);
|
singleton.put(INTEGER_TWO);
|
||||||
check(INTEGER_TWO, true);
|
check(INTEGER_TWO, true);
|
||||||
check(null, false);
|
check(null, false);
|
||||||
|
|
||||||
// rollback
|
// rollback
|
||||||
txn.rollback();
|
txn.rollback();
|
||||||
}
|
}
|
||||||
@@ -106,8 +104,9 @@ public class TransactionAwareSingletonTest extends TestCase
|
|||||||
check(null, true);
|
check(null, true);
|
||||||
check(null, false);
|
check(null, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static final int THREAD_COUNT = 20;
|
private static final int THREAD_COUNT = 20;
|
||||||
|
@Test
|
||||||
public void testThreadsCommit() throws Throwable
|
public void testThreadsCommit() throws Throwable
|
||||||
{
|
{
|
||||||
TestThread[] threads = new TestThread[THREAD_COUNT];
|
TestThread[] threads = new TestThread[THREAD_COUNT];
|
||||||
@@ -133,6 +132,7 @@ public class TransactionAwareSingletonTest extends TestCase
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@Test
|
||||||
public void testThreadsRollback() throws Throwable
|
public void testThreadsRollback() throws Throwable
|
||||||
{
|
{
|
||||||
TestThread[] threads = new TestThread[THREAD_COUNT];
|
TestThread[] threads = new TestThread[THREAD_COUNT];
|
||||||
@@ -143,9 +143,9 @@ public class TransactionAwareSingletonTest extends TestCase
|
|||||||
threads[i] = thread;
|
threads[i] = thread;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Dumps random values into
|
* Dumps random values into
|
||||||
* @author Derek Hulley
|
* @author Derek Hulley
|
||||||
*/
|
*/
|
||||||
private class TestThread extends Thread
|
private class TestThread extends Thread
|
||||||
@@ -154,7 +154,7 @@ public class TransactionAwareSingletonTest extends TestCase
|
|||||||
private Throwable error;
|
private Throwable error;
|
||||||
private boolean commit;
|
private boolean commit;
|
||||||
private Integer value = new Integer((int)System.nanoTime());
|
private Integer value = new Integer((int)System.nanoTime());
|
||||||
|
|
||||||
public TestThread(boolean commit)
|
public TestThread(boolean commit)
|
||||||
{
|
{
|
||||||
this.commit = commit;
|
this.commit = commit;
|
||||||
@@ -166,9 +166,9 @@ public class TransactionAwareSingletonTest extends TestCase
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
txn.begin();
|
txn.begin();
|
||||||
|
|
||||||
singleton.put(value);
|
singleton.put(value);
|
||||||
|
|
||||||
// wait for some random time
|
// wait for some random time
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@@ -182,7 +182,7 @@ public class TransactionAwareSingletonTest extends TestCase
|
|||||||
|
|
||||||
// check
|
// check
|
||||||
check(value, true);
|
check(value, true);
|
||||||
|
|
||||||
if (commit)
|
if (commit)
|
||||||
{
|
{
|
||||||
txn.commit();
|
txn.commit();
|
||||||
@@ -213,7 +213,7 @@ public class TransactionAwareSingletonTest extends TestCase
|
|||||||
finished = true;
|
finished = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void check(final Integer expected, boolean inTransaction)
|
private void check(final Integer expected, boolean inTransaction)
|
||||||
{
|
{
|
||||||
RetryingTransactionCallback<Object> checkWork = new RetryingTransactionCallback<Object>()
|
RetryingTransactionCallback<Object> checkWork = new RetryingTransactionCallback<Object>()
|
||||||
@@ -234,4 +234,4 @@ public class TransactionAwareSingletonTest extends TestCase
|
|||||||
};
|
};
|
||||||
transactionService.getRetryingTransactionHelper().doInTransaction(checkWork, false, !inTransaction);
|
transactionService.getRetryingTransactionHelper().doInTransaction(checkWork, false, !inTransaction);
|
||||||
}
|
}
|
||||||
}
|
}
|
@@ -4,21 +4,21 @@
|
|||||||
* %%
|
* %%
|
||||||
* Copyright (C) 2005 - 2016 Alfresco Software Limited
|
* Copyright (C) 2005 - 2016 Alfresco Software Limited
|
||||||
* %%
|
* %%
|
||||||
* This file is part of the Alfresco software.
|
* This file is part of the Alfresco software.
|
||||||
* If the software was purchased under a paid Alfresco license, the terms of
|
* If the software was purchased under a paid Alfresco license, the terms of
|
||||||
* the paid license agreement will prevail. Otherwise, the software is
|
* the paid license agreement will prevail. Otherwise, the software is
|
||||||
* provided under the following open source license terms:
|
* provided under the following open source license terms:
|
||||||
*
|
*
|
||||||
* Alfresco is free software: you can redistribute it and/or modify
|
* 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
|
* 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
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
* (at your option) any later version.
|
* (at your option) any later version.
|
||||||
*
|
*
|
||||||
* Alfresco is distributed in the hope that it will be useful,
|
* Alfresco is distributed in the hope that it will be useful,
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
* GNU Lesser General Public License for more details.
|
* GNU Lesser General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU Lesser General Public License
|
* You should have received a copy of the GNU Lesser General Public License
|
||||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||||
* #L%
|
* #L%
|
||||||
@@ -47,7 +47,10 @@ import org.alfresco.service.namespace.QName;
|
|||||||
import org.alfresco.service.transaction.ReadOnlyServerException;
|
import org.alfresco.service.transaction.ReadOnlyServerException;
|
||||||
import org.alfresco.test_category.OwnJVMTestsCategory;
|
import org.alfresco.test_category.OwnJVMTestsCategory;
|
||||||
import org.alfresco.util.ApplicationContextHelper;
|
import org.alfresco.util.ApplicationContextHelper;
|
||||||
|
import org.alfresco.util.BaseSpringTest;
|
||||||
import org.alfresco.util.PropertyMap;
|
import org.alfresco.util.PropertyMap;
|
||||||
|
import org.junit.Before;
|
||||||
|
import org.junit.Test;
|
||||||
import org.junit.experimental.categories.Category;
|
import org.junit.experimental.categories.Category;
|
||||||
import org.springframework.context.ApplicationContext;
|
import org.springframework.context.ApplicationContext;
|
||||||
import org.springframework.dao.InvalidDataAccessApiUsageException;
|
import org.springframework.dao.InvalidDataAccessApiUsageException;
|
||||||
@@ -57,61 +60,60 @@ import org.springframework.transaction.PlatformTransactionManager;
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @see org.alfresco.repo.transaction.TransactionServiceImpl
|
* @see org.alfresco.repo.transaction.TransactionServiceImpl
|
||||||
*
|
*
|
||||||
* @author Derek Hulley
|
* @author Derek Hulley
|
||||||
*/
|
*/
|
||||||
@Category(OwnJVMTestsCategory.class)
|
public class TransactionServiceImplTest extends BaseSpringTest
|
||||||
public class TransactionServiceImplTest extends TestCase
|
|
||||||
{
|
{
|
||||||
private static ApplicationContext ctx = ApplicationContextHelper.getApplicationContext();
|
|
||||||
|
|
||||||
private PlatformTransactionManager transactionManager;
|
private PlatformTransactionManager transactionManager;
|
||||||
private TransactionServiceImpl transactionService;
|
private TransactionServiceImpl transactionService;
|
||||||
private NodeService nodeService;
|
private NodeService nodeService;
|
||||||
private MutableAuthenticationService authenticationService;
|
private MutableAuthenticationService authenticationService;
|
||||||
private PersonService personService;
|
private PersonService personService;
|
||||||
|
|
||||||
private final QName vetoName = QName.createQName(NamespaceService.APP_MODEL_1_0_URI, "TransactionServiceImplTest");
|
private final QName vetoName = QName.createQName(NamespaceService.APP_MODEL_1_0_URI, "TransactionServiceImplTest");
|
||||||
private static final String USER_ALFRESCO = "AlfrescoUser";
|
private static final String USER_ALFRESCO = "AlfrescoUser";
|
||||||
|
|
||||||
private Dialect dialect;
|
private Dialect dialect;
|
||||||
|
|
||||||
|
@Before
|
||||||
public void setUp() throws Exception
|
public void setUp() throws Exception
|
||||||
{
|
{
|
||||||
transactionManager = (PlatformTransactionManager) ctx.getBean("transactionManager");
|
transactionManager = (PlatformTransactionManager) applicationContext.getBean("transactionManager");
|
||||||
transactionService = new TransactionServiceImpl();
|
transactionService = new TransactionServiceImpl();
|
||||||
transactionService.setTransactionManager(transactionManager);
|
transactionService.setTransactionManager(transactionManager);
|
||||||
transactionService.setAllowWrite(true, vetoName);
|
transactionService.setAllowWrite(true, vetoName);
|
||||||
|
|
||||||
nodeService = (NodeService) ctx.getBean("dbNodeService");
|
nodeService = (NodeService) applicationContext.getBean("dbNodeService");
|
||||||
authenticationService = (MutableAuthenticationService) ctx.getBean("AuthenticationService");
|
authenticationService = (MutableAuthenticationService) applicationContext.getBean("AuthenticationService");
|
||||||
personService = (PersonService) ctx.getBean("PersonService");
|
personService = (PersonService) applicationContext.getBean("PersonService");
|
||||||
|
|
||||||
dialect = (Dialect) ctx.getBean("dialect");
|
dialect = (Dialect) applicationContext.getBean("dialect");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
public void testPropagatingTxn() throws Exception
|
public void testPropagatingTxn() throws Exception
|
||||||
{
|
{
|
||||||
// start a transaction
|
// start a transaction
|
||||||
UserTransaction txnOuter = transactionService.getUserTransaction();
|
UserTransaction txnOuter = transactionService.getUserTransaction();
|
||||||
txnOuter.begin();
|
txnOuter.begin();
|
||||||
String txnIdOuter = AlfrescoTransactionSupport.getTransactionId();
|
String txnIdOuter = AlfrescoTransactionSupport.getTransactionId();
|
||||||
|
|
||||||
// start a propagating txn
|
// start a propagating txn
|
||||||
UserTransaction txnInner = transactionService.getUserTransaction();
|
UserTransaction txnInner = transactionService.getUserTransaction();
|
||||||
txnInner.begin();
|
txnInner.begin();
|
||||||
String txnIdInner = AlfrescoTransactionSupport.getTransactionId();
|
String txnIdInner = AlfrescoTransactionSupport.getTransactionId();
|
||||||
|
|
||||||
// the txn IDs should be the same
|
// the txn IDs should be the same
|
||||||
assertEquals("Txn ID not propagated", txnIdOuter, txnIdInner);
|
assertEquals("Txn ID not propagated", txnIdOuter, txnIdInner);
|
||||||
|
|
||||||
// rollback the inner
|
// rollback the inner
|
||||||
txnInner.rollback();
|
txnInner.rollback();
|
||||||
|
|
||||||
// check both transactions' status
|
// check both transactions' status
|
||||||
assertEquals("Inner txn not marked rolled back", Status.STATUS_ROLLEDBACK, txnInner.getStatus());
|
assertEquals("Inner txn not marked rolled back", Status.STATUS_ROLLEDBACK, txnInner.getStatus());
|
||||||
assertEquals("Outer txn not marked for rolled back", Status.STATUS_MARKED_ROLLBACK, txnOuter.getStatus());
|
assertEquals("Outer txn not marked for rolled back", Status.STATUS_MARKED_ROLLBACK, txnOuter.getStatus());
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
txnOuter.commit();
|
txnOuter.commit();
|
||||||
@@ -123,37 +125,39 @@ public class TransactionServiceImplTest extends TestCase
|
|||||||
txnOuter.rollback();
|
txnOuter.rollback();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
public void testNonPropagatingTxn() throws Exception
|
public void testNonPropagatingTxn() throws Exception
|
||||||
{
|
{
|
||||||
// start a transaction
|
// start a transaction
|
||||||
UserTransaction txnOuter = transactionService.getUserTransaction();
|
UserTransaction txnOuter = transactionService.getUserTransaction();
|
||||||
txnOuter.begin();
|
txnOuter.begin();
|
||||||
String txnIdOuter = AlfrescoTransactionSupport.getTransactionId();
|
String txnIdOuter = AlfrescoTransactionSupport.getTransactionId();
|
||||||
|
|
||||||
// start a propagating txn
|
// start a propagating txn
|
||||||
UserTransaction txnInner = transactionService.getNonPropagatingUserTransaction();
|
UserTransaction txnInner = transactionService.getNonPropagatingUserTransaction();
|
||||||
txnInner.begin();
|
txnInner.begin();
|
||||||
String txnIdInner = AlfrescoTransactionSupport.getTransactionId();
|
String txnIdInner = AlfrescoTransactionSupport.getTransactionId();
|
||||||
|
|
||||||
// the txn IDs should be different
|
// the txn IDs should be different
|
||||||
assertNotSame("Txn ID not propagated", txnIdOuter, txnIdInner);
|
assertNotSame("Txn ID not propagated", txnIdOuter, txnIdInner);
|
||||||
|
|
||||||
// rollback the inner
|
// rollback the inner
|
||||||
txnInner.rollback();
|
txnInner.rollback();
|
||||||
|
|
||||||
// outer should commit without problems
|
// outer should commit without problems
|
||||||
txnOuter.commit();
|
txnOuter.commit();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
public void testReadOnlyTxn() throws Exception
|
public void testReadOnlyTxn() throws Exception
|
||||||
{
|
{
|
||||||
// start a read-only transaction
|
// start a read-only transaction
|
||||||
transactionService.setAllowWrite(false, vetoName);
|
transactionService.setAllowWrite(false, vetoName);
|
||||||
|
|
||||||
UserTransaction txn = transactionService.getUserTransaction();
|
UserTransaction txn = transactionService.getUserTransaction();
|
||||||
txn.begin();
|
txn.begin();
|
||||||
|
|
||||||
// do some writing
|
// do some writing
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@@ -196,7 +200,7 @@ public class TransactionServiceImplTest extends TestCase
|
|||||||
// ALF-4226
|
// ALF-4226
|
||||||
@SuppressWarnings("unused")
|
@SuppressWarnings("unused")
|
||||||
int i = 0;
|
int i = 0;
|
||||||
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -213,14 +217,15 @@ public class TransactionServiceImplTest extends TestCase
|
|||||||
catch (Throwable e) {}
|
catch (Throwable e) {}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Test the write veto
|
* Test the write veto
|
||||||
* @throws Exception
|
* @throws Exception
|
||||||
*/
|
*/
|
||||||
|
@Test
|
||||||
public void testReadOnlyVetoTxn() throws Exception
|
public void testReadOnlyVetoTxn() throws Exception
|
||||||
{
|
{
|
||||||
|
|
||||||
QName v1 = QName.createQName(NamespaceService.APP_MODEL_1_0_URI, "V1");
|
QName v1 = QName.createQName(NamespaceService.APP_MODEL_1_0_URI, "V1");
|
||||||
QName v2 = QName.createQName(NamespaceService.APP_MODEL_1_0_URI, "V2");
|
QName v2 = QName.createQName(NamespaceService.APP_MODEL_1_0_URI, "V2");
|
||||||
QName v3 = QName.createQName(NamespaceService.APP_MODEL_1_0_URI, "V2");
|
QName v3 = QName.createQName(NamespaceService.APP_MODEL_1_0_URI, "V2");
|
||||||
@@ -229,22 +234,22 @@ public class TransactionServiceImplTest extends TestCase
|
|||||||
// start a read-only transaction
|
// start a read-only transaction
|
||||||
transactionService.setAllowWrite(false, v1);
|
transactionService.setAllowWrite(false, v1);
|
||||||
transactionService.setAllowWrite(false, v2);
|
transactionService.setAllowWrite(false, v2);
|
||||||
|
|
||||||
assertFalse("v1 AND v2 veto not read only", transactionService.getAllowWrite());
|
assertFalse("v1 AND v2 veto not read only", transactionService.getAllowWrite());
|
||||||
|
|
||||||
transactionService.setAllowWrite(true, v2);
|
transactionService.setAllowWrite(true, v2);
|
||||||
assertFalse("v1 not read only", transactionService.getAllowWrite());
|
assertFalse("v1 not read only", transactionService.getAllowWrite());
|
||||||
|
|
||||||
transactionService.setAllowWrite(true, v1);
|
transactionService.setAllowWrite(true, v1);
|
||||||
assertTrue("v1 still read only", transactionService.getAllowWrite());
|
assertTrue("v1 still read only", transactionService.getAllowWrite());
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Remove non existent veto
|
* Remove non existent veto
|
||||||
*/
|
*/
|
||||||
transactionService.setAllowWrite(true, v3);
|
transactionService.setAllowWrite(true, v3);
|
||||||
assertTrue("v3 veto", transactionService.getAllowWrite());
|
assertTrue("v3 veto", transactionService.getAllowWrite());
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
{
|
{
|
||||||
@@ -253,7 +258,8 @@ public class TransactionServiceImplTest extends TestCase
|
|||||||
transactionService.setAllowWrite(true, v3);
|
transactionService.setAllowWrite(true, v3);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
public void testGetRetryingTransactionHelper()
|
public void testGetRetryingTransactionHelper()
|
||||||
{
|
{
|
||||||
RetryingTransactionCallback<Object> callback = new RetryingTransactionCallback<Object>()
|
RetryingTransactionCallback<Object> callback = new RetryingTransactionCallback<Object>()
|
||||||
@@ -263,15 +269,15 @@ public class TransactionServiceImplTest extends TestCase
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
// Ensure that we always get a new instance of the RetryingTransactionHelper
|
// Ensure that we always get a new instance of the RetryingTransactionHelper
|
||||||
assertFalse("Retriers must be new instances",
|
assertFalse("Retriers must be new instances",
|
||||||
transactionService.getRetryingTransactionHelper() == transactionService.getRetryingTransactionHelper());
|
transactionService.getRetryingTransactionHelper() == transactionService.getRetryingTransactionHelper());
|
||||||
// The same must apply when using the ServiceRegistry (ALF-18718)
|
// The same must apply when using the ServiceRegistry (ALF-18718)
|
||||||
ServiceRegistry serviceRegistry = (ServiceRegistry) ctx.getBean(ServiceRegistry.SERVICE_REGISTRY);
|
ServiceRegistry serviceRegistry = (ServiceRegistry) applicationContext.getBean(ServiceRegistry.SERVICE_REGISTRY);
|
||||||
assertFalse("Retriers must be new instance when retrieved from ServiceRegistry",
|
assertFalse("Retriers must be new instance when retrieved from ServiceRegistry",
|
||||||
serviceRegistry.getRetryingTransactionHelper() == serviceRegistry.getRetryingTransactionHelper());
|
serviceRegistry.getRetryingTransactionHelper() == serviceRegistry.getRetryingTransactionHelper());
|
||||||
|
|
||||||
transactionService.setAllowWrite(true, vetoName);
|
transactionService.setAllowWrite(true, vetoName);
|
||||||
transactionService.getRetryingTransactionHelper().doInTransaction(callback, true);
|
transactionService.getRetryingTransactionHelper().doInTransaction(callback, true);
|
||||||
transactionService.getRetryingTransactionHelper().doInTransaction(callback, false);
|
transactionService.getRetryingTransactionHelper().doInTransaction(callback, false);
|
||||||
@@ -287,20 +293,20 @@ public class TransactionServiceImplTest extends TestCase
|
|||||||
{
|
{
|
||||||
// Expected
|
// Expected
|
||||||
}
|
}
|
||||||
|
|
||||||
// Now check that we can force writable transactions
|
// Now check that we can force writable transactions
|
||||||
RetryingTransactionHelper helper = transactionService.getRetryingTransactionHelper();
|
RetryingTransactionHelper helper = transactionService.getRetryingTransactionHelper();
|
||||||
helper.setForceWritable(true);
|
helper.setForceWritable(true);
|
||||||
helper.doInTransaction(callback, true);
|
helper.doInTransaction(callback, true);
|
||||||
helper.doInTransaction(callback, false);
|
helper.doInTransaction(callback, false);
|
||||||
|
|
||||||
transactionService.setAllowWrite(true, vetoName);
|
transactionService.setAllowWrite(true, vetoName);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void createUser(String userName)
|
private void createUser(String userName)
|
||||||
{
|
{
|
||||||
// login as system user to create test user
|
// login as system user to create test user
|
||||||
AuthenticationUtil.setFullyAuthenticatedUser(AuthenticationUtil.getAdminUserName());
|
AuthenticationUtil.setFullyAuthenticatedUser(AuthenticationUtil.getSystemUserName());
|
||||||
// if user with given user name doesn't already exist then create user
|
// if user with given user name doesn't already exist then create user
|
||||||
if (!this.authenticationService.authenticationExists(userName))
|
if (!this.authenticationService.authenticationExists(userName))
|
||||||
{
|
{
|
||||||
@@ -322,12 +328,13 @@ public class TransactionServiceImplTest extends TestCase
|
|||||||
AuthenticationUtil.clearCurrentSecurityContext();
|
AuthenticationUtil.clearCurrentSecurityContext();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
public void testSystemUserHasWritePermissionsInReadOnlyMode()
|
public void testSystemUserHasWritePermissionsInReadOnlyMode()
|
||||||
{
|
{
|
||||||
createUser(USER_ALFRESCO);
|
createUser(USER_ALFRESCO);
|
||||||
// login as user
|
// login as user
|
||||||
AuthenticationUtil.setFullyAuthenticatedUser(USER_ALFRESCO);
|
AuthenticationUtil.setFullyAuthenticatedUser(USER_ALFRESCO);
|
||||||
|
|
||||||
// start a read-only transaction
|
// start a read-only transaction
|
||||||
transactionService.setAllowWrite(false, vetoName);
|
transactionService.setAllowWrite(false, vetoName);
|
||||||
try
|
try
|
||||||
@@ -348,4 +355,4 @@ public class TransactionServiceImplTest extends TestCase
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
Reference in New Issue
Block a user