mirror of
				https://github.com/Alfresco/alfresco-community-repo.git
				synced 2025-10-29 15:21:53 +00:00 
			
		
		
		
	Compare commits
	
		
			75 Commits
		
	
	
		
			16.21
			...
			fix/REPO-5
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					02decc91d4 | ||
| 
						 | 
					c9d27e55d6 | ||
| 
						 | 
					d647c96ae4 | ||
| 
						 | 
					5a6f9a60f3 | ||
| 
						 | 
					ce2c0e2ac2 | ||
| 
						 | 
					dfa9e754d5 | ||
| 
						 | 
					860065cf6c | ||
| 
						 | 
					2d7f8fba87 | ||
| 
						 | 
					c2c4171756 | ||
| 
						 | 
					af884cbb0e | ||
| 
						 | 
					fb0be16155 | ||
| 
						 | 
					f9d95136b2 | ||
| 
						 | 
					26453c4112 | ||
| 
						 | 
					cb26098e8b | ||
| 
						 | 
					6766bfcfdf | ||
| 
						 | 
					48df1e25ed | ||
| 
						 | 
					52918e4ff5 | ||
| 
						 | 
					40d70e797c | ||
| 
						 | 
					6011868759 | ||
| 
						 | 
					79ad480ddb | ||
| 
						 | 
					c12d8f98be | ||
| 
						 | 
					d2faadac57 | ||
| 
						 | 
					7f1d28a417 | ||
| 
						 | 
					fab02e5484 | ||
| 
						 | 
					5274687ec1 | ||
| 
						 | 
					b52e67b7df | ||
| 
						 | 
					77f414dbf1 | ||
| 
						 | 
					c45ce63bd2 | ||
| 
						 | 
					0a784a0674 | ||
| 
						 | 
					1da1506160 | ||
| 
						 | 
					79dd212428 | ||
| 
						 | 
					fd859a4191 | ||
| 
						 | 
					e61f6df323 | ||
| 
						 | 
					64998b5c53 | ||
| 
						 | 
					784c9d47b3 | ||
| 
						 | 
					b5617c3bd9 | ||
| 
						 | 
					53777cd5b9 | ||
| 
						 | 
					ddb8ad16ac | ||
| 
						 | 
					a3ed766957 | ||
| 
						 | 
					22a0343c41 | ||
| 
						 | 
					43fb3cfdc5 | ||
| 
						 | 
					8accceb08e | ||
| 
						 | 
					71eab3e347 | ||
| 
						 | 
					8d378fc340 | ||
| 
						 | 
					73a8ac61ed | ||
| 
						 | 
					67d3159650 | ||
| 
						 | 
					ec8a760122 | ||
| 
						 | 
					3d0ceca6da | ||
| 
						 | 
					8c25d1f7e6 | ||
| 
						 | 
					1e0972eaa1 | ||
| 
						 | 
					616c666114 | ||
| 
						 | 
					8520548e72 | ||
| 
						 | 
					63f7f07465 | ||
| 
						 | 
					35a3ff8032 | ||
| 
						 | 
					695bf90891 | ||
| 
						 | 
					d4dcc4fe2c | ||
| 
						 | 
					ee44b6afa2 | ||
| 
						 | 
					28b580b9fc | ||
| 
						 | 
					7dc7a743f5 | ||
| 
						 | 
					4bc92df38e | ||
| 
						 | 
					048df99d91 | ||
| 
						 | 
					b477d122f3 | ||
| 
						 | 
					0cc2fe46cf | ||
| 
						 | 
					671e1934bd | ||
| 
						 | 
					d0452aaddb | ||
| 
						 | 
					464db778fa | ||
| 
						 | 
					905e813aa4 | ||
| 
						 | 
					b55ba47c5e | ||
| 
						 | 
					0607bb1485 | ||
| 
						 | 
					f7c8298308 | ||
| 
						 | 
					86de88ebaa | ||
| 
						 | 
					76ba0a38e5 | ||
| 
						 | 
					3ad642f388 | ||
| 
						 | 
					e113eb3561 | ||
| 
						 | 
					1dc1852a69 | 
							
								
								
									
										160
									
								
								.travis.yml
									
									
									
									
									
								
							
							
						
						
									
										160
									
								
								.travis.yml
									
									
									
									
									
								
							@@ -26,13 +26,16 @@ branches:
 | 
			
		||||
 | 
			
		||||
env:
 | 
			
		||||
  global:
 | 
			
		||||
    - TRANSFORMERS_TAG=$(mvn help:evaluate -Dexpression=dependency.alfresco-transform-core.version -q -DforceStdout)
 | 
			
		||||
    - TAS_SCRIPTS=../alfresco-community-repo/packaging/tests/scripts
 | 
			
		||||
    - TAS_ENVIRONMENT=./packaging/tests/environment
 | 
			
		||||
    - LOG_WARN="-Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn"
 | 
			
		||||
 | 
			
		||||
stages:
 | 
			
		||||
  - name: prepare
 | 
			
		||||
    if: commit_message !~ /\[skip tests\]/ AND commit_message !~ /\[force[^\]]*\]/
 | 
			
		||||
  - name: test
 | 
			
		||||
    if: commit_message !~ /\[skip tests\]/
 | 
			
		||||
    if: commit_message !~ /\[skip tests\]/ AND commit_message !~ /\[force[^\]]*\]/
 | 
			
		||||
  - name: release
 | 
			
		||||
    if: commit_message !~ /\[no release\]/ AND (branch = master OR branch =~ /release\/.*/) AND type != pull_request AND fork = false
 | 
			
		||||
  - name: update_downstream
 | 
			
		||||
@@ -43,7 +46,13 @@ install: travis_retry travis_wait 40 bash scripts/travis/build.sh
 | 
			
		||||
 | 
			
		||||
jobs:
 | 
			
		||||
  include:
 | 
			
		||||
    - name: "Prepare"
 | 
			
		||||
      stage: prepare
 | 
			
		||||
      install: skip
 | 
			
		||||
      script: travis_retry travis_wait 80 bash scripts/travis/prepare.sh
 | 
			
		||||
 | 
			
		||||
    - name: "Source Clear Scan (SCA)"
 | 
			
		||||
      stage: test
 | 
			
		||||
      if: branch = master OR branch =~ /release\/.*/
 | 
			
		||||
      # Run Veracode
 | 
			
		||||
      install: skip
 | 
			
		||||
@@ -51,43 +60,49 @@ jobs:
 | 
			
		||||
 | 
			
		||||
    - name: "Core, Data-Model, Repository - AllUnitTestsSuite - Build and test"
 | 
			
		||||
      if: commit_message !~ /\[skip repo\]/
 | 
			
		||||
      install: skip
 | 
			
		||||
      script:
 | 
			
		||||
        - travis_retry mvn -B test -pl core,data-model
 | 
			
		||||
        - travis_retry mvn -B test -pl "repository,mmt" "-Dtest=AllUnitTestsSuite,AllMmtUnitTestSuite"
 | 
			
		||||
        - travis_retry mvn -B test -pl core,data-model -am -DfailIfNoTests=false
 | 
			
		||||
        - travis_retry mvn -B test -pl "repository,mmt" -am "-Dtest=AllUnitTestsSuite,AllMmtUnitTestSuite" -DfailIfNoTests=false
 | 
			
		||||
 | 
			
		||||
    - name: "Repository - AppContext01TestSuite"
 | 
			
		||||
      if: commit_message !~ /\[skip repo\]/
 | 
			
		||||
      install: skip
 | 
			
		||||
      before_script:
 | 
			
		||||
        - docker run -d -p 5433:5432 -e POSTGRES_PASSWORD=alfresco -e POSTGRES_USER=alfresco -e POSTGRES_DB=alfresco postgres:13.3 postgres -c 'max_connections=300'
 | 
			
		||||
        - docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.16.1
 | 
			
		||||
        - docker run -d -p 8090:8090 -e JAVA_OPTS=" -Xms256m -Xmx256m" alfresco/alfresco-transform-core-aio:2.5.7
 | 
			
		||||
      script: travis_wait 20 mvn -B test -pl repository -Dtest=AppContext01TestSuite -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
 | 
			
		||||
        - docker run -d -p 8090:8090 -e JAVA_OPTS=" -Xms256m -Xmx256m" alfresco/alfresco-transform-core-aio:${TRANSFORMERS_TAG}
 | 
			
		||||
      script: travis_wait 20 mvn -B test -pl repository -am -Dtest=AppContext01TestSuite -DfailIfNoTests=false -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
 | 
			
		||||
 | 
			
		||||
    - name: "Repository - AppContext02TestSuite"
 | 
			
		||||
      if: commit_message !~ /\[skip repo\]/
 | 
			
		||||
      install: skip
 | 
			
		||||
      before_script:
 | 
			
		||||
        - docker run -d -p 5433:5432 -e POSTGRES_PASSWORD=alfresco -e POSTGRES_USER=alfresco -e POSTGRES_DB=alfresco postgres:13.3 postgres -c 'max_connections=300'
 | 
			
		||||
        - docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.16.1
 | 
			
		||||
      script: travis_wait 20 mvn -B test -pl repository -Dtest=AppContext02TestSuite -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
 | 
			
		||||
      script: travis_wait 20 mvn -B test -pl repository -am -Dtest=AppContext02TestSuite -DfailIfNoTests=false -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
 | 
			
		||||
 | 
			
		||||
    - name: "Repository - AppContext03TestSuite"
 | 
			
		||||
      if: commit_message !~ /\[skip repo\]/
 | 
			
		||||
      install: skip
 | 
			
		||||
      before_script:
 | 
			
		||||
        - docker run -d -p 5433:5432 -e POSTGRES_PASSWORD=alfresco -e POSTGRES_USER=alfresco -e POSTGRES_DB=alfresco postgres:13.3 postgres -c 'max_connections=300'
 | 
			
		||||
        - docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.16.1
 | 
			
		||||
        - docker run -d -p 8090:8090 -e JAVA_OPTS=" -Xms256m -Xmx256m" alfresco/alfresco-transform-core-aio:2.5.7
 | 
			
		||||
      script: travis_wait 20 mvn -B test -pl repository -Dtest=AppContext03TestSuite -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
 | 
			
		||||
        - docker run -d -p 8090:8090 -e JAVA_OPTS=" -Xms256m -Xmx256m" alfresco/alfresco-transform-core-aio:${TRANSFORMERS_TAG}
 | 
			
		||||
      script: travis_wait 20 mvn -B test -pl repository -am -Dtest=AppContext03TestSuite -DfailIfNoTests=false -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
 | 
			
		||||
 | 
			
		||||
    - name: "Repository - AppContext04TestSuite"
 | 
			
		||||
      if: commit_message !~ /\[skip repo\]/
 | 
			
		||||
      install: skip
 | 
			
		||||
      before_script:
 | 
			
		||||
        - docker run -d -p 5433:5432 -e POSTGRES_PASSWORD=alfresco -e POSTGRES_USER=alfresco -e POSTGRES_DB=alfresco postgres:13.3 postgres -c 'max_connections=300'
 | 
			
		||||
        - docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.16.1
 | 
			
		||||
        - docker run -d -p 8090:8090 -e JAVA_OPTS=" -Xms256m -Xmx256m" alfresco/alfresco-transform-core-aio:2.5.7
 | 
			
		||||
      script: travis_wait 20 mvn -B test -pl repository -Dtest=AppContext04TestSuite -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
 | 
			
		||||
        - docker run -d -p 8090:8090 -e JAVA_OPTS=" -Xms256m -Xmx256m" alfresco/alfresco-transform-core-aio:${TRANSFORMERS_TAG}
 | 
			
		||||
      script: travis_wait 20 mvn -B test -pl repository -am -Dtest=AppContext04TestSuite -DfailIfNoTests=false -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
 | 
			
		||||
 | 
			
		||||
    - name: "Repository - AppContext05TestSuite"
 | 
			
		||||
      if: commit_message !~ /\[skip repo\]/
 | 
			
		||||
      install: skip
 | 
			
		||||
      before_script:
 | 
			
		||||
        - docker run -d -p 5433:5432 -e POSTGRES_PASSWORD=alfresco -e POSTGRES_USER=alfresco -e POSTGRES_DB=alfresco postgres:13.3 postgres -c 'max_connections=300'
 | 
			
		||||
        - docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.16.1
 | 
			
		||||
@@ -95,142 +110,161 @@ jobs:
 | 
			
		||||
        - cp repository/src/test/resources/realms/alfresco-realm.json "${HOME}/tmp"
 | 
			
		||||
        - export HOST_IP=$(hostname  -I | cut -f1 -d' ')
 | 
			
		||||
        - docker run -d -e KEYCLOAK_USER=admin -e KEYCLOAK_PASSWORD=admin -e DB_VENDOR=h2 -p 8999:8080 -e KEYCLOAK_IMPORT=/tmp/alfresco-realm.json -v $HOME/tmp/alfresco-realm.json:/tmp/alfresco-realm.json alfresco/alfresco-identity-service:1.2
 | 
			
		||||
      script: travis_wait 20 mvn -B test -pl repository -Dtest=AppContext05TestSuite -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco "-Didentity-service.auth-server-url=http://${HOST_IP}:8999/auth"
 | 
			
		||||
      script: travis_wait 20 mvn -B test -pl repository -am -Dtest=AppContext05TestSuite -DfailIfNoTests=false -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco "-Didentity-service.auth-server-url=http://${HOST_IP}:8999/auth"
 | 
			
		||||
 | 
			
		||||
    - name: "Repository - AppContext06TestSuite"
 | 
			
		||||
      if: commit_message !~ /\[skip repo\]/
 | 
			
		||||
      install: skip
 | 
			
		||||
      before_script:
 | 
			
		||||
        - docker run -d -p 5433:5432 -e POSTGRES_PASSWORD=alfresco -e POSTGRES_USER=alfresco -e POSTGRES_DB=alfresco postgres:13.3 postgres -c 'max_connections=300'
 | 
			
		||||
        - docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.16.1
 | 
			
		||||
        - docker run -d -p 8090:8090 -e JAVA_OPTS=" -Xms256m -Xmx256m" alfresco/alfresco-transform-core-aio:2.5.7
 | 
			
		||||
      script: travis_wait 20 mvn -B test -pl repository -Dtest=AppContext06TestSuite -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
 | 
			
		||||
        - docker run -d -p 8090:8090 -e JAVA_OPTS=" -Xms256m -Xmx256m" alfresco/alfresco-transform-core-aio:${TRANSFORMERS_TAG}
 | 
			
		||||
      script: travis_wait 20 mvn -B test -pl repository -am -Dtest=AppContext06TestSuite -DfailIfNoTests=false -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
 | 
			
		||||
 | 
			
		||||
    - name: "Repository - AppContextExtraTestSuite"
 | 
			
		||||
      if: commit_message !~ /\[skip repo\]/
 | 
			
		||||
      install: skip
 | 
			
		||||
      before_script:
 | 
			
		||||
        - docker run -d -p 5433:5432 -e POSTGRES_PASSWORD=alfresco -e POSTGRES_USER=alfresco -e POSTGRES_DB=alfresco postgres:13.3 postgres -c 'max_connections=300'
 | 
			
		||||
        - docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.16.1
 | 
			
		||||
        - docker run -d -p 8090:8090 -e JAVA_OPTS=" -Xms256m -Xmx256m" alfresco/alfresco-transform-core-aio:2.5.7
 | 
			
		||||
      script: travis_wait 20 mvn -B test -pl repository -Dtest=AppContextExtraTestSuite -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
 | 
			
		||||
        - docker run -d -p 8090:8090 -e JAVA_OPTS=" -Xms256m -Xmx256m" alfresco/alfresco-transform-core-aio:${TRANSFORMERS_TAG}
 | 
			
		||||
      script: travis_wait 20 mvn -B test -pl repository -am -Dtest=AppContextExtraTestSuite -DfailIfNoTests=false -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
 | 
			
		||||
 | 
			
		||||
    - name: "Repository - MiscContextTestSuite"
 | 
			
		||||
      if: commit_message !~ /\[skip repo\]/
 | 
			
		||||
      install: skip
 | 
			
		||||
      before_script:
 | 
			
		||||
        - docker run -d -p 5433:5432 -e POSTGRES_PASSWORD=alfresco -e POSTGRES_USER=alfresco -e POSTGRES_DB=alfresco postgres:13.3 postgres -c 'max_connections=300'
 | 
			
		||||
        - docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.16.1
 | 
			
		||||
        - docker run -d -p 8090:8090 -e JAVA_OPTS=" -Xms256m -Xmx256m" alfresco/alfresco-transform-core-aio:2.5.7
 | 
			
		||||
      script: travis_wait 20 mvn -B test -pl repository -Dtest=MiscContextTestSuite -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
 | 
			
		||||
        - docker run -d -p 8090:8090 -e JAVA_OPTS=" -Xms256m -Xmx256m" alfresco/alfresco-transform-core-aio:${TRANSFORMERS_TAG}
 | 
			
		||||
      script: travis_wait 20 mvn -B test -pl repository -am -Dtest=MiscContextTestSuite -DfailIfNoTests=false -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
 | 
			
		||||
 | 
			
		||||
    - name: "Repository - SearchTestSuite"
 | 
			
		||||
      if: commit_message !~ /\[skip repo\]/
 | 
			
		||||
      install: skip
 | 
			
		||||
      before_script:
 | 
			
		||||
        - docker run -d -p 5433:5432 -e POSTGRES_PASSWORD=alfresco -e POSTGRES_USER=alfresco -e POSTGRES_DB=alfresco postgres:13.3 postgres -c 'max_connections=300'
 | 
			
		||||
        - docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.16.1
 | 
			
		||||
      script: travis_wait 20 mvn -B test -pl repository -Dtest=SearchTestSuite -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco -Dindex.subsystem.name=solr6
 | 
			
		||||
      script: travis_wait 20 mvn -B test -pl repository -am -Dtest=SearchTestSuite -DfailIfNoTests=false -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco -Dindex.subsystem.name=solr6
 | 
			
		||||
 | 
			
		||||
    - name: "Repository - MariaDB 10.2.18 tests"
 | 
			
		||||
      if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip db\]/ AND type != pull_request) OR commit_message =~ /\[db\]/
 | 
			
		||||
      install: skip
 | 
			
		||||
      before_script:
 | 
			
		||||
        - 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.16.1
 | 
			
		||||
      script: travis_wait 20 mvn -B test -pl repository -Dtest=AllDBTestsTestSuite -Ddb.name=alfresco -Ddb.url=jdbc:mariadb://localhost:3307/alfresco?useUnicode=yes\&characterEncoding=UTF-8 -Ddb.username=alfresco -Ddb.password=alfresco -Ddb.driver=org.mariadb.jdbc.Driver
 | 
			
		||||
      script: travis_wait 20 mvn -B test -pl repository -am -Dtest=AllDBTestsTestSuite -DfailIfNoTests=false -Ddb.name=alfresco -Ddb.url=jdbc:mariadb://localhost:3307/alfresco?useUnicode=yes\&characterEncoding=UTF-8 -Ddb.username=alfresco -Ddb.password=alfresco -Ddb.driver=org.mariadb.jdbc.Driver
 | 
			
		||||
 | 
			
		||||
    - name: "Repository - MariaDB 10.4 tests"
 | 
			
		||||
      if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip db\]/ AND type != pull_request) OR commit_message =~ /\[db\]/
 | 
			
		||||
      install: skip
 | 
			
		||||
      before_script:
 | 
			
		||||
        - 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.4 --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.16.1
 | 
			
		||||
      script: travis_wait 20 mvn -B test -pl repository -Dtest=AllDBTestsTestSuite -Ddb.name=alfresco -Ddb.url=jdbc:mariadb://localhost:3307/alfresco?useUnicode=yes\&characterEncoding=UTF-8 -Ddb.username=alfresco -Ddb.password=alfresco -Ddb.driver=org.mariadb.jdbc.Driver
 | 
			
		||||
      script: travis_wait 20 mvn -B test -pl repository -am -Dtest=AllDBTestsTestSuite -DfailIfNoTests=false -Ddb.name=alfresco -Ddb.url=jdbc:mariadb://localhost:3307/alfresco?useUnicode=yes\&characterEncoding=UTF-8 -Ddb.username=alfresco -Ddb.password=alfresco -Ddb.driver=org.mariadb.jdbc.Driver
 | 
			
		||||
 | 
			
		||||
    - name: "Repository - MariaDB 10.5 tests"
 | 
			
		||||
      if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip db\]/ AND type != pull_request) OR commit_message =~ /\[db\]/
 | 
			
		||||
      install: skip
 | 
			
		||||
      before_script:
 | 
			
		||||
        - 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.5 --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.16.1
 | 
			
		||||
      script: travis_wait 20 mvn -B test -pl repository -Dtest=AllDBTestsTestSuite -Ddb.name=alfresco -Ddb.url=jdbc:mariadb://localhost:3307/alfresco?useUnicode=yes\&characterEncoding=UTF-8 -Ddb.username=alfresco -Ddb.password=alfresco -Ddb.driver=org.mariadb.jdbc.Driver
 | 
			
		||||
      script: travis_wait 20 mvn -B test -pl repository -am -Dtest=AllDBTestsTestSuite -DfailIfNoTests=false -Ddb.name=alfresco -Ddb.url=jdbc:mariadb://localhost:3307/alfresco?useUnicode=yes\&characterEncoding=UTF-8 -Ddb.username=alfresco -Ddb.password=alfresco -Ddb.driver=org.mariadb.jdbc.Driver
 | 
			
		||||
 | 
			
		||||
    - name: "Repository - MariaDB 10.6 tests"
 | 
			
		||||
      # We run tests on the latest version of MariaDB on pull requests plus the normal master and release branches - ignored on feature branches
 | 
			
		||||
      if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip db\]/                         ) OR commit_message =~ /\[db\]/ OR commit_message =~ /\[latest db\]/
 | 
			
		||||
      install: skip
 | 
			
		||||
      before_script:
 | 
			
		||||
        - 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.6 --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.16.1
 | 
			
		||||
      script: travis_wait 20 mvn -B test -pl repository -Dtest=AllDBTestsTestSuite -Ddb.name=alfresco -Ddb.url=jdbc:mariadb://localhost:3307/alfresco?useUnicode=yes\&characterEncoding=UTF-8 -Ddb.username=alfresco -Ddb.password=alfresco -Ddb.driver=org.mariadb.jdbc.Driver
 | 
			
		||||
      script: travis_wait 20 mvn -B test -pl repository -am -Dtest=AllDBTestsTestSuite -DfailIfNoTests=false -Ddb.name=alfresco -Ddb.url=jdbc:mariadb://localhost:3307/alfresco?useUnicode=yes\&characterEncoding=UTF-8 -Ddb.username=alfresco -Ddb.password=alfresco -Ddb.driver=org.mariadb.jdbc.Driver
 | 
			
		||||
 | 
			
		||||
    - name: "Repository - MySQL 5.7.23 tests"
 | 
			
		||||
      if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip db\]/ AND type != pull_request) OR commit_message =~ /\[db\]/
 | 
			
		||||
      install: skip
 | 
			
		||||
      before_script:
 | 
			
		||||
        - 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' --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
 | 
			
		||||
        - docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.16.1
 | 
			
		||||
      script: travis_wait 20 mvn -B test -pl repository -Dtest=AllDBTestsTestSuite -Ddb.driver=com.mysql.jdbc.Driver -Ddb.name=alfresco -Ddb.url=jdbc:mysql://localhost:3307/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
 | 
			
		||||
      script: travis_wait 20 mvn -B test -pl repository -am -Dtest=AllDBTestsTestSuite -DfailIfNoTests=false -Ddb.driver=com.mysql.jdbc.Driver -Ddb.name=alfresco -Ddb.url=jdbc:mysql://localhost:3307/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
 | 
			
		||||
 | 
			
		||||
    - name: "Repository - MySQL 8 tests"
 | 
			
		||||
      # We run tests on the latest version of MySQL on pull requests plus the normal master and release branches - ignored on feature branches
 | 
			
		||||
      if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip db\]/                         ) OR commit_message =~ /\[db\]/ OR commit_message =~ /\[latest db\]/
 | 
			
		||||
      install: skip
 | 
			
		||||
      before_script:
 | 
			
		||||
        - docker run -d -p 3307:3306 -e MYSQL_ROOT_PASSWORD=alfresco -e MYSQL_USER=alfresco -e MYSQL_DATABASE=alfresco -e MYSQL_PASSWORD=alfresco  mysql:8 --transaction-isolation='READ-COMMITTED'
 | 
			
		||||
        - docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.16.1
 | 
			
		||||
      script: travis_wait 20 mvn -B test -pl repository -Dtest=AllDBTestsTestSuite -Ddb.driver=com.mysql.jdbc.Driver -Ddb.name=alfresco -Ddb.url=jdbc:mysql://localhost:3307/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
 | 
			
		||||
      script: travis_wait 20 mvn -B test -pl repository -am -Dtest=AllDBTestsTestSuite -DfailIfNoTests=false -Ddb.driver=com.mysql.jdbc.Driver -Ddb.name=alfresco -Ddb.url=jdbc:mysql://localhost:3307/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
 | 
			
		||||
 | 
			
		||||
    - name: "Repository - PostgreSQL 10.9 tests"
 | 
			
		||||
      if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip db\]/ AND type != pull_request) OR commit_message =~ /\[db\]/
 | 
			
		||||
      install: skip
 | 
			
		||||
      before_script:
 | 
			
		||||
        - docker run -d -p 5433:5432 -e POSTGRES_PASSWORD=alfresco -e POSTGRES_USER=alfresco -e POSTGRES_DB=alfresco postgres:10.9 postgres -c 'max_connections=300'
 | 
			
		||||
        - docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.16.1
 | 
			
		||||
      script: travis_wait 20 mvn -B test -pl repository -Dtest=AllDBTestsTestSuite -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
 | 
			
		||||
      script: travis_wait 20 mvn -B test -pl repository -am -Dtest=AllDBTestsTestSuite -DfailIfNoTests=false -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
 | 
			
		||||
 | 
			
		||||
    - name: "Repository - PostgreSQL 11.7 tests"
 | 
			
		||||
      if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip db\]/ AND type != pull_request) OR commit_message =~ /\[db\]/
 | 
			
		||||
      install: skip
 | 
			
		||||
      before_script:
 | 
			
		||||
        - docker run -d -p 5433:5432 -e POSTGRES_PASSWORD=alfresco -e POSTGRES_USER=alfresco -e POSTGRES_DB=alfresco postgres:11.7 postgres -c 'max_connections=300'
 | 
			
		||||
        - docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.16.1
 | 
			
		||||
      script: travis_wait 20 mvn -B test -pl repository -Dtest=AllDBTestsTestSuite -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
 | 
			
		||||
      script: travis_wait 20 mvn -B test -pl repository -am -Dtest=AllDBTestsTestSuite -DfailIfNoTests=false -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
 | 
			
		||||
 | 
			
		||||
    - name: "Repository - PostgreSQL 11.12 tests"
 | 
			
		||||
      if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip db\]/ AND type != pull_request) OR commit_message =~ /\[db\]/
 | 
			
		||||
      install: skip
 | 
			
		||||
      before_script:
 | 
			
		||||
        - docker run -d -p 5433:5432 -e POSTGRES_PASSWORD=alfresco -e POSTGRES_USER=alfresco -e POSTGRES_DB=alfresco postgres:11.12 postgres -c 'max_connections=300'
 | 
			
		||||
        - docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.16.1
 | 
			
		||||
      script: travis_wait 20 mvn -B test -pl repository -Dtest=AllDBTestsTestSuite -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
 | 
			
		||||
      script: travis_wait 20 mvn -B test -pl repository -am -Dtest=AllDBTestsTestSuite -DfailIfNoTests=false -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
 | 
			
		||||
 | 
			
		||||
    - name: "Repository - PostgreSQL 12.4 tests"
 | 
			
		||||
      if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip db\]/ AND type != pull_request) OR commit_message =~ /\[db\]/
 | 
			
		||||
      install: skip
 | 
			
		||||
      before_script:
 | 
			
		||||
        - docker run -d -p 5433:5432 -e POSTGRES_PASSWORD=alfresco -e POSTGRES_USER=alfresco -e POSTGRES_DB=alfresco postgres:12.4 postgres -c 'max_connections=300'
 | 
			
		||||
        - docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.16.1
 | 
			
		||||
      script: travis_wait 20 mvn -B test -pl repository -Dtest=AllDBTestsTestSuite -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
 | 
			
		||||
      script: travis_wait 20 mvn -B test -pl repository -am -Dtest=AllDBTestsTestSuite -DfailIfNoTests=false -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
 | 
			
		||||
 | 
			
		||||
    - name: "Repository - PostgreSQL 12.7 tests"
 | 
			
		||||
      if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip db\]/ AND type != pull_request) OR commit_message =~ /\[db\]/
 | 
			
		||||
      install: skip
 | 
			
		||||
      before_script:
 | 
			
		||||
        - docker run -d -p 5433:5432 -e POSTGRES_PASSWORD=alfresco -e POSTGRES_USER=alfresco -e POSTGRES_DB=alfresco postgres:12.7 postgres -c 'max_connections=300'
 | 
			
		||||
        - docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.16.1
 | 
			
		||||
      script: travis_wait 20 mvn -B test -pl repository -Dtest=AllDBTestsTestSuite -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
 | 
			
		||||
      script: travis_wait 20 mvn -B test -pl repository -am -Dtest=AllDBTestsTestSuite -DfailIfNoTests=false -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
 | 
			
		||||
 | 
			
		||||
    - name: "Repository - PostgreSQL 13.1 tests"
 | 
			
		||||
      # We only run DB tests on the latest version of PostgreSQL on feature branches
 | 
			
		||||
      if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip db\]/ AND type != pull_request) OR commit_message =~ /\[db\]/
 | 
			
		||||
      install: skip
 | 
			
		||||
      before_script:
 | 
			
		||||
        - docker run -d -p 5433:5432 -e POSTGRES_PASSWORD=alfresco -e POSTGRES_USER=alfresco -e POSTGRES_DB=alfresco postgres:13.1 postgres -c 'max_connections=300'
 | 
			
		||||
        - docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.16.1
 | 
			
		||||
      script: travis_wait 20 mvn -B test -pl repository -Dtest=AllDBTestsTestSuite -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
 | 
			
		||||
      script: travis_wait 20 mvn -B test -pl repository -am -Dtest=AllDBTestsTestSuite -DfailIfNoTests=false -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
 | 
			
		||||
 | 
			
		||||
    - name: "Repository - PostgreSQL 13.3 tests"
 | 
			
		||||
      # We only run DB tests on the latest version of PostgreSQL on feature branches
 | 
			
		||||
      if: commit_message !~ /\[skip db\]/ OR commit_message =~ /\[latest db\]/
 | 
			
		||||
      install: skip
 | 
			
		||||
      before_script:
 | 
			
		||||
        - docker run -d -p 5433:5432 -e POSTGRES_PASSWORD=alfresco -e POSTGRES_USER=alfresco -e POSTGRES_DB=alfresco postgres:13.3 postgres -c 'max_connections=300'
 | 
			
		||||
        - docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.16.1
 | 
			
		||||
      script: travis_wait 20 mvn -B test -pl repository -Dtest=AllDBTestsTestSuite -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
 | 
			
		||||
      script: travis_wait 20 mvn -B test -pl repository -am -Dtest=AllDBTestsTestSuite -DfailIfNoTests=false -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
 | 
			
		||||
 | 
			
		||||
    - name: "Repository - Messaging tests"
 | 
			
		||||
      if: commit_message !~ /\[skip repo\]/
 | 
			
		||||
      install: skip
 | 
			
		||||
      before_script:
 | 
			
		||||
        - docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.16.1
 | 
			
		||||
      script: travis_wait 20 mvn -B test -pl repository -Dtest=CamelRoutesTest,CamelComponentsTest
 | 
			
		||||
      script: travis_wait 20 mvn -B test -pl repository -am -Dtest=CamelRoutesTest,CamelComponentsTest -DfailIfNoTests=false
 | 
			
		||||
 | 
			
		||||
    - name: "Remote-api - AppContext01TestSuite"
 | 
			
		||||
      if: commit_message !~ /\[skip repo\]/
 | 
			
		||||
      install: travis_retry travis_wait 40 env REQUIRES_INSTALLED_ARTIFACTS=true bash scripts/travis/build.sh
 | 
			
		||||
      before_script:
 | 
			
		||||
        - docker run -d -p 5433:5432 -e POSTGRES_PASSWORD=alfresco -e POSTGRES_USER=alfresco -e POSTGRES_DB=alfresco postgres:13.3 postgres -c 'max_connections=300'
 | 
			
		||||
        - docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.16.1
 | 
			
		||||
@@ -238,30 +272,34 @@ jobs:
 | 
			
		||||
 | 
			
		||||
    - name: "Remote-api - AppContext02TestSuite"
 | 
			
		||||
      if: commit_message !~ /\[skip repo\]/
 | 
			
		||||
      install: travis_retry travis_wait 40 env REQUIRES_INSTALLED_ARTIFACTS=true bash scripts/travis/build.sh
 | 
			
		||||
      before_script:
 | 
			
		||||
        - docker run -d -p 5433:5432 -e POSTGRES_PASSWORD=alfresco -e POSTGRES_USER=alfresco -e POSTGRES_DB=alfresco postgres:13.3 postgres -c 'max_connections=300'
 | 
			
		||||
        - docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.16.1
 | 
			
		||||
        - docker run -d -p 8090:8090 -e JAVA_OPTS=" -Xms256m -Xmx256m" alfresco/alfresco-transform-core-aio:2.5.7
 | 
			
		||||
        - docker run -d -p 8090:8090 -e JAVA_OPTS=" -Xms256m -Xmx256m" alfresco/alfresco-transform-core-aio:${TRANSFORMERS_TAG}
 | 
			
		||||
      script: travis_wait 20 mvn -B test -pl remote-api -Dtest=AppContext02TestSuite -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
 | 
			
		||||
 | 
			
		||||
    - name: "Remote-api - AppContext03TestSuite"
 | 
			
		||||
      if: commit_message !~ /\[skip repo\]/
 | 
			
		||||
      install: travis_retry travis_wait 40 env REQUIRES_INSTALLED_ARTIFACTS=true bash scripts/travis/build.sh
 | 
			
		||||
      before_script:
 | 
			
		||||
        - docker run -d -p 5433:5432 -e POSTGRES_PASSWORD=alfresco -e POSTGRES_USER=alfresco -e POSTGRES_DB=alfresco postgres:13.3 postgres -c 'max_connections=300'
 | 
			
		||||
        - docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.16.1
 | 
			
		||||
        - docker run -d -p 8090:8090 -e JAVA_OPTS=" -Xms256m -Xmx256m" alfresco/alfresco-transform-core-aio:2.5.7
 | 
			
		||||
        - docker run -d -p 8090:8090 -e JAVA_OPTS=" -Xms256m -Xmx256m" alfresco/alfresco-transform-core-aio:${TRANSFORMERS_TAG}
 | 
			
		||||
      script: travis_wait 20 mvn -B test -pl remote-api -Dtest=AppContext03TestSuite -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
 | 
			
		||||
 | 
			
		||||
    - name: "Remote-api - AppContext04TestSuite"
 | 
			
		||||
      if: commit_message !~ /\[skip repo\]/
 | 
			
		||||
      install: travis_retry travis_wait 40 env REQUIRES_INSTALLED_ARTIFACTS=true bash scripts/travis/build.sh
 | 
			
		||||
      before_script:
 | 
			
		||||
        - docker run -d -p 5433:5432 -e POSTGRES_PASSWORD=alfresco -e POSTGRES_USER=alfresco -e POSTGRES_DB=alfresco postgres:13.3 postgres -c 'max_connections=300'
 | 
			
		||||
        - docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.16.1
 | 
			
		||||
        - docker run -d -p 8090:8090 -e JAVA_OPTS=" -Xms256m -Xmx256m" alfresco/alfresco-transform-core-aio:2.5.7
 | 
			
		||||
        - docker run -d -p 8090:8090 -e JAVA_OPTS=" -Xms256m -Xmx256m" alfresco/alfresco-transform-core-aio:${TRANSFORMERS_TAG}
 | 
			
		||||
      script: travis_wait 20 mvn -B test -pl remote-api -Dtest=AppContext04TestSuite -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
 | 
			
		||||
 | 
			
		||||
    - name: "Remote-api - AppContextExtraTestSuite"
 | 
			
		||||
      if: commit_message !~ /\[skip repo\]/
 | 
			
		||||
      install: travis_retry travis_wait 40 env REQUIRES_INSTALLED_ARTIFACTS=true bash scripts/travis/build.sh
 | 
			
		||||
      before_script:
 | 
			
		||||
        - docker run -d -p 5433:5432 -e POSTGRES_PASSWORD=alfresco -e POSTGRES_USER=alfresco -e POSTGRES_DB=alfresco postgres:13.3 postgres -c 'max_connections=300'
 | 
			
		||||
        - docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.16.1
 | 
			
		||||
@@ -270,99 +308,126 @@ jobs:
 | 
			
		||||
    - name: "REST API TAS tests part1"
 | 
			
		||||
      # TAS tests are generally skipped on feature branches as they will be repeated on the enterprise repo or community packaging builds
 | 
			
		||||
      if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip tas\]/) OR commit_message =~ /\[tas\]/
 | 
			
		||||
      install: travis_retry travis_wait 40 env REQUIRES_LOCAL_IMAGES=true bash scripts/travis/build.sh
 | 
			
		||||
      before_script:
 | 
			
		||||
        - ${TAS_SCRIPTS}/start-compose.sh ${TAS_ENVIRONMENT}/docker-compose-minimal+transforms.yml
 | 
			
		||||
        - ${TAS_SCRIPTS}/wait-for-alfresco-start.sh "http://localhost:8082/alfresco"
 | 
			
		||||
      script: travis_wait 60 mvn -B install -f packaging/tests/tas-restapi/pom.xml -Pall-tas-tests,run-restapi-part1 -Denvironment=default -DrunBugs=false
 | 
			
		||||
      script: travis_wait 60 mvn -B verify -f packaging/tests/tas-restapi/pom.xml -Pall-tas-tests,run-restapi-part1 -Denvironment=default -DrunBugs=false
 | 
			
		||||
 | 
			
		||||
    - name: "REST API TAS tests part2"
 | 
			
		||||
      if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip tas\]/) OR commit_message =~ /\[tas\]/
 | 
			
		||||
      install: travis_retry travis_wait 40 env REQUIRES_LOCAL_IMAGES=true bash scripts/travis/build.sh
 | 
			
		||||
      before_script:
 | 
			
		||||
        - ${TAS_SCRIPTS}/start-compose.sh ${TAS_ENVIRONMENT}/docker-compose-minimal+transforms.yml
 | 
			
		||||
        - ${TAS_SCRIPTS}/wait-for-alfresco-start.sh "http://localhost:8082/alfresco"
 | 
			
		||||
      script: travis_wait 60 mvn -B install -f packaging/tests/tas-restapi/pom.xml -Pall-tas-tests,run-restapi-part2 -Denvironment=default -DrunBugs=false
 | 
			
		||||
      script: travis_wait 60 mvn -B verify -f packaging/tests/tas-restapi/pom.xml -Pall-tas-tests,run-restapi-part2 -Denvironment=default -DrunBugs=false
 | 
			
		||||
 | 
			
		||||
    - name: "REST API TAS tests part3"
 | 
			
		||||
      if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip tas\]/) OR commit_message =~ /\[tas\]/
 | 
			
		||||
      install: travis_retry travis_wait 40 env REQUIRES_LOCAL_IMAGES=true bash scripts/travis/build.sh
 | 
			
		||||
      before_script:
 | 
			
		||||
        - ${TAS_SCRIPTS}/start-compose.sh ${TAS_ENVIRONMENT}/docker-compose-minimal+transforms.yml
 | 
			
		||||
        - ${TAS_SCRIPTS}/wait-for-alfresco-start.sh "http://localhost:8082/alfresco"
 | 
			
		||||
      script: travis_wait 60 mvn -B install -f packaging/tests/tas-restapi/pom.xml -Pall-tas-tests,run-restapi-part3 -Denvironment=default -DrunBugs=false
 | 
			
		||||
      script: travis_wait 60 mvn -B verify -f packaging/tests/tas-restapi/pom.xml -Pall-tas-tests,run-restapi-part3 -Denvironment=default -DrunBugs=false
 | 
			
		||||
 | 
			
		||||
    - name: "CMIS TAS tests - BROWSER binding"
 | 
			
		||||
      if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip tas\]/) OR commit_message =~ /\[tas\]/
 | 
			
		||||
      install: travis_retry travis_wait 40 env REQUIRES_LOCAL_IMAGES=true bash scripts/travis/build.sh
 | 
			
		||||
      before_script:
 | 
			
		||||
        - ${TAS_SCRIPTS}/start-compose.sh ${TAS_ENVIRONMENT}/docker-compose-minimal+transforms.yml
 | 
			
		||||
        - ${TAS_SCRIPTS}/wait-for-alfresco-start.sh "http://localhost:8082/alfresco"
 | 
			
		||||
      script: travis_wait 40 mvn -B install -f packaging/tests/tas-cmis/pom.xml -Pall-tas-tests,run-cmis-browser -Denvironment=default -DrunBugs=false
 | 
			
		||||
      script: travis_wait 40 mvn -B verify -f packaging/tests/tas-cmis/pom.xml -Pall-tas-tests,run-cmis-browser -Denvironment=default -DrunBugs=false
 | 
			
		||||
 | 
			
		||||
    - name: "CMIS TAS tests - ATOM binding"
 | 
			
		||||
      if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip tas\]/) OR commit_message =~ /\[tas\]/
 | 
			
		||||
      install: travis_retry travis_wait 40 env REQUIRES_LOCAL_IMAGES=true bash scripts/travis/build.sh
 | 
			
		||||
      before_script:
 | 
			
		||||
        - ${TAS_SCRIPTS}/start-compose.sh ${TAS_ENVIRONMENT}/docker-compose-minimal+transforms.yml
 | 
			
		||||
        - ${TAS_SCRIPTS}/wait-for-alfresco-start.sh "http://localhost:8082/alfresco"
 | 
			
		||||
      script: travis_wait 40 mvn -B install -f packaging/tests/tas-cmis/pom.xml -Pall-tas-tests,run-cmis-atom -Denvironment=default -DrunBugs=false
 | 
			
		||||
      script: travis_wait 40 mvn -B verify -f packaging/tests/tas-cmis/pom.xml -Pall-tas-tests,run-cmis-atom -Denvironment=default -DrunBugs=false
 | 
			
		||||
 | 
			
		||||
    - name: "CMIS TAS tests - WEBSERVICES binding"
 | 
			
		||||
      if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip tas\]/) OR commit_message =~ /\[tas\]/
 | 
			
		||||
      install: travis_retry travis_wait 40 env REQUIRES_LOCAL_IMAGES=true bash scripts/travis/build.sh
 | 
			
		||||
      before_script:
 | 
			
		||||
        - ${TAS_SCRIPTS}/start-compose.sh ${TAS_ENVIRONMENT}/docker-compose-minimal+transforms.yml
 | 
			
		||||
        - ${TAS_SCRIPTS}/wait-for-alfresco-start.sh "http://localhost:8082/alfresco"
 | 
			
		||||
      script: travis_wait 40 mvn -B install -f packaging/tests/tas-cmis/pom.xml -Pall-tas-tests,run-cmis-webservices -Denvironment=default -DrunBugs=false
 | 
			
		||||
      script: travis_wait 40 mvn -B verify -f packaging/tests/tas-cmis/pom.xml -Pall-tas-tests,run-cmis-webservices -Denvironment=default -DrunBugs=false
 | 
			
		||||
 | 
			
		||||
    - name: "Email TAS tests"
 | 
			
		||||
      if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip tas\]/) OR commit_message =~ /\[tas\]/
 | 
			
		||||
      install: travis_retry travis_wait 40 env REQUIRES_LOCAL_IMAGES=true bash scripts/travis/build.sh
 | 
			
		||||
      before_script:
 | 
			
		||||
        - ${TAS_SCRIPTS}/start-compose.sh ${TAS_ENVIRONMENT}/docker-compose-minimal.yml
 | 
			
		||||
        - ${TAS_SCRIPTS}/wait-for-alfresco-start.sh "http://localhost:8082/alfresco"
 | 
			
		||||
      script: travis_wait 30 mvn -B install -f packaging/tests/tas-email/pom.xml -Pall-tas-tests -Denvironment=default -DrunBugs=false
 | 
			
		||||
      script: travis_wait 30 mvn -B verify -f packaging/tests/tas-email/pom.xml -Pall-tas-tests -Denvironment=default -DrunBugs=false
 | 
			
		||||
 | 
			
		||||
    - name: "WebDAV TAS tests"
 | 
			
		||||
      if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip tas\]/) OR commit_message =~ /\[tas\]/
 | 
			
		||||
      install: travis_retry travis_wait 40 env REQUIRES_LOCAL_IMAGES=true bash scripts/travis/build.sh
 | 
			
		||||
      before_script:
 | 
			
		||||
        - ${TAS_SCRIPTS}/start-compose.sh ${TAS_ENVIRONMENT}/docker-compose-minimal.yml
 | 
			
		||||
        - ${TAS_SCRIPTS}/wait-for-alfresco-start.sh "http://localhost:8082/alfresco"
 | 
			
		||||
      script: travis_wait 30 mvn -B install -f packaging/tests/tas-webdav/pom.xml -Pall-tas-tests -Denvironment=default -DrunBugs=false
 | 
			
		||||
      script: travis_wait 30 mvn -B verify -f packaging/tests/tas-webdav/pom.xml -Pall-tas-tests -Denvironment=default -DrunBugs=false
 | 
			
		||||
 | 
			
		||||
    - name: "Integration TAS tests"
 | 
			
		||||
      if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip tas\]/) OR commit_message =~ /\[tas\]/
 | 
			
		||||
      install: travis_retry travis_wait 40 env REQUIRES_LOCAL_IMAGES=true bash scripts/travis/build.sh
 | 
			
		||||
      before_script:
 | 
			
		||||
        - ${TAS_SCRIPTS}/start-compose.sh ${TAS_ENVIRONMENT}/docker-compose-minimal.yml
 | 
			
		||||
        - ${TAS_SCRIPTS}/wait-for-alfresco-start.sh "http://localhost:8082/alfresco"
 | 
			
		||||
      script: travis_wait 30 mvn -B install -f packaging/tests/tas-integration/pom.xml -Pall-tas-tests -Denvironment=default -DrunBugs=false
 | 
			
		||||
      script: travis_wait 30 mvn -B verify -f packaging/tests/tas-integration/pom.xml -Pall-tas-tests -Denvironment=default -DrunBugs=false
 | 
			
		||||
 | 
			
		||||
    - name: "Share Services - ShareServicesTestSuite"
 | 
			
		||||
      if: commit_message !~ /\[skip repo\]/
 | 
			
		||||
      install: skip
 | 
			
		||||
      before_script:
 | 
			
		||||
        - docker run -d -p 5433:5432 -e POSTGRES_PASSWORD=alfresco -e POSTGRES_USER=alfresco -e POSTGRES_DB=alfresco postgres:13.3 postgres -c 'max_connections=300'
 | 
			
		||||
      script: travis_wait 20 mvn -B test -pl :alfresco-share-services -Dtest=ShareServicesTestSuite -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
 | 
			
		||||
      script: travis_wait 20 mvn -B test -pl :alfresco-share-services -am -Dtest=ShareServicesTestSuite -DfailIfNoTests=false -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
 | 
			
		||||
 | 
			
		||||
    - name: "AGS Unit & Integration Tests 01 (PostgreSQL)"
 | 
			
		||||
      if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip ags\]/) OR commit_message =~ /\[ags\]/
 | 
			
		||||
      install: travis_retry travis_wait 40 env REQUIRES_INSTALLED_ARTIFACTS=true bash scripts/travis/build.sh
 | 
			
		||||
      script: travis_retry travis_wait 80 mvn -B verify -Dmaven.javadoc.skip=true -Dmaven.source.skip=true -Pags -Pstart-postgres -PagsAllTestSuitePt1 -f amps/ags/pom.xml ${LOG_WARN}
 | 
			
		||||
 | 
			
		||||
    - name: "AGS        Integration Tests 02 (PostgreSQL)"
 | 
			
		||||
      if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip ags\]/) OR commit_message =~ /\[ags\]/
 | 
			
		||||
      install: travis_retry travis_wait 40 env REQUIRES_INSTALLED_ARTIFACTS=true bash scripts/travis/build.sh
 | 
			
		||||
      script: travis_retry travis_wait 80 mvn -B verify -Dmaven.javadoc.skip=true -Dmaven.source.skip=true -Pags -Pstart-postgres -PagsAllTestSuitePt2 -f amps/ags/pom.xml ${LOG_WARN}
 | 
			
		||||
 | 
			
		||||
    - name: "AGS        Integration Tests 03 (PostgreSQL)"
 | 
			
		||||
      if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip ags\]/) OR commit_message =~ /\[ags\]/
 | 
			
		||||
      install: travis_retry travis_wait 40 env REQUIRES_INSTALLED_ARTIFACTS=true bash scripts/travis/build.sh
 | 
			
		||||
      script: travis_retry travis_wait 80 mvn -B verify -Dmaven.javadoc.skip=true -Dmaven.source.skip=true -Pags -Pstart-postgres -PagsAllTestSuitePt3 -f amps/ags/pom.xml ${LOG_WARN}
 | 
			
		||||
 | 
			
		||||
    - name: "AGS Unit & Integration Tests 04 (PostgreSQL)"
 | 
			
		||||
      if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip ags\]/) OR commit_message =~ /\[ags\]/
 | 
			
		||||
      install: travis_retry travis_wait 40 env REQUIRES_INSTALLED_ARTIFACTS=true bash scripts/travis/build.sh
 | 
			
		||||
      script: travis_retry travis_wait 80 mvn -B verify -Dmaven.javadoc.skip=true -Dmaven.source.skip=true -Pags -Pstart-postgres -PagsAllTestSuitePt4 -f amps/ags/pom.xml ${LOG_WARN}
 | 
			
		||||
 | 
			
		||||
    - name: "AGS Unit & Integration Tests 01 (MySQL) "
 | 
			
		||||
      if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip ags\]/) OR commit_message =~ /\[ags on MySQL\]/
 | 
			
		||||
      install: travis_retry travis_wait 40 env REQUIRES_INSTALLED_ARTIFACTS=true bash scripts/travis/build.sh
 | 
			
		||||
      script: travis_retry travis_wait 80 mvn -B verify -Dmaven.javadoc.skip=true -Dmaven.source.skip=true -Pags -Pstart-mysql    -PagsAllTestSuitePt1 -f amps/ags/pom.xml ${LOG_WARN}
 | 
			
		||||
 | 
			
		||||
    - name: "AGS        Integration Tests 02 (MySQL) "
 | 
			
		||||
      if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip ags\]/) OR commit_message =~ /\[ags on MySQL\]/
 | 
			
		||||
      install: travis_retry travis_wait 40 env REQUIRES_INSTALLED_ARTIFACTS=true bash scripts/travis/build.sh
 | 
			
		||||
      script: travis_retry travis_wait 80 mvn -B verify -Dmaven.javadoc.skip=true -Dmaven.source.skip=true -Pags -Pstart-mysql    -PagsAllTestSuitePt2 -f amps/ags/pom.xml ${LOG_WARN}
 | 
			
		||||
 | 
			
		||||
    - name: "AGS        Integration Tests 03 (MySQL) "
 | 
			
		||||
      if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip ags\]/) OR commit_message =~ /\[ags on MySQL\]/
 | 
			
		||||
      if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip ags\]/) OR commit_message =~ /\[ags\]/
 | 
			
		||||
      install: travis_retry travis_wait 40 env REQUIRES_INSTALLED_ARTIFACTS=true bash scripts/travis/build.sh
 | 
			
		||||
      script: travis_retry travis_wait 80 mvn -B verify -Dmaven.javadoc.skip=true -Dmaven.source.skip=true -Pags -Pstart-mysql    -PagsAllTestSuitePt3 -f amps/ags/pom.xml ${LOG_WARN}
 | 
			
		||||
 | 
			
		||||
    - name: "AGS Unit & Integration Tests 04 (MySQL) "
 | 
			
		||||
      if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip ags\]/) OR commit_message =~ /\[ags on MySQL\]/
 | 
			
		||||
      install: travis_retry travis_wait 40 env REQUIRES_INSTALLED_ARTIFACTS=true bash scripts/travis/build.sh
 | 
			
		||||
      script: travis_retry travis_wait 80 mvn -B verify -Dmaven.javadoc.skip=true -Dmaven.source.skip=true -Pags -Pstart-mysql    -PagsAllTestSuitePt4 -f amps/ags/pom.xml ${LOG_WARN}
 | 
			
		||||
 | 
			
		||||
    - name: "AGS Community Rest API Tests"
 | 
			
		||||
      if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip ags\]/) OR commit_message =~ /\[ags\]/
 | 
			
		||||
      install: travis_retry travis_wait 40 env REQUIRES_LOCAL_IMAGES=true bash scripts/travis/build.sh
 | 
			
		||||
      addons:
 | 
			
		||||
        artifacts:
 | 
			
		||||
          paths:
 | 
			
		||||
@@ -373,11 +438,12 @@ jobs:
 | 
			
		||||
      before_script:
 | 
			
		||||
        - ${TAS_SCRIPTS}/start-compose.sh ./amps/ags/rm-community/rm-community-repo/docker-compose.yml
 | 
			
		||||
        - ${TAS_SCRIPTS}/wait-for-alfresco-start.sh "http://localhost:8080/alfresco"
 | 
			
		||||
      script: travis_wait 40 mvn -B test -pl :alfresco-governance-services-automation-community-rest-api -Dskip.automationtests=false -Pags
 | 
			
		||||
      script: travis_wait 40 mvn -B test -pl :alfresco-governance-services-automation-community-rest-api -am -DfailIfNoTests=false -Dskip.automationtests=false -Pags
 | 
			
		||||
      after_script: bash amps/ags/travis/scripts/getLogs.sh
 | 
			
		||||
 | 
			
		||||
    - name: "Push to Nexus"
 | 
			
		||||
      stage: release
 | 
			
		||||
      install: skip
 | 
			
		||||
      before_script: bash scripts/travis/verify_release_tag.sh
 | 
			
		||||
      script: travis_wait 40 bash scripts/travis/maven_release.sh
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -7,7 +7,7 @@
 | 
			
		||||
   <parent>
 | 
			
		||||
      <groupId>org.alfresco</groupId>
 | 
			
		||||
      <artifactId>alfresco-community-repo-amps</artifactId>
 | 
			
		||||
      <version>14.146-SNAPSHOT</version>
 | 
			
		||||
      <version>23.1.0.23-SNAPSHOT</version>
 | 
			
		||||
   </parent>
 | 
			
		||||
 | 
			
		||||
   <modules>
 | 
			
		||||
 
 | 
			
		||||
@@ -7,7 +7,7 @@
 | 
			
		||||
   <parent>
 | 
			
		||||
      <groupId>org.alfresco</groupId>
 | 
			
		||||
      <artifactId>alfresco-governance-services-community-parent</artifactId>
 | 
			
		||||
      <version>14.146-SNAPSHOT</version>
 | 
			
		||||
      <version>23.1.0.23-SNAPSHOT</version>
 | 
			
		||||
   </parent>
 | 
			
		||||
 | 
			
		||||
   <modules>
 | 
			
		||||
 
 | 
			
		||||
@@ -7,7 +7,7 @@
 | 
			
		||||
   <parent>
 | 
			
		||||
      <groupId>org.alfresco</groupId>
 | 
			
		||||
      <artifactId>alfresco-governance-services-automation-community-repo</artifactId>
 | 
			
		||||
      <version>14.146-SNAPSHOT</version>
 | 
			
		||||
      <version>23.1.0.23-SNAPSHOT</version>
 | 
			
		||||
   </parent>
 | 
			
		||||
 | 
			
		||||
   <build>
 | 
			
		||||
 
 | 
			
		||||
@@ -7,7 +7,7 @@
 | 
			
		||||
   <parent>
 | 
			
		||||
      <groupId>org.alfresco</groupId>
 | 
			
		||||
      <artifactId>alfresco-governance-services-community-parent</artifactId>
 | 
			
		||||
      <version>14.146-SNAPSHOT</version>
 | 
			
		||||
      <version>23.1.0.23-SNAPSHOT</version>
 | 
			
		||||
   </parent>
 | 
			
		||||
 | 
			
		||||
   <modules>
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,3 @@
 | 
			
		||||
TRANSFORMERS_TAG=2.5.7
 | 
			
		||||
SOLR6_TAG=2.0.3
 | 
			
		||||
POSTGRES_TAG=13.3
 | 
			
		||||
ACTIVEMQ_TAG=5.16.1
 | 
			
		||||
 
 | 
			
		||||
@@ -8,7 +8,7 @@
 | 
			
		||||
   <parent>
 | 
			
		||||
      <groupId>org.alfresco</groupId>
 | 
			
		||||
      <artifactId>alfresco-governance-services-community-repo-parent</artifactId>
 | 
			
		||||
      <version>14.146-SNAPSHOT</version>
 | 
			
		||||
      <version>23.1.0.23-SNAPSHOT</version>
 | 
			
		||||
   </parent>
 | 
			
		||||
 | 
			
		||||
   <properties>
 | 
			
		||||
@@ -361,6 +361,12 @@
 | 
			
		||||
               <integrationTestSuite>**/AllTestSuitePt3.class</integrationTestSuite>
 | 
			
		||||
           </properties>
 | 
			
		||||
       </profile>
 | 
			
		||||
       <profile>
 | 
			
		||||
           <id>agsAllTestSuitePt4</id>
 | 
			
		||||
           <properties>
 | 
			
		||||
               <integrationTestSuite>**/AllTestSuitePt4.class</integrationTestSuite>
 | 
			
		||||
           </properties>
 | 
			
		||||
       </profile>
 | 
			
		||||
 | 
			
		||||
      <profile>
 | 
			
		||||
         <id>use-mysql</id>
 | 
			
		||||
 
 | 
			
		||||
@@ -43,19 +43,16 @@ import org.junit.runner.RunWith;
 | 
			
		||||
@ClassnameFilters({
 | 
			
		||||
 | 
			
		||||
    // The following packages are run by Pt1. IF YOU CHANGE THIS LIST ALSO CHANGE IT IN AllTestSuitePt3.
 | 
			
		||||
    "org\\.alfresco\\.module\\.org_alfresco_module_rm\\.test\\.legacy\\.action\\..*Test",
 | 
			
		||||
    "org\\.alfresco\\.module\\.org_alfresco_module_rm\\.test\\.legacy\\.capabilities\\..*Test",
 | 
			
		||||
    "org\\.alfresco\\.module\\.org_alfresco_module_rm\\.test\\.legacy\\.jscript\\..*Test",
 | 
			
		||||
    "org\\.alfresco\\.module\\.org_alfresco_module_rm\\.test\\.legacy\\.security\\..*Test",
 | 
			
		||||
    "org\\.alfresco\\.module\\.org_alfresco_module_rm\\.test\\.legacy\\.service\\..*Test",
 | 
			
		||||
    "org\\.alfresco\\.module\\.org_alfresco_module_rm\\.test\\.legacy\\.webscript\\..*Test",
 | 
			
		||||
    // There appears to be some common setup taking place in the first 2 packages, which is why all legacy tests are
 | 
			
		||||
    // together even though they take a little longer to run that way.
 | 
			
		||||
    "org\\.alfresco\\.module\\.org_alfresco_module_rm\\.test\\.legacy\\.jscript\\..*Test",
 | 
			
		||||
 | 
			
		||||
    // Exclude all UnitTests
 | 
			
		||||
    "!.*UnitTest",
 | 
			
		||||
 | 
			
		||||
    // Put the test classes you want to exclude here
 | 
			
		||||
    "!.*DispositionServiceImplTest",
 | 
			
		||||
    "!.*FilePlanPermissionServiceImplTest",
 | 
			
		||||
    // above 2 tests from service package require setup from FileReportActionTest so they've been moved to part 4
 | 
			
		||||
    "!.*DataLoadSystemTest",
 | 
			
		||||
    "!.*RM2072Test",
 | 
			
		||||
    "!.*RM2190Test",
 | 
			
		||||
 
 | 
			
		||||
@@ -0,0 +1,78 @@
 | 
			
		||||
/*
 | 
			
		||||
 * #%L
 | 
			
		||||
 * Alfresco Records Management Module
 | 
			
		||||
 * %%
 | 
			
		||||
 * Copyright (C) 2005 - 2022 Alfresco Software Limited
 | 
			
		||||
 * %%
 | 
			
		||||
 * This file is part of the Alfresco software.
 | 
			
		||||
 * -
 | 
			
		||||
 * If the software was purchased under a paid Alfresco license, the terms of
 | 
			
		||||
 * the paid license agreement will prevail.  Otherwise, the software is
 | 
			
		||||
 * provided under the following open source license terms:
 | 
			
		||||
 * -
 | 
			
		||||
 * Alfresco is free software: you can redistribute it and/or modify
 | 
			
		||||
 * it under the terms of the GNU Lesser General Public License as published by
 | 
			
		||||
 * the Free Software Foundation, either version 3 of the License, or
 | 
			
		||||
 * (at your option) any later version.
 | 
			
		||||
 * -
 | 
			
		||||
 * Alfresco is distributed in the hope that it will be useful,
 | 
			
		||||
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
			
		||||
 * GNU Lesser General Public License for more details.
 | 
			
		||||
 * -
 | 
			
		||||
 * You should have received a copy of the GNU Lesser General Public License
 | 
			
		||||
 * along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 * #L%
 | 
			
		||||
 */
 | 
			
		||||
package org.alfresco.module.org_alfresco_module_rm.test;
 | 
			
		||||
 | 
			
		||||
import org.junit.extensions.cpsuite.ClasspathSuite;
 | 
			
		||||
import org.junit.extensions.cpsuite.ClasspathSuite.ClassnameFilters;
 | 
			
		||||
import org.junit.extensions.cpsuite.ClasspathSuite.SuiteTypes;
 | 
			
		||||
import org.junit.extensions.cpsuite.SuiteType;
 | 
			
		||||
import org.junit.runner.RunWith;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Convenience test suite that runs all the tests. THIS HAS BEEN SPLIT INTO PARTS SO THAT THE BUILD TIME IS REDUCED.
 | 
			
		||||
 *
 | 
			
		||||
 * @author Marcin Strankowski
 | 
			
		||||
 * @since 2.1
 | 
			
		||||
 */
 | 
			
		||||
@RunWith(ClasspathSuite.class)
 | 
			
		||||
@SuiteTypes({SuiteType.TEST_CLASSES, SuiteType.RUN_WITH_CLASSES, SuiteType.JUNIT38_TEST_CLASSES})
 | 
			
		||||
@ClassnameFilters({
 | 
			
		||||
 | 
			
		||||
    // The following packages are run by Pt1. IF YOU CHANGE THIS LIST ALSO CHANGE IT IN AllTestSuitePt3.
 | 
			
		||||
    "org\\.alfresco\\.module\\.org_alfresco_module_rm\\.test\\.legacy\\.action\\..*Test",
 | 
			
		||||
    "org\\.alfresco\\.module\\.org_alfresco_module_rm\\.test\\.legacy\\.capabilities\\..*Test",
 | 
			
		||||
    "org\\.alfresco\\.module\\.org_alfresco_module_rm\\.test\\.legacy\\.security\\..*Test",
 | 
			
		||||
    "org\\.alfresco\\.module\\.org_alfresco_module_rm\\.test\\.legacy\\.webscript\\..*Test",
 | 
			
		||||
    "org\\.alfresco\\.module\\.org_alfresco_module_rm\\.test\\.legacy\\.service\\.*DispositionServiceImplTest",
 | 
			
		||||
    "org\\.alfresco\\.module\\.org_alfresco_module_rm\\.test\\.legacy\\.service\\.*FilePlanPermissionServiceImplTest",
 | 
			
		||||
 | 
			
		||||
    // 2 tests from service package are here, they seem to require FileReportActionTest being ran beforehand
 | 
			
		||||
    // and it would take too much time to run them in 1st test suite
 | 
			
		||||
 | 
			
		||||
    // Exclude all UnitTests
 | 
			
		||||
    "!.*UnitTest",
 | 
			
		||||
 | 
			
		||||
    // Put the test classes you want to exclude here
 | 
			
		||||
    "!.*DataLoadSystemTest",
 | 
			
		||||
    "!.*RM2072Test",
 | 
			
		||||
    "!.*RM2190Test",
 | 
			
		||||
    "!.*RM981SystemTest",
 | 
			
		||||
    "!.*RM3993Test",
 | 
			
		||||
    "!.*RM4163Test",
 | 
			
		||||
    "!.*RecordsManagementEventServiceImplTest",
 | 
			
		||||
    "!.*RmRestApiTest",
 | 
			
		||||
    "!.*NotificationServiceHelperSystemTest",
 | 
			
		||||
    "!.*RetryingTransactionHelperBaseTest",
 | 
			
		||||
    "!.*RMCaveatConfigServiceImplTest",
 | 
			
		||||
    // This test is running successfully locally but not on bamboo (if executed as a single test).
 | 
			
		||||
    // The problem can be reproduced if the whole test suite is run locally as well.
 | 
			
		||||
    // Tests should not be dependant on other test classes and should run in any order without any problems.
 | 
			
		||||
    "!.*EmailMapScriptTest"
 | 
			
		||||
})
 | 
			
		||||
public class AllTestSuitePt4
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
@@ -3,8 +3,8 @@
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
# Version label
 | 
			
		||||
version.major=7
 | 
			
		||||
version.minor=0
 | 
			
		||||
version.major=23
 | 
			
		||||
version.minor=1
 | 
			
		||||
version.revision=0
 | 
			
		||||
version.label=
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -7,7 +7,7 @@
 | 
			
		||||
    <parent>
 | 
			
		||||
        <groupId>org.alfresco</groupId>
 | 
			
		||||
        <artifactId>alfresco-governance-services-community-repo-parent</artifactId>
 | 
			
		||||
        <version>14.146-SNAPSHOT</version>
 | 
			
		||||
        <version>23.1.0.23-SNAPSHOT</version>
 | 
			
		||||
    </parent>
 | 
			
		||||
 | 
			
		||||
    <build>
 | 
			
		||||
 
 | 
			
		||||
@@ -7,7 +7,7 @@
 | 
			
		||||
    <parent>
 | 
			
		||||
        <groupId>org.alfresco</groupId>
 | 
			
		||||
        <artifactId>alfresco-community-repo</artifactId>
 | 
			
		||||
        <version>14.146-SNAPSHOT</version>
 | 
			
		||||
        <version>23.1.0.23-SNAPSHOT</version>
 | 
			
		||||
    </parent>
 | 
			
		||||
 | 
			
		||||
    <modules>
 | 
			
		||||
 
 | 
			
		||||
@@ -8,7 +8,7 @@
 | 
			
		||||
    <parent>
 | 
			
		||||
        <groupId>org.alfresco</groupId>
 | 
			
		||||
        <artifactId>alfresco-community-repo-amps</artifactId>
 | 
			
		||||
        <version>14.146-SNAPSHOT</version>
 | 
			
		||||
        <version>23.1.0.23-SNAPSHOT</version>
 | 
			
		||||
    </parent>
 | 
			
		||||
 | 
			
		||||
    <properties>
 | 
			
		||||
 
 | 
			
		||||
@@ -7,7 +7,7 @@
 | 
			
		||||
   <parent>
 | 
			
		||||
      <groupId>org.alfresco</groupId>
 | 
			
		||||
      <artifactId>alfresco-community-repo</artifactId>
 | 
			
		||||
      <version>14.146-SNAPSHOT</version>
 | 
			
		||||
      <version>23.1.0.23-SNAPSHOT</version>
 | 
			
		||||
   </parent>
 | 
			
		||||
 | 
			
		||||
   <dependencies>
 | 
			
		||||
 
 | 
			
		||||
@@ -7,7 +7,7 @@
 | 
			
		||||
    <parent>
 | 
			
		||||
        <groupId>org.alfresco</groupId>
 | 
			
		||||
        <artifactId>alfresco-community-repo</artifactId>
 | 
			
		||||
        <version>14.146-SNAPSHOT</version>
 | 
			
		||||
        <version>23.1.0.23-SNAPSHOT</version>
 | 
			
		||||
    </parent>
 | 
			
		||||
 | 
			
		||||
    <properties>
 | 
			
		||||
 
 | 
			
		||||
@@ -7,7 +7,7 @@
 | 
			
		||||
    <parent>
 | 
			
		||||
        <groupId>org.alfresco</groupId>
 | 
			
		||||
        <artifactId>alfresco-community-repo</artifactId>
 | 
			
		||||
        <version>14.146-SNAPSHOT</version>
 | 
			
		||||
        <version>23.1.0.23-SNAPSHOT</version>
 | 
			
		||||
    </parent>
 | 
			
		||||
 | 
			
		||||
    <dependencies>
 | 
			
		||||
 
 | 
			
		||||
@@ -9,6 +9,6 @@
 | 
			
		||||
    <parent>
 | 
			
		||||
        <groupId>org.alfresco</groupId>
 | 
			
		||||
        <artifactId>alfresco-community-repo-packaging</artifactId>
 | 
			
		||||
        <version>14.146-SNAPSHOT</version>
 | 
			
		||||
        <version>23.1.0.23-SNAPSHOT</version>
 | 
			
		||||
    </parent>
 | 
			
		||||
</project>
 | 
			
		||||
 
 | 
			
		||||
@@ -7,7 +7,7 @@
 | 
			
		||||
    <parent>
 | 
			
		||||
        <groupId>org.alfresco</groupId>
 | 
			
		||||
        <artifactId>alfresco-community-repo-packaging</artifactId>
 | 
			
		||||
        <version>14.146-SNAPSHOT</version>
 | 
			
		||||
        <version>23.1.0.23-SNAPSHOT</version>
 | 
			
		||||
    </parent>
 | 
			
		||||
 | 
			
		||||
    <properties>
 | 
			
		||||
 
 | 
			
		||||
@@ -7,7 +7,7 @@
 | 
			
		||||
    <parent>
 | 
			
		||||
        <groupId>org.alfresco</groupId>
 | 
			
		||||
        <artifactId>alfresco-community-repo</artifactId>
 | 
			
		||||
        <version>14.146-SNAPSHOT</version>
 | 
			
		||||
        <version>23.1.0.23-SNAPSHOT</version>
 | 
			
		||||
    </parent>
 | 
			
		||||
 | 
			
		||||
    <modules>
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,3 @@
 | 
			
		||||
TRANSFORMERS_TAG=2.5.7
 | 
			
		||||
SOLR6_TAG=2.0.3
 | 
			
		||||
POSTGRES_TAG=13.3
 | 
			
		||||
ACTIVEMQ_TAG=5.16.1
 | 
			
		||||
 
 | 
			
		||||
@@ -6,7 +6,7 @@
 | 
			
		||||
    <parent>
 | 
			
		||||
        <groupId>org.alfresco</groupId>
 | 
			
		||||
        <artifactId>alfresco-community-repo-packaging</artifactId>
 | 
			
		||||
        <version>14.146-SNAPSHOT</version>
 | 
			
		||||
        <version>23.1.0.23-SNAPSHOT</version>
 | 
			
		||||
    </parent>
 | 
			
		||||
 | 
			
		||||
    <modules>
 | 
			
		||||
 
 | 
			
		||||
@@ -27,8 +27,11 @@ fi
 | 
			
		||||
 | 
			
		||||
echo "Starting ACS stack in ${DOCKER_COMPOSE_PATH}"
 | 
			
		||||
 | 
			
		||||
TRANSFORMERS_TAG=$(mvn help:evaluate -Dexpression=dependency.alfresco-transform-core.version -q -DforceStdout)
 | 
			
		||||
TRANSFORM_ROUTER_TAG=$(mvn help:evaluate -Dexpression=dependency.alfresco-transform-service.version -q -DforceStdout)
 | 
			
		||||
 | 
			
		||||
# .env files are picked up from project directory correctly on docker-compose 1.23.0+
 | 
			
		||||
docker-compose --file "${DOCKER_COMPOSE_PATH}" --project-directory $(dirname "${DOCKER_COMPOSE_PATH}") up -d
 | 
			
		||||
TRANSFORMERS_TAG=${TRANSFORMERS_TAG} TRANSFORM_ROUTER_TAG=${TRANSFORM_ROUTER_TAG} docker-compose --file "${DOCKER_COMPOSE_PATH}" --project-directory $(dirname "${DOCKER_COMPOSE_PATH}") up -d
 | 
			
		||||
 | 
			
		||||
if [ $? -eq 0 ]
 | 
			
		||||
then
 | 
			
		||||
 
 | 
			
		||||
@@ -9,7 +9,7 @@
 | 
			
		||||
    <parent>
 | 
			
		||||
        <groupId>org.alfresco</groupId>
 | 
			
		||||
        <artifactId>alfresco-community-repo-tests</artifactId>
 | 
			
		||||
        <version>14.146-SNAPSHOT</version>
 | 
			
		||||
        <version>23.1.0.23-SNAPSHOT</version>
 | 
			
		||||
    </parent>
 | 
			
		||||
 | 
			
		||||
    <developers>
 | 
			
		||||
 
 | 
			
		||||
@@ -9,7 +9,7 @@
 | 
			
		||||
    <parent>
 | 
			
		||||
        <groupId>org.alfresco</groupId>
 | 
			
		||||
        <artifactId>alfresco-community-repo-tests</artifactId>
 | 
			
		||||
        <version>14.146-SNAPSHOT</version>
 | 
			
		||||
        <version>23.1.0.23-SNAPSHOT</version>
 | 
			
		||||
    </parent>
 | 
			
		||||
 | 
			
		||||
    <developers>
 | 
			
		||||
 
 | 
			
		||||
@@ -9,7 +9,7 @@
 | 
			
		||||
    <parent>
 | 
			
		||||
        <groupId>org.alfresco</groupId>
 | 
			
		||||
        <artifactId>alfresco-community-repo-tests</artifactId>
 | 
			
		||||
        <version>14.146-SNAPSHOT</version>
 | 
			
		||||
        <version>23.1.0.23-SNAPSHOT</version>
 | 
			
		||||
    </parent>
 | 
			
		||||
 | 
			
		||||
    <developers>
 | 
			
		||||
 
 | 
			
		||||
@@ -60,15 +60,15 @@ public class IntegrationFullTestsBulk2  extends IntegrationTest
 | 
			
		||||
        ftpProtocol.authenticateUser(testUser1).usingSite(testSitePublic).createFolder(testFolder1)
 | 
			
		||||
            .usingResource(testFolder1).createFile(wordFile)
 | 
			
		||||
            .assertThat().contentIs("tasTesting");
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        STEP("2. Open document for edit using CMIS");
 | 
			
		||||
        cmisAPI.authenticateUser(testUser1).usingResource(wordFile).checkOut();
 | 
			
		||||
        FileModel wordFilePWC = cmisAPI.usingResource(wordFile).withCMISUtil().getPWCFileModel();
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        STEP("3. Try to edit document using Webdav while checked-out with CMIS - content should be updated");
 | 
			
		||||
        webDavProtocol.authenticateUser(testUser1).usingResource(wordFilePWC).update("update")
 | 
			
		||||
            .and().assertThat().contentIs("update");
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        STEP("4. Copy document to testFolder2 with ftp");
 | 
			
		||||
        FileModel copiedWordFile = new FileModel(wordFile);
 | 
			
		||||
        ftpProtocol.usingSite(testSitePublic).createFolder(testFolder2)
 | 
			
		||||
@@ -76,15 +76,15 @@ public class IntegrationFullTestsBulk2  extends IntegrationTest
 | 
			
		||||
        copiedWordFile.setCmisLocation(ftpProtocol.getLastResourceWithoutPrefix());
 | 
			
		||||
        ftpProtocol.usingResource(testFolder1).assertThat().hasFiles(wordFile)
 | 
			
		||||
            .and().usingResource(testFolder2).assertThat().hasFiles(copiedWordFile);
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        STEP("5. Update document from folder2, check its content is updated with Webdav");
 | 
			
		||||
        webDavProtocol.usingResource(copiedWordFile).update("Step5")
 | 
			
		||||
            .and().assertThat().contentIs("Step5");
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        STEP("6. Update document with WebDAV");
 | 
			
		||||
        webDavProtocol.authenticateUser(testUser1).usingResource(wordFile).update("WebDAVUpdate");
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Scenario 84
 | 
			
		||||
     * 1. Create folder1 with webdav
 | 
			
		||||
@@ -150,7 +150,7 @@ public class IntegrationFullTestsBulk2  extends IntegrationTest
 | 
			
		||||
     * 13. Check file is deleted with WebDAV
 | 
			
		||||
     */
 | 
			
		||||
    @Test(groups = { TestGroup.INTEGRATION, TestGroup.FULL })
 | 
			
		||||
    @TestRail(section = { TestGroup.INTEGRATION, TestGroup.CONTENT }, executionType = ExecutionType.REGRESSION, 
 | 
			
		||||
    @TestRail(section = { TestGroup.INTEGRATION, TestGroup.CONTENT }, executionType = ExecutionType.REGRESSION,
 | 
			
		||||
        description = "Update file with different user roles and protocols")
 | 
			
		||||
    public void updateFileWithDifferentRolesUsingDifferentProtocols() throws Exception
 | 
			
		||||
    {
 | 
			
		||||
@@ -276,41 +276,41 @@ public class IntegrationFullTestsBulk2  extends IntegrationTest
 | 
			
		||||
        UserModel user1 = dataUser.createRandomTestUser();
 | 
			
		||||
        UserModel user2 = dataUser.createRandomTestUser();
 | 
			
		||||
        user2.setUserRole(UserRole.SiteManager);
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        STEP("2. User1 creates site1 and invites user2 as manager");
 | 
			
		||||
        SiteModel site = dataSite.usingUser(user1).createPublicRandomSite();
 | 
			
		||||
        restAPI.authenticateUser(user1).withCoreAPI().usingSite(site).addPerson(user2);
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        STEP("3. User1 adds document1 and tag1 to doc");
 | 
			
		||||
        dataContent.usingUser(user1).usingSite(site).createContent(testFile);
 | 
			
		||||
        RestTagModel tag = restAPI.withCoreAPI().usingResource(testFile).addTag("tag1");
 | 
			
		||||
        restAPI.withCoreAPI().usingResource(testFile).getNodeTags().assertThat().entriesListContains("tag", "tag1");
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        STEP("4. User2 gets tags and verifies tag1 appears");
 | 
			
		||||
        restAPI.authenticateUser(user2).withCoreAPI().usingResource(testFile).getNodeTags().assertThat().entriesListContains("tag", "tag1");
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        STEP("5. User2 delete tag1");
 | 
			
		||||
        restAPI.withCoreAPI().usingResource(testFile).deleteTag(tag);
 | 
			
		||||
        restAPI.withCoreAPI().usingResource(testFile).getNodeTags().assertThat().entriesListDoesNotContain("tag", "tag1");
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        STEP("6. User1 tries to update tag1");
 | 
			
		||||
        restAPI.authenticateUser(user2).withCoreAPI().usingTag(tag).update("updatedTag");
 | 
			
		||||
        restAPI.assertStatusCodeIs(HttpStatus.FORBIDDEN)
 | 
			
		||||
            .assertLastError().containsSummary(RestErrorModel.PERMISSION_WAS_DENIED)
 | 
			
		||||
            .containsErrorKey(RestErrorModel.PERMISSION_DENIED_ERRORKEY);
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        STEP("7. User1 add new tag tag2");
 | 
			
		||||
        tag = restAPI.authenticateUser(user1).withCoreAPI().usingResource(testFile).addTag("tag2");
 | 
			
		||||
        restAPI.withCoreAPI().usingResource(testFile).getNodeTags().assertThat().entriesListContains("tag", "tag2");
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        STEP("8. User2 verifies tag2 appears and tag1 is not in the list");
 | 
			
		||||
        restAPI.authenticateUser(user2).withCoreAPI().usingResource(testFile).getNodeTags()
 | 
			
		||||
            .assertThat().entriesListDoesNotContain("tag", "tag1")
 | 
			
		||||
            .assertThat().entriesListContains("tag", "tag2");
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        STEP("9. User2 deletes document1");
 | 
			
		||||
        dataContent.usingUser(user2).usingResource(testFile).deleteContent();
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        STEP("10. User1 tries to delete tag2");
 | 
			
		||||
        restAPI.authenticateUser(user1).withCoreAPI().usingResource(testFile).deleteTag(tag);
 | 
			
		||||
        restAPI.assertStatusCodeIs(HttpStatus.NOT_FOUND)
 | 
			
		||||
@@ -329,9 +329,9 @@ public class IntegrationFullTestsBulk2  extends IntegrationTest
 | 
			
		||||
     * 7. User1 deletes the document1 with ftp
 | 
			
		||||
     * 8. Verify user2 cannot update document1 with cmis
 | 
			
		||||
     */
 | 
			
		||||
        @Test(groups = { TestGroup.INTEGRATION, TestGroup.FULL }, expectedExceptions = CmisObjectNotFoundException.class, expectedExceptionsMessageRegExp = ".*Object not found:.*")
 | 
			
		||||
        @TestRail(section = { TestGroup.INTEGRATION, TestGroup.CONTENT }, executionType = ExecutionType.REGRESSION, description = "Negative scenarios for update document")
 | 
			
		||||
        public void fileUpdateNegativeScenariosTest() throws Exception
 | 
			
		||||
    @Test(groups = { TestGroup.INTEGRATION, TestGroup.FULL }, expectedExceptions = CmisObjectNotFoundException.class, expectedExceptionsMessageRegExp = ".*Object not found:.*")
 | 
			
		||||
    @TestRail(section = { TestGroup.INTEGRATION, TestGroup.CONTENT }, executionType = ExecutionType.REGRESSION, description = "Negative scenarios for update document")
 | 
			
		||||
    public void fileUpdateNegativeScenariosTest() throws Exception
 | 
			
		||||
        {
 | 
			
		||||
            STEP("1. Create user1, user2");
 | 
			
		||||
        UserModel user1 = dataUser.createRandomTestUser();
 | 
			
		||||
 
 | 
			
		||||
@@ -9,7 +9,7 @@
 | 
			
		||||
    <parent>
 | 
			
		||||
        <groupId>org.alfresco</groupId>
 | 
			
		||||
        <artifactId>alfresco-community-repo-tests</artifactId>
 | 
			
		||||
        <version>14.146-SNAPSHOT</version>
 | 
			
		||||
        <version>23.1.0.23-SNAPSHOT</version>
 | 
			
		||||
    </parent>
 | 
			
		||||
 | 
			
		||||
    <developers>
 | 
			
		||||
 
 | 
			
		||||
@@ -7,9 +7,7 @@ import org.alfresco.utility.Utility;
 | 
			
		||||
import org.alfresco.utility.model.FileModel;
 | 
			
		||||
import org.alfresco.utility.model.FolderModel;
 | 
			
		||||
import org.alfresco.utility.model.SiteModel;
 | 
			
		||||
 | 
			
		||||
import org.alfresco.utility.model.UserModel;
 | 
			
		||||
 | 
			
		||||
import org.springframework.http.HttpStatus;
 | 
			
		||||
import org.testng.Assert;
 | 
			
		||||
import org.testng.annotations.BeforeClass;
 | 
			
		||||
@@ -40,17 +38,20 @@ public abstract class RenditionIntegrationTests extends RestTest
 | 
			
		||||
        FileModel file = new FileModel();
 | 
			
		||||
        file.setNodeRef(nodeId);
 | 
			
		||||
 | 
			
		||||
        // 1. Create a rendition of the file using RESTAPI
 | 
			
		||||
        // 1. Preemptively delete an existing rendition of the file using RESTAPI
 | 
			
		||||
        restClient.withCoreAPI().usingNode(file).deleteNodeRendition(renditionId);
 | 
			
		||||
 | 
			
		||||
        // 2. Create a rendition of the file using RESTAPI
 | 
			
		||||
        restClient.withCoreAPI().usingNode(file).createNodeRendition(renditionId);
 | 
			
		||||
        Assert.assertEquals(Integer.valueOf(restClient.getStatusCode()).intValue(), HttpStatus.ACCEPTED.value(),
 | 
			
		||||
                "Failed to submit a request for rendition. [" + fileName+ ", " + renditionId+"] [source file, rendition ID]. ");
 | 
			
		||||
 | 
			
		||||
        // 2. Verify that a rendition of the file is created and has content using RESTAPI
 | 
			
		||||
        // 3. Verify that a rendition of the file is created and has content using RESTAPI
 | 
			
		||||
        RestResponse restResponse = restClient.withCoreAPI().usingNode(file).getNodeRenditionContentUntilIsCreated(renditionId);
 | 
			
		||||
        Assert.assertEquals(Integer.valueOf(restClient.getStatusCode()).intValue(), HttpStatus.OK.value(),
 | 
			
		||||
                "Failed to produce rendition. [" + fileName+ ", " + renditionId+"] [source file, rendition ID] ");
 | 
			
		||||
 | 
			
		||||
        // 3. Check the returned content type
 | 
			
		||||
        // 4. Check the returned content type
 | 
			
		||||
        Assert.assertEquals(restClient.getResponseHeaders().getValue("Content-Type"), expectedMimeType+";charset=UTF-8",
 | 
			
		||||
                "Rendition was created but it has the wrong Content-Type. [" + fileName+ ", " + renditionId + "] [source file, rendition ID]");
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -9,7 +9,7 @@
 | 
			
		||||
    <parent>
 | 
			
		||||
        <groupId>org.alfresco</groupId>
 | 
			
		||||
        <artifactId>alfresco-community-repo-tests</artifactId>
 | 
			
		||||
        <version>14.146-SNAPSHOT</version>
 | 
			
		||||
        <version>23.1.0.23-SNAPSHOT</version>
 | 
			
		||||
    </parent>
 | 
			
		||||
 | 
			
		||||
    <developers>
 | 
			
		||||
 
 | 
			
		||||
@@ -7,7 +7,7 @@
 | 
			
		||||
    <parent>
 | 
			
		||||
        <groupId>org.alfresco</groupId>
 | 
			
		||||
        <artifactId>alfresco-community-repo-packaging</artifactId>
 | 
			
		||||
        <version>14.146-SNAPSHOT</version>
 | 
			
		||||
        <version>23.1.0.23-SNAPSHOT</version>
 | 
			
		||||
    </parent>
 | 
			
		||||
 | 
			
		||||
    <properties>
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										19
									
								
								pom.xml
									
									
									
									
									
								
							
							
						
						
									
										19
									
								
								pom.xml
									
									
									
									
									
								
							@@ -2,7 +2,7 @@
 | 
			
		||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 | 
			
		||||
    <modelVersion>4.0.0</modelVersion>
 | 
			
		||||
    <artifactId>alfresco-community-repo</artifactId>
 | 
			
		||||
    <version>14.146-SNAPSHOT</version> 
 | 
			
		||||
    <version>23.1.0.23-SNAPSHOT</version>
 | 
			
		||||
    <packaging>pom</packaging>
 | 
			
		||||
    <name>Alfresco Community Repo Parent</name>
 | 
			
		||||
 | 
			
		||||
@@ -23,11 +23,11 @@
 | 
			
		||||
    </modules>
 | 
			
		||||
 | 
			
		||||
    <properties>
 | 
			
		||||
        <acs.version.major>7</acs.version.major>
 | 
			
		||||
        <acs.version.minor>2</acs.version.minor>
 | 
			
		||||
        <acs.version.major>23</acs.version.major>
 | 
			
		||||
        <acs.version.minor>1</acs.version.minor>
 | 
			
		||||
        <acs.version.revision>0</acs.version.revision>
 | 
			
		||||
        <acs.version.label />
 | 
			
		||||
        <amp.min.version>${acs.version.major}.0.0</amp.min.version>
 | 
			
		||||
        <amp.min.version>${acs.version.major}.1.0</amp.min.version>
 | 
			
		||||
 | 
			
		||||
        <version.edition>Community</version.edition>
 | 
			
		||||
        <licenseName>community</licenseName>
 | 
			
		||||
@@ -51,17 +51,18 @@
 | 
			
		||||
        <dependency.alfresco-log-sanitizer.version>0.2</dependency.alfresco-log-sanitizer.version>
 | 
			
		||||
        <dependency.activiti-engine.version>5.23.0</dependency.activiti-engine.version>
 | 
			
		||||
        <dependency.activiti.version>5.23.0</dependency.activiti.version>
 | 
			
		||||
        <dependency.alfresco-transform-model.version>1.4.15</dependency.alfresco-transform-model.version>
 | 
			
		||||
        <dependency.alfresco-transform-service.version>1.5.3</dependency.alfresco-transform-service.version>
 | 
			
		||||
        <dependency.alfresco-transform-core.version>2.6.0</dependency.alfresco-transform-core.version>
 | 
			
		||||
        <dependency.alfresco-greenmail.version>6.2</dependency.alfresco-greenmail.version>
 | 
			
		||||
        <dependency.acs-event-model.version>0.0.13</dependency.acs-event-model.version>
 | 
			
		||||
 | 
			
		||||
        <dependency.spring.version>5.3.15</dependency.spring.version>
 | 
			
		||||
        <dependency.spring.version>5.3.18</dependency.spring.version>
 | 
			
		||||
        <dependency.antlr.version>3.5.2</dependency.antlr.version>
 | 
			
		||||
        <dependency.jackson.version>2.13.1</dependency.jackson.version>
 | 
			
		||||
        <dependency.jackson-databind.version>2.13.1</dependency.jackson-databind.version>
 | 
			
		||||
        <dependency.cxf.version>3.5.0</dependency.cxf.version>
 | 
			
		||||
        <dependency.opencmis.version>1.0.0</dependency.opencmis.version>
 | 
			
		||||
        <dependency.webscripts.version>8.28</dependency.webscripts.version>
 | 
			
		||||
        <dependency.webscripts.version>8.29</dependency.webscripts.version>
 | 
			
		||||
        <dependency.bouncycastle.version>1.70</dependency.bouncycastle.version>
 | 
			
		||||
        <dependency.mockito-core.version>3.11.2</dependency.mockito-core.version>
 | 
			
		||||
        <dependency.org-json.version>20211205</dependency.org-json.version>
 | 
			
		||||
@@ -118,7 +119,7 @@
 | 
			
		||||
        <dependency.mariadb.version>2.7.4</dependency.mariadb.version>
 | 
			
		||||
        <dependency.tas-utility.version>3.0.47</dependency.tas-utility.version>
 | 
			
		||||
        <dependency.rest-assured.version>3.3.0</dependency.rest-assured.version>
 | 
			
		||||
        <dependency.tas-restapi.version>1.79</dependency.tas-restapi.version>
 | 
			
		||||
        <dependency.tas-restapi.version>1.80</dependency.tas-restapi.version>
 | 
			
		||||
        <dependency.tas-cmis.version>1.31</dependency.tas-cmis.version>
 | 
			
		||||
        <dependency.tas-email.version>1.8</dependency.tas-email.version>
 | 
			
		||||
        <dependency.tas-webdav.version>1.6</dependency.tas-webdav.version>
 | 
			
		||||
@@ -887,7 +888,7 @@
 | 
			
		||||
                <plugin>
 | 
			
		||||
                    <groupId>io.fabric8</groupId>
 | 
			
		||||
                    <artifactId>docker-maven-plugin</artifactId>
 | 
			
		||||
                    <version>0.38.0</version>
 | 
			
		||||
                    <version>0.39.1</version>
 | 
			
		||||
                </plugin>
 | 
			
		||||
                <plugin>
 | 
			
		||||
                    <artifactId>maven-surefire-plugin</artifactId>
 | 
			
		||||
 
 | 
			
		||||
@@ -7,7 +7,7 @@
 | 
			
		||||
    <parent>
 | 
			
		||||
        <groupId>org.alfresco</groupId>
 | 
			
		||||
        <artifactId>alfresco-community-repo</artifactId>
 | 
			
		||||
        <version>14.146-SNAPSHOT</version>
 | 
			
		||||
        <version>23.1.0.23-SNAPSHOT</version>
 | 
			
		||||
    </parent>
 | 
			
		||||
 | 
			
		||||
    <dependencies>
 | 
			
		||||
 
 | 
			
		||||
@@ -406,82 +406,82 @@ public class WebDAVMethodTest
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    /* MNT-10555 Test */
 | 
			
		||||
    @Category(IntermittentlyFailingTests.class) // ACS-959
 | 
			
		||||
    @Test
 | 
			
		||||
    public void expiryLockTest()
 | 
			
		||||
    {
 | 
			
		||||
        // ACE-4347 extra debug logging just for this test so we can see what's going on when it next fails
 | 
			
		||||
        Level repoWebdavSaveLogLevel = Logger.getLogger("org.alfresco.repo.webdav").getLevel();
 | 
			
		||||
        Logger.getLogger("org.alfresco.repo.webdav").setLevel(Level.ALL);
 | 
			
		||||
        Level webdavProtocolSaveLogLevel = Logger.getLogger("org.alfresco.webdav.protocol").getLevel();
 | 
			
		||||
        Logger.getLogger("org.alfresco.webdav.protocol").setLevel(Level.ALL);
 | 
			
		||||
        try
 | 
			
		||||
        {
 | 
			
		||||
            setUpApplicationContext();
 | 
			
		||||
    
 | 
			
		||||
            req = new MockHttpServletRequest();
 | 
			
		||||
            resp = new MockHttpServletResponse();
 | 
			
		||||
    
 | 
			
		||||
            String rootPath = "/app:company_home";
 | 
			
		||||
            StoreRef storeRef = new StoreRef("workspace://SpacesStore");
 | 
			
		||||
            NodeRef storeRootNodeRef = nodeService.getRootNode(storeRef);
 | 
			
		||||
            List<NodeRef> nodeRefs = searchService.selectNodes(storeRootNodeRef, rootPath, null, namespaceService, false);
 | 
			
		||||
            NodeRef defaultRootNode = nodeRefs.get(0);
 | 
			
		||||
    
 | 
			
		||||
            NodeRef rootNodeRef = tenantService.getRootNode(nodeService, searchService, namespaceService, rootPath, defaultRootNode);
 | 
			
		||||
    
 | 
			
		||||
            // Create test folder.
 | 
			
		||||
            NodeRef folderNodeRef = nodeService.createNode(rootNodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("test"), ContentModel.TYPE_FOLDER,
 | 
			
		||||
                    Collections.<QName, Serializable> singletonMap(ContentModel.PROP_NAME, "WebDavMethodExpiryLockTest" + System.currentTimeMillis())).getChildRef();
 | 
			
		||||
    
 | 
			
		||||
            // Create test document.
 | 
			
		||||
            NodeRef nodeRef = nodeService.createNode(folderNodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("test"), ContentModel.TYPE_CONTENT,
 | 
			
		||||
                    Collections.<QName, Serializable> singletonMap(ContentModel.PROP_NAME, "text.txt")).getChildRef();
 | 
			
		||||
    
 | 
			
		||||
            lockMethod = new LockMethod();
 | 
			
		||||
            lockMethod.createExclusive = true;
 | 
			
		||||
            lockMethod.m_timeoutDuration = 1;
 | 
			
		||||
            lockMethod.setDetails(req, resp, webDAVHelper, nodeRef);
 | 
			
		||||
    
 | 
			
		||||
            transactionService.getRetryingTransactionHelper().doInTransaction(new RetryingTransactionHelper.RetryingTransactionCallback<Object>()
 | 
			
		||||
            {
 | 
			
		||||
                @Override
 | 
			
		||||
                public Object execute() throws Throwable
 | 
			
		||||
                {
 | 
			
		||||
                    try
 | 
			
		||||
                {
 | 
			
		||||
                    // LOCK document.
 | 
			
		||||
                    lockMethod.executeImpl();
 | 
			
		||||
                    
 | 
			
		||||
                    //wait for the lock to expire up to 5 seconds
 | 
			
		||||
                    int timeout = 5;
 | 
			
		||||
                    while( timeout > 0 && !lockMethod.lockInfo.isExpired())
 | 
			
		||||
                    {
 | 
			
		||||
                        Thread.sleep(1000);
 | 
			
		||||
                        timeout--;
 | 
			
		||||
                    }
 | 
			
		||||
                    
 | 
			
		||||
                    // LOCK against an expired lock.
 | 
			
		||||
                    lockMethod.executeImpl();
 | 
			
		||||
                }
 | 
			
		||||
                catch (WebDAVServerException e)
 | 
			
		||||
                {
 | 
			
		||||
                    logger.debug(e);
 | 
			
		||||
                    Assert.fail("Document was not locked again, when lock has expired.");
 | 
			
		||||
                }
 | 
			
		||||
                return null;
 | 
			
		||||
                }
 | 
			
		||||
            });
 | 
			
		||||
    
 | 
			
		||||
            // Remove test folder.
 | 
			
		||||
            nodeService.deleteNode(folderNodeRef);
 | 
			
		||||
        }
 | 
			
		||||
        finally
 | 
			
		||||
        {
 | 
			
		||||
            Logger.getLogger("org.alfresco.webdav.protocol").setLevel(webdavProtocolSaveLogLevel);
 | 
			
		||||
            Logger.getLogger("org.alfresco.repo.webdav").setLevel(repoWebdavSaveLogLevel);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
//    @Category(IntermittentlyFailingTests.class) // ACS-959
 | 
			
		||||
//    @Test
 | 
			
		||||
//    public void expiryLockTest()
 | 
			
		||||
//    {
 | 
			
		||||
//        // ACE-4347 extra debug logging just for this test so we can see what's going on when it next fails
 | 
			
		||||
//        Level repoWebdavSaveLogLevel = Logger.getLogger("org.alfresco.repo.webdav").getLevel();
 | 
			
		||||
//        Logger.getLogger("org.alfresco.repo.webdav").setLevel(Level.ALL);
 | 
			
		||||
//        Level webdavProtocolSaveLogLevel = Logger.getLogger("org.alfresco.webdav.protocol").getLevel();
 | 
			
		||||
//        Logger.getLogger("org.alfresco.webdav.protocol").setLevel(Level.ALL);
 | 
			
		||||
//        try
 | 
			
		||||
//        {
 | 
			
		||||
//            setUpApplicationContext();
 | 
			
		||||
//
 | 
			
		||||
//            req = new MockHttpServletRequest();
 | 
			
		||||
//            resp = new MockHttpServletResponse();
 | 
			
		||||
//
 | 
			
		||||
//            String rootPath = "/app:company_home";
 | 
			
		||||
//            StoreRef storeRef = new StoreRef("workspace://SpacesStore");
 | 
			
		||||
//            NodeRef storeRootNodeRef = nodeService.getRootNode(storeRef);
 | 
			
		||||
//            List<NodeRef> nodeRefs = searchService.selectNodes(storeRootNodeRef, rootPath, null, namespaceService, false);
 | 
			
		||||
//            NodeRef defaultRootNode = nodeRefs.get(0);
 | 
			
		||||
//
 | 
			
		||||
//            NodeRef rootNodeRef = tenantService.getRootNode(nodeService, searchService, namespaceService, rootPath, defaultRootNode);
 | 
			
		||||
//
 | 
			
		||||
//            // Create test folder.
 | 
			
		||||
//            NodeRef folderNodeRef = nodeService.createNode(rootNodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("test"), ContentModel.TYPE_FOLDER,
 | 
			
		||||
//                    Collections.<QName, Serializable> singletonMap(ContentModel.PROP_NAME, "WebDavMethodExpiryLockTest" + System.currentTimeMillis())).getChildRef();
 | 
			
		||||
//
 | 
			
		||||
//            // Create test document.
 | 
			
		||||
//            NodeRef nodeRef = nodeService.createNode(folderNodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("test"), ContentModel.TYPE_CONTENT,
 | 
			
		||||
//                    Collections.<QName, Serializable> singletonMap(ContentModel.PROP_NAME, "text.txt")).getChildRef();
 | 
			
		||||
//
 | 
			
		||||
//            lockMethod = new LockMethod();
 | 
			
		||||
//            lockMethod.createExclusive = true;
 | 
			
		||||
//            lockMethod.m_timeoutDuration = 1;
 | 
			
		||||
//            lockMethod.setDetails(req, resp, webDAVHelper, nodeRef);
 | 
			
		||||
//
 | 
			
		||||
//            transactionService.getRetryingTransactionHelper().doInTransaction(new RetryingTransactionHelper.RetryingTransactionCallback<Object>()
 | 
			
		||||
//            {
 | 
			
		||||
//                @Override
 | 
			
		||||
//                public Object execute() throws Throwable
 | 
			
		||||
//                {
 | 
			
		||||
//                    try
 | 
			
		||||
//                {
 | 
			
		||||
//                    // LOCK document.
 | 
			
		||||
//                    lockMethod.executeImpl();
 | 
			
		||||
//
 | 
			
		||||
//                    //wait for the lock to expire up to 5 seconds
 | 
			
		||||
//                    int timeout = 5;
 | 
			
		||||
//                    while( timeout > 0 && !lockMethod.lockInfo.isExpired())
 | 
			
		||||
//                    {
 | 
			
		||||
//                        Thread.sleep(1000);
 | 
			
		||||
//                        timeout--;
 | 
			
		||||
//                    }
 | 
			
		||||
//
 | 
			
		||||
//                    // LOCK against an expired lock.
 | 
			
		||||
//                    lockMethod.executeImpl();
 | 
			
		||||
//                }
 | 
			
		||||
//                catch (WebDAVServerException e)
 | 
			
		||||
//                {
 | 
			
		||||
//                    logger.debug(e);
 | 
			
		||||
//                    Assert.fail("Document was not locked again, when lock has expired.");
 | 
			
		||||
//                }
 | 
			
		||||
//                return null;
 | 
			
		||||
//                }
 | 
			
		||||
//            });
 | 
			
		||||
//
 | 
			
		||||
//            // Remove test folder.
 | 
			
		||||
//            nodeService.deleteNode(folderNodeRef);
 | 
			
		||||
//        }
 | 
			
		||||
//        finally
 | 
			
		||||
//        {
 | 
			
		||||
//            Logger.getLogger("org.alfresco.webdav.protocol").setLevel(webdavProtocolSaveLogLevel);
 | 
			
		||||
//            Logger.getLogger("org.alfresco.repo.webdav").setLevel(repoWebdavSaveLogLevel);
 | 
			
		||||
//        }
 | 
			
		||||
//    }
 | 
			
		||||
    
 | 
			
		||||
    private void assertStatusCode(int expectedStatusCode, String userAgent)
 | 
			
		||||
    {
 | 
			
		||||
 
 | 
			
		||||
@@ -7,7 +7,7 @@
 | 
			
		||||
    <parent>
 | 
			
		||||
        <groupId>org.alfresco</groupId>
 | 
			
		||||
        <artifactId>alfresco-community-repo</artifactId>
 | 
			
		||||
        <version>14.146-SNAPSHOT</version>
 | 
			
		||||
        <version>23.1.0.23-SNAPSHOT</version>
 | 
			
		||||
    </parent>
 | 
			
		||||
 | 
			
		||||
    <dependencies>
 | 
			
		||||
@@ -713,7 +713,7 @@
 | 
			
		||||
        <dependency>
 | 
			
		||||
            <groupId>org.alfresco</groupId>
 | 
			
		||||
            <artifactId>alfresco-transform-model</artifactId>
 | 
			
		||||
            <version>${dependency.alfresco-transform-model.version}</version>
 | 
			
		||||
            <version>${dependency.alfresco-transform-core.version}</version>
 | 
			
		||||
        </dependency>
 | 
			
		||||
 | 
			
		||||
        <!-- Test dependencies -->
 | 
			
		||||
@@ -735,7 +735,7 @@
 | 
			
		||||
        <dependency>
 | 
			
		||||
            <groupId>org.alfresco</groupId>
 | 
			
		||||
            <artifactId>alfresco-transform-model</artifactId>
 | 
			
		||||
            <version>${dependency.alfresco-transform-model.version}</version>
 | 
			
		||||
            <version>${dependency.alfresco-transform-core.version}</version>
 | 
			
		||||
            <classifier>tests</classifier>
 | 
			
		||||
            <scope>test</scope>
 | 
			
		||||
        </dependency>
 | 
			
		||||
 
 | 
			
		||||
@@ -0,0 +1,93 @@
 | 
			
		||||
/*
 | 
			
		||||
 * #%L
 | 
			
		||||
 * Alfresco Repository
 | 
			
		||||
 * %%
 | 
			
		||||
 * Copyright (C) 2022 Alfresco Software Limited
 | 
			
		||||
 * %%
 | 
			
		||||
 * This file is part of the Alfresco software.
 | 
			
		||||
 * If the software was purchased under a paid Alfresco license, the terms of
 | 
			
		||||
 * the paid license agreement will prevail.  Otherwise, the software is
 | 
			
		||||
 * provided under the following open source license terms:
 | 
			
		||||
 *
 | 
			
		||||
 * Alfresco is free software: you can redistribute it and/or modify
 | 
			
		||||
 * it under the terms of the GNU Lesser General Public License as published by
 | 
			
		||||
 * the Free Software Foundation, either version 3 of the License, or
 | 
			
		||||
 * (at your option) any later version.
 | 
			
		||||
 *
 | 
			
		||||
 * Alfresco is distributed in the hope that it will be useful,
 | 
			
		||||
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
			
		||||
 * GNU Lesser General Public License for more details.
 | 
			
		||||
 *
 | 
			
		||||
 * You should have received a copy of the GNU Lesser General Public License
 | 
			
		||||
 * along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 * #L%
 | 
			
		||||
 */
 | 
			
		||||
package org.alfresco.repo.action;
 | 
			
		||||
 | 
			
		||||
import java.util.Objects;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Instances of this class are responsible for holding an action id with additional data used to identify the action's
 | 
			
		||||
 * execution context like:
 | 
			
		||||
 * <ul>
 | 
			
		||||
 *     <li>REST API</li>
 | 
			
		||||
 *     <li>rules execution</li>
 | 
			
		||||
 *     <li>...</li>
 | 
			
		||||
 * </ul>
 | 
			
		||||
 */
 | 
			
		||||
public class ActionExecutionContext
 | 
			
		||||
{
 | 
			
		||||
    private final String actionId;
 | 
			
		||||
    private final String executionSource;
 | 
			
		||||
 | 
			
		||||
    private ActionExecutionContext(String actionId, String executionSource)
 | 
			
		||||
    {
 | 
			
		||||
        this.actionId = actionId;
 | 
			
		||||
        this.executionSource = executionSource;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    String getActionId()
 | 
			
		||||
    {
 | 
			
		||||
        return actionId;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    String getExecutionSource()
 | 
			
		||||
    {
 | 
			
		||||
        return executionSource;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    boolean isExecutionSourceKnown()
 | 
			
		||||
    {
 | 
			
		||||
        return Objects.nonNull(executionSource);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static Builder builder(final String actionId)
 | 
			
		||||
    {
 | 
			
		||||
        Objects.requireNonNull(actionId);
 | 
			
		||||
        return new Builder(actionId);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static class Builder
 | 
			
		||||
    {
 | 
			
		||||
        private final String actionId;
 | 
			
		||||
        private String executionSource;
 | 
			
		||||
 | 
			
		||||
        private Builder(String actionId)
 | 
			
		||||
        {
 | 
			
		||||
            this.actionId = actionId;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public ActionExecutionContext build()
 | 
			
		||||
        {
 | 
			
		||||
            return new ActionExecutionContext(actionId, executionSource);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public Builder withExecutionSource(final String executionSource)
 | 
			
		||||
        {
 | 
			
		||||
            Objects.requireNonNull(executionSource);
 | 
			
		||||
            this.executionSource = executionSource;
 | 
			
		||||
            return this;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -2,7 +2,7 @@
 | 
			
		||||
 * #%L
 | 
			
		||||
 * Alfresco Repository
 | 
			
		||||
 * %%
 | 
			
		||||
 * Copyright (C) 2005 - 2020 Alfresco Software Limited
 | 
			
		||||
 * Copyright (C) 2005 - 2022 Alfresco Software Limited
 | 
			
		||||
 * %%
 | 
			
		||||
 * This file is part of the Alfresco software. 
 | 
			
		||||
 * If the software was purchased under a paid Alfresco license, the terms of 
 | 
			
		||||
@@ -33,7 +33,14 @@ import java.util.HashMap;
 | 
			
		||||
import java.util.HashSet;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
import java.util.Objects;
 | 
			
		||||
import java.util.Optional;
 | 
			
		||||
import java.util.Properties;
 | 
			
		||||
import java.util.Set;
 | 
			
		||||
import java.util.function.Function;
 | 
			
		||||
import java.util.function.Predicate;
 | 
			
		||||
import java.util.stream.Collectors;
 | 
			
		||||
import java.util.stream.Stream;
 | 
			
		||||
 | 
			
		||||
import org.alfresco.model.ContentModel;
 | 
			
		||||
import org.alfresco.repo.action.evaluator.ActionConditionEvaluator;
 | 
			
		||||
@@ -120,6 +127,8 @@ public class ActionServiceImpl implements ActionService, RuntimeActionService, A
 | 
			
		||||
    private ActionTrackingService actionTrackingService;
 | 
			
		||||
    private PolicyComponent policyComponent;
 | 
			
		||||
    private ActionServiceMonitor monitor;
 | 
			
		||||
    private Properties configProperties;
 | 
			
		||||
    private ActionExecutionValidator actionExecutionValidator;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * The asynchronous action execution queues map of name, queue
 | 
			
		||||
@@ -236,7 +245,17 @@ public class ActionServiceImpl implements ActionService, RuntimeActionService, A
 | 
			
		||||
    {
 | 
			
		||||
        this.asynchronousActionExecutionQueues = asynchronousActionExecutionQueues;
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    public void setConfigurationProperties(Properties properties)
 | 
			
		||||
    {
 | 
			
		||||
        this.configProperties = properties;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    protected Properties getConfigurationProperties()
 | 
			
		||||
    {
 | 
			
		||||
        return configProperties;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * This method registers an {@link AsynchronousActionExecutionQueue} with the {@link ActionService}.
 | 
			
		||||
     * @param key String
 | 
			
		||||
@@ -256,6 +275,11 @@ public class ActionServiceImpl implements ActionService, RuntimeActionService, A
 | 
			
		||||
                    ActionModel.TYPE_ACTION_PARAMETER, new JavaBehaviour(this, "getCopyCallback"));
 | 
			
		||||
        this.policyComponent.bindClassBehaviour(QName.createQName(NamespaceService.ALFRESCO_URI, "onCopyComplete"),
 | 
			
		||||
                    ActionModel.TYPE_ACTION_PARAMETER, new JavaBehaviour(this, "onCopyComplete"));
 | 
			
		||||
        if (configProperties == null)
 | 
			
		||||
        {
 | 
			
		||||
            configProperties = applicationContext.getBean("global-properties", Properties.class);
 | 
			
		||||
        }
 | 
			
		||||
        actionExecutionValidator = new ActionExecutionValidator(configProperties::getProperty, actionDefinitions::containsKey);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
@@ -1870,5 +1894,58 @@ public class ActionServiceImpl implements ActionService, RuntimeActionService, A
 | 
			
		||||
        LoggingAwareExecuter executer = (LoggingAwareExecuter) this.applicationContext.getBean(action.getActionDefinitionName());
 | 
			
		||||
        return executer.onLogException(logger,t, message);
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public boolean isExposed(ActionExecutionContext actionExecutionContext)
 | 
			
		||||
    {
 | 
			
		||||
        return actionExecutionValidator.isExposed(actionExecutionContext);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    static class ActionExecutionValidator
 | 
			
		||||
    {
 | 
			
		||||
        private final Function<String, String> config;
 | 
			
		||||
        private final Predicate<String> isPublic;
 | 
			
		||||
 | 
			
		||||
        ActionExecutionValidator(Function<String, String> config, Predicate<String> isPublic)
 | 
			
		||||
        {
 | 
			
		||||
            this.config = Objects.requireNonNull(config);
 | 
			
		||||
            this.isPublic = Objects.requireNonNull(isPublic);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        boolean isExposed(ActionExecutionContext actionExecutionContext)
 | 
			
		||||
        {
 | 
			
		||||
            Objects.requireNonNull(actionExecutionContext);
 | 
			
		||||
            return isExposedInConfig(actionExecutionContext).orElseGet(() -> isPublic(actionExecutionContext));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private Optional<Boolean> isExposedInConfig(ActionExecutionContext actionExecutionContext)
 | 
			
		||||
        {
 | 
			
		||||
            return getConfigKeys(actionExecutionContext).
 | 
			
		||||
                    map(config).
 | 
			
		||||
                    filter(Objects::nonNull).
 | 
			
		||||
                    map(Boolean::parseBoolean).
 | 
			
		||||
                    findFirst();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private Boolean isPublic(ActionExecutionContext actionExecutionContext)
 | 
			
		||||
        {
 | 
			
		||||
            return isPublic.test(actionExecutionContext.getActionId());
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private static Stream<String> getConfigKeys(ActionExecutionContext actionExecutionContext)
 | 
			
		||||
        {
 | 
			
		||||
            if (actionExecutionContext.isExecutionSourceKnown())
 | 
			
		||||
            {
 | 
			
		||||
                return Stream.of(
 | 
			
		||||
                        getConfigKey(actionExecutionContext.getExecutionSource(), actionExecutionContext.getActionId()),
 | 
			
		||||
                        getConfigKey(actionExecutionContext.getActionId()));
 | 
			
		||||
            }
 | 
			
		||||
            return Stream.of(getConfigKey(actionExecutionContext.getActionId()));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        static String getConfigKey(String... parts)
 | 
			
		||||
        {
 | 
			
		||||
            return Stream.of(parts).collect(Collectors.joining(".", "org.alfresco.repo.action.", ".exposed"));
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -2,7 +2,7 @@
 | 
			
		||||
 * #%L
 | 
			
		||||
 * Alfresco Repository
 | 
			
		||||
 * %%
 | 
			
		||||
 * Copyright (C) 2005 - 2016 Alfresco Software Limited
 | 
			
		||||
 * Copyright (C) 2005 - 2022 Alfresco Software Limited
 | 
			
		||||
 * %%
 | 
			
		||||
 * This file is part of the Alfresco software. 
 | 
			
		||||
 * If the software was purchased under a paid Alfresco license, the terms of 
 | 
			
		||||
@@ -125,4 +125,14 @@ public interface RuntimeActionService
 | 
			
		||||
     * @return true if it was handled, false for default handling
 | 
			
		||||
     */
 | 
			
		||||
    public boolean onLogException(Action action, Log logger, Throwable t, String message);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Allows you to check if an action can be executed/used in a given execution context
 | 
			
		||||
     * @param actionExecutionContext describes action and its execution context
 | 
			
		||||
     * @return true if action can be executed, false otherwise
 | 
			
		||||
     */
 | 
			
		||||
    default boolean isExposed(ActionExecutionContext actionExecutionContext)
 | 
			
		||||
    {
 | 
			
		||||
        return true;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -91,7 +91,7 @@ public class EventGeneratorQueue implements InitializingBean
 | 
			
		||||
            }
 | 
			
		||||
            catch (Exception e)
 | 
			
		||||
            {
 | 
			
		||||
                LOGGER.error("Unexpected error while enqueuing maker function for repository event" + e);
 | 
			
		||||
                LOGGER.error("Unexpected error while enqueuing maker function for repository event", e);
 | 
			
		||||
            }
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
@@ -122,7 +122,7 @@ public class EventGeneratorQueue implements InitializingBean
 | 
			
		||||
                        }
 | 
			
		||||
                        catch (Exception e)
 | 
			
		||||
                        {
 | 
			
		||||
                            LOGGER.error("Unexpected error while dequeuing and sending repository event" + e);
 | 
			
		||||
                            LOGGER.error("Unexpected error while dequeuing and sending repository event", e);
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
 
 | 
			
		||||
@@ -25,27 +25,15 @@
 | 
			
		||||
 */
 | 
			
		||||
package org.alfresco.repo.security.permissions.impl.acegi;
 | 
			
		||||
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
import java.util.BitSet;
 | 
			
		||||
import java.util.Collection;
 | 
			
		||||
import java.util.HashMap;
 | 
			
		||||
import java.util.HashSet;
 | 
			
		||||
import java.util.Iterator;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
import java.util.Set;
 | 
			
		||||
import java.util.StringTokenizer;
 | 
			
		||||
 | 
			
		||||
import net.sf.acegisecurity.AccessDeniedException;
 | 
			
		||||
import net.sf.acegisecurity.Authentication;
 | 
			
		||||
import net.sf.acegisecurity.ConfigAttribute;
 | 
			
		||||
import net.sf.acegisecurity.ConfigAttributeDefinition;
 | 
			
		||||
import net.sf.acegisecurity.afterinvocation.AfterInvocationProvider;
 | 
			
		||||
 | 
			
		||||
import org.alfresco.opencmis.search.CMISResultSet;
 | 
			
		||||
import org.alfresco.repo.search.SearchEngineResultSet;
 | 
			
		||||
import org.alfresco.repo.search.SimpleResultSetMetaData;
 | 
			
		||||
import org.alfresco.repo.search.impl.lucene.PagingLuceneResultSet;
 | 
			
		||||
import org.alfresco.repo.search.impl.solr.SolrJSONResultSet;
 | 
			
		||||
import org.alfresco.repo.search.impl.querymodel.QueryEngineResults;
 | 
			
		||||
import org.alfresco.repo.security.authentication.AuthenticationUtil;
 | 
			
		||||
import org.alfresco.repo.security.permissions.PermissionCheckCollection;
 | 
			
		||||
@@ -72,6 +60,17 @@ import org.apache.commons.logging.Log;
 | 
			
		||||
import org.apache.commons.logging.LogFactory;
 | 
			
		||||
import org.springframework.beans.factory.InitializingBean;
 | 
			
		||||
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
import java.util.BitSet;
 | 
			
		||||
import java.util.Collection;
 | 
			
		||||
import java.util.HashMap;
 | 
			
		||||
import java.util.HashSet;
 | 
			
		||||
import java.util.Iterator;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
import java.util.Set;
 | 
			
		||||
import java.util.StringTokenizer;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Enforce permission after the method call
 | 
			
		||||
 * 
 | 
			
		||||
@@ -276,8 +275,8 @@ public class ACLEntryAfterInvocationProvider implements AfterInvocationProvider,
 | 
			
		||||
            {
 | 
			
		||||
                return decide(authentication, object, config, (ChildAssociationRef) returnedObject);
 | 
			
		||||
            }
 | 
			
		||||
            else if (SolrJSONResultSet.class.isAssignableFrom(returnedObject.getClass()) &&
 | 
			
		||||
                        (!anyDenyDenies || (!postProcessDenies && ((SolrJSONResultSet)returnedObject).getProcessedDenies())))
 | 
			
		||||
            else if (SearchEngineResultSet.class.isAssignableFrom(returnedObject.getClass()) &&
 | 
			
		||||
                        (!anyDenyDenies || (!postProcessDenies && ((SearchEngineResultSet)returnedObject).getProcessedDenies())))
 | 
			
		||||
            {
 | 
			
		||||
                return returnedObject;
 | 
			
		||||
            }
 | 
			
		||||
 
 | 
			
		||||
@@ -75,6 +75,9 @@
 | 
			
		||||
        <property name="monitor">
 | 
			
		||||
            <ref bean="actionServiceMonitor"/>
 | 
			
		||||
        </property>
 | 
			
		||||
        <property name="configurationProperties">
 | 
			
		||||
            <ref bean="global-properties"/>
 | 
			
		||||
        </property>
 | 
			
		||||
    </bean>
 | 
			
		||||
 | 
			
		||||
    <bean id="defaultAsynchronousActionExecutionQueue" class="org.alfresco.repo.action.AsynchronousActionExecutionQueueImpl" init-method="init">
 | 
			
		||||
 
 | 
			
		||||
@@ -3,7 +3,7 @@
 | 
			
		||||
repository.name=Main Repository
 | 
			
		||||
 | 
			
		||||
# Schema number
 | 
			
		||||
version.schema=16000
 | 
			
		||||
version.schema=17000
 | 
			
		||||
 | 
			
		||||
# Directory configuration
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -176,6 +176,7 @@ import org.junit.runners.Suite;
 | 
			
		||||
    org.alfresco.repo.action.CompositeActionImplTest.class,
 | 
			
		||||
    org.alfresco.repo.action.CompositeActionConditionImplTest.class,
 | 
			
		||||
    org.alfresco.repo.action.executer.TransformActionExecuterTest.class,
 | 
			
		||||
    org.alfresco.repo.action.PrivateActionValidationTest.class,
 | 
			
		||||
    org.alfresco.repo.audit.AuditableAnnotationTest.class,
 | 
			
		||||
    org.alfresco.repo.audit.PropertyAuditFilterTest.class,
 | 
			
		||||
    org.alfresco.repo.audit.access.NodeChangeTest.class,
 | 
			
		||||
 
 | 
			
		||||
@@ -25,6 +25,9 @@
 | 
			
		||||
 */
 | 
			
		||||
package org.alfresco.opencmis;
 | 
			
		||||
 | 
			
		||||
import static java.time.Duration.of;
 | 
			
		||||
import static java.time.temporal.ChronoUnit.MILLIS;
 | 
			
		||||
 | 
			
		||||
import java.io.ByteArrayInputStream;
 | 
			
		||||
import java.io.File;
 | 
			
		||||
import java.io.IOException;
 | 
			
		||||
@@ -61,7 +64,7 @@ import org.alfresco.util.ApplicationContextHelper;
 | 
			
		||||
import org.alfresco.util.FileFilterMode.Client;
 | 
			
		||||
import org.alfresco.util.GUID;
 | 
			
		||||
import org.alfresco.util.TempFileProvider;
 | 
			
		||||
import org.alfresco.util.testing.category.FrequentlyFailingTests;
 | 
			
		||||
import org.alfresco.util.TestHelper;
 | 
			
		||||
import org.alfresco.util.testing.category.LuceneTests;
 | 
			
		||||
import org.aopalliance.intercept.MethodInterceptor;
 | 
			
		||||
import org.aopalliance.intercept.MethodInvocation;
 | 
			
		||||
@@ -77,6 +80,7 @@ import org.apache.chemistry.opencmis.commons.data.ContentStream;
 | 
			
		||||
import org.apache.chemistry.opencmis.commons.enums.BaseTypeId;
 | 
			
		||||
import org.apache.chemistry.opencmis.commons.enums.BindingType;
 | 
			
		||||
import org.apache.chemistry.opencmis.commons.enums.VersioningState;
 | 
			
		||||
import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
 | 
			
		||||
import org.apache.chemistry.opencmis.commons.exceptions.CmisStorageException;
 | 
			
		||||
import org.apache.chemistry.opencmis.commons.impl.dataobjects.ContentStreamImpl;
 | 
			
		||||
import org.apache.chemistry.opencmis.commons.impl.server.AbstractServiceFactory;
 | 
			
		||||
@@ -87,6 +91,7 @@ import org.apache.chemistry.opencmis.server.shared.TempStoreOutputStreamFactory;
 | 
			
		||||
import org.junit.experimental.categories.Category;
 | 
			
		||||
import org.springframework.aop.framework.ProxyFactory;
 | 
			
		||||
import org.springframework.context.ApplicationContext;
 | 
			
		||||
import org.springframework.dao.ConcurrencyFailureException;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Tests basic local CMIS interaction
 | 
			
		||||
@@ -467,7 +472,6 @@ public class OpenCmisLocalTest extends TestCase
 | 
			
		||||
     * This test would have fit better within CheckOutCheckInServiceImplTest but
 | 
			
		||||
     * was added here to make use of existing methods
 | 
			
		||||
     */
 | 
			
		||||
    @Category(FrequentlyFailingTests.class) // ACS-962
 | 
			
		||||
    public void testCancelCheckoutWhileInCheckedOutState()
 | 
			
		||||
    {
 | 
			
		||||
        ServiceRegistry serviceRegistry = (ServiceRegistry) ctx.getBean(ServiceRegistry.SERVICE_REGISTRY);
 | 
			
		||||
@@ -484,7 +488,7 @@ public class OpenCmisLocalTest extends TestCase
 | 
			
		||||
 | 
			
		||||
        // Set file properties
 | 
			
		||||
        String docname = "myDoc-" + GUID.generate() + ".txt";
 | 
			
		||||
        Map<String, String> props = new HashMap<String, String>();
 | 
			
		||||
        Map<String, String> props = new HashMap<>();
 | 
			
		||||
        {
 | 
			
		||||
            props.put(PropertyIds.OBJECT_TYPE_ID, BaseTypeId.CMIS_DOCUMENT.value());
 | 
			
		||||
            props.put(PropertyIds.NAME, docname);
 | 
			
		||||
@@ -501,7 +505,9 @@ public class OpenCmisLocalTest extends TestCase
 | 
			
		||||
        NodeRef doc1WorkingCopy = cociService.getWorkingCopy(doc1NodeRef);
 | 
			
		||||
 | 
			
		||||
        /* Cancel Checkout */
 | 
			
		||||
        cociService.cancelCheckout(doc1WorkingCopy);
 | 
			
		||||
        TestHelper.waitForMethodToFinish(of(100, MILLIS), () ->
 | 
			
		||||
                cociService.cancelCheckout(doc1WorkingCopy),
 | 
			
		||||
                CmisRuntimeException.class, ConcurrencyFailureException.class);
 | 
			
		||||
 | 
			
		||||
        /* Check if both the working copy and the document were deleted */
 | 
			
		||||
        NodeService nodeService = serviceRegistry.getNodeService();
 | 
			
		||||
 
 | 
			
		||||
@@ -2,7 +2,7 @@
 | 
			
		||||
 * #%L
 | 
			
		||||
 * Alfresco Repository
 | 
			
		||||
 * %%
 | 
			
		||||
 * Copyright (C) 2005 - 2016 Alfresco Software Limited
 | 
			
		||||
 * Copyright (C) 2005 - 2022 Alfresco Software Limited
 | 
			
		||||
 * %%
 | 
			
		||||
 * This file is part of the Alfresco software. 
 | 
			
		||||
 * If the software was purchased under a paid Alfresco license, the terms of 
 | 
			
		||||
@@ -25,28 +25,27 @@
 | 
			
		||||
 */
 | 
			
		||||
package org.alfresco.repo.action;
 | 
			
		||||
 | 
			
		||||
import static org.alfresco.repo.action.ActionExecutionContext.builder;
 | 
			
		||||
 | 
			
		||||
import java.io.Serializable;
 | 
			
		||||
import java.lang.reflect.Field;
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
import java.util.Arrays;
 | 
			
		||||
import java.util.Date;
 | 
			
		||||
import java.util.HashMap;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
import java.util.Properties;
 | 
			
		||||
 | 
			
		||||
import org.alfresco.model.ContentModel;
 | 
			
		||||
import org.alfresco.repo.action.evaluator.ComparePropertyValueEvaluator;
 | 
			
		||||
import org.alfresco.repo.action.evaluator.InCategoryEvaluator;
 | 
			
		||||
import org.alfresco.repo.action.evaluator.NoConditionEvaluator;
 | 
			
		||||
import org.alfresco.repo.action.evaluator.compare.ComparePropertyValueOperation;
 | 
			
		||||
import org.alfresco.repo.action.executer.ActionExecuter;
 | 
			
		||||
import org.alfresco.repo.action.executer.ActionExecuterAbstractBase;
 | 
			
		||||
import org.alfresco.repo.action.executer.AddFeaturesActionExecuter;
 | 
			
		||||
import org.alfresco.repo.action.executer.CheckInActionExecuter;
 | 
			
		||||
import org.alfresco.repo.action.executer.CheckOutActionExecuter;
 | 
			
		||||
import org.alfresco.repo.action.executer.CompositeActionExecuter;
 | 
			
		||||
import org.alfresco.repo.action.executer.MoveActionExecuter;
 | 
			
		||||
import org.alfresco.repo.action.executer.ScriptActionExecuter;
 | 
			
		||||
import org.alfresco.repo.content.MimetypeMap;
 | 
			
		||||
import org.alfresco.repo.security.authentication.AuthenticationUtil;
 | 
			
		||||
import org.alfresco.repo.transaction.RetryingTransactionHelper;
 | 
			
		||||
@@ -65,19 +64,14 @@ import org.alfresco.service.cmr.action.CompositeActionCondition;
 | 
			
		||||
import org.alfresco.service.cmr.action.ParameterDefinition;
 | 
			
		||||
import org.alfresco.service.cmr.coci.CheckOutCheckInService;
 | 
			
		||||
import org.alfresco.service.cmr.repository.ContentData;
 | 
			
		||||
import org.alfresco.service.cmr.repository.ContentWriter;
 | 
			
		||||
import org.alfresco.service.cmr.repository.NodeRef;
 | 
			
		||||
import org.alfresco.service.cmr.repository.NodeService;
 | 
			
		||||
import org.alfresco.service.cmr.security.PermissionService;
 | 
			
		||||
import org.alfresco.service.cmr.security.PersonService;
 | 
			
		||||
import org.alfresco.service.namespace.NamespaceService;
 | 
			
		||||
import org.alfresco.service.namespace.QName;
 | 
			
		||||
import org.alfresco.service.transaction.TransactionService;
 | 
			
		||||
import org.alfresco.test_category.BaseSpringTestsCategory;
 | 
			
		||||
import org.alfresco.util.ApplicationContextHelper;
 | 
			
		||||
import org.alfresco.util.BaseAlfrescoSpringTest;
 | 
			
		||||
import org.alfresco.util.GUID;
 | 
			
		||||
import org.alfresco.util.PropertyMap;
 | 
			
		||||
import org.junit.Before;
 | 
			
		||||
import org.junit.Test;
 | 
			
		||||
import org.junit.experimental.categories.Category;
 | 
			
		||||
@@ -103,13 +97,18 @@ public class ActionServiceImplTest extends BaseAlfrescoSpringTest
 | 
			
		||||
    private NodeRef nodeRef;
 | 
			
		||||
    private NodeRef folder;
 | 
			
		||||
    private RetryingTransactionHelper transactionHelper;
 | 
			
		||||
    private Properties globalConfig;
 | 
			
		||||
    private RuntimeActionService runtimeActionService;
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
    @Before
 | 
			
		||||
    public void before() throws Exception
 | 
			
		||||
    {
 | 
			
		||||
        super.before();
 | 
			
		||||
 | 
			
		||||
        this.transactionHelper = (RetryingTransactionHelper)this.applicationContext.getBean("retryingTransactionHelper");
 | 
			
		||||
        this.transactionHelper = applicationContext.getBean("retryingTransactionHelper", RetryingTransactionHelper.class);
 | 
			
		||||
        this.globalConfig = applicationContext.getBean("global-properties", Properties.class);
 | 
			
		||||
        this.runtimeActionService = this.applicationContext.getBean("actionService", RuntimeActionService.class);
 | 
			
		||||
 | 
			
		||||
        // Create the node used for tests
 | 
			
		||||
        this.nodeRef = this.nodeService.createNode(
 | 
			
		||||
@@ -1295,6 +1294,89 @@ public class ActionServiceImplTest extends BaseAlfrescoSpringTest
 | 
			
		||||
       assertEquals(123455, action.getExecutionEndDate().getTime());
 | 
			
		||||
       assertEquals(null, action.getExecutionFailureMessage());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void testActionExposureBasedOnConfiguration()
 | 
			
		||||
    {
 | 
			
		||||
        globalConfig.remove("org.alfresco.repo.action.public-test-action.exposed");
 | 
			
		||||
        globalConfig.remove("org.alfresco.repo.action.source.public-test-action.exposed");
 | 
			
		||||
        globalConfig.remove("org.alfresco.repo.action.unknown.public-test-action.exposed");
 | 
			
		||||
        assertTrue(runtimeActionService.isExposed(builder("public-test-action").build()));
 | 
			
		||||
        assertTrue(runtimeActionService.isExposed(builder("public-test-action").withExecutionSource("source").build()));
 | 
			
		||||
        assertTrue(runtimeActionService.isExposed(builder("public-test-action").withExecutionSource("unknown").build()));
 | 
			
		||||
 | 
			
		||||
        globalConfig.setProperty("org.alfresco.repo.action.public-test-action.exposed", "true");
 | 
			
		||||
        globalConfig.remove("org.alfresco.repo.action.source.public-test-action.exposed");
 | 
			
		||||
        globalConfig.remove("org.alfresco.repo.action.unknown.public-test-action.exposed");
 | 
			
		||||
        assertTrue(runtimeActionService.isExposed(builder("public-test-action").build()));
 | 
			
		||||
        assertTrue(runtimeActionService.isExposed(builder("public-test-action").withExecutionSource("source").build()));
 | 
			
		||||
        assertTrue(runtimeActionService.isExposed(builder("public-test-action").withExecutionSource("unknown").build()));
 | 
			
		||||
 | 
			
		||||
        globalConfig.setProperty("org.alfresco.repo.action.public-test-action.exposed", "false");
 | 
			
		||||
        globalConfig.remove("org.alfresco.repo.action.source.public-test-action.exposed");
 | 
			
		||||
        globalConfig.remove("org.alfresco.repo.action.unknown.public-test-action.exposed");
 | 
			
		||||
        assertFalse(runtimeActionService.isExposed(builder("public-test-action").build()));
 | 
			
		||||
        assertFalse(runtimeActionService.isExposed(builder("public-test-action").withExecutionSource("source").build()));
 | 
			
		||||
        assertFalse(runtimeActionService.isExposed(builder("public-test-action").withExecutionSource("unknown").build()));
 | 
			
		||||
 | 
			
		||||
        globalConfig.remove("org.alfresco.repo.action.public-test-action.exposed");
 | 
			
		||||
        globalConfig.setProperty("org.alfresco.repo.action.source.public-test-action.exposed", "true");
 | 
			
		||||
        globalConfig.remove("org.alfresco.repo.action.unknown.public-test-action.exposed");
 | 
			
		||||
        assertTrue(runtimeActionService.isExposed(builder("public-test-action").build()));
 | 
			
		||||
        assertTrue(runtimeActionService.isExposed(builder("public-test-action").withExecutionSource("source").build()));
 | 
			
		||||
        assertTrue(runtimeActionService.isExposed(builder("public-test-action").withExecutionSource("unknown").build()));
 | 
			
		||||
 | 
			
		||||
        globalConfig.remove("org.alfresco.repo.action.public-test-action.exposed");
 | 
			
		||||
        globalConfig.setProperty("org.alfresco.repo.action.source.public-test-action.exposed", "false");
 | 
			
		||||
        globalConfig.remove("org.alfresco.repo.action.unknown.public-test-action.exposed");
 | 
			
		||||
        assertTrue(runtimeActionService.isExposed(builder("public-test-action").build()));
 | 
			
		||||
        assertFalse(runtimeActionService.isExposed(builder("public-test-action").withExecutionSource("source").build()));
 | 
			
		||||
        assertTrue(runtimeActionService.isExposed(builder("public-test-action").withExecutionSource("unknown").build()));
 | 
			
		||||
 | 
			
		||||
        globalConfig.remove("org.alfresco.repo.action.private-test-action.exposed");
 | 
			
		||||
        globalConfig.remove("org.alfresco.repo.action.source.private-test-action.exposed");
 | 
			
		||||
        globalConfig.remove("org.alfresco.repo.action.unknown.private-test-action.exposed");
 | 
			
		||||
        assertFalse(runtimeActionService.isExposed(builder("private-test-action").build()));
 | 
			
		||||
        assertFalse(runtimeActionService.isExposed(builder("private-test-action").withExecutionSource("source").build()));
 | 
			
		||||
        assertFalse(runtimeActionService.isExposed(builder("private-test-action").withExecutionSource("unknown").build()));
 | 
			
		||||
 | 
			
		||||
        globalConfig.setProperty("org.alfresco.repo.action.private-test-action.exposed", "true");
 | 
			
		||||
        globalConfig.remove("org.alfresco.repo.action.source.private-test-action.exposed");
 | 
			
		||||
        globalConfig.remove("org.alfresco.repo.action.unknown.private-test-action.exposed");
 | 
			
		||||
        assertTrue(runtimeActionService.isExposed(builder("private-test-action").build()));
 | 
			
		||||
        assertTrue(runtimeActionService.isExposed(builder("private-test-action").withExecutionSource("source").build()));
 | 
			
		||||
        assertTrue(runtimeActionService.isExposed(builder("private-test-action").withExecutionSource("unknown").build()));
 | 
			
		||||
 | 
			
		||||
        globalConfig.setProperty("org.alfresco.repo.action.private-test-action.exposed", "false");
 | 
			
		||||
        globalConfig.remove("org.alfresco.repo.action.source.private-test-action.exposed");
 | 
			
		||||
        globalConfig.remove("org.alfresco.repo.action.unknown.private-test-action.exposed");
 | 
			
		||||
        assertFalse(runtimeActionService.isExposed(builder("private-test-action").build()));
 | 
			
		||||
        assertFalse(runtimeActionService.isExposed(builder("private-test-action").withExecutionSource("source").build()));
 | 
			
		||||
        assertFalse(runtimeActionService.isExposed(builder("private-test-action").withExecutionSource("unknown").build()));
 | 
			
		||||
 | 
			
		||||
        globalConfig.remove("org.alfresco.repo.action.private-test-action.exposed");
 | 
			
		||||
        globalConfig.setProperty("org.alfresco.repo.action.source.private-test-action.exposed", "true");
 | 
			
		||||
        globalConfig.remove("org.alfresco.repo.action.unknown.private-test-action.exposed");
 | 
			
		||||
        assertFalse(runtimeActionService.isExposed(builder("private-test-action").build()));
 | 
			
		||||
        assertTrue(runtimeActionService.isExposed(builder("private-test-action").withExecutionSource("source").build()));
 | 
			
		||||
        assertFalse(runtimeActionService.isExposed(builder("private-test-action").withExecutionSource("unknown").build()));
 | 
			
		||||
 | 
			
		||||
        globalConfig.remove("org.alfresco.repo.action.private-test-action.exposed");
 | 
			
		||||
        globalConfig.setProperty("org.alfresco.repo.action.source.private-test-action.exposed", "false");
 | 
			
		||||
        globalConfig.remove("org.alfresco.repo.action.unknown.private-test-action.exposed");
 | 
			
		||||
        assertFalse(runtimeActionService.isExposed(builder("private-test-action").build()));
 | 
			
		||||
        assertFalse(runtimeActionService.isExposed(builder("private-test-action").withExecutionSource("source").build()));
 | 
			
		||||
        assertFalse(runtimeActionService.isExposed(builder("private-test-action").withExecutionSource("unknown").build()));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void testIfGlobalConfigurationIsUsedEvenIfNotInjectedBySpring()
 | 
			
		||||
    {
 | 
			
		||||
        TestExtendedActionServiceImpl extended = applicationContext.getBean("extendedActionServiceWithoutConfigurationProperty", TestExtendedActionServiceImpl.class);
 | 
			
		||||
 | 
			
		||||
        assertNotNull(extended.getConfigurationProperties());
 | 
			
		||||
        assertSame(globalConfig, extended.getConfigurationProperties());
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    /**
 | 
			
		||||
     * This method returns an {@link Action} which will fail when executed.
 | 
			
		||||
@@ -1509,8 +1591,26 @@ public class ActionServiceImplTest extends BaseAlfrescoSpringTest
 | 
			
		||||
           throw new ActionServiceTransientException("action failed intentionally in " + TransientFailActionExecuter.class.getSimpleName());
 | 
			
		||||
       }
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    public static class NoOpActionExecuter extends ActionExecuterAbstractBase
 | 
			
		||||
    {
 | 
			
		||||
        @Override
 | 
			
		||||
        protected void addParameterDefinitions(List<ParameterDefinition> paramList)
 | 
			
		||||
        {
 | 
			
		||||
            //do nothing
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        @Override
 | 
			
		||||
        protected void executeImpl(Action action, NodeRef actionedUponNodeRef)
 | 
			
		||||
        {
 | 
			
		||||
            //do nothing
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static class TestExtendedActionServiceImpl extends ActionServiceImpl
 | 
			
		||||
    {
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    protected static class CancellableSleepAction extends ActionImpl implements CancellableAction
 | 
			
		||||
    {
 | 
			
		||||
 
 | 
			
		||||
@@ -0,0 +1,152 @@
 | 
			
		||||
/*
 | 
			
		||||
 * #%L
 | 
			
		||||
 * Alfresco Repository
 | 
			
		||||
 * %%
 | 
			
		||||
 * Copyright (C) 2005 - 2022 Alfresco Software Limited
 | 
			
		||||
 * %%
 | 
			
		||||
 * This file is part of the Alfresco software.
 | 
			
		||||
 * If the software was purchased under a paid Alfresco license, the terms of
 | 
			
		||||
 * the paid license agreement will prevail.  Otherwise, the software is
 | 
			
		||||
 * provided under the following open source license terms:
 | 
			
		||||
 *
 | 
			
		||||
 * Alfresco is free software: you can redistribute it and/or modify
 | 
			
		||||
 * it under the terms of the GNU Lesser General Public License as published by
 | 
			
		||||
 * the Free Software Foundation, either version 3 of the License, or
 | 
			
		||||
 * (at your option) any later version.
 | 
			
		||||
 *
 | 
			
		||||
 * Alfresco is distributed in the hope that it will be useful,
 | 
			
		||||
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
			
		||||
 * GNU Lesser General Public License for more details.
 | 
			
		||||
 *
 | 
			
		||||
 * You should have received a copy of the GNU Lesser General Public License
 | 
			
		||||
 * along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 * #L%
 | 
			
		||||
 */
 | 
			
		||||
package org.alfresco.repo.action;
 | 
			
		||||
 | 
			
		||||
import static org.alfresco.repo.action.ActionExecutionContext.builder;
 | 
			
		||||
import static org.junit.Assert.assertNotNull;
 | 
			
		||||
import static org.junit.Assert.fail;
 | 
			
		||||
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
import java.util.Set;
 | 
			
		||||
 | 
			
		||||
import org.alfresco.repo.action.ActionServiceImpl.ActionExecutionValidator;
 | 
			
		||||
import org.junit.Assert;
 | 
			
		||||
import org.junit.Test;
 | 
			
		||||
 | 
			
		||||
public class PrivateActionValidationTest
 | 
			
		||||
{
 | 
			
		||||
    @Test
 | 
			
		||||
    public void shouldFailOnNullContext()
 | 
			
		||||
    {
 | 
			
		||||
        final ActionExecutionValidator validator = givenActionExecutionValidator(Map.of(), Set.of());
 | 
			
		||||
 | 
			
		||||
        try
 | 
			
		||||
        {
 | 
			
		||||
            validator.isExposed(null);
 | 
			
		||||
        }
 | 
			
		||||
        catch (NullPointerException e)
 | 
			
		||||
        {
 | 
			
		||||
            assertNotNull(e);
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
        fail("Expected NPE.");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void privateActionShouldNotBeExposedByDefault()
 | 
			
		||||
    {
 | 
			
		||||
        final ActionExecutionValidator validator = givenActionExecutionValidator(Map.of(), Set.of());
 | 
			
		||||
 | 
			
		||||
        Assert.assertFalse(validator.isExposed(builder("privateA").build()));
 | 
			
		||||
        Assert.assertFalse(validator.isExposed(builder("privateA").withExecutionSource("test").build()));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void publicActionShouldBeExposedByDefault()
 | 
			
		||||
    {
 | 
			
		||||
        final ActionExecutionValidator validator = givenActionExecutionValidator(Map.of(), Set.of("publicA"));
 | 
			
		||||
 | 
			
		||||
        Assert.assertTrue(validator.isExposed(builder("publicA").build()));
 | 
			
		||||
        Assert.assertTrue(validator.isExposed(builder("publicA").withExecutionSource("test").build()));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void privateActionShouldBeExposedByConfigurationBasedOnActionId()
 | 
			
		||||
    {
 | 
			
		||||
        final ActionExecutionValidator validator = givenActionExecutionValidator(Map.of(
 | 
			
		||||
                "org.alfresco.repo.action.privateA.exposed", "true"), Set.of());
 | 
			
		||||
 | 
			
		||||
        Assert.assertTrue(validator.isExposed(builder("privateA").build()));
 | 
			
		||||
        Assert.assertTrue(validator.isExposed(builder("privateA").withExecutionSource("test").build()));
 | 
			
		||||
        Assert.assertTrue(validator.isExposed(builder("privateA").withExecutionSource("test2").build()));
 | 
			
		||||
 | 
			
		||||
        Assert.assertFalse(validator.isExposed(builder("privateB").build()));
 | 
			
		||||
        Assert.assertFalse(validator.isExposed(builder("privateB").withExecutionSource("test").build()));
 | 
			
		||||
        Assert.assertFalse(validator.isExposed(builder("privateB").withExecutionSource("test2").build()));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void privateActionShouldBeExposedByConfigurationBasedOnActionIdAndExecutionSource()
 | 
			
		||||
    {
 | 
			
		||||
        final ActionExecutionValidator validator = givenActionExecutionValidator(Map.of(
 | 
			
		||||
                "org.alfresco.repo.action.test.privateA.exposed", "true"), Set.of());
 | 
			
		||||
 | 
			
		||||
        Assert.assertFalse(validator.isExposed(builder("privateA").build()));
 | 
			
		||||
        Assert.assertTrue(validator.isExposed(builder("privateA").withExecutionSource("test").build()));
 | 
			
		||||
        Assert.assertFalse(validator.isExposed(builder("privateA").withExecutionSource("test2").build()));
 | 
			
		||||
 | 
			
		||||
        Assert.assertFalse(validator.isExposed(builder("privateB").build()));
 | 
			
		||||
        Assert.assertFalse(validator.isExposed(builder("privateB").withExecutionSource("test").build()));
 | 
			
		||||
        Assert.assertFalse(validator.isExposed(builder("privateB").withExecutionSource("test2").build()));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void executionSourceConfigurationShouldTakePrecedenceOverGeneralConfigurationForPrivateAction()
 | 
			
		||||
    {
 | 
			
		||||
        final ActionExecutionValidator validator = givenActionExecutionValidator(Map.of(
 | 
			
		||||
                "org.alfresco.repo.action.test.privateA.exposed", "true",
 | 
			
		||||
                "org.alfresco.repo.action.privateA.exposed", "false"), Set.of());
 | 
			
		||||
 | 
			
		||||
        Assert.assertFalse(validator.isExposed(builder("privateA").build()));
 | 
			
		||||
        Assert.assertTrue(validator.isExposed(builder("privateA").withExecutionSource("test").build()));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void publicActionShouldNotBeExposedByConfigurationBasedOnActionId()
 | 
			
		||||
    {
 | 
			
		||||
        final ActionExecutionValidator validator = givenActionExecutionValidator(Map.of(
 | 
			
		||||
                "org.alfresco.repo.action.publicA.exposed", "false"), Set.of("publicA"));
 | 
			
		||||
 | 
			
		||||
        Assert.assertFalse(validator.isExposed(builder("publicA").build()));
 | 
			
		||||
        Assert.assertFalse(validator.isExposed(builder("publicA").withExecutionSource("test").build()));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void publicActionShouldNotBeExposedByConfigurationBasedOnActionIdAndExecutionSource()
 | 
			
		||||
    {
 | 
			
		||||
        final ActionExecutionValidator validator = givenActionExecutionValidator(Map.of(
 | 
			
		||||
                "org.alfresco.repo.action.test.publicA.exposed", "false"), Set.of("publicA"));
 | 
			
		||||
 | 
			
		||||
        Assert.assertTrue(validator.isExposed(builder("publicA").build()));
 | 
			
		||||
        Assert.assertFalse(validator.isExposed(builder("publicA").withExecutionSource("test").build()));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void executionSourceConfigurationShouldTakePrecedenceOverGeneralConfigurationForPublicAction()
 | 
			
		||||
    {
 | 
			
		||||
        final ActionExecutionValidator validator = givenActionExecutionValidator(Map.of(
 | 
			
		||||
                "org.alfresco.repo.action.test.publicA.exposed", "false",
 | 
			
		||||
                "org.alfresco.repo.action.publicA.exposed", "true"), Set.of("publicA"));
 | 
			
		||||
 | 
			
		||||
        Assert.assertTrue(validator.isExposed(builder("publicA").build()));
 | 
			
		||||
        Assert.assertFalse(validator.isExposed(builder("publicA").withExecutionSource("test").build()));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private ActionExecutionValidator givenActionExecutionValidator(Map<String, String> configuration, Set<String> publicActions)
 | 
			
		||||
    {
 | 
			
		||||
        return new ActionExecutionValidator(configuration::get, publicActions::contains);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -29,7 +29,6 @@ import static java.time.Duration.of;
 | 
			
		||||
import static java.time.temporal.ChronoUnit.MILLIS;
 | 
			
		||||
import static java.time.temporal.ChronoUnit.SECONDS;
 | 
			
		||||
 | 
			
		||||
import java.time.Duration;
 | 
			
		||||
import java.util.concurrent.atomic.AtomicInteger;
 | 
			
		||||
 | 
			
		||||
import junit.framework.AssertionFailedError;
 | 
			
		||||
@@ -44,6 +43,7 @@ import org.alfresco.service.namespace.QName;
 | 
			
		||||
import org.alfresco.service.transaction.TransactionService;
 | 
			
		||||
import org.alfresco.test_category.OwnJVMTestsCategory;
 | 
			
		||||
import org.alfresco.util.ApplicationContextHelper;
 | 
			
		||||
import org.alfresco.util.TestHelper;
 | 
			
		||||
import org.alfresco.util.testing.category.DBTests;
 | 
			
		||||
import org.apache.commons.logging.Log;
 | 
			
		||||
import org.apache.commons.logging.LogFactory;
 | 
			
		||||
@@ -549,22 +549,22 @@ public class JobLockServiceTest extends TestCase
 | 
			
		||||
            
 | 
			
		||||
            if (callback == null) throw new IllegalStateException();
 | 
			
		||||
 | 
			
		||||
            waitForAssertion(of(100, MILLIS), () -> {
 | 
			
		||||
            TestHelper.waitForMethodToFinish(of(100, MILLIS), () -> {
 | 
			
		||||
                assertEquals(false,callback.released);
 | 
			
		||||
                assertEquals(0,callback.getIsActiveCount());
 | 
			
		||||
            });
 | 
			
		||||
            }, AssertionFailedError.class);
 | 
			
		||||
 | 
			
		||||
            waitForAssertion(of(1, SECONDS), () -> {
 | 
			
		||||
            TestHelper.waitForMethodToFinish(of(1, SECONDS), () -> {
 | 
			
		||||
                assertEquals(false, callback.released);
 | 
			
		||||
                assertEquals(1, callback.getIsActiveCount());
 | 
			
		||||
            });
 | 
			
		||||
            }, AssertionFailedError.class);
 | 
			
		||||
 | 
			
		||||
            callback.isActive = false;
 | 
			
		||||
 | 
			
		||||
            waitForAssertion(of(2, SECONDS), () -> {
 | 
			
		||||
            TestHelper.waitForMethodToFinish(of(2, SECONDS), () -> {
 | 
			
		||||
                assertEquals(true, callback.released);
 | 
			
		||||
                assertEquals(2, callback.getIsActiveCount());
 | 
			
		||||
            });
 | 
			
		||||
            }, AssertionFailedError.class);
 | 
			
		||||
        }
 | 
			
		||||
        catch (IllegalArgumentException e)
 | 
			
		||||
        {            
 | 
			
		||||
@@ -621,43 +621,6 @@ public class JobLockServiceTest extends TestCase
 | 
			
		||||
            Logger.getLogger("org.alfresco.repo.lock").setLevel(saveLogLevel);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private static void waitForAssertion(Duration timeout, Runnable assertion)
 | 
			
		||||
    {
 | 
			
		||||
        logger.debug("Waiting for assertion to succeed.");
 | 
			
		||||
        final long lastStep = 10;
 | 
			
		||||
        final long delayMillis = timeout.toMillis() > lastStep ? timeout.toMillis() / lastStep : 1;
 | 
			
		||||
 | 
			
		||||
        for (int s = 0; s <= lastStep; s++)
 | 
			
		||||
        {
 | 
			
		||||
            try
 | 
			
		||||
            {
 | 
			
		||||
                assertion.run();
 | 
			
		||||
                logger.debug("Assertion succeeded.");
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
            catch (AssertionFailedError e)
 | 
			
		||||
            {
 | 
			
		||||
                if (s == lastStep)
 | 
			
		||||
                {
 | 
			
		||||
                    logger.debug("Assertion failed. No more waiting.");
 | 
			
		||||
                    throw e;
 | 
			
		||||
                }
 | 
			
		||||
                logger.debug("Assertion failed. Waiting until it succeeds.", e);
 | 
			
		||||
            }
 | 
			
		||||
            try
 | 
			
		||||
            {
 | 
			
		||||
                Thread.sleep(delayMillis);
 | 
			
		||||
            }
 | 
			
		||||
            catch (InterruptedException e)
 | 
			
		||||
            {
 | 
			
		||||
                Thread.currentThread().interrupt();
 | 
			
		||||
                fail("Thread has been interrupted.");
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        throw new IllegalStateException("Unexpected.");
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    private class TestCallback implements JobLockRefreshCallback
 | 
			
		||||
    {
 | 
			
		||||
 
 | 
			
		||||
@@ -29,8 +29,13 @@ package org.alfresco.util;
 | 
			
		||||
import static org.junit.Assert.assertTrue;
 | 
			
		||||
import static org.junit.Assert.fail;
 | 
			
		||||
 | 
			
		||||
import java.time.Duration;
 | 
			
		||||
import java.util.Arrays;
 | 
			
		||||
import java.util.function.Supplier;
 | 
			
		||||
 | 
			
		||||
import org.apache.commons.logging.Log;
 | 
			
		||||
import org.apache.commons.logging.LogFactory;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * A helper class to create a concise test.
 | 
			
		||||
 *
 | 
			
		||||
@@ -39,6 +44,8 @@ import java.util.function.Supplier;
 | 
			
		||||
 */
 | 
			
		||||
public class TestHelper
 | 
			
		||||
{
 | 
			
		||||
    private static final Log logger = LogFactory.getLog(TestHelper.class);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Checks the thrown exception is the expected exception.
 | 
			
		||||
     *
 | 
			
		||||
@@ -94,4 +101,59 @@ public class TestHelper
 | 
			
		||||
 | 
			
		||||
        return t;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Waits for <b>{@code method}</b> to succeed until <b>({@code timeout})</b>.
 | 
			
		||||
     * <p>
 | 
			
		||||
     * If the method failed to succeed because of previous step of test is not finished yet,
 | 
			
		||||
     * it waits and re-executes the given method again.
 | 
			
		||||
     * This will continue until the method do not fail or the <b>{@code timeout}</b> has been reached.
 | 
			
		||||
     *
 | 
			
		||||
     * @param timeout               max time of wait.
 | 
			
		||||
     * @param method                the method that is called for retry.
 | 
			
		||||
     * @param expectedExceptions    array of excepted exception.
 | 
			
		||||
     * @throws Exception            after failing to finish given method with success.
 | 
			
		||||
     */
 | 
			
		||||
    @SafeVarargs
 | 
			
		||||
    public static void waitForMethodToFinish(
 | 
			
		||||
            Duration timeout,
 | 
			
		||||
            Runnable method,
 | 
			
		||||
            Class<? extends Throwable> ... expectedExceptions)
 | 
			
		||||
    {
 | 
			
		||||
        logger.debug("Waiting for method to succeed.");
 | 
			
		||||
        final long lastStep = 10;
 | 
			
		||||
        final long delayMillis = timeout.toMillis() > lastStep ? timeout.toMillis() / lastStep : 1;
 | 
			
		||||
 | 
			
		||||
        for (int step = 0; step <= lastStep; step++)
 | 
			
		||||
        {
 | 
			
		||||
            try
 | 
			
		||||
            {
 | 
			
		||||
                method.run();
 | 
			
		||||
                logger.debug("Method succeeded.");
 | 
			
		||||
                return;
 | 
			
		||||
            } catch (Throwable e)
 | 
			
		||||
            {
 | 
			
		||||
                if(Arrays.stream(expectedExceptions).noneMatch(expEx -> expEx.isInstance(e)))
 | 
			
		||||
                {
 | 
			
		||||
                    throw e;
 | 
			
		||||
                }
 | 
			
		||||
                if (step == lastStep)
 | 
			
		||||
                {
 | 
			
		||||
                    logger.debug("Method failed - no more waiting.");
 | 
			
		||||
                    throw e;
 | 
			
		||||
                }
 | 
			
		||||
                logger.debug("Method failed. Waiting until it succeeds.", e);
 | 
			
		||||
            }
 | 
			
		||||
            try
 | 
			
		||||
            {
 | 
			
		||||
                Thread.sleep(delayMillis);
 | 
			
		||||
            } catch (InterruptedException e)
 | 
			
		||||
            {
 | 
			
		||||
                Thread.currentThread().interrupt();
 | 
			
		||||
                fail("Thread has been interrupted.");
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        throw new IllegalStateException("Unexpected.");
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -11,6 +11,18 @@
 | 
			
		||||
         <value>1000</value>
 | 
			
		||||
      </property>
 | 
			
		||||
   </bean>
 | 
			
		||||
 | 
			
		||||
   <bean id="public-test-action" class="org.alfresco.repo.action.ActionServiceImplTest$NoOpActionExecuter" parent="action-executer">
 | 
			
		||||
      <property name="publicAction">
 | 
			
		||||
         <value>true</value>
 | 
			
		||||
      </property>
 | 
			
		||||
   </bean>
 | 
			
		||||
 | 
			
		||||
   <bean id="private-test-action" class="org.alfresco.repo.action.ActionServiceImplTest$NoOpActionExecuter" parent="action-executer">
 | 
			
		||||
      <property name="publicAction">
 | 
			
		||||
         <value>false</value>
 | 
			
		||||
      </property>
 | 
			
		||||
   </bean>
 | 
			
		||||
   
 | 
			
		||||
   <bean id="sleepActionFilter" class="org.alfresco.repo.action.ActionServiceImplTest$SleepActionFilter" parent="baseActionFilter">
 | 
			
		||||
       <property name="name">
 | 
			
		||||
@@ -31,4 +43,28 @@
 | 
			
		||||
   <bean id="transient-fail-action"
 | 
			
		||||
         class="org.alfresco.repo.action.ActionServiceImplTest$TransientFailActionExecuter"
 | 
			
		||||
         parent="action-executer" />
 | 
			
		||||
 | 
			
		||||
   <bean id="extendedActionServiceWithoutConfigurationProperty" class="org.alfresco.repo.action.ActionServiceImplTest$TestExtendedActionServiceImpl" init-method="init">
 | 
			
		||||
      <property name="policyComponent">
 | 
			
		||||
         <ref bean="policyComponent" />
 | 
			
		||||
      </property>
 | 
			
		||||
      <property name="nodeService">
 | 
			
		||||
         <ref bean="NodeService" />
 | 
			
		||||
      </property>
 | 
			
		||||
      <property name="searchService">
 | 
			
		||||
         <ref bean="ADMSearchService" />
 | 
			
		||||
      </property>
 | 
			
		||||
      <property name="authenticationContext">
 | 
			
		||||
         <ref bean="authenticationContext" />
 | 
			
		||||
      </property>
 | 
			
		||||
      <property name="actionTrackingService">
 | 
			
		||||
         <ref bean="actionTrackingService" />
 | 
			
		||||
      </property>
 | 
			
		||||
      <property name="dictionaryService">
 | 
			
		||||
         <ref bean="DictionaryService" />
 | 
			
		||||
      </property>
 | 
			
		||||
      <property name="monitor">
 | 
			
		||||
         <ref bean="actionServiceMonitor"/>
 | 
			
		||||
      </property>
 | 
			
		||||
   </bean>
 | 
			
		||||
</beans>
 | 
			
		||||
 
 | 
			
		||||
@@ -7,8 +7,27 @@ pushd "$(dirname "${BASH_SOURCE[0]}")/../../"
 | 
			
		||||
source "$(dirname "${BASH_SOURCE[0]}")/build_functions.sh"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Build the current project
 | 
			
		||||
mvn -B -V install -DskipTests -Dmaven.javadoc.skip=true -Pbuild-docker-images -Pags
 | 
			
		||||
# Build the current project if needed
 | 
			
		||||
if [[ -n ${REQUIRES_INSTALLED_ARTIFACTS} ]] || [[ -n ${REQUIRES_LOCAL_IMAGES} ]] || [[ -n ${BUILD_PROFILES} ]]; then
 | 
			
		||||
 | 
			
		||||
  if [[ -n ${BUILD_PROFILES} ]]; then
 | 
			
		||||
    PROFILES="${BUILD_PROFILES}"
 | 
			
		||||
  else
 | 
			
		||||
    if [[ "${REQUIRES_LOCAL_IMAGES}" == "true" ]]; then
 | 
			
		||||
      PROFILES="-Pbuild-docker-images -Pags"
 | 
			
		||||
    else
 | 
			
		||||
      PROFILES="-Pags"
 | 
			
		||||
    fi
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  if [[ "${REQUIRES_INSTALLED_ARTIFACTS}" == "true" ]]; then
 | 
			
		||||
    PHASE="install"
 | 
			
		||||
  else
 | 
			
		||||
    PHASE="package"
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  mvn -B -V $PHASE -DskipTests -Dmaven.javadoc.skip=true $PROFILES $BUILD_OPTIONS
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
popd
 | 
			
		||||
 
 | 
			
		||||
@@ -1,20 +1,5 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
set -ev
 | 
			
		||||
 | 
			
		||||
rm -rf "${HOME}/.m2/repository/org/alfresco/acs-community-packaging"
 | 
			
		||||
rm -rf "${HOME}/.m2/repository/org/alfresco/alfresco-community-repo"
 | 
			
		||||
rm -rf "${HOME}/.m2/repository/org/alfresco/alfresco-community-repo-*"
 | 
			
		||||
rm -rf "${HOME}/.m2/repository/org/alfresco/alfresco-core"
 | 
			
		||||
rm -rf "${HOME}/.m2/repository/org/alfresco/alfresco-data-model"
 | 
			
		||||
rm -rf "${HOME}/.m2/repository/org/alfresco/alfresco-enterprise-remote-api"
 | 
			
		||||
rm -rf "${HOME}/.m2/repository/org/alfresco/alfresco-enterprise-repo-*"
 | 
			
		||||
rm -rf "${HOME}/.m2/repository/org/alfresco/alfresco-enterprise-repository"
 | 
			
		||||
rm -rf "${HOME}/.m2/repository/org/alfresco/alfresco-remote-api"
 | 
			
		||||
rm -rf "${HOME}/.m2/repository/org/alfresco/alfresco-repository"
 | 
			
		||||
rm -rf "${HOME}/.m2/repository/org/alfresco/content-services"
 | 
			
		||||
rm -rf "${HOME}/.m2/repository/org/alfresco/content-services*"
 | 
			
		||||
rm -rf "${HOME}/.m2/repository/org/alfresco/content-services-community"
 | 
			
		||||
rm -rf "${HOME}/.m2/repository/org/alfresco/tas/alfresco-community-repo-*-test"
 | 
			
		||||
rm -rf "${HOME}/.m2/repository/org/alfresco/tas/alfresco-enterprise-repo-*-test"
 | 
			
		||||
rm -rf "${HOME}/.m2/repository/org/alfresco/alfresco-governance-services*"
 | 
			
		||||
find "${HOME}/.m2/repository/" -type d -name "*-SNAPSHOT" | xargs -r -l rm -rf
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										31
									
								
								scripts/travis/prepare.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										31
									
								
								scripts/travis/prepare.sh
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,31 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
 | 
			
		||||
set -e
 | 
			
		||||
 | 
			
		||||
M2_REPO_DIR="$HOME/.m2/repository"
 | 
			
		||||
M2_REPO_TTL_MINUTES=10080
 | 
			
		||||
M2_REPO_EXPIRED="$(find $M2_REPO_DIR -type f -mmin +$M2_REPO_TTL_MINUTES 2>/dev/null | head -n 1 | wc -l)"
 | 
			
		||||
M2_REPO_FILE_COUNT="$(find $M2_REPO_DIR -type f 2>/dev/null | wc -l)"
 | 
			
		||||
 | 
			
		||||
ORG_ALFRESCO_M2_REPO_DIR="$M2_REPO_DIR/org/alfresco"
 | 
			
		||||
ORG_ALFRESCO_M2_REPO_TTL_MINUTES=1440
 | 
			
		||||
ORG_ALFRESCO_M2_REPO_EXPIRED="$(find $ORG_ALFRESCO_M2_REPO_DIR -type f -mmin +$ORG_ALFRESCO_M2_REPO_TTL_MINUTES 2>/dev/null | head -n 1 | wc -l)"
 | 
			
		||||
 | 
			
		||||
echo "Files in the maven repo: $M2_REPO_FILE_COUNT"
 | 
			
		||||
 | 
			
		||||
if [ $ORG_ALFRESCO_M2_REPO_EXPIRED -eq 1 ];then
 | 
			
		||||
  echo "Invalidating org/alfresco maven local cache."
 | 
			
		||||
  rm -rf "$ORG_ALFRESCO_M2_REPO_DIR"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if [ $M2_REPO_EXPIRED -eq 1 ];then
 | 
			
		||||
  echo "Invalidating maven local cache."
 | 
			
		||||
  rm -rf "$M2_REPO_DIR"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if [ $M2_REPO_FILE_COUNT -lt 1000 ] || [ $ORG_ALFRESCO_M2_REPO_EXPIRED -eq 1 ] || [ $M2_REPO_EXPIRED -eq 1 ];then
 | 
			
		||||
  echo "Populating maven cache."
 | 
			
		||||
  export BUILD_PROFILES="-Pall-tas-tests,ags"
 | 
			
		||||
  export BUILD_OPTIONS="-Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn -Dmaven.artifact.threads=8"
 | 
			
		||||
  source "$(dirname "${BASH_SOURCE[0]}")/build.sh"
 | 
			
		||||
fi
 | 
			
		||||
@@ -33,7 +33,11 @@ git status
 | 
			
		||||
git --no-pager diff pom.xml
 | 
			
		||||
git add pom.xml
 | 
			
		||||
 | 
			
		||||
if git status --untracked-files=no --porcelain | grep -q '^' ; then
 | 
			
		||||
if [[ "${TRAVIS_COMMIT_MESSAGE}" =~ \[force[^\]]*\] ]]; then
 | 
			
		||||
  FORCE_TOKEN=$(echo "${TRAVIS_COMMIT_MESSAGE}" | sed "s|^.*\(\[force[^]]*\]\).*$|\1|g")
 | 
			
		||||
  git commit --allow-empty -m "${FORCE_TOKEN} Update upstream version to ${VERSION}"
 | 
			
		||||
  git push
 | 
			
		||||
elif git status --untracked-files=no --porcelain | grep -q '^' ; then
 | 
			
		||||
  git commit -m "Update upstream version to ${VERSION}"
 | 
			
		||||
  git push
 | 
			
		||||
else
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user