Our Journey in Automated Testing of E4S Software Stack via Buildtest
Shahzeb Siddiqui
HPC Programming Environment Engineer
Dec 20th 2023
Our Journey begins in 2020
Team Members
ECP Software Integration Team:
E4S Team:
External Contributions
ECP Software Integration Team
Shahzeb Siddiqui
Erik Palmer
Justin Cook
Matt Belhorn
Jamie Finney
Ryan Prout
2.4.4.01 Software Integration
2.4.4.04 Continuous Integration
2.4.4.03 Shasta Testing
2.4.4.05 HPCM/Slingshot Testing
Sean Koyama
E4S Deployment Timeline
Dec 2023�23.08 on Perlmutter
Aug 2023�23.05 on Perlmutter
October 2020�First release of E4S: 20.10�20.10 on Summit
January 2021�20.10 on Cori
January 2022�21.11 on Perlmutter
21.02
21.05
21.08
22.02
22.11
August 2021�21.05 on Arcticus�21.05 on Summit
November 2021�21.08 on Arcticus
December 2021�21.11 on Arcticus
June 2021�21.02 on Cori
October 2021�21.05 on Cori�21.08 on Summit
March 2022�22.02 on Cori
July 2022�22.05 on Perlmutter�22.05 on Summit�22.05 on Arcticus
September 2022�22.08 on Arcticus
May 2022�22.02 on Crusher, Frontier, Summit
August 2022�22.05 on Crusher, Frontier
22.08
21.11
22.05
May 2021�21.02 on Summit
November 2022�22.08 on Sunspot
December 2022�22.11 on Sunspot
23.02
23.05
23.08
Meeting our Objectives for ECP
Requirements
Execution Plan
E4S Presence at NERSC
Buildtest-NERSC: An Automated E4S Testing Infrastructure
Collaboration with Kitware we picked CDASH for publishing test results
Continuous Automated Testing Workflow
E4S Testsuite: A standalone testsuite for validating E4S Packages
E4S Testsuite comes with several scripts
An example output of E4S Testsuite on Cori
Buildtest
Buildtest: A HPC Testing Framework
Key Features
New Features
Buildtest comes with many features
Installing Buildtest is Easy
Build & Test Pipeline
What does a typical build look like in Buildtest
Example Test in Buildtest
Name of Test
Schema Type
Description of Test
Name of Executor
Tag Name
Script
Declaration of tests
Buildtest supports several criteria for status check on how test will PASS
Test Status based on Regular Expression
Status Check by Return Code Match
Status Check by File Checks
Multi Test Generation by Compiler
Batch Submission Support
Running Test on Multiple Executors
Performance Checks
Assert Greater Equal
Running Test in Containers (Experimental Feature)
Buildtest Features
Querying the Buildspec Cache
Interacting with buildspecs
Query Test Results
Querying Report File
Integration with CDASH
Buildtest Spack Integration
Spack support in buildtest
Installing Spack Packages from a buildspec
Use Spack schema
Root of spack
List of specs to install
Running test via spack test
Wrap Up
Challenges we faced
Community Impact
Concluding Remarks
What’s Next
Thank You
References
Buildtest
E4S
Tutorial Logistic
Join Slack
Install Buildtest on Perlmutter
What you will be Learning Today
Logistics
Reference Slides
Discover Buildspecs
Test Dependency By State and Return Code
Metrics Exceptions and mismatch
Assertion Range with lower and upper bound
Equality Check
Contains and Not Contains
Test Dependency
Custom Status By Executors
Creating spack environment via spack.yaml
Removing spack environments
Specify Pre and Post Commands
Creating spack environments
Create spack environment
Options to spack install
Find spack compilers
Activate spack environment
Example of installing and testing spack packages in a spack environment
View all builds
View Output of Historical Builds
Getting the path to tests
Querying Test Report
Automate Compiler Testing
Max Pend Time and Poll Interval
Coloring output
Test Examples
Spack Test running hdf5
AMReX Test
LibEnsemble Test
E4S Testsuite running Kokkos