Alan King
Senior Software Developer
iRODS Consortium
July 6, 2022
iRODS User Group Meeting 2022
KU Leuven, Belgium
iRODS Development and Testing Environment
iRODS Development and Testing Environment
Overview
- Motivation
- History
- Limitations of the past
- Development Environment
- Testing Environment
- Demo
- Future Work
Motivation
Tests should be meaningful and consistent.
Running tests should be reliable and accessible.
Passing tests build confidence in the changes developers make to software, asserting the correctness of the changes and of the entire system.
History of Build-and-Test Systems at iRODS
- v1 - July 2011: Python → Node.js → RabbitMQ → Celery → Eucalyptus
- v2 - October 2012: Python → Node.js → ssh → OpenStack
- v3 - January 2013: Hudson → Python → OpenStack
- v4 - October 2013: Hudson → Python → vSphere long-running VMs
- v5 - Spring 2015: Jenkins → Python → Ansible → zone_bundles → vSphere dynamic VMs
- v6 - Spring 2017: Jenkins → Python → vSphere dynamic VMs → build/test hooks
- v7 - Summer 2019: Docker → Jenkins → Python → Docker → build/test hooks
Limitations of the past
- Vendor lock-in (Jenkins)
- Difficult to manage test results and built package output
- Docker image explosion
- Opaque business logic
v8 - 2021/2022
iRODS Development Environment
https://github.com/irods/irods_development_environment
Set of Dockerized applications used to build, run, and debug packages for the iRODS server, iCommands, and plugins.
iRODS Testing Environment
https://github.com/irods/irods_testing_environment
Scripts built on python library which uses Docker Compose to stand up iRODS zones in various configurations and run tests.
Basic Build-and-Test Workflow
source code
↓
↓
packages
↓
↓
test results
irods_testing_environment
irods_development_environment
iRODS Development Environment
Features:
- Package builders for iRODS, plugins, and externals
- Debuggers
Advantages:
- No cloning or copying repositories
- Build cache allows for faster iteration
- Consistent process for development and release
Basic Build-and-Test Workflow
source code
↓
↓
packages
↓
↓
test results
irods_testing_environment
irods_development_environment
iRODS Testing Environment
Features:
- Parallel/remote test execution for iRODS and plugins
- Multi-server and federated iRODS zones
- Extensible python library for custom scripts
- Stand up iRODS zone for any (recent-ish) released version
Advantages:
- Precision controls for running tests in parallel
- Convenient way to reproduce issues
- Consistent process for bench and automated testing
iRODS Testing Environment
$ python run_core_tests.py --project-directory projects/ubuntu-20.04/ubuntu-20.04-postgres-10.12 \
--irods-package-directory ~/hdd/builds/irods_packages/4-3-stable/ubuntu-20.04 \
--concurrent-test-executor-count 4 -v
<snip>
2022-06-23 15:38:30,381 ERROR - [ubuntu-2004-postgres-1012_irods-catalog-provider_2]: cmd succeeded [['python3', '/var/lib/irods/scripts/run_tests.py', '--run_specific_test', 'test_irm', '--xml_output']]
2022-06-23 15:39:12,397 ERROR - [ubuntu-2004-postgres-1012_irods-catalog-provider_4]: cmd succeeded [['python3', '/var/lib/irods/scripts/run_tests.py', '--run_specific_test', 'test_ireg', '--xml_output']]
2022-06-23 15:39:17,437 ERROR - [ubuntu-2004-postgres-1012_irods-catalog-provider_4]: cmd succeeded [['python3', '/var/lib/irods/scripts/run_tests.py', '--run_specific_test', 'test_irmtrash', '--xml_output']]
2022-06-23 15:40:43,075 ERROR - [ubuntu-2004-postgres-1012_irods-catalog-provider_4]: cmd succeeded [['python3', '/var/lib/irods/scripts/run_tests.py', '--run_specific_test', 'test_iscan', '--xml_output']]
2022-06-23 15:41:27,853 ERROR - [ubuntu-2004-postgres-1012_irods-catalog-provider_4]: cmd succeeded [['python3', '/var/lib/irods/scripts/run_tests.py', '--run_specific_test', 'test_itouch', '--xml_output']]
2022-06-23 15:42:17,991 ERROR - [ubuntu-2004-postgres-1012_irods-catalog-provider_4]: cmd succeeded [['python3', '/var/lib/irods/scripts/run_tests.py', '--run_specific_test', 'test_iuserinfo', '--xml_output']]
2022-06-23 15:42:21,349 ERROR - [ubuntu-2004-postgres-1012_irods-catalog-provider_4]: cmd succeeded [['python3', '/var/lib/irods/scripts/run_tests.py', '--run_specific_test', 'test_negotiation', '--xml_output']]
2022-06-23 15:42:49,652 ERROR - [ubuntu-2004-postgres-1012_irods-catalog-provider_4]: cmd succeeded [['python3', '/var/lib/irods/scripts/run_tests.py', '--run_specific_test', 'test_quotas', '--xml_output']]
2022-06-23 15:44:15,902 ERROR - [ubuntu-2004-postgres-1012_irods-catalog-provider_3]: cmd succeeded [['python3', '/var/lib/irods/scripts/run_tests.py', '--run_specific_test', 'test_resource_types.Test_Resource_CompoundWithMockarchive', '--xml_output']]
2022-06-23 15:45:35,288 ERROR - [ubuntu-2004-postgres-1012_irods-catalog-provider_1]: cmd succeeded [['python3', '/var/lib/irods/scripts/run_tests.py', '--run_specific_test', 'test_all_rules', '--xml_output']]
2022-06-23 15:49:06,316 ERROR - [ubuntu-2004-postgres-1012_irods-catalog-provider_2]: cmd succeeded [['python3', '/var/lib/irods/scripts/run_tests.py', '--run_specific_test', 'test_irsync', '--xml_output']]
2022-06-23 15:49:19,821 ERROR - [ubuntu-2004-postgres-1012_irods-catalog-provider_2]: cmd succeeded [['python3', '/var/lib/irods/scripts/run_tests.py', '--run_specific_test', 'test_isysmeta', '--xml_output']]
2022-06-23 15:49:39,938 ERROR - [ubuntu-2004-postgres-1012_irods-catalog-provider_2]: cmd succeeded [['python3', '/var/lib/irods/scripts/run_tests.py', '--run_specific_test', 'test_itrim', '--xml_output']]
2022-06-23 15:49:46,930 ERROR - [ubuntu-2004-postgres-1012_irods-catalog-provider_1]: cmd succeeded [['python3', '/var/lib/irods/scripts/run_tests.py', '--run_specific_test', 'test_control_plane', '--xml_output']]
2022-06-23 15:49:52,223 ERROR - [ubuntu-2004-postgres-1012_irods-catalog-provider_2]: cmd succeeded [['python3', '/var/lib/irods/scripts/run_tests.py', '--run_specific_test', 'test_load_balanced_suite', '--xml_output']]
2022-06-23 15:49:55,635 ERROR - [ubuntu-2004-postgres-1012_irods-catalog-provider_2]: cmd succeeded [['python3', '/var/lib/irods/scripts/run_tests.py', '--run_specific_test', 'test_prep_genquery_iterator', '--xml_output']]
<snip>
2022-06-23 18:19:10,572 ERROR - ==== begin test run results ====
-----
results for [ubuntu-2004-postgres-1012_irods-catalog-provider_1]
passed tests:
[[1697.3373]s] [test_all_rules]
[[ 251.6414]s] [test_control_plane]
[[ 89.0497]s] [test_ibun]
[[3715.5025]s] [test_icommands_file_operations]
[[ 14.8783]s] [test_igroupadmin]
[[ 18.9958]s] [test_ilsresc]
[[ 26.3037]s] [test_imeta_interactive]
[[ 30.7978]s] [test_ipasswd]
[[ 5.0171]s] [test_ipwd]
[[1463.7713]s] [test_irepl]
[[ 9.3546]s] [test_irodsctl]
[[ 58.6852]s] [test_istream]
[[ 35.5464]s] [test_itree]
[[ 7.3381]s] [test_izonereport]
[[ 261.9476]s] [test_native_rule_engine_plugin]
[[ 14.3952]s] [test_resource_configuration]
[[ 837.4747]s] [test_resource_types.Test_Resource_Deferred]
[[ 960.3886]s] [test_resource_types.Test_Resource_Random]
[[1379.2288]s] [test_resource_types.Test_Resource_ReplicationToTwoCompound]
[[ 27.3775]s] [test_resource_types.Test_Resource_WeightedPassthru]
[[ 7.5812]s] [test_special_collections]
skipped tests:
failed tests:
return code:[0]
time elapsed: [1.091e+04]seconds ([ 3]hours [ 1.877]minutes)
-----
-----
results for [ubuntu-2004-postgres-1012_irods-catalog-provider_2]
passed tests:
[[ 3.2683]s] [test_auth]
[[ 385.5667]s] [test_delay_queue]
[[ 13.5900]s] [test_icd]
[[ 178.9789]s] [test_icp]
[[ 4.5107]s] [test_ihelp]
[[ 27.5451]s] [test_imeta_admin_mode]
[[ 273.2416]s] [test_imeta_set]
[[ 362.5961]s] [test_iphymv]
[[ 5.4457]s] [test_iqmod]
[[ 17.6846]s] [test_irm]
[[ 635.9353]s] [test_irsync]
[[ 13.5050]s] [test_isysmeta]
[[ 20.1163]s] [test_itrim]
[[ 12.2845]s] [test_load_balanced_suite]
[[ 3.4121]s] [test_prep_genquery_iterator]
[[1037.5428]s] [test_resource_types.Test_Resource_Compound]
[[ 899.7080]s] [test_resource_types.Test_Resource_MultiLayered]
[[ 965.3594]s] [test_resource_types.Test_Resource_RandomWithinRandom]
[[1485.8112]s] [test_resource_types.Test_Resource_ReplicationToTwoCompoundResourcesWithPreferArchive]
[[ 66.3305]s] [test_rule_engine_plugin_framework]
[[ 23.2960]s] [test_ssl]
skipped tests:
failed tests:
return code:[0]
time elapsed: [6.436e+03]seconds ([ 1]hours [ 47.26]minutes)
-----
-----
results for [ubuntu-2004-postgres-1012_irods-catalog-provider_3]
passed tests:
[[ 22.8854]s] [test_catalog]
[[ 18.0757]s] [test_dynamic_peps]
[[ 161.7720]s] [test_ichksum]
[[ 3.4590]s] [test_iexit]
[[ 13.3650]s] [test_ilocate]
[[ 18.2060]s] [test_imeta_error_handling]
[[ 18.8343]s] [test_imkdir]
[[ 46.6802]s] [test_iput]
[[ 121.4816]s] [test_iquest]
[[ 53.1015]s] [test_irmdir]
[[ 14.9655]s] [test_irule]
[[ 136.8253]s] [test_iticket]
[[ 30.0276]s] [test_iunreg]
[[ 77.1380]s] [test_misc]
[[ 3.0893]s] [test_python_rule_engine_plugin]
[[ 878.0375]s] [test_resource_types.Test_Resource_CompoundWithMockarchive]
[[ 723.4627]s] [test_resource_types.Test_Resource_NonBlocking]
[[1060.6564]s] [test_resource_types.Test_Resource_RandomWithinReplication]
[[1159.1791]s] [test_resource_types.Test_Resource_ReplicationWithinReplication]
[[ 4.4386]s] [test_rule_engine_plugin_passthrough]
[[ 14.9310]s] [test_stacktrace]
skipped tests:
failed tests:
return code:[0]
time elapsed: [4.581e+03]seconds ([ 1]hours [ 16.34]minutes)
-----
-----
results for [ubuntu-2004-postgres-1012_irods-catalog-provider_4]
passed tests:
[[ 30.1313]s] [test_collection_mtime]
[[ 860.5208]s] [test_iadmin]
[[ 59.1282]s] [test_ichmod]
[[ 13.1591]s] [test_ifsck]
[[ 58.4915]s] [test_ils]
[[ 9.2195]s] [test_imeta_help]
[[ 34.9259]s] [test_imv]
[[ 92.3246]s] [test_iput_options]
[[ 156.5395]s] [test_ireg]
[[ 5.0398]s] [test_irmtrash]
[[ 85.6373]s] [test_iscan]
[[ 44.7783]s] [test_itouch]
[[ 50.1372]s] [test_iuserinfo]
[[ 3.3577]s] [test_negotiation]
[[ 28.3033]s] [test_quotas]
[[1258.4760]s] [test_resource_types.Test_Resource_CompoundWithUnivmss]
[[ 777.6891]s] [test_resource_types.Test_Resource_Passthru]
[[2057.2540]s] [test_resource_types.Test_Resource_Replication]
[[ 874.8417]s] [test_resource_types.Test_Resource_Unixfilesystem]
[[ 924.4358]s] [test_rulebase]
[[ 77.2080]s] [test_symlink_operations]
skipped tests:
failed tests:
return code:[0]
time elapsed: [7.502e+03]seconds ([ 2]hours [ 5.027]minutes)
-----
All tests passed! :)
time elapsed: [10912.6214]seconds ([ 3]hours [ 1.8770]minutes)
==== end of test run results ====
Future Work and Dreams
- Web application
- Automation/CI
- Client build/test
- Environment reproduction (zone report)
- Execution environment agnosticism (Docker, podman, VMs)
- Orchestration
The Build-and-Test Monitor
The Build-and-Test Monitor
The Build-and-Test Monitor
Thanks for listening
UGM 2022 - iRODS Development and Testing Environment
By Alan King
UGM 2022 - iRODS Development and Testing Environment
- 655