diff --git a/DESCRIPTION b/DESCRIPTION index fd0d3d91c..dc54ff0f0 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -83,6 +83,6 @@ Suggests: DSOpal, DSMolgenisArmadillo, DSLite -RoxygenNote: 7.3.3 +RoxygenNote: 8.0.0 Encoding: UTF-8 Language: en-GB diff --git a/armadillo_azure-pipelines.yml b/armadillo_azure-pipelines.yml index 4fbd10739..2fba0a0a5 100644 --- a/armadillo_azure-pipelines.yml +++ b/armadillo_azure-pipelines.yml @@ -34,6 +34,7 @@ variables: branchName: $(Build.SourceBranchName) test_filter: '*' _r_check_system_clock_: 0 + perf.profile: 'azure-pipeline' ######################################################################################### @@ -274,7 +275,7 @@ jobs: # # "_-|arg-|smk-|datachk-|disc-|math-|expt-|expt_smk-" # testthat::test_package("$(projectName)", filter = "_-|datachk-|smk-|arg-|disc-|perf-|smk_expt-|expt-|math-", reporter = multi_rep, stop_on_failure = FALSE) - sudo R -q -e ' + sudo env PERF_PROFILE=$PERF_PROFILE R -q -e ' library(covr); dsbase.res <- covr::package_coverage( type = c("none"), @@ -396,7 +397,7 @@ jobs: # testthat::testpackage uses a MultiReporter, comprised of a ProgressReporter and JunitReporter # R output and messages are redirected by sink() to test_console_output.txt # junit reporter output is to test_results.xml - sudo R -q -e ' + sudo env PERF_PROFILE=$PERF_PROFILE R -q -e ' library(covr); dsdanger.res <- covr::package_coverage( type = c("none"), diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 04fb284d2..b541a3903 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -32,6 +32,7 @@ variables: branchName: $(Build.SourceBranchName) test_filter: '*' _r_check_system_clock_: 0 + perf.profile: 'azure-pipeline' ######################################################################################### @@ -214,13 +215,13 @@ jobs: # Install dsBase. # If previous steps have failed then don't run. - bash: | - R -q -e "library(opalr); opal <- opal.login(username = 'administrator', password = 'datashield_test&', url = 'https://localhost:8443', opts = list(ssl_verifyhost=0, ssl_verifypeer=0)); opal.put(opal, 'system', 'conf', 'general', '_rPackage'); opal.logout(o)" + R -q -e "library(opalr); opal <- opal.login(username = 'administrator', password = 'datashield_test&', url = 'http://localhost:8080/'); opal.put(opal, 'system', 'conf', 'general', '_rPackage'); opal.logout(opal)" - R -q -e "library(opalr); opal <- opal.login('administrator','datashield_test&', url='https://localhost:8443/', opts = list(ssl_verifyhost=0, ssl_verifypeer=0)); dsadmin.install_github_package(opal, 'dsBase', username = 'datashield', ref = 'v7.0-dev'); opal.logout(opal)" + R -q -e "library(opalr); opal <- opal.login('administrator','datashield_test&', url='http://localhost:8080/'); dsadmin.install_github_package(opal, 'dsBase', username = 'datashield', ref = 'v7.0-dev'); opal.logout(opal)" sleep 60 - R -q -e "library(opalr); opal <- opal.login('administrator','datashield_test&', url='https://localhost:8443/', opts = list(ssl_verifyhost=0, ssl_verifypeer=0)); dsadmin.set_option(opal, 'default.datashield.privacyControlLevel', 'permissive'); opal.logout(opal)" + R -q -e "library(opalr); opal <- opal.login('administrator','datashield_test&', url='http://localhost:8080/'); dsadmin.set_option(opal, 'default.datashield.privacyControlLevel', 'permissive'); opal.logout(opal)" workingDirectory: $(Pipeline.Workspace)/dsBaseClient/tests/testthat/data_files displayName: 'Install dsBase to Opal, as set disclosure test options' @@ -253,7 +254,7 @@ jobs: # # "_-|arg-|smk-|datachk-|disc-|math-|expt-|expt_smk-" # testthat::test_package("$(projectName)", filter = "_-|datachk-|smk-|arg-|disc-|perf-|smk_expt-|expt-|math-", reporter = multi_rep, stop_on_failure = FALSE) - sudo R -q -e ' + sudo env PERF_PROFILE=$PERF_PROFILE R -q -e ' library(covr); dsbase.res <- covr::package_coverage( type = c("none"), @@ -342,9 +343,9 @@ jobs: # If previous steps have failed then don't run - bash: | - R -q -e "library(opalr); opal <- opal.login(username = 'administrator', password = 'datashield_test&', url = 'https://localhost:8443', opts = list(ssl_verifyhost=0, ssl_verifypeer=0)); opal.put(opal, 'system', 'conf', 'general', '_rPackage'); opal.logout(o)" + R -q -e "library(opalr); opal <- opal.login(username = 'administrator', password = 'datashield_test&', url = 'http://localhost:8080'); opal.put(opal, 'system', 'conf', 'general', '_rPackage'); opal.logout(opal)" - R -q -e "library(opalr); opal <- opal.login('administrator','datashield_test&', url='https://localhost:8443/', opts = list(ssl_verifyhost=0, ssl_verifypeer=0)); dsadmin.install_github_package(opal, 'dsDanger', username = 'datashield', ref = '6.3.4'); opal.logout(opal)" + R -q -e "library(opalr); opal <- opal.login('administrator','datashield_test&', url='http://localhost:8080/'); dsadmin.install_github_package(opal, 'dsDanger', username = 'datashield', ref = '6.3.4'); opal.logout(opal)" workingDirectory: $(Pipeline.Workspace)/dsBaseClient displayName: 'Install dsDanger package on Opal server' @@ -368,7 +369,7 @@ jobs: # testthat::testpackage uses a MultiReporter, comprised of a ProgressReporter and JunitReporter # R output and messages are redirected by sink() to test_console_output.txt # junit reporter output is to test_results.xml - sudo R -q -e ' + sudo env PERF_PROFILE=$PERF_PROFILE R -q -e ' library(covr); dsdanger.res <- covr::package_coverage( type = c("none"), diff --git a/dsBase_7.0.0-permissive.tar.gz b/dsBase_7.0.0-permissive.tar.gz index 103ffd247..35ac594bc 100644 Binary files a/dsBase_7.0.0-permissive.tar.gz and b/dsBase_7.0.0-permissive.tar.gz differ diff --git a/dsBase_7.0.0.tar.gz b/dsBase_7.0.0.tar.gz index 1f25c50a7..5711adec6 100644 Binary files a/dsBase_7.0.0.tar.gz and b/dsBase_7.0.0.tar.gz differ diff --git a/opal_azure-pipelines.yml b/opal_azure-pipelines.yml index 76eb2e798..b541a3903 100644 --- a/opal_azure-pipelines.yml +++ b/opal_azure-pipelines.yml @@ -3,11 +3,9 @@ # Starts with a vanilla Opal docker composition, installs dsBase # and dsBaseClient (as well as dependencies - including a fully functional # Opal server). -# Does checks and tests then saves results to testStatus repo. # # Inside the root directory $(Pipeline.Workspace) will be a file tree like: # /dsBaseClient <- Checked out version of datashield/dsBaseClient -# /testStatus <- Checked out version of datashield/testStatus # /logs <- Where results of tests and lots are collated # # As of May 2020 this takes ~ 70 mins to run. @@ -34,18 +32,7 @@ variables: branchName: $(Build.SourceBranchName) test_filter: '*' _r_check_system_clock_: 0 - - -######################################################################################### -# Need to define all the GH repos and their access tokens, see: -# https://docs.microsoft.com/en-us/azure/devops/pipelines/library/service-endpoints?view=azure-devops&tabs=yaml -resources: - repositories: - - repository: testStatusRepo - type: github - endpoint: datashield-testing - name: datashield/testStatus - ref: master + perf.profile: 'azure-pipeline' ######################################################################################### @@ -82,11 +69,6 @@ jobs: - checkout: self path: 'dsBaseClient' - - checkout: testStatusRepo - path: 'testStatus' - persistCredentials: true - condition: and(eq(variables['Build.Repository.Name'], 'datashield/dsBaseClient'), ne(variables['Build.Reason'], 'PullRequest')) - ##################################################################################### # The MySQL install that comes with the VM doesn't seem compatable with our set up @@ -233,13 +215,13 @@ jobs: # Install dsBase. # If previous steps have failed then don't run. - bash: | - R -q -e "library(opalr); opal <- opal.login(username = 'administrator', password = 'datashield_test&', url = 'https://localhost:8443', opts = list(ssl_verifyhost=0, ssl_verifypeer=0)); opal.put(opal, 'system', 'conf', 'general', '_rPackage'); opal.logout(o)" + R -q -e "library(opalr); opal <- opal.login(username = 'administrator', password = 'datashield_test&', url = 'http://localhost:8080/'); opal.put(opal, 'system', 'conf', 'general', '_rPackage'); opal.logout(opal)" - R -q -e "library(opalr); opal <- opal.login('administrator','datashield_test&', url='https://localhost:8443/', opts = list(ssl_verifyhost=0, ssl_verifypeer=0)); dsadmin.install_github_package(opal, 'dsBase', username = 'datashield', ref = 'v7.0-dev'); opal.logout(opal)" + R -q -e "library(opalr); opal <- opal.login('administrator','datashield_test&', url='http://localhost:8080/'); dsadmin.install_github_package(opal, 'dsBase', username = 'datashield', ref = 'v7.0-dev'); opal.logout(opal)" sleep 60 - R -q -e "library(opalr); opal <- opal.login('administrator','datashield_test&', url='https://localhost:8443/', opts = list(ssl_verifyhost=0, ssl_verifypeer=0)); dsadmin.set_option(opal, 'default.datashield.privacyControlLevel', 'permissive'); opal.logout(opal)" + R -q -e "library(opalr); opal <- opal.login('administrator','datashield_test&', url='http://localhost:8080/'); dsadmin.set_option(opal, 'default.datashield.privacyControlLevel', 'permissive'); opal.logout(opal)" workingDirectory: $(Pipeline.Workspace)/dsBaseClient/tests/testthat/data_files displayName: 'Install dsBase to Opal, as set disclosure test options' @@ -272,7 +254,7 @@ jobs: # # "_-|arg-|smk-|datachk-|disc-|math-|expt-|expt_smk-" # testthat::test_package("$(projectName)", filter = "_-|datachk-|smk-|arg-|disc-|perf-|smk_expt-|expt-|math-", reporter = multi_rep, stop_on_failure = FALSE) - sudo R -q -e ' + sudo env PERF_PROFILE=$PERF_PROFILE R -q -e ' library(covr); dsbase.res <- covr::package_coverage( type = c("none"), @@ -361,9 +343,9 @@ jobs: # If previous steps have failed then don't run - bash: | - R -q -e "library(opalr); opal <- opal.login(username = 'administrator', password = 'datashield_test&', url = 'https://localhost:8443', opts = list(ssl_verifyhost=0, ssl_verifypeer=0)); opal.put(opal, 'system', 'conf', 'general', '_rPackage'); opal.logout(o)" + R -q -e "library(opalr); opal <- opal.login(username = 'administrator', password = 'datashield_test&', url = 'http://localhost:8080'); opal.put(opal, 'system', 'conf', 'general', '_rPackage'); opal.logout(opal)" - R -q -e "library(opalr); opal <- opal.login('administrator','datashield_test&', url='https://localhost:8443/', opts = list(ssl_verifyhost=0, ssl_verifypeer=0)); dsadmin.install_github_package(opal, 'dsDanger', username = 'datashield', ref = '6.3.4'); opal.logout(opal)" + R -q -e "library(opalr); opal <- opal.login('administrator','datashield_test&', url='http://localhost:8080/'); dsadmin.install_github_package(opal, 'dsDanger', username = 'datashield', ref = '6.3.4'); opal.logout(opal)" workingDirectory: $(Pipeline.Workspace)/dsBaseClient displayName: 'Install dsDanger package on Opal server' @@ -387,7 +369,7 @@ jobs: # testthat::testpackage uses a MultiReporter, comprised of a ProgressReporter and JunitReporter # R output and messages are redirected by sink() to test_console_output.txt # junit reporter output is to test_results.xml - sudo R -q -e ' + sudo env PERF_PROFILE=$PERF_PROFILE R -q -e ' library(covr); dsdanger.res <- covr::package_coverage( type = c("none"), @@ -524,75 +506,6 @@ jobs: displayName: 'Down Opal Docker Composition' condition: succeeded() - ##################################################################################### - # Windup phase - ##################################################################################### - - ##################################################################################### - # Output some important version numbers to file. This gets added to the testStatus - # commit so it can be parsed and used on the status table. - - bash: | - - echo 'branch:'$(branchName) >> $(datetime).txt - echo 'os:'$(lsb_release -ds) >> $(datetime).txt - echo 'R:'$(R --version | head -n 1) >> $(datetime).txt - echo 'opal:'$(opal system --opal localhost:8443 --user administrator --password "datashield_test&" --version) >> $(datetime).txt - - workingDirectory: $(Pipeline.Workspace)/logs - displayName: 'Write versions to file' - condition: succeededOrFailed() - - - ##################################################################################### - # Checkout the testStatus repo, add the results from here, push back to GH. - # TODO: Automatically pull in better email/name info from somewhere. - # TODO: More debug info in commit message - - bash: | - - # Git needs some config set to be able to push to a repo. - git config --global user.email "you@example.com" - git config --global user.name "Azure pipeline" - - # This repo is checked out in detatched head state, so reconnect it here. - git checkout master - - # It is possible that other commits have been made to the testStatus repo since it - # was checked out. i.e. other pipeline runs might have finished. - git pull - - # Make the directories if they dont already exist - mkdir --parents logs/$(projectName)/$(branchName) - mkdir --parents docs/$(projectName)/$(branchName)/latest - - cp $(Pipeline.Workspace)/logs/coveragelist.csv logs/$(projectName)/$(branchName)/ - cp $(Pipeline.Workspace)/logs/coveragelist.csv logs/$(projectName)/$(branchName)/$(datetime).csv - - cp $(Pipeline.Workspace)/logs/test_results.xml logs/$(projectName)/$(branchName)/ - cp $(Pipeline.Workspace)/logs/test_results.xml logs/$(projectName)/$(branchName)/$(datetime).xml - - cp $(Pipeline.Workspace)/logs/$(datetime).txt logs/$(projectName)/$(branchName)/ - - # Run the script to parse the results and build the html pages. - # status.py JUnit_file.xml coverage_file.csv output_file.html local_repo_path remote_repo_name branch - source/status.py logs/$(projectName)/$(branchName)/$(datetime).xml logs/$(projectName)/$(branchName)/$(datetime).csv logs/$(projectName)/$(branchName)/$(datetime).txt status.html $(Pipeline.Workspace)/$(projectName) $(projectName) $(branchName) - - cp status.html docs/$(projectName)/$(branchName)/latest/index.html - git add logs/$(projectName)/$(branchName)/coveragelist.csv - git add logs/$(projectName)/$(branchName)/test_results.xml - git add logs/$(projectName)/$(branchName)/$(datetime).xml - git add logs/$(projectName)/$(branchName)/$(datetime).csv - git add logs/$(projectName)/$(branchName)/$(datetime).txt - git add docs/$(projectName)/$(branchName)/latest/index.html - - git commit -m "Azure auto test for $(projectName)/$(branchName) @ $(datetime)" -m "Debug info:\nProjectName:$(projectName)\nBranchName:$(branchName)\nDataTime:$(datetime)" - git push - exit 0 - - workingDirectory: $(Pipeline.Workspace)/testStatus - displayName: 'Parse test results' - condition: and(eq(variables['Build.Repository.Name'], 'datashield/dsBaseClient'), ne(variables['Build.Reason'], 'PullRequest')) - - ##################################################################################### # Output the environment information to the console. This is useful for debugging. # Always do this, even if some of the above has failed or the job has been cacelled. diff --git a/tests/testthat/perf_files/armadillo_azure-pipeline.csv b/tests/testthat/perf_files/armadillo_azure-pipeline_perf-profile.csv similarity index 100% rename from tests/testthat/perf_files/armadillo_azure-pipeline.csv rename to tests/testthat/perf_files/armadillo_azure-pipeline_perf-profile.csv diff --git a/tests/testthat/perf_files/armadillo_hp-laptop_quay.csv b/tests/testthat/perf_files/armadillo_hp-laptop-quay_pipeline-perf.csv similarity index 100% rename from tests/testthat/perf_files/armadillo_hp-laptop_quay.csv rename to tests/testthat/perf_files/armadillo_hp-laptop-quay_pipeline-perf.csv diff --git a/tests/testthat/perf_files/template_perf_profile.csv b/tests/testthat/perf_files/default_template_perf-profile.csv similarity index 100% rename from tests/testthat/perf_files/template_perf_profile.csv rename to tests/testthat/perf_files/default_template_perf-profile.csv diff --git a/tests/testthat/perf_files/dslite_hp-laptop_quay.csv b/tests/testthat/perf_files/dslite_hp-laptop-quay_perf-profile.csv similarity index 100% rename from tests/testthat/perf_files/dslite_hp-laptop_quay.csv rename to tests/testthat/perf_files/dslite_hp-laptop-quay_perf-profile.csv diff --git a/tests/testthat/perf_files/opal_azure-pipeline.csv b/tests/testthat/perf_files/opal_azure-pipeline.csv deleted file mode 100644 index 9f1ae6e5e..000000000 --- a/tests/testthat/perf_files/opal_azure-pipeline.csv +++ /dev/null @@ -1,14 +0,0 @@ -"refer_name","rate","lower_tolerance","upper_tolerance" -"conndisconn::perf::simple0","0.2725","0.5","2" -"ds.abs::perf::0","2.677","0.5","2" -"ds.asInteger::perf:0","2.294","0.5","2" -"ds.asList::perf:0","4.587","0.5","2" -"ds.asNumeric::perf:0","2.185","0.5","2" -"ds.assign::perf::0","5.490","0.5","2" -"ds.class::perf::combine:0","4.760","0.5","2" -"ds.colnames::perf:0","4.218","0.5","2" -"ds.exists::perf::combine:0","11.09","0.5","2" -"ds.length::perf::combine:0","9.479","0.5","2" -"ds.mean::perf::combine:0","9.650","0.5","2" -"ds.mean::perf::split:0","11.26","0.5","2" -"void::perf::void::0","46250.0","0.5","2" diff --git a/tests/testthat/perf_files/opal_azure-pipeline_perf-profile.csv b/tests/testthat/perf_files/opal_azure-pipeline_perf-profile.csv new file mode 100644 index 000000000..c0be9081c --- /dev/null +++ b/tests/testthat/perf_files/opal_azure-pipeline_perf-profile.csv @@ -0,0 +1,29 @@ +"refer_name","rate","lower_tolerance","upper_tolerance" +"conndisconn::perf::simple0","0.1654","0.5","2" +"ds.abs::perf::0","17.30","0.5","2" +"ds.asCharacter::perf::0","16.75","0.5","2" +"ds.asDataMatrix::perf:0","17.34","0.5","2" +"ds.asInteger::perf:0","17.30","0.5","2" +"ds.asList::perf:0","16.63","0.5","2" +"ds.asLogical::perf::0","17.60","0.5","2" +"ds.asMatrix::perf::0","17.44","0.5","2" +"ds.asNumeric::perf:0","17.28","0.5","2" +"ds.assign::perf::0","10.50","0.5","2" +"ds.class::perf::combine:0","25.53","0.5","2" +"ds.colnames::perf:0","8.572","0.5","2" +"ds.completeCases::perf::combine:0","17.80","0.5","2" +"ds.dim::perf::combine:0","25.31","0.5","2" +"ds.exists::perf::combine:0","25.82","0.5","2" +"ds.exp::perf::combine:0","17.90","0.5","2" +"ds.isNA::perf::combine:0","25.43","0.5","2" +"ds.length::perf::combine:0","25.44","0.5","2" +"ds.levels::perf::combine:0","25.31","0.5","2" +"ds.log::perf::0","17.89","0.5","2" +"ds.ls::perf::combine:0","25.30","0.5","2" +"ds.mean::perf::combine:0","9.650","0.5","2" +"ds.mean::perf::split:0","11.26","0.5","2" +"ds.names::perf::combine:0","25.71","0.5","2" +"ds.numNA::perf::combine:0","25.46","0.5","2" +"ds.sqrt::perf::0","17.98","0.5","2" +"ds.unique::perf::combine:0","17.92","0.5","2" +"void::perf::void::0","52100","0.5","2" diff --git a/tests/testthat/perf_files/opal_hp-laptop-quay_perf-profile.csv b/tests/testthat/perf_files/opal_hp-laptop-quay_perf-profile.csv new file mode 100644 index 000000000..181814d3c --- /dev/null +++ b/tests/testthat/perf_files/opal_hp-laptop-quay_perf-profile.csv @@ -0,0 +1,29 @@ +"refer_name","rate","lower_tolerance","upper_tolerance" +"conndisconn::perf::simple0","0.1340","0.5","2" +"ds.abs::perf::0","2.822","0.5","2" +"ds.asCharacter::perf::0","2.393","0.5","2" +"ds.asDataMatrix::perf::0","2.554","0.5","2" +"ds.asInteger::perf:0","3.056","0.5","2" +"ds.asList::perf:0","2.649","0.5","2" +"ds.asLogical::perf::0","2.629","0.5","2" +"ds.asMatrix::perf::0","2.717","0.5","2" +"ds.asNumeric::perf:0","2.629","0.5","2" +"ds.assign::perf::0","1.709","0.5","2" +"ds.class::perf::combine:0","3.216","0.5","2" +"ds.colnames::perf:0","0.941","0.5","2" +"ds.completeCases::perf::combine:0","2.660","0.5","2" +"ds.dim::perf::combine:0","25.31","0.5","2" +"ds.exists::perf::combine:0","3.493","0.5","2" +"ds.exp::perf::combine:0","17.90","0.5","2" +"ds.isNA::perf::combine:0","25.43","0.5","2" +"ds.length::perf::combine:0","25.44","0.5","2" +"ds.levels::perf::combine:0","3.275","0.5","2" +"ds.log::perf::0","17.89","0.5","2" +"ds.ls::perf::combine:0","2.857","0.5","2" +"ds.mean::perf::combine:0","2.756","0.5","2" +"ds.mean::perf::split:0","3.547","0.5","2" +"ds.names::perf::combine:0","2.246","0.5","2" +"ds.numNA::perf::combine:0","25.46","0.5","2" +"ds.sqrt::perf::0","2.686","0.5","2" +"ds.unique::perf::combine:0","2.681","0.5","2" +"void::perf::void::0","20150","0.5","2" diff --git a/tests/testthat/perf_files/opal_hp-laptop_quay.csv b/tests/testthat/perf_files/opal_hp-laptop_quay.csv deleted file mode 100644 index 334cd62c1..000000000 --- a/tests/testthat/perf_files/opal_hp-laptop_quay.csv +++ /dev/null @@ -1,14 +0,0 @@ -"refer_name","rate","lower_tolerance","upper_tolerance" -"conndisconn::perf::simple0","0.147643461923159","0.5","2" -"ds.abs::perf::0","0.631818039001181","0.5","2" -"ds.asInteger::perf:0","0.675696161933654","0.5","2" -"ds.asList::perf:0","1.59078428438764","0.5","2" -"ds.asNumeric::perf:0","0.692813012683229","0.5","2" -"ds.assign::perf::0","1.89351857736982","0.5","2" -"ds.class::perf::combine:0","1.62870246867488","0.5","2" -"ds.colnames::perf:0","1.32209430785405","0.5","2" -"ds.exists::perf::combine:0","3.45004426293124","0.5","2" -"ds.length::perf::combine:0","2.78832377100152","0.5","2" -"ds.mean::perf::combine:0","2.7801284055162","0.5","2" -"ds.mean::perf::split:0","3.67443474363821","0.5","2" -"void::perf::void::0","18974.1385397392","0.5","2" diff --git a/tests/testthat/perf_files/default_perf_profile.csv b/tests/testthat/perf_files/unknown_default-perf-profile.csv similarity index 100% rename from tests/testthat/perf_files/default_perf_profile.csv rename to tests/testthat/perf_files/unknown_default-perf-profile.csv diff --git a/tests/testthat/perf_tests/perf_rate.R b/tests/testthat/perf_tests/perf_rate.R index 0384bf637..8d762207c 100644 --- a/tests/testthat/perf_tests/perf_rate.R +++ b/tests/testthat/perf_tests/perf_rate.R @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Copyright (c) 2024-2025 Arjuna Technologies, Newcastle upon Tyne. All rights reserved. +# Copyright (c) 2024-2026 Arjuna Technologies, Newcastle upon Tyne. All rights reserved. # # This program and the accompanying materials # are made available under the terms of the GNU Public License v3.0. @@ -8,12 +8,36 @@ # along with this program. If not, see . #------------------------------------------------------------------------------- -.perf.reference.filename <- 'perf_files/default_perf_profile.csv' +.perf.reference.filename.base.prefix <- 'perf_files/' +.perf.reference.filename.base.postfix <- '_perf-profile.csv' +.perf.reference.save.filename <- NULL .perf.reference <- NULL .load.pref <- function() { - .perf.reference <<- read.csv(.perf.reference.filename, header = TRUE, sep = ",") + if (ds.test_env$driver == "OpalDriver") + perf.reference.filename.driver.infix <- "opal" + else if (ds.test_env$driver == "ArmadilloDriver") + perf.reference.filename.driver.infix <- "armadillo" + else if (ds.test_env$driver == "DSLiteDriver") + perf.reference.filename.driver.infix <- "dslite" + else + { + perf.reference.filename.infix <- "unknown" + warning("Unknown performance profile driver, using 'unknown'") + } + + perf.profile <- base::Sys.getenv("PERF_PROFILE") + if (nchar(perf.profile) > 0) + perf.reference.filename.platform.infix <- base::tolower(perf.profile) + else + { + perf.reference.filename.platform.infix <- "default" + warning("Unknown performance profile platform, using 'default'") + } + + perf.reference.filename <- paste(.perf.reference.filename.base.prefix, perf.reference.filename.driver.infix, '_', perf.reference.filename.platform.infix, .perf.reference.filename.base.postfix, sep = "") + .perf.reference <<- read.csv(perf.reference.filename, header = TRUE, sep = ",") } perf.reference.save <- function(perf.ref.name, rate, tolerance.lower, tolerance.upper) { @@ -22,11 +46,22 @@ perf.reference.save <- function(perf.ref.name, rate, tolerance.lower, tolerance. .perf.reference[nrow(.perf.reference)+1,] <- c(perf.ref.name, rate, tolerance.lower, tolerance.upper) - write.csv(.perf.reference, .perf.reference.filename, row.names = FALSE) + if (is.null(.perf.reference.save.filename)) + { + .perf.reference.save.filename <<- base::tempfile(pattern = "perf_file_", fileext = ".csv") + message(paste0("Additional perf record added to '", .perf.reference.save.filename, "'")) + } + + write.csv(.perf.reference, .perf.reference.save.filename, row.names = FALSE) .perf.reference <<- .perf.reference } +# Obtain performance test duration from PERF_DURATION_SEC environment variable, otherwise default.duration argument, otherwise "30". +perf.testduration <- function(default.duration = 30) { + base::as.integer(base::Sys.getenv("PERF_DURATION_SEC", unset = base::as.character(default.duration))) +} + perf.reference.rate <- function(perf.ref.name) { if (is.null(.perf.reference)) .load.pref()