Buildsystem for Automated Testing
A build system such as
Jenkins can be used for test automation. This helps to detect issues in case of software changes. The system can not only be used to test the FESA framework itself but also FESA software. Automated tests can be scheduled on a daily basis or after source code repository changes. In case of conflicts the last committer can be notified automatically.
Requirements
For unit-testing the Framework
- makefiles
- libraries / headers for FESA framework dependencies (boost/zmq/cmw/cmx)
- libraries / headers for the FESA core framework.
- gtest installation (FESA 8.0.0 uses gtest 1.10.0, and a different build procedure)
For unit-testing FESA classes
- FESA model
- FESA code generation
- a command line tool to synchronize FESA class source code from FESA designs
For integration-testing of FESA Deploy Units (a complete FESA installation)
- resources / configuration files
- a shell to run the FESA software
- a shell to run the e.g. google test
- Mocked hardware interface, Simulated Timing
Workspace Build Solution
The Jenkins server is used to build all jobs from source. The build artifacts of a job are stored in that job's workspace. Jobs that depend on the artifacts generated by a previous job mut be configured to use the previous job's workspace.
The jenkins label "el7fesa" is a single node reserved for FESA. Limiting all jobs to a single node allows jobs to share artifacts via workspaces.
Location of dependencies
For Example cmw-data is normally installed at /opt/cern/cmw/cmw-data/x.x.x
On the buildserver, it is at ($jenkinsroot)/fesa3/cmw/cmw-data-cpp/build/
In a job that depends on cmw-data, makefile variables must be overrriden to point at this location
Version of dependencies:
A FESA release requires specific versions of dependencies that need to be carried over to checkout specific git tags in the dependency jobs
Jobs
Status for FESA3 8.0.0:
https://builder.acc.gsi.de/jenkins/job/fesa3/
Todo1 versioning of CMW dependencies, saftlib, device-server-framework, fesa-core gtest
Todo2 codegen, model, fesa3 commandline
Todo3 resources, build pipelines
Alternative Approaches
Building artifacts and storing to NFS (binary repository)
RPM installation of stable FESA releases on build server
Containers
- Container for specific FESA Release version / architecture (for FESA class testing)
- Containers for stable dependencies only
Open Issues
- how to run tests which involve communication with hardware?
- instance files for buildserver?
- running without the database
Infos