mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-09-10 14:11:58 +00:00
Compare commits
117 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
3f65bc6057 | ||
|
e3d56ad557 | ||
|
5a92d7f013 | ||
|
1de387abc0 | ||
|
83e06193d1 | ||
|
02a2d88712 | ||
|
589b99e17d | ||
|
74d8b50ac0 | ||
|
906b6d4e5d | ||
|
5f90fd945f | ||
|
3670437c2e | ||
|
a128916bb4 | ||
|
ea7de7e1e7 | ||
|
11acd44283 | ||
|
af41e4b54c | ||
|
cf8f27721a | ||
|
f04b1d2e33 | ||
|
1f9e861e03 | ||
|
f5c1e26a9b | ||
|
cd8b3594aa | ||
|
57e3c09981 | ||
|
1ccb8a2164 | ||
|
26c412bd80 | ||
|
e4552968c6 | ||
|
2fa31de761 | ||
|
04ae83c74c | ||
|
b36e21ad04 | ||
|
9a615b50ea | ||
|
169e5efca2 | ||
|
8edfd4bdce | ||
|
810cd9f067 | ||
|
63f5bc534b | ||
|
ebb6e333d3 | ||
|
8f141aed1e | ||
|
2a734c5a78 | ||
|
a7cceff6bf | ||
|
7cafcb6a6b | ||
|
652e10e5a3 | ||
|
ea7a1631c2 | ||
|
e18aab83c5 | ||
|
d6dce92351 | ||
|
5c31774753 | ||
|
e331e4bd08 | ||
|
c9d27e55d6 | ||
|
d647c96ae4 | ||
|
5a6f9a60f3 | ||
|
ce2c0e2ac2 | ||
|
dfa9e754d5 | ||
|
860065cf6c | ||
|
2d7f8fba87 | ||
|
c2c4171756 | ||
|
af884cbb0e | ||
|
fb0be16155 | ||
|
f9d95136b2 | ||
|
26453c4112 | ||
|
cb26098e8b | ||
|
6766bfcfdf | ||
|
48df1e25ed | ||
|
52918e4ff5 | ||
|
40d70e797c | ||
|
6011868759 | ||
|
79ad480ddb | ||
|
c12d8f98be | ||
|
d2faadac57 | ||
|
7f1d28a417 | ||
|
fab02e5484 | ||
|
5274687ec1 | ||
|
b52e67b7df | ||
|
77f414dbf1 | ||
|
c45ce63bd2 | ||
|
0a784a0674 | ||
|
1da1506160 | ||
|
79dd212428 | ||
|
fd859a4191 | ||
|
e61f6df323 | ||
|
64998b5c53 | ||
|
784c9d47b3 | ||
|
b5617c3bd9 | ||
|
53777cd5b9 | ||
|
ddb8ad16ac | ||
|
a3ed766957 | ||
|
22a0343c41 | ||
|
43fb3cfdc5 | ||
|
8accceb08e | ||
|
71eab3e347 | ||
|
8d378fc340 | ||
|
73a8ac61ed | ||
|
67d3159650 | ||
|
ec8a760122 | ||
|
3d0ceca6da | ||
|
8c25d1f7e6 | ||
|
1e0972eaa1 | ||
|
616c666114 | ||
|
8520548e72 | ||
|
63f7f07465 | ||
|
35a3ff8032 | ||
|
695bf90891 | ||
|
d4dcc4fe2c | ||
|
ee44b6afa2 | ||
|
28b580b9fc | ||
|
7dc7a743f5 | ||
|
4bc92df38e | ||
|
048df99d91 | ||
|
b477d122f3 | ||
|
0cc2fe46cf | ||
|
671e1934bd | ||
|
d0452aaddb | ||
|
464db778fa | ||
|
905e813aa4 | ||
|
b55ba47c5e | ||
|
0607bb1485 | ||
|
f7c8298308 | ||
|
86de88ebaa | ||
|
76ba0a38e5 | ||
|
3ad642f388 | ||
|
e113eb3561 | ||
|
1dc1852a69 |
160
.travis.yml
160
.travis.yml
@@ -26,13 +26,16 @@ branches:
|
|||||||
|
|
||||||
env:
|
env:
|
||||||
global:
|
global:
|
||||||
|
- TRANSFORMERS_TAG=$(mvn help:evaluate -Dexpression=dependency.alfresco-transform-core.version -q -DforceStdout)
|
||||||
- TAS_SCRIPTS=../alfresco-community-repo/packaging/tests/scripts
|
- TAS_SCRIPTS=../alfresco-community-repo/packaging/tests/scripts
|
||||||
- TAS_ENVIRONMENT=./packaging/tests/environment
|
- TAS_ENVIRONMENT=./packaging/tests/environment
|
||||||
- LOG_WARN="-Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn"
|
- LOG_WARN="-Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn"
|
||||||
|
|
||||||
stages:
|
stages:
|
||||||
|
- name: prepare
|
||||||
|
if: commit_message !~ /\[skip tests\]/ AND commit_message !~ /\[force[^\]]*\]/
|
||||||
- name: test
|
- name: test
|
||||||
if: commit_message !~ /\[skip tests\]/
|
if: commit_message !~ /\[skip tests\]/ AND commit_message !~ /\[force[^\]]*\]/
|
||||||
- name: release
|
- name: release
|
||||||
if: commit_message !~ /\[no release\]/ AND (branch = master OR branch =~ /release\/.*/) AND type != pull_request AND fork = false
|
if: commit_message !~ /\[no release\]/ AND (branch = master OR branch =~ /release\/.*/) AND type != pull_request AND fork = false
|
||||||
- name: update_downstream
|
- name: update_downstream
|
||||||
@@ -43,7 +46,13 @@ install: travis_retry travis_wait 40 bash scripts/travis/build.sh
|
|||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
include:
|
include:
|
||||||
|
- name: "Prepare"
|
||||||
|
stage: prepare
|
||||||
|
install: skip
|
||||||
|
script: travis_retry travis_wait 80 bash scripts/travis/prepare.sh
|
||||||
|
|
||||||
- name: "Source Clear Scan (SCA)"
|
- name: "Source Clear Scan (SCA)"
|
||||||
|
stage: test
|
||||||
if: branch = master OR branch =~ /release\/.*/
|
if: branch = master OR branch =~ /release\/.*/
|
||||||
# Run Veracode
|
# Run Veracode
|
||||||
install: skip
|
install: skip
|
||||||
@@ -51,43 +60,49 @@ jobs:
|
|||||||
|
|
||||||
- name: "Core, Data-Model, Repository - AllUnitTestsSuite - Build and test"
|
- name: "Core, Data-Model, Repository - AllUnitTestsSuite - Build and test"
|
||||||
if: commit_message !~ /\[skip repo\]/
|
if: commit_message !~ /\[skip repo\]/
|
||||||
|
install: skip
|
||||||
script:
|
script:
|
||||||
- travis_retry mvn -B test -pl core,data-model
|
- travis_retry mvn -B test -pl core,data-model -am -DfailIfNoTests=false
|
||||||
- travis_retry mvn -B test -pl "repository,mmt" "-Dtest=AllUnitTestsSuite,AllMmtUnitTestSuite"
|
- travis_retry mvn -B test -pl "repository,mmt" -am "-Dtest=AllUnitTestsSuite,AllMmtUnitTestSuite" -DfailIfNoTests=false
|
||||||
|
|
||||||
- name: "Repository - AppContext01TestSuite"
|
- name: "Repository - AppContext01TestSuite"
|
||||||
if: commit_message !~ /\[skip repo\]/
|
if: commit_message !~ /\[skip repo\]/
|
||||||
|
install: skip
|
||||||
before_script:
|
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 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 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.16.1
|
||||||
- docker run -d -p 8090:8090 -e JAVA_OPTS=" -Xms256m -Xmx256m" alfresco/alfresco-transform-core-aio:2.5.7
|
- docker run -d -p 8090:8090 -e JAVA_OPTS=" -Xms256m -Xmx256m" alfresco/alfresco-transform-core-aio:${TRANSFORMERS_TAG}
|
||||||
script: travis_wait 20 mvn -B test -pl repository -Dtest=AppContext01TestSuite -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=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"
|
- name: "Repository - AppContext02TestSuite"
|
||||||
if: commit_message !~ /\[skip repo\]/
|
if: commit_message !~ /\[skip repo\]/
|
||||||
|
install: skip
|
||||||
before_script:
|
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 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 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"
|
- name: "Repository - AppContext03TestSuite"
|
||||||
if: commit_message !~ /\[skip repo\]/
|
if: commit_message !~ /\[skip repo\]/
|
||||||
|
install: skip
|
||||||
before_script:
|
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 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 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.16.1
|
||||||
- docker run -d -p 8090:8090 -e JAVA_OPTS=" -Xms256m -Xmx256m" alfresco/alfresco-transform-core-aio:2.5.7
|
- docker run -d -p 8090:8090 -e JAVA_OPTS=" -Xms256m -Xmx256m" alfresco/alfresco-transform-core-aio:${TRANSFORMERS_TAG}
|
||||||
script: travis_wait 20 mvn -B test -pl repository -Dtest=AppContext03TestSuite -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=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"
|
- name: "Repository - AppContext04TestSuite"
|
||||||
if: commit_message !~ /\[skip repo\]/
|
if: commit_message !~ /\[skip repo\]/
|
||||||
|
install: skip
|
||||||
before_script:
|
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 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 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.16.1
|
||||||
- docker run -d -p 8090:8090 -e JAVA_OPTS=" -Xms256m -Xmx256m" alfresco/alfresco-transform-core-aio:2.5.7
|
- docker run -d -p 8090:8090 -e JAVA_OPTS=" -Xms256m -Xmx256m" alfresco/alfresco-transform-core-aio:${TRANSFORMERS_TAG}
|
||||||
script: travis_wait 20 mvn -B test -pl repository -Dtest=AppContext04TestSuite -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=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"
|
- name: "Repository - AppContext05TestSuite"
|
||||||
if: commit_message !~ /\[skip repo\]/
|
if: commit_message !~ /\[skip repo\]/
|
||||||
|
install: skip
|
||||||
before_script:
|
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 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 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"
|
- cp repository/src/test/resources/realms/alfresco-realm.json "${HOME}/tmp"
|
||||||
- export HOST_IP=$(hostname -I | cut -f1 -d' ')
|
- 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
|
- 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"
|
- name: "Repository - AppContext06TestSuite"
|
||||||
if: commit_message !~ /\[skip repo\]/
|
if: commit_message !~ /\[skip repo\]/
|
||||||
|
install: skip
|
||||||
before_script:
|
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 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 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.16.1
|
||||||
- docker run -d -p 8090:8090 -e JAVA_OPTS=" -Xms256m -Xmx256m" alfresco/alfresco-transform-core-aio:2.5.7
|
- docker run -d -p 8090:8090 -e JAVA_OPTS=" -Xms256m -Xmx256m" alfresco/alfresco-transform-core-aio:${TRANSFORMERS_TAG}
|
||||||
script: travis_wait 20 mvn -B test -pl repository -Dtest=AppContext06TestSuite -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=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"
|
- name: "Repository - AppContextExtraTestSuite"
|
||||||
if: commit_message !~ /\[skip repo\]/
|
if: commit_message !~ /\[skip repo\]/
|
||||||
|
install: skip
|
||||||
before_script:
|
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 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 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.16.1
|
||||||
- docker run -d -p 8090:8090 -e JAVA_OPTS=" -Xms256m -Xmx256m" alfresco/alfresco-transform-core-aio:2.5.7
|
- docker run -d -p 8090:8090 -e JAVA_OPTS=" -Xms256m -Xmx256m" alfresco/alfresco-transform-core-aio:${TRANSFORMERS_TAG}
|
||||||
script: travis_wait 20 mvn -B test -pl repository -Dtest=AppContextExtraTestSuite -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=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"
|
- name: "Repository - MiscContextTestSuite"
|
||||||
if: commit_message !~ /\[skip repo\]/
|
if: commit_message !~ /\[skip repo\]/
|
||||||
|
install: skip
|
||||||
before_script:
|
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 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 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.16.1
|
||||||
- docker run -d -p 8090:8090 -e JAVA_OPTS=" -Xms256m -Xmx256m" alfresco/alfresco-transform-core-aio:2.5.7
|
- docker run -d -p 8090:8090 -e JAVA_OPTS=" -Xms256m -Xmx256m" alfresco/alfresco-transform-core-aio:${TRANSFORMERS_TAG}
|
||||||
script: travis_wait 20 mvn -B test -pl repository -Dtest=MiscContextTestSuite -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=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"
|
- name: "Repository - SearchTestSuite"
|
||||||
if: commit_message !~ /\[skip repo\]/
|
if: commit_message !~ /\[skip repo\]/
|
||||||
|
install: skip
|
||||||
before_script:
|
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 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 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"
|
- name: "Repository - MariaDB 10.2.18 tests"
|
||||||
if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip db\]/ AND type != pull_request) OR commit_message =~ /\[db\]/
|
if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip db\]/ AND type != pull_request) OR commit_message =~ /\[db\]/
|
||||||
|
install: skip
|
||||||
before_script:
|
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 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
|
- 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"
|
- name: "Repository - MariaDB 10.4 tests"
|
||||||
if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip db\]/ AND type != pull_request) OR commit_message =~ /\[db\]/
|
if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip db\]/ AND type != pull_request) OR commit_message =~ /\[db\]/
|
||||||
|
install: skip
|
||||||
before_script:
|
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 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
|
- 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"
|
- name: "Repository - MariaDB 10.5 tests"
|
||||||
if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip db\]/ AND type != pull_request) OR commit_message =~ /\[db\]/
|
if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip db\]/ AND type != pull_request) OR commit_message =~ /\[db\]/
|
||||||
|
install: skip
|
||||||
before_script:
|
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 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
|
- 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"
|
- 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
|
# 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\]/
|
if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip db\]/ ) OR commit_message =~ /\[db\]/ OR commit_message =~ /\[latest db\]/
|
||||||
|
install: skip
|
||||||
before_script:
|
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 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
|
- 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"
|
- name: "Repository - MySQL 5.7.23 tests"
|
||||||
if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip db\]/ AND type != pull_request) OR commit_message =~ /\[db\]/
|
if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip db\]/ AND type != pull_request) OR commit_message =~ /\[db\]/
|
||||||
|
install: skip
|
||||||
before_script:
|
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 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
|
- 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"
|
- 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
|
# 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\]/
|
if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip db\]/ ) OR commit_message =~ /\[db\]/ OR commit_message =~ /\[latest db\]/
|
||||||
|
install: skip
|
||||||
before_script:
|
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 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
|
- 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"
|
- name: "Repository - PostgreSQL 10.9 tests"
|
||||||
if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip db\]/ AND type != pull_request) OR commit_message =~ /\[db\]/
|
if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip db\]/ AND type != pull_request) OR commit_message =~ /\[db\]/
|
||||||
|
install: skip
|
||||||
before_script:
|
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 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
|
- 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"
|
- name: "Repository - PostgreSQL 11.7 tests"
|
||||||
if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip db\]/ AND type != pull_request) OR commit_message =~ /\[db\]/
|
if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip db\]/ AND type != pull_request) OR commit_message =~ /\[db\]/
|
||||||
|
install: skip
|
||||||
before_script:
|
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 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
|
- 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"
|
- name: "Repository - PostgreSQL 11.12 tests"
|
||||||
if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip db\]/ AND type != pull_request) OR commit_message =~ /\[db\]/
|
if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip db\]/ AND type != pull_request) OR commit_message =~ /\[db\]/
|
||||||
|
install: skip
|
||||||
before_script:
|
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 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
|
- 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"
|
- name: "Repository - PostgreSQL 12.4 tests"
|
||||||
if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip db\]/ AND type != pull_request) OR commit_message =~ /\[db\]/
|
if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip db\]/ AND type != pull_request) OR commit_message =~ /\[db\]/
|
||||||
|
install: skip
|
||||||
before_script:
|
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 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
|
- 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"
|
- name: "Repository - PostgreSQL 12.7 tests"
|
||||||
if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip db\]/ AND type != pull_request) OR commit_message =~ /\[db\]/
|
if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip db\]/ AND type != pull_request) OR commit_message =~ /\[db\]/
|
||||||
|
install: skip
|
||||||
before_script:
|
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 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
|
- 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"
|
- name: "Repository - PostgreSQL 13.1 tests"
|
||||||
# We only run DB tests on the latest version of PostgreSQL on feature branches
|
# 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\]/
|
if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip db\]/ AND type != pull_request) OR commit_message =~ /\[db\]/
|
||||||
|
install: skip
|
||||||
before_script:
|
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 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
|
- 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"
|
- name: "Repository - PostgreSQL 13.3 tests"
|
||||||
# We only run DB tests on the latest version of PostgreSQL on feature branches
|
# We only run DB tests on the latest version of PostgreSQL on feature branches
|
||||||
if: commit_message !~ /\[skip db\]/ OR commit_message =~ /\[latest db\]/
|
if: commit_message !~ /\[skip db\]/ OR commit_message =~ /\[latest db\]/
|
||||||
|
install: skip
|
||||||
before_script:
|
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 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 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"
|
- name: "Repository - Messaging tests"
|
||||||
if: commit_message !~ /\[skip repo\]/
|
if: commit_message !~ /\[skip repo\]/
|
||||||
|
install: skip
|
||||||
before_script:
|
before_script:
|
||||||
- docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.16.1
|
- 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"
|
- name: "Remote-api - AppContext01TestSuite"
|
||||||
if: commit_message !~ /\[skip repo\]/
|
if: commit_message !~ /\[skip repo\]/
|
||||||
|
install: travis_retry travis_wait 40 env REQUIRES_INSTALLED_ARTIFACTS=true bash scripts/travis/build.sh
|
||||||
before_script:
|
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 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 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.16.1
|
||||||
@@ -238,30 +272,34 @@ jobs:
|
|||||||
|
|
||||||
- name: "Remote-api - AppContext02TestSuite"
|
- name: "Remote-api - AppContext02TestSuite"
|
||||||
if: commit_message !~ /\[skip repo\]/
|
if: commit_message !~ /\[skip repo\]/
|
||||||
|
install: travis_retry travis_wait 40 env REQUIRES_INSTALLED_ARTIFACTS=true bash scripts/travis/build.sh
|
||||||
before_script:
|
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 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 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.16.1
|
||||||
- docker run -d -p 8090:8090 -e JAVA_OPTS=" -Xms256m -Xmx256m" alfresco/alfresco-transform-core-aio:2.5.7
|
- docker run -d -p 8090:8090 -e JAVA_OPTS=" -Xms256m -Xmx256m" alfresco/alfresco-transform-core-aio:${TRANSFORMERS_TAG}
|
||||||
script: travis_wait 20 mvn -B test -pl remote-api -Dtest=AppContext02TestSuite -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
|
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"
|
- name: "Remote-api - AppContext03TestSuite"
|
||||||
if: commit_message !~ /\[skip repo\]/
|
if: commit_message !~ /\[skip repo\]/
|
||||||
|
install: travis_retry travis_wait 40 env REQUIRES_INSTALLED_ARTIFACTS=true bash scripts/travis/build.sh
|
||||||
before_script:
|
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 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 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.16.1
|
||||||
- docker run -d -p 8090:8090 -e JAVA_OPTS=" -Xms256m -Xmx256m" alfresco/alfresco-transform-core-aio:2.5.7
|
- docker run -d -p 8090:8090 -e JAVA_OPTS=" -Xms256m -Xmx256m" alfresco/alfresco-transform-core-aio:${TRANSFORMERS_TAG}
|
||||||
script: travis_wait 20 mvn -B test -pl remote-api -Dtest=AppContext03TestSuite -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
|
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"
|
- name: "Remote-api - AppContext04TestSuite"
|
||||||
if: commit_message !~ /\[skip repo\]/
|
if: commit_message !~ /\[skip repo\]/
|
||||||
|
install: travis_retry travis_wait 40 env REQUIRES_INSTALLED_ARTIFACTS=true bash scripts/travis/build.sh
|
||||||
before_script:
|
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 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 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.16.1
|
||||||
- docker run -d -p 8090:8090 -e JAVA_OPTS=" -Xms256m -Xmx256m" alfresco/alfresco-transform-core-aio:2.5.7
|
- docker run -d -p 8090:8090 -e JAVA_OPTS=" -Xms256m -Xmx256m" alfresco/alfresco-transform-core-aio:${TRANSFORMERS_TAG}
|
||||||
script: travis_wait 20 mvn -B test -pl remote-api -Dtest=AppContext04TestSuite -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
|
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"
|
- name: "Remote-api - AppContextExtraTestSuite"
|
||||||
if: commit_message !~ /\[skip repo\]/
|
if: commit_message !~ /\[skip repo\]/
|
||||||
|
install: travis_retry travis_wait 40 env REQUIRES_INSTALLED_ARTIFACTS=true bash scripts/travis/build.sh
|
||||||
before_script:
|
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 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 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.16.1
|
||||||
@@ -270,99 +308,126 @@ jobs:
|
|||||||
- name: "REST API TAS tests part1"
|
- 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
|
# 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\]/
|
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:
|
before_script:
|
||||||
- ${TAS_SCRIPTS}/start-compose.sh ${TAS_ENVIRONMENT}/docker-compose-minimal+transforms.yml
|
- ${TAS_SCRIPTS}/start-compose.sh ${TAS_ENVIRONMENT}/docker-compose-minimal+transforms.yml
|
||||||
- ${TAS_SCRIPTS}/wait-for-alfresco-start.sh "http://localhost:8082/alfresco"
|
- ${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"
|
- name: "REST API TAS tests part2"
|
||||||
if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip tas\]/) OR commit_message =~ /\[tas\]/
|
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:
|
before_script:
|
||||||
- ${TAS_SCRIPTS}/start-compose.sh ${TAS_ENVIRONMENT}/docker-compose-minimal+transforms.yml
|
- ${TAS_SCRIPTS}/start-compose.sh ${TAS_ENVIRONMENT}/docker-compose-minimal+transforms.yml
|
||||||
- ${TAS_SCRIPTS}/wait-for-alfresco-start.sh "http://localhost:8082/alfresco"
|
- ${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"
|
- name: "REST API TAS tests part3"
|
||||||
if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip tas\]/) OR commit_message =~ /\[tas\]/
|
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:
|
before_script:
|
||||||
- ${TAS_SCRIPTS}/start-compose.sh ${TAS_ENVIRONMENT}/docker-compose-minimal+transforms.yml
|
- ${TAS_SCRIPTS}/start-compose.sh ${TAS_ENVIRONMENT}/docker-compose-minimal+transforms.yml
|
||||||
- ${TAS_SCRIPTS}/wait-for-alfresco-start.sh "http://localhost:8082/alfresco"
|
- ${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"
|
- name: "CMIS TAS tests - BROWSER binding"
|
||||||
if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip tas\]/) OR commit_message =~ /\[tas\]/
|
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:
|
before_script:
|
||||||
- ${TAS_SCRIPTS}/start-compose.sh ${TAS_ENVIRONMENT}/docker-compose-minimal+transforms.yml
|
- ${TAS_SCRIPTS}/start-compose.sh ${TAS_ENVIRONMENT}/docker-compose-minimal+transforms.yml
|
||||||
- ${TAS_SCRIPTS}/wait-for-alfresco-start.sh "http://localhost:8082/alfresco"
|
- ${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"
|
- name: "CMIS TAS tests - ATOM binding"
|
||||||
if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip tas\]/) OR commit_message =~ /\[tas\]/
|
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:
|
before_script:
|
||||||
- ${TAS_SCRIPTS}/start-compose.sh ${TAS_ENVIRONMENT}/docker-compose-minimal+transforms.yml
|
- ${TAS_SCRIPTS}/start-compose.sh ${TAS_ENVIRONMENT}/docker-compose-minimal+transforms.yml
|
||||||
- ${TAS_SCRIPTS}/wait-for-alfresco-start.sh "http://localhost:8082/alfresco"
|
- ${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"
|
- name: "CMIS TAS tests - WEBSERVICES binding"
|
||||||
if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip tas\]/) OR commit_message =~ /\[tas\]/
|
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:
|
before_script:
|
||||||
- ${TAS_SCRIPTS}/start-compose.sh ${TAS_ENVIRONMENT}/docker-compose-minimal+transforms.yml
|
- ${TAS_SCRIPTS}/start-compose.sh ${TAS_ENVIRONMENT}/docker-compose-minimal+transforms.yml
|
||||||
- ${TAS_SCRIPTS}/wait-for-alfresco-start.sh "http://localhost:8082/alfresco"
|
- ${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"
|
- name: "Email TAS tests"
|
||||||
if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip tas\]/) OR commit_message =~ /\[tas\]/
|
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:
|
before_script:
|
||||||
- ${TAS_SCRIPTS}/start-compose.sh ${TAS_ENVIRONMENT}/docker-compose-minimal.yml
|
- ${TAS_SCRIPTS}/start-compose.sh ${TAS_ENVIRONMENT}/docker-compose-minimal.yml
|
||||||
- ${TAS_SCRIPTS}/wait-for-alfresco-start.sh "http://localhost:8082/alfresco"
|
- ${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"
|
- name: "WebDAV TAS tests"
|
||||||
if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip tas\]/) OR commit_message =~ /\[tas\]/
|
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:
|
before_script:
|
||||||
- ${TAS_SCRIPTS}/start-compose.sh ${TAS_ENVIRONMENT}/docker-compose-minimal.yml
|
- ${TAS_SCRIPTS}/start-compose.sh ${TAS_ENVIRONMENT}/docker-compose-minimal.yml
|
||||||
- ${TAS_SCRIPTS}/wait-for-alfresco-start.sh "http://localhost:8082/alfresco"
|
- ${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"
|
- name: "Integration TAS tests"
|
||||||
if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip tas\]/) OR commit_message =~ /\[tas\]/
|
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:
|
before_script:
|
||||||
- ${TAS_SCRIPTS}/start-compose.sh ${TAS_ENVIRONMENT}/docker-compose-minimal.yml
|
- ${TAS_SCRIPTS}/start-compose.sh ${TAS_ENVIRONMENT}/docker-compose-minimal.yml
|
||||||
- ${TAS_SCRIPTS}/wait-for-alfresco-start.sh "http://localhost:8082/alfresco"
|
- ${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"
|
- name: "Share Services - ShareServicesTestSuite"
|
||||||
if: commit_message !~ /\[skip repo\]/
|
if: commit_message !~ /\[skip repo\]/
|
||||||
|
install: skip
|
||||||
before_script:
|
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 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)"
|
- name: "AGS Unit & Integration Tests 01 (PostgreSQL)"
|
||||||
if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip ags\]/) OR commit_message =~ /\[ags\]/
|
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}
|
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)"
|
- name: "AGS Integration Tests 02 (PostgreSQL)"
|
||||||
if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip ags\]/) OR commit_message =~ /\[ags\]/
|
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}
|
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)"
|
- name: "AGS Integration Tests 03 (PostgreSQL)"
|
||||||
if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip ags\]/) OR commit_message =~ /\[ags\]/
|
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}
|
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) "
|
- name: "AGS Unit & Integration Tests 01 (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 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}
|
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) "
|
- name: "AGS Integration Tests 02 (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 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}
|
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) "
|
- 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}
|
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"
|
- name: "AGS Community Rest API Tests"
|
||||||
if: (branch =~ /(release\/.*$|master)/ AND commit_message !~ /\[skip ags\]/) OR commit_message =~ /\[ags\]/
|
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:
|
addons:
|
||||||
artifacts:
|
artifacts:
|
||||||
paths:
|
paths:
|
||||||
@@ -373,11 +438,12 @@ jobs:
|
|||||||
before_script:
|
before_script:
|
||||||
- ${TAS_SCRIPTS}/start-compose.sh ./amps/ags/rm-community/rm-community-repo/docker-compose.yml
|
- ${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"
|
- ${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
|
after_script: bash amps/ags/travis/scripts/getLogs.sh
|
||||||
|
|
||||||
- name: "Push to Nexus"
|
- name: "Push to Nexus"
|
||||||
stage: release
|
stage: release
|
||||||
|
install: skip
|
||||||
before_script: bash scripts/travis/verify_release_tag.sh
|
before_script: bash scripts/travis/verify_release_tag.sh
|
||||||
script: travis_wait 40 bash scripts/travis/maven_release.sh
|
script: travis_wait 40 bash scripts/travis/maven_release.sh
|
||||||
|
|
||||||
|
@@ -7,7 +7,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>org.alfresco</groupId>
|
<groupId>org.alfresco</groupId>
|
||||||
<artifactId>alfresco-community-repo-amps</artifactId>
|
<artifactId>alfresco-community-repo-amps</artifactId>
|
||||||
<version>15.1</version>
|
<version>17.4</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<modules>
|
<modules>
|
||||||
|
@@ -7,7 +7,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>org.alfresco</groupId>
|
<groupId>org.alfresco</groupId>
|
||||||
<artifactId>alfresco-governance-services-community-parent</artifactId>
|
<artifactId>alfresco-governance-services-community-parent</artifactId>
|
||||||
<version>15.1</version>
|
<version>17.4</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<modules>
|
<modules>
|
||||||
|
@@ -7,7 +7,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>org.alfresco</groupId>
|
<groupId>org.alfresco</groupId>
|
||||||
<artifactId>alfresco-governance-services-automation-community-repo</artifactId>
|
<artifactId>alfresco-governance-services-automation-community-repo</artifactId>
|
||||||
<version>15.1</version>
|
<version>17.4</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<build>
|
<build>
|
||||||
|
@@ -73,6 +73,7 @@ import org.testng.annotations.BeforeClass;
|
|||||||
import org.testng.annotations.BeforeMethod;
|
import org.testng.annotations.BeforeMethod;
|
||||||
import org.testng.annotations.DataProvider;
|
import org.testng.annotations.DataProvider;
|
||||||
import org.testng.annotations.Test;
|
import org.testng.annotations.Test;
|
||||||
|
import org.alfresco.utility.model.TestGroup;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* API tests for declaring document as record and filing it immediately to a record folder location within the file plan
|
* API tests for declaring document as record and filing it immediately to a record folder location within the file plan
|
||||||
@@ -257,7 +258,7 @@ public class DeclareAndFileDocumentAsRecordTests extends BaseRMRestTest
|
|||||||
* Then I receive an error indicating that I have attempted to declare and file a document into an invalid record folder
|
* Then I receive an error indicating that I have attempted to declare and file a document into an invalid record folder
|
||||||
* And the document is not declared as a record
|
* And the document is not declared as a record
|
||||||
*/
|
*/
|
||||||
@Test (dataProvider = "invalidDestinationPaths")
|
@Test (dataProvider = "invalidDestinationPaths",groups = { TestGroup.NOT_SUPPORTED_ON_SINGLE_PIPELINE })
|
||||||
public void declareAndFileToInvalidLocationUsingActionsAPI(String containerPath, String expectedException) throws Exception
|
public void declareAndFileToInvalidLocationUsingActionsAPI(String containerPath, String expectedException) throws Exception
|
||||||
{
|
{
|
||||||
STEP("Declare document as record with an invalid location parameter value");
|
STEP("Declare document as record with an invalid location parameter value");
|
||||||
|
@@ -62,6 +62,7 @@ import org.testng.annotations.BeforeClass;
|
|||||||
import org.testng.annotations.BeforeMethod;
|
import org.testng.annotations.BeforeMethod;
|
||||||
import org.testng.annotations.DataProvider;
|
import org.testng.annotations.DataProvider;
|
||||||
import org.testng.annotations.Test;
|
import org.testng.annotations.Test;
|
||||||
|
import org.alfresco.utility.model.TestGroup;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* API tests for declaring a document version as record and filing to a record folder location within the file plan
|
* API tests for declaring a document version as record and filing to a record folder location within the file plan
|
||||||
@@ -207,7 +208,7 @@ public class FileVersionAsRecordTests extends BaseRMRestTest
|
|||||||
* record folder
|
* record folder
|
||||||
* And the document is not declared as a version record
|
* And the document is not declared as a version record
|
||||||
*/
|
*/
|
||||||
@Test (dataProvider = "invalidDestinationPaths")
|
@Test (dataProvider = "invalidDestinationPaths", groups = { TestGroup.NOT_SUPPORTED_ON_SINGLE_PIPELINE })
|
||||||
public void declareVersionAndFileToInvalidLocationUsingActionsAPI(String containerPath, String expectedException) throws Exception
|
public void declareVersionAndFileToInvalidLocationUsingActionsAPI(String containerPath, String expectedException) throws Exception
|
||||||
{
|
{
|
||||||
STEP("Declare document as record version with an invalid location parameter value");
|
STEP("Declare document as record version with an invalid location parameter value");
|
||||||
|
@@ -7,7 +7,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>org.alfresco</groupId>
|
<groupId>org.alfresco</groupId>
|
||||||
<artifactId>alfresco-governance-services-community-parent</artifactId>
|
<artifactId>alfresco-governance-services-community-parent</artifactId>
|
||||||
<version>15.1</version>
|
<version>17.4</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<modules>
|
<modules>
|
||||||
|
@@ -1,4 +1,3 @@
|
|||||||
TRANSFORMERS_TAG=2.5.7
|
|
||||||
SOLR6_TAG=2.0.3
|
SOLR6_TAG=2.0.3
|
||||||
POSTGRES_TAG=13.3
|
POSTGRES_TAG=13.3
|
||||||
ACTIVEMQ_TAG=5.16.1
|
ACTIVEMQ_TAG=5.16.1
|
||||||
|
@@ -8,7 +8,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>org.alfresco</groupId>
|
<groupId>org.alfresco</groupId>
|
||||||
<artifactId>alfresco-governance-services-community-repo-parent</artifactId>
|
<artifactId>alfresco-governance-services-community-repo-parent</artifactId>
|
||||||
<version>15.1</version>
|
<version>17.4</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
@@ -361,6 +361,12 @@
|
|||||||
<integrationTestSuite>**/AllTestSuitePt3.class</integrationTestSuite>
|
<integrationTestSuite>**/AllTestSuitePt3.class</integrationTestSuite>
|
||||||
</properties>
|
</properties>
|
||||||
</profile>
|
</profile>
|
||||||
|
<profile>
|
||||||
|
<id>agsAllTestSuitePt4</id>
|
||||||
|
<properties>
|
||||||
|
<integrationTestSuite>**/AllTestSuitePt4.class</integrationTestSuite>
|
||||||
|
</properties>
|
||||||
|
</profile>
|
||||||
|
|
||||||
<profile>
|
<profile>
|
||||||
<id>use-mysql</id>
|
<id>use-mysql</id>
|
||||||
|
@@ -43,19 +43,16 @@ import org.junit.runner.RunWith;
|
|||||||
@ClassnameFilters({
|
@ClassnameFilters({
|
||||||
|
|
||||||
// The following packages are run by Pt1. IF YOU CHANGE THIS LIST ALSO CHANGE IT IN AllTestSuitePt3.
|
// 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\\.service\\..*Test",
|
||||||
"org\\.alfresco\\.module\\.org_alfresco_module_rm\\.test\\.legacy\\.webscript\\..*Test",
|
"org\\.alfresco\\.module\\.org_alfresco_module_rm\\.test\\.legacy\\.jscript\\..*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.
|
|
||||||
|
|
||||||
// Exclude all UnitTests
|
// Exclude all UnitTests
|
||||||
"!.*UnitTest",
|
"!.*UnitTest",
|
||||||
|
|
||||||
// Put the test classes you want to exclude here
|
// 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",
|
"!.*DataLoadSystemTest",
|
||||||
"!.*RM2072Test",
|
"!.*RM2072Test",
|
||||||
"!.*RM2190Test",
|
"!.*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
|
||||||
|
{
|
||||||
|
}
|
@@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
# Version label
|
# Version label
|
||||||
version.major=7
|
version.major=7
|
||||||
version.minor=0
|
version.minor=3
|
||||||
version.revision=0
|
version.revision=0
|
||||||
version.label=
|
version.label=
|
||||||
|
|
||||||
@@ -15,4 +15,4 @@ version.edition=Community
|
|||||||
version.scmrevision=@scm-path@-r@scm-revision@
|
version.scmrevision=@scm-path@-r@scm-revision@
|
||||||
|
|
||||||
# Build number
|
# Build number
|
||||||
version.build=r@scm-revision@-b@build-number@
|
version.build=r@scm-revision@-b@build-number@
|
||||||
|
@@ -7,7 +7,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>org.alfresco</groupId>
|
<groupId>org.alfresco</groupId>
|
||||||
<artifactId>alfresco-governance-services-community-repo-parent</artifactId>
|
<artifactId>alfresco-governance-services-community-repo-parent</artifactId>
|
||||||
<version>15.1</version>
|
<version>17.4</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<build>
|
<build>
|
||||||
|
@@ -7,7 +7,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>org.alfresco</groupId>
|
<groupId>org.alfresco</groupId>
|
||||||
<artifactId>alfresco-community-repo</artifactId>
|
<artifactId>alfresco-community-repo</artifactId>
|
||||||
<version>15.1</version>
|
<version>17.4</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<modules>
|
<modules>
|
||||||
|
@@ -8,7 +8,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>org.alfresco</groupId>
|
<groupId>org.alfresco</groupId>
|
||||||
<artifactId>alfresco-community-repo-amps</artifactId>
|
<artifactId>alfresco-community-repo-amps</artifactId>
|
||||||
<version>15.1</version>
|
<version>17.4</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
|
@@ -7,7 +7,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>org.alfresco</groupId>
|
<groupId>org.alfresco</groupId>
|
||||||
<artifactId>alfresco-community-repo</artifactId>
|
<artifactId>alfresco-community-repo</artifactId>
|
||||||
<version>15.1</version>
|
<version>17.4</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<dependencies>
|
<dependencies>
|
||||||
|
@@ -7,7 +7,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>org.alfresco</groupId>
|
<groupId>org.alfresco</groupId>
|
||||||
<artifactId>alfresco-community-repo</artifactId>
|
<artifactId>alfresco-community-repo</artifactId>
|
||||||
<version>15.1</version>
|
<version>17.4</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
|
@@ -78,6 +78,10 @@ public class ObjectTypeIdLuceneBuilder extends BaseLuceneBuilder
|
|||||||
String field = getLuceneFieldName();
|
String field = getLuceneFieldName();
|
||||||
String stringValue = getValueAsString(value);
|
String stringValue = getValueAsString(value);
|
||||||
TypeDefinitionWrapper type = cmisDictionaryService.findType(stringValue);
|
TypeDefinitionWrapper type = cmisDictionaryService.findType(stringValue);
|
||||||
|
if (type == null)
|
||||||
|
{
|
||||||
|
throw new CmisInvalidArgumentException("Unknown type: " + stringValue);
|
||||||
|
}
|
||||||
return lqpa
|
return lqpa
|
||||||
.getFieldQuery(field, type.getAlfrescoClass().toString(), AnalysisMode.IDENTIFIER, luceneFunction);
|
.getFieldQuery(field, type.getAlfrescoClass().toString(), AnalysisMode.IDENTIFIER, luceneFunction);
|
||||||
}
|
}
|
||||||
|
@@ -7,7 +7,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>org.alfresco</groupId>
|
<groupId>org.alfresco</groupId>
|
||||||
<artifactId>alfresco-community-repo</artifactId>
|
<artifactId>alfresco-community-repo</artifactId>
|
||||||
<version>15.1</version>
|
<version>17.4</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<dependencies>
|
<dependencies>
|
||||||
|
@@ -9,6 +9,6 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>org.alfresco</groupId>
|
<groupId>org.alfresco</groupId>
|
||||||
<artifactId>alfresco-community-repo-packaging</artifactId>
|
<artifactId>alfresco-community-repo-packaging</artifactId>
|
||||||
<version>15.1</version>
|
<version>17.4</version>
|
||||||
</parent>
|
</parent>
|
||||||
</project>
|
</project>
|
||||||
|
@@ -7,7 +7,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>org.alfresco</groupId>
|
<groupId>org.alfresco</groupId>
|
||||||
<artifactId>alfresco-community-repo-packaging</artifactId>
|
<artifactId>alfresco-community-repo-packaging</artifactId>
|
||||||
<version>15.1</version>
|
<version>17.4</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
|
@@ -7,7 +7,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>org.alfresco</groupId>
|
<groupId>org.alfresco</groupId>
|
||||||
<artifactId>alfresco-community-repo</artifactId>
|
<artifactId>alfresco-community-repo</artifactId>
|
||||||
<version>15.1</version>
|
<version>17.4</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<modules>
|
<modules>
|
||||||
|
@@ -1,4 +1,3 @@
|
|||||||
TRANSFORMERS_TAG=2.5.7
|
|
||||||
SOLR6_TAG=2.0.3
|
SOLR6_TAG=2.0.3
|
||||||
POSTGRES_TAG=13.3
|
POSTGRES_TAG=13.3
|
||||||
ACTIVEMQ_TAG=5.16.1
|
ACTIVEMQ_TAG=5.16.1
|
||||||
|
@@ -6,7 +6,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>org.alfresco</groupId>
|
<groupId>org.alfresco</groupId>
|
||||||
<artifactId>alfresco-community-repo-packaging</artifactId>
|
<artifactId>alfresco-community-repo-packaging</artifactId>
|
||||||
<version>15.1</version>
|
<version>17.4</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<modules>
|
<modules>
|
||||||
|
@@ -27,6 +27,9 @@ fi
|
|||||||
|
|
||||||
echo "Starting ACS stack in ${DOCKER_COMPOSE_PATH}"
|
echo "Starting ACS stack in ${DOCKER_COMPOSE_PATH}"
|
||||||
|
|
||||||
|
export TRANSFORMERS_TAG=$(mvn help:evaluate -Dexpression=dependency.alfresco-transform-core.version -q -DforceStdout)
|
||||||
|
export 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+
|
# .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
|
docker-compose --file "${DOCKER_COMPOSE_PATH}" --project-directory $(dirname "${DOCKER_COMPOSE_PATH}") up -d
|
||||||
|
|
||||||
|
@@ -9,7 +9,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>org.alfresco</groupId>
|
<groupId>org.alfresco</groupId>
|
||||||
<artifactId>alfresco-community-repo-tests</artifactId>
|
<artifactId>alfresco-community-repo-tests</artifactId>
|
||||||
<version>15.1</version>
|
<version>17.4</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<developers>
|
<developers>
|
||||||
|
@@ -0,0 +1,76 @@
|
|||||||
|
package org.alfresco.cmis.search;
|
||||||
|
|
||||||
|
import java.lang.reflect.Method;
|
||||||
|
|
||||||
|
import org.alfresco.cmis.CmisProperties;
|
||||||
|
import org.alfresco.utility.Utility;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.context.annotation.Scope;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
import org.springframework.test.context.ContextConfiguration;
|
||||||
|
import org.testng.annotations.AfterMethod;
|
||||||
|
import org.testng.annotations.BeforeMethod;
|
||||||
|
|
||||||
|
@ContextConfiguration("classpath:alfresco-cmis-context.xml")
|
||||||
|
@Component
|
||||||
|
@Scope(value = "prototype")
|
||||||
|
public abstract class AbstractCmisE2ETest extends AbstractE2EFunctionalTest
|
||||||
|
{
|
||||||
|
private static Logger LOGGER = LoggerFactory.getLogger(AbstractCmisE2ETest.class);
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
protected CmisProperties cmisProperties;
|
||||||
|
|
||||||
|
public String documentContent = "CMIS document content";
|
||||||
|
|
||||||
|
@BeforeMethod(alwaysRun = true)
|
||||||
|
public void showStartTestInfo(Method method)
|
||||||
|
{
|
||||||
|
LOGGER.info(String.format("*** STARTING Test: [%s] ***", method.getName()));
|
||||||
|
}
|
||||||
|
|
||||||
|
@AfterMethod(alwaysRun = true)
|
||||||
|
public void showEndTestInfo(Method method)
|
||||||
|
{
|
||||||
|
LOGGER.info(String.format("*** ENDING Test: [%s] ***", method.getName()));
|
||||||
|
}
|
||||||
|
|
||||||
|
public Integer getElasticWaitTimeInSeconds()
|
||||||
|
{
|
||||||
|
return cmisProperties.envProperty().getSolrWaitTimeInSeconds();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Repeat Elastic Query till results count returns expectedCountResults
|
||||||
|
* @param query CMIS Query to be executed
|
||||||
|
* @param expectedCountResults Number of results expected
|
||||||
|
* @return true when results count is equals to expectedCountResults
|
||||||
|
*/
|
||||||
|
protected boolean waitForIndexing(String query, long expectedCountResults)
|
||||||
|
{
|
||||||
|
|
||||||
|
for (int searchCount = 1; searchCount <= SEARCH_MAX_ATTEMPTS; searchCount++)
|
||||||
|
{
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
cmisApi.withQuery(query).assertResultsCount().equals(expectedCountResults);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
catch (AssertionError ae)
|
||||||
|
{
|
||||||
|
LOGGER.info(String.format("WaitForIndexing in Progress: %s", ae));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Utility.waitToLoopTime(getElasticWaitTimeInSeconds(), "Wait For Indexing");
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@@ -0,0 +1,58 @@
|
|||||||
|
package org.alfresco.cmis.search;
|
||||||
|
|
||||||
|
import org.alfresco.cmis.CmisWrapper;
|
||||||
|
import org.alfresco.dataprep.SiteService.Visibility;
|
||||||
|
import org.alfresco.utility.data.DataContent;
|
||||||
|
import org.alfresco.utility.data.DataSite;
|
||||||
|
import org.alfresco.utility.data.DataUser;
|
||||||
|
import org.alfresco.utility.data.RandomData;
|
||||||
|
import org.alfresco.utility.model.SiteModel;
|
||||||
|
import org.alfresco.utility.model.UserModel;
|
||||||
|
import org.alfresco.utility.network.ServerHealth;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.test.context.ContextConfiguration;
|
||||||
|
import org.springframework.test.context.testng.AbstractTestNGSpringContextTests;
|
||||||
|
import org.testng.annotations.BeforeClass;
|
||||||
|
|
||||||
|
@ContextConfiguration ("classpath:alfresco-cmis-context.xml")
|
||||||
|
public abstract class AbstractE2EFunctionalTest extends AbstractTestNGSpringContextTests
|
||||||
|
{
|
||||||
|
/** The number of retries that a query will be tried before giving up. */
|
||||||
|
protected static final int SEARCH_MAX_ATTEMPTS = 20;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
protected ServerHealth serverHealth;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
protected DataSite dataSite;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
protected DataContent dataContent;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
protected CmisWrapper cmisApi;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
protected DataUser dataUser;
|
||||||
|
|
||||||
|
protected UserModel testUser, adminUserModel;
|
||||||
|
protected SiteModel testSite;
|
||||||
|
|
||||||
|
protected static String unique_searchString;
|
||||||
|
|
||||||
|
@BeforeClass (alwaysRun = true)
|
||||||
|
public void setup()
|
||||||
|
{
|
||||||
|
serverHealth.assertServerIsOnline();
|
||||||
|
|
||||||
|
adminUserModel = dataUser.getAdminUser();
|
||||||
|
testUser = dataUser.createRandomTestUser("UserSearch");
|
||||||
|
|
||||||
|
testSite = new SiteModel(RandomData.getRandomName("SiteSearch"));
|
||||||
|
testSite.setVisibility(Visibility.PRIVATE);
|
||||||
|
|
||||||
|
testSite = dataSite.usingUser(testUser).createSite(testSite);
|
||||||
|
|
||||||
|
unique_searchString = testSite.getTitle().replace("SiteSearch", "Unique");
|
||||||
|
}
|
||||||
|
}
|
@@ -0,0 +1,62 @@
|
|||||||
|
package org.alfresco.cmis.search;
|
||||||
|
|
||||||
|
import org.alfresco.utility.Utility;
|
||||||
|
import org.alfresco.utility.data.provider.XMLDataConfig;
|
||||||
|
import org.alfresco.utility.data.provider.XMLTestDataProvider;
|
||||||
|
import org.alfresco.utility.model.FileModel;
|
||||||
|
import org.alfresco.utility.model.FileType;
|
||||||
|
import org.alfresco.utility.model.FolderModel;
|
||||||
|
import org.alfresco.utility.model.QueryModel;
|
||||||
|
import org.testng.Assert;
|
||||||
|
import org.testng.annotations.AfterClass;
|
||||||
|
import org.testng.annotations.BeforeClass;
|
||||||
|
import org.testng.annotations.Test;
|
||||||
|
|
||||||
|
public class SearchInFolderTests extends AbstractCmisE2ETest
|
||||||
|
{
|
||||||
|
private FolderModel parentFolder, subFolder1, subFolder2, subFolder3;
|
||||||
|
private FileModel subFile1, subFile2, subFile3, subFile4, subFile5;
|
||||||
|
|
||||||
|
@BeforeClass(alwaysRun = true)
|
||||||
|
public void createTestData() throws Exception
|
||||||
|
{
|
||||||
|
// create input data
|
||||||
|
parentFolder = FolderModel.getRandomFolderModel();
|
||||||
|
subFolder1 = FolderModel.getRandomFolderModel();
|
||||||
|
subFolder2 = FolderModel.getRandomFolderModel();
|
||||||
|
subFolder3 = new FolderModel("subFolder");
|
||||||
|
subFile5 = new FileModel("fifthFile.txt",FileType.TEXT_PLAIN, "fifthFile content");
|
||||||
|
subFile1 = new FileModel("firstFile", FileType.MSEXCEL);
|
||||||
|
subFile2 = FileModel.getRandomFileModel(FileType.MSPOWERPOINT2007);
|
||||||
|
subFile3 = FileModel.getRandomFileModel(FileType.TEXT_PLAIN);
|
||||||
|
subFile4 = new FileModel("fourthFile", "fourthFileTitle", "fourthFileDescription", FileType.MSWORD2007);
|
||||||
|
|
||||||
|
cmisApi.authenticateUser(testUser).usingSite(testSite).createFolder(parentFolder)
|
||||||
|
.then().usingResource(parentFolder)
|
||||||
|
.createFile(subFile5).assertThat().contentIs("fifthFile content")
|
||||||
|
.createFolder(subFolder1)
|
||||||
|
.createFolder(subFolder2)
|
||||||
|
.createFolder(subFolder3)
|
||||||
|
.createFile(subFile1)
|
||||||
|
.createFile(subFile2)
|
||||||
|
.createFile(subFile3)
|
||||||
|
.createFile(subFile4);
|
||||||
|
// wait for index
|
||||||
|
Utility.waitToLoopTime(getElasticWaitTimeInSeconds());
|
||||||
|
}
|
||||||
|
|
||||||
|
@AfterClass(alwaysRun = true)
|
||||||
|
public void cleanupEnvironment()
|
||||||
|
{
|
||||||
|
dataContent.deleteSite(testSite);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(dataProviderClass = XMLTestDataProvider.class, dataProvider = "getQueriesData")
|
||||||
|
@XMLDataConfig(file = "src/test/resources/search-in-folder.xml")
|
||||||
|
public void executeCMISQuery(QueryModel query)
|
||||||
|
{
|
||||||
|
String currentQuery = String.format(query.getValue(), parentFolder.getNodeRef());
|
||||||
|
cmisApi.authenticateUser(testUser);
|
||||||
|
Assert.assertTrue(waitForIndexing(currentQuery, query.getResults()), String.format("Result count not as expected for query: %s", currentQuery));
|
||||||
|
}
|
||||||
|
}
|
@@ -7,7 +7,7 @@ alfresco.port=8082
|
|||||||
admin.user=admin
|
admin.user=admin
|
||||||
admin.password=admin
|
admin.password=admin
|
||||||
|
|
||||||
solrWaitTimeInSeconds=30
|
solrWaitTimeInSeconds=60
|
||||||
|
|
||||||
# in containers we cannot access directly JMX, so we will use http://jolokia.org agent
|
# in containers we cannot access directly JMX, so we will use http://jolokia.org agent
|
||||||
# disabling this we will use direct JMX calls to server
|
# disabling this we will use direct JMX calls to server
|
||||||
|
@@ -0,0 +1,23 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!--CMIS Queries: passing the search query as first param and results expected -->
|
||||||
|
<testData xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
|
||||||
|
<queries>
|
||||||
|
<query value="SELECT cmis:name, cmis:parentId, cmis:path, cmis:allowedChildObjectTypeIds FROM cmis:folder where IN_FOLDER('%s') AND cmis:name = 'subFolder'" expectedResults="1" />
|
||||||
|
<query value="SELECT cmis:name, cmis:objectId, cmis:lastModifiedBy, cmis:creationDate, cmis:contentStreamFileName FROM cmis:document where IN_FOLDER('%s') AND cmis:name = 'fourthFile'" expectedResults="1" />
|
||||||
|
<query value="SELECT cmis:parentId FROM cmis:folder where IN_FOLDER('%s')" expectedResults="3" />
|
||||||
|
<query value="SELECT * FROM cmis:document where IN_FOLDER('%s')" expectedResults="5" />
|
||||||
|
<query value="SELECT * FROM cmis:document where IN_FOLDER('%s') ORDER BY cmis:name ASC" expectedResults="5" />
|
||||||
|
<query value="SELECT * FROM cmis:document where IN_FOLDER('%s') ORDER BY cmis:name DESC" expectedResults="5" />
|
||||||
|
<query value="SELECT * FROM cmis:folder where IN_FOLDER('%s') ORDER BY cmis:lastModificationDate ASC" expectedResults="3" />
|
||||||
|
<query value="SELECT * FROM cmis:folder where IN_FOLDER('%s') ORDER BY cmis:lastModificationDate DESC" expectedResults="3" />
|
||||||
|
<query value="SELECT * FROM cmis:document where IN_FOLDER('%s') ORDER BY cmis:createdBy DESC" expectedResults="5" />
|
||||||
|
<query value="SELECT * FROM cmis:document where IN_FOLDER('%s') AND cmis:name IS NOT NULL" expectedResults="5" />
|
||||||
|
<query value="SELECT * FROM cmis:folder where IN_FOLDER('%s') AND cmis:name IS NOT NULL" expectedResults="3" />
|
||||||
|
<query value="SELECT * FROM cmis:document where IN_FOLDER('%s') AND cmis:name LIKE 'fourthFile'" expectedResults="1" />
|
||||||
|
<query value="SELECT * FROM cmis:folder where IN_FOLDER('%s') AND NOT(cmis:name NOT IN ('subFolder'))" expectedResults="1" />
|
||||||
|
<query value="SELECT * FROM cmis:document where IN_FOLDER('%s') AND cmis:name IN ('fourthFile', 'fifthFile.txt')" expectedResults="2" />
|
||||||
|
<query value="SELECT * FROM cmis:document where IN_FOLDER('%s') AND cmis:name NOT IN ('fourthFile', 'fifthFile.txt')" expectedResults="3" />
|
||||||
|
<query value="SELECT * FROM cmis:folder where IN_FOLDER('%s') AND cmis:name <> 'subFolder'" expectedResults="2" />
|
||||||
|
<query value="SELECT cmis:secondaryObjectTypeIds FROM cmis:folder where IN_FOLDER('%s') AND cmis:name = 'subFolder'" expectedResults="1" />
|
||||||
|
</queries>
|
||||||
|
</testData>
|
@@ -9,7 +9,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>org.alfresco</groupId>
|
<groupId>org.alfresco</groupId>
|
||||||
<artifactId>alfresco-community-repo-tests</artifactId>
|
<artifactId>alfresco-community-repo-tests</artifactId>
|
||||||
<version>15.1</version>
|
<version>17.4</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<developers>
|
<developers>
|
||||||
|
@@ -9,7 +9,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>org.alfresco</groupId>
|
<groupId>org.alfresco</groupId>
|
||||||
<artifactId>alfresco-community-repo-tests</artifactId>
|
<artifactId>alfresco-community-repo-tests</artifactId>
|
||||||
<version>15.1</version>
|
<version>17.4</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<developers>
|
<developers>
|
||||||
|
@@ -60,15 +60,15 @@ public class IntegrationFullTestsBulk2 extends IntegrationTest
|
|||||||
ftpProtocol.authenticateUser(testUser1).usingSite(testSitePublic).createFolder(testFolder1)
|
ftpProtocol.authenticateUser(testUser1).usingSite(testSitePublic).createFolder(testFolder1)
|
||||||
.usingResource(testFolder1).createFile(wordFile)
|
.usingResource(testFolder1).createFile(wordFile)
|
||||||
.assertThat().contentIs("tasTesting");
|
.assertThat().contentIs("tasTesting");
|
||||||
|
|
||||||
STEP("2. Open document for edit using CMIS");
|
STEP("2. Open document for edit using CMIS");
|
||||||
cmisAPI.authenticateUser(testUser1).usingResource(wordFile).checkOut();
|
cmisAPI.authenticateUser(testUser1).usingResource(wordFile).checkOut();
|
||||||
FileModel wordFilePWC = cmisAPI.usingResource(wordFile).withCMISUtil().getPWCFileModel();
|
FileModel wordFilePWC = cmisAPI.usingResource(wordFile).withCMISUtil().getPWCFileModel();
|
||||||
|
|
||||||
STEP("3. Try to edit document using Webdav while checked-out with CMIS - content should be updated");
|
STEP("3. Try to edit document using Webdav while checked-out with CMIS - content should be updated");
|
||||||
webDavProtocol.authenticateUser(testUser1).usingResource(wordFilePWC).update("update")
|
webDavProtocol.authenticateUser(testUser1).usingResource(wordFilePWC).update("update")
|
||||||
.and().assertThat().contentIs("update");
|
.and().assertThat().contentIs("update");
|
||||||
|
|
||||||
STEP("4. Copy document to testFolder2 with ftp");
|
STEP("4. Copy document to testFolder2 with ftp");
|
||||||
FileModel copiedWordFile = new FileModel(wordFile);
|
FileModel copiedWordFile = new FileModel(wordFile);
|
||||||
ftpProtocol.usingSite(testSitePublic).createFolder(testFolder2)
|
ftpProtocol.usingSite(testSitePublic).createFolder(testFolder2)
|
||||||
@@ -76,15 +76,15 @@ public class IntegrationFullTestsBulk2 extends IntegrationTest
|
|||||||
copiedWordFile.setCmisLocation(ftpProtocol.getLastResourceWithoutPrefix());
|
copiedWordFile.setCmisLocation(ftpProtocol.getLastResourceWithoutPrefix());
|
||||||
ftpProtocol.usingResource(testFolder1).assertThat().hasFiles(wordFile)
|
ftpProtocol.usingResource(testFolder1).assertThat().hasFiles(wordFile)
|
||||||
.and().usingResource(testFolder2).assertThat().hasFiles(copiedWordFile);
|
.and().usingResource(testFolder2).assertThat().hasFiles(copiedWordFile);
|
||||||
|
|
||||||
STEP("5. Update document from folder2, check its content is updated with Webdav");
|
STEP("5. Update document from folder2, check its content is updated with Webdav");
|
||||||
webDavProtocol.usingResource(copiedWordFile).update("Step5")
|
webDavProtocol.usingResource(copiedWordFile).update("Step5")
|
||||||
.and().assertThat().contentIs("Step5");
|
.and().assertThat().contentIs("Step5");
|
||||||
|
|
||||||
STEP("6. Update document with WebDAV");
|
STEP("6. Update document with WebDAV");
|
||||||
webDavProtocol.authenticateUser(testUser1).usingResource(wordFile).update("WebDAVUpdate");
|
webDavProtocol.authenticateUser(testUser1).usingResource(wordFile).update("WebDAVUpdate");
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Scenario 84
|
* Scenario 84
|
||||||
* 1. Create folder1 with webdav
|
* 1. Create folder1 with webdav
|
||||||
@@ -150,7 +150,7 @@ public class IntegrationFullTestsBulk2 extends IntegrationTest
|
|||||||
* 13. Check file is deleted with WebDAV
|
* 13. Check file is deleted with WebDAV
|
||||||
*/
|
*/
|
||||||
@Test(groups = { TestGroup.INTEGRATION, TestGroup.FULL })
|
@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")
|
description = "Update file with different user roles and protocols")
|
||||||
public void updateFileWithDifferentRolesUsingDifferentProtocols() throws Exception
|
public void updateFileWithDifferentRolesUsingDifferentProtocols() throws Exception
|
||||||
{
|
{
|
||||||
@@ -276,41 +276,41 @@ public class IntegrationFullTestsBulk2 extends IntegrationTest
|
|||||||
UserModel user1 = dataUser.createRandomTestUser();
|
UserModel user1 = dataUser.createRandomTestUser();
|
||||||
UserModel user2 = dataUser.createRandomTestUser();
|
UserModel user2 = dataUser.createRandomTestUser();
|
||||||
user2.setUserRole(UserRole.SiteManager);
|
user2.setUserRole(UserRole.SiteManager);
|
||||||
|
|
||||||
STEP("2. User1 creates site1 and invites user2 as manager");
|
STEP("2. User1 creates site1 and invites user2 as manager");
|
||||||
SiteModel site = dataSite.usingUser(user1).createPublicRandomSite();
|
SiteModel site = dataSite.usingUser(user1).createPublicRandomSite();
|
||||||
restAPI.authenticateUser(user1).withCoreAPI().usingSite(site).addPerson(user2);
|
restAPI.authenticateUser(user1).withCoreAPI().usingSite(site).addPerson(user2);
|
||||||
|
|
||||||
STEP("3. User1 adds document1 and tag1 to doc");
|
STEP("3. User1 adds document1 and tag1 to doc");
|
||||||
dataContent.usingUser(user1).usingSite(site).createContent(testFile);
|
dataContent.usingUser(user1).usingSite(site).createContent(testFile);
|
||||||
RestTagModel tag = restAPI.withCoreAPI().usingResource(testFile).addTag("tag1");
|
RestTagModel tag = restAPI.withCoreAPI().usingResource(testFile).addTag("tag1");
|
||||||
restAPI.withCoreAPI().usingResource(testFile).getNodeTags().assertThat().entriesListContains("tag", "tag1");
|
restAPI.withCoreAPI().usingResource(testFile).getNodeTags().assertThat().entriesListContains("tag", "tag1");
|
||||||
|
|
||||||
STEP("4. User2 gets tags and verifies tag1 appears");
|
STEP("4. User2 gets tags and verifies tag1 appears");
|
||||||
restAPI.authenticateUser(user2).withCoreAPI().usingResource(testFile).getNodeTags().assertThat().entriesListContains("tag", "tag1");
|
restAPI.authenticateUser(user2).withCoreAPI().usingResource(testFile).getNodeTags().assertThat().entriesListContains("tag", "tag1");
|
||||||
|
|
||||||
STEP("5. User2 delete tag1");
|
STEP("5. User2 delete tag1");
|
||||||
restAPI.withCoreAPI().usingResource(testFile).deleteTag(tag);
|
restAPI.withCoreAPI().usingResource(testFile).deleteTag(tag);
|
||||||
restAPI.withCoreAPI().usingResource(testFile).getNodeTags().assertThat().entriesListDoesNotContain("tag", "tag1");
|
restAPI.withCoreAPI().usingResource(testFile).getNodeTags().assertThat().entriesListDoesNotContain("tag", "tag1");
|
||||||
|
|
||||||
STEP("6. User1 tries to update tag1");
|
STEP("6. User1 tries to update tag1");
|
||||||
restAPI.authenticateUser(user2).withCoreAPI().usingTag(tag).update("updatedTag");
|
restAPI.authenticateUser(user2).withCoreAPI().usingTag(tag).update("updatedTag");
|
||||||
restAPI.assertStatusCodeIs(HttpStatus.FORBIDDEN)
|
restAPI.assertStatusCodeIs(HttpStatus.FORBIDDEN)
|
||||||
.assertLastError().containsSummary(RestErrorModel.PERMISSION_WAS_DENIED)
|
.assertLastError().containsSummary(RestErrorModel.PERMISSION_WAS_DENIED)
|
||||||
.containsErrorKey(RestErrorModel.PERMISSION_DENIED_ERRORKEY);
|
.containsErrorKey(RestErrorModel.PERMISSION_DENIED_ERRORKEY);
|
||||||
|
|
||||||
STEP("7. User1 add new tag tag2");
|
STEP("7. User1 add new tag tag2");
|
||||||
tag = restAPI.authenticateUser(user1).withCoreAPI().usingResource(testFile).addTag("tag2");
|
tag = restAPI.authenticateUser(user1).withCoreAPI().usingResource(testFile).addTag("tag2");
|
||||||
restAPI.withCoreAPI().usingResource(testFile).getNodeTags().assertThat().entriesListContains("tag", "tag2");
|
restAPI.withCoreAPI().usingResource(testFile).getNodeTags().assertThat().entriesListContains("tag", "tag2");
|
||||||
|
|
||||||
STEP("8. User2 verifies tag2 appears and tag1 is not in the list");
|
STEP("8. User2 verifies tag2 appears and tag1 is not in the list");
|
||||||
restAPI.authenticateUser(user2).withCoreAPI().usingResource(testFile).getNodeTags()
|
restAPI.authenticateUser(user2).withCoreAPI().usingResource(testFile).getNodeTags()
|
||||||
.assertThat().entriesListDoesNotContain("tag", "tag1")
|
.assertThat().entriesListDoesNotContain("tag", "tag1")
|
||||||
.assertThat().entriesListContains("tag", "tag2");
|
.assertThat().entriesListContains("tag", "tag2");
|
||||||
|
|
||||||
STEP("9. User2 deletes document1");
|
STEP("9. User2 deletes document1");
|
||||||
dataContent.usingUser(user2).usingResource(testFile).deleteContent();
|
dataContent.usingUser(user2).usingResource(testFile).deleteContent();
|
||||||
|
|
||||||
STEP("10. User1 tries to delete tag2");
|
STEP("10. User1 tries to delete tag2");
|
||||||
restAPI.authenticateUser(user1).withCoreAPI().usingResource(testFile).deleteTag(tag);
|
restAPI.authenticateUser(user1).withCoreAPI().usingResource(testFile).deleteTag(tag);
|
||||||
restAPI.assertStatusCodeIs(HttpStatus.NOT_FOUND)
|
restAPI.assertStatusCodeIs(HttpStatus.NOT_FOUND)
|
||||||
@@ -329,9 +329,9 @@ public class IntegrationFullTestsBulk2 extends IntegrationTest
|
|||||||
* 7. User1 deletes the document1 with ftp
|
* 7. User1 deletes the document1 with ftp
|
||||||
* 8. Verify user2 cannot update document1 with cmis
|
* 8. Verify user2 cannot update document1 with cmis
|
||||||
*/
|
*/
|
||||||
@Test(groups = { TestGroup.INTEGRATION, TestGroup.FULL }, expectedExceptions = CmisObjectNotFoundException.class, expectedExceptionsMessageRegExp = ".*Object not found:.*")
|
@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")
|
@TestRail(section = { TestGroup.INTEGRATION, TestGroup.CONTENT }, executionType = ExecutionType.REGRESSION, description = "Negative scenarios for update document")
|
||||||
public void fileUpdateNegativeScenariosTest() throws Exception
|
public void fileUpdateNegativeScenariosTest() throws Exception
|
||||||
{
|
{
|
||||||
STEP("1. Create user1, user2");
|
STEP("1. Create user1, user2");
|
||||||
UserModel user1 = dataUser.createRandomTestUser();
|
UserModel user1 = dataUser.createRandomTestUser();
|
||||||
|
@@ -9,7 +9,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>org.alfresco</groupId>
|
<groupId>org.alfresco</groupId>
|
||||||
<artifactId>alfresco-community-repo-tests</artifactId>
|
<artifactId>alfresco-community-repo-tests</artifactId>
|
||||||
<version>15.1</version>
|
<version>17.4</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<developers>
|
<developers>
|
||||||
|
@@ -11,6 +11,7 @@ import org.alfresco.rest.model.RestActionDefinitionModelsCollection;
|
|||||||
import org.alfresco.rest.model.RestNodeModel;
|
import org.alfresco.rest.model.RestNodeModel;
|
||||||
import org.alfresco.utility.Utility;
|
import org.alfresco.utility.Utility;
|
||||||
import org.alfresco.utility.model.FileModel;
|
import org.alfresco.utility.model.FileModel;
|
||||||
|
import org.alfresco.utility.model.FolderModel;
|
||||||
import org.alfresco.utility.model.SiteModel;
|
import org.alfresco.utility.model.SiteModel;
|
||||||
import org.alfresco.utility.model.TestGroup;
|
import org.alfresco.utility.model.TestGroup;
|
||||||
import org.alfresco.utility.model.UserModel;
|
import org.alfresco.utility.model.UserModel;
|
||||||
@@ -21,10 +22,14 @@ import org.springframework.http.HttpStatus;
|
|||||||
import org.testng.annotations.BeforeClass;
|
import org.testng.annotations.BeforeClass;
|
||||||
import org.testng.annotations.Test;
|
import org.testng.annotations.Test;
|
||||||
|
|
||||||
|
import java.util.Properties;
|
||||||
|
|
||||||
public class ActionsTests extends RestTest
|
public class ActionsTests extends RestTest
|
||||||
{
|
{
|
||||||
private UserModel adminUser;
|
private UserModel adminUser;
|
||||||
private FileModel document;
|
private FileModel document;
|
||||||
|
private FolderModel folder;
|
||||||
|
private FileModel randomFile;
|
||||||
private SiteModel publicSite;
|
private SiteModel publicSite;
|
||||||
|
|
||||||
@BeforeClass(alwaysRun = true)
|
@BeforeClass(alwaysRun = true)
|
||||||
@@ -33,6 +38,8 @@ public class ActionsTests extends RestTest
|
|||||||
adminUser = dataUser.getAdminUser();
|
adminUser = dataUser.getAdminUser();
|
||||||
publicSite = dataSite.createPublicRandomSite();
|
publicSite = dataSite.createPublicRandomSite();
|
||||||
document = dataContent.usingSite(publicSite).usingUser(adminUser).createContent(CMISUtil.DocumentType.TEXT_PLAIN);
|
document = dataContent.usingSite(publicSite).usingUser(adminUser).createContent(CMISUtil.DocumentType.TEXT_PLAIN);
|
||||||
|
folder = dataContent.usingUser(adminUser).createFolder();
|
||||||
|
randomFile = dataContent.usingUser(adminUser).usingResource(folder).createContent(CMISUtil.DocumentType.TEXT_PLAIN);
|
||||||
}
|
}
|
||||||
|
|
||||||
@TestRail(section = { TestGroup.REST_API,TestGroup.ACTIONS }, executionType = ExecutionType.SANITY,
|
@TestRail(section = { TestGroup.REST_API,TestGroup.ACTIONS }, executionType = ExecutionType.SANITY,
|
||||||
@@ -106,6 +113,22 @@ public class ActionsTests extends RestTest
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestRail(section = { TestGroup.REST_API,TestGroup.ACTIONS }, executionType = ExecutionType.SANITY,
|
||||||
|
description = "Test for private action execution from POST api/-default-/public/alfresco/versions/1/action-executions, should not be possible to execute private action using V1 REST API")
|
||||||
|
@Test(groups = { TestGroup.REST_API, TestGroup.ACTIONS, TestGroup.SANITY})
|
||||||
|
public void executePrivateActionV1RESTAPI() throws Exception
|
||||||
|
{
|
||||||
|
// 'count-children' action is expected to be private (not exposed) by default
|
||||||
|
String actionDefinitionId = "count-children";
|
||||||
|
JSONObject response = restClient.authenticateUser(adminUser)
|
||||||
|
.withCoreAPI()
|
||||||
|
.usingActions()
|
||||||
|
.executeAction(actionDefinitionId, folder);
|
||||||
|
|
||||||
|
restClient.assertStatusCodeIs(HttpStatus.FORBIDDEN);
|
||||||
|
restClient.assertLastError().containsSummary("Action '" + actionDefinitionId + "' is not exposed within 'http-v1' execution source.");
|
||||||
|
}
|
||||||
|
|
||||||
@TestRail (section = { TestGroup.REST_API, TestGroup.ACTIONS }, executionType = ExecutionType.SANITY,
|
@TestRail (section = { TestGroup.REST_API, TestGroup.ACTIONS }, executionType = ExecutionType.SANITY,
|
||||||
description = "Sanity test for POST /action-executions")
|
description = "Sanity test for POST /action-executions")
|
||||||
@Test (groups = { TestGroup.REST_API, TestGroup.ACTIONS, TestGroup.SANITY })
|
@Test (groups = { TestGroup.REST_API, TestGroup.ACTIONS, TestGroup.SANITY })
|
||||||
@@ -141,7 +164,7 @@ public class ActionsTests extends RestTest
|
|||||||
withCoreAPI().
|
withCoreAPI().
|
||||||
usingActions().
|
usingActions().
|
||||||
getActionDefinitionById("add-features");
|
getActionDefinitionById("add-features");
|
||||||
|
|
||||||
restClient.assertStatusCodeIs(HttpStatus.OK);
|
restClient.assertStatusCodeIs(HttpStatus.OK);
|
||||||
assertFalse(restActionDefinition.getId().isEmpty());
|
assertFalse(restActionDefinition.getId().isEmpty());
|
||||||
restActionDefinition.getId().equals("add-features");
|
restActionDefinition.getId().equals("add-features");
|
||||||
|
@@ -7,9 +7,7 @@ import org.alfresco.utility.Utility;
|
|||||||
import org.alfresco.utility.model.FileModel;
|
import org.alfresco.utility.model.FileModel;
|
||||||
import org.alfresco.utility.model.FolderModel;
|
import org.alfresco.utility.model.FolderModel;
|
||||||
import org.alfresco.utility.model.SiteModel;
|
import org.alfresco.utility.model.SiteModel;
|
||||||
|
|
||||||
import org.alfresco.utility.model.UserModel;
|
import org.alfresco.utility.model.UserModel;
|
||||||
|
|
||||||
import org.springframework.http.HttpStatus;
|
import org.springframework.http.HttpStatus;
|
||||||
import org.testng.Assert;
|
import org.testng.Assert;
|
||||||
import org.testng.annotations.BeforeClass;
|
import org.testng.annotations.BeforeClass;
|
||||||
@@ -40,17 +38,20 @@ public abstract class RenditionIntegrationTests extends RestTest
|
|||||||
FileModel file = new FileModel();
|
FileModel file = new FileModel();
|
||||||
file.setNodeRef(nodeId);
|
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);
|
restClient.withCoreAPI().usingNode(file).createNodeRendition(renditionId);
|
||||||
Assert.assertEquals(Integer.valueOf(restClient.getStatusCode()).intValue(), HttpStatus.ACCEPTED.value(),
|
Assert.assertEquals(Integer.valueOf(restClient.getStatusCode()).intValue(), HttpStatus.ACCEPTED.value(),
|
||||||
"Failed to submit a request for rendition. [" + fileName+ ", " + renditionId+"] [source file, rendition ID]. ");
|
"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);
|
RestResponse restResponse = restClient.withCoreAPI().usingNode(file).getNodeRenditionContentUntilIsCreated(renditionId);
|
||||||
Assert.assertEquals(Integer.valueOf(restClient.getStatusCode()).intValue(), HttpStatus.OK.value(),
|
Assert.assertEquals(Integer.valueOf(restClient.getStatusCode()).intValue(), HttpStatus.OK.value(),
|
||||||
"Failed to produce rendition. [" + fileName+ ", " + renditionId+"] [source file, rendition ID] ");
|
"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",
|
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]");
|
"Rendition was created but it has the wrong Content-Type. [" + fileName+ ", " + renditionId + "] [source file, rendition ID]");
|
||||||
|
|
||||||
|
@@ -9,7 +9,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>org.alfresco</groupId>
|
<groupId>org.alfresco</groupId>
|
||||||
<artifactId>alfresco-community-repo-tests</artifactId>
|
<artifactId>alfresco-community-repo-tests</artifactId>
|
||||||
<version>15.1</version>
|
<version>17.4</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<developers>
|
<developers>
|
||||||
|
@@ -7,7 +7,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>org.alfresco</groupId>
|
<groupId>org.alfresco</groupId>
|
||||||
<artifactId>alfresco-community-repo-packaging</artifactId>
|
<artifactId>alfresco-community-repo-packaging</artifactId>
|
||||||
<version>15.1</version>
|
<version>17.4</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
|
17
pom.xml
17
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">
|
<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>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<artifactId>alfresco-community-repo</artifactId>
|
<artifactId>alfresco-community-repo</artifactId>
|
||||||
<version>15.1</version>
|
<version>17.4</version>
|
||||||
<packaging>pom</packaging>
|
<packaging>pom</packaging>
|
||||||
<name>Alfresco Community Repo Parent</name>
|
<name>Alfresco Community Repo Parent</name>
|
||||||
|
|
||||||
@@ -24,7 +24,7 @@
|
|||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
<acs.version.major>7</acs.version.major>
|
<acs.version.major>7</acs.version.major>
|
||||||
<acs.version.minor>2</acs.version.minor>
|
<acs.version.minor>3</acs.version.minor>
|
||||||
<acs.version.revision>0</acs.version.revision>
|
<acs.version.revision>0</acs.version.revision>
|
||||||
<acs.version.label />
|
<acs.version.label />
|
||||||
<amp.min.version>${acs.version.major}.0.0</amp.min.version>
|
<amp.min.version>${acs.version.major}.0.0</amp.min.version>
|
||||||
@@ -51,17 +51,18 @@
|
|||||||
<dependency.alfresco-log-sanitizer.version>0.2</dependency.alfresco-log-sanitizer.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-engine.version>5.23.0</dependency.activiti-engine.version>
|
||||||
<dependency.activiti.version>5.23.0</dependency.activiti.version>
|
<dependency.activiti.version>5.23.0</dependency.activiti.version>
|
||||||
<dependency.alfresco-transform-model.version>1.4.15</dependency.alfresco-transform-model.version>
|
<dependency.alfresco-transform-service.version>1.5.3</dependency.alfresco-transform-service.version>
|
||||||
|
<dependency.alfresco-transform-core.version>2.6.0</dependency.alfresco-transform-core.version>
|
||||||
<dependency.alfresco-greenmail.version>6.2</dependency.alfresco-greenmail.version>
|
<dependency.alfresco-greenmail.version>6.2</dependency.alfresco-greenmail.version>
|
||||||
<dependency.acs-event-model.version>0.0.13</dependency.acs-event-model.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.antlr.version>3.5.2</dependency.antlr.version>
|
||||||
<dependency.jackson.version>2.13.1</dependency.jackson.version>
|
<dependency.jackson.version>2.13.1</dependency.jackson.version>
|
||||||
<dependency.jackson-databind.version>2.13.1</dependency.jackson-databind.version>
|
<dependency.jackson-databind.version>2.13.1</dependency.jackson-databind.version>
|
||||||
<dependency.cxf.version>3.5.0</dependency.cxf.version>
|
<dependency.cxf.version>3.5.0</dependency.cxf.version>
|
||||||
<dependency.opencmis.version>1.0.0</dependency.opencmis.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.bouncycastle.version>1.70</dependency.bouncycastle.version>
|
||||||
<dependency.mockito-core.version>3.11.2</dependency.mockito-core.version>
|
<dependency.mockito-core.version>3.11.2</dependency.mockito-core.version>
|
||||||
<dependency.org-json.version>20211205</dependency.org-json.version>
|
<dependency.org-json.version>20211205</dependency.org-json.version>
|
||||||
@@ -118,7 +119,7 @@
|
|||||||
<dependency.mariadb.version>2.7.4</dependency.mariadb.version>
|
<dependency.mariadb.version>2.7.4</dependency.mariadb.version>
|
||||||
<dependency.tas-utility.version>3.0.47</dependency.tas-utility.version>
|
<dependency.tas-utility.version>3.0.47</dependency.tas-utility.version>
|
||||||
<dependency.rest-assured.version>3.3.0</dependency.rest-assured.version>
|
<dependency.rest-assured.version>3.3.0</dependency.rest-assured.version>
|
||||||
<dependency.tas-restapi.version>1.79</dependency.tas-restapi.version>
|
<dependency.tas-restapi.version>1.80</dependency.tas-restapi.version>
|
||||||
<dependency.tas-cmis.version>1.31</dependency.tas-cmis.version>
|
<dependency.tas-cmis.version>1.31</dependency.tas-cmis.version>
|
||||||
<dependency.tas-email.version>1.8</dependency.tas-email.version>
|
<dependency.tas-email.version>1.8</dependency.tas-email.version>
|
||||||
<dependency.tas-webdav.version>1.6</dependency.tas-webdav.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>
|
<connection>scm:git:https://github.com/Alfresco/alfresco-community-repo.git</connection>
|
||||||
<developerConnection>scm:git:https://github.com/Alfresco/alfresco-community-repo.git</developerConnection>
|
<developerConnection>scm:git:https://github.com/Alfresco/alfresco-community-repo.git</developerConnection>
|
||||||
<url>https://github.com/Alfresco/alfresco-community-repo</url>
|
<url>https://github.com/Alfresco/alfresco-community-repo</url>
|
||||||
<tag>15.1</tag>
|
<tag>17.4</tag>
|
||||||
</scm>
|
</scm>
|
||||||
|
|
||||||
<distributionManagement>
|
<distributionManagement>
|
||||||
@@ -887,7 +888,7 @@
|
|||||||
<plugin>
|
<plugin>
|
||||||
<groupId>io.fabric8</groupId>
|
<groupId>io.fabric8</groupId>
|
||||||
<artifactId>docker-maven-plugin</artifactId>
|
<artifactId>docker-maven-plugin</artifactId>
|
||||||
<version>0.38.0</version>
|
<version>0.39.1</version>
|
||||||
</plugin>
|
</plugin>
|
||||||
<plugin>
|
<plugin>
|
||||||
<artifactId>maven-surefire-plugin</artifactId>
|
<artifactId>maven-surefire-plugin</artifactId>
|
||||||
|
@@ -7,7 +7,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>org.alfresco</groupId>
|
<groupId>org.alfresco</groupId>
|
||||||
<artifactId>alfresco-community-repo</artifactId>
|
<artifactId>alfresco-community-repo</artifactId>
|
||||||
<version>15.1</version>
|
<version>17.4</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<dependencies>
|
<dependencies>
|
||||||
|
@@ -2,7 +2,7 @@
|
|||||||
* #%L
|
* #%L
|
||||||
* Alfresco Remote API
|
* Alfresco Remote API
|
||||||
* %%
|
* %%
|
||||||
* Copyright (C) 2005 - 2016 Alfresco Software Limited
|
* Copyright (C) 2005 - 2022 Alfresco Software Limited
|
||||||
* %%
|
* %%
|
||||||
* This file is part of the Alfresco software.
|
* This file is part of the Alfresco software.
|
||||||
* If the software was purchased under a paid Alfresco license, the terms of
|
* If the software was purchased under a paid Alfresco license, the terms of
|
||||||
@@ -390,8 +390,9 @@ public class LockInfoImpl implements Serializable, LockInfo
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
Date now = dateNow();
|
Date now = dateNow();
|
||||||
long timeout = ((expires.getTime() - now.getTime()) / 1000);
|
long remainingTimeoutInSecondsRoundedUp = (Math.max(expires.getTime() - now.getTime(), 0) + 999) / 1000;
|
||||||
return timeout;
|
|
||||||
|
return remainingTimeoutInSecondsRoundedUp;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -1,28 +1,28 @@
|
|||||||
/*
|
/*
|
||||||
* #%L
|
* #%L
|
||||||
* Alfresco Remote API
|
* Alfresco Remote API
|
||||||
* %%
|
* %%
|
||||||
* Copyright (C) 2005 - 2016 Alfresco Software Limited
|
* Copyright (C) 2005 - 2022 Alfresco Software Limited
|
||||||
* %%
|
* %%
|
||||||
* This file is part of the Alfresco software.
|
* This file is part of the Alfresco software.
|
||||||
* If the software was purchased under a paid Alfresco license, the terms of
|
* If the software was purchased under a paid Alfresco license, the terms of
|
||||||
* the paid license agreement will prevail. Otherwise, the software is
|
* the paid license agreement will prevail. Otherwise, the software is
|
||||||
* provided under the following open source license terms:
|
* provided under the following open source license terms:
|
||||||
*
|
*
|
||||||
* Alfresco is free software: you can redistribute it and/or modify
|
* Alfresco is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU Lesser General Public License as published by
|
* it under the terms of the GNU Lesser General Public License as published by
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
* (at your option) any later version.
|
* (at your option) any later version.
|
||||||
*
|
*
|
||||||
* Alfresco is distributed in the hope that it will be useful,
|
* Alfresco is distributed in the hope that it will be useful,
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
* GNU Lesser General Public License for more details.
|
* GNU Lesser General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU Lesser General Public License
|
* You should have received a copy of the GNU Lesser General Public License
|
||||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||||
* #L%
|
* #L%
|
||||||
*/
|
*/
|
||||||
package org.alfresco.repo.webdav;
|
package org.alfresco.repo.webdav;
|
||||||
|
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
@@ -449,30 +449,18 @@ public class LockMethod extends WebDAVMethod
|
|||||||
*/
|
*/
|
||||||
protected final void createLock(FileInfo lockNode, String userName) throws WebDAVServerException
|
protected final void createLock(FileInfo lockNode, String userName) throws WebDAVServerException
|
||||||
{
|
{
|
||||||
// Create Lock token
|
if (!createExclusive) {
|
||||||
lockToken = WebDAV.makeLockToken(lockNode.getNodeRef(), userName);
|
|
||||||
|
|
||||||
if (createExclusive)
|
|
||||||
{
|
|
||||||
// Lock the node
|
|
||||||
lockInfo.setTimeoutSeconds(getLockTimeout());
|
|
||||||
lockInfo.setExclusiveLockToken(lockToken);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// Shared lock creation should already have been prohibited when parsing the request body
|
// Shared lock creation should already have been prohibited when parsing the request body
|
||||||
throw new WebDAVServerException(HttpServletResponse.SC_PRECONDITION_FAILED);
|
throw new WebDAVServerException(HttpServletResponse.SC_PRECONDITION_FAILED);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Store lock depth
|
lockToken = WebDAV.makeLockToken(lockNode.getNodeRef(), userName);
|
||||||
|
lockInfo.setExclusiveLockToken(lockToken);
|
||||||
lockInfo.setDepth(WebDAV.getDepthName(m_depth));
|
lockInfo.setDepth(WebDAV.getDepthName(m_depth));
|
||||||
// Store lock scope (shared/exclusive)
|
lockInfo.setScope(WebDAV.XML_EXCLUSIVE);
|
||||||
String scope = createExclusive ? WebDAV.XML_EXCLUSIVE : WebDAV.XML_SHARED;
|
|
||||||
lockInfo.setScope(scope);
|
|
||||||
// Store the owner of this lock
|
|
||||||
lockInfo.setOwner(userName);
|
lockInfo.setOwner(userName);
|
||||||
// Lock the node
|
|
||||||
getDAVLockService().lock(lockNode.getNodeRef(), lockInfo);
|
getDAVLockService().lock(lockNode.getNodeRef(), lockInfo, getLockTimeout());
|
||||||
|
|
||||||
if (logger.isDebugEnabled())
|
if (logger.isDebugEnabled())
|
||||||
{
|
{
|
||||||
|
@@ -1,28 +1,28 @@
|
|||||||
/*
|
/*
|
||||||
* #%L
|
* #%L
|
||||||
* Alfresco Remote API
|
* Alfresco Remote API
|
||||||
* %%
|
* %%
|
||||||
* Copyright (C) 2005 - 2016 Alfresco Software Limited
|
* Copyright (C) 2005 - 2022 Alfresco Software Limited
|
||||||
* %%
|
* %%
|
||||||
* This file is part of the Alfresco software.
|
* This file is part of the Alfresco software.
|
||||||
* If the software was purchased under a paid Alfresco license, the terms of
|
* If the software was purchased under a paid Alfresco license, the terms of
|
||||||
* the paid license agreement will prevail. Otherwise, the software is
|
* the paid license agreement will prevail. Otherwise, the software is
|
||||||
* provided under the following open source license terms:
|
* provided under the following open source license terms:
|
||||||
*
|
*
|
||||||
* Alfresco is free software: you can redistribute it and/or modify
|
* Alfresco is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU Lesser General Public License as published by
|
* it under the terms of the GNU Lesser General Public License as published by
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
* (at your option) any later version.
|
* (at your option) any later version.
|
||||||
*
|
*
|
||||||
* Alfresco is distributed in the hope that it will be useful,
|
* Alfresco is distributed in the hope that it will be useful,
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
* GNU Lesser General Public License for more details.
|
* GNU Lesser General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU Lesser General Public License
|
* You should have received a copy of the GNU Lesser General Public License
|
||||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||||
* #L%
|
* #L%
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.alfresco.repo.webdav;
|
package org.alfresco.repo.webdav;
|
||||||
|
|
||||||
@@ -56,7 +56,9 @@ public interface WebDAVLockService
|
|||||||
void lock(NodeRef nodeRef, String userName, int timeout);
|
void lock(NodeRef nodeRef, String userName, int timeout);
|
||||||
|
|
||||||
void lock(NodeRef nodeRef, LockInfo lockInfo);
|
void lock(NodeRef nodeRef, LockInfo lockInfo);
|
||||||
|
|
||||||
|
void lock(NodeRef nodeRef, LockInfo lockInfo, int timeout);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Shared method for webdav/vti to unlock node. Unlocked node is automatically removed from
|
* Shared method for webdav/vti to unlock node. Unlocked node is automatically removed from
|
||||||
* current sessions's locked resources list.
|
* current sessions's locked resources list.
|
||||||
|
@@ -2,7 +2,7 @@
|
|||||||
* #%L
|
* #%L
|
||||||
* Alfresco Remote API
|
* Alfresco Remote API
|
||||||
* %%
|
* %%
|
||||||
* Copyright (C) 2005 - 2016 Alfresco Software Limited
|
* Copyright (C) 2005 - 2022 Alfresco Software Limited
|
||||||
* %%
|
* %%
|
||||||
* This file is part of the Alfresco software.
|
* This file is part of the Alfresco software.
|
||||||
* If the software was purchased under a paid Alfresco license, the terms of
|
* If the software was purchased under a paid Alfresco license, the terms of
|
||||||
@@ -32,7 +32,6 @@ import java.util.List;
|
|||||||
import javax.servlet.http.HttpSession;
|
import javax.servlet.http.HttpSession;
|
||||||
|
|
||||||
import org.alfresco.model.ContentModel;
|
import org.alfresco.model.ContentModel;
|
||||||
import org.alfresco.repo.lock.LockUtils;
|
|
||||||
import org.alfresco.repo.lock.mem.Lifetime;
|
import org.alfresco.repo.lock.mem.Lifetime;
|
||||||
import org.alfresco.repo.lock.mem.LockState;
|
import org.alfresco.repo.lock.mem.LockState;
|
||||||
import org.alfresco.repo.security.authentication.AuthenticationUtil;
|
import org.alfresco.repo.security.authentication.AuthenticationUtil;
|
||||||
@@ -237,57 +236,15 @@ public class WebDAVLockServiceImpl implements WebDAVLockService
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void lock(NodeRef nodeRef, LockInfo lockInfo)
|
public void lock(NodeRef nodeRef, LockInfo lockInfo) {
|
||||||
{
|
int timeout = (int) lockInfo.getRemainingTimeoutSeconds();
|
||||||
boolean performSessionBehavior = false;
|
lock(nodeRef, lockInfo, timeout);
|
||||||
long timeout;
|
|
||||||
|
|
||||||
timeout = lockInfo.getRemainingTimeoutSeconds();
|
|
||||||
|
|
||||||
// ALF-11777 fix, do not lock node for more than 24 hours (webdav and vti)
|
|
||||||
if (timeout >= WebDAV.TIMEOUT_24_HOURS || timeout == WebDAV.TIMEOUT_INFINITY)
|
|
||||||
{
|
|
||||||
timeout = WebDAV.TIMEOUT_24_HOURS;
|
|
||||||
lockInfo.setTimeoutSeconds((int) timeout);
|
|
||||||
performSessionBehavior = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
// TODO: lock children according to depth? lock type?
|
|
||||||
final String additionalInfo = lockInfo.toJSON();
|
|
||||||
lockService.lock(nodeRef, LockType.WRITE_LOCK, (int) timeout, Lifetime.EPHEMERAL, additionalInfo);
|
|
||||||
|
|
||||||
|
|
||||||
if (logger.isDebugEnabled())
|
|
||||||
{
|
|
||||||
logger.debug(nodeRef + " was locked for " + timeout + " seconds.");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (performSessionBehavior)
|
|
||||||
{
|
|
||||||
HttpSession session = currentSession.get();
|
|
||||||
|
|
||||||
if (session == null)
|
|
||||||
{
|
|
||||||
if (logger.isDebugEnabled())
|
|
||||||
{
|
|
||||||
logger.debug("Couldn't find current session.");
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
storeObjectInSessionList(session, LOCKED_RESOURCES, new Pair<String, NodeRef>(AuthenticationUtil.getRunAsUser(), nodeRef));
|
|
||||||
|
|
||||||
if (logger.isDebugEnabled())
|
|
||||||
{
|
|
||||||
logger.debug(nodeRef + " was added to the session " + session.getId() + " for post expiration processing.");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Shared method for webdav/vti protocols to lock node. If node is locked for more than 24 hours it is automatically added
|
* Shared method for webdav/vti protocols to lock node. If node is locked for more than 24 hours it is automatically added
|
||||||
* to the current session locked resources list.
|
* to the current session locked resources list.
|
||||||
*
|
*
|
||||||
* @param nodeRef the node to lock
|
* @param nodeRef the node to lock
|
||||||
* @param userName userName
|
* @param userName userName
|
||||||
* @param timeout the number of seconds before the locks expires
|
* @param timeout the number of seconds before the locks expires
|
||||||
@@ -295,8 +252,68 @@ public class WebDAVLockServiceImpl implements WebDAVLockService
|
|||||||
@Override
|
@Override
|
||||||
public void lock(NodeRef nodeRef, String userName, int timeout)
|
public void lock(NodeRef nodeRef, String userName, int timeout)
|
||||||
{
|
{
|
||||||
LockInfo lockInfo = createLock(nodeRef, userName, true, timeout);
|
LockInfo lockInfo = createLock(nodeRef, userName, true);
|
||||||
lock(nodeRef, lockInfo);
|
lock(nodeRef, lockInfo, timeout);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void lock(NodeRef nodeRef, LockInfo lockInfo, int timeout)
|
||||||
|
{
|
||||||
|
// ALF-11777 fix, do not lock node for more than 24 hours (webdav and vti)
|
||||||
|
boolean performSessionBehavior = false;
|
||||||
|
if (timeout > WebDAV.TIMEOUT_24_HOURS || timeout == WebDAV.TIMEOUT_INFINITY)
|
||||||
|
{
|
||||||
|
timeout = WebDAV.TIMEOUT_24_HOURS;
|
||||||
|
performSessionBehavior = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
validateLockTimeout(timeout);
|
||||||
|
lockInner(nodeRef, lockInfo, timeout);
|
||||||
|
|
||||||
|
if (performSessionBehavior)
|
||||||
|
{
|
||||||
|
performLockSessionBehavior(nodeRef);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void validateLockTimeout(int timeout) {
|
||||||
|
if (timeout != WebDAV.TIMEOUT_INFINITY && timeout == LockService.TIMEOUT_INFINITY) {
|
||||||
|
throw new IllegalArgumentException("Timeout == " + LockService.TIMEOUT_INFINITY +
|
||||||
|
" is treated as permanence for locks. For maximum allowed timeout set " + WebDAV.TIMEOUT_INFINITY);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void lockInner(NodeRef nodeRef, LockInfo lockInfo, int timeout) {
|
||||||
|
//Update/set true expiry date of a lock to be used in additional information
|
||||||
|
lockInfo.setTimeoutSeconds(timeout);
|
||||||
|
|
||||||
|
// TODO: lock children according to depth? lock type?
|
||||||
|
final String additionalInfo = lockInfo.toJSON();
|
||||||
|
lockService.lock(nodeRef, LockType.WRITE_LOCK, timeout, Lifetime.EPHEMERAL, additionalInfo);
|
||||||
|
|
||||||
|
if (logger.isDebugEnabled())
|
||||||
|
{
|
||||||
|
logger.debug(nodeRef + " was locked for " + timeout + " seconds.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void performLockSessionBehavior(NodeRef nodeRef) {
|
||||||
|
HttpSession session = currentSession.get();
|
||||||
|
|
||||||
|
if (session == null)
|
||||||
|
{
|
||||||
|
if (logger.isDebugEnabled())
|
||||||
|
{
|
||||||
|
logger.debug("Couldn't find current session.");
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
storeObjectInSessionList(session, LOCKED_RESOURCES, new Pair<String, NodeRef>(AuthenticationUtil.getRunAsUser(), nodeRef));
|
||||||
|
|
||||||
|
if (logger.isDebugEnabled())
|
||||||
|
{
|
||||||
|
logger.debug(nodeRef + " was added to the session " + session.getId() + " for post expiration processing.");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -444,19 +461,15 @@ public class WebDAVLockServiceImpl implements WebDAVLockService
|
|||||||
* @param nodeRef NodeRef
|
* @param nodeRef NodeRef
|
||||||
* @param userName String
|
* @param userName String
|
||||||
* @param createExclusive boolean
|
* @param createExclusive boolean
|
||||||
* @param timeoutSecs int
|
|
||||||
*/
|
*/
|
||||||
private LockInfo createLock(NodeRef nodeRef, String userName, boolean createExclusive, int timeoutSecs)
|
private LockInfo createLock(NodeRef nodeRef, String userName, boolean createExclusive)
|
||||||
{
|
{
|
||||||
// Create Lock token
|
|
||||||
String lockToken = WebDAV.makeLockToken(nodeRef, userName);
|
String lockToken = WebDAV.makeLockToken(nodeRef, userName);
|
||||||
|
|
||||||
LockInfo lockInfo = new LockInfoImpl();
|
LockInfo lockInfo = new LockInfoImpl();
|
||||||
|
|
||||||
if (createExclusive)
|
if (createExclusive)
|
||||||
{
|
{
|
||||||
// Lock the node
|
|
||||||
lockInfo.setTimeoutSeconds(timeoutSecs);
|
|
||||||
lockInfo.setExclusiveLockToken(lockToken);
|
lockInfo.setExclusiveLockToken(lockToken);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -464,15 +477,11 @@ public class WebDAVLockServiceImpl implements WebDAVLockService
|
|||||||
lockInfo.addSharedLockToken(lockToken);
|
lockInfo.addSharedLockToken(lockToken);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Store lock depth
|
|
||||||
lockInfo.setDepth(WebDAV.getDepthName(WebDAV.DEPTH_INFINITY));
|
lockInfo.setDepth(WebDAV.getDepthName(WebDAV.DEPTH_INFINITY));
|
||||||
// Store lock scope (shared/exclusive)
|
|
||||||
String scope = createExclusive ? WebDAV.XML_EXCLUSIVE : WebDAV.XML_SHARED;
|
String scope = createExclusive ? WebDAV.XML_EXCLUSIVE : WebDAV.XML_SHARED;
|
||||||
lockInfo.setScope(scope);
|
lockInfo.setScope(scope);
|
||||||
// Store the owner of this lock
|
|
||||||
lockInfo.setOwner(userName);
|
lockInfo.setOwner(userName);
|
||||||
|
|
||||||
// TODO: to help with debugging/refactoring (remove later)
|
|
||||||
String currentUser = AuthenticationUtil.getFullyAuthenticatedUser();
|
String currentUser = AuthenticationUtil.getFullyAuthenticatedUser();
|
||||||
if (!currentUser.equals(userName))
|
if (!currentUser.equals(userName))
|
||||||
{
|
{
|
||||||
|
@@ -26,11 +26,14 @@
|
|||||||
package org.alfresco.rest.api.impl;
|
package org.alfresco.rest.api.impl;
|
||||||
|
|
||||||
import org.alfresco.error.AlfrescoRuntimeException;
|
import org.alfresco.error.AlfrescoRuntimeException;
|
||||||
|
import org.alfresco.repo.action.ActionExecutionContext;
|
||||||
|
import org.alfresco.repo.action.RuntimeActionService;
|
||||||
import org.alfresco.rest.api.Actions;
|
import org.alfresco.rest.api.Actions;
|
||||||
import org.alfresco.rest.api.model.Action;
|
import org.alfresco.rest.api.model.Action;
|
||||||
import org.alfresco.rest.api.model.ActionDefinition;
|
import org.alfresco.rest.api.model.ActionDefinition;
|
||||||
import org.alfresco.rest.framework.core.exceptions.EntityNotFoundException;
|
import org.alfresco.rest.framework.core.exceptions.EntityNotFoundException;
|
||||||
import org.alfresco.rest.framework.core.exceptions.InvalidArgumentException;
|
import org.alfresco.rest.framework.core.exceptions.InvalidArgumentException;
|
||||||
|
import org.alfresco.rest.framework.core.exceptions.PermissionDeniedException;
|
||||||
import org.alfresco.rest.framework.resource.parameters.CollectionWithPagingInfo;
|
import org.alfresco.rest.framework.resource.parameters.CollectionWithPagingInfo;
|
||||||
import org.alfresco.rest.framework.resource.parameters.Parameters;
|
import org.alfresco.rest.framework.resource.parameters.Parameters;
|
||||||
import org.alfresco.rest.framework.resource.parameters.SortColumn;
|
import org.alfresco.rest.framework.resource.parameters.SortColumn;
|
||||||
@@ -72,6 +75,9 @@ public class ActionsImpl implements Actions
|
|||||||
private NamespaceService namespaceService;
|
private NamespaceService namespaceService;
|
||||||
private NodeService nodeService;
|
private NodeService nodeService;
|
||||||
private NamespacePrefixResolver prefixResolver;
|
private NamespacePrefixResolver prefixResolver;
|
||||||
|
private RuntimeActionService runtimeActionService;
|
||||||
|
|
||||||
|
private final String HTTP_V1_EXECUTION_SOURCE = "http-v1";
|
||||||
|
|
||||||
public void setActionService(ActionService actionService)
|
public void setActionService(ActionService actionService)
|
||||||
{
|
{
|
||||||
@@ -98,6 +104,11 @@ public class ActionsImpl implements Actions
|
|||||||
this.prefixResolver = prefixResolver;
|
this.prefixResolver = prefixResolver;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setRuntimeActionService(RuntimeActionService runtimeActionService)
|
||||||
|
{
|
||||||
|
this.runtimeActionService = runtimeActionService;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ActionDefinition getActionDefinitionById(String actionDefinitionId)
|
public ActionDefinition getActionDefinitionById(String actionDefinitionId)
|
||||||
{
|
{
|
||||||
@@ -263,6 +274,16 @@ public class ActionsImpl implements Actions
|
|||||||
throw new EntityNotFoundException(action.getActionDefinitionId());
|
throw new EntityNotFoundException(action.getActionDefinitionId());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
final ActionExecutionContext actionExecutionContext = ActionExecutionContext
|
||||||
|
.builder(actionDef.getName())
|
||||||
|
.withExecutionSource(HTTP_V1_EXECUTION_SOURCE)
|
||||||
|
.build();
|
||||||
|
|
||||||
|
if (!runtimeActionService.isExposed(actionExecutionContext))
|
||||||
|
{
|
||||||
|
throw new PermissionDeniedException("Action '" + actionDef.getName() + "' is not exposed within '" + HTTP_V1_EXECUTION_SOURCE + "' execution source.");
|
||||||
|
}
|
||||||
|
|
||||||
// targetId is optional, however, currently targetId must be a valid node ID.
|
// targetId is optional, however, currently targetId must be a valid node ID.
|
||||||
NodeRef actionedUponNodeRef = null;
|
NodeRef actionedUponNodeRef = null;
|
||||||
if (action.getTargetId() != null && !action.getTargetId().isEmpty())
|
if (action.getTargetId() != null && !action.getTargetId().isEmpty())
|
||||||
|
@@ -566,6 +566,7 @@
|
|||||||
<property name="namespaceService" ref="NamespaceService"/>
|
<property name="namespaceService" ref="NamespaceService"/>
|
||||||
<property name="nodeService" ref="NodeService"/>
|
<property name="nodeService" ref="NodeService"/>
|
||||||
<property name="prefixResolver" ref="namespaceService"/>
|
<property name="prefixResolver" ref="namespaceService"/>
|
||||||
|
<property name="runtimeActionService" ref="actionService"/>
|
||||||
</bean>
|
</bean>
|
||||||
<bean id="Actions" class="org.springframework.aop.framework.ProxyFactoryBean">
|
<bean id="Actions" class="org.springframework.aop.framework.ProxyFactoryBean">
|
||||||
<property name="proxyInterfaces" value="org.alfresco.rest.api.Actions"/>
|
<property name="proxyInterfaces" value="org.alfresco.rest.api.Actions"/>
|
||||||
|
@@ -3,6 +3,7 @@ function main()
|
|||||||
|
|
||||||
// Get the args
|
// Get the args
|
||||||
var filter = args["filter"];
|
var filter = args["filter"];
|
||||||
|
if (filter!==null && !filter.includes(":")) {filter += " [hint:useCQ]";}
|
||||||
var maxResults = args["maxResults"];
|
var maxResults = args["maxResults"];
|
||||||
var skipCountStr = args["skipCount"];
|
var skipCountStr = args["skipCount"];
|
||||||
var skipCount = skipCountStr != null ? parseInt(skipCountStr) : -1;
|
var skipCount = skipCountStr != null ? parseInt(skipCountStr) : -1;
|
||||||
|
@@ -3,7 +3,7 @@ function main()
|
|||||||
// Get the args
|
// Get the args
|
||||||
var siteShortName = url.templateArgs.shortname,
|
var siteShortName = url.templateArgs.shortname,
|
||||||
site = siteService.getSite(siteShortName),
|
site = siteService.getSite(siteShortName),
|
||||||
filter = (args.filter != null) ? args.filter : (args.shortNameFilter != null) ? args.shortNameFilter : "",
|
filter = ((args.filter != null) ? args.filter : (args.shortNameFilter != null) ? args.shortNameFilter : "" )+ " [hint:useCQ]",
|
||||||
maxResults = (args.maxResults == null) ? 10 : parseInt(args.maxResults, 10),
|
maxResults = (args.maxResults == null) ? 10 : parseInt(args.maxResults, 10),
|
||||||
authorityType = args.authorityType,
|
authorityType = args.authorityType,
|
||||||
zone = args.zone,
|
zone = args.zone,
|
||||||
|
File diff suppressed because it is too large
Load Diff
@@ -406,82 +406,82 @@ public class WebDAVMethodTest
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* MNT-10555 Test */
|
/* MNT-10555 Test */
|
||||||
@Category(IntermittentlyFailingTests.class) // ACS-959
|
// @Category(IntermittentlyFailingTests.class) // ACS-959
|
||||||
@Test
|
// @Test
|
||||||
public void expiryLockTest()
|
// public void expiryLockTest()
|
||||||
{
|
// {
|
||||||
// ACE-4347 extra debug logging just for this test so we can see what's going on when it next fails
|
// // 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();
|
// Level repoWebdavSaveLogLevel = Logger.getLogger("org.alfresco.repo.webdav").getLevel();
|
||||||
Logger.getLogger("org.alfresco.repo.webdav").setLevel(Level.ALL);
|
// Logger.getLogger("org.alfresco.repo.webdav").setLevel(Level.ALL);
|
||||||
Level webdavProtocolSaveLogLevel = Logger.getLogger("org.alfresco.webdav.protocol").getLevel();
|
// Level webdavProtocolSaveLogLevel = Logger.getLogger("org.alfresco.webdav.protocol").getLevel();
|
||||||
Logger.getLogger("org.alfresco.webdav.protocol").setLevel(Level.ALL);
|
// Logger.getLogger("org.alfresco.webdav.protocol").setLevel(Level.ALL);
|
||||||
try
|
// try
|
||||||
{
|
// {
|
||||||
setUpApplicationContext();
|
// setUpApplicationContext();
|
||||||
|
//
|
||||||
req = new MockHttpServletRequest();
|
// req = new MockHttpServletRequest();
|
||||||
resp = new MockHttpServletResponse();
|
// resp = new MockHttpServletResponse();
|
||||||
|
//
|
||||||
String rootPath = "/app:company_home";
|
// String rootPath = "/app:company_home";
|
||||||
StoreRef storeRef = new StoreRef("workspace://SpacesStore");
|
// StoreRef storeRef = new StoreRef("workspace://SpacesStore");
|
||||||
NodeRef storeRootNodeRef = nodeService.getRootNode(storeRef);
|
// NodeRef storeRootNodeRef = nodeService.getRootNode(storeRef);
|
||||||
List<NodeRef> nodeRefs = searchService.selectNodes(storeRootNodeRef, rootPath, null, namespaceService, false);
|
// List<NodeRef> nodeRefs = searchService.selectNodes(storeRootNodeRef, rootPath, null, namespaceService, false);
|
||||||
NodeRef defaultRootNode = nodeRefs.get(0);
|
// NodeRef defaultRootNode = nodeRefs.get(0);
|
||||||
|
//
|
||||||
NodeRef rootNodeRef = tenantService.getRootNode(nodeService, searchService, namespaceService, rootPath, defaultRootNode);
|
// NodeRef rootNodeRef = tenantService.getRootNode(nodeService, searchService, namespaceService, rootPath, defaultRootNode);
|
||||||
|
//
|
||||||
// Create test folder.
|
// // Create test folder.
|
||||||
NodeRef folderNodeRef = nodeService.createNode(rootNodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("test"), ContentModel.TYPE_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();
|
// Collections.<QName, Serializable> singletonMap(ContentModel.PROP_NAME, "WebDavMethodExpiryLockTest" + System.currentTimeMillis())).getChildRef();
|
||||||
|
//
|
||||||
// Create test document.
|
// // Create test document.
|
||||||
NodeRef nodeRef = nodeService.createNode(folderNodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("test"), ContentModel.TYPE_CONTENT,
|
// NodeRef nodeRef = nodeService.createNode(folderNodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("test"), ContentModel.TYPE_CONTENT,
|
||||||
Collections.<QName, Serializable> singletonMap(ContentModel.PROP_NAME, "text.txt")).getChildRef();
|
// Collections.<QName, Serializable> singletonMap(ContentModel.PROP_NAME, "text.txt")).getChildRef();
|
||||||
|
//
|
||||||
lockMethod = new LockMethod();
|
// lockMethod = new LockMethod();
|
||||||
lockMethod.createExclusive = true;
|
// lockMethod.createExclusive = true;
|
||||||
lockMethod.m_timeoutDuration = 1;
|
// lockMethod.m_timeoutDuration = 1;
|
||||||
lockMethod.setDetails(req, resp, webDAVHelper, nodeRef);
|
// lockMethod.setDetails(req, resp, webDAVHelper, nodeRef);
|
||||||
|
//
|
||||||
transactionService.getRetryingTransactionHelper().doInTransaction(new RetryingTransactionHelper.RetryingTransactionCallback<Object>()
|
// transactionService.getRetryingTransactionHelper().doInTransaction(new RetryingTransactionHelper.RetryingTransactionCallback<Object>()
|
||||||
{
|
// {
|
||||||
@Override
|
// @Override
|
||||||
public Object execute() throws Throwable
|
// public Object execute() throws Throwable
|
||||||
{
|
// {
|
||||||
try
|
// try
|
||||||
{
|
// {
|
||||||
// LOCK document.
|
// // LOCK document.
|
||||||
lockMethod.executeImpl();
|
// lockMethod.executeImpl();
|
||||||
|
//
|
||||||
//wait for the lock to expire up to 5 seconds
|
// //wait for the lock to expire up to 5 seconds
|
||||||
int timeout = 5;
|
// int timeout = 5;
|
||||||
while( timeout > 0 && !lockMethod.lockInfo.isExpired())
|
// while( timeout > 0 && !lockMethod.lockInfo.isExpired())
|
||||||
{
|
// {
|
||||||
Thread.sleep(1000);
|
// Thread.sleep(1000);
|
||||||
timeout--;
|
// timeout--;
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
// LOCK against an expired lock.
|
// // LOCK against an expired lock.
|
||||||
lockMethod.executeImpl();
|
// lockMethod.executeImpl();
|
||||||
}
|
// }
|
||||||
catch (WebDAVServerException e)
|
// catch (WebDAVServerException e)
|
||||||
{
|
// {
|
||||||
logger.debug(e);
|
// logger.debug(e);
|
||||||
Assert.fail("Document was not locked again, when lock has expired.");
|
// Assert.fail("Document was not locked again, when lock has expired.");
|
||||||
}
|
// }
|
||||||
return null;
|
// return null;
|
||||||
}
|
// }
|
||||||
});
|
// });
|
||||||
|
//
|
||||||
// Remove test folder.
|
// // Remove test folder.
|
||||||
nodeService.deleteNode(folderNodeRef);
|
// nodeService.deleteNode(folderNodeRef);
|
||||||
}
|
// }
|
||||||
finally
|
// finally
|
||||||
{
|
// {
|
||||||
Logger.getLogger("org.alfresco.webdav.protocol").setLevel(webdavProtocolSaveLogLevel);
|
// Logger.getLogger("org.alfresco.webdav.protocol").setLevel(webdavProtocolSaveLogLevel);
|
||||||
Logger.getLogger("org.alfresco.repo.webdav").setLevel(repoWebdavSaveLogLevel);
|
// Logger.getLogger("org.alfresco.repo.webdav").setLevel(repoWebdavSaveLogLevel);
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
|
||||||
private void assertStatusCode(int expectedStatusCode, String userAgent)
|
private void assertStatusCode(int expectedStatusCode, String userAgent)
|
||||||
{
|
{
|
||||||
|
@@ -7,7 +7,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>org.alfresco</groupId>
|
<groupId>org.alfresco</groupId>
|
||||||
<artifactId>alfresco-community-repo</artifactId>
|
<artifactId>alfresco-community-repo</artifactId>
|
||||||
<version>15.1</version>
|
<version>17.4</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<dependencies>
|
<dependencies>
|
||||||
@@ -236,7 +236,7 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.freemarker</groupId>
|
<groupId>org.freemarker</groupId>
|
||||||
<artifactId>freemarker</artifactId>
|
<artifactId>freemarker</artifactId>
|
||||||
<version>2.3.20-alfresco-patched-20200421</version>
|
<version>2.3.20-alfresco-patched-20220413</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.apache.xmlbeans</groupId>
|
<groupId>org.apache.xmlbeans</groupId>
|
||||||
@@ -713,7 +713,7 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.alfresco</groupId>
|
<groupId>org.alfresco</groupId>
|
||||||
<artifactId>alfresco-transform-model</artifactId>
|
<artifactId>alfresco-transform-model</artifactId>
|
||||||
<version>${dependency.alfresco-transform-model.version}</version>
|
<version>${dependency.alfresco-transform-core.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<!-- Test dependencies -->
|
<!-- Test dependencies -->
|
||||||
@@ -735,7 +735,7 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.alfresco</groupId>
|
<groupId>org.alfresco</groupId>
|
||||||
<artifactId>alfresco-transform-model</artifactId>
|
<artifactId>alfresco-transform-model</artifactId>
|
||||||
<version>${dependency.alfresco-transform-model.version}</version>
|
<version>${dependency.alfresco-transform-core.version}</version>
|
||||||
<classifier>tests</classifier>
|
<classifier>tests</classifier>
|
||||||
<scope>test</scope>
|
<scope>test</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
@@ -0,0 +1,93 @@
|
|||||||
|
/*
|
||||||
|
* #%L
|
||||||
|
* Alfresco Repository
|
||||||
|
* %%
|
||||||
|
* Copyright (C) 2022 Alfresco Software Limited
|
||||||
|
* %%
|
||||||
|
* This file is part of the Alfresco software.
|
||||||
|
* If the software was purchased under a paid Alfresco license, the terms of
|
||||||
|
* the paid license agreement will prevail. Otherwise, the software is
|
||||||
|
* provided under the following open source license terms:
|
||||||
|
*
|
||||||
|
* Alfresco is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Lesser General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* Alfresco is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU Lesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public License
|
||||||
|
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
* #L%
|
||||||
|
*/
|
||||||
|
package org.alfresco.repo.action;
|
||||||
|
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Instances of this class are responsible for holding an action id with additional data used to identify the action's
|
||||||
|
* execution context like:
|
||||||
|
* <ul>
|
||||||
|
* <li>REST API</li>
|
||||||
|
* <li>rules execution</li>
|
||||||
|
* <li>...</li>
|
||||||
|
* </ul>
|
||||||
|
*/
|
||||||
|
public class ActionExecutionContext
|
||||||
|
{
|
||||||
|
private final String actionId;
|
||||||
|
private final String executionSource;
|
||||||
|
|
||||||
|
private ActionExecutionContext(String actionId, String executionSource)
|
||||||
|
{
|
||||||
|
this.actionId = actionId;
|
||||||
|
this.executionSource = executionSource;
|
||||||
|
}
|
||||||
|
|
||||||
|
String getActionId()
|
||||||
|
{
|
||||||
|
return actionId;
|
||||||
|
}
|
||||||
|
|
||||||
|
String getExecutionSource()
|
||||||
|
{
|
||||||
|
return executionSource;
|
||||||
|
}
|
||||||
|
|
||||||
|
boolean isExecutionSourceKnown()
|
||||||
|
{
|
||||||
|
return Objects.nonNull(executionSource);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Builder builder(final String actionId)
|
||||||
|
{
|
||||||
|
Objects.requireNonNull(actionId);
|
||||||
|
return new Builder(actionId);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class Builder
|
||||||
|
{
|
||||||
|
private final String actionId;
|
||||||
|
private String executionSource;
|
||||||
|
|
||||||
|
private Builder(String actionId)
|
||||||
|
{
|
||||||
|
this.actionId = actionId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ActionExecutionContext build()
|
||||||
|
{
|
||||||
|
return new ActionExecutionContext(actionId, executionSource);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Builder withExecutionSource(final String executionSource)
|
||||||
|
{
|
||||||
|
Objects.requireNonNull(executionSource);
|
||||||
|
this.executionSource = executionSource;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@@ -2,7 +2,7 @@
|
|||||||
* #%L
|
* #%L
|
||||||
* Alfresco Repository
|
* Alfresco Repository
|
||||||
* %%
|
* %%
|
||||||
* Copyright (C) 2005 - 2020 Alfresco Software Limited
|
* Copyright (C) 2005 - 2022 Alfresco Software Limited
|
||||||
* %%
|
* %%
|
||||||
* This file is part of the Alfresco software.
|
* This file is part of the Alfresco software.
|
||||||
* If the software was purchased under a paid Alfresco license, the terms of
|
* If the software was purchased under a paid Alfresco license, the terms of
|
||||||
@@ -33,7 +33,14 @@ import java.util.HashMap;
|
|||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.Objects;
|
||||||
|
import java.util.Optional;
|
||||||
|
import java.util.Properties;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
import java.util.function.Function;
|
||||||
|
import java.util.function.Predicate;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
import java.util.stream.Stream;
|
||||||
|
|
||||||
import org.alfresco.model.ContentModel;
|
import org.alfresco.model.ContentModel;
|
||||||
import org.alfresco.repo.action.evaluator.ActionConditionEvaluator;
|
import org.alfresco.repo.action.evaluator.ActionConditionEvaluator;
|
||||||
@@ -120,6 +127,8 @@ public class ActionServiceImpl implements ActionService, RuntimeActionService, A
|
|||||||
private ActionTrackingService actionTrackingService;
|
private ActionTrackingService actionTrackingService;
|
||||||
private PolicyComponent policyComponent;
|
private PolicyComponent policyComponent;
|
||||||
private ActionServiceMonitor monitor;
|
private ActionServiceMonitor monitor;
|
||||||
|
private Properties configProperties;
|
||||||
|
private ActionExecutionValidator actionExecutionValidator;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The asynchronous action execution queues map of name, queue
|
* The asynchronous action execution queues map of name, queue
|
||||||
@@ -236,7 +245,17 @@ public class ActionServiceImpl implements ActionService, RuntimeActionService, A
|
|||||||
{
|
{
|
||||||
this.asynchronousActionExecutionQueues = asynchronousActionExecutionQueues;
|
this.asynchronousActionExecutionQueues = asynchronousActionExecutionQueues;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setConfigurationProperties(Properties properties)
|
||||||
|
{
|
||||||
|
this.configProperties = properties;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected Properties getConfigurationProperties()
|
||||||
|
{
|
||||||
|
return configProperties;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This method registers an {@link AsynchronousActionExecutionQueue} with the {@link ActionService}.
|
* This method registers an {@link AsynchronousActionExecutionQueue} with the {@link ActionService}.
|
||||||
* @param key String
|
* @param key String
|
||||||
@@ -256,6 +275,11 @@ public class ActionServiceImpl implements ActionService, RuntimeActionService, A
|
|||||||
ActionModel.TYPE_ACTION_PARAMETER, new JavaBehaviour(this, "getCopyCallback"));
|
ActionModel.TYPE_ACTION_PARAMETER, new JavaBehaviour(this, "getCopyCallback"));
|
||||||
this.policyComponent.bindClassBehaviour(QName.createQName(NamespaceService.ALFRESCO_URI, "onCopyComplete"),
|
this.policyComponent.bindClassBehaviour(QName.createQName(NamespaceService.ALFRESCO_URI, "onCopyComplete"),
|
||||||
ActionModel.TYPE_ACTION_PARAMETER, new JavaBehaviour(this, "onCopyComplete"));
|
ActionModel.TYPE_ACTION_PARAMETER, new JavaBehaviour(this, "onCopyComplete"));
|
||||||
|
if (configProperties == null)
|
||||||
|
{
|
||||||
|
configProperties = applicationContext.getBean("global-properties", Properties.class);
|
||||||
|
}
|
||||||
|
actionExecutionValidator = new ActionExecutionValidator(configProperties::getProperty, actionDefinitions::containsKey);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -1870,5 +1894,58 @@ public class ActionServiceImpl implements ActionService, RuntimeActionService, A
|
|||||||
LoggingAwareExecuter executer = (LoggingAwareExecuter) this.applicationContext.getBean(action.getActionDefinitionName());
|
LoggingAwareExecuter executer = (LoggingAwareExecuter) this.applicationContext.getBean(action.getActionDefinitionName());
|
||||||
return executer.onLogException(logger,t, message);
|
return executer.onLogException(logger,t, message);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isExposed(ActionExecutionContext actionExecutionContext)
|
||||||
|
{
|
||||||
|
return actionExecutionValidator.isExposed(actionExecutionContext);
|
||||||
|
}
|
||||||
|
|
||||||
|
static class ActionExecutionValidator
|
||||||
|
{
|
||||||
|
private final Function<String, String> config;
|
||||||
|
private final Predicate<String> isPublic;
|
||||||
|
|
||||||
|
ActionExecutionValidator(Function<String, String> config, Predicate<String> isPublic)
|
||||||
|
{
|
||||||
|
this.config = Objects.requireNonNull(config);
|
||||||
|
this.isPublic = Objects.requireNonNull(isPublic);
|
||||||
|
}
|
||||||
|
|
||||||
|
boolean isExposed(ActionExecutionContext actionExecutionContext)
|
||||||
|
{
|
||||||
|
Objects.requireNonNull(actionExecutionContext);
|
||||||
|
return isExposedInConfig(actionExecutionContext).orElseGet(() -> isPublic(actionExecutionContext));
|
||||||
|
}
|
||||||
|
|
||||||
|
private Optional<Boolean> isExposedInConfig(ActionExecutionContext actionExecutionContext)
|
||||||
|
{
|
||||||
|
return getConfigKeys(actionExecutionContext).
|
||||||
|
map(config).
|
||||||
|
filter(Objects::nonNull).
|
||||||
|
map(Boolean::parseBoolean).
|
||||||
|
findFirst();
|
||||||
|
}
|
||||||
|
|
||||||
|
private Boolean isPublic(ActionExecutionContext actionExecutionContext)
|
||||||
|
{
|
||||||
|
return isPublic.test(actionExecutionContext.getActionId());
|
||||||
|
}
|
||||||
|
|
||||||
|
private static Stream<String> getConfigKeys(ActionExecutionContext actionExecutionContext)
|
||||||
|
{
|
||||||
|
if (actionExecutionContext.isExecutionSourceKnown())
|
||||||
|
{
|
||||||
|
return Stream.of(
|
||||||
|
getConfigKey(actionExecutionContext.getExecutionSource(), actionExecutionContext.getActionId()),
|
||||||
|
getConfigKey(actionExecutionContext.getActionId()));
|
||||||
|
}
|
||||||
|
return Stream.of(getConfigKey(actionExecutionContext.getActionId()));
|
||||||
|
}
|
||||||
|
|
||||||
|
static String getConfigKey(String... parts)
|
||||||
|
{
|
||||||
|
return Stream.of(parts).collect(Collectors.joining(".", "org.alfresco.repo.action.", ".exposed"));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -2,7 +2,7 @@
|
|||||||
* #%L
|
* #%L
|
||||||
* Alfresco Repository
|
* Alfresco Repository
|
||||||
* %%
|
* %%
|
||||||
* Copyright (C) 2005 - 2016 Alfresco Software Limited
|
* Copyright (C) 2005 - 2022 Alfresco Software Limited
|
||||||
* %%
|
* %%
|
||||||
* This file is part of the Alfresco software.
|
* This file is part of the Alfresco software.
|
||||||
* If the software was purchased under a paid Alfresco license, the terms of
|
* If the software was purchased under a paid Alfresco license, the terms of
|
||||||
@@ -125,4 +125,14 @@ public interface RuntimeActionService
|
|||||||
* @return true if it was handled, false for default handling
|
* @return true if it was handled, false for default handling
|
||||||
*/
|
*/
|
||||||
public boolean onLogException(Action action, Log logger, Throwable t, String message);
|
public boolean onLogException(Action action, Log logger, Throwable t, String message);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Allows you to check if an action can be executed/used in a given execution context
|
||||||
|
* @param actionExecutionContext describes action and its execution context
|
||||||
|
* @return true if action can be executed, false otherwise
|
||||||
|
*/
|
||||||
|
default boolean isExposed(ActionExecutionContext actionExecutionContext)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -2,7 +2,7 @@
|
|||||||
* #%L
|
* #%L
|
||||||
* Alfresco Repository
|
* Alfresco Repository
|
||||||
* %%
|
* %%
|
||||||
* Copyright (C) 2019-2022 Alfresco Software Limited
|
* Copyright (C) 2005 - 2022 Alfresco Software Limited
|
||||||
* %%
|
* %%
|
||||||
* This file is part of the Alfresco software.
|
* This file is part of the Alfresco software.
|
||||||
* If the software was purchased under a paid Alfresco license, the terms of
|
* If the software was purchased under a paid Alfresco license, the terms of
|
||||||
|
@@ -2,7 +2,7 @@
|
|||||||
* #%L
|
* #%L
|
||||||
* Alfresco Repository
|
* Alfresco Repository
|
||||||
* %%
|
* %%
|
||||||
* Copyright (C) 2005 - 2018 Alfresco Software Limited
|
* Copyright (C) 2005 - 2022 Alfresco Software Limited
|
||||||
* %%
|
* %%
|
||||||
* This file is part of the Alfresco software.
|
* This file is part of the Alfresco software.
|
||||||
* If the software was purchased under a paid Alfresco license, the terms of
|
* If the software was purchased under a paid Alfresco license, the terms of
|
||||||
@@ -321,7 +321,7 @@ public class LockServiceImpl implements LockService,
|
|||||||
public void lock(NodeRef nodeRef, LockType lockType)
|
public void lock(NodeRef nodeRef, LockType lockType)
|
||||||
{
|
{
|
||||||
// Lock with no expiration
|
// Lock with no expiration
|
||||||
lock(nodeRef, lockType, 0);
|
lock(nodeRef, lockType, TIMEOUT_INFINITY);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -371,16 +371,8 @@ public class LockServiceImpl implements LockService,
|
|||||||
public void lock(NodeRef nodeRef, LockType lockType, int timeToExpire, Lifetime lifetime, String additionalInfo)
|
public void lock(NodeRef nodeRef, LockType lockType, int timeToExpire, Lifetime lifetime, String additionalInfo)
|
||||||
{
|
{
|
||||||
invokeBeforeLock(nodeRef, lockType);
|
invokeBeforeLock(nodeRef, lockType);
|
||||||
if (lifetime.equals(Lifetime.EPHEMERAL) && (timeToExpire > MAX_EPHEMERAL_LOCK_SECONDS))
|
validateTimeToExpire(timeToExpire, lifetime);
|
||||||
{
|
lifetime = switchLifetimeMode(timeToExpire, lifetime);
|
||||||
throw new IllegalArgumentException("Attempt to create ephemeral lock for " +
|
|
||||||
timeToExpire + " seconds - exceeds maximum allowed time.");
|
|
||||||
}
|
|
||||||
if (lifetime.equals(Lifetime.EPHEMERAL) && (timeToExpire > ephemeralExpiryThreshold))
|
|
||||||
{
|
|
||||||
lifetime = Lifetime.PERSISTENT;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
nodeRef = tenantService.getName(nodeRef);
|
nodeRef = tenantService.getName(nodeRef);
|
||||||
|
|
||||||
@@ -442,6 +434,22 @@ public class LockServiceImpl implements LockService,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void validateTimeToExpire(int timeToExpire, Lifetime lifetime) {
|
||||||
|
if (lifetime.equals(Lifetime.EPHEMERAL) && (timeToExpire > MAX_EPHEMERAL_LOCK_SECONDS))
|
||||||
|
{
|
||||||
|
throw new IllegalArgumentException("Attempt to create ephemeral lock for " +
|
||||||
|
timeToExpire + " seconds - exceeds maximum allowed time.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private Lifetime switchLifetimeMode(int timeToExpire, Lifetime lifetime) {
|
||||||
|
if (lifetime.equals(Lifetime.EPHEMERAL) && (timeToExpire > ephemeralExpiryThreshold))
|
||||||
|
{
|
||||||
|
return Lifetime.PERSISTENT;
|
||||||
|
}
|
||||||
|
return lifetime;
|
||||||
|
}
|
||||||
|
|
||||||
private void persistLockProps(NodeRef nodeRef, LockType lockType, Lifetime lifetime, String userName, Date expiryDate, String additionalInfo)
|
private void persistLockProps(NodeRef nodeRef, LockType lockType, Lifetime lifetime, String userName, Date expiryDate, String additionalInfo)
|
||||||
{
|
{
|
||||||
@@ -468,16 +476,16 @@ public class LockServiceImpl implements LockService,
|
|||||||
*/
|
*/
|
||||||
private Date makeExpiryDate(int timeToExpire)
|
private Date makeExpiryDate(int timeToExpire)
|
||||||
{
|
{
|
||||||
// Set the expiry date
|
boolean permanent = timeToExpire <= TIMEOUT_INFINITY;
|
||||||
Date expiryDate = null;
|
if (permanent) {
|
||||||
if (timeToExpire > 0)
|
return null;
|
||||||
{
|
|
||||||
expiryDate = new Date();
|
|
||||||
Calendar calendar = Calendar.getInstance();
|
|
||||||
calendar.setTime(expiryDate);
|
|
||||||
calendar.add(Calendar.SECOND, timeToExpire);
|
|
||||||
expiryDate = calendar.getTime();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Calendar calendar = Calendar.getInstance();
|
||||||
|
calendar.setTime(new Date());
|
||||||
|
calendar.add(Calendar.SECOND, timeToExpire);
|
||||||
|
Date expiryDate = calendar.getTime();
|
||||||
|
|
||||||
return expiryDate;
|
return expiryDate;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -2,7 +2,7 @@
|
|||||||
* #%L
|
* #%L
|
||||||
* Alfresco Repository
|
* Alfresco Repository
|
||||||
* %%
|
* %%
|
||||||
* Copyright (C) 2005 - 2021 Alfresco Software Limited
|
* Copyright (C) 2005 - 2022 Alfresco Software Limited
|
||||||
* %%
|
* %%
|
||||||
* This file is part of the Alfresco software.
|
* This file is part of the Alfresco software.
|
||||||
* If the software was purchased under a paid Alfresco license, the terms of
|
* If the software was purchased under a paid Alfresco license, the terms of
|
||||||
@@ -23,7 +23,7 @@
|
|||||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||||
* #L%
|
* #L%
|
||||||
*/
|
*/
|
||||||
package org.alfresco.repo.search.impl.solr;
|
package org.alfresco.repo.search.impl;
|
||||||
|
|
||||||
import org.alfresco.opencmis.dictionary.CMISDictionaryService;
|
import org.alfresco.opencmis.dictionary.CMISDictionaryService;
|
||||||
import org.alfresco.opencmis.search.CMISQueryOptions;
|
import org.alfresco.opencmis.search.CMISQueryOptions;
|
@@ -2,7 +2,7 @@
|
|||||||
* #%L
|
* #%L
|
||||||
* Alfresco Repository
|
* Alfresco Repository
|
||||||
* %%
|
* %%
|
||||||
* Copyright (C) 2005 - 2016 Alfresco Software Limited
|
* Copyright (C) 2005 - 2022 Alfresco Software Limited
|
||||||
* %%
|
* %%
|
||||||
* This file is part of the Alfresco software.
|
* This file is part of the Alfresco software.
|
||||||
* If the software was purchased under a paid Alfresco license, the terms of
|
* If the software was purchased under a paid Alfresco license, the terms of
|
||||||
@@ -23,7 +23,7 @@
|
|||||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||||
* #L%
|
* #L%
|
||||||
*/
|
*/
|
||||||
package org.alfresco.repo.search.impl.solr;
|
package org.alfresco.repo.search.impl;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
@@ -36,6 +36,7 @@ import org.alfresco.repo.domain.solr.SearchDAO;
|
|||||||
import org.alfresco.repo.search.impl.lucene.AbstractLuceneQueryLanguage;
|
import org.alfresco.repo.search.impl.lucene.AbstractLuceneQueryLanguage;
|
||||||
import org.alfresco.repo.search.impl.lucene.LuceneQueryLanguageSPI;
|
import org.alfresco.repo.search.impl.lucene.LuceneQueryLanguageSPI;
|
||||||
import org.alfresco.repo.search.impl.querymodel.QueryModelException;
|
import org.alfresco.repo.search.impl.querymodel.QueryModelException;
|
||||||
|
import org.alfresco.repo.search.impl.solr.SolrJSONResultSet;
|
||||||
import org.alfresco.repo.search.results.ChildAssocRefResultSet;
|
import org.alfresco.repo.search.results.ChildAssocRefResultSet;
|
||||||
import org.alfresco.repo.solr.NodeParameters;
|
import org.alfresco.repo.solr.NodeParameters;
|
||||||
import org.alfresco.service.cmr.repository.ChildAssociationRef;
|
import org.alfresco.service.cmr.repository.ChildAssociationRef;
|
||||||
@@ -61,12 +62,16 @@ public class DbOrIndexSwitchingQueryLanguage extends AbstractLuceneQueryLanguage
|
|||||||
LuceneQueryLanguageSPI indexQueryLanguage;
|
LuceneQueryLanguageSPI indexQueryLanguage;
|
||||||
|
|
||||||
QueryConsistency queryConsistency = QueryConsistency.DEFAULT;
|
QueryConsistency queryConsistency = QueryConsistency.DEFAULT;
|
||||||
|
QueryConsistency solrQueryConsistency = null; // Deprecated
|
||||||
|
|
||||||
private NodeService nodeService;
|
private NodeService nodeService;
|
||||||
|
|
||||||
private SearchDAO searchDao;
|
private SearchDAO searchDao;
|
||||||
|
|
||||||
private boolean hybridEnabled;
|
private Boolean hybridEnabled;
|
||||||
|
private Boolean solrHybridEnabled; // Deprecated
|
||||||
|
|
||||||
|
private String subsystemName;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param dbQueryLanguage the dbQueryLanguage to set
|
* @param dbQueryLanguage the dbQueryLanguage to set
|
||||||
@@ -92,6 +97,12 @@ public class DbOrIndexSwitchingQueryLanguage extends AbstractLuceneQueryLanguage
|
|||||||
this.queryConsistency = queryConsistency;
|
this.queryConsistency = queryConsistency;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Deprecated
|
||||||
|
public void setSolrQueryConsistency(QueryConsistency solrQueryConsistency)
|
||||||
|
{
|
||||||
|
this.solrQueryConsistency = solrQueryConsistency;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param nodeService the nodeService to set
|
* @param nodeService the nodeService to set
|
||||||
*/
|
*/
|
||||||
@@ -105,17 +116,35 @@ public class DbOrIndexSwitchingQueryLanguage extends AbstractLuceneQueryLanguage
|
|||||||
this.searchDao = searchDao;
|
this.searchDao = searchDao;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setHybridEnabled(boolean hybridEnabled)
|
public void setHybridEnabled(Boolean hybridEnabled)
|
||||||
{
|
{
|
||||||
this.hybridEnabled = hybridEnabled;
|
this.hybridEnabled = hybridEnabled;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Deprecated
|
||||||
|
public void setSolrHybridEnabled(Boolean solrHybridEnabled)
|
||||||
|
{
|
||||||
|
this.solrHybridEnabled = solrHybridEnabled;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSubsystemName(String subsystemName)
|
||||||
|
{
|
||||||
|
this.subsystemName = subsystemName;
|
||||||
|
}
|
||||||
|
|
||||||
public ResultSet executeQuery(SearchParameters searchParameters)
|
public ResultSet executeQuery(SearchParameters searchParameters)
|
||||||
{
|
{
|
||||||
QueryConsistency consistency = searchParameters.getQueryConsistency();
|
QueryConsistency consistency = searchParameters.getQueryConsistency();
|
||||||
if(consistency == QueryConsistency.DEFAULT)
|
if(consistency == QueryConsistency.DEFAULT)
|
||||||
{
|
{
|
||||||
consistency = queryConsistency;
|
if(solrQueryConsistency != null)
|
||||||
|
{
|
||||||
|
consistency = solrQueryConsistency;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
consistency = queryConsistency;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
switch(consistency)
|
switch(consistency)
|
||||||
@@ -125,7 +154,7 @@ public class DbOrIndexSwitchingQueryLanguage extends AbstractLuceneQueryLanguage
|
|||||||
{
|
{
|
||||||
if(logger.isDebugEnabled())
|
if(logger.isDebugEnabled())
|
||||||
{
|
{
|
||||||
logger.debug("Using SOLR query: "+dbQueryLanguage.getName()+" for "+searchParameters);
|
logger.debug("Using "+subsystemName+" query: "+dbQueryLanguage.getName()+" for "+searchParameters);
|
||||||
}
|
}
|
||||||
StopWatch stopWatch = new StopWatch("index only");
|
StopWatch stopWatch = new StopWatch("index only");
|
||||||
stopWatch.start();
|
stopWatch.start();
|
||||||
@@ -133,7 +162,7 @@ public class DbOrIndexSwitchingQueryLanguage extends AbstractLuceneQueryLanguage
|
|||||||
stopWatch.stop();
|
stopWatch.stop();
|
||||||
if (logger.isDebugEnabled())
|
if (logger.isDebugEnabled())
|
||||||
{
|
{
|
||||||
logger.debug("SOLR returned " + results.length() + " results in " +
|
logger.debug(subsystemName+" returned " + results.length() + " results in " +
|
||||||
stopWatch.getLastTaskTimeMillis() + "ms");
|
stopWatch.getLastTaskTimeMillis() + "ms");
|
||||||
}
|
}
|
||||||
return results;
|
return results;
|
||||||
@@ -165,7 +194,7 @@ public class DbOrIndexSwitchingQueryLanguage extends AbstractLuceneQueryLanguage
|
|||||||
throw new QueryModelException("No query language available");
|
throw new QueryModelException("No query language available");
|
||||||
}
|
}
|
||||||
case HYBRID:
|
case HYBRID:
|
||||||
if (!hybridEnabled)
|
if (((solrHybridEnabled != null) && (!solrHybridEnabled)) || (hybridEnabled == null) || (!hybridEnabled))
|
||||||
{
|
{
|
||||||
throw new DisabledFeatureException("Hybrid query is disabled.");
|
throw new DisabledFeatureException("Hybrid query is disabled.");
|
||||||
}
|
}
|
||||||
@@ -209,7 +238,7 @@ public class DbOrIndexSwitchingQueryLanguage extends AbstractLuceneQueryLanguage
|
|||||||
{
|
{
|
||||||
if(logger.isDebugEnabled())
|
if(logger.isDebugEnabled())
|
||||||
{
|
{
|
||||||
logger.debug("Using SOLR query: "+dbQueryLanguage.getName()+" for "+searchParameters);
|
logger.debug("Using "+subsystemName+" query: "+dbQueryLanguage.getName()+" for "+searchParameters);
|
||||||
}
|
}
|
||||||
stopWatch.start();
|
stopWatch.start();
|
||||||
|
|
||||||
@@ -218,7 +247,7 @@ public class DbOrIndexSwitchingQueryLanguage extends AbstractLuceneQueryLanguage
|
|||||||
stopWatch.stop();
|
stopWatch.stop();
|
||||||
if (logger.isDebugEnabled())
|
if (logger.isDebugEnabled())
|
||||||
{
|
{
|
||||||
logger.debug("SOLR returned " + results.length() + " results in " +
|
logger.debug(subsystemName+" returned " + results.length() + " results in " +
|
||||||
stopWatch.getLastTaskTimeMillis() + "ms");
|
stopWatch.getLastTaskTimeMillis() + "ms");
|
||||||
}
|
}
|
||||||
return results;
|
return results;
|
||||||
@@ -231,14 +260,14 @@ public class DbOrIndexSwitchingQueryLanguage extends AbstractLuceneQueryLanguage
|
|||||||
{
|
{
|
||||||
if(logger.isDebugEnabled())
|
if(logger.isDebugEnabled())
|
||||||
{
|
{
|
||||||
logger.debug("(No DB QL) Using SOLR query: "+"dbQueryLanguage==null"+" for "+searchParameters);
|
logger.debug("(No DB QL) Using "+subsystemName+" query: "+"dbQueryLanguage==null"+" for "+searchParameters);
|
||||||
}
|
}
|
||||||
stopWatch.start();
|
stopWatch.start();
|
||||||
ResultSet results = indexQueryLanguage.executeQuery(searchParameters);
|
ResultSet results = indexQueryLanguage.executeQuery(searchParameters);
|
||||||
stopWatch.stop();
|
stopWatch.stop();
|
||||||
if (logger.isDebugEnabled())
|
if (logger.isDebugEnabled())
|
||||||
{
|
{
|
||||||
logger.debug("SOLR returned " + results.length() + " results in " +
|
logger.debug(subsystemName+" returned " + results.length() + " results in " +
|
||||||
stopWatch.getLastTaskTimeMillis() + "ms");
|
stopWatch.getLastTaskTimeMillis() + "ms");
|
||||||
}
|
}
|
||||||
return results;
|
return results;
|
||||||
@@ -282,21 +311,21 @@ public class DbOrIndexSwitchingQueryLanguage extends AbstractLuceneQueryLanguage
|
|||||||
{
|
{
|
||||||
if (indexQueryLanguage == null || dbQueryLanguage == null)
|
if (indexQueryLanguage == null || dbQueryLanguage == null)
|
||||||
{
|
{
|
||||||
throw new QueryModelException("Both index and DB query language required for hybrid search [index=" +
|
throw new QueryModelException("Both "+subsystemName+" and DB query language required for hybrid search [index=" +
|
||||||
indexQueryLanguage + ", DB=" + dbQueryLanguage + "]");
|
indexQueryLanguage + ", DB=" + dbQueryLanguage + "]");
|
||||||
}
|
}
|
||||||
|
|
||||||
StopWatch stopWatch = new StopWatch("hybrid search");
|
StopWatch stopWatch = new StopWatch("hybrid search");
|
||||||
if (logger.isDebugEnabled())
|
if (logger.isDebugEnabled())
|
||||||
{
|
{
|
||||||
logger.debug("Hybrid search, using SOLR query: "+dbQueryLanguage.getName()+" for "+searchParameters);
|
logger.debug("Hybrid search, using "+subsystemName+" query: "+dbQueryLanguage.getName()+" for "+searchParameters);
|
||||||
}
|
}
|
||||||
stopWatch.start("index query");
|
stopWatch.start("index query");
|
||||||
ResultSet indexResults = indexQueryLanguage.executeQuery(searchParameters);
|
ResultSet indexResults = indexQueryLanguage.executeQuery(searchParameters);
|
||||||
stopWatch.stop();
|
stopWatch.stop();
|
||||||
if (logger.isDebugEnabled())
|
if (logger.isDebugEnabled())
|
||||||
{
|
{
|
||||||
logger.debug("SOLR query returned " + indexResults.length() + " results in " +
|
logger.debug(subsystemName+" query returned " + indexResults.length() + " results in " +
|
||||||
stopWatch.getLastTaskTimeMillis() + "ms");
|
stopWatch.getLastTaskTimeMillis() + "ms");
|
||||||
}
|
}
|
||||||
// TODO: if the results are up-to-date, then nothing more to do - return the results.
|
// TODO: if the results are up-to-date, then nothing more to do - return the results.
|
||||||
@@ -305,7 +334,7 @@ public class DbOrIndexSwitchingQueryLanguage extends AbstractLuceneQueryLanguage
|
|||||||
{
|
{
|
||||||
if (logger.isWarnEnabled())
|
if (logger.isWarnEnabled())
|
||||||
{
|
{
|
||||||
logger.warn("Hybrid search can only use database when SOLR is also in use. " +
|
logger.warn("Hybrid search can only use database when "+subsystemName+" is also in use. " +
|
||||||
"Skipping DB search, returning results from index.");
|
"Skipping DB search, returning results from index.");
|
||||||
}
|
}
|
||||||
return indexResults;
|
return indexResults;
|
||||||
@@ -345,7 +374,7 @@ public class DbOrIndexSwitchingQueryLanguage extends AbstractLuceneQueryLanguage
|
|||||||
{
|
{
|
||||||
nodeRefs.add(n.getNodeRef());
|
nodeRefs.add(n.getNodeRef());
|
||||||
}
|
}
|
||||||
// Only use the SOLR results for nodes that haven't changed since indexing.
|
// Only use the Search Index results for nodes that haven't changed since indexing.
|
||||||
for (ChildAssociationRef car : indexResults.getChildAssocRefs())
|
for (ChildAssociationRef car : indexResults.getChildAssocRefs())
|
||||||
{
|
{
|
||||||
if (!nodeRefs.contains(car.getChildRef()))
|
if (!nodeRefs.contains(car.getChildRef()))
|
||||||
@@ -360,7 +389,7 @@ public class DbOrIndexSwitchingQueryLanguage extends AbstractLuceneQueryLanguage
|
|||||||
stopWatch.stop(); // merge result sets
|
stopWatch.stop(); // merge result sets
|
||||||
if (logger.isDebugEnabled())
|
if (logger.isDebugEnabled())
|
||||||
{
|
{
|
||||||
String stats = String.format("SOLR=%d, DB=%d, total=%d",
|
String stats = String.format(subsystemName+"=%d, DB=%d, total=%d",
|
||||||
indexResults.length(), dbResults.length(), results.length());
|
indexResults.length(), dbResults.length(), results.length());
|
||||||
logger.debug("Hybrid search returning combined results with counts: " + stats);
|
logger.debug("Hybrid search returning combined results with counts: " + stats);
|
||||||
logger.debug(stopWatch.prettyPrint());
|
logger.debug(stopWatch.prettyPrint());
|
@@ -2,7 +2,7 @@
|
|||||||
* #%L
|
* #%L
|
||||||
* Alfresco Repository
|
* Alfresco Repository
|
||||||
* %%
|
* %%
|
||||||
* Copyright (C) 2005 - 2016 Alfresco Software Limited
|
* Copyright (C) 2005 - 2022 Alfresco Software Limited
|
||||||
* %%
|
* %%
|
||||||
* This file is part of the Alfresco software.
|
* This file is part of the Alfresco software.
|
||||||
* If the software was purchased under a paid Alfresco license, the terms of
|
* If the software was purchased under a paid Alfresco license, the terms of
|
||||||
@@ -23,19 +23,19 @@
|
|||||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||||
* #L%
|
* #L%
|
||||||
*/
|
*/
|
||||||
package org.alfresco.repo.search.impl.solr;
|
package org.alfresco.repo.search.impl;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Identifies an attempt to use a disabled feature.
|
* Identifies an attempt to use a disabled feature.
|
||||||
*
|
*
|
||||||
* @author Matt Ward
|
* @author Matt Ward
|
||||||
*/
|
*/
|
||||||
public class DisabledFeatureException extends RuntimeException
|
public class DisabledFeatureException extends RuntimeException
|
||||||
{
|
{
|
||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
DisabledFeatureException(String message)
|
DisabledFeatureException(String message)
|
||||||
{
|
{
|
||||||
super(message);
|
super(message);
|
||||||
}
|
}
|
||||||
}
|
}
|
@@ -1,29 +1,29 @@
|
|||||||
/*
|
/*
|
||||||
* #%L
|
* #%L
|
||||||
* Alfresco Repository
|
* Alfresco Repository
|
||||||
* %%
|
* %%
|
||||||
* Copyright (C) 2005 - 2016 Alfresco Software Limited
|
* Copyright (C) 2005 - 2022 Alfresco Software Limited
|
||||||
* %%
|
* %%
|
||||||
* This file is part of the Alfresco software.
|
* This file is part of the Alfresco software.
|
||||||
* If the software was purchased under a paid Alfresco license, the terms of
|
* If the software was purchased under a paid Alfresco license, the terms of
|
||||||
* the paid license agreement will prevail. Otherwise, the software is
|
* the paid license agreement will prevail. Otherwise, the software is
|
||||||
* provided under the following open source license terms:
|
* provided under the following open source license terms:
|
||||||
*
|
*
|
||||||
* Alfresco is free software: you can redistribute it and/or modify
|
* Alfresco is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU Lesser General Public License as published by
|
* it under the terms of the GNU Lesser General Public License as published by
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
* (at your option) any later version.
|
* (at your option) any later version.
|
||||||
*
|
*
|
||||||
* Alfresco is distributed in the hope that it will be useful,
|
* Alfresco is distributed in the hope that it will be useful,
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
* GNU Lesser General Public License for more details.
|
* GNU Lesser General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU Lesser General Public License
|
* You should have received a copy of the GNU Lesser General Public License
|
||||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||||
* #L%
|
* #L%
|
||||||
*/
|
*/
|
||||||
package org.alfresco.repo.search.impl.solr;
|
package org.alfresco.repo.search.impl;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
@@ -52,19 +52,19 @@ import org.apache.chemistry.opencmis.commons.enums.CapabilityQuery;
|
|||||||
/**
|
/**
|
||||||
* @author Andy
|
* @author Andy
|
||||||
*/
|
*/
|
||||||
public class SolrOpenCMISQueryServiceImpl implements CMISQueryService
|
public class OpenCMISQueryServiceImpl implements CMISQueryService
|
||||||
{
|
{
|
||||||
private LuceneQueryLanguageSPI solrQueryLanguage;
|
private LuceneQueryLanguageSPI queryLanguage;
|
||||||
|
|
||||||
private NodeService nodeService;
|
private NodeService nodeService;
|
||||||
|
|
||||||
private DictionaryService alfrescoDictionaryService;
|
private DictionaryService alfrescoDictionaryService;
|
||||||
|
|
||||||
private CMISDictionaryService cmisDictionaryService;
|
private CMISDictionaryService cmisDictionaryService;
|
||||||
|
|
||||||
public void setSolrQueryLanguage(LuceneQueryLanguageSPI solrQueryLanguage)
|
public void setQueryLanguage(LuceneQueryLanguageSPI queryLanguage)
|
||||||
{
|
{
|
||||||
this.solrQueryLanguage = solrQueryLanguage;
|
this.queryLanguage = queryLanguage;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setNodeService(NodeService nodeService)
|
public void setNodeService(NodeService nodeService)
|
||||||
@@ -87,7 +87,7 @@ public class SolrOpenCMISQueryServiceImpl implements CMISQueryService
|
|||||||
{
|
{
|
||||||
SearchParameters searchParameters = options.getAsSearchParmeters();
|
SearchParameters searchParameters = options.getAsSearchParmeters();
|
||||||
searchParameters.addExtraParameter("cmisVersion", options.getCmisVersion().toString());
|
searchParameters.addExtraParameter("cmisVersion", options.getCmisVersion().toString());
|
||||||
ResultSet rs = solrQueryLanguage.executeQuery(searchParameters);
|
ResultSet rs = queryLanguage.executeQuery(searchParameters);
|
||||||
|
|
||||||
CapabilityJoin joinSupport = getJoinSupport();
|
CapabilityJoin joinSupport = getJoinSupport();
|
||||||
if(options.getQueryMode() == CMISQueryOptions.CMISQueryMode.CMS_WITH_ALFRESCO_EXTENSIONS)
|
if(options.getQueryMode() == CMISQueryOptions.CMISQueryMode.CMS_WITH_ALFRESCO_EXTENSIONS)
|
@@ -25,27 +25,15 @@
|
|||||||
*/
|
*/
|
||||||
package org.alfresco.repo.security.permissions.impl.acegi;
|
package org.alfresco.repo.security.permissions.impl.acegi;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.BitSet;
|
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.Iterator;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Set;
|
|
||||||
import java.util.StringTokenizer;
|
|
||||||
|
|
||||||
import net.sf.acegisecurity.AccessDeniedException;
|
import net.sf.acegisecurity.AccessDeniedException;
|
||||||
import net.sf.acegisecurity.Authentication;
|
import net.sf.acegisecurity.Authentication;
|
||||||
import net.sf.acegisecurity.ConfigAttribute;
|
import net.sf.acegisecurity.ConfigAttribute;
|
||||||
import net.sf.acegisecurity.ConfigAttributeDefinition;
|
import net.sf.acegisecurity.ConfigAttributeDefinition;
|
||||||
import net.sf.acegisecurity.afterinvocation.AfterInvocationProvider;
|
import net.sf.acegisecurity.afterinvocation.AfterInvocationProvider;
|
||||||
|
|
||||||
import org.alfresco.opencmis.search.CMISResultSet;
|
import org.alfresco.opencmis.search.CMISResultSet;
|
||||||
|
import org.alfresco.repo.search.SearchEngineResultSet;
|
||||||
import org.alfresco.repo.search.SimpleResultSetMetaData;
|
import org.alfresco.repo.search.SimpleResultSetMetaData;
|
||||||
import org.alfresco.repo.search.impl.lucene.PagingLuceneResultSet;
|
import org.alfresco.repo.search.impl.lucene.PagingLuceneResultSet;
|
||||||
import org.alfresco.repo.search.impl.solr.SolrJSONResultSet;
|
|
||||||
import org.alfresco.repo.search.impl.querymodel.QueryEngineResults;
|
import org.alfresco.repo.search.impl.querymodel.QueryEngineResults;
|
||||||
import org.alfresco.repo.security.authentication.AuthenticationUtil;
|
import org.alfresco.repo.security.authentication.AuthenticationUtil;
|
||||||
import org.alfresco.repo.security.permissions.PermissionCheckCollection;
|
import org.alfresco.repo.security.permissions.PermissionCheckCollection;
|
||||||
@@ -72,6 +60,17 @@ import org.apache.commons.logging.Log;
|
|||||||
import org.apache.commons.logging.LogFactory;
|
import org.apache.commons.logging.LogFactory;
|
||||||
import org.springframework.beans.factory.InitializingBean;
|
import org.springframework.beans.factory.InitializingBean;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.BitSet;
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Set;
|
||||||
|
import java.util.StringTokenizer;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Enforce permission after the method call
|
* Enforce permission after the method call
|
||||||
*
|
*
|
||||||
@@ -276,8 +275,8 @@ public class ACLEntryAfterInvocationProvider implements AfterInvocationProvider,
|
|||||||
{
|
{
|
||||||
return decide(authentication, object, config, (ChildAssociationRef) returnedObject);
|
return decide(authentication, object, config, (ChildAssociationRef) returnedObject);
|
||||||
}
|
}
|
||||||
else if (SolrJSONResultSet.class.isAssignableFrom(returnedObject.getClass()) &&
|
else if (SearchEngineResultSet.class.isAssignableFrom(returnedObject.getClass()) &&
|
||||||
(!anyDenyDenies || (!postProcessDenies && ((SolrJSONResultSet)returnedObject).getProcessedDenies())))
|
(!anyDenyDenies || (!postProcessDenies && ((SearchEngineResultSet)returnedObject).getProcessedDenies())))
|
||||||
{
|
{
|
||||||
return returnedObject;
|
return returnedObject;
|
||||||
}
|
}
|
||||||
|
@@ -2,7 +2,7 @@
|
|||||||
* #%L
|
* #%L
|
||||||
* Alfresco Repository
|
* Alfresco Repository
|
||||||
* %%
|
* %%
|
||||||
* Copyright (C) 2005 - 2016 Alfresco Software Limited
|
* Copyright (C) 2005 - 2022 Alfresco Software Limited
|
||||||
* %%
|
* %%
|
||||||
* This file is part of the Alfresco software.
|
* This file is part of the Alfresco software.
|
||||||
* If the software was purchased under a paid Alfresco license, the terms of
|
* If the software was purchased under a paid Alfresco license, the terms of
|
||||||
@@ -42,6 +42,8 @@ import org.alfresco.service.cmr.repository.NodeRef;
|
|||||||
@AlfrescoPublicApi
|
@AlfrescoPublicApi
|
||||||
public interface LockService
|
public interface LockService
|
||||||
{
|
{
|
||||||
|
int TIMEOUT_INFINITY = 0;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Places a lock on a node.
|
* Places a lock on a node.
|
||||||
* <p>
|
* <p>
|
||||||
|
@@ -75,6 +75,9 @@
|
|||||||
<property name="monitor">
|
<property name="monitor">
|
||||||
<ref bean="actionServiceMonitor"/>
|
<ref bean="actionServiceMonitor"/>
|
||||||
</property>
|
</property>
|
||||||
|
<property name="configurationProperties">
|
||||||
|
<ref bean="global-properties"/>
|
||||||
|
</property>
|
||||||
</bean>
|
</bean>
|
||||||
|
|
||||||
<bean id="defaultAsynchronousActionExecutionQueue" class="org.alfresco.repo.action.AsynchronousActionExecutionQueueImpl" init-method="init">
|
<bean id="defaultAsynchronousActionExecutionQueue" class="org.alfresco.repo.action.AsynchronousActionExecutionQueueImpl" init-method="init">
|
||||||
|
@@ -3,7 +3,7 @@
|
|||||||
repository.name=Main Repository
|
repository.name=Main Repository
|
||||||
|
|
||||||
# Schema number
|
# Schema number
|
||||||
version.schema=16100
|
version.schema=17000
|
||||||
|
|
||||||
# Directory configuration
|
# Directory configuration
|
||||||
|
|
||||||
|
@@ -4,7 +4,7 @@
|
|||||||
<!-- Core and miscellaneous bean definitions -->
|
<!-- Core and miscellaneous bean definitions -->
|
||||||
<beans>
|
<beans>
|
||||||
|
|
||||||
<bean id="search.cmis.alfresco.switching" class="org.alfresco.repo.search.impl.solr.DbOrIndexSwitchingQueryLanguage" >
|
<bean id="base.search.cmis.alfresco.switching" abstract="true" class="org.alfresco.repo.search.impl.DbOrIndexSwitchingQueryLanguage">
|
||||||
<property name="factories">
|
<property name="factories">
|
||||||
<list>
|
<list>
|
||||||
<ref bean="search.indexerAndSearcherFactory" />
|
<ref bean="search.indexerAndSearcherFactory" />
|
||||||
@@ -19,15 +19,19 @@
|
|||||||
<property name="indexQueryLanguage">
|
<property name="indexQueryLanguage">
|
||||||
<ref bean="search.cmis.alfresco.index" />
|
<ref bean="search.cmis.alfresco.index" />
|
||||||
</property>
|
</property>
|
||||||
<property name="queryConsistency">
|
|
||||||
<value>${solr.query.cmis.queryConsistency}</value>
|
<property name="queryConsistency" value="${query.cmis.queryConsistency}"/>
|
||||||
</property>
|
<property name="solrQueryConsistency" value="${solr.query.cmis.queryConsistency}"/>
|
||||||
|
|
||||||
|
<!-- Deprecated -->
|
||||||
|
<property name="hybridEnabled" value="${query.hybrid.enabled}"/>
|
||||||
|
<property name="solrHybridEnabled" value="${solr.query.hybrid.enabled}"/>
|
||||||
|
|
||||||
<property name="nodeService" ref="NodeService"/>
|
<property name="nodeService" ref="NodeService"/>
|
||||||
<property name="searchDao" ref="searchDAO"/>
|
<property name="searchDao" ref="searchDAO"/>
|
||||||
<property name="hybridEnabled" value="${solr.query.hybrid.enabled}"/>
|
|
||||||
</bean>
|
</bean>
|
||||||
|
|
||||||
<bean id="search.cmis.alfresco.switching1.1" class="org.alfresco.repo.search.impl.solr.DbOrIndexSwitchingQueryLanguage" >
|
<bean id="base.search.cmis.alfresco.switching1.1" abstract="true" class="org.alfresco.repo.search.impl.DbOrIndexSwitchingQueryLanguage">
|
||||||
<property name="factories">
|
<property name="factories">
|
||||||
<list>
|
<list>
|
||||||
<ref bean="search.indexerAndSearcherFactory" />
|
<ref bean="search.indexerAndSearcherFactory" />
|
||||||
@@ -42,12 +46,15 @@
|
|||||||
<property name="indexQueryLanguage">
|
<property name="indexQueryLanguage">
|
||||||
<ref bean="search.cmis.alfresco.index" />
|
<ref bean="search.cmis.alfresco.index" />
|
||||||
</property>
|
</property>
|
||||||
<property name="queryConsistency">
|
|
||||||
<value>${solr.query.cmis.queryConsistency}</value>
|
<property name="queryConsistency" value="${query.cmis.queryConsistency}"/>
|
||||||
</property>
|
|
||||||
|
<!-- Deprecated -->
|
||||||
|
<property name="solrQueryConsistency" value="${solr.query.cmis.queryConsistency}"/>
|
||||||
|
|
||||||
</bean>
|
</bean>
|
||||||
|
|
||||||
<bean id="search.cmis.strict.switching" class="org.alfresco.repo.search.impl.solr.DbOrIndexSwitchingQueryLanguage" >
|
<bean id="base.search.cmis.strict.switching" abstract="true" class="org.alfresco.repo.search.impl.DbOrIndexSwitchingQueryLanguage">
|
||||||
<property name="factories">
|
<property name="factories">
|
||||||
<list>
|
<list>
|
||||||
<ref bean="search.indexerAndSearcherFactory" />
|
<ref bean="search.indexerAndSearcherFactory" />
|
||||||
@@ -62,15 +69,19 @@
|
|||||||
<property name="indexQueryLanguage">
|
<property name="indexQueryLanguage">
|
||||||
<ref bean="search.cmis.alfresco.index" />
|
<ref bean="search.cmis.alfresco.index" />
|
||||||
</property>
|
</property>
|
||||||
<property name="queryConsistency">
|
|
||||||
<value>${solr.query.cmis.queryConsistency}</value>
|
<property name="queryConsistency" value="${query.cmis.queryConsistency}"/>
|
||||||
</property>
|
<property name="solrQueryConsistency" value="${solr.query.cmis.queryConsistency}"/>
|
||||||
|
|
||||||
|
<!-- Deprecated -->
|
||||||
|
<property name="hybridEnabled" value="${query.hybrid.enabled}"/>
|
||||||
|
<property name="solrHybridEnabled" value="${solr.query.hybrid.enabled}"/>
|
||||||
|
|
||||||
<property name="nodeService" ref="NodeService"/>
|
<property name="nodeService" ref="NodeService"/>
|
||||||
<property name="searchDao" ref="searchDAO"/>
|
<property name="searchDao" ref="searchDAO"/>
|
||||||
<property name="hybridEnabled" value="${solr.query.hybrid.enabled}"/>
|
|
||||||
</bean>
|
</bean>
|
||||||
|
|
||||||
<bean id="search.cmis.alfresco.db" class="org.alfresco.repo.search.impl.solr.DbCmisQueryLanguage" >
|
<bean id="search.cmis.alfresco.db" class="org.alfresco.repo.search.impl.DbCmisQueryLanguage" >
|
||||||
<property name="factories">
|
<property name="factories">
|
||||||
<list>
|
<list>
|
||||||
<ref bean="search.indexerAndSearcherFactory" />
|
<ref bean="search.indexerAndSearcherFactory" />
|
||||||
@@ -90,7 +101,7 @@
|
|||||||
</property>
|
</property>
|
||||||
</bean>
|
</bean>
|
||||||
|
|
||||||
<bean id="search.cmis.alfresco.db1.1" class="org.alfresco.repo.search.impl.solr.DbCmisQueryLanguage" >
|
<bean id="search.cmis.alfresco.db1.1" class="org.alfresco.repo.search.impl.DbCmisQueryLanguage" >
|
||||||
<property name="factories">
|
<property name="factories">
|
||||||
<list>
|
<list>
|
||||||
<ref bean="search.indexerAndSearcherFactory" />
|
<ref bean="search.indexerAndSearcherFactory" />
|
||||||
|
@@ -64,8 +64,8 @@
|
|||||||
</property>
|
</property>
|
||||||
<!-- Query collections should be loaded on demand using this component - once loaded thay are available for use -->
|
<!-- Query collections should be loaded on demand using this component - once loaded thay are available for use -->
|
||||||
</bean>
|
</bean>
|
||||||
|
|
||||||
<bean id="search.fts.alfresco.switching" class="org.alfresco.repo.search.impl.solr.DbOrIndexSwitchingQueryLanguage" >
|
<bean id="base.search.fts.alfresco.switching" abstract="true" class="org.alfresco.repo.search.impl.DbOrIndexSwitchingQueryLanguage">
|
||||||
<property name="factories">
|
<property name="factories">
|
||||||
<list>
|
<list>
|
||||||
<ref bean="search.indexerAndSearcherFactory" />
|
<ref bean="search.indexerAndSearcherFactory" />
|
||||||
@@ -80,12 +80,16 @@
|
|||||||
<property name="indexQueryLanguage">
|
<property name="indexQueryLanguage">
|
||||||
<ref bean="search.fts.alfresco.index" />
|
<ref bean="search.fts.alfresco.index" />
|
||||||
</property>
|
</property>
|
||||||
<property name="queryConsistency">
|
|
||||||
<value>${solr.query.fts.queryConsistency}</value>
|
<property name="queryConsistency" value="${query.fts.queryConsistency}"/>
|
||||||
</property>
|
<property name="solrQueryConsistency" value="${solr.query.fts.queryConsistency}"/>
|
||||||
|
|
||||||
|
<!-- Deprecated -->
|
||||||
|
<property name="hybridEnabled" value="${query.hybrid.enabled}"/>
|
||||||
|
<property name="solrHybridEnabled" value="${solr.query.hybrid.enabled}"/>
|
||||||
|
|
||||||
<property name="searchDao" ref="searchDAO"/>
|
<property name="searchDao" ref="searchDAO"/>
|
||||||
<property name="hybridEnabled" value="${solr.query.hybrid.enabled}"/>
|
</bean>
|
||||||
</bean>
|
|
||||||
|
|
||||||
<bean id="search.fts.alfresco.db" class="org.alfresco.repo.search.impl.solr.DbAftsQueryLanguage" >
|
<bean id="search.fts.alfresco.db" class="org.alfresco.repo.search.impl.solr.DbAftsQueryLanguage" >
|
||||||
<property name="dictionaryService" ref="dictionaryService" />
|
<property name="dictionaryService" ref="dictionaryService" />
|
||||||
|
@@ -2,9 +2,14 @@ search.solrTrackingSupport.enabled=true
|
|||||||
search.solrTrackingSupport.ignorePathsForSpecificTypes=false
|
search.solrTrackingSupport.ignorePathsForSpecificTypes=false
|
||||||
search.solrTrackingSupport.ignorePathsForSpecificAspects=false
|
search.solrTrackingSupport.ignorePathsForSpecificAspects=false
|
||||||
|
|
||||||
solr.query.fts.queryConsistency=TRANSACTIONAL_IF_POSSIBLE
|
# Deprecated
|
||||||
solr.query.cmis.queryConsistency=TRANSACTIONAL_IF_POSSIBLE
|
solr.query.fts.queryConsistency=
|
||||||
solr.query.hybrid.enabled=false
|
solr.query.cmis.queryConsistency=
|
||||||
|
solr.query.hybrid.enabled=
|
||||||
|
|
||||||
|
query.fts.queryConsistency=TRANSACTIONAL_IF_POSSIBLE
|
||||||
|
query.cmis.queryConsistency=TRANSACTIONAL_IF_POSSIBLE
|
||||||
|
query.hybrid.enabled=false
|
||||||
|
|
||||||
search.solrShardRegistry.purgeOnInit=false
|
search.solrShardRegistry.purgeOnInit=false
|
||||||
search.solrShardRegistry.shardInstanceTimeoutInSeconds=300
|
search.solrShardRegistry.shardInstanceTimeoutInSeconds=300
|
||||||
|
@@ -99,7 +99,11 @@
|
|||||||
<ref bean="search.indexerAndSearcherFactory" />
|
<ref bean="search.indexerAndSearcherFactory" />
|
||||||
</property>
|
</property>
|
||||||
</bean>
|
</bean>
|
||||||
|
|
||||||
|
<bean id="search.fts.alfresco.switching" parent="base.search.fts.alfresco.switching" >
|
||||||
|
<property name="subsystemName" value="noindex"/>
|
||||||
|
</bean>
|
||||||
|
|
||||||
<bean id="search.fts.alfresco.index" class="org.alfresco.repo.search.impl.solr.NoIndexQueryLanguage" >
|
<bean id="search.fts.alfresco.index" class="org.alfresco.repo.search.impl.solr.NoIndexQueryLanguage" >
|
||||||
<property name="factories">
|
<property name="factories">
|
||||||
<list>
|
<list>
|
||||||
|
@@ -5,7 +5,19 @@
|
|||||||
|
|
||||||
<import resource="../common-opencmis-context.xml" />
|
<import resource="../common-opencmis-context.xml" />
|
||||||
|
|
||||||
<bean id="search.OpenCMISQueryService" class="org.alfresco.repo.search.impl.solr.SolrOpenCMISQueryServiceImpl" >
|
<bean id="search.cmis.alfresco.switching" parent="base.search.cmis.alfresco.switching" >
|
||||||
|
<property name="subsystemName" value="noindex"/>
|
||||||
|
</bean>
|
||||||
|
|
||||||
|
<bean id="search.cmis.alfresco.switching1.1" parent="base.search.cmis.alfresco.switching1.1" >
|
||||||
|
<property name="subsystemName" value="noindex"/>
|
||||||
|
</bean>
|
||||||
|
|
||||||
|
<bean id="search.cmis.strict.switching" parent="base.search.cmis.strict.switching" >
|
||||||
|
<property name="subsystemName" value="noindex"/>
|
||||||
|
</bean>
|
||||||
|
|
||||||
|
<bean id="search.OpenCMISQueryService" class="org.alfresco.repo.search.impl.OpenCMISQueryServiceImpl" >
|
||||||
<property name="cmisDictionaryService">
|
<property name="cmisDictionaryService">
|
||||||
<ref bean="OpenCMISDictionaryService" />
|
<ref bean="OpenCMISDictionaryService" />
|
||||||
</property>
|
</property>
|
||||||
@@ -15,12 +27,12 @@
|
|||||||
<property name="alfrescoDictionaryService">
|
<property name="alfrescoDictionaryService">
|
||||||
<ref bean="dictionaryService" />
|
<ref bean="dictionaryService" />
|
||||||
</property>
|
</property>
|
||||||
<property name="solrQueryLanguage">
|
<property name="queryLanguage">
|
||||||
<ref bean="search.cmis.alfresco.switching" />
|
<ref bean="search.cmis.alfresco.switching" />
|
||||||
</property>
|
</property>
|
||||||
</bean>
|
</bean>
|
||||||
|
|
||||||
<bean id="search.OpenCMISQueryService1.1" class="org.alfresco.repo.search.impl.solr.SolrOpenCMISQueryServiceImpl" >
|
<bean id="search.OpenCMISQueryService1.1" class="org.alfresco.repo.search.impl.OpenCMISQueryServiceImpl" >
|
||||||
<property name="cmisDictionaryService">
|
<property name="cmisDictionaryService">
|
||||||
<ref bean="OpenCMISDictionaryService1.1" />
|
<ref bean="OpenCMISDictionaryService1.1" />
|
||||||
</property>
|
</property>
|
||||||
@@ -30,7 +42,7 @@
|
|||||||
<property name="alfrescoDictionaryService">
|
<property name="alfrescoDictionaryService">
|
||||||
<ref bean="dictionaryService" />
|
<ref bean="dictionaryService" />
|
||||||
</property>
|
</property>
|
||||||
<property name="solrQueryLanguage">
|
<property name="queryLanguage">
|
||||||
<ref bean="search.cmis.alfresco.switching1.1" />
|
<ref bean="search.cmis.alfresco.switching1.1" />
|
||||||
</property>
|
</property>
|
||||||
</bean>
|
</bean>
|
||||||
|
@@ -2,9 +2,14 @@ search.solrTrackingSupport.enabled=true
|
|||||||
search.solrTrackingSupport.ignorePathsForSpecificTypes=false
|
search.solrTrackingSupport.ignorePathsForSpecificTypes=false
|
||||||
search.solrTrackingSupport.ignorePathsForSpecificAspects=false
|
search.solrTrackingSupport.ignorePathsForSpecificAspects=false
|
||||||
|
|
||||||
solr.query.fts.queryConsistency=TRANSACTIONAL_IF_POSSIBLE
|
# Deprecated
|
||||||
solr.query.cmis.queryConsistency=TRANSACTIONAL_IF_POSSIBLE
|
solr.query.fts.queryConsistency=
|
||||||
solr.query.hybrid.enabled=false
|
solr.query.cmis.queryConsistency=
|
||||||
|
solr.query.hybrid.enabled=
|
||||||
|
|
||||||
|
query.fts.queryConsistency=TRANSACTIONAL_IF_POSSIBLE
|
||||||
|
query.cmis.queryConsistency=TRANSACTIONAL_IF_POSSIBLE
|
||||||
|
query.hybrid.enabled=false
|
||||||
|
|
||||||
search.solrShardRegistry.purgeOnInit=false
|
search.solrShardRegistry.purgeOnInit=false
|
||||||
search.solrShardRegistry.shardInstanceTimeoutInSeconds=300
|
search.solrShardRegistry.shardInstanceTimeoutInSeconds=300
|
||||||
|
@@ -4,7 +4,19 @@
|
|||||||
<beans>
|
<beans>
|
||||||
<import resource="../common-opencmis-context.xml" />
|
<import resource="../common-opencmis-context.xml" />
|
||||||
|
|
||||||
<bean id="search.OpenCMISQueryService" class="org.alfresco.repo.search.impl.solr.SolrOpenCMISQueryServiceImpl" >
|
<bean id="search.cmis.alfresco.switching" parent="base.search.cmis.alfresco.switching" >
|
||||||
|
<property name="subsystemName" value="solr"/>
|
||||||
|
</bean>
|
||||||
|
|
||||||
|
<bean id="search.cmis.alfresco.switching1.1" parent="base.search.cmis.alfresco.switching1.1" >
|
||||||
|
<property name="subsystemName" value="solr"/>
|
||||||
|
</bean>
|
||||||
|
|
||||||
|
<bean id="search.cmis.strict.switching" parent="base.search.cmis.strict.switching" >
|
||||||
|
<property name="subsystemName" value="solr"/>
|
||||||
|
</bean>
|
||||||
|
|
||||||
|
<bean id="search.OpenCMISQueryService" class="org.alfresco.repo.search.impl.OpenCMISQueryServiceImpl" >
|
||||||
<property name="cmisDictionaryService">
|
<property name="cmisDictionaryService">
|
||||||
<ref bean="OpenCMISDictionaryService" />
|
<ref bean="OpenCMISDictionaryService" />
|
||||||
</property>
|
</property>
|
||||||
@@ -14,12 +26,12 @@
|
|||||||
<property name="alfrescoDictionaryService">
|
<property name="alfrescoDictionaryService">
|
||||||
<ref bean="dictionaryService" />
|
<ref bean="dictionaryService" />
|
||||||
</property>
|
</property>
|
||||||
<property name="solrQueryLanguage">
|
<property name="queryLanguage">
|
||||||
<ref bean="search.cmis.alfresco.switching" />
|
<ref bean="search.cmis.alfresco.switching" />
|
||||||
</property>
|
</property>
|
||||||
</bean>
|
</bean>
|
||||||
|
|
||||||
<bean id="search.OpenCMISQueryService1.1" class="org.alfresco.repo.search.impl.solr.SolrOpenCMISQueryServiceImpl" >
|
<bean id="search.OpenCMISQueryService1.1" class="org.alfresco.repo.search.impl.OpenCMISQueryServiceImpl" >
|
||||||
<property name="cmisDictionaryService">
|
<property name="cmisDictionaryService">
|
||||||
<ref bean="OpenCMISDictionaryService1.1" />
|
<ref bean="OpenCMISDictionaryService1.1" />
|
||||||
</property>
|
</property>
|
||||||
@@ -29,7 +41,7 @@
|
|||||||
<property name="alfrescoDictionaryService">
|
<property name="alfrescoDictionaryService">
|
||||||
<ref bean="dictionaryService" />
|
<ref bean="dictionaryService" />
|
||||||
</property>
|
</property>
|
||||||
<property name="solrQueryLanguage">
|
<property name="queryLanguage">
|
||||||
<ref bean="search.cmis.alfresco.switching1.1" />
|
<ref bean="search.cmis.alfresco.switching1.1" />
|
||||||
</property>
|
</property>
|
||||||
</bean>
|
</bean>
|
||||||
|
@@ -168,7 +168,11 @@
|
|||||||
</property>
|
</property>
|
||||||
|
|
||||||
</bean>
|
</bean>
|
||||||
|
|
||||||
|
<bean id="search.fts.alfresco.switching" parent="base.search.fts.alfresco.switching" >
|
||||||
|
<property name="subsystemName" value="solr"/>
|
||||||
|
</bean>
|
||||||
|
|
||||||
<bean id="search.index.alfresco" class="org.alfresco.repo.search.impl.solr.SolrQueryLanguage" >
|
<bean id="search.index.alfresco" class="org.alfresco.repo.search.impl.solr.SolrQueryLanguage" >
|
||||||
<property name="factories">
|
<property name="factories">
|
||||||
<list>
|
<list>
|
||||||
|
@@ -2,9 +2,14 @@ search.solrTrackingSupport.enabled=true
|
|||||||
search.solrTrackingSupport.ignorePathsForSpecificTypes=false
|
search.solrTrackingSupport.ignorePathsForSpecificTypes=false
|
||||||
search.solrTrackingSupport.ignorePathsForSpecificAspects=false
|
search.solrTrackingSupport.ignorePathsForSpecificAspects=false
|
||||||
|
|
||||||
solr.query.fts.queryConsistency=TRANSACTIONAL_IF_POSSIBLE
|
# Deprecated
|
||||||
solr.query.cmis.queryConsistency=TRANSACTIONAL_IF_POSSIBLE
|
solr.query.fts.queryConsistency=
|
||||||
solr.query.hybrid.enabled=false
|
solr.query.cmis.queryConsistency=
|
||||||
|
solr.query.hybrid.enabled=
|
||||||
|
|
||||||
|
query.fts.queryConsistency=TRANSACTIONAL_IF_POSSIBLE
|
||||||
|
query.cmis.queryConsistency=TRANSACTIONAL_IF_POSSIBLE
|
||||||
|
query.hybrid.enabled=false
|
||||||
|
|
||||||
search.solrShardRegistry.purgeOnInit=false
|
search.solrShardRegistry.purgeOnInit=false
|
||||||
search.solrShardRegistry.shardInstanceTimeoutInSeconds=300
|
search.solrShardRegistry.shardInstanceTimeoutInSeconds=300
|
||||||
|
@@ -4,7 +4,19 @@
|
|||||||
<beans>
|
<beans>
|
||||||
<import resource="../common-opencmis-context.xml" />
|
<import resource="../common-opencmis-context.xml" />
|
||||||
|
|
||||||
<bean id="search.OpenCMISQueryService" class="org.alfresco.repo.search.impl.solr.SolrOpenCMISQueryServiceImpl" >
|
<bean id="search.cmis.alfresco.switching" parent="base.search.cmis.alfresco.switching" >
|
||||||
|
<property name="subsystemName" value="solr4"/>
|
||||||
|
</bean>
|
||||||
|
|
||||||
|
<bean id="search.cmis.alfresco.switching1.1" parent="base.search.cmis.alfresco.switching1.1" >
|
||||||
|
<property name="subsystemName" value="solr4"/>
|
||||||
|
</bean>
|
||||||
|
|
||||||
|
<bean id="search.cmis.strict.switching" parent="base.search.cmis.strict.switching" >
|
||||||
|
<property name="subsystemName" value="solr4"/>
|
||||||
|
</bean>
|
||||||
|
|
||||||
|
<bean id="search.OpenCMISQueryService" class="org.alfresco.repo.search.impl.OpenCMISQueryServiceImpl" >
|
||||||
<property name="cmisDictionaryService">
|
<property name="cmisDictionaryService">
|
||||||
<ref bean="OpenCMISDictionaryService" />
|
<ref bean="OpenCMISDictionaryService" />
|
||||||
</property>
|
</property>
|
||||||
@@ -14,12 +26,12 @@
|
|||||||
<property name="alfrescoDictionaryService">
|
<property name="alfrescoDictionaryService">
|
||||||
<ref bean="dictionaryService" />
|
<ref bean="dictionaryService" />
|
||||||
</property>
|
</property>
|
||||||
<property name="solrQueryLanguage">
|
<property name="queryLanguage">
|
||||||
<ref bean="search.cmis.alfresco.switching" />
|
<ref bean="search.cmis.alfresco.switching" />
|
||||||
</property>
|
</property>
|
||||||
</bean>
|
</bean>
|
||||||
|
|
||||||
<bean id="search.OpenCMISQueryService1.1" class="org.alfresco.repo.search.impl.solr.SolrOpenCMISQueryServiceImpl" >
|
<bean id="search.OpenCMISQueryService1.1" class="org.alfresco.repo.search.impl.OpenCMISQueryServiceImpl" >
|
||||||
<property name="cmisDictionaryService">
|
<property name="cmisDictionaryService">
|
||||||
<ref bean="OpenCMISDictionaryService1.1" />
|
<ref bean="OpenCMISDictionaryService1.1" />
|
||||||
</property>
|
</property>
|
||||||
@@ -29,7 +41,7 @@
|
|||||||
<property name="alfrescoDictionaryService">
|
<property name="alfrescoDictionaryService">
|
||||||
<ref bean="dictionaryService" />
|
<ref bean="dictionaryService" />
|
||||||
</property>
|
</property>
|
||||||
<property name="solrQueryLanguage">
|
<property name="queryLanguage">
|
||||||
<ref bean="search.cmis.alfresco.switching1.1" />
|
<ref bean="search.cmis.alfresco.switching1.1" />
|
||||||
</property>
|
</property>
|
||||||
</bean>
|
</bean>
|
||||||
|
@@ -218,6 +218,10 @@
|
|||||||
</property>
|
</property>
|
||||||
</bean>
|
</bean>
|
||||||
|
|
||||||
|
<bean id="search.fts.alfresco.switching" parent="base.search.fts.alfresco.switching" >
|
||||||
|
<property name="subsystemName" value="sol4"/>
|
||||||
|
</bean>
|
||||||
|
|
||||||
<bean id="search.fts.alfresco.index" class="org.alfresco.repo.search.impl.solr.SolrQueryLanguage" >
|
<bean id="search.fts.alfresco.index" class="org.alfresco.repo.search.impl.solr.SolrQueryLanguage" >
|
||||||
<property name="factories">
|
<property name="factories">
|
||||||
<list>
|
<list>
|
||||||
|
@@ -2,9 +2,14 @@ search.solrTrackingSupport.enabled=true
|
|||||||
search.solrTrackingSupport.ignorePathsForSpecificTypes=false
|
search.solrTrackingSupport.ignorePathsForSpecificTypes=false
|
||||||
search.solrTrackingSupport.ignorePathsForSpecificAspects=false
|
search.solrTrackingSupport.ignorePathsForSpecificAspects=false
|
||||||
|
|
||||||
solr.query.fts.queryConsistency=TRANSACTIONAL_IF_POSSIBLE
|
# Deprecated
|
||||||
solr.query.cmis.queryConsistency=TRANSACTIONAL_IF_POSSIBLE
|
solr.query.fts.queryConsistency=
|
||||||
solr.query.hybrid.enabled=false
|
solr.query.cmis.queryConsistency=
|
||||||
|
solr.query.hybrid.enabled=
|
||||||
|
|
||||||
|
query.fts.queryConsistency=TRANSACTIONAL_IF_POSSIBLE
|
||||||
|
query.cmis.queryConsistency=TRANSACTIONAL_IF_POSSIBLE
|
||||||
|
query.hybrid.enabled=false
|
||||||
|
|
||||||
search.solrShardRegistry.purgeOnInit=false
|
search.solrShardRegistry.purgeOnInit=false
|
||||||
search.solrShardRegistry.shardInstanceTimeoutInSeconds=300
|
search.solrShardRegistry.shardInstanceTimeoutInSeconds=300
|
||||||
|
@@ -4,7 +4,19 @@
|
|||||||
<beans>
|
<beans>
|
||||||
<import resource="../common-opencmis-context.xml" />
|
<import resource="../common-opencmis-context.xml" />
|
||||||
|
|
||||||
<bean id="search.OpenCMISQueryService" class="org.alfresco.repo.search.impl.solr.SolrOpenCMISQueryServiceImpl" >
|
<bean id="search.cmis.alfresco.switching" parent="base.search.cmis.alfresco.switching" >
|
||||||
|
<property name="subsystemName" value="solr6"/>
|
||||||
|
</bean>
|
||||||
|
|
||||||
|
<bean id="search.cmis.alfresco.switching1.1" parent="base.search.cmis.alfresco.switching1.1" >
|
||||||
|
<property name="subsystemName" value="solr6"/>
|
||||||
|
</bean>
|
||||||
|
|
||||||
|
<bean id="search.cmis.strict.switching" parent="base.search.cmis.strict.switching" >
|
||||||
|
<property name="subsystemName" value="solr6"/>
|
||||||
|
</bean>
|
||||||
|
|
||||||
|
<bean id="search.OpenCMISQueryService" class="org.alfresco.repo.search.impl.OpenCMISQueryServiceImpl" >
|
||||||
<property name="cmisDictionaryService">
|
<property name="cmisDictionaryService">
|
||||||
<ref bean="OpenCMISDictionaryService" />
|
<ref bean="OpenCMISDictionaryService" />
|
||||||
</property>
|
</property>
|
||||||
@@ -14,12 +26,12 @@
|
|||||||
<property name="alfrescoDictionaryService">
|
<property name="alfrescoDictionaryService">
|
||||||
<ref bean="dictionaryService" />
|
<ref bean="dictionaryService" />
|
||||||
</property>
|
</property>
|
||||||
<property name="solrQueryLanguage">
|
<property name="queryLanguage">
|
||||||
<ref bean="search.cmis.alfresco.switching" />
|
<ref bean="search.cmis.alfresco.switching" />
|
||||||
</property>
|
</property>
|
||||||
</bean>
|
</bean>
|
||||||
|
|
||||||
<bean id="search.OpenCMISQueryService1.1" class="org.alfresco.repo.search.impl.solr.SolrOpenCMISQueryServiceImpl" >
|
<bean id="search.OpenCMISQueryService1.1" class="org.alfresco.repo.search.impl.OpenCMISQueryServiceImpl" >
|
||||||
<property name="cmisDictionaryService">
|
<property name="cmisDictionaryService">
|
||||||
<ref bean="OpenCMISDictionaryService1.1" />
|
<ref bean="OpenCMISDictionaryService1.1" />
|
||||||
</property>
|
</property>
|
||||||
@@ -29,7 +41,7 @@
|
|||||||
<property name="alfrescoDictionaryService">
|
<property name="alfrescoDictionaryService">
|
||||||
<ref bean="dictionaryService" />
|
<ref bean="dictionaryService" />
|
||||||
</property>
|
</property>
|
||||||
<property name="solrQueryLanguage">
|
<property name="queryLanguage">
|
||||||
<ref bean="search.cmis.alfresco.switching1.1" />
|
<ref bean="search.cmis.alfresco.switching1.1" />
|
||||||
</property>
|
</property>
|
||||||
</bean>
|
</bean>
|
||||||
|
@@ -238,6 +238,10 @@
|
|||||||
</property>
|
</property>
|
||||||
</bean>
|
</bean>
|
||||||
|
|
||||||
|
<bean id="search.fts.alfresco.switching" parent="base.search.fts.alfresco.switching" >
|
||||||
|
<property name="subsystemName" value="solr6"/>
|
||||||
|
</bean>
|
||||||
|
|
||||||
<bean id="search.fts.alfresco.index" class="org.alfresco.repo.search.impl.solr.SolrQueryLanguage" >
|
<bean id="search.fts.alfresco.index" class="org.alfresco.repo.search.impl.solr.SolrQueryLanguage" >
|
||||||
<property name="factories">
|
<property name="factories">
|
||||||
<list>
|
<list>
|
||||||
|
@@ -176,6 +176,7 @@ import org.junit.runners.Suite;
|
|||||||
org.alfresco.repo.action.CompositeActionImplTest.class,
|
org.alfresco.repo.action.CompositeActionImplTest.class,
|
||||||
org.alfresco.repo.action.CompositeActionConditionImplTest.class,
|
org.alfresco.repo.action.CompositeActionConditionImplTest.class,
|
||||||
org.alfresco.repo.action.executer.TransformActionExecuterTest.class,
|
org.alfresco.repo.action.executer.TransformActionExecuterTest.class,
|
||||||
|
org.alfresco.repo.action.PrivateActionValidationTest.class,
|
||||||
org.alfresco.repo.audit.AuditableAnnotationTest.class,
|
org.alfresco.repo.audit.AuditableAnnotationTest.class,
|
||||||
org.alfresco.repo.audit.PropertyAuditFilterTest.class,
|
org.alfresco.repo.audit.PropertyAuditFilterTest.class,
|
||||||
org.alfresco.repo.audit.access.NodeChangeTest.class,
|
org.alfresco.repo.audit.access.NodeChangeTest.class,
|
||||||
|
@@ -25,6 +25,9 @@
|
|||||||
*/
|
*/
|
||||||
package org.alfresco.opencmis;
|
package org.alfresco.opencmis;
|
||||||
|
|
||||||
|
import static java.time.Duration.of;
|
||||||
|
import static java.time.temporal.ChronoUnit.MILLIS;
|
||||||
|
|
||||||
import java.io.ByteArrayInputStream;
|
import java.io.ByteArrayInputStream;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
@@ -61,7 +64,7 @@ import org.alfresco.util.ApplicationContextHelper;
|
|||||||
import org.alfresco.util.FileFilterMode.Client;
|
import org.alfresco.util.FileFilterMode.Client;
|
||||||
import org.alfresco.util.GUID;
|
import org.alfresco.util.GUID;
|
||||||
import org.alfresco.util.TempFileProvider;
|
import org.alfresco.util.TempFileProvider;
|
||||||
import org.alfresco.util.testing.category.FrequentlyFailingTests;
|
import org.alfresco.util.TestHelper;
|
||||||
import org.alfresco.util.testing.category.LuceneTests;
|
import org.alfresco.util.testing.category.LuceneTests;
|
||||||
import org.aopalliance.intercept.MethodInterceptor;
|
import org.aopalliance.intercept.MethodInterceptor;
|
||||||
import org.aopalliance.intercept.MethodInvocation;
|
import org.aopalliance.intercept.MethodInvocation;
|
||||||
@@ -77,6 +80,7 @@ import org.apache.chemistry.opencmis.commons.data.ContentStream;
|
|||||||
import org.apache.chemistry.opencmis.commons.enums.BaseTypeId;
|
import org.apache.chemistry.opencmis.commons.enums.BaseTypeId;
|
||||||
import org.apache.chemistry.opencmis.commons.enums.BindingType;
|
import org.apache.chemistry.opencmis.commons.enums.BindingType;
|
||||||
import org.apache.chemistry.opencmis.commons.enums.VersioningState;
|
import org.apache.chemistry.opencmis.commons.enums.VersioningState;
|
||||||
|
import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
|
||||||
import org.apache.chemistry.opencmis.commons.exceptions.CmisStorageException;
|
import org.apache.chemistry.opencmis.commons.exceptions.CmisStorageException;
|
||||||
import org.apache.chemistry.opencmis.commons.impl.dataobjects.ContentStreamImpl;
|
import org.apache.chemistry.opencmis.commons.impl.dataobjects.ContentStreamImpl;
|
||||||
import org.apache.chemistry.opencmis.commons.impl.server.AbstractServiceFactory;
|
import org.apache.chemistry.opencmis.commons.impl.server.AbstractServiceFactory;
|
||||||
@@ -87,6 +91,7 @@ import org.apache.chemistry.opencmis.server.shared.TempStoreOutputStreamFactory;
|
|||||||
import org.junit.experimental.categories.Category;
|
import org.junit.experimental.categories.Category;
|
||||||
import org.springframework.aop.framework.ProxyFactory;
|
import org.springframework.aop.framework.ProxyFactory;
|
||||||
import org.springframework.context.ApplicationContext;
|
import org.springframework.context.ApplicationContext;
|
||||||
|
import org.springframework.dao.ConcurrencyFailureException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tests basic local CMIS interaction
|
* Tests basic local CMIS interaction
|
||||||
@@ -467,7 +472,6 @@ public class OpenCmisLocalTest extends TestCase
|
|||||||
* This test would have fit better within CheckOutCheckInServiceImplTest but
|
* This test would have fit better within CheckOutCheckInServiceImplTest but
|
||||||
* was added here to make use of existing methods
|
* was added here to make use of existing methods
|
||||||
*/
|
*/
|
||||||
@Category(FrequentlyFailingTests.class) // ACS-962
|
|
||||||
public void testCancelCheckoutWhileInCheckedOutState()
|
public void testCancelCheckoutWhileInCheckedOutState()
|
||||||
{
|
{
|
||||||
ServiceRegistry serviceRegistry = (ServiceRegistry) ctx.getBean(ServiceRegistry.SERVICE_REGISTRY);
|
ServiceRegistry serviceRegistry = (ServiceRegistry) ctx.getBean(ServiceRegistry.SERVICE_REGISTRY);
|
||||||
@@ -484,7 +488,7 @@ public class OpenCmisLocalTest extends TestCase
|
|||||||
|
|
||||||
// Set file properties
|
// Set file properties
|
||||||
String docname = "myDoc-" + GUID.generate() + ".txt";
|
String docname = "myDoc-" + GUID.generate() + ".txt";
|
||||||
Map<String, String> props = new HashMap<String, String>();
|
Map<String, String> props = new HashMap<>();
|
||||||
{
|
{
|
||||||
props.put(PropertyIds.OBJECT_TYPE_ID, BaseTypeId.CMIS_DOCUMENT.value());
|
props.put(PropertyIds.OBJECT_TYPE_ID, BaseTypeId.CMIS_DOCUMENT.value());
|
||||||
props.put(PropertyIds.NAME, docname);
|
props.put(PropertyIds.NAME, docname);
|
||||||
@@ -501,7 +505,9 @@ public class OpenCmisLocalTest extends TestCase
|
|||||||
NodeRef doc1WorkingCopy = cociService.getWorkingCopy(doc1NodeRef);
|
NodeRef doc1WorkingCopy = cociService.getWorkingCopy(doc1NodeRef);
|
||||||
|
|
||||||
/* Cancel Checkout */
|
/* Cancel Checkout */
|
||||||
cociService.cancelCheckout(doc1WorkingCopy);
|
TestHelper.waitForMethodToFinish(of(100, MILLIS), () ->
|
||||||
|
cociService.cancelCheckout(doc1WorkingCopy),
|
||||||
|
CmisRuntimeException.class, ConcurrencyFailureException.class);
|
||||||
|
|
||||||
/* Check if both the working copy and the document were deleted */
|
/* Check if both the working copy and the document were deleted */
|
||||||
NodeService nodeService = serviceRegistry.getNodeService();
|
NodeService nodeService = serviceRegistry.getNodeService();
|
||||||
|
@@ -2,7 +2,7 @@
|
|||||||
* #%L
|
* #%L
|
||||||
* Alfresco Repository
|
* Alfresco Repository
|
||||||
* %%
|
* %%
|
||||||
* Copyright (C) 2005 - 2016 Alfresco Software Limited
|
* Copyright (C) 2005 - 2022 Alfresco Software Limited
|
||||||
* %%
|
* %%
|
||||||
* This file is part of the Alfresco software.
|
* This file is part of the Alfresco software.
|
||||||
* If the software was purchased under a paid Alfresco license, the terms of
|
* If the software was purchased under a paid Alfresco license, the terms of
|
||||||
@@ -25,28 +25,27 @@
|
|||||||
*/
|
*/
|
||||||
package org.alfresco.repo.action;
|
package org.alfresco.repo.action;
|
||||||
|
|
||||||
|
import static org.alfresco.repo.action.ActionExecutionContext.builder;
|
||||||
|
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.Properties;
|
||||||
|
|
||||||
import org.alfresco.model.ContentModel;
|
import org.alfresco.model.ContentModel;
|
||||||
import org.alfresco.repo.action.evaluator.ComparePropertyValueEvaluator;
|
import org.alfresco.repo.action.evaluator.ComparePropertyValueEvaluator;
|
||||||
import org.alfresco.repo.action.evaluator.InCategoryEvaluator;
|
import org.alfresco.repo.action.evaluator.InCategoryEvaluator;
|
||||||
import org.alfresco.repo.action.evaluator.NoConditionEvaluator;
|
import org.alfresco.repo.action.evaluator.NoConditionEvaluator;
|
||||||
import org.alfresco.repo.action.evaluator.compare.ComparePropertyValueOperation;
|
import org.alfresco.repo.action.evaluator.compare.ComparePropertyValueOperation;
|
||||||
import org.alfresco.repo.action.executer.ActionExecuter;
|
|
||||||
import org.alfresco.repo.action.executer.ActionExecuterAbstractBase;
|
import org.alfresco.repo.action.executer.ActionExecuterAbstractBase;
|
||||||
import org.alfresco.repo.action.executer.AddFeaturesActionExecuter;
|
import org.alfresco.repo.action.executer.AddFeaturesActionExecuter;
|
||||||
import org.alfresco.repo.action.executer.CheckInActionExecuter;
|
import org.alfresco.repo.action.executer.CheckInActionExecuter;
|
||||||
import org.alfresco.repo.action.executer.CheckOutActionExecuter;
|
import org.alfresco.repo.action.executer.CheckOutActionExecuter;
|
||||||
import org.alfresco.repo.action.executer.CompositeActionExecuter;
|
import org.alfresco.repo.action.executer.CompositeActionExecuter;
|
||||||
import org.alfresco.repo.action.executer.MoveActionExecuter;
|
import org.alfresco.repo.action.executer.MoveActionExecuter;
|
||||||
import org.alfresco.repo.action.executer.ScriptActionExecuter;
|
|
||||||
import org.alfresco.repo.content.MimetypeMap;
|
import org.alfresco.repo.content.MimetypeMap;
|
||||||
import org.alfresco.repo.security.authentication.AuthenticationUtil;
|
import org.alfresco.repo.security.authentication.AuthenticationUtil;
|
||||||
import org.alfresco.repo.transaction.RetryingTransactionHelper;
|
import org.alfresco.repo.transaction.RetryingTransactionHelper;
|
||||||
@@ -65,19 +64,14 @@ import org.alfresco.service.cmr.action.CompositeActionCondition;
|
|||||||
import org.alfresco.service.cmr.action.ParameterDefinition;
|
import org.alfresco.service.cmr.action.ParameterDefinition;
|
||||||
import org.alfresco.service.cmr.coci.CheckOutCheckInService;
|
import org.alfresco.service.cmr.coci.CheckOutCheckInService;
|
||||||
import org.alfresco.service.cmr.repository.ContentData;
|
import org.alfresco.service.cmr.repository.ContentData;
|
||||||
import org.alfresco.service.cmr.repository.ContentWriter;
|
|
||||||
import org.alfresco.service.cmr.repository.NodeRef;
|
import org.alfresco.service.cmr.repository.NodeRef;
|
||||||
import org.alfresco.service.cmr.repository.NodeService;
|
import org.alfresco.service.cmr.repository.NodeService;
|
||||||
import org.alfresco.service.cmr.security.PermissionService;
|
import org.alfresco.service.cmr.security.PermissionService;
|
||||||
import org.alfresco.service.cmr.security.PersonService;
|
|
||||||
import org.alfresco.service.namespace.NamespaceService;
|
|
||||||
import org.alfresco.service.namespace.QName;
|
import org.alfresco.service.namespace.QName;
|
||||||
import org.alfresco.service.transaction.TransactionService;
|
import org.alfresco.service.transaction.TransactionService;
|
||||||
import org.alfresco.test_category.BaseSpringTestsCategory;
|
import org.alfresco.test_category.BaseSpringTestsCategory;
|
||||||
import org.alfresco.util.ApplicationContextHelper;
|
|
||||||
import org.alfresco.util.BaseAlfrescoSpringTest;
|
import org.alfresco.util.BaseAlfrescoSpringTest;
|
||||||
import org.alfresco.util.GUID;
|
import org.alfresco.util.GUID;
|
||||||
import org.alfresco.util.PropertyMap;
|
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.junit.experimental.categories.Category;
|
import org.junit.experimental.categories.Category;
|
||||||
@@ -103,13 +97,18 @@ public class ActionServiceImplTest extends BaseAlfrescoSpringTest
|
|||||||
private NodeRef nodeRef;
|
private NodeRef nodeRef;
|
||||||
private NodeRef folder;
|
private NodeRef folder;
|
||||||
private RetryingTransactionHelper transactionHelper;
|
private RetryingTransactionHelper transactionHelper;
|
||||||
|
private Properties globalConfig;
|
||||||
|
private RuntimeActionService runtimeActionService;
|
||||||
|
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
public void before() throws Exception
|
public void before() throws Exception
|
||||||
{
|
{
|
||||||
super.before();
|
super.before();
|
||||||
|
|
||||||
this.transactionHelper = (RetryingTransactionHelper)this.applicationContext.getBean("retryingTransactionHelper");
|
this.transactionHelper = applicationContext.getBean("retryingTransactionHelper", RetryingTransactionHelper.class);
|
||||||
|
this.globalConfig = applicationContext.getBean("global-properties", Properties.class);
|
||||||
|
this.runtimeActionService = this.applicationContext.getBean("actionService", RuntimeActionService.class);
|
||||||
|
|
||||||
// Create the node used for tests
|
// Create the node used for tests
|
||||||
this.nodeRef = this.nodeService.createNode(
|
this.nodeRef = this.nodeService.createNode(
|
||||||
@@ -1295,6 +1294,89 @@ public class ActionServiceImplTest extends BaseAlfrescoSpringTest
|
|||||||
assertEquals(123455, action.getExecutionEndDate().getTime());
|
assertEquals(123455, action.getExecutionEndDate().getTime());
|
||||||
assertEquals(null, action.getExecutionFailureMessage());
|
assertEquals(null, action.getExecutionFailureMessage());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testActionExposureBasedOnConfiguration()
|
||||||
|
{
|
||||||
|
globalConfig.remove("org.alfresco.repo.action.public-test-action.exposed");
|
||||||
|
globalConfig.remove("org.alfresco.repo.action.source.public-test-action.exposed");
|
||||||
|
globalConfig.remove("org.alfresco.repo.action.unknown.public-test-action.exposed");
|
||||||
|
assertTrue(runtimeActionService.isExposed(builder("public-test-action").build()));
|
||||||
|
assertTrue(runtimeActionService.isExposed(builder("public-test-action").withExecutionSource("source").build()));
|
||||||
|
assertTrue(runtimeActionService.isExposed(builder("public-test-action").withExecutionSource("unknown").build()));
|
||||||
|
|
||||||
|
globalConfig.setProperty("org.alfresco.repo.action.public-test-action.exposed", "true");
|
||||||
|
globalConfig.remove("org.alfresco.repo.action.source.public-test-action.exposed");
|
||||||
|
globalConfig.remove("org.alfresco.repo.action.unknown.public-test-action.exposed");
|
||||||
|
assertTrue(runtimeActionService.isExposed(builder("public-test-action").build()));
|
||||||
|
assertTrue(runtimeActionService.isExposed(builder("public-test-action").withExecutionSource("source").build()));
|
||||||
|
assertTrue(runtimeActionService.isExposed(builder("public-test-action").withExecutionSource("unknown").build()));
|
||||||
|
|
||||||
|
globalConfig.setProperty("org.alfresco.repo.action.public-test-action.exposed", "false");
|
||||||
|
globalConfig.remove("org.alfresco.repo.action.source.public-test-action.exposed");
|
||||||
|
globalConfig.remove("org.alfresco.repo.action.unknown.public-test-action.exposed");
|
||||||
|
assertFalse(runtimeActionService.isExposed(builder("public-test-action").build()));
|
||||||
|
assertFalse(runtimeActionService.isExposed(builder("public-test-action").withExecutionSource("source").build()));
|
||||||
|
assertFalse(runtimeActionService.isExposed(builder("public-test-action").withExecutionSource("unknown").build()));
|
||||||
|
|
||||||
|
globalConfig.remove("org.alfresco.repo.action.public-test-action.exposed");
|
||||||
|
globalConfig.setProperty("org.alfresco.repo.action.source.public-test-action.exposed", "true");
|
||||||
|
globalConfig.remove("org.alfresco.repo.action.unknown.public-test-action.exposed");
|
||||||
|
assertTrue(runtimeActionService.isExposed(builder("public-test-action").build()));
|
||||||
|
assertTrue(runtimeActionService.isExposed(builder("public-test-action").withExecutionSource("source").build()));
|
||||||
|
assertTrue(runtimeActionService.isExposed(builder("public-test-action").withExecutionSource("unknown").build()));
|
||||||
|
|
||||||
|
globalConfig.remove("org.alfresco.repo.action.public-test-action.exposed");
|
||||||
|
globalConfig.setProperty("org.alfresco.repo.action.source.public-test-action.exposed", "false");
|
||||||
|
globalConfig.remove("org.alfresco.repo.action.unknown.public-test-action.exposed");
|
||||||
|
assertTrue(runtimeActionService.isExposed(builder("public-test-action").build()));
|
||||||
|
assertFalse(runtimeActionService.isExposed(builder("public-test-action").withExecutionSource("source").build()));
|
||||||
|
assertTrue(runtimeActionService.isExposed(builder("public-test-action").withExecutionSource("unknown").build()));
|
||||||
|
|
||||||
|
globalConfig.remove("org.alfresco.repo.action.private-test-action.exposed");
|
||||||
|
globalConfig.remove("org.alfresco.repo.action.source.private-test-action.exposed");
|
||||||
|
globalConfig.remove("org.alfresco.repo.action.unknown.private-test-action.exposed");
|
||||||
|
assertFalse(runtimeActionService.isExposed(builder("private-test-action").build()));
|
||||||
|
assertFalse(runtimeActionService.isExposed(builder("private-test-action").withExecutionSource("source").build()));
|
||||||
|
assertFalse(runtimeActionService.isExposed(builder("private-test-action").withExecutionSource("unknown").build()));
|
||||||
|
|
||||||
|
globalConfig.setProperty("org.alfresco.repo.action.private-test-action.exposed", "true");
|
||||||
|
globalConfig.remove("org.alfresco.repo.action.source.private-test-action.exposed");
|
||||||
|
globalConfig.remove("org.alfresco.repo.action.unknown.private-test-action.exposed");
|
||||||
|
assertTrue(runtimeActionService.isExposed(builder("private-test-action").build()));
|
||||||
|
assertTrue(runtimeActionService.isExposed(builder("private-test-action").withExecutionSource("source").build()));
|
||||||
|
assertTrue(runtimeActionService.isExposed(builder("private-test-action").withExecutionSource("unknown").build()));
|
||||||
|
|
||||||
|
globalConfig.setProperty("org.alfresco.repo.action.private-test-action.exposed", "false");
|
||||||
|
globalConfig.remove("org.alfresco.repo.action.source.private-test-action.exposed");
|
||||||
|
globalConfig.remove("org.alfresco.repo.action.unknown.private-test-action.exposed");
|
||||||
|
assertFalse(runtimeActionService.isExposed(builder("private-test-action").build()));
|
||||||
|
assertFalse(runtimeActionService.isExposed(builder("private-test-action").withExecutionSource("source").build()));
|
||||||
|
assertFalse(runtimeActionService.isExposed(builder("private-test-action").withExecutionSource("unknown").build()));
|
||||||
|
|
||||||
|
globalConfig.remove("org.alfresco.repo.action.private-test-action.exposed");
|
||||||
|
globalConfig.setProperty("org.alfresco.repo.action.source.private-test-action.exposed", "true");
|
||||||
|
globalConfig.remove("org.alfresco.repo.action.unknown.private-test-action.exposed");
|
||||||
|
assertFalse(runtimeActionService.isExposed(builder("private-test-action").build()));
|
||||||
|
assertTrue(runtimeActionService.isExposed(builder("private-test-action").withExecutionSource("source").build()));
|
||||||
|
assertFalse(runtimeActionService.isExposed(builder("private-test-action").withExecutionSource("unknown").build()));
|
||||||
|
|
||||||
|
globalConfig.remove("org.alfresco.repo.action.private-test-action.exposed");
|
||||||
|
globalConfig.setProperty("org.alfresco.repo.action.source.private-test-action.exposed", "false");
|
||||||
|
globalConfig.remove("org.alfresco.repo.action.unknown.private-test-action.exposed");
|
||||||
|
assertFalse(runtimeActionService.isExposed(builder("private-test-action").build()));
|
||||||
|
assertFalse(runtimeActionService.isExposed(builder("private-test-action").withExecutionSource("source").build()));
|
||||||
|
assertFalse(runtimeActionService.isExposed(builder("private-test-action").withExecutionSource("unknown").build()));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testIfGlobalConfigurationIsUsedEvenIfNotInjectedBySpring()
|
||||||
|
{
|
||||||
|
TestExtendedActionServiceImpl extended = applicationContext.getBean("extendedActionServiceWithoutConfigurationProperty", TestExtendedActionServiceImpl.class);
|
||||||
|
|
||||||
|
assertNotNull(extended.getConfigurationProperties());
|
||||||
|
assertSame(globalConfig, extended.getConfigurationProperties());
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This method returns an {@link Action} which will fail when executed.
|
* This method returns an {@link Action} which will fail when executed.
|
||||||
@@ -1509,8 +1591,26 @@ public class ActionServiceImplTest extends BaseAlfrescoSpringTest
|
|||||||
throw new ActionServiceTransientException("action failed intentionally in " + TransientFailActionExecuter.class.getSimpleName());
|
throw new ActionServiceTransientException("action failed intentionally in " + TransientFailActionExecuter.class.getSimpleName());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public static class NoOpActionExecuter extends ActionExecuterAbstractBase
|
||||||
|
{
|
||||||
|
@Override
|
||||||
|
protected void addParameterDefinitions(List<ParameterDefinition> paramList)
|
||||||
|
{
|
||||||
|
//do nothing
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void executeImpl(Action action, NodeRef actionedUponNodeRef)
|
||||||
|
{
|
||||||
|
//do nothing
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class TestExtendedActionServiceImpl extends ActionServiceImpl
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
protected static class CancellableSleepAction extends ActionImpl implements CancellableAction
|
protected static class CancellableSleepAction extends ActionImpl implements CancellableAction
|
||||||
{
|
{
|
||||||
|
@@ -0,0 +1,152 @@
|
|||||||
|
/*
|
||||||
|
* #%L
|
||||||
|
* Alfresco Repository
|
||||||
|
* %%
|
||||||
|
* Copyright (C) 2005 - 2022 Alfresco Software Limited
|
||||||
|
* %%
|
||||||
|
* This file is part of the Alfresco software.
|
||||||
|
* If the software was purchased under a paid Alfresco license, the terms of
|
||||||
|
* the paid license agreement will prevail. Otherwise, the software is
|
||||||
|
* provided under the following open source license terms:
|
||||||
|
*
|
||||||
|
* Alfresco is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Lesser General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* Alfresco is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU Lesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public License
|
||||||
|
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
* #L%
|
||||||
|
*/
|
||||||
|
package org.alfresco.repo.action;
|
||||||
|
|
||||||
|
import static org.alfresco.repo.action.ActionExecutionContext.builder;
|
||||||
|
import static org.junit.Assert.assertNotNull;
|
||||||
|
import static org.junit.Assert.fail;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
import org.alfresco.repo.action.ActionServiceImpl.ActionExecutionValidator;
|
||||||
|
import org.junit.Assert;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
public class PrivateActionValidationTest
|
||||||
|
{
|
||||||
|
@Test
|
||||||
|
public void shouldFailOnNullContext()
|
||||||
|
{
|
||||||
|
final ActionExecutionValidator validator = givenActionExecutionValidator(Map.of(), Set.of());
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
validator.isExposed(null);
|
||||||
|
}
|
||||||
|
catch (NullPointerException e)
|
||||||
|
{
|
||||||
|
assertNotNull(e);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
fail("Expected NPE.");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void privateActionShouldNotBeExposedByDefault()
|
||||||
|
{
|
||||||
|
final ActionExecutionValidator validator = givenActionExecutionValidator(Map.of(), Set.of());
|
||||||
|
|
||||||
|
Assert.assertFalse(validator.isExposed(builder("privateA").build()));
|
||||||
|
Assert.assertFalse(validator.isExposed(builder("privateA").withExecutionSource("test").build()));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void publicActionShouldBeExposedByDefault()
|
||||||
|
{
|
||||||
|
final ActionExecutionValidator validator = givenActionExecutionValidator(Map.of(), Set.of("publicA"));
|
||||||
|
|
||||||
|
Assert.assertTrue(validator.isExposed(builder("publicA").build()));
|
||||||
|
Assert.assertTrue(validator.isExposed(builder("publicA").withExecutionSource("test").build()));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void privateActionShouldBeExposedByConfigurationBasedOnActionId()
|
||||||
|
{
|
||||||
|
final ActionExecutionValidator validator = givenActionExecutionValidator(Map.of(
|
||||||
|
"org.alfresco.repo.action.privateA.exposed", "true"), Set.of());
|
||||||
|
|
||||||
|
Assert.assertTrue(validator.isExposed(builder("privateA").build()));
|
||||||
|
Assert.assertTrue(validator.isExposed(builder("privateA").withExecutionSource("test").build()));
|
||||||
|
Assert.assertTrue(validator.isExposed(builder("privateA").withExecutionSource("test2").build()));
|
||||||
|
|
||||||
|
Assert.assertFalse(validator.isExposed(builder("privateB").build()));
|
||||||
|
Assert.assertFalse(validator.isExposed(builder("privateB").withExecutionSource("test").build()));
|
||||||
|
Assert.assertFalse(validator.isExposed(builder("privateB").withExecutionSource("test2").build()));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void privateActionShouldBeExposedByConfigurationBasedOnActionIdAndExecutionSource()
|
||||||
|
{
|
||||||
|
final ActionExecutionValidator validator = givenActionExecutionValidator(Map.of(
|
||||||
|
"org.alfresco.repo.action.test.privateA.exposed", "true"), Set.of());
|
||||||
|
|
||||||
|
Assert.assertFalse(validator.isExposed(builder("privateA").build()));
|
||||||
|
Assert.assertTrue(validator.isExposed(builder("privateA").withExecutionSource("test").build()));
|
||||||
|
Assert.assertFalse(validator.isExposed(builder("privateA").withExecutionSource("test2").build()));
|
||||||
|
|
||||||
|
Assert.assertFalse(validator.isExposed(builder("privateB").build()));
|
||||||
|
Assert.assertFalse(validator.isExposed(builder("privateB").withExecutionSource("test").build()));
|
||||||
|
Assert.assertFalse(validator.isExposed(builder("privateB").withExecutionSource("test2").build()));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void executionSourceConfigurationShouldTakePrecedenceOverGeneralConfigurationForPrivateAction()
|
||||||
|
{
|
||||||
|
final ActionExecutionValidator validator = givenActionExecutionValidator(Map.of(
|
||||||
|
"org.alfresco.repo.action.test.privateA.exposed", "true",
|
||||||
|
"org.alfresco.repo.action.privateA.exposed", "false"), Set.of());
|
||||||
|
|
||||||
|
Assert.assertFalse(validator.isExposed(builder("privateA").build()));
|
||||||
|
Assert.assertTrue(validator.isExposed(builder("privateA").withExecutionSource("test").build()));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void publicActionShouldNotBeExposedByConfigurationBasedOnActionId()
|
||||||
|
{
|
||||||
|
final ActionExecutionValidator validator = givenActionExecutionValidator(Map.of(
|
||||||
|
"org.alfresco.repo.action.publicA.exposed", "false"), Set.of("publicA"));
|
||||||
|
|
||||||
|
Assert.assertFalse(validator.isExposed(builder("publicA").build()));
|
||||||
|
Assert.assertFalse(validator.isExposed(builder("publicA").withExecutionSource("test").build()));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void publicActionShouldNotBeExposedByConfigurationBasedOnActionIdAndExecutionSource()
|
||||||
|
{
|
||||||
|
final ActionExecutionValidator validator = givenActionExecutionValidator(Map.of(
|
||||||
|
"org.alfresco.repo.action.test.publicA.exposed", "false"), Set.of("publicA"));
|
||||||
|
|
||||||
|
Assert.assertTrue(validator.isExposed(builder("publicA").build()));
|
||||||
|
Assert.assertFalse(validator.isExposed(builder("publicA").withExecutionSource("test").build()));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void executionSourceConfigurationShouldTakePrecedenceOverGeneralConfigurationForPublicAction()
|
||||||
|
{
|
||||||
|
final ActionExecutionValidator validator = givenActionExecutionValidator(Map.of(
|
||||||
|
"org.alfresco.repo.action.test.publicA.exposed", "false",
|
||||||
|
"org.alfresco.repo.action.publicA.exposed", "true"), Set.of("publicA"));
|
||||||
|
|
||||||
|
Assert.assertTrue(validator.isExposed(builder("publicA").build()));
|
||||||
|
Assert.assertFalse(validator.isExposed(builder("publicA").withExecutionSource("test").build()));
|
||||||
|
}
|
||||||
|
|
||||||
|
private ActionExecutionValidator givenActionExecutionValidator(Map<String, String> configuration, Set<String> publicActions)
|
||||||
|
{
|
||||||
|
return new ActionExecutionValidator(configuration::get, publicActions::contains);
|
||||||
|
}
|
||||||
|
}
|
@@ -29,7 +29,6 @@ import static java.time.Duration.of;
|
|||||||
import static java.time.temporal.ChronoUnit.MILLIS;
|
import static java.time.temporal.ChronoUnit.MILLIS;
|
||||||
import static java.time.temporal.ChronoUnit.SECONDS;
|
import static java.time.temporal.ChronoUnit.SECONDS;
|
||||||
|
|
||||||
import java.time.Duration;
|
|
||||||
import java.util.concurrent.atomic.AtomicInteger;
|
import java.util.concurrent.atomic.AtomicInteger;
|
||||||
|
|
||||||
import junit.framework.AssertionFailedError;
|
import junit.framework.AssertionFailedError;
|
||||||
@@ -44,6 +43,7 @@ import org.alfresco.service.namespace.QName;
|
|||||||
import org.alfresco.service.transaction.TransactionService;
|
import org.alfresco.service.transaction.TransactionService;
|
||||||
import org.alfresco.test_category.OwnJVMTestsCategory;
|
import org.alfresco.test_category.OwnJVMTestsCategory;
|
||||||
import org.alfresco.util.ApplicationContextHelper;
|
import org.alfresco.util.ApplicationContextHelper;
|
||||||
|
import org.alfresco.util.TestHelper;
|
||||||
import org.alfresco.util.testing.category.DBTests;
|
import org.alfresco.util.testing.category.DBTests;
|
||||||
import org.apache.commons.logging.Log;
|
import org.apache.commons.logging.Log;
|
||||||
import org.apache.commons.logging.LogFactory;
|
import org.apache.commons.logging.LogFactory;
|
||||||
@@ -549,22 +549,22 @@ public class JobLockServiceTest extends TestCase
|
|||||||
|
|
||||||
if (callback == null) throw new IllegalStateException();
|
if (callback == null) throw new IllegalStateException();
|
||||||
|
|
||||||
waitForAssertion(of(100, MILLIS), () -> {
|
TestHelper.waitForMethodToFinish(of(100, MILLIS), () -> {
|
||||||
assertEquals(false,callback.released);
|
assertEquals(false,callback.released);
|
||||||
assertEquals(0,callback.getIsActiveCount());
|
assertEquals(0,callback.getIsActiveCount());
|
||||||
});
|
}, AssertionFailedError.class);
|
||||||
|
|
||||||
waitForAssertion(of(1, SECONDS), () -> {
|
TestHelper.waitForMethodToFinish(of(1, SECONDS), () -> {
|
||||||
assertEquals(false, callback.released);
|
assertEquals(false, callback.released);
|
||||||
assertEquals(1, callback.getIsActiveCount());
|
assertEquals(1, callback.getIsActiveCount());
|
||||||
});
|
}, AssertionFailedError.class);
|
||||||
|
|
||||||
callback.isActive = false;
|
callback.isActive = false;
|
||||||
|
|
||||||
waitForAssertion(of(2, SECONDS), () -> {
|
TestHelper.waitForMethodToFinish(of(2, SECONDS), () -> {
|
||||||
assertEquals(true, callback.released);
|
assertEquals(true, callback.released);
|
||||||
assertEquals(2, callback.getIsActiveCount());
|
assertEquals(2, callback.getIsActiveCount());
|
||||||
});
|
}, AssertionFailedError.class);
|
||||||
}
|
}
|
||||||
catch (IllegalArgumentException e)
|
catch (IllegalArgumentException e)
|
||||||
{
|
{
|
||||||
@@ -621,43 +621,6 @@ public class JobLockServiceTest extends TestCase
|
|||||||
Logger.getLogger("org.alfresco.repo.lock").setLevel(saveLogLevel);
|
Logger.getLogger("org.alfresco.repo.lock").setLevel(saveLogLevel);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void waitForAssertion(Duration timeout, Runnable assertion)
|
|
||||||
{
|
|
||||||
logger.debug("Waiting for assertion to succeed.");
|
|
||||||
final long lastStep = 10;
|
|
||||||
final long delayMillis = timeout.toMillis() > lastStep ? timeout.toMillis() / lastStep : 1;
|
|
||||||
|
|
||||||
for (int s = 0; s <= lastStep; s++)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
assertion.run();
|
|
||||||
logger.debug("Assertion succeeded.");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
catch (AssertionFailedError e)
|
|
||||||
{
|
|
||||||
if (s == lastStep)
|
|
||||||
{
|
|
||||||
logger.debug("Assertion failed. No more waiting.");
|
|
||||||
throw e;
|
|
||||||
}
|
|
||||||
logger.debug("Assertion failed. Waiting until it succeeds.", e);
|
|
||||||
}
|
|
||||||
try
|
|
||||||
{
|
|
||||||
Thread.sleep(delayMillis);
|
|
||||||
}
|
|
||||||
catch (InterruptedException e)
|
|
||||||
{
|
|
||||||
Thread.currentThread().interrupt();
|
|
||||||
fail("Thread has been interrupted.");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
throw new IllegalStateException("Unexpected.");
|
|
||||||
}
|
|
||||||
|
|
||||||
private class TestCallback implements JobLockRefreshCallback
|
private class TestCallback implements JobLockRefreshCallback
|
||||||
{
|
{
|
||||||
|
@@ -2,7 +2,7 @@
|
|||||||
* #%L
|
* #%L
|
||||||
* Alfresco Repository
|
* Alfresco Repository
|
||||||
* %%
|
* %%
|
||||||
* Copyright (C) 2005 - 2016 Alfresco Software Limited
|
* Copyright (C) 2005 - 2022 Alfresco Software Limited
|
||||||
* %%
|
* %%
|
||||||
* This file is part of the Alfresco software.
|
* This file is part of the Alfresco software.
|
||||||
* If the software was purchased under a paid Alfresco license, the terms of
|
* If the software was purchased under a paid Alfresco license, the terms of
|
||||||
@@ -28,7 +28,7 @@ package org.alfresco.repo.search;
|
|||||||
import javax.transaction.UserTransaction;
|
import javax.transaction.UserTransaction;
|
||||||
|
|
||||||
import org.alfresco.model.ContentModel;
|
import org.alfresco.model.ContentModel;
|
||||||
import org.alfresco.repo.search.impl.solr.DisabledFeatureException;
|
import org.alfresco.repo.search.impl.DisabledFeatureException;
|
||||||
import org.alfresco.repo.security.authentication.AuthenticationComponent;
|
import org.alfresco.repo.security.authentication.AuthenticationComponent;
|
||||||
import org.alfresco.repo.security.authentication.AuthenticationUtil;
|
import org.alfresco.repo.security.authentication.AuthenticationUtil;
|
||||||
import org.alfresco.repo.security.authentication.MutableAuthenticationDao;
|
import org.alfresco.repo.security.authentication.MutableAuthenticationDao;
|
||||||
|
@@ -2,7 +2,7 @@
|
|||||||
* #%L
|
* #%L
|
||||||
* Alfresco Repository
|
* Alfresco Repository
|
||||||
* %%
|
* %%
|
||||||
* Copyright (C) 2005 - 2016 Alfresco Software Limited
|
* Copyright (C) 2005 - 2022 Alfresco Software Limited
|
||||||
* %%
|
* %%
|
||||||
* This file is part of the Alfresco software.
|
* This file is part of the Alfresco software.
|
||||||
* If the software was purchased under a paid Alfresco license, the terms of
|
* If the software was purchased under a paid Alfresco license, the terms of
|
||||||
@@ -38,6 +38,8 @@ import java.util.List;
|
|||||||
import org.alfresco.model.ContentModel;
|
import org.alfresco.model.ContentModel;
|
||||||
import org.alfresco.repo.domain.node.Node;
|
import org.alfresco.repo.domain.node.Node;
|
||||||
import org.alfresco.repo.domain.solr.SearchDAO;
|
import org.alfresco.repo.domain.solr.SearchDAO;
|
||||||
|
import org.alfresco.repo.search.impl.DbOrIndexSwitchingQueryLanguage;
|
||||||
|
import org.alfresco.repo.search.impl.DisabledFeatureException;
|
||||||
import org.alfresco.repo.search.impl.lucene.LuceneQueryLanguageSPI;
|
import org.alfresco.repo.search.impl.lucene.LuceneQueryLanguageSPI;
|
||||||
import org.alfresco.repo.search.impl.querymodel.QueryModelException;
|
import org.alfresco.repo.search.impl.querymodel.QueryModelException;
|
||||||
import org.alfresco.repo.solr.NodeParameters;
|
import org.alfresco.repo.solr.NodeParameters;
|
||||||
|
@@ -29,8 +29,13 @@ package org.alfresco.util;
|
|||||||
import static org.junit.Assert.assertTrue;
|
import static org.junit.Assert.assertTrue;
|
||||||
import static org.junit.Assert.fail;
|
import static org.junit.Assert.fail;
|
||||||
|
|
||||||
|
import java.time.Duration;
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.function.Supplier;
|
import java.util.function.Supplier;
|
||||||
|
|
||||||
|
import org.apache.commons.logging.Log;
|
||||||
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A helper class to create a concise test.
|
* A helper class to create a concise test.
|
||||||
*
|
*
|
||||||
@@ -39,6 +44,8 @@ import java.util.function.Supplier;
|
|||||||
*/
|
*/
|
||||||
public class TestHelper
|
public class TestHelper
|
||||||
{
|
{
|
||||||
|
private static final Log logger = LogFactory.getLog(TestHelper.class);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Checks the thrown exception is the expected exception.
|
* Checks the thrown exception is the expected exception.
|
||||||
*
|
*
|
||||||
@@ -94,4 +101,59 @@ public class TestHelper
|
|||||||
|
|
||||||
return t;
|
return t;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Waits for <b>{@code method}</b> to succeed until <b>({@code timeout})</b>.
|
||||||
|
* <p>
|
||||||
|
* If the method failed to succeed because of previous step of test is not finished yet,
|
||||||
|
* it waits and re-executes the given method again.
|
||||||
|
* This will continue until the method do not fail or the <b>{@code timeout}</b> has been reached.
|
||||||
|
*
|
||||||
|
* @param timeout max time of wait.
|
||||||
|
* @param method the method that is called for retry.
|
||||||
|
* @param expectedExceptions array of excepted exception.
|
||||||
|
* @throws Exception after failing to finish given method with success.
|
||||||
|
*/
|
||||||
|
@SafeVarargs
|
||||||
|
public static void waitForMethodToFinish(
|
||||||
|
Duration timeout,
|
||||||
|
Runnable method,
|
||||||
|
Class<? extends Throwable> ... expectedExceptions)
|
||||||
|
{
|
||||||
|
logger.debug("Waiting for method to succeed.");
|
||||||
|
final long lastStep = 10;
|
||||||
|
final long delayMillis = timeout.toMillis() > lastStep ? timeout.toMillis() / lastStep : 1;
|
||||||
|
|
||||||
|
for (int step = 0; step <= lastStep; step++)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
method.run();
|
||||||
|
logger.debug("Method succeeded.");
|
||||||
|
return;
|
||||||
|
} catch (Throwable e)
|
||||||
|
{
|
||||||
|
if(Arrays.stream(expectedExceptions).noneMatch(expEx -> expEx.isInstance(e)))
|
||||||
|
{
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
if (step == lastStep)
|
||||||
|
{
|
||||||
|
logger.debug("Method failed - no more waiting.");
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
logger.debug("Method failed. Waiting until it succeeds.", e);
|
||||||
|
}
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Thread.sleep(delayMillis);
|
||||||
|
} catch (InterruptedException e)
|
||||||
|
{
|
||||||
|
Thread.currentThread().interrupt();
|
||||||
|
fail("Thread has been interrupted.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
throw new IllegalStateException("Unexpected.");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -11,6 +11,18 @@
|
|||||||
<value>1000</value>
|
<value>1000</value>
|
||||||
</property>
|
</property>
|
||||||
</bean>
|
</bean>
|
||||||
|
|
||||||
|
<bean id="public-test-action" class="org.alfresco.repo.action.ActionServiceImplTest$NoOpActionExecuter" parent="action-executer">
|
||||||
|
<property name="publicAction">
|
||||||
|
<value>true</value>
|
||||||
|
</property>
|
||||||
|
</bean>
|
||||||
|
|
||||||
|
<bean id="private-test-action" class="org.alfresco.repo.action.ActionServiceImplTest$NoOpActionExecuter" parent="action-executer">
|
||||||
|
<property name="publicAction">
|
||||||
|
<value>false</value>
|
||||||
|
</property>
|
||||||
|
</bean>
|
||||||
|
|
||||||
<bean id="sleepActionFilter" class="org.alfresco.repo.action.ActionServiceImplTest$SleepActionFilter" parent="baseActionFilter">
|
<bean id="sleepActionFilter" class="org.alfresco.repo.action.ActionServiceImplTest$SleepActionFilter" parent="baseActionFilter">
|
||||||
<property name="name">
|
<property name="name">
|
||||||
@@ -31,4 +43,28 @@
|
|||||||
<bean id="transient-fail-action"
|
<bean id="transient-fail-action"
|
||||||
class="org.alfresco.repo.action.ActionServiceImplTest$TransientFailActionExecuter"
|
class="org.alfresco.repo.action.ActionServiceImplTest$TransientFailActionExecuter"
|
||||||
parent="action-executer" />
|
parent="action-executer" />
|
||||||
|
|
||||||
|
<bean id="extendedActionServiceWithoutConfigurationProperty" class="org.alfresco.repo.action.ActionServiceImplTest$TestExtendedActionServiceImpl" init-method="init">
|
||||||
|
<property name="policyComponent">
|
||||||
|
<ref bean="policyComponent" />
|
||||||
|
</property>
|
||||||
|
<property name="nodeService">
|
||||||
|
<ref bean="NodeService" />
|
||||||
|
</property>
|
||||||
|
<property name="searchService">
|
||||||
|
<ref bean="ADMSearchService" />
|
||||||
|
</property>
|
||||||
|
<property name="authenticationContext">
|
||||||
|
<ref bean="authenticationContext" />
|
||||||
|
</property>
|
||||||
|
<property name="actionTrackingService">
|
||||||
|
<ref bean="actionTrackingService" />
|
||||||
|
</property>
|
||||||
|
<property name="dictionaryService">
|
||||||
|
<ref bean="DictionaryService" />
|
||||||
|
</property>
|
||||||
|
<property name="monitor">
|
||||||
|
<ref bean="actionServiceMonitor"/>
|
||||||
|
</property>
|
||||||
|
</bean>
|
||||||
</beans>
|
</beans>
|
||||||
|
@@ -7,8 +7,27 @@ pushd "$(dirname "${BASH_SOURCE[0]}")/../../"
|
|||||||
source "$(dirname "${BASH_SOURCE[0]}")/build_functions.sh"
|
source "$(dirname "${BASH_SOURCE[0]}")/build_functions.sh"
|
||||||
|
|
||||||
|
|
||||||
# Build the current project
|
# Build the current project if needed
|
||||||
mvn -B -V install -DskipTests -Dmaven.javadoc.skip=true -Pbuild-docker-images -Pags
|
if [[ -n ${REQUIRES_INSTALLED_ARTIFACTS} ]] || [[ -n ${REQUIRES_LOCAL_IMAGES} ]] || [[ -n ${BUILD_PROFILES} ]]; then
|
||||||
|
|
||||||
|
if [[ -n ${BUILD_PROFILES} ]]; then
|
||||||
|
PROFILES="${BUILD_PROFILES}"
|
||||||
|
else
|
||||||
|
if [[ "${REQUIRES_LOCAL_IMAGES}" == "true" ]]; then
|
||||||
|
PROFILES="-Pbuild-docker-images -Pags"
|
||||||
|
else
|
||||||
|
PROFILES="-Pags"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ "${REQUIRES_INSTALLED_ARTIFACTS}" == "true" ]]; then
|
||||||
|
PHASE="install"
|
||||||
|
else
|
||||||
|
PHASE="package"
|
||||||
|
fi
|
||||||
|
|
||||||
|
mvn -B -V $PHASE -DskipTests -Dmaven.javadoc.skip=true $PROFILES $BUILD_OPTIONS
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
popd
|
popd
|
||||||
|
@@ -1,20 +1,5 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
set -ev
|
set -ev
|
||||||
|
|
||||||
rm -rf "${HOME}/.m2/repository/org/alfresco/acs-community-packaging"
|
find "${HOME}/.m2/repository/" -type d -name "*-SNAPSHOT" | xargs -r -l rm -rf
|
||||||
rm -rf "${HOME}/.m2/repository/org/alfresco/alfresco-community-repo"
|
|
||||||
rm -rf "${HOME}/.m2/repository/org/alfresco/alfresco-community-repo-*"
|
|
||||||
rm -rf "${HOME}/.m2/repository/org/alfresco/alfresco-core"
|
|
||||||
rm -rf "${HOME}/.m2/repository/org/alfresco/alfresco-data-model"
|
|
||||||
rm -rf "${HOME}/.m2/repository/org/alfresco/alfresco-enterprise-remote-api"
|
|
||||||
rm -rf "${HOME}/.m2/repository/org/alfresco/alfresco-enterprise-repo-*"
|
|
||||||
rm -rf "${HOME}/.m2/repository/org/alfresco/alfresco-enterprise-repository"
|
|
||||||
rm -rf "${HOME}/.m2/repository/org/alfresco/alfresco-remote-api"
|
|
||||||
rm -rf "${HOME}/.m2/repository/org/alfresco/alfresco-repository"
|
|
||||||
rm -rf "${HOME}/.m2/repository/org/alfresco/content-services"
|
|
||||||
rm -rf "${HOME}/.m2/repository/org/alfresco/content-services*"
|
|
||||||
rm -rf "${HOME}/.m2/repository/org/alfresco/content-services-community"
|
|
||||||
rm -rf "${HOME}/.m2/repository/org/alfresco/tas/alfresco-community-repo-*-test"
|
|
||||||
rm -rf "${HOME}/.m2/repository/org/alfresco/tas/alfresco-enterprise-repo-*-test"
|
|
||||||
rm -rf "${HOME}/.m2/repository/org/alfresco/alfresco-governance-services*"
|
|
||||||
|
|
||||||
|
31
scripts/travis/prepare.sh
Executable file
31
scripts/travis/prepare.sh
Executable file
@@ -0,0 +1,31 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
M2_REPO_DIR="$HOME/.m2/repository"
|
||||||
|
M2_REPO_TTL_MINUTES=10080
|
||||||
|
M2_REPO_EXPIRED="$(find $M2_REPO_DIR -type f -mmin +$M2_REPO_TTL_MINUTES 2>/dev/null | head -n 1 | wc -l)"
|
||||||
|
M2_REPO_FILE_COUNT="$(find $M2_REPO_DIR -type f 2>/dev/null | wc -l)"
|
||||||
|
|
||||||
|
ORG_ALFRESCO_M2_REPO_DIR="$M2_REPO_DIR/org/alfresco"
|
||||||
|
ORG_ALFRESCO_M2_REPO_TTL_MINUTES=1440
|
||||||
|
ORG_ALFRESCO_M2_REPO_EXPIRED="$(find $ORG_ALFRESCO_M2_REPO_DIR -type f -mmin +$ORG_ALFRESCO_M2_REPO_TTL_MINUTES 2>/dev/null | head -n 1 | wc -l)"
|
||||||
|
|
||||||
|
echo "Files in the maven repo: $M2_REPO_FILE_COUNT"
|
||||||
|
|
||||||
|
if [ $ORG_ALFRESCO_M2_REPO_EXPIRED -eq 1 ];then
|
||||||
|
echo "Invalidating org/alfresco maven local cache."
|
||||||
|
rm -rf "$ORG_ALFRESCO_M2_REPO_DIR"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ $M2_REPO_EXPIRED -eq 1 ];then
|
||||||
|
echo "Invalidating maven local cache."
|
||||||
|
rm -rf "$M2_REPO_DIR"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ $M2_REPO_FILE_COUNT -lt 1000 ] || [ $ORG_ALFRESCO_M2_REPO_EXPIRED -eq 1 ] || [ $M2_REPO_EXPIRED -eq 1 ];then
|
||||||
|
echo "Populating maven cache."
|
||||||
|
export BUILD_PROFILES="-Pall-tas-tests,ags"
|
||||||
|
export BUILD_OPTIONS="-Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn -Dmaven.artifact.threads=8"
|
||||||
|
source "$(dirname "${BASH_SOURCE[0]}")/build.sh"
|
||||||
|
fi
|
@@ -33,7 +33,11 @@ git status
|
|||||||
git --no-pager diff pom.xml
|
git --no-pager diff pom.xml
|
||||||
git add pom.xml
|
git add pom.xml
|
||||||
|
|
||||||
if git status --untracked-files=no --porcelain | grep -q '^' ; then
|
if [[ "${TRAVIS_COMMIT_MESSAGE}" =~ \[force[^\]]*\] ]]; then
|
||||||
|
FORCE_TOKEN=$(echo "${TRAVIS_COMMIT_MESSAGE}" | sed "s|^.*\(\[force[^]]*\]\).*$|\1|g")
|
||||||
|
git commit --allow-empty -m "${FORCE_TOKEN} Update upstream version to ${VERSION}"
|
||||||
|
git push
|
||||||
|
elif git status --untracked-files=no --porcelain | grep -q '^' ; then
|
||||||
git commit -m "Update upstream version to ${VERSION}"
|
git commit -m "Update upstream version to ${VERSION}"
|
||||||
git push
|
git push
|
||||||
else
|
else
|
||||||
|
Reference in New Issue
Block a user