mirror of
				https://github.com/Alfresco/alfresco-community-repo.git
				synced 2025-10-29 15:21:53 +00:00 
			
		
		
		
	Compare commits
	
		
			245 Commits
		
	
	
		
			14.95
			...
			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 | ||
|  | 5ecd4c2593 | ||
|  | b4a2e2d8cf | ||
|  | bdf4fd7e16 | ||
|  | e3b3e4b099 | ||
|  | 895ab9dbbf | ||
|  | 85054a7649 | ||
|  | c60a182b89 | ||
|  | 94ba463db8 | ||
|  | cf67b6791a | ||
|  | 506441a7ec | ||
|  | 9b01a3fa1f | ||
|  | 3dc00da2a5 | ||
|  | c20bdd754f | ||
|  | d3a52be71a | ||
|  | 07c3ca5bab | ||
|  | e593a17e88 | ||
|  | 1975729174 | ||
|  | 1491a9a7dd | ||
|  | 3923560588 | ||
|  | af1aa6528b | ||
|  | 8cf9cd3ed5 | ||
|  | b2dd06eef8 | ||
|  | 8d46151e41 | ||
|  | 3d5166b5d2 | ||
|  | 847af44db0 | ||
|  | 66cd9d4194 | ||
|  | a26eeef847 | ||
|  | 7ba414eff9 | ||
|  | 55abd66da6 | ||
|  | 6ed43a9a87 | ||
|  | e657c2a1f7 | ||
|  | 31aa55366f | ||
|  | c7f1f808a1 | ||
|  | 40b537b589 | ||
|  | 902b569b41 | ||
|  | 5c3bf1772a | ||
|  | 7ffea85c17 | ||
|  | 4ea51d7229 | ||
|  | 5f5f6a1577 | ||
|  | 74f27b68c2 | ||
|  | 592dabfbd0 | ||
|  | 275a19b634 | ||
|  | ee95350a7a | ||
|  | 6d78c0eafc | ||
|  | ba8ad595cc | ||
|  | cd49f188ea | ||
|  | 5bcff826d2 | ||
|  | d62cc18604 | ||
|  | e23d356da7 | ||
|  | 4ac828acca | ||
|  | 0cad7c4c89 | ||
|  | d6bb44343c | ||
|  | 4b46fd6e10 | ||
|  | 3cc3fb081f | ||
|  | 82add3f32f | ||
|  | 76b0d5ee5a | ||
|  | 3b36d26609 | ||
|  | 76ce1db950 | ||
|  | cd11c54422 | ||
|  | bd4bdab0ff | ||
|  | 9ad7175237 | ||
|  | 15b5bf93af | ||
|  | bb6d3b0716 | ||
|  | ac68fbdf09 | ||
|  | 3dae151864 | ||
|  | ae4d0f695e | ||
|  | 1b44b5825c | ||
|  | a51a4e7cf2 | ||
|  | d82b35a2c6 | ||
|  | 2b081589ea | ||
|  | d6974d8504 | ||
|  | f319377697 | ||
|  | 72801ae27f | ||
|  | bc4bc6703f | ||
|  | f501050285 | ||
|  | a38c428a9e | ||
|  | ee2b80ab13 | ||
|  | bfda737651 | ||
|  | 280e29f326 | ||
|  | d60d8e1f5b | ||
|  | 40679b3f59 | ||
|  | c3adbcdf3f | ||
|  | 1487a8ecca | ||
|  | 0e0a7831be | ||
|  | b7ed25a741 | ||
|  | bec9cf86b1 | ||
|  | ec2a8962a1 | ||
|  | ea5ef05197 | ||
|  | 29df0e9bb2 | ||
|  | dee9b51274 | ||
|  | 0f985d5ded | ||
|  | bb1f5d18b6 | ||
|  | 5c05001256 | ||
|  | 67d03b6996 | ||
|  | 1d1563c1f6 | ||
|  | ad965d49fb | ||
|  | 11e3d2d549 | ||
|  | b68b565a4f | ||
|  | 5963ccffdd | ||
|  | 5265105149 | ||
|  | abd9ec4eef | ||
|  | 397539bbbe | ||
|  | 1287eefd4f | ||
|  | 637415554c | ||
|  | 7231b20c41 | ||
|  | fea6b0dc4f | ||
|  | 8c97443073 | ||
|  | 22d0f97ce3 | ||
|  | 50ee974ddf | ||
|  | 984bbbd8bf | ||
|  | 8b57af9cb5 | ||
|  | b06924908d | ||
|  | e2bba31603 | ||
|  | 3b65b30bd5 | ||
|  | 2177ffcea8 | ||
|  | 2ce43b09d8 | ||
|  | 05660a94ab | ||
|  | 3e4c191ff9 | ||
|  | 8a3817649b | ||
|  | 82b737062b | ||
|  | e6b32e7e61 | ||
|  | b9979caf40 | ||
|  | e6367cdc70 | ||
|  | eceba2679c | ||
|  | cf4abfe101 | ||
|  | 2a5f03889e | ||
|  | 0e11091d19 | ||
|  | 3cb838865a | ||
|  | f89d85b431 | ||
|  | 9d91ee4cae | ||
|  | 1e792eb625 | ||
|  | 3d881b9022 | ||
|  | b890af95b4 | ||
|  | 706aac3ffa | ||
|  | 22230ea04b | ||
|  | 798a3faa5b | ||
|  | 105c83ca7e | ||
|  | 64b9564dc7 | ||
|  | a3ccf20a74 | ||
|  | fa7f74f2ee | ||
|  | 30e339db12 | ||
|  | 8f5aed72d2 | ||
|  | dc0582b1ab | ||
|  | 92eb339237 | ||
|  | 3b6983170b | ||
|  | 338e2b93dd | ||
|  | fea50a2206 | ||
|  | 85b5b2660e | ||
|  | 085e2acaac | ||
|  | 58b4d9f18f | ||
|  | 336e7cf817 | ||
|  | 13a2bea2ce | ||
|  | 9139500fa5 | ||
|  | 2a43657e2f | ||
|  | 8145e2ea39 | ||
|  | db1bc1d9e2 | ||
|  | 2f0f3aa310 | ||
|  | 873508bfb7 | ||
|  | e71f681e6e | ||
|  | 4cb4f6f023 | ||
|  | 98aebf77ad | ||
|  | 25b7d8c480 | ||
|  | 641ea57895 | ||
|  | c0d2d444ca | ||
|  | 212c2cefec | ||
|  | 6bacd51841 | ||
|  | 2db4bf0a90 | ||
|  | 7381e578a8 | ||
|  | 44a8acddd0 | ||
|  | 9bcf7eed9a | 
							
								
								
									
										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 -Dtest=AllUnitTestsSuite | ||||
|         - 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.6 | ||||
|       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.6 | ||||
|       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.6 | ||||
|       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.6 | ||||
|       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.6 | ||||
|       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.6 | ||||
|       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.6 | ||||
|         - 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.6 | ||||
|         - 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.6 | ||||
|         - 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.95</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.95</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.95</version> | ||||
|       <version>23.1.0.23-SNAPSHOT</version> | ||||
|    </parent> | ||||
|  | ||||
|    <build> | ||||
| @@ -44,8 +44,8 @@ | ||||
|    <dependencies> | ||||
|       <dependency> | ||||
|          <groupId>org.slf4j</groupId> | ||||
|          <artifactId>slf4j-log4j12</artifactId> | ||||
|          <version>1.7.33</version> | ||||
|          <artifactId>slf4j-reload4j</artifactId> | ||||
|          <version>1.7.35</version> | ||||
|          <scope>test</scope> | ||||
|       </dependency> | ||||
|       <dependency> | ||||
|   | ||||
| @@ -73,4 +73,5 @@ public class RecordFoldersAPI extends BaseAPI | ||||
|         } | ||||
|         return null; | ||||
|     } | ||||
|  | ||||
| } | ||||
|   | ||||
| @@ -114,11 +114,11 @@ public class RecordsAPI extends BaseAPI | ||||
|     /** | ||||
|      * Reject the record given as parameter | ||||
|      * | ||||
|      * @param user the user declaring the document as record | ||||
|      * @param password the user's password | ||||
|      * @param user               the user declaring the document as record | ||||
|      * @param password           the user's password | ||||
|      * @param expectedStatusCode The expected return status code. | ||||
|      * @param recordName the record name | ||||
|      * @param reason reject reason | ||||
|      * @param recordName         the record name | ||||
|      * @param reason             reject reason | ||||
|      * @return The HTTP Response. | ||||
|      * @throws AssertionError If the expectedStatusCode was not returned. | ||||
|      */ | ||||
| @@ -129,8 +129,8 @@ public class RecordsAPI extends BaseAPI | ||||
|         JSONObject requestParams = new JSONObject(); | ||||
|         requestParams.put("name", "reject"); | ||||
|         requestParams.put("nodeRef", recNodeRef); | ||||
|         requestParams.put("params",new JSONObject() | ||||
|                     .put("reason",reason)); | ||||
|         requestParams.put("params", new JSONObject() | ||||
|                 .put("reason", reason)); | ||||
|  | ||||
|         return doPostJsonRequest(user, password, expectedStatusCode, requestParams, RM_ACTIONS_API); | ||||
|     } | ||||
| @@ -221,6 +221,7 @@ public class RecordsAPI extends BaseAPI | ||||
|      * Uploads an electronic record | ||||
|      * <p> | ||||
|      * eg. of usage for creating record directly in Unfiled Records : uploadElectronicRecord(getAdminName(), getAdminPassword(), recordPropertiesStringMap, UNFILED_RECORDS_BREADCRUMB, DocumentType.HTML) | ||||
|      * | ||||
|      * @param username   the username | ||||
|      * @param password   the password | ||||
|      * @param properties a map of record properties and their values | ||||
| @@ -241,6 +242,7 @@ public class RecordsAPI extends BaseAPI | ||||
|      * <li>eg. of usage in the case in which the record is inside a folder in Unfiled Records : deleteRecord(getAdminName(), getAdminPassword(), "f1 (2016-1472716888713)", UNFILED_RECORDS_BREADCRUMB, "unfiled records folder"); | ||||
|      * <li>eg. of usage in the case in which the record is created directly in Unfiled Records : deleteRecord(getAdminName(), getAdminPassword(), "f1 (2016-1472716888713)", UNFILED_RECORDS_BREADCRUMB, ""); | ||||
|      * </ul> | ||||
|      * | ||||
|      * @param username     user's username | ||||
|      * @param password     its password | ||||
|      * @param recordName   the record name | ||||
| @@ -267,7 +269,7 @@ public class RecordsAPI extends BaseAPI | ||||
|      * @param recordName the String with which the record name starts | ||||
|      * @return the record object in case it exists, null otherwise | ||||
|      */ | ||||
|     private CmisObject getRecord(String username, String password, String folderName, String recordName) | ||||
|     public CmisObject getRecord(String username, String password, String folderName, String recordName) | ||||
|     { | ||||
|         for (CmisObject record : contentService.getFolderObject(contentService.getCMISSession(username, password), RM_SITE_ID, folderName).getChildren()) | ||||
|         { | ||||
| @@ -328,9 +330,9 @@ public class RecordsAPI extends BaseAPI | ||||
|     /** | ||||
|      * Hide in place record | ||||
|      * | ||||
|      * @param user         the user | ||||
|      * @param password     the user's password | ||||
|      * @param nodeId     the in place record node id | ||||
|      * @param user     the user | ||||
|      * @param password the user's password | ||||
|      * @param nodeId   the in place record node id | ||||
|      * @return The HTTP Response. | ||||
|      */ | ||||
|     public HttpResponse hideRecord(String user, String password, String nodeId) | ||||
| @@ -344,6 +346,7 @@ public class RecordsAPI extends BaseAPI | ||||
|         return doPostJsonRequest(user, password, SC_OK, requestParams, ACTIONS_API); | ||||
|     } | ||||
|  | ||||
|  | ||||
|     /** | ||||
|      * Retrieves the record's nodeRef | ||||
|      * | ||||
|   | ||||
| @@ -0,0 +1,139 @@ | ||||
| /* | ||||
|  * #%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.rest.rm.community.records; | ||||
|  | ||||
| import static org.alfresco.rest.rm.community.util.CommonTestUtils.generateTestPrefix; | ||||
| import static org.alfresco.utility.data.RandomData.getRandomName; | ||||
| import static org.alfresco.utility.report.log.Step.STEP; | ||||
| import static org.springframework.http.HttpStatus.CREATED; | ||||
| import static org.testng.Assert.assertNotNull; | ||||
|  | ||||
| import java.util.HashMap; | ||||
| import java.util.Map; | ||||
|  | ||||
| import org.alfresco.rest.core.v0.BaseAPI.RMProperty; | ||||
| import org.alfresco.rest.rm.community.base.BaseRMRestTest; | ||||
| import org.alfresco.rest.rm.community.model.recordcategory.RecordCategory; | ||||
| import org.alfresco.rest.rm.community.model.recordcategory.RecordCategoryChild; | ||||
| import org.alfresco.rest.v0.RMRolesAndActionsAPI; | ||||
| import org.alfresco.rest.v0.RecordsAPI; | ||||
| import org.alfresco.test.AlfrescoTest; | ||||
| import org.springframework.beans.factory.annotation.Autowired; | ||||
| import org.testng.annotations.AfterClass; | ||||
| import org.testng.annotations.BeforeClass; | ||||
| import org.testng.annotations.Test; | ||||
|  | ||||
| /** | ||||
|  * Contains CreateNonElectronicRecords test which checks creation and basic actions(view details, edit, move, copy, delete) on non-electronic records | ||||
|  * <p/> | ||||
|  * Precondition: | ||||
|  * <p/> | ||||
|  * RM site created, contains category 1 with folder 1 and folder 2 inside it | ||||
|  * <p/> | ||||
|  * RM user has RM admin role | ||||
|  * | ||||
|  * @author Shubham Jain | ||||
|  * @Since 7.2.0 M2 | ||||
|  */ | ||||
| public class CreateNonElectronicRecordsTests extends BaseRMRestTest | ||||
| { | ||||
|     private RecordCategory rootCategory; | ||||
|  | ||||
|     private RecordCategoryChild recordFolder; | ||||
|  | ||||
|     /** | ||||
|      * data prep services | ||||
|      */ | ||||
|     @Autowired | ||||
|     private RMRolesAndActionsAPI rmRolesAndActionsAPI; | ||||
|  | ||||
|     @Autowired | ||||
|     private RecordsAPI recordsAPI; | ||||
|  | ||||
|     private final String TEST_PREFIX = generateTestPrefix(CreateNonElectronicRecordsTests.class); | ||||
|     private final String RM_ADMIN = TEST_PREFIX + "rm_admin"; | ||||
|     private final String recordName = "RM-2777 record"; | ||||
|     private final String recordTitle = recordName + " title"; | ||||
|     private final String recordDescription = recordName + " description"; | ||||
|  | ||||
|  | ||||
|     @BeforeClass (alwaysRun = true) | ||||
|     public void preConditions() | ||||
|     { | ||||
|         STEP("Create RM Site"); | ||||
|         createRMSiteIfNotExists(); | ||||
|  | ||||
|         STEP("Create RM Admin user"); | ||||
|         rmRolesAndActionsAPI.createUserAndAssignToRole(getAdminUser().getUsername(), getAdminUser().getPassword(), RM_ADMIN, | ||||
|                 getAdminUser().getPassword(), | ||||
|                 "Administrator"); | ||||
|  | ||||
|         STEP("Create root level category"); | ||||
|         rootCategory = createRootCategory(getRandomName("Category")); | ||||
|  | ||||
|         STEP("Create the record folder inside the rootCategory"); | ||||
|         recordFolder = createRecordFolder(rootCategory.getId(), getRandomName("Folder")); | ||||
|  | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Test v0 methods to create and get non-electronic records. | ||||
|      */ | ||||
|     @Test | ||||
|     @AlfrescoTest (jira = "RM-2777") | ||||
|     public void createNonElectronicRecordTest() | ||||
|     { | ||||
|         STEP("Create a non-electronic record by completing some of the fields"); | ||||
|         Map<Enum<?>, String> properties = new HashMap<Enum<?>, String>(); | ||||
|         properties.put(RMProperty.TITLE, recordTitle); | ||||
|         properties.put(RMProperty.DESCRIPTION, recordDescription); | ||||
|         properties.put(RMProperty.NAME, recordName); | ||||
|         properties.put(RMProperty.PHYSICAL_SIZE, ""); | ||||
|         properties.put(RMProperty.NUMBER_OF_COPIES, ""); | ||||
|         properties.put(RMProperty.SHELF, ""); | ||||
|         properties.put(RMProperty.STORAGE_LOCATION, ""); | ||||
|         properties.put(RMProperty.BOX, ""); | ||||
|         properties.put(RMProperty.FILE, ""); | ||||
|  | ||||
|         recordsAPI.createNonElectronicRecord(getAdminUser().getUsername(), | ||||
|                 getAdminUser().getPassword(), properties, rootCategory.getName(), recordFolder.getName()); | ||||
|  | ||||
|         STEP("Check the non-electronic record has been created"); | ||||
|         assertStatusCode(CREATED); | ||||
|         assertNotNull(recordsAPI.getRecord(getAdminUser().getUsername(), getAdminUser().getPassword(), | ||||
|                 recordFolder.getName(), recordName)); | ||||
|  | ||||
|     } | ||||
|  | ||||
|     @AfterClass (alwaysRun = true) | ||||
|     public void deletePreConditions() | ||||
|     { | ||||
|         STEP("Delete the created rootCategory along with corresponding record folders/records present in it"); | ||||
|         getRestAPIFactory().getRecordCategoryAPI().deleteRecordCategory(rootCategory.getId()); | ||||
|     } | ||||
|  | ||||
| } | ||||
| @@ -7,7 +7,7 @@ | ||||
|    <parent> | ||||
|       <groupId>org.alfresco</groupId> | ||||
|       <artifactId>alfresco-governance-services-community-parent</artifactId> | ||||
|       <version>14.95</version> | ||||
|       <version>23.1.0.23-SNAPSHOT</version> | ||||
|    </parent> | ||||
|  | ||||
|    <modules> | ||||
|   | ||||
| @@ -1,4 +1,3 @@ | ||||
| TRANSFORMERS_TAG=2.5.6 | ||||
| SOLR6_TAG=2.0.2 | ||||
| SOLR6_TAG=2.0.3 | ||||
| POSTGRES_TAG=13.3 | ||||
| ACTIVEMQ_TAG=5.16.1 | ||||
|   | ||||
| @@ -1,4 +1,17 @@ | ||||
| ### Apply AGS community repo AMP to ACS image | ||||
| # BUILD STAGE AGS | ||||
| FROM debian:11-slim AS AGSBUILDER | ||||
|  | ||||
| RUN export DEBIAN_FRONTEND=noninteractive; \ | ||||
|     apt-get update -qqy && apt-get -yqq install unzip && \ | ||||
|     mkdir -p /build/gs-api-explorer | ||||
|  | ||||
| ### Copy the AGS war from the local context | ||||
| COPY target/gs-api-explorer-*.war /build | ||||
|  | ||||
| RUN unzip -q /build/gs-api-explorer-*.war -d /build/gs-api-explorer && \ | ||||
|     chmod -R g-w,o= /build | ||||
|  | ||||
| # ACTUAL IMAGE | ||||
| FROM alfresco/alfresco-community-repo-base:${image.tag} | ||||
|  | ||||
| # Alfresco user does not have permissions to modify webapps or configuration. Switch to root. | ||||
| @@ -13,18 +26,13 @@ RUN java -jar /usr/local/tomcat/alfresco-mmt/alfresco-mmt*.jar install \ | ||||
|               /usr/local/tomcat/amps \ | ||||
|               /usr/local/tomcat/webapps/alfresco -directory -nobackup | ||||
|  | ||||
| ### Copy gs-api-explorer war into webapps folder | ||||
| COPY target/gs-api-explorer-*.war /usr/local/tomcat/webapps/ | ||||
|  | ||||
| ### Unpack gs-api-explorer.war | ||||
| RUN mkdir /usr/local/tomcat/webapps/gs-api-explorer && cd /usr/local/tomcat/webapps/gs-api-explorer && \ | ||||
|     jar -xvf /usr/local/tomcat/webapps/gs-api-explorer-*.war && rm -f /usr/local/tomcat/webapps/gs-api-explorer-*.war | ||||
| ### Copy gs-api-explorer | ||||
| COPY --chown=root:Alfresco --from=AGSBUILDER /build/gs-api-explorer /usr/local/tomcat/webapps/gs-api-explorer | ||||
|  | ||||
| # All files in the tomcat folder must be owned by root user and Alfresco group as mentioned in the parent Dockerfile | ||||
| RUN chgrp -R Alfresco /usr/local/tomcat && \ | ||||
|     find /usr/local/tomcat/webapps -type d -exec chmod 0750 {} \; && \ | ||||
|     find /usr/local/tomcat/webapps -type f -exec chmod 0640 {} \; && \ | ||||
|     chmod -R g+r /usr/local/tomcat/webapps | ||||
|     find /usr/local/tomcat/webapps -type f -exec chmod 0640 {} \; | ||||
|  | ||||
| # Switching back to alfresco user after having added amps files to run the container as non-root | ||||
| USER alfresco | ||||
|   | ||||
| @@ -26,7 +26,8 @@ services: | ||||
|                 -Ddb.url=jdbc:postgresql://postgres:5432/alfresco | ||||
|                 -Dsolr.host=search | ||||
|                 -Dsolr.port=8983 | ||||
|                 -Dsolr.secureComms=none | ||||
|                 -Dsolr.secureComms=secret | ||||
|                 -Dsolr.sharedSecret=secret | ||||
|                 -Dsolr.base.url=/solr | ||||
|                 -Dindex.subsystem.name=solr6 | ||||
|                 -Dalfresco.restApi.basicAuthScheme=true | ||||
| @@ -61,15 +62,19 @@ services: | ||||
|         image: alfresco/alfresco-search-services:${SOLR6_TAG} | ||||
|         environment: | ||||
|             #Solr needs to know how to register itself with Alfresco | ||||
|             - SOLR_ALFRESCO_HOST=alfresco | ||||
|             - SOLR_ALFRESCO_PORT=8080 | ||||
|             SOLR_ALFRESCO_HOST: "alfresco" | ||||
|             SOLR_ALFRESCO_PORT: "8080" | ||||
|             #Alfresco needs to know how to call solr | ||||
|             - SOLR_SOLR_HOST=search | ||||
|             - SOLR_SOLR_PORT=8983 | ||||
|             SOLR_SOLR_HOST: "search" | ||||
|             SOLR_SOLR_PORT: "8983" | ||||
|             #Create the default alfresco and archive cores | ||||
|             - SOLR_CREATE_ALFRESCO_DEFAULTS=alfresco,archive | ||||
|              #HTTP by default | ||||
|             - ALFRESCO_SECURE_COMMS=none | ||||
|             SOLR_CREATE_ALFRESCO_DEFAULTS: "alfresco,archive" | ||||
|             #HTTP by default | ||||
|             ALFRESCO_SECURE_COMMS: "secret" | ||||
|             JAVA_TOOL_OPTIONS: | ||||
|               " | ||||
|               -Dalfresco.secureComms.secret=secret | ||||
|               " | ||||
|         ports: | ||||
|             - 8083:8983 #Browser port | ||||
|  | ||||
|   | ||||
| @@ -8,7 +8,7 @@ | ||||
|    <parent> | ||||
|       <groupId>org.alfresco</groupId> | ||||
|       <artifactId>alfresco-governance-services-community-repo-parent</artifactId> | ||||
|       <version>14.95</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> | ||||
|   | ||||
| @@ -66,7 +66,8 @@ ftp.enabled=false | ||||
|  | ||||
| # Solr config | ||||
| index.subsystem.name=solr6 | ||||
| solr.secureComms=none | ||||
| solr.secureComms=secret | ||||
| solr.sharedSecret=secret | ||||
| solr.port=8983 | ||||
|  | ||||
| #By default the  basic auth is on false - REPO-2575 | ||||
|   | ||||
| @@ -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= | ||||
|  | ||||
|   | ||||
| @@ -29,6 +29,7 @@ package org.alfresco.module.org_alfresco_module_rm.api; | ||||
|  | ||||
| import static org.junit.Assert.assertEquals; | ||||
| import static org.junit.Assert.assertTrue; | ||||
| import static org.reflections.scanners.Scanners.TypesAnnotated; | ||||
|  | ||||
| import java.lang.reflect.Constructor; | ||||
| import java.lang.reflect.Executable; | ||||
| @@ -77,7 +78,7 @@ public class PublicAPITestUtil | ||||
|      */ | ||||
|     public static void testPublicAPIConsistency(String basePackageName, SetMultimap<Class<?>, Class<?>> knownBadReferences) | ||||
|     { | ||||
|         Reflections reflections = new Reflections(basePackageName); | ||||
|         Reflections reflections = new Reflections(basePackageName, TypesAnnotated); | ||||
|         Set<Class<?>> publicAPIClasses = reflections.getTypesAnnotatedWith(AlfrescoPublicApi.class, true); | ||||
|  | ||||
|         SetMultimap<Class<?>, Class<?>> referencedFrom = HashMultimap.create(); | ||||
|   | ||||
| @@ -7,7 +7,7 @@ | ||||
|     <parent> | ||||
|         <groupId>org.alfresco</groupId> | ||||
|         <artifactId>alfresco-governance-services-community-repo-parent</artifactId> | ||||
|         <version>14.95</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.95</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.95</version> | ||||
|         <version>23.1.0.23-SNAPSHOT</version> | ||||
|     </parent> | ||||
|  | ||||
|     <properties> | ||||
|   | ||||
							
								
								
									
										14
									
								
								core/pom.xml
									
									
									
									
									
								
							
							
						
						
									
										14
									
								
								core/pom.xml
									
									
									
									
									
								
							| @@ -7,7 +7,7 @@ | ||||
|    <parent> | ||||
|       <groupId>org.alfresco</groupId> | ||||
|       <artifactId>alfresco-community-repo</artifactId> | ||||
|       <version>14.95</version> | ||||
|       <version>23.1.0.23-SNAPSHOT</version> | ||||
|    </parent> | ||||
|  | ||||
|    <dependencies> | ||||
| @@ -54,9 +54,9 @@ | ||||
|          <classifier>asl</classifier> | ||||
|       </dependency> | ||||
|       <dependency> | ||||
|          <groupId>log4j</groupId> | ||||
|          <artifactId>log4j</artifactId> | ||||
|          <version>1.2.17</version> | ||||
|          <groupId>ch.qos.reload4j</groupId> | ||||
|          <artifactId>reload4j</artifactId> | ||||
|          <version>1.2.18.3</version> | ||||
|       </dependency> | ||||
|       <dependency> | ||||
|          <groupId>org.json</groupId> | ||||
| @@ -114,7 +114,7 @@ | ||||
|       <!-- Test only dependencies, as popped up while running mvn test --> | ||||
|       <dependency> | ||||
|          <groupId>org.slf4j</groupId> | ||||
|          <artifactId>slf4j-log4j12</artifactId> | ||||
|          <artifactId>slf4j-reload4j</artifactId> | ||||
|          <scope>test</scope> | ||||
|       </dependency> | ||||
|       <dependency> | ||||
| @@ -128,8 +128,8 @@ | ||||
|          <scope>test</scope> | ||||
|       </dependency> | ||||
|       <dependency> | ||||
|          <groupId>commons-dbcp</groupId> | ||||
|          <artifactId>commons-dbcp</artifactId> | ||||
|          <groupId>org.apache.commons</groupId> | ||||
|          <artifactId>commons-dbcp2</artifactId> | ||||
|          <scope>test</scope> | ||||
|       </dependency> | ||||
|    </dependencies> | ||||
|   | ||||
| @@ -21,7 +21,7 @@ package org.alfresco.util.transaction; | ||||
| import org.alfresco.error.AlfrescoRuntimeException; | ||||
|  | ||||
| /** | ||||
|  * Exception wraps {@link java.util.NoSuchElementException} from {@link org.apache.commons.dbcp.BasicDataSource} | ||||
|  * Exception wraps {@link java.util.NoSuchElementException} from {@link org.apache.commons.dbcp2.BasicDataSource} | ||||
|  *  | ||||
|  * @author alex.mukha | ||||
|  * @since 4.1.9 | ||||
|   | ||||
| @@ -7,7 +7,7 @@ | ||||
|     <parent> | ||||
|         <groupId>org.alfresco</groupId> | ||||
|         <artifactId>alfresco-community-repo</artifactId> | ||||
|         <version>14.95</version> | ||||
|         <version>23.1.0.23-SNAPSHOT</version> | ||||
|     </parent> | ||||
|  | ||||
|     <properties> | ||||
|   | ||||
| @@ -26,7 +26,6 @@ | ||||
|  | ||||
| package org.alfresco.repo.content; | ||||
|  | ||||
| import org.alfresco.service.Experimental; | ||||
|  | ||||
| /** | ||||
|  * Enumeration with values for archive-restore parameter keys. | ||||
| @@ -35,7 +34,6 @@ import org.alfresco.service.Experimental; | ||||
|  * | ||||
|  * @author mpichura | ||||
|  */ | ||||
| @Experimental | ||||
| public enum ContentRestoreParams | ||||
| { | ||||
|     /** | ||||
|   | ||||
| @@ -26,7 +26,6 @@ | ||||
| package org.alfresco.repo.content; | ||||
|  | ||||
| import org.alfresco.api.AlfrescoPublicApi; | ||||
| import org.alfresco.service.Experimental; | ||||
| import org.alfresco.service.cmr.repository.ContentAccessor; | ||||
| import org.alfresco.service.cmr.repository.ContentIOException; | ||||
| import org.alfresco.service.cmr.repository.ContentReader; | ||||
| @@ -340,7 +339,6 @@ public interface ContentStore | ||||
|      * @param contentUrl the URL of the content for which the storage properties are to be retrieved. | ||||
|      * @return Returns a key-value (String-String) collection of storage headers/properties with their respective values. | ||||
|      */ | ||||
|     @Experimental | ||||
|     default Map<String, String> getStorageProperties(String contentUrl) | ||||
|     { | ||||
|         return Collections.emptyMap(); | ||||
| @@ -350,14 +348,12 @@ public interface ContentStore | ||||
|      * Submit a request to send content to archive (offline) state. | ||||
|      * If no connector is present or connector is not supporting sending to archive, then {@link UnsupportedOperationException} will be returned. | ||||
|      * Specific connector will decide which storage class/tier will be set for content. | ||||
|      * This method is experimental and subject to changes. | ||||
|      * | ||||
|      * @param contentUrl the URL of the content which is to be archived. | ||||
|      * @param archiveParams a map of String-Serializable parameters defining Storage Provider specific request parameters (can be empty). | ||||
|      * @return true when request successful, false when unsuccessful. | ||||
|      * @throws UnsupportedOperationException when store is unable to handle request. | ||||
|      */ | ||||
|     @Experimental | ||||
|     default boolean requestSendContentToArchive(String contentUrl, Map<String, Serializable> archiveParams) | ||||
|     { | ||||
|         throw new UnsupportedOperationException("Request to archive content is not supported by this content store."); | ||||
| @@ -370,14 +366,12 @@ public interface ContentStore | ||||
|      * Keys of this map should be restricted to {@code ContentRestoreParams} enumeration. | ||||
|      * For AWS S3 map can indicating expiry days, Glacier restore tier. | ||||
|      * For Azure Blob map can indicate rehydrate priority. | ||||
|      * This method is experimental and subject to changes. | ||||
|      * | ||||
|      * @param contentUrl    the URL of the content which is to be archived. | ||||
|      * @param restoreParams a map of String-Serializable parameters defining Storage Provider specific request parameters (can be empty). | ||||
|      * @return true when request successful, false when unsuccessful. | ||||
|      * @throws UnsupportedOperationException when store is unable to handle request. | ||||
|      */ | ||||
|     @Experimental | ||||
|     default boolean requestRestoreContentFromArchive(String contentUrl, Map<String, Serializable> restoreParams) | ||||
|     { | ||||
|         throw new UnsupportedOperationException("Request to restore content from archive is not supported by this content store."); | ||||
|   | ||||
| @@ -26,8 +26,6 @@ | ||||
|  | ||||
| package org.alfresco.repo.content; | ||||
|  | ||||
| import org.alfresco.service.Experimental; | ||||
|  | ||||
| /** | ||||
|  * Enumeration with "header" values for Alfresco derived Storage Properties | ||||
|  * Values of this enum should be used when adding Alfresco derived key-value pairs in Storage Properties map. | ||||
| @@ -35,7 +33,6 @@ import org.alfresco.service.Experimental; | ||||
|  * | ||||
|  * @author mpichura | ||||
|  */ | ||||
| @Experimental | ||||
| public enum ObjectStorageProps { | ||||
|     /** | ||||
|      * Object's content is archived and not immediately accessible. | ||||
|   | ||||
| @@ -26,7 +26,6 @@ | ||||
| package org.alfresco.service.cmr.repository; | ||||
|  | ||||
| import org.alfresco.api.AlfrescoPublicApi; | ||||
| import org.alfresco.service.Experimental; | ||||
|  | ||||
| /** | ||||
|  * Unable to access as content is in an Archived state. | ||||
| @@ -34,7 +33,6 @@ import org.alfresco.service.Experimental; | ||||
|  *  | ||||
|  * @author David Edwards | ||||
|  */ | ||||
| @Experimental | ||||
| @AlfrescoPublicApi | ||||
| public class ArchivedIOException extends ContentIOException | ||||
| { | ||||
|   | ||||
| @@ -27,7 +27,6 @@ package org.alfresco.service.cmr.repository; | ||||
|  | ||||
| import org.alfresco.api.AlfrescoPublicApi; | ||||
| import org.alfresco.error.AlfrescoRuntimeException; | ||||
| import org.alfresco.service.Experimental; | ||||
|  | ||||
| /** | ||||
|  * Content Restoration in progress | ||||
| @@ -35,7 +34,6 @@ import org.alfresco.service.Experimental; | ||||
|  * @author David Edwards | ||||
|  */ | ||||
| @AlfrescoPublicApi | ||||
| @Experimental | ||||
| public class RestoreInProgressException extends AlfrescoRuntimeException | ||||
| { | ||||
|     private static final long serialVersionUID = 5483215922384016269L; | ||||
|   | ||||
| @@ -7,7 +7,7 @@ | ||||
|     <parent> | ||||
|         <groupId>org.alfresco</groupId> | ||||
|         <artifactId>alfresco-community-repo</artifactId> | ||||
|         <version>14.95</version> | ||||
|         <version>23.1.0.23-SNAPSHOT</version> | ||||
|     </parent> | ||||
|  | ||||
|     <dependencies> | ||||
| @@ -31,6 +31,11 @@ | ||||
|             <artifactId>maven-artifact</artifactId> | ||||
|             <version>${dependency.maven-artifact.version}</version> | ||||
|         </dependency> | ||||
|         <dependency> | ||||
|             <groupId>org.mockito</groupId> | ||||
|             <artifactId>mockito-core</artifactId> | ||||
|             <scope>test</scope> | ||||
|         </dependency> | ||||
|     </dependencies> | ||||
|  | ||||
|     <build> | ||||
|   | ||||
| @@ -1,28 +1,28 @@ | ||||
| /* | ||||
|  * #%L | ||||
|  * Alfresco Repository | ||||
|  * %% | ||||
|  * Copyright (C) 2005 - 2016 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% | ||||
|  */ | ||||
| /* | ||||
|  * #%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.module.tool; | ||||
| 
 | ||||
| import java.io.BufferedReader; | ||||
| @@ -1,28 +1,28 @@ | ||||
| /* | ||||
|  * #%L | ||||
|  * Alfresco Repository | ||||
|  * %% | ||||
|  * Copyright (C) 2005 - 2016 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% | ||||
|  */ | ||||
| /* | ||||
|  * #%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.module.tool; | ||||
| 
 | ||||
| import java.io.FileNotFoundException; | ||||
| @@ -178,13 +178,13 @@ public class ModuleDetailsHelper | ||||
|     } | ||||
|      | ||||
|     /** | ||||
|      * Saves the module details to the war in the correct location based on the module id | ||||
|      *  | ||||
|      * @param warLocation   the war location | ||||
|      * @param moduleDetails      the module id | ||||
|      */ | ||||
|     public static void saveModuleDetails(String warLocation, ModuleDetails moduleDetails) | ||||
|     { | ||||
|      * Saves the module details to the war in the correct location based on the module id | ||||
|      *  | ||||
|      * @param warLocation   the war location | ||||
|      * @param moduleDetails      the module id | ||||
|      */ | ||||
|     public static void saveModuleDetails(String warLocation, ModuleDetails moduleDetails) | ||||
|     { | ||||
|         // Ensure that it is a valid set of properties | ||||
|         String moduleId = moduleDetails.getId(); | ||||
|         try | ||||
| @@ -1,28 +1,28 @@ | ||||
| /* | ||||
|  * #%L | ||||
|  * Alfresco Repository | ||||
|  * %% | ||||
|  * Copyright (C) 2005 - 2016 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% | ||||
|  */ | ||||
| /* | ||||
|  * #%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.module.tool; | ||||
| 
 | ||||
| import de.schlichtherle.truezip.file.*; | ||||
| @@ -1,28 +1,28 @@ | ||||
| /* | ||||
|  * #%L | ||||
|  * Alfresco Repository | ||||
|  * %% | ||||
|  * Copyright (C) 2005 - 2016 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% | ||||
|  */ | ||||
| /* | ||||
|  * #%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.module.tool; | ||||
| 
 | ||||
| import org.alfresco.service.cmr.module.ModuleDetails; | ||||
| @@ -1,28 +1,28 @@ | ||||
| /* | ||||
|  * #%L | ||||
|  * Alfresco Repository | ||||
|  * %% | ||||
|  * Copyright (C) 2005 - 2016 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% | ||||
|  */ | ||||
| /* | ||||
|  * #%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.module.tool; | ||||
| 
 | ||||
| import de.schlichtherle.truezip.file.TArchiveDetector; | ||||
							
								
								
									
										43
									
								
								mmt/src/test/java/org/alfresco/AllMmtUnitTestSuite.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										43
									
								
								mmt/src/test/java/org/alfresco/AllMmtUnitTestSuite.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,43 @@ | ||||
| /* | ||||
|  * #%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; | ||||
|  | ||||
| import org.junit.experimental.categories.Categories; | ||||
| import org.junit.runner.RunWith; | ||||
| import org.junit.runners.Suite; | ||||
|  | ||||
| /** | ||||
|  * All MMT Tool project UNIT test classes (no application context) should be added to this test suite. | ||||
|  */ | ||||
| @RunWith(Categories.class) | ||||
| @Suite.SuiteClasses({ | ||||
|         org.alfresco.repo.module.tool.ModuleManagementToolTest.class, | ||||
|         org.alfresco.repo.module.tool.WarHelperImplTest.class, | ||||
|         org.alfresco.repo.module.tool.ModuleServiceImplTest.class | ||||
| }) | ||||
| public class AllMmtUnitTestSuite | ||||
| { | ||||
| } | ||||
| @@ -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  | ||||
| @@ -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  | ||||
| @@ -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  | ||||
| @@ -9,6 +9,6 @@ | ||||
|     <parent> | ||||
|         <groupId>org.alfresco</groupId> | ||||
|         <artifactId>alfresco-community-repo-packaging</artifactId> | ||||
|         <version>14.95</version> | ||||
|         <version>23.1.0.23-SNAPSHOT</version> | ||||
|     </parent> | ||||
| </project> | ||||
|   | ||||
| @@ -1,6 +1,6 @@ | ||||
| # Fetch image based on Tomcat 9.0, Java 11 and Centos 8 | ||||
| # Fetch image based on Tomcat 9.0, Java 11 and Centos 7 | ||||
| # More infos about this image: https://github.com/Alfresco/alfresco-docker-base-tomcat | ||||
| FROM alfresco/alfresco-base-tomcat:9.0.54-java-11-centos-7 | ||||
| FROM alfresco/alfresco-base-tomcat:tomcat9-jre11-centos7-202203091924 | ||||
|  | ||||
| # Set default docker_context. | ||||
| ARG resource_path=target | ||||
|   | ||||
| @@ -7,7 +7,7 @@ | ||||
|     <parent> | ||||
|         <groupId>org.alfresco</groupId> | ||||
|         <artifactId>alfresco-community-repo-packaging</artifactId> | ||||
|         <version>14.95</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.95</version> | ||||
|         <version>23.1.0.23-SNAPSHOT</version> | ||||
|     </parent> | ||||
|  | ||||
|     <modules> | ||||
|   | ||||
| @@ -1,4 +1,3 @@ | ||||
| TRANSFORMERS_TAG=2.5.6 | ||||
| SOLR6_TAG=2.0.2 | ||||
| SOLR6_TAG=2.0.3 | ||||
| POSTGRES_TAG=13.3 | ||||
| ACTIVEMQ_TAG=5.16.1 | ||||
|   | ||||
| @@ -28,7 +28,8 @@ services: | ||||
|         -Ddb.url=jdbc:postgresql://postgres:5432/alfresco | ||||
|         -Dsolr.host=solr6 | ||||
|         -Dsolr.port=8983 | ||||
|         -Dsolr.secureComms=none | ||||
|         -Dsolr.secureComms=secret | ||||
|         -Dsolr.sharedSecret=secret | ||||
|         -Dsolr.base.url=/solr | ||||
|         -Dindex.subsystem.name=solr6 | ||||
|         -Dalfresco.restApi.basicAuthScheme=true | ||||
| @@ -63,15 +64,19 @@ services: | ||||
|     image: alfresco/alfresco-search-services:${SOLR6_TAG} | ||||
|     environment: | ||||
|       #Solr needs to know how to register itself with Alfresco | ||||
|       - SOLR_ALFRESCO_HOST=alfresco | ||||
|       - SOLR_ALFRESCO_PORT=8080 | ||||
|       SOLR_ALFRESCO_HOST: "alfresco" | ||||
|       SOLR_ALFRESCO_PORT: "8080" | ||||
|       #Alfresco needs to know how to call solr | ||||
|       - SOLR_SOLR_HOST=solr6 | ||||
|       - SOLR_SOLR_PORT=8983 | ||||
|       SOLR_SOLR_HOST: "solr6" | ||||
|       SOLR_SOLR_PORT: "8983" | ||||
|       #Create the default alfresco and archive cores | ||||
|       - SOLR_CREATE_ALFRESCO_DEFAULTS=alfresco,archive | ||||
|       SOLR_CREATE_ALFRESCO_DEFAULTS: "alfresco,archive" | ||||
|       #HTTP by default | ||||
|       - ALFRESCO_SECURE_COMMS=none | ||||
|       ALFRESCO_SECURE_COMMS: "secret" | ||||
|       JAVA_TOOL_OPTIONS: | ||||
|         " | ||||
|         -Dalfresco.secureComms.secret=secret | ||||
|         " | ||||
|     ports: | ||||
|       - 8083:8983 #Browser port | ||||
|  | ||||
|   | ||||
| @@ -28,7 +28,8 @@ services: | ||||
|         -Ddb.url=jdbc:postgresql://postgres:5432/alfresco | ||||
|         -Dsolr.host=solr6 | ||||
|         -Dsolr.port=8983 | ||||
|         -Dsolr.secureComms=none | ||||
|         -Dsolr.secureComms=secret | ||||
|         -Dsolr.sharedSecret=secret | ||||
|         -Dsolr.base.url=/solr | ||||
|         -Dindex.subsystem.name=solr6 | ||||
|         -Dalfresco.restApi.basicAuthScheme=true | ||||
| @@ -66,15 +67,19 @@ services: | ||||
|     image: alfresco/alfresco-search-services:${SOLR6_TAG} | ||||
|     environment: | ||||
|       #Solr needs to know how to register itself with Alfresco | ||||
|       - SOLR_ALFRESCO_HOST=alfresco | ||||
|       - SOLR_ALFRESCO_PORT=8080 | ||||
|       SOLR_ALFRESCO_HOST: "alfresco" | ||||
|       SOLR_ALFRESCO_PORT: "8080" | ||||
|       #Alfresco needs to know how to call solr | ||||
|       - SOLR_SOLR_HOST=solr6 | ||||
|       - SOLR_SOLR_PORT=8983 | ||||
|       SOLR_SOLR_HOST: "solr6" | ||||
|       SOLR_SOLR_PORT: "8983" | ||||
|       #Create the default alfresco and archive cores | ||||
|       - SOLR_CREATE_ALFRESCO_DEFAULTS=alfresco,archive | ||||
|       SOLR_CREATE_ALFRESCO_DEFAULTS: "alfresco,archive" | ||||
|       #HTTP by default | ||||
|       - ALFRESCO_SECURE_COMMS=none | ||||
|       ALFRESCO_SECURE_COMMS: "secret" | ||||
|       JAVA_TOOL_OPTIONS: | ||||
|         " | ||||
|         -Dalfresco.secureComms.secret=secret | ||||
|         " | ||||
|     ports: | ||||
|       - 8083:8983 #Browser port | ||||
|  | ||||
|   | ||||
| @@ -6,7 +6,7 @@ | ||||
|     <parent> | ||||
|         <groupId>org.alfresco</groupId> | ||||
|         <artifactId>alfresco-community-repo-packaging</artifactId> | ||||
|         <version>14.95</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.95</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.95</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.95</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.95</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]"); | ||||
|  | ||||
|   | ||||
| @@ -347,13 +347,30 @@ public class GetSitesTests extends RestTest | ||||
|     public void checkPaginationWithSkipCountAndMaxItems() throws Exception | ||||
|     { | ||||
|         sites = restClient.authenticateUser(regularUser).withParams("skipCount=10&maxItems=110").withCoreAPI().getSites(); | ||||
|  | ||||
|         int expectedCount; | ||||
|         if (sites.getPagination().isHasMoreItems()) | ||||
|         { | ||||
|             expectedCount = sites.getPagination().getMaxItems(); | ||||
|         } | ||||
|         else | ||||
|         { | ||||
|             if (sites.getPagination().getTotalItems() < sites.getPagination().getSkipCount()) | ||||
|             { | ||||
|                 expectedCount = 0; | ||||
|             } | ||||
|             else | ||||
|             { | ||||
|                 expectedCount = sites.getPagination().getTotalItems() - sites.getPagination().getSkipCount(); | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         sites.getPagination().assertThat() | ||||
|                 .field("totalItems").isNotEmpty().and() | ||||
|                 .field("maxItems").is("110").and() | ||||
|                 .field("hasMoreItems").is((sites.getPagination().getTotalItems() - sites.getPagination().getSkipCount() > sites.getPagination().getMaxItems())?"true":"false").and() | ||||
|                 .field("skipCount").is("10").and() | ||||
|                 .field("count").is((sites.getPagination().isHasMoreItems()) ? sites.getPagination().getMaxItems() | ||||
|                 : sites.getPagination().getTotalItems() - sites.getPagination().getSkipCount()); | ||||
|                 .field("count").is(expectedCount); | ||||
|     } | ||||
|  | ||||
|     @Test(groups = { TestGroup.REST_API, TestGroup.SITES, TestGroup.REGRESSION}) | ||||
|   | ||||
| @@ -9,7 +9,7 @@ | ||||
|     <parent> | ||||
|         <groupId>org.alfresco</groupId> | ||||
|         <artifactId>alfresco-community-repo-tests</artifactId> | ||||
|         <version>14.95</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.95</version> | ||||
|         <version>23.1.0.23-SNAPSHOT</version> | ||||
|     </parent> | ||||
|  | ||||
|     <properties> | ||||
|   | ||||
							
								
								
									
										77
									
								
								pom.xml
									
									
									
									
									
								
							
							
						
						
									
										77
									
								
								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.95</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> | ||||
| @@ -47,42 +47,43 @@ | ||||
|         <dependency.alfresco-trashcan-cleaner.version>2.4.1</dependency.alfresco-trashcan-cleaner.version> | ||||
|         <dependency.alfresco-jlan.version>7.1</dependency.alfresco-jlan.version> | ||||
|         <dependency.alfresco-server-root.version>6.0.1</dependency.alfresco-server-root.version> | ||||
|         <dependency.alfresco-messaging-repo.version>1.2.15</dependency.alfresco-messaging-repo.version> | ||||
|         <dependency.alfresco-messaging-repo.version>1.2.19</dependency.alfresco-messaging-repo.version> | ||||
|         <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.8</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.0</dependency.jackson.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> | ||||
|         <dependency.commons-dbcp.version>1.4-DBCP330</dependency.commons-dbcp.version> | ||||
|         <dependency.commons-dbcp.version>2.9.0</dependency.commons-dbcp.version> | ||||
|         <dependency.commons-io.version>2.11.0</dependency.commons-io.version> | ||||
|         <dependency.gson.version>2.8.5</dependency.gson.version> | ||||
|         <dependency.httpclient.version>4.5.13</dependency.httpclient.version> | ||||
|         <dependency.httpcore.version>4.4.15</dependency.httpcore.version> | ||||
|         <dependency.commons-httpclient.version>3.1-HTTPCLIENT-1265</dependency.commons-httpclient.version> | ||||
|         <dependency.xercesImpl.version>2.12.1</dependency.xercesImpl.version> | ||||
|         <dependency.slf4j.version>1.7.33</dependency.slf4j.version> | ||||
|         <dependency.gytheio.version>0.12</dependency.gytheio.version> | ||||
|         <dependency.xercesImpl.version>2.12.2</dependency.xercesImpl.version> | ||||
|         <dependency.slf4j.version>1.7.35</dependency.slf4j.version> | ||||
|         <dependency.gytheio.version>0.16</dependency.gytheio.version> | ||||
|         <dependency.groovy.version>3.0.9</dependency.groovy.version> | ||||
|         <dependency.tika.version>2.2.1</dependency.tika.version>  | ||||
|         <dependency.tika.version>2.2.1</dependency.tika.version> | ||||
|         <dependency.spring-security.version>5.6.1</dependency.spring-security.version> | ||||
|         <dependency.truezip.version>7.7.10</dependency.truezip.version> | ||||
|         <dependency.poi.version>4.1.2</dependency.poi.version> | ||||
|         <dependency.ooxml-schemas.version>1.4</dependency.ooxml-schemas.version> | ||||
|         <dependency.keycloak.version>15.0.2</dependency.keycloak.version> | ||||
|         <dependency.jboss.logging.version>3.4.3.Final</dependency.jboss.logging.version> | ||||
|         <dependency.camel.version>3.7.7</dependency.camel.version> <!-- when bumping this version, please keep track/sync with included netty.io dependencies (can cause dependency conflicts)--> | ||||
|         <dependency.camel.version>3.15.0</dependency.camel.version> <!-- when bumping this version, please keep track/sync with included netty.io dependencies (can cause dependency conflicts)--> | ||||
|         <dependency.activemq.version>5.16.1</dependency.activemq.version> | ||||
|         <dependency.apache-compress.version>1.21</dependency.apache-compress.version> | ||||
|         <dependency.apache.taglibs.version>1.2.5</dependency.apache.taglibs.version> | ||||
| @@ -102,23 +103,23 @@ | ||||
|         <dependency.jakarta-jws-api.version>2.1.0</dependency.jakarta-jws-api.version> | ||||
|         <dependency.jakarta-mail-api.version>1.6.5</dependency.jakarta-mail-api.version> | ||||
|         <dependency.jakarta-json-api.version>1.1.6</dependency.jakarta-json-api.version> | ||||
|         <dependency.jakarta-json-path.version>2.5.0</dependency.jakarta-json-path.version> | ||||
|         <dependency.jakarta-json-path.version>2.7.0</dependency.jakarta-json-path.version> | ||||
|         <dependency.jakarta-rpc-api.version>1.1.4</dependency.jakarta-rpc-api.version> | ||||
|  | ||||
|         <alfresco.googledrive.version>3.2.1.3</alfresco.googledrive.version> | ||||
|         <alfresco.aos-module.version>1.4.0.1</alfresco.aos-module.version> | ||||
|         <alfresco.api-explorer.version>7.2.0-M2</alfresco.api-explorer.version> <!-- Also in alfresco-enterprise-share --> | ||||
|         <alfresco.aos-module.version>1.4.1</alfresco.aos-module.version>  | ||||
|         <alfresco.api-explorer.version>7.2.0</alfresco.api-explorer.version> <!-- Also in alfresco-enterprise-share --> | ||||
|  | ||||
|         <alfresco.maven-plugin.version>2.2.0</alfresco.maven-plugin.version> | ||||
|         <license-maven-plugin.version>2.0.1.alfresco-1</license-maven-plugin.version> | ||||
|         <license-maven-plugin.version>2.0.1.alfresco-2</license-maven-plugin.version> | ||||
|  | ||||
|         <dependency.postgresql.version>42.3.1</dependency.postgresql.version> | ||||
|         <dependency.postgresql.version>42.3.2</dependency.postgresql.version> | ||||
|         <dependency.mysql.version>8.0.27</dependency.mysql.version> | ||||
|         <dependency.mysql-image.version>8</dependency.mysql-image.version> | ||||
|         <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.68</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> | ||||
| @@ -146,7 +147,7 @@ | ||||
|         <connection>scm:git:https://github.com/Alfresco/alfresco-community-repo.git</connection> | ||||
|         <developerConnection>scm:git:https://github.com/Alfresco/alfresco-community-repo.git</developerConnection> | ||||
|         <url>https://github.com/Alfresco/alfresco-community-repo</url> | ||||
|         <tag>14.95</tag> | ||||
|         <tag>HEAD</tag> | ||||
|     </scm> | ||||
|  | ||||
|     <distributionManagement> | ||||
| @@ -563,6 +564,12 @@ | ||||
|                 <groupId>org.alfresco</groupId> | ||||
|                 <artifactId>alfresco-log-sanitizer</artifactId> | ||||
|                 <version>${dependency.alfresco-log-sanitizer.version}</version> | ||||
|                 <exclusions> | ||||
|                     <exclusion> | ||||
|                         <groupId>log4j</groupId> | ||||
|                         <artifactId>log4j</artifactId> | ||||
|                     </exclusion> | ||||
|                 </exclusions> | ||||
|             </dependency> | ||||
|             <dependency> | ||||
|                 <groupId>org.alfresco.aos-module</groupId> | ||||
| @@ -606,7 +613,7 @@ | ||||
|             </dependency> | ||||
|             <dependency> | ||||
|                 <groupId>org.slf4j</groupId> | ||||
|                 <artifactId>slf4j-log4j12</artifactId> | ||||
|                 <artifactId>slf4j-reload4j</artifactId> | ||||
|                 <version>${dependency.slf4j.version}</version> | ||||
|             </dependency> | ||||
|             <dependency> | ||||
| @@ -631,7 +638,7 @@ | ||||
|             <dependency> | ||||
|                 <groupId>com.github.junrar</groupId> | ||||
|                 <artifactId>junrar</artifactId> | ||||
|                 <version>7.4.0</version> | ||||
|                 <version>7.4.1</version> | ||||
|             </dependency> | ||||
|             <dependency> | ||||
|                 <groupId>com.github.fge</groupId> | ||||
| @@ -749,8 +756,8 @@ | ||||
|                 <version>${dependency.mockito-core.version}</version> | ||||
|             </dependency> | ||||
|             <dependency> | ||||
|                 <groupId>commons-dbcp</groupId> | ||||
|                 <artifactId>commons-dbcp</artifactId> | ||||
|                 <groupId>org.apache.commons</groupId> | ||||
|                 <artifactId>commons-dbcp2</artifactId> | ||||
|                 <version>${dependency.commons-dbcp.version}</version> | ||||
|             </dependency> | ||||
|             <dependency> | ||||
| @@ -760,7 +767,12 @@ | ||||
|             </dependency> | ||||
|             <dependency> | ||||
|                 <groupId>org.apache.camel</groupId> | ||||
|                 <artifactId>camel-spring</artifactId> | ||||
|                 <artifactId>camel-core</artifactId> | ||||
|                 <version>${dependency.camel.version}</version> | ||||
|             </dependency> | ||||
|             <dependency> | ||||
|                 <groupId>org.apache.camel</groupId> | ||||
|                 <artifactId>camel-spring-xml</artifactId> | ||||
|                 <version>${dependency.camel.version}</version> | ||||
|                 <exclusions> | ||||
|                     <exclusion> | ||||
| @@ -789,11 +801,6 @@ | ||||
|                     </exclusion> | ||||
|                 </exclusions> | ||||
|             </dependency> | ||||
|             <dependency> | ||||
|                 <groupId>io.netty</groupId> | ||||
|                 <artifactId>netty-codec-http</artifactId> | ||||
|                 <version>4.1.72.Final</version> | ||||
|             </dependency> | ||||
|             <dependency> | ||||
|                 <!--  If you are going to bump dependency.camel.version, please check if the netty-codec-http has higher version that the one above.--> | ||||
|                 <groupId>org.apache.camel</groupId> | ||||
| @@ -850,7 +857,7 @@ | ||||
|             <dependency> | ||||
|                 <groupId>org.reflections</groupId> | ||||
|                 <artifactId>reflections</artifactId> | ||||
|                 <version>0.9.12</version> | ||||
|                 <version>0.10.2</version> | ||||
|             </dependency> | ||||
|             <!-- swagger parser --> | ||||
|             <dependency> | ||||
| @@ -881,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> | ||||
| @@ -939,7 +946,7 @@ | ||||
|                                 <failOnMissing>true</failOnMissing> | ||||
|                                 <excludedScopes>provided,test</excludedScopes> | ||||
|                                 <excludedGroups>^(org\.alfresco|com\.alfresco|org\.activiti|org\.gytheio).*</excludedGroups> | ||||
|                                 <failIfWarning>false</failIfWarning> | ||||
|                                 <failIfWarning>true</failIfWarning> | ||||
|                                 <includedLicenses> | ||||
|                                     https://raw.githubusercontent.com/Alfresco/third-party-license-overrides/master/includedLicenses.txt | ||||
|                                 </includedLicenses> | ||||
|   | ||||
| @@ -7,7 +7,7 @@ | ||||
|     <parent> | ||||
|         <groupId>org.alfresco</groupId> | ||||
|         <artifactId>alfresco-community-repo</artifactId> | ||||
|         <version>14.95</version> | ||||
|         <version>23.1.0.23-SNAPSHOT</version> | ||||
|     </parent> | ||||
|  | ||||
|     <dependencies> | ||||
|   | ||||
| @@ -30,49 +30,37 @@ import org.alfresco.rest.api.model.ArchiveContentRequest; | ||||
| import org.alfresco.rest.api.model.ContentStorageInfo; | ||||
| import org.alfresco.rest.api.model.RestoreArchivedContentRequest; | ||||
| import org.alfresco.rest.framework.resource.parameters.Parameters; | ||||
| import org.alfresco.service.Experimental; | ||||
| import org.alfresco.service.cmr.repository.NodeRef; | ||||
|  | ||||
| /** | ||||
|  * Storage information for content API. | ||||
|  * Note: Currently marked as experimental and subject to change. | ||||
|  * | ||||
|  * @author mpichura | ||||
|  */ | ||||
| @Experimental | ||||
| public interface ContentStorageInformation | ||||
| { | ||||
|     /** | ||||
|      * Note: Currently marked as experimental and subject to change. | ||||
|      * | ||||
|      * @param nodeRef         Node reference | ||||
|      * @param contentPropName Qualified name of content property (e.g. 'cm_content') | ||||
|      * @param parameters      {@link Parameters} object to get the parameters passed into the request | ||||
|      * @return {@link ContentStorageInfo} object consisting of qualified name of content property and a map of storage properties | ||||
|      */ | ||||
|     @Experimental | ||||
|     ContentStorageInfo getStorageInfo(NodeRef nodeRef, String contentPropName, Parameters parameters); | ||||
|  | ||||
|     /** | ||||
|      * Note: Currently marked as experimental and subject to change. | ||||
|      * | ||||
|      * @param nodeRef               Node reference | ||||
|      * @param contentPropName       Qualified name of content property (e.g. 'cm_content') | ||||
|      * @param archiveContentRequest {@link ArchiveContentRequest} object holding parameters for archive content request | ||||
|      * @return true when request successful, false when unsuccessful | ||||
|      */ | ||||
|     @Experimental | ||||
|     boolean requestArchiveContent(NodeRef nodeRef, String contentPropName, ArchiveContentRequest archiveContentRequest); | ||||
|  | ||||
|     /** | ||||
|      * Note: Currently marked as experimental and subject to change. | ||||
|      * | ||||
|      * @param nodeRef                       Node reference | ||||
|      * @param contentPropName               Qualified name of content property (e.g. 'cm_content') | ||||
|      * @param restoreArchivedContentRequest {@link RestoreArchivedContentRequest} object holding parameters for restore from archive request | ||||
|      * @return true when request successful, false when unsuccessful | ||||
|      */ | ||||
|     @Experimental | ||||
|     boolean requestRestoreContentFromArchive(NodeRef nodeRef, String contentPropName, | ||||
|                                              RestoreArchivedContentRequest restoreArchivedContentRequest); | ||||
| } | ||||
|   | ||||
| @@ -33,7 +33,6 @@ import org.alfresco.rest.api.model.ContentStorageInfo; | ||||
| import org.alfresco.rest.api.model.RestoreArchivedContentRequest; | ||||
| import org.alfresco.rest.framework.core.exceptions.RestoreInProgressException; | ||||
| import org.alfresco.rest.framework.resource.parameters.Parameters; | ||||
| import org.alfresco.service.Experimental; | ||||
| import org.alfresco.service.cmr.repository.ContentService; | ||||
| import org.alfresco.service.cmr.repository.NodeRef; | ||||
| import org.alfresco.service.namespace.NamespaceService; | ||||
| @@ -45,11 +44,9 @@ import java.util.Map; | ||||
|  | ||||
| /** | ||||
|  * Default implementation for {@link ContentStorageInformation} | ||||
|  * Note: Currently marked as experimental and subject to change. | ||||
|  * | ||||
|  * @author mpichura | ||||
|  */ | ||||
| @Experimental | ||||
| public class ContentStorageInformationImpl implements ContentStorageInformation | ||||
| { | ||||
|  | ||||
| @@ -68,7 +65,6 @@ public class ContentStorageInformationImpl implements ContentStorageInformation | ||||
|      * {@inheritDoc} | ||||
|      */ | ||||
|     @Override | ||||
|     @Experimental | ||||
|     public ContentStorageInfo getStorageInfo(NodeRef nodeRef, String contentPropName, Parameters parameters) | ||||
|     { | ||||
|         final QName propQName = getQName(contentPropName); | ||||
|   | ||||
| @@ -38,7 +38,6 @@ import org.alfresco.rest.api.Nodes; | ||||
| import org.alfresco.rest.api.model.Download; | ||||
| import org.alfresco.rest.framework.core.exceptions.InvalidArgumentException; | ||||
| import org.alfresco.rest.framework.core.exceptions.PermissionDeniedException; | ||||
| import org.alfresco.service.Experimental; | ||||
| import org.alfresco.service.cmr.download.DownloadService; | ||||
| import org.alfresco.service.cmr.download.DownloadStatus; | ||||
| import org.alfresco.service.cmr.module.ModuleService; | ||||
| @@ -214,8 +213,7 @@ public class DownloadsImpl implements Downloads | ||||
|      * @param checkLimit The maximum number of nodes to check, set to -1 for no limit | ||||
|      * @see #checkArchiveStatus(NodeRef[], int, Set) | ||||
|      */ | ||||
|     @Experimental | ||||
|     protected void checkArchiveStatus(NodeRef[] nodeRefs, int checkLimit)  | ||||
|     protected void checkArchiveStatus(NodeRef[] nodeRefs, int checkLimit) | ||||
|     { | ||||
|         if (canCheckArchived())  | ||||
|         { | ||||
| @@ -234,7 +232,6 @@ public class DownloadsImpl implements Downloads | ||||
|      * @param checkLimit The maximum number of nodes to check, set to -1 for no limit | ||||
|      * @param cache Tracks nodes that we have already checked, if null an empty cache will be created | ||||
|      */ | ||||
|     @Experimental | ||||
|     private void checkArchiveStatus(NodeRef[] nodeRefs, int checkLimit, Set<NodeRef> cache) | ||||
|     { | ||||
|         // Create the cache for recursive calls. | ||||
| @@ -291,8 +288,7 @@ public class DownloadsImpl implements Downloads | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     @Experimental | ||||
|     protected boolean canCheckArchived()  | ||||
|     protected boolean canCheckArchived() | ||||
|     { | ||||
|         return Arrays.stream(CLOUD_CONNECTOR_MODULES).anyMatch(m-> moduleService.getModule(m) != null); | ||||
|     } | ||||
|   | ||||
| @@ -3132,26 +3132,18 @@ public class NodesImpl implements Nodes | ||||
|             // Write content | ||||
|             writeContent(nodeRef, fileName, content.getInputStream(), true); | ||||
|         } | ||||
|          | ||||
|  | ||||
|         if ((versionMajor != null) || (versionComment != null)) | ||||
|         { | ||||
|             behaviourFilter.disableBehaviour(nodeRef, ContentModel.ASPECT_VERSIONABLE); | ||||
|             try | ||||
|             // by default, first version is major, unless specified otherwise | ||||
|             VersionType versionType = VersionType.MAJOR; | ||||
|             if ((versionMajor != null) && (!versionMajor)) | ||||
|             { | ||||
|                 // by default, first version is major, unless specified otherwise | ||||
|                 VersionType versionType = VersionType.MAJOR; | ||||
|                 if ((versionMajor != null) && (!versionMajor)) | ||||
|                 { | ||||
|                     versionType = VersionType.MINOR; | ||||
|                 } | ||||
|  | ||||
|                 createVersion(nodeRef, false, versionType, versionComment); | ||||
|  | ||||
|                 extractMetadata(nodeRef); | ||||
|             } finally | ||||
|             { | ||||
|                 behaviourFilter.enableBehaviour(nodeRef, ContentModel.ASPECT_VERSIONABLE); | ||||
|                 versionType = VersionType.MINOR; | ||||
|             } | ||||
|  | ||||
|             createVersion(nodeRef, false, versionType, versionComment); | ||||
|             extractMetadata(nodeRef); | ||||
|         } | ||||
|  | ||||
|         return nodeRef; | ||||
|   | ||||
| @@ -26,19 +26,15 @@ | ||||
|  | ||||
| package org.alfresco.rest.api.model; | ||||
|  | ||||
| import org.alfresco.service.Experimental; | ||||
|  | ||||
| import java.io.Serializable; | ||||
| import java.util.HashMap; | ||||
| import java.util.Map; | ||||
|  | ||||
| /** | ||||
|  * Request for content archive. | ||||
|  * Marked as experimental and subject to change. | ||||
|  * | ||||
|  * @author mpichura | ||||
|  */ | ||||
| @Experimental | ||||
| public class ArchiveContentRequest | ||||
| { | ||||
|     /** | ||||
|   | ||||
| @@ -26,15 +26,11 @@ | ||||
|  | ||||
| package org.alfresco.rest.api.model; | ||||
|  | ||||
| import org.alfresco.service.Experimental; | ||||
|  | ||||
| /** | ||||
|  * Request for restore content from archive. | ||||
|  * Marked as experimental and subject to change. | ||||
|  * | ||||
|  * @author mpichura | ||||
|  */ | ||||
| @Experimental | ||||
| public class RestoreArchivedContentRequest | ||||
| { | ||||
|     /** | ||||
|   | ||||
| @@ -39,7 +39,6 @@ import org.alfresco.rest.framework.resource.RelationshipResource; | ||||
| import org.alfresco.rest.framework.resource.actions.interfaces.RelationshipResourceAction; | ||||
| import org.alfresco.rest.framework.resource.parameters.Parameters; | ||||
| import org.alfresco.rest.framework.webscripts.WithResponse; | ||||
| import org.alfresco.service.Experimental; | ||||
| import org.alfresco.service.cmr.repository.NodeRef; | ||||
| import org.alfresco.service.cmr.repository.StoreRef; | ||||
| import org.alfresco.util.PropertyCheck; | ||||
| @@ -49,11 +48,9 @@ import javax.servlet.http.HttpServletResponse; | ||||
|  | ||||
| /** | ||||
|  * Node storage information. | ||||
|  * Note: Currently marked as experimental and subject to change. | ||||
|  * | ||||
|  * @author mpichura | ||||
|  */ | ||||
| @Experimental | ||||
| @RelationshipResource(name = "storage-info", entityResource = NodesEntityResource.class, title = "Node's content storage information") | ||||
| public class NodeStorageInfoRelation implements RelationshipResourceAction.ReadById<ContentStorageInfo>, InitializingBean | ||||
| { | ||||
| @@ -82,7 +79,6 @@ public class NodeStorageInfoRelation implements RelationshipResourceAction.ReadB | ||||
|         return storageInformation.getStorageInfo(nodeRef, contentPropName, parameters); | ||||
|     } | ||||
|  | ||||
|     @Experimental | ||||
|     @Operation("archive") | ||||
|     @WebApiParam(name = "archiveContentRequest", title = "Request for archive content", | ||||
|             description = "Optional parameters for archive content", kind = ResourceParameter.KIND.HTTP_BODY_OBJECT) | ||||
| @@ -103,7 +99,6 @@ public class NodeStorageInfoRelation implements RelationshipResourceAction.ReadB | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     @Experimental | ||||
|     @Operation("archive-restore") | ||||
|     @WebApiParam(name = "restoreArchivedContentRequest", title = "Request for restore content from archive", | ||||
|             description = "Optional parameters for restore content from archive", kind = ResourceParameter.KIND.HTTP_BODY_OBJECT) | ||||
|   | ||||
| @@ -26,18 +26,28 @@ | ||||
|  | ||||
| package org.alfresco.rest.api.nodes; | ||||
|  | ||||
| import javax.servlet.http.HttpServletResponse; | ||||
| import java.util.List; | ||||
|  | ||||
| import org.alfresco.repo.content.directurl.DirectAccessUrlDisabledException; | ||||
| import org.alfresco.rest.api.DirectAccessUrlHelper; | ||||
| import org.alfresco.rest.api.Renditions; | ||||
| import org.alfresco.rest.api.model.DirectAccessUrlRequest; | ||||
| import org.alfresco.rest.api.model.Rendition; | ||||
| import org.alfresco.rest.framework.BinaryProperties; | ||||
| import org.alfresco.rest.framework.Operation; | ||||
| import org.alfresco.rest.framework.WebApiDescription; | ||||
| import org.alfresco.rest.framework.WebApiParam; | ||||
| import org.alfresco.rest.framework.core.ResourceParameter; | ||||
| import org.alfresco.rest.framework.core.exceptions.DisabledServiceException; | ||||
| import org.alfresco.rest.framework.resource.RelationshipResource; | ||||
| import org.alfresco.rest.framework.resource.actions.interfaces.RelationshipResourceAction; | ||||
| import org.alfresco.rest.framework.resource.actions.interfaces.RelationshipResourceBinaryAction; | ||||
| import org.alfresco.rest.framework.resource.content.BinaryResource; | ||||
| import org.alfresco.rest.framework.resource.parameters.CollectionWithPagingInfo; | ||||
| import org.alfresco.rest.framework.resource.parameters.Parameters; | ||||
| import org.alfresco.rest.framework.webscripts.WithResponse; | ||||
| import org.alfresco.service.cmr.repository.DirectAccessUrl; | ||||
| import org.alfresco.service.cmr.repository.NodeRef; | ||||
| import org.alfresco.service.cmr.repository.StoreRef; | ||||
| import org.alfresco.util.PropertyCheck; | ||||
| @@ -53,6 +63,7 @@ import org.springframework.extensions.webscripts.Status; | ||||
|  * - GET    /nodes/{nodeId}/versions/{versionId}/renditions/{renditionId} | ||||
|  * - DELETE /nodes/{nodeId}/versions/{versionId}/renditions/{renditionId} | ||||
|  * - GET    /nodes/{nodeId}/versions/{versionId}/renditions/{renditionId}/content | ||||
|  * - POST   /nodes/{nodeId}/versions/{versionId}/renditions/{renditionId}/request-direct-access-url | ||||
|  * | ||||
|  * @author janv | ||||
|  */ | ||||
| @@ -65,12 +76,18 @@ public class NodeVersionRenditionsRelation implements RelationshipResourceAction | ||||
|         InitializingBean | ||||
| { | ||||
|     private Renditions renditions; | ||||
|     private DirectAccessUrlHelper directAccessUrlHelper; | ||||
|  | ||||
|     public void setRenditions(Renditions renditions) | ||||
|     { | ||||
|         this.renditions = renditions; | ||||
|     } | ||||
|  | ||||
|     public void setDirectAccessUrlHelper(DirectAccessUrlHelper directAccessUrlHelper) | ||||
|     { | ||||
|         this.directAccessUrlHelper = directAccessUrlHelper; | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void afterPropertiesSet() throws Exception | ||||
|     { | ||||
| @@ -117,6 +134,36 @@ public class NodeVersionRenditionsRelation implements RelationshipResourceAction | ||||
|         return renditions.getContent(nodeRef, versionId, renditionId, parameters); | ||||
|     } | ||||
|  | ||||
|     @Operation ("request-direct-access-url") | ||||
|     @WebApiParam (name = "directAccessUrlRequest", | ||||
|                   title = "Request direct access url", | ||||
|                   description = "Options for direct access url request", | ||||
|                   kind = ResourceParameter.KIND.HTTP_BODY_OBJECT) | ||||
|     @WebApiDescription(title = "Request content url", | ||||
|                        description="Generates a direct access URL.", | ||||
|                        successStatus = HttpServletResponse.SC_OK) | ||||
|     public DirectAccessUrl requestContentDirectUrl(String nodeId, | ||||
|                                                    String versionId, | ||||
|                                                    DirectAccessUrlRequest directAccessUrlRequest, | ||||
|                                                    Parameters parameters, WithResponse withResponse) | ||||
|     { | ||||
|         boolean attachment = directAccessUrlHelper.getAttachment(directAccessUrlRequest); | ||||
|         Long validFor = directAccessUrlHelper.getDefaultExpiryTimeInSec(); | ||||
|         NodeRef nodeRef = new NodeRef(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE, nodeId); | ||||
|         String renditionId = parameters.getRelationship2Id(); | ||||
|  | ||||
|         DirectAccessUrl directAccessUrl; | ||||
|         try | ||||
|         { | ||||
|             directAccessUrl = renditions.requestContentDirectUrl(nodeRef, versionId, renditionId, attachment, validFor); | ||||
|         } | ||||
|         catch (DirectAccessUrlDisabledException ex) | ||||
|         { | ||||
|             throw new DisabledServiceException(ex.getMessage()); | ||||
|         } | ||||
|         return directAccessUrl; | ||||
|     } | ||||
|  | ||||
|     @WebApiDescription(title = "Delete rendition") | ||||
|     @Override | ||||
|     public void delete(String nodeId, String versionId, Parameters parameters) | ||||
|   | ||||
| @@ -40,7 +40,6 @@ import org.alfresco.rest.framework.resource.RelationshipResource; | ||||
| import org.alfresco.rest.framework.resource.actions.interfaces.RelationshipResourceAction; | ||||
| import org.alfresco.rest.framework.resource.parameters.Parameters; | ||||
| import org.alfresco.rest.framework.webscripts.WithResponse; | ||||
| import org.alfresco.service.Experimental; | ||||
| import org.alfresco.service.cmr.repository.NodeRef; | ||||
| import org.alfresco.service.cmr.version.Version; | ||||
| import org.alfresco.util.PropertyCheck; | ||||
| @@ -52,12 +51,9 @@ import javax.servlet.http.HttpServletResponse; | ||||
|  * Node Versions storage information. | ||||
|  * | ||||
|  *  - GET  /nodes/{nodeId}/versions/{versionId}/storage-info/{contentPropQNameId} | ||||
|  *  | ||||
|  * Note: Currently marked as experimental and subject to change. | ||||
|  * | ||||
|  * @author janv | ||||
|  */ | ||||
| @Experimental | ||||
| @RelationshipResource(name = "storage-info", entityResource = NodeVersionsRelation.class, title = "Node Version's content storage information") | ||||
| public class NodeVersionsStorageInfoRelation implements RelationshipResourceAction.ReadById<ContentStorageInfo>, InitializingBean | ||||
| { | ||||
| @@ -91,7 +87,6 @@ public class NodeVersionsStorageInfoRelation implements RelationshipResourceActi | ||||
|         return storageInformation.getStorageInfo(versionNodeRef, contentPropQNameId, parameters); | ||||
|     } | ||||
|  | ||||
|     @Experimental | ||||
|     @Operation("archive") | ||||
|     @WebApiParam(name = "archiveContentRequest", title = "Request for archive version content", | ||||
|             description = "Optional parameters for archive version content", kind = ResourceParameter.KIND.HTTP_BODY_OBJECT) | ||||
| @@ -116,7 +111,6 @@ public class NodeVersionsStorageInfoRelation implements RelationshipResourceActi | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     @Experimental | ||||
|     @Operation("archive-restore") | ||||
|     @WebApiParam(name = "restoreArchivedContentRequest", title = "Request for restore version content from archive", | ||||
|             description = "Optional parameters for restore version content from archive", kind = ResourceParameter.KIND.HTTP_BODY_OBJECT) | ||||
|   | ||||
| @@ -25,15 +25,12 @@ | ||||
|  */ | ||||
| package org.alfresco.rest.framework.core.exceptions; | ||||
|  | ||||
| import org.alfresco.service.Experimental; | ||||
|  | ||||
| /** | ||||
|  * Thrown when the content is archived and not readily accessible. | ||||
|  * Status is <i>Precondition Failed</i> client error = 412. | ||||
|  * | ||||
|  * @author David Edwards | ||||
|  */ | ||||
| @Experimental | ||||
| public class ArchivedContentException  extends  ApiException | ||||
| { | ||||
|  | ||||
|   | ||||
| @@ -25,9 +25,6 @@ | ||||
|  */ | ||||
| package org.alfresco.rest.framework.core.exceptions; | ||||
|  | ||||
| import org.alfresco.service.Experimental; | ||||
|  | ||||
| @Experimental | ||||
| public class RestoreInProgressException extends  ApiException | ||||
| { | ||||
|     public static String DEFAULT_MESSAGE_ID = "framework.exception.RestoreInProgress"; | ||||
|   | ||||
| @@ -85,8 +85,7 @@ public class AlfrescoX509ServletFilter extends X509ServletFilterBase | ||||
|                 throw new AlfrescoRuntimeException("Missing value for sharedSecretHeader"); | ||||
|             } | ||||
|         } | ||||
|         /* | ||||
|         // TODO: Activate this part after OPSEXP-1163 got implemented | ||||
|  | ||||
|         if(secureComms == SecureCommsType.NONE) | ||||
|         { | ||||
|             if(!"true".equalsIgnoreCase(config.getInitParameter("allow-unauthenticated-solr-endpoint"))) | ||||
| @@ -94,7 +93,7 @@ public class AlfrescoX509ServletFilter extends X509ServletFilterBase | ||||
|                 throw new AlfrescoRuntimeException("solr.secureComms=none is no longer supported. Please use https or secret"); | ||||
|             } | ||||
|         } | ||||
|         */ | ||||
|  | ||||
|         super.init(config); | ||||
|     } | ||||
|  | ||||
|   | ||||
| @@ -1452,6 +1452,7 @@ | ||||
|  | ||||
|     <bean class="org.alfresco.rest.api.nodes.NodeVersionRenditionsRelation"> | ||||
|         <property name="renditions" ref="Renditions" /> | ||||
|         <property name="directAccessUrlHelper" ref="directAccessUrlHelper" /> | ||||
|     </bean> | ||||
|  | ||||
|     <bean class="org.alfresco.rest.api.quicksharelinks.QuickShareLinkRenditionsRelation"> | ||||
|   | ||||
| @@ -357,12 +357,13 @@ function main() | ||||
|          updateNode.properties.content.write(content, updateNameAndMimetype, true, newFilename); | ||||
|          // check it in again, with supplied version history note | ||||
|           | ||||
|          updateNode = updateNode.checkin(description, majorVersion); | ||||
|  | ||||
|          // Extract the metadata | ||||
|          // (The overwrite policy controls which if any parts of | ||||
|          //  the document's properties are updated from this) | ||||
|          extractMetadata(updateNode); | ||||
|           | ||||
|          updateNode = updateNode.checkin(description, majorVersion); | ||||
|  | ||||
|          if (aspects.length != 0) | ||||
|          { | ||||
|             for (i = 0; i < aspects.length; i++) | ||||
|   | ||||
| @@ -51,8 +51,11 @@ import org.junit.runners.Suite; | ||||
|     org.alfresco.rest.api.tests.GroupsTest.class, | ||||
|     org.alfresco.rest.api.tests.ModulePackagesApiTest.class, | ||||
|     org.alfresco.rest.api.tests.NodeApiTest.class, | ||||
|     org.alfresco.rest.api.tests.NodeApiVersioningMultipartParameterizedTest.class, | ||||
|     org.alfresco.rest.api.tests.NodeApiVersioningJsonParameterizedTest.class, | ||||
|     org.alfresco.rest.api.tests.NodeAssociationsApiTest.class, | ||||
|     org.alfresco.rest.api.tests.NodeVersionsApiTest.class, | ||||
|     org.alfresco.rest.api.tests.NodeVersionRenditionsApiTest.class, | ||||
|     org.alfresco.rest.api.tests.QueriesNodesApiTest.class, | ||||
|     org.alfresco.rest.api.tests.QueriesPeopleApiTest.class, | ||||
|     org.alfresco.rest.api.tests.QueriesSitesApiTest.class, | ||||
|   | ||||
| @@ -40,6 +40,7 @@ import org.junit.runners.Suite; | ||||
|     org.alfresco.repo.web.scripts.solr.StatsGetTest.class, | ||||
|     org.alfresco.repo.web.scripts.solr.SOLRSerializerTest.class, | ||||
|     org.alfresco.repo.web.scripts.solr.SOLRAuthenticationFilterTest.class, | ||||
|     org.alfresco.web.app.servlet.AlfrescoX509ServletFilterTest.class, | ||||
|     org.alfresco.repo.web.util.PagingCursorTest.class, | ||||
|     org.alfresco.repo.web.util.paging.PagingTest.class, | ||||
|     org.alfresco.repo.webdav.GetMethodTest.class, | ||||
|   | ||||
| @@ -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) | ||||
|     { | ||||
|   | ||||
| @@ -25,6 +25,8 @@ | ||||
|  */ | ||||
| package org.alfresco.rest.api.tests; | ||||
|  | ||||
| import org.alfresco.repo.content.directurl.SystemWideDirectUrlConfig; | ||||
| import org.alfresco.rest.api.impl.directurl.RestApiDirectUrlConfig; | ||||
| import org.alfresco.rest.api.tests.client.PublicApiHttpClient; | ||||
| import static org.alfresco.rest.api.tests.util.RestApiUtil.toJsonAsString; | ||||
| import static org.alfresco.rest.api.tests.util.RestApiUtil.toJsonAsStringNonNull; | ||||
| @@ -219,6 +221,11 @@ public abstract class AbstractBaseApiTest extends EnterpriseTestApi | ||||
|         return URL_NODES + "/" + nodeId + "/" + REQUEST_DIRECT_ACCESS_URL; | ||||
|     } | ||||
|  | ||||
|     protected String getRequestVersionRenditionContentDirectUrl(String nodeId, String versionId, String renditionId) | ||||
|     { | ||||
|         return getNodeVersionRenditionIdUrl(nodeId, versionId, renditionId) + "/" + REQUEST_DIRECT_ACCESS_URL; | ||||
|     } | ||||
|  | ||||
|     protected String getRequestArchivedContentDirectUrl(String nodeId) | ||||
|     { | ||||
|         return URL_DELETED_NODES + "/" + nodeId + "/" + REQUEST_DIRECT_ACCESS_URL; | ||||
| @@ -229,6 +236,17 @@ public abstract class AbstractBaseApiTest extends EnterpriseTestApi | ||||
|         return URL_DELETED_NODES + "/" + nodeId + "/" + URL_RENDITIONS + "/" + renditionID + "/" + REQUEST_DIRECT_ACCESS_URL; | ||||
|     } | ||||
|  | ||||
|     protected String getRequestRenditionDirectAccessUrl(String nodeId, String renditionID) | ||||
|     { | ||||
|         return URL_NODES + "/" + nodeId + "/" + URL_RENDITIONS + "/" + renditionID + "/" + REQUEST_DIRECT_ACCESS_URL; | ||||
|     } | ||||
|  | ||||
|     protected String getRequestVersionDirectAccessUrl(String nodeId, String versionId) | ||||
|     { | ||||
|         return URL_NODES + "/" + nodeId + "/" + URL_VERSIONS + "/" + versionId + "/" + REQUEST_DIRECT_ACCESS_URL; | ||||
|     } | ||||
|  | ||||
|  | ||||
|     /** | ||||
|      * The api scope. either public or private | ||||
|      * | ||||
| @@ -724,6 +742,18 @@ public abstract class AbstractBaseApiTest extends EnterpriseTestApi | ||||
|         return createNode(parentId, folderName, TYPE_CM_FOLDER, props, Folder.class); | ||||
|     } | ||||
|  | ||||
|     protected String createUniqueFolder(String parentId) throws Exception | ||||
|     { | ||||
|         return createFolder(parentId, "folder-" + System.currentTimeMillis()).getId(); | ||||
|     } | ||||
|  | ||||
|     protected String createUniqueContent(String folderId) throws Exception | ||||
|     { | ||||
|         Document documentResp = createTextFile(folderId, "file-" + System.currentTimeMillis(), | ||||
|         "some text-" + System.currentTimeMillis(), "UTF-8", null); | ||||
|         return documentResp.getId(); | ||||
|     } | ||||
|  | ||||
|     protected Node createNode(String parentId, String nodeName, String nodeType, Map<String, Object> props) throws Exception | ||||
|     { | ||||
|         return createNode(parentId, nodeName, nodeType, props, Node.class); | ||||
| @@ -1075,5 +1105,20 @@ public abstract class AbstractBaseApiTest extends EnterpriseTestApi | ||||
|         return URL_NODES + "/" + nodeId; | ||||
|     } | ||||
|  | ||||
|     protected void enableRestDirectAccessUrls() | ||||
|     { | ||||
|         SystemWideDirectUrlConfig systemDauConfig = (SystemWideDirectUrlConfig) applicationContext.getBean("systemWideDirectUrlConfig"); | ||||
|         systemDauConfig.setEnabled(true); | ||||
|         RestApiDirectUrlConfig restDauConfig = (RestApiDirectUrlConfig) applicationContext.getBean("restApiDirectUrlConfig"); | ||||
|         restDauConfig.setEnabled(true); | ||||
|     } | ||||
|  | ||||
|     protected void disableRestDirectAccessUrls() | ||||
|     { | ||||
|         SystemWideDirectUrlConfig systemDauConfig = (SystemWideDirectUrlConfig) applicationContext.getBean("systemWideDirectUrlConfig"); | ||||
|         systemDauConfig.setEnabled(false); | ||||
|         RestApiDirectUrlConfig restDauConfig = (RestApiDirectUrlConfig) applicationContext.getBean("restApiDirectUrlConfig"); | ||||
|         restDauConfig.setEnabled(false); | ||||
|     } | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -6279,92 +6279,70 @@ public class NodeApiTest extends AbstractSingleNetworkSiteTest | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
|     public void testRequestVersionsContentDirectUrl() throws Exception | ||||
|     public void testRequestContentDirectUrlClientErrorResponseForNodes() throws Exception | ||||
|     { | ||||
|         enableRestDirectAccessUrls(); | ||||
|  | ||||
|         //Node does not exist | ||||
|         setRequestContext(user1); | ||||
|  | ||||
|         String myNodeId = getMyNodeId(); | ||||
|         HttpResponse nodeDoesNotExistResponse = post(getRequestContentDirectUrl("non-existing-node-id"), null, 404); | ||||
|  | ||||
|         Document d1 = new Document(); | ||||
|         d1.setName("d1.txt"); | ||||
|         d1.setNodeType(TYPE_CM_CONTENT); | ||||
|         //Node is not a file | ||||
|         String folderId = createFolder(tDocLibNodeId, "some-folder-name").getId(); | ||||
|         HttpResponse nodeIsNotAFileReponse = post(getRequestContentDirectUrl(folderId), null, 400); | ||||
|  | ||||
|         // create *empty* text file - as of now, versioning is not enabled by default | ||||
|         HttpResponse response = post(getNodeChildrenUrl(myNodeId), toJsonAsStringNonNull(d1), 201); | ||||
|         Document documentResp = RestApiUtil.parseRestApiEntry(response.getJsonResponse(), Document.class); | ||||
|  | ||||
|         String docId = documentResp.getId(); | ||||
|         assertFalse(documentResp.getAspectNames().contains("cm:versionable")); | ||||
|         assertNull(documentResp.getProperties()); // no properties (ie. no "cm:versionLabel") | ||||
|  | ||||
|         int majorVersion = 1; | ||||
|         int minorVersion = 0; | ||||
|  | ||||
|         String content = "The quick brown fox jumps over the lazy dog "; | ||||
|  | ||||
|         Map<String, String> params = new HashMap<>(); | ||||
|         params.put("comment", "my version "); | ||||
|  | ||||
|         documentResp = updateTextFile(docId, content, params); | ||||
|         assertTrue(documentResp.getAspectNames().contains("cm:versionable")); | ||||
|         assertNotNull(documentResp.getProperties()); | ||||
|         assertEquals(majorVersion+"."+minorVersion, documentResp.getProperties().get("cm:versionLabel")); | ||||
|  | ||||
|         final String contentNodeId = documentResp.getId(); | ||||
|  | ||||
|         // Check the upload response | ||||
|         assertNotNull(documentResp.getProperties()); | ||||
|         assertTrue(documentResp.getAspectNames().contains("cm:versionable")); | ||||
|         ContentInfo contentInfo = documentResp.getContent(); | ||||
|         assertNotNull(contentInfo); | ||||
|         assertEquals(MimetypeMap.MIMETYPE_TEXT_PLAIN, contentInfo.getMimeType()); | ||||
|  | ||||
|         HttpResponse dauResponse = post(getRequestContentDirectUrl(contentNodeId), null, null, null, null, 501); | ||||
|         disableRestDirectAccessUrls(); | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
|     public void testRequestRenditionContentDirectUrl() throws Exception | ||||
|     public void testRequestContentDirectUrlClientErrorResponseForVersions() throws Exception | ||||
|     { | ||||
|         enableRestDirectAccessUrls(); | ||||
|         // Create a document | ||||
|         setRequestContext(user1); | ||||
|  | ||||
|         RepoService.TestNetwork networkN1; | ||||
|         RepoService.TestPerson userOneN1; | ||||
|         Site userOneN1Site; | ||||
|         String folderNodeId = createUniqueFolder(getMyNodeId()); | ||||
|         String contentNodeId = createUniqueContent(folderNodeId); | ||||
|  | ||||
|         networkN1 = repoService.createNetworkWithAlias("ping", true); | ||||
|         networkN1.create(); | ||||
|         userOneN1 = networkN1.createUser(); | ||||
|         // Verify versions | ||||
|         HttpResponse versionIdDoesNotExistReponse = post(getRequestVersionDirectAccessUrl(contentNodeId, "1.2"), null, null, null, null, 404); | ||||
|         HttpResponse versionIdInvalidReponse = post(getRequestVersionDirectAccessUrl(contentNodeId, "invalid-version"), null, null, null, null, 404); | ||||
|  | ||||
|         setRequestContext(networkN1.getId(), userOneN1.getId(), null); | ||||
|         disableRestDirectAccessUrls(); | ||||
|     } | ||||
|  | ||||
|         String siteTitle = "RandomSite" + System.currentTimeMillis(); | ||||
|         userOneN1Site = createSite(siteTitle, SiteVisibility.PRIVATE); | ||||
|     @Test | ||||
|     public void testRequestContentDirectUrlClientErrorResponseForRenditions() throws Exception | ||||
|     { | ||||
|         enableRestDirectAccessUrls(); | ||||
|         // Create a document | ||||
|         setRequestContext(user1); | ||||
|  | ||||
|         // Create a folder within the site document's library | ||||
|         String folderName = "folder" + System.currentTimeMillis(); | ||||
|         String parentId = getSiteContainerNodeId(userOneN1Site.getId(), "documentLibrary"); | ||||
|         String folder_Id = createNode(parentId, folderName, TYPE_CM_FOLDER, null).getId(); | ||||
|         String folderNodeId = createUniqueFolder(getMyNodeId()); | ||||
|         String contentNodeId = createUniqueContent(folderNodeId); | ||||
|  | ||||
|         // Create multipart request - pdf file | ||||
|         String renditionName = "doclib"; | ||||
|         String fileName = "quick.pdf"; | ||||
|         File file = getResourceFile(fileName); | ||||
|         MultiPartRequest reqBody = MultiPartBuilder.create() | ||||
|             .setFileData(new FileData(fileName, file)) | ||||
|             .setRenditions(Collections.singletonList(renditionName)) | ||||
|             .build(); | ||||
|         // Verify renditions | ||||
|         HttpResponse renditionIdDoesNotExistReponse = post(getRequestRenditionDirectAccessUrl(contentNodeId, "pdf"), null, null, null, null, 404); | ||||
|         HttpResponse renditionIdInvalidReponse = post(getRequestRenditionDirectAccessUrl(contentNodeId, "invalid-rendition"), null, null, null, null, 404); | ||||
|  | ||||
|         // Upload quick.pdf file into 'folder' - including request to create 'doclib' thumbnail | ||||
|         HttpResponse response = post(getNodeChildrenUrl(folder_Id), reqBody.getBody(), null, reqBody.getContentType(), 201); | ||||
|         Document document = RestApiUtil.parseRestApiEntry(response.getJsonResponse(), Document.class); | ||||
|         String contentNodeId = document.getId(); | ||||
|         disableRestDirectAccessUrls(); | ||||
|     } | ||||
|  | ||||
|         // wait and check that rendition is created ... | ||||
|         Rendition rendition = waitAndGetRendition(contentNodeId, null, renditionName); | ||||
|         assertNotNull(rendition); | ||||
|         assertEquals(Rendition.RenditionStatus.CREATED, rendition.getStatus()); | ||||
|     @Test | ||||
|     public void testRequestContentDirectUrlClientErrorResponseForDeletion() throws Exception | ||||
|     { | ||||
|         enableRestDirectAccessUrls(); | ||||
|         // Create a document | ||||
|         setRequestContext(user1); | ||||
|  | ||||
|         HttpResponse dauResponse = post(getRequestContentDirectUrl(contentNodeId), null, null, null, null, 501); | ||||
|         String folderNodeId = createUniqueFolder(getMyNodeId()); | ||||
|         String contentNodeId = createUniqueContent(folderNodeId); | ||||
|  | ||||
|         // Verify deletion | ||||
|         HttpResponse nodeNotDeletedReponse = post(getRequestArchivedContentDirectUrl(contentNodeId), null, null, null, null, 404); | ||||
|  | ||||
|         disableRestDirectAccessUrls(); | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
|   | ||||
| @@ -0,0 +1,179 @@ | ||||
| /* | ||||
|  * #%L | ||||
|  * Alfresco Remote API | ||||
|  * %% | ||||
|  * 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.rest.api.tests; | ||||
|  | ||||
| import org.alfresco.rest.AbstractSingleNetworkSiteTest; | ||||
| import org.alfresco.rest.api.tests.client.HttpResponse; | ||||
| import org.alfresco.rest.api.tests.client.data.Document; | ||||
| import org.alfresco.rest.api.tests.util.RestApiUtil; | ||||
| import org.alfresco.service.cmr.repository.NodeService; | ||||
| import org.alfresco.service.cmr.security.AuthorityService; | ||||
| import org.alfresco.service.cmr.security.PermissionService; | ||||
| import org.alfresco.service.namespace.NamespaceService; | ||||
| import org.junit.After; | ||||
| import org.junit.Before; | ||||
| import org.junit.Test; | ||||
| import org.junit.runner.RunWith; | ||||
| import org.junit.runners.Parameterized; | ||||
|  | ||||
| import java.util.*; | ||||
|  | ||||
| import static org.alfresco.rest.api.tests.util.RestApiUtil.toJsonAsStringNonNull; | ||||
| import static org.junit.Assert.assertEquals; | ||||
| import static org.junit.Assert.assertTrue; | ||||
|  | ||||
| @RunWith(Parameterized.class) | ||||
| public class NodeApiVersioningJsonParameterizedTest extends AbstractSingleNetworkSiteTest | ||||
| { | ||||
|     private static final String TYPE_CM_CONTENT = "cm:content"; | ||||
|     private static final String TYPE_CUSTOM_DOCUMENT = "custom:document"; | ||||
|  | ||||
|     private static final String VERSIONING_ENABLED_TRUE = "true"; | ||||
|     private static final String VERSIONING_ENABLED_FALSE = "false"; | ||||
|     private static final String VERSIONING_ENABLED_UNSET = null; | ||||
|  | ||||
|     private static final Boolean MAJOR_VERSION_ENABLED_TRUE = true; | ||||
|     private static final Boolean MAJOR_VERSION_ENABLED_FALSE = false; | ||||
|     private static final Boolean MAJOR_VERSION_ENABLED_UNSET = null; | ||||
|  | ||||
|     private static final String VERSION_NOT_EXPECTED = null; | ||||
|     private static final String EXPECTED_VERSION_0_1 = "0.1"; | ||||
|     private static final String EXPECTED_VERSION_1_0 = "1.0"; | ||||
|  | ||||
|     private static final String EXPECTED_ASPECT_VERSIONABLE = "cm:versionable"; | ||||
|     private static final String EXPECTED_ASPECT_NONE = null; | ||||
|  | ||||
|     protected PermissionService permissionService; | ||||
|     protected AuthorityService authorityService; | ||||
|     private NodeService nodeService; | ||||
|     private NamespaceService namespaceService; | ||||
|  | ||||
|  | ||||
|     @Parameterized.Parameter(value = 0) | ||||
|     public String type; | ||||
|  | ||||
|     @Parameterized.Parameter(value = 1) | ||||
|     public String versioningEnabled; | ||||
|  | ||||
|     @Parameterized.Parameter(value = 2) | ||||
|     public Boolean majorVersion; | ||||
|  | ||||
|     @Parameterized.Parameter(value = 3) | ||||
|     public String expectedVersion; | ||||
|  | ||||
|     @Parameterized.Parameter(value = 4) | ||||
|     public String expectedAspect; | ||||
|  | ||||
|     @Parameterized.Parameters //parameters source - MMT-22462 comments | ||||
|     public static Collection<Object[]> data() | ||||
|     { | ||||
|         Collection<Object[]> params = new ArrayList(); | ||||
|         params.add(new Object[]{TYPE_CM_CONTENT, VERSIONING_ENABLED_UNSET, MAJOR_VERSION_ENABLED_UNSET, VERSION_NOT_EXPECTED, EXPECTED_ASPECT_NONE}); | ||||
|         params.add(new Object[]{TYPE_CM_CONTENT, VERSIONING_ENABLED_UNSET, MAJOR_VERSION_ENABLED_TRUE, EXPECTED_VERSION_1_0, EXPECTED_ASPECT_NONE}); | ||||
|         params.add(new Object[]{TYPE_CM_CONTENT, VERSIONING_ENABLED_UNSET, MAJOR_VERSION_ENABLED_FALSE, EXPECTED_VERSION_0_1, EXPECTED_ASPECT_NONE}); | ||||
|  | ||||
|         params.add(new Object[]{TYPE_CM_CONTENT, VERSIONING_ENABLED_FALSE, MAJOR_VERSION_ENABLED_UNSET, VERSION_NOT_EXPECTED, EXPECTED_ASPECT_NONE}); | ||||
|         params.add(new Object[]{TYPE_CM_CONTENT, VERSIONING_ENABLED_FALSE, MAJOR_VERSION_ENABLED_TRUE, VERSION_NOT_EXPECTED, EXPECTED_ASPECT_NONE}); | ||||
|         params.add(new Object[]{TYPE_CM_CONTENT, VERSIONING_ENABLED_FALSE, MAJOR_VERSION_ENABLED_FALSE, VERSION_NOT_EXPECTED, EXPECTED_ASPECT_NONE}); | ||||
|  | ||||
|         params.add(new Object[]{TYPE_CM_CONTENT, VERSIONING_ENABLED_TRUE, MAJOR_VERSION_ENABLED_UNSET, EXPECTED_VERSION_1_0, EXPECTED_ASPECT_VERSIONABLE}); | ||||
|         params.add(new Object[]{TYPE_CM_CONTENT, VERSIONING_ENABLED_TRUE, MAJOR_VERSION_ENABLED_TRUE, EXPECTED_VERSION_1_0, EXPECTED_ASPECT_VERSIONABLE}); | ||||
|         params.add(new Object[]{TYPE_CM_CONTENT, VERSIONING_ENABLED_TRUE, MAJOR_VERSION_ENABLED_FALSE, EXPECTED_VERSION_0_1, EXPECTED_ASPECT_VERSIONABLE}); | ||||
|  | ||||
|         params.add(new Object[]{TYPE_CUSTOM_DOCUMENT, VERSIONING_ENABLED_UNSET, MAJOR_VERSION_ENABLED_UNSET, EXPECTED_VERSION_1_0, EXPECTED_ASPECT_VERSIONABLE}); | ||||
|         params.add(new Object[]{TYPE_CUSTOM_DOCUMENT, VERSIONING_ENABLED_UNSET, MAJOR_VERSION_ENABLED_TRUE, EXPECTED_VERSION_1_0, EXPECTED_ASPECT_VERSIONABLE}); | ||||
|         params.add(new Object[]{TYPE_CUSTOM_DOCUMENT, VERSIONING_ENABLED_UNSET, MAJOR_VERSION_ENABLED_FALSE, EXPECTED_VERSION_0_1, EXPECTED_ASPECT_VERSIONABLE}); | ||||
|  | ||||
|         params.add(new Object[]{TYPE_CUSTOM_DOCUMENT, VERSIONING_ENABLED_TRUE, MAJOR_VERSION_ENABLED_UNSET, EXPECTED_VERSION_1_0, EXPECTED_ASPECT_VERSIONABLE}); | ||||
|         params.add(new Object[]{TYPE_CUSTOM_DOCUMENT, VERSIONING_ENABLED_TRUE, MAJOR_VERSION_ENABLED_TRUE, EXPECTED_VERSION_1_0, EXPECTED_ASPECT_VERSIONABLE}); | ||||
|         params.add(new Object[]{TYPE_CUSTOM_DOCUMENT, VERSIONING_ENABLED_TRUE, MAJOR_VERSION_ENABLED_FALSE, EXPECTED_VERSION_0_1, EXPECTED_ASPECT_VERSIONABLE}); | ||||
|  | ||||
|         params.add(new Object[]{TYPE_CUSTOM_DOCUMENT, VERSIONING_ENABLED_FALSE, MAJOR_VERSION_ENABLED_UNSET, EXPECTED_VERSION_1_0, EXPECTED_ASPECT_VERSIONABLE}); | ||||
|         params.add(new Object[]{TYPE_CUSTOM_DOCUMENT, VERSIONING_ENABLED_FALSE, MAJOR_VERSION_ENABLED_TRUE, EXPECTED_VERSION_1_0, EXPECTED_ASPECT_VERSIONABLE}); | ||||
|         params.add(new Object[]{TYPE_CUSTOM_DOCUMENT, VERSIONING_ENABLED_FALSE, MAJOR_VERSION_ENABLED_FALSE, EXPECTED_VERSION_0_1, EXPECTED_ASPECT_VERSIONABLE}); | ||||
|  | ||||
|         return params; | ||||
|     } | ||||
|  | ||||
|     @Before | ||||
|     public void setup() throws Exception | ||||
|     { | ||||
|         super.setup(); | ||||
|  | ||||
|         permissionService = applicationContext.getBean("permissionService", PermissionService.class); | ||||
|         authorityService = (AuthorityService) applicationContext.getBean("AuthorityService"); | ||||
|         nodeService = applicationContext.getBean("NodeService", NodeService.class); | ||||
|         namespaceService= (NamespaceService) applicationContext.getBean("NamespaceService"); | ||||
|     } | ||||
|  | ||||
|     @After | ||||
|     public void tearDown() throws Exception | ||||
|     { | ||||
|         super.tearDown(); | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
|     public void versionableDocumentJsonNodeCreationTest() throws Exception | ||||
|     { | ||||
|         setRequestContext(user1); | ||||
|         String myNodeId = getMyNodeId(); | ||||
|  | ||||
|         Document d1 = new Document(); | ||||
|         Map<String, String> params = new HashMap<>(); | ||||
|         d1.setName("testDoc" + UUID.randomUUID()); | ||||
|         d1.setNodeType(type); | ||||
|  | ||||
|         if(versioningEnabled != null) | ||||
|         { | ||||
|             params.put("versioningEnabled", versioningEnabled); | ||||
|         } | ||||
|         if(majorVersion != null) | ||||
|         { | ||||
|             params.put("majorVersion", majorVersion.toString()); | ||||
|         } | ||||
|  | ||||
|         HttpResponse response = post(getNodeChildrenUrl(myNodeId), toJsonAsStringNonNull(d1), params, null, null, 201); | ||||
|         Document documentResponse = RestApiUtil.parseRestApiEntry(response.getJsonResponse(), Document.class); | ||||
|  | ||||
|         assertExpectedVersion(expectedVersion, documentResponse.getProperties()); | ||||
|         assertContainsAspect(expectedAspect, documentResponse); | ||||
|     } | ||||
|  | ||||
|     private void assertExpectedVersion(String expectedVersion, Map<String, Object> documentProperties) | ||||
|     { | ||||
|         if(documentProperties != null) { | ||||
|             assertEquals(expectedVersion, documentProperties.get("cm:versionLabel")); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private void assertContainsAspect(String expectedAspect, Document documentResponse) | ||||
|     { | ||||
|         if(expectedAspect != null) { | ||||
|             assertTrue(!documentResponse.getAspectNames().isEmpty()); | ||||
|             assertTrue(documentResponse.getAspectNames().contains(expectedAspect)); | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,183 @@ | ||||
| /* | ||||
|  * #%L | ||||
|  * Alfresco Remote API | ||||
|  * %% | ||||
|  * 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.rest.api.tests; | ||||
|  | ||||
| import org.alfresco.rest.AbstractSingleNetworkSiteTest; | ||||
| import org.alfresco.rest.api.tests.client.HttpResponse; | ||||
| import org.alfresco.rest.api.tests.client.data.Document; | ||||
| import org.alfresco.rest.api.tests.util.MultiPartBuilder; | ||||
| import org.alfresco.rest.api.tests.util.RestApiUtil; | ||||
| import org.alfresco.service.cmr.repository.NodeService; | ||||
| import org.alfresco.service.cmr.security.AuthorityService; | ||||
| import org.alfresco.service.cmr.security.PermissionService; | ||||
| import org.alfresco.service.namespace.NamespaceService; | ||||
| import org.junit.After; | ||||
| import org.junit.Before; | ||||
| import org.junit.Test; | ||||
| import org.junit.runner.RunWith; | ||||
| import org.junit.runners.Parameterized; | ||||
|  | ||||
| import java.io.File; | ||||
| import java.util.ArrayList; | ||||
| import java.util.Collection; | ||||
| import java.util.Map; | ||||
| import java.util.UUID; | ||||
|  | ||||
| import static org.junit.Assert.*; | ||||
| import static org.junit.Assert.assertEquals; | ||||
|  | ||||
| @RunWith(Parameterized.class) | ||||
| public class NodeApiVersioningMultipartParameterizedTest extends AbstractSingleNetworkSiteTest | ||||
| { | ||||
|     private static final String TYPE_CM_CONTENT = "cm:content"; | ||||
|     private static final String TYPE_CUSTOM_DOCUMENT = "custom:document"; | ||||
|  | ||||
|     private static final String VERSIONING_ENABLED_TRUE = "true"; | ||||
|     private static final String VERSIONING_ENABLED_FALSE = "false"; | ||||
|     private static final String VERSIONING_ENABLED_UNSET = null; | ||||
|  | ||||
|     private static final Boolean MAJOR_VERSION_ENABLED_TRUE = true; | ||||
|     private static final Boolean MAJOR_VERSION_ENABLED_FALSE = false; | ||||
|     private static final Boolean MAJOR_VERSION_ENABLED_UNSET = null; | ||||
|  | ||||
|     private static final String VERSION_NOT_EXPECTED = null; | ||||
|     private static final String EXPECTED_VERSION_0_1 = "0.1"; | ||||
|     private static final String EXPECTED_VERSION_1_0 = "1.0"; | ||||
|  | ||||
|     private static final String EXPECTED_ASPECT_VERSIONABLE = "cm:versionable"; | ||||
|     private static final String EXPECTED_ASPECT_NONE = null; | ||||
|  | ||||
|     protected PermissionService permissionService; | ||||
|     protected AuthorityService authorityService; | ||||
|     private NodeService nodeService; | ||||
|     private NamespaceService namespaceService; | ||||
|  | ||||
|  | ||||
|     @Parameterized.Parameter(value = 0) | ||||
|     public String type; | ||||
|  | ||||
|     @Parameterized.Parameter(value = 1) | ||||
|     public String versioningEnabled; | ||||
|  | ||||
|     @Parameterized.Parameter(value = 2) | ||||
|     public Boolean majorVersion; | ||||
|  | ||||
|     @Parameterized.Parameter(value = 3) | ||||
|     public String expectedVersion; | ||||
|  | ||||
|     @Parameterized.Parameter(value = 4) | ||||
|     public String expectedAspect; | ||||
|  | ||||
|     @Parameterized.Parameters //parameters source - MMT-22462 comments | ||||
|     public static Collection<Object[]> data() | ||||
|     { | ||||
|         Collection<Object[]> params = new ArrayList(); | ||||
|         params.add(new Object[]{TYPE_CM_CONTENT, VERSIONING_ENABLED_UNSET, MAJOR_VERSION_ENABLED_UNSET, EXPECTED_VERSION_1_0, EXPECTED_ASPECT_VERSIONABLE}); | ||||
|         params.add(new Object[]{TYPE_CM_CONTENT, VERSIONING_ENABLED_UNSET, MAJOR_VERSION_ENABLED_TRUE, EXPECTED_VERSION_1_0, EXPECTED_ASPECT_VERSIONABLE}); | ||||
|         params.add(new Object[]{TYPE_CM_CONTENT, VERSIONING_ENABLED_UNSET, MAJOR_VERSION_ENABLED_FALSE, EXPECTED_VERSION_0_1, EXPECTED_ASPECT_VERSIONABLE}); | ||||
|  | ||||
|         params.add(new Object[]{TYPE_CM_CONTENT, VERSIONING_ENABLED_TRUE, MAJOR_VERSION_ENABLED_UNSET, EXPECTED_VERSION_1_0, EXPECTED_ASPECT_VERSIONABLE}); | ||||
|         params.add(new Object[]{TYPE_CM_CONTENT, VERSIONING_ENABLED_TRUE, MAJOR_VERSION_ENABLED_TRUE, EXPECTED_VERSION_1_0, EXPECTED_ASPECT_VERSIONABLE}); | ||||
|         params.add(new Object[]{TYPE_CM_CONTENT, VERSIONING_ENABLED_TRUE, MAJOR_VERSION_ENABLED_FALSE, EXPECTED_VERSION_0_1, EXPECTED_ASPECT_VERSIONABLE}); | ||||
|  | ||||
|         params.add(new Object[]{TYPE_CM_CONTENT, VERSIONING_ENABLED_FALSE, MAJOR_VERSION_ENABLED_UNSET, VERSION_NOT_EXPECTED, EXPECTED_ASPECT_NONE}); | ||||
|         params.add(new Object[]{TYPE_CM_CONTENT, VERSIONING_ENABLED_FALSE, MAJOR_VERSION_ENABLED_TRUE, VERSION_NOT_EXPECTED, EXPECTED_ASPECT_NONE}); | ||||
|         params.add(new Object[]{TYPE_CM_CONTENT, VERSIONING_ENABLED_FALSE, MAJOR_VERSION_ENABLED_FALSE, VERSION_NOT_EXPECTED, EXPECTED_ASPECT_NONE}); | ||||
|  | ||||
|         params.add(new Object[]{TYPE_CUSTOM_DOCUMENT, VERSIONING_ENABLED_UNSET, MAJOR_VERSION_ENABLED_UNSET, EXPECTED_VERSION_1_0, EXPECTED_ASPECT_VERSIONABLE}); | ||||
|         params.add(new Object[]{TYPE_CUSTOM_DOCUMENT, VERSIONING_ENABLED_UNSET, MAJOR_VERSION_ENABLED_TRUE, EXPECTED_VERSION_1_0, EXPECTED_ASPECT_VERSIONABLE}); | ||||
|         params.add(new Object[]{TYPE_CUSTOM_DOCUMENT, VERSIONING_ENABLED_UNSET, MAJOR_VERSION_ENABLED_FALSE, EXPECTED_VERSION_0_1, EXPECTED_ASPECT_VERSIONABLE}); | ||||
|  | ||||
|         params.add(new Object[]{TYPE_CUSTOM_DOCUMENT, VERSIONING_ENABLED_TRUE, MAJOR_VERSION_ENABLED_UNSET, EXPECTED_VERSION_1_0, EXPECTED_ASPECT_VERSIONABLE}); | ||||
|         params.add(new Object[]{TYPE_CUSTOM_DOCUMENT, VERSIONING_ENABLED_TRUE, MAJOR_VERSION_ENABLED_TRUE, EXPECTED_VERSION_1_0, EXPECTED_ASPECT_VERSIONABLE}); | ||||
|         params.add(new Object[]{TYPE_CUSTOM_DOCUMENT, VERSIONING_ENABLED_TRUE, MAJOR_VERSION_ENABLED_FALSE, EXPECTED_VERSION_0_1, EXPECTED_ASPECT_VERSIONABLE}); | ||||
|  | ||||
|         params.add(new Object[]{TYPE_CUSTOM_DOCUMENT, VERSIONING_ENABLED_FALSE, MAJOR_VERSION_ENABLED_UNSET, EXPECTED_VERSION_1_0, EXPECTED_ASPECT_VERSIONABLE}); | ||||
|         params.add(new Object[]{TYPE_CUSTOM_DOCUMENT, VERSIONING_ENABLED_FALSE, MAJOR_VERSION_ENABLED_TRUE, EXPECTED_VERSION_1_0, EXPECTED_ASPECT_VERSIONABLE}); | ||||
|         params.add(new Object[]{TYPE_CUSTOM_DOCUMENT, VERSIONING_ENABLED_FALSE, MAJOR_VERSION_ENABLED_FALSE, EXPECTED_VERSION_0_1, EXPECTED_ASPECT_VERSIONABLE}); | ||||
|  | ||||
|         return params; | ||||
|     } | ||||
|  | ||||
|     @Before | ||||
|     public void setup() throws Exception | ||||
|     { | ||||
|         super.setup(); | ||||
|  | ||||
|         permissionService = applicationContext.getBean("permissionService", PermissionService.class); | ||||
|         authorityService = (AuthorityService) applicationContext.getBean("AuthorityService"); | ||||
|         nodeService = applicationContext.getBean("NodeService", NodeService.class); | ||||
|         namespaceService= (NamespaceService) applicationContext.getBean("NamespaceService"); | ||||
|     } | ||||
|  | ||||
|     @After | ||||
|     public void tearDown() throws Exception | ||||
|     { | ||||
|         super.tearDown(); | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
|     public void versionableDocumentMultipartNodeCreationTest() throws Exception | ||||
|     { | ||||
|         setRequestContext(user1); | ||||
|         String myNodeId = getMyNodeId(); | ||||
|  | ||||
|         String fileName = "myfile" + UUID.randomUUID() + ".txt"; | ||||
|         File file = getResourceFile("quick-2.pdf"); | ||||
|  | ||||
|         MultiPartBuilder multiPartBuilder = MultiPartBuilder.create().setFileData(new MultiPartBuilder.FileData(fileName, file)); | ||||
|         multiPartBuilder.setNodeType(type); | ||||
|         multiPartBuilder.setVersioningEnabled(versioningEnabled); | ||||
|         if(majorVersion != null) | ||||
|         { | ||||
|             multiPartBuilder.setMajorVersion(majorVersion); | ||||
|         } | ||||
|  | ||||
|         MultiPartBuilder.MultiPartRequest reqBody = multiPartBuilder.build(); | ||||
|         HttpResponse response = post(getNodeChildrenUrl(myNodeId), reqBody.getBody(), null, reqBody.getContentType(), 201); | ||||
|         Document documentResponse = RestApiUtil.parseRestApiEntry(response.getJsonResponse(), Document.class); | ||||
|  | ||||
|         Map<String, Object> documentProperties = documentResponse.getProperties(); | ||||
|  | ||||
|         assertExpectedVersion(expectedVersion, documentProperties); | ||||
|         assertContainsAspect(expectedAspect, documentResponse); | ||||
|     } | ||||
|  | ||||
|     private void assertExpectedVersion(String expectedVersion, Map<String, Object> documentProperties) | ||||
|     { | ||||
|         if(documentProperties != null) { | ||||
|             assertEquals(expectedVersion, documentProperties.get("cm:versionLabel")); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private void assertContainsAspect(String expectedAspect, Document documentResponse) | ||||
|     { | ||||
|         if(expectedAspect != null) { | ||||
|             assertTrue(!documentResponse.getAspectNames().isEmpty()); | ||||
|             assertTrue(documentResponse.getAspectNames().contains(expectedAspect)); | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @@ -2,7 +2,7 @@ | ||||
|  * #%L | ||||
|  * Alfresco Remote API | ||||
|  * %% | ||||
|  * 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  | ||||
| @@ -27,20 +27,32 @@ package org.alfresco.rest.api.tests; | ||||
|  | ||||
| import org.alfresco.repo.content.MimetypeMap; | ||||
| import org.alfresco.repo.security.authentication.AuthenticationUtil; | ||||
| import org.alfresco.repo.web.scripts.RepositoryContainer; | ||||
| import org.alfresco.rest.AbstractSingleNetworkSiteTest; | ||||
| import org.alfresco.rest.api.DirectAccessUrlHelper; | ||||
| import org.alfresco.rest.api.impl.directurl.RestApiDirectUrlConfig; | ||||
| import org.alfresco.rest.api.model.Site; | ||||
| import org.alfresco.rest.api.nodes.NodesEntityResource; | ||||
| import org.alfresco.rest.api.tests.client.HttpResponse; | ||||
| import org.alfresco.rest.api.tests.client.PublicApiClient.Paging; | ||||
| import org.alfresco.rest.api.tests.client.data.ContentInfo; | ||||
| import org.alfresco.rest.api.tests.client.data.Document; | ||||
| import org.alfresco.rest.api.tests.client.data.Node; | ||||
| import org.alfresco.rest.api.tests.client.data.Rendition; | ||||
| import org.alfresco.rest.api.tests.util.MultiPartBuilder; | ||||
| import org.alfresco.rest.api.tests.util.MultiPartBuilder.FileData; | ||||
| import org.alfresco.rest.api.tests.util.MultiPartBuilder.MultiPartRequest; | ||||
| import org.alfresco.rest.api.tests.util.RestApiUtil; | ||||
| import static org.alfresco.rest.api.tests.util.RestApiUtil.toJsonAsString; | ||||
|  | ||||
| import static org.junit.Assert.*; | ||||
|  | ||||
| import org.alfresco.service.cmr.site.SiteVisibility; | ||||
| import org.junit.After; | ||||
| import org.junit.Test; | ||||
| import org.mockito.Mockito; | ||||
|  | ||||
| import java.io.File; | ||||
| import java.util.*; | ||||
|  | ||||
| /** | ||||
| @@ -273,6 +285,138 @@ public class NodeVersionRenditionsApiTest extends AbstractSingleNetworkSiteTest | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
|     public void testRequestVersionRenditionContentDirectUrl() throws Exception | ||||
|     { | ||||
|         setRequestContext(user1); | ||||
|  | ||||
|         RepoService.TestNetwork networkN1; | ||||
|         RepoService.TestPerson userOneN1; | ||||
|         Site userOneN1Site; | ||||
|  | ||||
|         networkN1 = repoService.createNetworkWithAlias("ping", true); | ||||
|         networkN1.create(); | ||||
|         userOneN1 = networkN1.createUser(); | ||||
|  | ||||
|         setRequestContext(networkN1.getId(), userOneN1.getId(), null); | ||||
|  | ||||
|         String siteTitle = "RandomSite" + System.currentTimeMillis(); | ||||
|         userOneN1Site = createSite(siteTitle, SiteVisibility.PRIVATE); | ||||
|  | ||||
|         String PROP_LTM = "cm:lastThumbnailModification"; | ||||
|  | ||||
|         String RENDITION_NAME = "imgpreview"; | ||||
|  | ||||
|         String userId = userOneN1.getId(); | ||||
|         setRequestContext(networkN1.getId(), userOneN1.getId(), null); | ||||
|  | ||||
|         // Create a folder within the site document's library | ||||
|         String folderName = "folder" + System.currentTimeMillis(); | ||||
|         String parentId = getSiteContainerNodeId(userOneN1Site.getId(), "documentLibrary"); | ||||
|         String folder_Id = createNode(parentId, folderName, TYPE_CM_FOLDER, null).getId(); | ||||
|  | ||||
|         // Create multipart request - pdf file | ||||
|         String fileName = "quick.pdf"; | ||||
|         File file = getResourceFile(fileName); | ||||
|         MultiPartRequest reqBody = MultiPartBuilder.create() | ||||
|                                                    .setFileData(new FileData(fileName, file)) | ||||
|                                                    .build(); | ||||
|         Map<String, String> params = Collections.singletonMap("include", "properties"); | ||||
|  | ||||
|         // Upload quick.pdf file into 'folder' - do not include request to create 'doclib' thumbnail | ||||
|         HttpResponse response = post(getNodeChildrenUrl(folder_Id), reqBody.getBody(), params, null, "alfresco", reqBody.getContentType(), 201); | ||||
|         Document document1 = RestApiUtil.parseRestApiEntry(response.getJsonResponse(), Document.class); | ||||
|         String contentNodeId = document1.getId(); | ||||
|         assertNotNull(document1.getProperties()); | ||||
|  | ||||
|         // pause briefly | ||||
|         Thread.sleep(DELAY_IN_MS); | ||||
|  | ||||
|         // Get rendition (not created yet) information for node | ||||
|         response = getSingle(getNodeRenditionsUrl(contentNodeId), RENDITION_NAME, 200); | ||||
|         Rendition rendition = RestApiUtil.parseRestApiEntry(response.getJsonResponse(), Rendition.class); | ||||
|         assertNotNull(rendition); | ||||
|         assertEquals(Rendition.RenditionStatus.NOT_CREATED, rendition.getStatus()); | ||||
|  | ||||
|         params = new HashMap<>(); | ||||
|         params.put("placeholder", "false"); | ||||
|         getSingle(getNodeRenditionsUrl(contentNodeId), (RENDITION_NAME + "/content"), params, 404); | ||||
|  | ||||
|         // Create and get 'imgpreview' rendition | ||||
|         rendition = createAndGetRendition(contentNodeId, RENDITION_NAME); | ||||
|         assertNotNull(rendition); | ||||
|  | ||||
|         params = new HashMap<>(); | ||||
|         params.put("placeholder", "false"); | ||||
|         response = getSingle(getNodeRenditionsUrl(contentNodeId), (RENDITION_NAME + "/content"), params, 200); | ||||
|  | ||||
|         byte[] renditionBytes1 = response.getResponseAsBytes(); | ||||
|         assertNotNull(renditionBytes1); | ||||
|  | ||||
|         // check node details ... | ||||
|         params = Collections.singletonMap("include", "properties"); | ||||
|         response = getSingle(NodesEntityResource.class, contentNodeId, params, 200); | ||||
|         Document document1b = RestApiUtil.parseRestApiEntry(response.getJsonResponse(), Document.class); | ||||
|         assertEquals(document1b.getModifiedByUser().getId(), document1.getModifiedByUser().getId()); | ||||
|  | ||||
|         // upload another version of "quick.pdf" and check again | ||||
|         fileName = "quick-2.pdf"; | ||||
|         file = getResourceFile(fileName); | ||||
|         reqBody = MultiPartBuilder.create() | ||||
|                                   .setFileData(new FileData("quick.pdf", file)) | ||||
|                                   .setOverwrite(true) | ||||
|                                   .build(); | ||||
|  | ||||
|         response = post(getNodeChildrenUrl(folder_Id), reqBody.getBody(), null, null, "alfresco", reqBody.getContentType(), 201); | ||||
|         Document document2 = RestApiUtil.parseRestApiEntry(response.getJsonResponse(), Document.class); | ||||
|         assertEquals(contentNodeId, document2.getId()); | ||||
|  | ||||
|         // wait to allow new version of the rendition to be created ... | ||||
|         Thread.sleep(DELAY_IN_MS * 4); | ||||
|  | ||||
|         params = new HashMap<>(); | ||||
|         params.put("placeholder", "false"); | ||||
|         response = getSingle(getNodeRenditionsUrl(contentNodeId), (RENDITION_NAME + "/content"), params, 200); | ||||
|         assertNotNull(response.getResponseAsBytes()); | ||||
|  | ||||
|         // check rendition binary has changed | ||||
|         assertNotEquals(renditionBytes1, response.getResponseAsBytes()); | ||||
|  | ||||
|         params = Collections.singletonMap("include", "properties"); | ||||
|         response = getSingle(NodesEntityResource.class, contentNodeId, params, 200); | ||||
|         Document document2b = RestApiUtil.parseRestApiEntry(response.getJsonResponse(), Document.class); | ||||
|  | ||||
|         String contentNodeId2b = document2b.getId(); | ||||
|         HttpResponse dauResponse = post(getRequestVersionRenditionContentDirectUrl(contentNodeId2b, "1.0", RENDITION_NAME), null, null, null, null, 501); | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
|     public void testRequestVersionRenditionContentDirectUrlErrorResponses () throws Exception | ||||
|     { | ||||
|         setRequestContext(user1); | ||||
|  | ||||
|         String folderNodeId = createUniqueFolder(getMyNodeId()); | ||||
|         String contentNodeId = createUniqueContent(folderNodeId); | ||||
|         createVersionRendition(contentNodeId, "1.0", "doclib"); | ||||
|  | ||||
|         // REST direct access URLs must be enabled in order to test DAU error responses | ||||
|         enableRestDirectAccessUrls(); | ||||
|  | ||||
|         // Test error response for node does not exist | ||||
|         HttpResponse dauResponseForNoSuchNode = post(getRequestVersionRenditionContentDirectUrl("nosuchnode", "1.0", "doclib"), null, 404); | ||||
|  | ||||
|         // Test error response for node is not a file | ||||
|         HttpResponse dauResponseForNodeIsNotAFile = post(getRequestVersionRenditionContentDirectUrl(folderNodeId, "1.0", "doclib"), null, 400); | ||||
|  | ||||
|         // Test error response for version does not exist | ||||
|         HttpResponse dauResponseForNoSuchVersion = post(getRequestVersionRenditionContentDirectUrl(contentNodeId, "2.0", "doclib"), null, 404); | ||||
|  | ||||
|         // Test error response for rendition does not exist | ||||
|         HttpResponse dauResponseForNoSuchRendition = post(getRequestVersionRenditionContentDirectUrl(contentNodeId, "1.0", "avatar"), null, 404); | ||||
|  | ||||
|         disableRestDirectAccessUrls(); | ||||
|     } | ||||
|  | ||||
|     private void checkCreateAndGetVersionRendition(String docId, String versionId, String renditionId) throws Exception | ||||
|     { | ||||
|         String getRenditionsUrl; | ||||
| @@ -361,6 +505,12 @@ public class NodeVersionRenditionsApiTest extends AbstractSingleNetworkSiteTest | ||||
|         assertTrue(contentInfo.getSizeInBytes() > 0); | ||||
|     } | ||||
|  | ||||
|     private void createVersionRendition(String contentNodeId, String versionId, String renditionId) throws Exception | ||||
|     { | ||||
|         getAll(getNodeVersionRenditionsUrl(contentNodeId, versionId), null, 200); | ||||
|         checkCreateAndGetVersionRendition(contentNodeId, versionId, renditionId); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public String getScope() | ||||
|     { | ||||
|   | ||||
| @@ -25,6 +25,7 @@ | ||||
|  */ | ||||
| package org.alfresco.rest.api.tests; | ||||
|  | ||||
| import org.alfresco.repo.content.MimetypeMap; | ||||
| import org.alfresco.rest.AbstractSingleNetworkSiteTest; | ||||
| import org.alfresco.rest.api.Nodes; | ||||
| import org.alfresco.rest.api.model.VersionOptions; | ||||
| @@ -33,6 +34,7 @@ import org.alfresco.rest.api.tests.client.HttpResponse; | ||||
| import org.alfresco.rest.api.tests.client.PublicApiClient; | ||||
| import org.alfresco.rest.api.tests.client.PublicApiClient.Paging; | ||||
| import org.alfresco.rest.api.tests.client.PublicApiHttpClient; | ||||
| import org.alfresco.rest.api.tests.client.data.ContentInfo; | ||||
| import org.alfresco.rest.api.tests.client.data.Document; | ||||
| import org.alfresco.rest.api.tests.client.data.Node; | ||||
| import org.alfresco.rest.api.tests.util.RestApiUtil; | ||||
| @@ -1083,6 +1085,50 @@ public class NodeVersionsApiTest extends AbstractSingleNetworkSiteTest | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
|     public void testRequestVersionsContentDirectUrl() throws Exception | ||||
|     { | ||||
|         setRequestContext(user1); | ||||
|  | ||||
|         String myNodeId = getMyNodeId(); | ||||
|  | ||||
|         Document d1 = new Document(); | ||||
|         d1.setName("d1.txt"); | ||||
|         d1.setNodeType(TYPE_CM_CONTENT); | ||||
|  | ||||
|         // create *empty* text file - as of now, versioning is not enabled by default | ||||
|         HttpResponse response = post(getNodeChildrenUrl(myNodeId), toJsonAsStringNonNull(d1), 201); | ||||
|         Document documentResp = RestApiUtil.parseRestApiEntry(response.getJsonResponse(), Document.class); | ||||
|  | ||||
|         String docId = documentResp.getId(); | ||||
|         assertFalse(documentResp.getAspectNames().contains("cm:versionable")); | ||||
|         assertNull(documentResp.getProperties()); // no properties (ie. no "cm:versionLabel") | ||||
|  | ||||
|         int majorVersion = 1; | ||||
|         int minorVersion = 0; | ||||
|  | ||||
|         String content = "The quick brown fox jumps over the lazy dog "; | ||||
|  | ||||
|         Map<String, String> params = new HashMap<>(); | ||||
|         params.put("comment", "my version "); | ||||
|  | ||||
|         documentResp = updateTextFile(docId, content, params); | ||||
|         assertTrue(documentResp.getAspectNames().contains("cm:versionable")); | ||||
|         assertNotNull(documentResp.getProperties()); | ||||
|         assertEquals(majorVersion+"."+minorVersion, documentResp.getProperties().get("cm:versionLabel")); | ||||
|  | ||||
|         final String contentNodeId = documentResp.getId(); | ||||
|  | ||||
|         // Check the upload response | ||||
|         assertNotNull(documentResp.getProperties()); | ||||
|         assertTrue(documentResp.getAspectNames().contains("cm:versionable")); | ||||
|         ContentInfo contentInfo = documentResp.getContent(); | ||||
|         assertNotNull(contentInfo); | ||||
|         assertEquals(MimetypeMap.MIMETYPE_TEXT_PLAIN, contentInfo.getMimeType()); | ||||
|  | ||||
|         HttpResponse dauResponse = post(getRequestVersionDirectAccessUrl(contentNodeId, majorVersion+"."+minorVersion), null, null, null, null, 501); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Test version creation when updating file binary content. | ||||
|      * | ||||
|   | ||||
| @@ -515,6 +515,51 @@ public class RenditionsTest extends AbstractBaseApiTest | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
|     public void testRequestRenditionContentDirectUrl() throws Exception | ||||
|     { | ||||
|         setRequestContext(user1); | ||||
|  | ||||
|         RepoService.TestNetwork networkN1; | ||||
|         RepoService.TestPerson userOneN1; | ||||
|         Site userOneN1Site; | ||||
|  | ||||
|         networkN1 = repoService.createNetworkWithAlias("ping", true); | ||||
|         networkN1.create(); | ||||
|         userOneN1 = networkN1.createUser(); | ||||
|  | ||||
|         setRequestContext(networkN1.getId(), userOneN1.getId(), null); | ||||
|  | ||||
|         String siteTitle = "RandomSite" + System.currentTimeMillis(); | ||||
|         userOneN1Site = createSite(siteTitle, SiteVisibility.PRIVATE); | ||||
|  | ||||
|         // Create a folder within the site document's library | ||||
|         String folderName = "folder" + System.currentTimeMillis(); | ||||
|         String parentId = getSiteContainerNodeId(userOneN1Site.getId(), "documentLibrary"); | ||||
|         String folder_Id = createNode(parentId, folderName, TYPE_CM_FOLDER, null).getId(); | ||||
|  | ||||
|         // Create multipart request - pdf file | ||||
|         String renditionName = "doclib"; | ||||
|         String fileName = "quick.pdf"; | ||||
|         File file = getResourceFile(fileName); | ||||
|         MultiPartRequest reqBody = MultiPartBuilder.create() | ||||
|                 .setFileData(new FileData(fileName, file)) | ||||
|                 .setRenditions(Collections.singletonList(renditionName)) | ||||
|                 .build(); | ||||
|  | ||||
|         // Upload quick.pdf file into 'folder' - including request to create 'doclib' thumbnail | ||||
|         HttpResponse response = post(getNodeChildrenUrl(folder_Id), reqBody.getBody(), null, reqBody.getContentType(), 201); | ||||
|         Document document = RestApiUtil.parseRestApiEntry(response.getJsonResponse(), Document.class); | ||||
|         String contentNodeId = document.getId(); | ||||
|  | ||||
|         // wait and check that rendition is created ... | ||||
|         Rendition rendition = waitAndGetRendition(contentNodeId, null, renditionName); | ||||
|         assertNotNull(rendition); | ||||
|         assertEquals(Rendition.RenditionStatus.CREATED, rendition.getStatus()); | ||||
|  | ||||
|         HttpResponse dauResponse = post(getRequestRenditionDirectAccessUrl(contentNodeId, renditionName), null, null, null, null, 501); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Tests create rendition when on upload/create of a file | ||||
|      * | ||||
|   | ||||
| @@ -0,0 +1,190 @@ | ||||
| /* | ||||
|  * #%L | ||||
|  * Alfresco Remote API | ||||
|  * %% | ||||
|  * 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.web.app.servlet; | ||||
|  | ||||
| import static junit.framework.TestCase.assertEquals; | ||||
|  | ||||
| import javax.servlet.FilterConfig; | ||||
| import javax.servlet.ServletContext; | ||||
| import javax.servlet.ServletException; | ||||
|  | ||||
| import java.util.Properties; | ||||
|  | ||||
| import org.alfresco.error.AlfrescoRuntimeException; | ||||
| import org.alfresco.httpclient.HttpClientFactory.SecureCommsType; | ||||
| import org.junit.Before; | ||||
| import org.junit.Test; | ||||
| import org.mockito.Mockito; | ||||
| import org.springframework.web.context.WebApplicationContext; | ||||
| import org.springframework.web.context.support.WebApplicationContextUtils; | ||||
|  | ||||
| /** | ||||
|  *  Unit tests for {@link AlfrescoX509ServletFilter}. | ||||
|  */ | ||||
| public class AlfrescoX509ServletFilterTest | ||||
| { | ||||
|  | ||||
|     private static final String BEAN_GLOBAL_PROPERTIES = "global-properties"; | ||||
|     private static final String PROP_SECURE_COMMS = "solr.secureComms"; | ||||
|     private static final String PROP_SHARED_SECRET = "solr.sharedSecret"; | ||||
|     private static final String PROP_SHARED_SECRET_HEADER = "solr.sharedSecret.header"; | ||||
|     private static final String SHARED_SECRET_HEADER = "X-Alfresco-Search-Secret"; | ||||
|     private static final String SECRET = "secret"; | ||||
|     private static final String ALLOW_UNAUTHORIZED_SOLR_ENDPOINT = "allow-unauthenticated-solr-endpoint"; | ||||
|  | ||||
|     private static final String MISSING_SHARED_SECRET_EXCEPTION_MSG = "Missing value for solr.sharedSecret configuration property"; | ||||
|     private static final String MISSING_SHARED_SECRET_HEADER_EXCEPTION_MSG = "Missing value for sharedSecretHeader"; | ||||
|     private static final String SECURE_COMMS_NONE_IS_NOT_SUPPORTED_EXCEPTION_MSG = "solr.secureComms=none is no longer supported. Please use https or secret"; | ||||
|  | ||||
|     private FilterConfig filterConfig; | ||||
|     private Properties globalProperties; | ||||
|     private AlfrescoX509ServletFilter filter; | ||||
|  | ||||
|     @Before | ||||
|     public void before() | ||||
|     { | ||||
|         FilterConfig filterConfig = Mockito.mock(FilterConfig.class); | ||||
|         WebApplicationContext webApplicationContext = Mockito.mock(WebApplicationContext.class); | ||||
|         ServletContext servletContext = Mockito.mock(ServletContext.class); | ||||
|         Properties globalProperties = Mockito.mock(Properties.class); | ||||
|  | ||||
|         Mockito.when(servletContext.getAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE)).thenReturn(webApplicationContext); | ||||
|         Mockito.when(filterConfig.getServletContext()).thenReturn(servletContext); | ||||
|         Mockito.when(WebApplicationContextUtils.getRequiredWebApplicationContext(filterConfig.getServletContext())).thenReturn(webApplicationContext); | ||||
|         Mockito.when(webApplicationContext.getBean(BEAN_GLOBAL_PROPERTIES)).thenReturn(globalProperties); | ||||
|  | ||||
|         this.filterConfig = filterConfig; | ||||
|         this.globalProperties = globalProperties; | ||||
|         this.filter = new AlfrescoX509ServletFilter(); | ||||
|     } | ||||
|  | ||||
|     @Test (expected = AlfrescoRuntimeException.class) | ||||
|     public void testSharedSecretIsEmpty() throws ServletException | ||||
|     { | ||||
|         Mockito.when(globalProperties.getProperty(PROP_SECURE_COMMS)).thenReturn(SecureCommsType.SECRET.name()); | ||||
|         Mockito.when(globalProperties.getProperty(PROP_SHARED_SECRET)).thenReturn(""); | ||||
|         Mockito.when(globalProperties.getProperty(PROP_SHARED_SECRET_HEADER)).thenReturn(SHARED_SECRET_HEADER); | ||||
|  | ||||
|         try | ||||
|         { | ||||
|             filter.init(filterConfig); | ||||
|         } | ||||
|         catch (AlfrescoRuntimeException ex) | ||||
|         { | ||||
|             assertEquals(MISSING_SHARED_SECRET_EXCEPTION_MSG, ex.getMsgId()); | ||||
|             throw ex; | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     @Test (expected = AlfrescoRuntimeException.class) | ||||
|     public void testSharedSecretIsNull() throws ServletException | ||||
|     { | ||||
|         Mockito.when(globalProperties.getProperty(PROP_SECURE_COMMS)).thenReturn(SecureCommsType.SECRET.name()); | ||||
|         Mockito.when(globalProperties.getProperty(PROP_SHARED_SECRET)).thenReturn(null); | ||||
|         Mockito.when(globalProperties.getProperty(PROP_SHARED_SECRET_HEADER)).thenReturn(SHARED_SECRET_HEADER); | ||||
|  | ||||
|         try | ||||
|         { | ||||
|             filter.init(filterConfig); | ||||
|         } | ||||
|         catch (AlfrescoRuntimeException ex) | ||||
|         { | ||||
|             assertEquals(MISSING_SHARED_SECRET_EXCEPTION_MSG, ex.getMsgId()); | ||||
|             throw ex; | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     @Test (expected = AlfrescoRuntimeException.class) | ||||
|     public void testSharedSecretHeaderIsEmpty() throws ServletException | ||||
|     { | ||||
|         Mockito.when(globalProperties.getProperty(PROP_SECURE_COMMS)).thenReturn(SecureCommsType.SECRET.name()); | ||||
|         Mockito.when(globalProperties.getProperty(PROP_SHARED_SECRET)).thenReturn(SECRET); | ||||
|         Mockito.when(globalProperties.getProperty(PROP_SHARED_SECRET_HEADER)).thenReturn(""); | ||||
|  | ||||
|         try | ||||
|         { | ||||
|             filter.init(filterConfig); | ||||
|         } | ||||
|         catch (AlfrescoRuntimeException ex) | ||||
|         { | ||||
|             assertEquals(MISSING_SHARED_SECRET_HEADER_EXCEPTION_MSG, ex.getMsgId()); | ||||
|             throw ex; | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     @Test (expected = AlfrescoRuntimeException.class) | ||||
|     public void testSharedSecretHeaderIsNull() throws ServletException | ||||
|     { | ||||
|         Mockito.when(globalProperties.getProperty(PROP_SECURE_COMMS)).thenReturn(SecureCommsType.SECRET.name()); | ||||
|         Mockito.when(globalProperties.getProperty(PROP_SHARED_SECRET)).thenReturn(SECRET); | ||||
|         Mockito.when(globalProperties.getProperty(PROP_SHARED_SECRET_HEADER)).thenReturn(""); | ||||
|  | ||||
|         try | ||||
|         { | ||||
|             filter.init(filterConfig); | ||||
|         } | ||||
|         catch (AlfrescoRuntimeException ex) | ||||
|         { | ||||
|             assertEquals(MISSING_SHARED_SECRET_HEADER_EXCEPTION_MSG, ex.getMsgId()); | ||||
|             throw ex; | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
|     public void testSharedSecretProperlyConfigured() throws ServletException | ||||
|     { | ||||
|         Mockito.when(globalProperties.getProperty(PROP_SECURE_COMMS)).thenReturn(SecureCommsType.SECRET.name()); | ||||
|         Mockito.when(globalProperties.getProperty(PROP_SHARED_SECRET)).thenReturn(SECRET); | ||||
|         Mockito.when(globalProperties.getProperty(PROP_SHARED_SECRET_HEADER)).thenReturn(SHARED_SECRET_HEADER); | ||||
|  | ||||
|         filter.init(filterConfig); | ||||
|     } | ||||
|  | ||||
|     @Test (expected = AlfrescoRuntimeException.class) | ||||
|     public void testSecureCommsNoneAndNotAllowUnauthenticatedSolrEndpoint() throws ServletException | ||||
|     { | ||||
|         Mockito.when(globalProperties.getProperty(PROP_SECURE_COMMS)).thenReturn(SecureCommsType.NONE.name()); | ||||
|         Mockito.when(filterConfig.getInitParameter(ALLOW_UNAUTHORIZED_SOLR_ENDPOINT)).thenReturn("false"); | ||||
|  | ||||
|         try | ||||
|         { | ||||
|             filter.init(filterConfig); | ||||
|         } | ||||
|         catch (AlfrescoRuntimeException ex) | ||||
|         { | ||||
|             assertEquals(SECURE_COMMS_NONE_IS_NOT_SUPPORTED_EXCEPTION_MSG, ex.getMsgId()); | ||||
|             throw ex; | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
|     public void testSecureCommsNoneAndAllowUnauthenticatedSolrEndpoint() throws ServletException | ||||
|     { | ||||
|         Mockito.when(globalProperties.getProperty(PROP_SECURE_COMMS)).thenReturn(SecureCommsType.NONE.name()); | ||||
|         Mockito.when(filterConfig.getInitParameter(ALLOW_UNAUTHORIZED_SOLR_ENDPOINT)).thenReturn("true"); | ||||
|  | ||||
|         filter.init(filterConfig); | ||||
|     } | ||||
|  | ||||
| } | ||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user