#### integration testing This repository contains integration tests that validate the argo stack. It leverages the argopkgs repo, but overrides some sources in it with their master branch counterparts. see file `default.nix` for details. The intended usage is to override (some of) the source(s) with WIP version(s), as part of development or continuous integration. This gitlab CI snippets shows how to do this on a nix-enabled runner. Mind that this setup tracks argotest master. ### Usage - Get Nix: `curl https://nixos.org/nix/install | sh` - Use the 'argotest' nix function to provide an environment, among which the `argotk.hs` tool, which runs tests. For example, we can run default tests using pinned `argopkgs` sources like so: ``` {.nix} nix-shell -E '{ argotest ? (builtins.fetchGit { url = https://xgitlab.cels.anl.gov/argo/argotest.git; ref="master";}) }: (import argotest {}).test' --run 'argotk.hs helloworld' ``` Alternatively, one can get rid of the `--run` option in order to be provided with an environment in which all the argo components should be in the `PATH`, along with the `argotk.hs` tool. The arguments to the argotest function are defined in the default.nix file in this repository. They all have default values. For a more involved example, let's run a test in a custom environment. Here, we'll run the 'helloworld' test in an environment that uses a local `nrm` source, the master `libnrm` branch and a specific revision of the `containers` branch. We'l'l use the master `argotest` branch for that. ``` {.nix} nix-shell -E '{ argotest ? (builtins.fetchGit { url = https://xgitlab.cels.anl.gov/argo/argotest.git; ref="master";}) }: (import argotest { nrm-src = /path/to/nrm; libnrm-src = builtins.fetchGit { url = https://xgitlab.cels.anl.gov/argo/libnrm.git; ref="master"; }; containers-src = builtins.fetchGit { url = https://xgitlab.cels.anl.gov/argo/containers.git; ref="fancy-branch-name"; rev="commit-revisions-string"; }; }).test' --run 'argotk.hs helloworld' ``` *WARNING* There are a few things one has to be aware of using this workflow: - Builds may fail if the local source repositories are dirty with old build files. - Builds may fail if `PWD` is in a `nosuid`-enabled filesystem. - Without using the `rev` argument, the `builtins.fetchGit` nix command prefetches and buffers its output, with an expiration time that ranges ten minutes by default. Use a local checkout if you need to modify some of these sources on the fly: ``` {.nix} nix-shell -E '{ argotest ? /path/to/argotest }: (import argotest { nrm-src = /path/to/nrm; # libnrm-src left at default argument value (inherits from argopkgs) # containers-src left at default argument value (inherits from argopkgs) }).test' --run 'argotk.hs helloworld' ``` ### Example CI setup For example, we could setup the CI for the `containers` repo like: ``` {.yml} integration.test: stage: test script: - nix-shell -E '{ argotest ? (builtins.fetchGit { url = https://xgitlab.cels.anl.gov/argo/argotest.git; ref="master";}) }: (import argotest { containers-src = ./. ; }).test' --run 'argotk.hs helloworld' artifacts: paths: - argotest/_output/cmd_err.log - argotest/_output/cmd_out.log - argotest/_output/daemon_out.log - argotest/_output/daemon_out.log - argotest/_output/nrm.log - argotest/_output/time.log expire_in: 1 week except: - /^wip\/.*/ - /^WIP\/.*/ tags: - integration ``` ### Argotk.hs usage: ``` {.bash} argotk.hs --help ``` Output: ``` {.txt} Usage: argotk.hs COMMAND Available options: COMMAND Type of action to run -h,--help Show this help text Available commands: clean Clean sockets, logfiles. daemon Set up and launch the daemon in synchronous mode, with properly cleaned sockets, logfiles. application Setup stack and run an arbitrary command in a container. helloworld Test 1: Setup stack and check that a hello world app sends message back to cmd. perfwrapper Test 2: Setup stack and check that a hello world app sends message back to cmd. Uses argo-perf-wrapper. ``` ``` {.bash} argotk.hs helloworld --help ``` ``` {.txt} Usage: argotk.hs helloworld Test 1: Setup stack and check that a hello world app sends message back to cmd. Available options: -h,--help Show this help text ``` ``` {.bash} argotk.hs application --help ``` ``` {.txt} Usage: argotk.hs application COMMAND Setup stack and run an arbitrary command in a container. Available options: COMMAND Application to run inside the container -h,--help Show this help text ``` ``` {.bash} argotk.hs daemon --help ``` ``` {.txt} Usage: argotk.hs daemon Set up and launch the daemon in synchronous mode, with properly cleaned sockets, logfiles. Available options: -h,--help Show this help text ``` ### Hacking - edit `.README.md` in place of README.md. - the ./shake.hs build file takes care of a few things for the development workflow (readme and completion generation).