diff --git a/.travis.yml b/.travis.yml index 7d04693e0..cd1e8efe0 100644 --- a/.travis.yml +++ b/.travis.yml @@ -25,6 +25,15 @@ env: - UT3_TESTER_HELPER=UT3_TESTER_HELPER - UT3_TESTER_HELPER_PASSWORD=ut3 - UT3_TABLESPACE=users + - BUILD_DIR=${TRAVIS_BUILD_DIR} + - JOB_ID=${TRAVIS_JOB_ID} + - JOB_NUMBER=${TRAVIS_JOB_NUMBER} + - PULL_REQUEST_NAME=${TRAVIS_PULL_REQUEST} + - PULL_REQUEST_BRANCH=${TRAVIS_PULL_REQUEST_BRANCH} + - TAG_NAME=${TRAVIS_TAG} + - REPO_SLUG=${TRAVIS_REPO_SLUG} + - PR_SLUG=${TRAVIS_PULL_REQUEST_SLUG} + - BRANCH_NAME=${TRAVIS_BRANCH} # Environment for building a release - CURRENT_BRANCH=${TRAVIS_BRANCH} - UTPLSQL_REPO="utPLSQL/utPLSQL" @@ -35,11 +44,12 @@ env: - UTPLSQL_BUILD_USER_NAME="Travis CI" - CACHE_DIR=$HOME/.cache # Database Env - - SQLCLI="$HOME/sqlcl/bin/sql" - - OJDBC_HOME="$HOME/sqlcl/lib" + - SQLCLI="${BUILD_DIR}/sqlcl/bin/sql" + - OJDBC_HOME="${BUILD_DIR}/ojdbc" - ORACLE_PWD="oracle" - - UT3_DOCKER_REPO="utplsqlv3/oracledb" - - DOCKHER_HUB_REPO="${DOCKER_BASE_TAG:-$UT3_DOCKER_REPO}" + - DOCKHER_HUB_REPO="utplsqlv3/oracledb" + - DOCKER_VOLUME="/home/oracle/host" + - DOCKER_ENV="-e SQLCLI=sqlplus -e UT3_DEVELOP_SCHEMA -e UT3_DEVELOP_SCHEMA_PASSWORD -e UT3_RELEASE_VERSION_SCHEMA -e UT3_RELEASE_VERSION_SCHEMA_PASSWORD -e UT3_USER -e UT3_USER_PASSWORD -e UT3_TESTER -e UT3_TESTER_PASSWORD -e UT3_TESTER_HELPER -e UT3_TESTER_HELPER_PASSWORD -e UT3_TABLESPACE -e ORACLE_PWD -e CONNECTION_STR -e UTPLSQL_DIR" #utPLSQL released version directory - UTPLSQL_DIR="utPLSQL_latest_release" - SELFTESTING_BRANCH=${TRAVIS_BRANCH} @@ -47,13 +57,15 @@ env: # Maven - MAVEN_HOME=/usr/local/maven - MAVEN_CFG=$HOME/.m2 - matrix: - - ORACLE_VERSION="${DOCKER_TAG_11G:-11g-r2-xe}" CONNECTION_STR='127.0.0.1:1521/XE' DOCKER_OPTIONS='--shm-size=1g' - - ORACLE_VERSION="${DOCKER_TAG_12C:-12c-r1-se2-small}" CONNECTION_STR='127.0.0.1:1521/ORCLCDB' - - ORACLE_VERSION="${DOCKER_TAG_12C2:-12c-r2-se2-small}" CONNECTION_STR='127.0.0.1:1521/ORCLCDB' - - ORACLE_VERSION="${DOCKER_TAG_18:-18c-se2-small}" CONNECTION_STR='127.0.0.1:1521/ORCLCDB' - - ORACLE_VERSION="${DOCKER_TAG_19:-19c-se2-small}" CONNECTION_STR='127.0.0.1:1521/ORCLCDB' - - ORACLE_VERSION="${DOCKER_TAG_21XE:-21c-xe-full}" CONNECTION_STR='127.0.0.1:1521/XEPDB1' DOCKER_OPTIONS='-e ORACLE_PASSWORD=oracle' + jobs: + - ORACLE_VERSION="11g-r2-xe" CONNECTION_STR='127.0.0.1:1521/XE' DOCKER_VOLUME="/mnt/host" DOCKER_OPTIONS='--shm-size=1g' +# - ORACLE_VERSION="11-full" CONNECTION_STR='127.0.0.1:1521/XE' DOCKHER_HUB_REPO="gvenzl/oracle-xe" DOCKER_OPTIONS='-e ORACLE_PASSWORD=oracle --shm-size=1g' DOCKER_VOLUME="/mnt/host" + - ORACLE_VERSION="12c-r1-se2-small" CONNECTION_STR='127.0.0.1:1521/ORCLCDB' + - ORACLE_VERSION="12c-r2-se2-small" CONNECTION_STR='127.0.0.1:1521/ORCLCDB' + - ORACLE_VERSION="18-slim" CONNECTION_STR='127.0.0.1:1521/XEPDB1' DOCKHER_HUB_REPO="gvenzl/oracle-xe" DOCKER_OPTIONS='-e ORACLE_PASSWORD=oracle' + - ORACLE_VERSION="18c-se2-small" CONNECTION_STR='127.0.0.1:1521/ORCLCDB' + - ORACLE_VERSION="19c-se2-small" CONNECTION_STR='127.0.0.1:1521/ORCLCDB' + - ORACLE_VERSION="21-full" CONNECTION_STR='127.0.0.1:1521/XEPDB1' DOCKHER_HUB_REPO="gvenzl/oracle-xe" DOCKER_OPTIONS='-e ORACLE_PASSWORD=oracle' cache: pip: true @@ -73,24 +85,29 @@ before_install: #Allow for sonar to blame issues - git fetch --unshallow # download latest utPLSQL release - #- curl -LOk $(curl --silent https://api.github.com/repos/utPLSQL/utPLSQL/releases/latest | awk '/browser_download_url/ { print $2 }' | grep ".zip" | sed 's/"//g') - git clone --depth=1 --branch=${SELFTESTING_BRANCH:-main} https://github.com/utPLSQL/utPLSQL.git $UTPLSQL_DIR # download latest utPLSQL-cli release - curl -Lk -o utPLSQL-cli.zip https://github.com/utPLSQL/utPLSQL-cli/releases/download/v${UTPLSQL_CLI_VERSION}/utPLSQL-cli.zip install: - #- unzip utPLSQL.zip - unzip utPLSQL-cli.zip && chmod -R u+x utPLSQL-cli - - bash .travis/install_sqlcl.sh +# - curl -Lk -o sqlcl-latest.zip https://download.oracle.com/otn_software/java/sqldeveloper/sqlcl-latest.zip +# - unzip -q sqlcl-latest.zip -d $HOME + - mkdir -p ${OJDBC_HOME} #get JDBC driver and orai18n + - curl -Lk -o ${OJDBC_HOME}/ojdbc8.jar https://download.oracle.com/otn-pub/otn_software/jdbc/213/ojdbc8.jar + - curl -Lk -o ${OJDBC_HOME}/orai18n.jar https://download.oracle.com/otn-pub/otn_software/jdbc/213/orai18n.jar + # Chmod is needed to allow for write access within from docker container volume + - chmod -R go+w ./{source,test,examples,${UTPLSQL_DIR}/source} - if [[ ! $TRAVIS_TAG ]]; then bash .travis/start_db.sh; fi + - if [[ ! $TRAVIS_TAG ]]; then docker exec ${ORACLE_VERSION} ${DOCKER_VOLUME}/.travis/install.sh; fi + - if [[ ! $TRAVIS_TAG ]]; then docker exec ${ORACLE_VERSION} ${DOCKER_VOLUME}/.travis/install_utplsql_release.sh; fi before_script: - - if [[ ! $TRAVIS_TAG ]]; then bash .travis/install.sh; fi - - if [[ ! $TRAVIS_TAG ]]; then bash .travis/install_utplsql_release.sh; fi - - if [[ ! $TRAVIS_TAG ]]; then bash .travis/run_examples.sh; fi + - if [[ ! $TRAVIS_TAG ]]; then docker exec ${ORACLE_VERSION} ${DOCKER_VOLUME}/.travis/run_examples.sh; fi + - if [[ ! $TRAVIS_TAG ]]; then docker exec ${ORACLE_VERSION} ${DOCKER_VOLUME}/test/install_tests.sh; fi script: - - if [[ ! $TRAVIS_TAG ]]; then bash test/install_and_run_tests.sh; fi + - if [[ ! $TRAVIS_TAG ]]; then bash test/run_tests.sh; fi - if [[ ! $TRAVIS_TAG ]]; then bash .travis/validate_report_files.sh; fi - if [[ ! $TRAVIS_TAG ]] && [[ ("${TRAVIS_REPO_SLUG}" = "${UTPLSQL_REPO}" && "${TRAVIS_PULL_REQUEST}" == false) || ("${TRAVIS_PULL_REQUEST_SLUG}" = "${UTPLSQL_REPO}") ]]; then bash .travis/run_sonar_scanner.sh; fi - if [[ ! $TRAVIS_TAG ]]; then bash .travis/coveralls_uploader.sh; fi diff --git a/.travis/coveralls_uploader.js b/.travis/coveralls_uploader.js index ad6eeee74..182f84066 100644 --- a/.travis/coveralls_uploader.js +++ b/.travis/coveralls_uploader.js @@ -14,7 +14,7 @@ fs.readFile('../coverage.json',function (err,data) { return console.log(err); } req = JSON.parse(data); - req.service_job_id = process.env.TRAVIS_JOB_ID; + req.service_job_id = process.env.JOB_ID; req.service_name = 'travis-ci'; if (process.env.COVERALLS_REPO_TOKEN) { req.repo_token = process.env.COVERALLS_REPO_TOKEN; diff --git a/.travis/install.sh b/.travis/install.sh index 537fddb66..603cb7d1e 100755 --- a/.travis/install.sh +++ b/.travis/install.sh @@ -1,7 +1,8 @@ #!/bin/bash -cd source set -ev +SCRIPT_DIR="$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )" +cd ${SCRIPT_DIR}/../source INSTALL_FILE="install_headless_with_trigger.sql" if [[ ! -f "${INSTALL_FILE}" ]]; then @@ -20,7 +21,7 @@ alter session set plsql_optimize_level=0; SQL #Run this step only on second child job (12.1 - at it's fastest) -if [[ "${TRAVIS_JOB_NUMBER}" =~ \.2$ ]]; then +if [[ "${JOB_NUMBER}" =~ \.2$ ]]; then #check code-style for errors time "$SQLCLI" $UT3_DEVELOP_SCHEMA/$UT3_DEVELOP_SCHEMA_PASSWORD@//$CONNECTION_STR @../development/utplsql_style_check.sql diff --git a/.travis/install_sqlcl.sh b/.travis/install_sqlcl.sh deleted file mode 100755 index 9743ddac2..000000000 --- a/.travis/install_sqlcl.sh +++ /dev/null @@ -1,20 +0,0 @@ -#!/bin/bash -set -e - -SQLCL_FILE=sqlcl-18.3.0.259.2029.zip -cd .travis - -# Download if not present on cache dir. -if [ ! -f $CACHE_DIR/$SQLCL_FILE ]; then - npm install -g phantomjs-prebuilt casperjs - bash download.sh -p sqlcl - mv $SQLCL_FILE $CACHE_DIR -else - echo "Installing sqlcl from cache..." -fi; - -# Install sqlcl. -unzip -q $CACHE_DIR/$SQLCL_FILE -d $HOME - -# Check if it is installed correctly. -$SQLCLI -v diff --git a/.travis/install_utplsql_release.sh b/.travis/install_utplsql_release.sh index 12ec50118..fea162f8f 100755 --- a/.travis/install_utplsql_release.sh +++ b/.travis/install_utplsql_release.sh @@ -1,8 +1,8 @@ #!/bin/bash set -ev - -cd $UTPLSQL_DIR/source +SCRIPT_DIR="$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )" +cd ${SCRIPT_DIR}/../${UTPLSQL_DIR}/source "$SQLCLI" sys/$ORACLE_PWD@//$CONNECTION_STR AS SYSDBA <>index.md fi #If build running on a TAG - it's a new release - need to add it to documentation - if [ -n "${TRAVIS_TAG}" ]; then - sed -i '7s@.*@'" - [Latest ${TRAVIS_TAG} documentation](latest/) - Created $now"'@' index.md + if [ -n "${TAG_NAME}" ]; then + sed -i '7s@.*@'" - [Latest ${TAG_NAME} documentation](latest/) - Created $now"'@' index.md #add entry to the top of version history (line end of file - ## Released Version Doc History - sed -i '12i'" - [${TRAVIS_TAG} documentation](${UTPLSQL_VERSION}/) - Created $now" index.md + sed -i '12i'" - [${TAG_NAME} documentation](${UTPLSQL_VERSION}/) - Created $now" index.md fi #replace 4th line in log sed -i '8s@.*@'" - [Latest development version](develop/) - Created $now"'@' index.md diff --git a/.travis/push_release_version.sh b/.travis/push_release_version.sh index 082359af4..f4ca8f819 100755 --- a/.travis/push_release_version.sh +++ b/.travis/push_release_version.sh @@ -3,7 +3,7 @@ # We are updating version number only when: # - not a pull request # - branch name is = develop or branch name is like release/vX.X.X... -if [ "${TRAVIS_REPO_SLUG}" = "${UTPLSQL_REPO}" ] && [ "$TRAVIS_PULL_REQUEST" == "false" ] && [[ "${CURRENT_BRANCH}" =~ ^(release/v[0-9]+\.[0-9]+\.[0-9]+.*|develop)$ ]]; then +if [ "${REPO_SLUG}" = "${UTPLSQL_REPO}" ] && [ "${PULL_REQUEST_NAME}" == "false" ] && [[ "${CURRENT_BRANCH}" =~ ^(release/v[0-9]+\.[0-9]+\.[0-9]+.*|develop)$ ]]; then echo Current branch is "${CURRENT_BRANCH}" echo "Committing version & buildNo into branch (${CURRENT_BRANCH})" git add sonar-project.properties @@ -14,5 +14,5 @@ if [ "${TRAVIS_REPO_SLUG}" = "${UTPLSQL_REPO}" ] && [ "$TRAVIS_PULL_REQUEST" == echo "Pushing to origin" git push --quiet origin HEAD:${CURRENT_BRANCH} else - echo "Publishing of version skipped for branch ${CURRENT_BRANCH}, pull request ${TRAVIS_PULL_REQUEST}" + echo "Publishing of version skipped for branch ${CURRENT_BRANCH}, pull request ${PULL_REQUEST_NAME}" fi diff --git a/.travis/run_examples.sh b/.travis/run_examples.sh index 935037245..8eb3d097f 100755 --- a/.travis/run_examples.sh +++ b/.travis/run_examples.sh @@ -1,8 +1,8 @@ #!/bin/bash -cd "$(dirname "$(readlink -f "$0")")"/../examples - set -ev +SCRIPT_DIR="$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )" +cd ${SCRIPT_DIR}/../examples "$SQLCLI" $UT3_DEVELOP_SCHEMA/$UT3_DEVELOP_SCHEMA_PASSWORD@//$CONNECTION_STR <> sonar-project.properties - if [ "$TRAVIS_PULL_REQUEST" == "false" ]; then + if [ "${PULL_REQUEST_NAME}" == "false" ]; then echo "Updating sonar properties to include branch ${BRANCH}" add_sonar_property "${BRANCH_SONAR_PROPERTY}" "${BRANCH}" add_sonar_property "${BRANCH_SONAR_TARGET_PROPERTY}" "${MAIN_DEV_BRANCH}" - elif [ "${TRAVIS_PULL_REQUEST_SLUG}" = "${TRAVIS_REPO_SLUG}" ]; then + elif [ "${PR_SLUG}" = "${REPO_SLUG}" ]; then echo "Updating sonar properties to include pull request ${BRANCH}" add_sonar_property "${PR_SONAR_TOKEN_PROPERTY}" "${GITHUB_TRAVISCI_TOKEN}" add_sonar_property "${PR_SONAR_BRANCH_PROPERTY}" "${BRANCH}" diff --git a/.travis/start_db.sh b/.travis/start_db.sh index e42656987..285f8172f 100755 --- a/.travis/start_db.sh +++ b/.travis/start_db.sh @@ -10,9 +10,6 @@ else mkdir -p $HOME/.docker && cp $CACHE_DIR/.docker/config.json $HOME/.docker/ fi -df -h time docker pull $DOCKHER_HUB_REPO:$ORACLE_VERSION -df -h -docker run -d --name $ORACLE_VERSION $DOCKER_OPTIONS -p 1521:1521 $DOCKHER_HUB_REPO:$ORACLE_VERSION +docker run -d --name $ORACLE_VERSION --mount type=bind,source=${BUILD_DIR},target=${DOCKER_VOLUME} $DOCKER_OPTIONS $DOCKER_ENV -p 1521:1521 $DOCKHER_HUB_REPO:$ORACLE_VERSION time docker logs -f $ORACLE_VERSION | grep -m 1 "DATABASE IS READY TO USE!" --line-buffered -df -h diff --git a/.travis/validate_report_files.sh b/.travis/validate_report_files.sh index 621297a0b..7c7d1354d 100755 --- a/.travis/validate_report_files.sh +++ b/.travis/validate_report_files.sh @@ -1,8 +1,8 @@ #!/usr/bin/env bash GL_VALID=1 -XSD_DIR="$TRAVIS_BUILD_DIR/.travis/xsd" -XML_JAR_DIR="$TRAVIS_BUILD_DIR/.travis/lib" +XSD_DIR="$BUILD_DIR/.travis/xsd" +XML_JAR_DIR="$BUILD_DIR/.travis/lib" #XML Validator XML_VALIDATOR="$XML_JAR_DIR/xml_validator.jar" HTML_VALIDATOR_URL="https://validator.w3.org/nu/" diff --git a/development/template.env.sh b/development/template.env.sh index 5e1aaad1a..521d9343d 100755 --- a/development/template.env.sh +++ b/development/template.env.sh @@ -2,7 +2,7 @@ export SQLCLI=sql # For sqlcl client #export SQLCLI=sqlplus # For sqlplus client -export CONNECTION_STR=127.0.0.1:1521/xe # Adjust the connect string +export CONNECTION_STR=127.0.0.1:1521/xe ORACLE_VERSION=11g-r2-xe# Adjust the connect string export ORACLE_PWD=oracle # Adjust your local SYS password export UTPLSQL_CLI_VERSION="3.1.6" export SELFTESTING_BRANCH=develop @@ -19,3 +19,4 @@ export UT3_TESTER_HELPER_PASSWORD=ut3 export UT3_TABLESPACE=users export UT3_USER="UT3\$USER#" export UT3_USER_PASSWORD=ut3 +export DOCKER_ENV="-e SQLCLI=sqlplus -e UT3_DEVELOP_SCHEMA -e UT3_DEVELOP_SCHEMA_PASSWORD -e UT3_RELEASE_VERSION_SCHEMA -e UT3_RELEASE_VERSION_SCHEMA_PASSWORD -e UT3_USER -e UT3_USER_PASSWORD -e UT3_TESTER -e UT3_TESTER_PASSWORD -e UT3_TESTER_HELPER -e UT3_TESTER_HELPER_PASSWORD -e UT3_TABLESPACE -e ORACLE_PWD -e CONNECTION_STR -e UTPLSQL_DIR" diff --git a/test/install_tests.sh b/test/install_tests.sh index e07b4d2b3..4ccc312e8 100755 --- a/test/install_tests.sh +++ b/test/install_tests.sh @@ -1,9 +1,9 @@ #!/bin/bash set -ev -#goto git root directory -git rev-parse && cd "$(git rev-parse --show-cdup)" -cd test +SCRIPT_DIR="$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )" +cd ${SCRIPT_DIR} + "$SQLCLI" ${UT3_TESTER_HELPER}/${UT3_TESTER_HELPER_PASSWORD}@//${CONNECTION_STR} @install_ut3_tester_helper.sql diff --git a/test/ut3_tester_helper/coverage_helper.pkb b/test/ut3_tester_helper/coverage_helper.pkb index 73dec720b..e9385d7d9 100644 --- a/test/ut3_tester_helper/coverage_helper.pkb +++ b/test/ut3_tester_helper/coverage_helper.pkb @@ -163,7 +163,7 @@ create or replace package body coverage_helper is begin g_job_no := g_job_no + 1; l_job_name := 'utPLSQL_selftest_job_'||g_job_no; - sleep(0.01); + sleep(0.15); dbms_scheduler.create_job( job_name => l_job_name, job_type => 'PLSQL_BLOCK', diff --git a/test/ut3_user/reporters/test_documentation_reporter.pkb b/test/ut3_user/reporters/test_documentation_reporter.pkb index 456fa86f9..03759fe6a 100644 --- a/test/ut3_user/reporters/test_documentation_reporter.pkb +++ b/test/ut3_user/reporters/test_documentation_reporter.pkb @@ -1 +1,59 @@ -create or replace package body test_documentation_reporter as procedure report_produces_expected_out is l_results ut3_develop.ut_varchar2_list; l_actual clob; l_expected varchar2(32767):=q'[%org utplsql tests helpers A suite for testing different outcomes from reporters A description of some context passing_test [% sec] a test with failing assertion [% sec] (FAILED - 1) a test raising unhandled exception [% sec] (FAILED - 2) a disabled test [0 sec] (DISABLED) % Failures: % 1) failing_test "Fails as values are different" Actual: 'number [1] ' (varchar2) was expected to equal: 'number [2] ' (varchar2)% at "UT3$USER#.TEST_REPORTERS%", line 36 ut3_develop.ut.expect('number [1] ','Fails as values are different').to_equal('number [2] '); % % 2) erroring_test ORA-06502: PL/SQL: numeric or value error: character to number conversion error ORA-06512: at "UT3$USER#.TEST_REPORTERS", line 44% ORA-06512: at line 6 Finished in % seconds 4 tests, 1 failed, 1 errored, 1 disabled, 0 warning(s)%]'; begin select * bulk collect into l_results from table( ut3_develop.ut.run( 'test_reporters', ut3_develop.ut_documentation_reporter() ) ); l_actual := ut3_tester_helper.main_helper.table_to_clob(l_results); ut.expect(l_actual).to_be_like(l_expected); end; end; / \ No newline at end of file +create or replace package body test_documentation_reporter as + + procedure report_produces_expected_out is + l_results ut3_develop.ut_varchar2_list; + l_actual clob; + l_expected varchar2(32767):=q'[%org + utplsql + tests + helpers + A suite for testing different outcomes from reporters + + A description of some context + passing_test [% sec] + + + + + + a test with failing assertion [% sec] (FAILED - 1) + + + + a test raising unhandled exception [% sec] (FAILED - 2) + + + + a disabled test [0 sec] (DISABLED) + +% +Failures: +% + 1) failing_test + "Fails as values are different" + Actual: 'number [1] ' (varchar2) was expected to equal: 'number [2] ' (varchar2)% + at "UT3$USER#.TEST_REPORTERS%", line 36 ut3_develop.ut.expect('number [1] ','Fails as values are different').to_equal('number [2] '); +% +% + 2) erroring_test + ORA-06502: PL/SQL: numeric or value error: character to number conversion error + ORA-06512: at "UT3$USER#.TEST_REPORTERS", line 44% + ORA-06512: at line 6 +Finished in % seconds +4 tests, 1 failed, 1 errored, 1 disabled, 0 warning(s)%]'; + + begin + select * + bulk collect into l_results + from table( + ut3_develop.ut.run( + 'test_reporters', + ut3_develop.ut_documentation_reporter() + ) + ); + l_actual := ut3_tester_helper.main_helper.table_to_clob(l_results); + ut.expect(l_actual).to_be_like(l_expected); + end; + +end; +/